Cesium.js 4.7 MB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477144781447914480144811448214483144841448514486144871448814489144901449114492144931449414495
  1. /**
  2. * @license
  3. * Cesium - https://github.com/CesiumGS/cesium
  4. * Version 1.112
  5. *
  6. * Copyright 2011-2022 Cesium Contributors
  7. *
  8. * Licensed under the Apache License, Version 2.0 (the "License");
  9. * you may not use this file except in compliance with the License.
  10. * You may obtain a copy of the License at
  11. *
  12. * http://www.apache.org/licenses/LICENSE-2.0
  13. *
  14. * Unless required by applicable law or agreed to in writing, software
  15. * distributed under the License is distributed on an "AS IS" BASIS,
  16. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  17. * See the License for the specific language governing permissions and
  18. * limitations under the License.
  19. *
  20. * Columbus View (Pat. Pend.)
  21. *
  22. * Portions licensed separately.
  23. * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details.
  24. */
  25. var Cesium=(()=>{var C_e=Object.create;var iA=Object.defineProperty;var V_e=Object.getOwnPropertyDescriptor;var L_e=Object.getOwnPropertyNames;var R_e=Object.getPrototypeOf,Z_e=Object.prototype.hasOwnProperty;var Q0=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var yc=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),G_e=(e,t)=>{for(var n in t)iA(e,n,{get:t[n],enumerable:!0})},k8=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of L_e(t))!Z_e.call(e,o)&&o!==n&&iA(e,o,{get:()=>t[o],enumerable:!(i=V_e(t,o))||i.enumerable});return e};var T=(e,t,n)=>(n=e!=null?C_e(R_e(e)):{},k8(t||!e||!e.__esModule?iA(n,"default",{value:e,enumerable:!0}):n,e)),E_e=e=>k8(iA({},"__esModule",{value:!0}),e);var S=yc(()=>{globalThis.CESIUM_WORKERS=atob("dmFyIENlc2l1bVdvcmtlcnM9KCgpPT57dmFyIEdTPU9iamVjdC5jcmVhdGU7dmFyIEJsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgelM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt2YXIgalM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7dmFyIEhTPU9iamVjdC5nZXRQcm90b3R5cGVPZixxUz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBEbz0odD0+dHlwZW9mIHJlcXVpcmU8InUiP3JlcXVpcmU6dHlwZW9mIFByb3h5PCJ1Ij9uZXcgUHJveHkodCx7Z2V0OihlLG4pPT4odHlwZW9mIHJlcXVpcmU8InUiP3JlcXVpcmU6ZSlbbl19KTp0KShmdW5jdGlvbih0KXtpZih0eXBlb2YgcmVxdWlyZTwidSIpcmV0dXJuIHJlcXVpcmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Rocm93IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrdCsnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KSxpMT10PT5lPT57dmFyIG49dFtlXTtpZihuKXJldHVybiBuKCk7dGhyb3cgbmV3IEVycm9yKCJNb2R1bGUgbm90IGZvdW5kIGluIGJ1bmRsZTogIitlKX07dmFyIFo9KHQsZSk9PigpPT4odCYmKGU9dCh0PTApKSxlKTt2YXIgVW49KHQsZSk9PigpPT4oZXx8dCgoZT17ZXhwb3J0czp7fX0pLmV4cG9ydHMsZSksZS5leHBvcnRzKSxtZT0odCxlKT0+e2Zvcih2YXIgbiBpbiBlKUJsKHQsbix7Z2V0OmVbbl0sZW51bWVyYWJsZTohMH0pfSxzMT0odCxlLG4sbyk9PntpZihlJiZ0eXBlb2YgZT09Im9iamVjdCJ8fHR5cGVvZiBlPT0iZnVuY3Rpb24iKWZvcihsZXQgciBvZiBqUyhlKSkhcVMuY2FsbCh0LHIpJiZyIT09biYmQmwodCxyLHtnZXQ6KCk9PmVbcl0sZW51bWVyYWJsZTohKG89elMoZSxyKSl8fG8uZW51bWVyYWJsZX0pO3JldHVybiB0fTt2YXIgbW89KHQsZSxuKT0+KG49dCE9bnVsbD9HUyhIUyh0KSk6e30sczEoZXx8IXR8fCF0Ll9fZXNNb2R1bGU/QmwobiwiZGVmYXVsdCIse3ZhbHVlOnQsZW51bWVyYWJsZTohMH0pOm4sdCkpLEtTPXQ9PnMxKEJsKHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0KTtmdW5jdGlvbiBXUyh0KXtyZXR1cm4gdCE9bnVsbH12YXIgaCxhdD1aKCgpPT57aD1XU30pO2Z1bmN0aW9uIFVzKHQpe3RoaXMubmFtZT0iRGV2ZWxvcGVyRXJyb3IiLHRoaXMubWVzc2FnZT10O2xldCBlO3RyeXt0aHJvdyBuZXcgRXJyb3J9Y2F0Y2gobil7ZT1uLnN0YWNrfXRoaXMuc3RhY2s9ZX12YXIgQixIdD1aKCgpPT57YXQoKTtoKE9iamVjdC5jcmVhdGUpJiYoVXMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxVcy5wcm90b3R5cGUuY29uc3RydWN0b3I9VXMpO1VzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2xldCB0PWAke3RoaXMubmFtZX06ICR7dGhpcy5tZXNzYWdlfWA7cmV0dXJuIGgodGhpcy5zdGFjaykmJih0Kz1gCiR7dGhpcy5zdGFjay50b1N0cmluZygpfWApLHR9O1VzLnRocm93SW5zdGFudGlhdGlvbkVycm9yPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IFVzKCJUaGlzIGZ1bmN0aW9uIGRlZmluZXMgYW4gaW50ZXJmYWNlIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4iKX07Qj1Vc30pO2Z1bmN0aW9uIFhTKHQpe3JldHVybmAke3R9IGlzIHJlcXVpcmVkLCBhY3R1YWwgdmFsdWUgd2FzIHVuZGVmaW5lZGB9ZnVuY3Rpb24gamModCxlLG4pe3JldHVybmBFeHBlY3RlZCAke259IHRvIGJlIHR5cGVvZiAke2V9LCBhY3R1YWwgdHlwZW9mIHdhcyAke3R9YH12YXIgWG4seSxZdD1aKCgpPT57YXQoKTtIdCgpO1huPXt9O1huLnR5cGVPZj17fTtYbi5kZWZpbmVkPWZ1bmN0aW9uKHQsZSl7aWYoIWgoZSkpdGhyb3cgbmV3IEIoWFModCkpfTtYbi50eXBlT2YuZnVuYz1mdW5jdGlvbih0LGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBCKGpjKHR5cGVvZiBlLCJmdW5jdGlvbiIsdCkpfTtYbi50eXBlT2Yuc3RyaW5nPWZ1bmN0aW9uKHQsZSl7aWYodHlwZW9mIGUhPSJzdHJpbmciKXRocm93IG5ldyBCKGpjKHR5cGVvZiBlLCJzdHJpbmciLHQpKX07WG4udHlwZU9mLm51bWJlcj1mdW5jdGlvbih0LGUpe2lmKHR5cGVvZiBlIT0ibnVtYmVyIil0aHJvdyBuZXcgQihqYyh0eXBlb2YgZSwibnVtYmVyIix0KSl9O1huLnR5cGVPZi5udW1iZXIubGVzc1RoYW49ZnVuY3Rpb24odCxlLG4pe2lmKFhuLnR5cGVPZi5udW1iZXIodCxlKSxlPj1uKXRocm93IG5ldyBCKGBFeHBlY3RlZCAke3R9IHRvIGJlIGxlc3MgdGhhbiAke259LCBhY3R1YWwgdmFsdWUgd2FzICR7ZX1gKX07WG4udHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzPWZ1bmN0aW9uKHQsZSxuKXtpZihYbi50eXBlT2YubnVtYmVyKHQsZSksZT5uKXRocm93IG5ldyBCKGBFeHBlY3RlZCAke3R9IHRvIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAke259LCBhY3R1YWwgdmFsdWUgd2FzICR7ZX1gKX07WG4udHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbj1mdW5jdGlvbih0LGUsbil7aWYoWG4udHlwZU9mLm51bWJlcih0LGUpLGU8PW4pdGhyb3cgbmV3IEIoYEV4cGVjdGVkICR7dH0gdG8gYmUgZ3JlYXRlciB0aGFuICR7bn0sIGFjdHVhbCB2YWx1ZSB3YXMgJHtlfWApfTtYbi50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHM9ZnVuY3Rpb24odCxlLG4pe2lmKFhuLnR5cGVPZi5udW1iZXIodCxlKSxlPG4pdGhyb3cgbmV3IEIoYEV4cGVjdGVkICR7dH0gdG8gYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICR7bn0sIGFjdHVhbCB2YWx1ZSB3YXMgJHtlfWApfTtYbi50eXBlT2Yub2JqZWN0PWZ1bmN0aW9uKHQsZSl7aWYodHlwZW9mIGUhPSJvYmplY3QiKXRocm93IG5ldyBCKGpjKHR5cGVvZiBlLCJvYmplY3QiLHQpKX07WG4udHlwZU9mLmJvb2w9ZnVuY3Rpb24odCxlKXtpZih0eXBlb2YgZSE9ImJvb2xlYW4iKXRocm93IG5ldyBCKGpjKHR5cGVvZiBlLCJib29sZWFuIix0KSl9O1huLnR5cGVPZi5iaWdpbnQ9ZnVuY3Rpb24odCxlKXtpZih0eXBlb2YgZSE9ImJpZ2ludCIpdGhyb3cgbmV3IEIoamModHlwZW9mIGUsImJpZ2ludCIsdCkpfTtYbi50eXBlT2YubnVtYmVyLmVxdWFscz1mdW5jdGlvbih0LGUsbixvKXtpZihYbi50eXBlT2YubnVtYmVyKHQsbiksWG4udHlwZU9mLm51bWJlcihlLG8pLG4hPT1vKXRocm93IG5ldyBCKGAke3R9IG11c3QgYmUgZXF1YWwgdG8gJHtlfSwgdGhlIGFjdHVhbCB2YWx1ZXMgYXJlICR7bn0gYW5kICR7b31gKX07eT1Ybn0pO2Z1bmN0aW9uIGMxKHQsZSl7cmV0dXJuIHQ/P2V9dmFyIHgsSXQ9WigoKT0+e2MxLkVNUFRZX09CSkVDVD1PYmplY3QuZnJlZXplKHt9KTt4PWMxfSk7dmFyIGYxPVVuKChDVixhMSk9Pnt2YXIgRWk9ZnVuY3Rpb24odCl7dD09bnVsbCYmKHQ9bmV3IERhdGUoKS5nZXRUaW1lKCkpLHRoaXMuTj02MjQsdGhpcy5NPTM5Nyx0aGlzLk1BVFJJWF9BPTI1Njc0ODM2MTUsdGhpcy5VUFBFUl9NQVNLPTIxNDc0ODM2NDgsdGhpcy5MT1dFUl9NQVNLPTIxNDc0ODM2NDcsdGhpcy5tdD1uZXcgQXJyYXkodGhpcy5OKSx0aGlzLm10aT10aGlzLk4rMSx0LmNvbnN0cnVjdG9yPT1BcnJheT90aGlzLmluaXRfYnlfYXJyYXkodCx0Lmxlbmd0aCk6dGhpcy5pbml0X3NlZWQodCl9O0VpLnByb3RvdHlwZS5pbml0X3NlZWQ9ZnVuY3Rpb24odCl7Zm9yKHRoaXMubXRbMF09dD4+PjAsdGhpcy5tdGk9MTt0aGlzLm10aTx0aGlzLk47dGhpcy5tdGkrKyl7dmFyIHQ9dGhpcy5tdFt0aGlzLm10aS0xXV50aGlzLm10W3RoaXMubXRpLTFdPj4+MzA7dGhpcy5tdFt0aGlzLm10aV09KCgodCY0Mjk0OTAxNzYwKT4+PjE2KSoxODEyNDMzMjUzPDwxNikrKHQmNjU1MzUpKjE4MTI0MzMyNTMrdGhpcy5tdGksdGhpcy5tdFt0aGlzLm10aV0+Pj49MH19O0VpLnByb3RvdHlwZS5pbml0X2J5X2FycmF5PWZ1bmN0aW9uKHQsZSl7dmFyIG4sbyxyO2Zvcih0aGlzLmluaXRfc2VlZCgxOTY1MDIxOCksbj0xLG89MCxyPXRoaXMuTj5lP3RoaXMuTjplO3I7ci0tKXt2YXIgaT10aGlzLm10W24tMV1edGhpcy5tdFtuLTFdPj4+MzA7dGhpcy5tdFtuXT0odGhpcy5tdFtuXV4oKChpJjQyOTQ5MDE3NjApPj4+MTYpKjE2NjQ1MjU8PDE2KSsoaSY2NTUzNSkqMTY2NDUyNSkrdFtvXStvLHRoaXMubXRbbl0+Pj49MCxuKyssbysrLG4+PXRoaXMuTiYmKHRoaXMubXRbMF09dGhpcy5tdFt0aGlzLk4tMV0sbj0xKSxvPj1lJiYobz0wKX1mb3Iocj10aGlzLk4tMTtyO3ItLSl7dmFyIGk9dGhpcy5tdFtuLTFdXnRoaXMubXRbbi0xXT4+PjMwO3RoaXMubXRbbl09KHRoaXMubXRbbl1eKCgoaSY0Mjk0OTAxNzYwKT4+PjE2KSoxNTY2MDgzOTQxPDwxNikrKGkmNjU1MzUpKjE1NjYwODM5NDEpLW4sdGhpcy5tdFtuXT4+Pj0wLG4rKyxuPj10aGlzLk4mJih0aGlzLm10WzBdPXRoaXMubXRbdGhpcy5OLTFdLG49MSl9dGhpcy5tdFswXT0yMTQ3NDgzNjQ4fTtFaS5wcm90b3R5cGUucmFuZG9tX2ludD1mdW5jdGlvbigpe3ZhciB0LGU9bmV3IEFycmF5KDAsdGhpcy5NQVRSSVhfQSk7aWYodGhpcy5tdGk+PXRoaXMuTil7dmFyIG47Zm9yKHRoaXMubXRpPT10aGlzLk4rMSYmdGhpcy5pbml0X3NlZWQoNTQ4OSksbj0wO248dGhpcy5OLXRoaXMuTTtuKyspdD10aGlzLm10W25dJnRoaXMuVVBQRVJfTUFTS3x0aGlzLm10W24rMV0mdGhpcy5MT1dFUl9NQVNLLHRoaXMubXRbbl09dGhpcy5tdFtuK3RoaXMuTV1edD4+PjFeZVt0JjFdO2Zvcig7bjx0aGlzLk4tMTtuKyspdD10aGlzLm10W25dJnRoaXMuVVBQRVJfTUFTS3x0aGlzLm10W24rMV0mdGhpcy5MT1dFUl9NQVNLLHRoaXMubXRbbl09dGhpcy5tdFtuKyh0aGlzLk0tdGhpcy5OKV1edD4+PjFeZVt0JjFdO3Q9dGhpcy5tdFt0aGlzLk4tMV0mdGhpcy5VUFBFUl9NQVNLfHRoaXMubXRbMF0mdGhpcy5MT1dFUl9NQVNLLHRoaXMubXRbdGhpcy5OLTFdPXRoaXMubXRbdGhpcy5NLTFdXnQ+Pj4xXmVbdCYxXSx0aGlzLm10aT0wfXJldHVybiB0PXRoaXMubXRbdGhpcy5tdGkrK10sdF49dD4+PjExLHRePXQ8PDcmMjYzNjkyODY0MCx0Xj10PDwxNSY0MDIyNzMwNzUyLHRePXQ+Pj4xOCx0Pj4+MH07RWkucHJvdG90eXBlLnJhbmRvbV9pbnQzMT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJhbmRvbV9pbnQoKT4+PjF9O0VpLnByb3RvdHlwZS5yYW5kb21faW5jbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJhbmRvbV9pbnQoKSooMS80Mjk0OTY3Mjk1KX07RWkucHJvdG90eXBlLnJhbmRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJhbmRvbV9pbnQoKSooMS80Mjk0OTY3Mjk2KX07RWkucHJvdG90eXBlLnJhbmRvbV9leGNsPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmFuZG9tX2ludCgpKy41KSooMS80Mjk0OTY3Mjk2KX07RWkucHJvdG90eXBlLnJhbmRvbV9sb25nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yYW5kb21faW50KCk+Pj41LGU9dGhpcy5yYW5kb21faW50KCk+Pj42O3JldHVybih0KjY3MTA4ODY0K2UpKigxLzkwMDcxOTkyNTQ3NDA5OTIpfTthMS5leHBvcnRzPUVpfSk7dmFyIHltLEN0LFVsLHUxLE0sV3Q9WigoKT0+e3ltPW1vKGYxKCksMSk7WXQoKTtJdCgpO2F0KCk7SHQoKTtDdD17fTtDdC5FUFNJTE9OMT0uMTtDdC5FUFNJTE9OMj0uMDE7Q3QuRVBTSUxPTjM9LjAwMTtDdC5FUFNJTE9OND0xZS00O0N0LkVQU0lMT041PTFlLTU7Q3QuRVBTSUxPTjY9MWUtNjtDdC5FUFNJTE9ONz0xZS03O0N0LkVQU0lMT044PTFlLTg7Q3QuRVBTSUxPTjk9MWUtOTtDdC5FUFNJTE9OMTA9MWUtMTA7Q3QuRVBTSUxPTjExPTFlLTExO0N0LkVQU0lMT04xMj0xZS0xMjtDdC5FUFNJTE9OMTM9MWUtMTM7Q3QuRVBTSUxPTjE0PTFlLTE0O0N0LkVQU0lMT04xNT0xZS0xNTtDdC5FUFNJTE9OMTY9MWUtMTY7Q3QuRVBTSUxPTjE3PTFlLTE3O0N0LkVQU0lMT04xOD0xZS0xODtDdC5FUFNJTE9OMTk9MWUtMTk7Q3QuRVBTSUxPTjIwPTFlLTIwO0N0LkVQU0lMT04yMT0xZS0yMTtDdC5HUkFWSVRBVElPTkFMUEFSQU1FVEVSPTM5ODYwMDQ0MThlNTtDdC5TT0xBUl9SQURJVVM9Njk1NWU1O0N0LkxVTkFSX1JBRElVUz0xNzM3NDAwO0N0LlNJWFRZX0ZPVVJfS0lMT0JZVEVTPTY0KjEwMjQ7Q3QuRk9VUl9HSUdBQllURVM9NCoxMDI0KjEwMjQqMTAyNDtDdC5zaWduPXgoTWF0aC5zaWduLGZ1bmN0aW9uKGUpe3JldHVybiBlPStlLGU9PT0wfHxlIT09ZT9lOmU+MD8xOi0xfSk7Q3Quc2lnbk5vdFplcm89ZnVuY3Rpb24odCl7cmV0dXJuIHQ8MD8tMToxfTtDdC50b1NOb3JtPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9eChlLDI1NSksTWF0aC5yb3VuZCgoQ3QuY2xhbXAodCwtMSwxKSouNSsuNSkqZSl9O0N0LmZyb21TTm9ybT1mdW5jdGlvbih0LGUpe3JldHVybiBlPXgoZSwyNTUpLEN0LmNsYW1wKHQsMCxlKS9lKjItMX07Q3Qubm9ybWFsaXplPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbj1NYXRoLm1heChuLWUsMCksbj09PTA/MDpDdC5jbGFtcCgodC1lKS9uLDAsMSl9O0N0LnNpbmg9eChNYXRoLnNpbmgsZnVuY3Rpb24oZSl7cmV0dXJuKE1hdGguZXhwKGUpLU1hdGguZXhwKC1lKSkvMn0pO0N0LmNvc2g9eChNYXRoLmNvc2gsZnVuY3Rpb24oZSl7cmV0dXJuKE1hdGguZXhwKGUpK01hdGguZXhwKC1lKSkvMn0pO0N0LmxlcnA9ZnVuY3Rpb24odCxlLG4pe3JldHVybigxLW4pKnQrbiplfTtDdC5QST1NYXRoLlBJO0N0Lk9ORV9PVkVSX1BJPTEvTWF0aC5QSTtDdC5QSV9PVkVSX1RXTz1NYXRoLlBJLzI7Q3QuUElfT1ZFUl9USFJFRT1NYXRoLlBJLzM7Q3QuUElfT1ZFUl9GT1VSPU1hdGguUEkvNDtDdC5QSV9PVkVSX1NJWD1NYXRoLlBJLzY7Q3QuVEhSRUVfUElfT1ZFUl9UV089MypNYXRoLlBJLzI7Q3QuVFdPX1BJPTIqTWF0aC5QSTtDdC5PTkVfT1ZFUl9UV09fUEk9MS8oMipNYXRoLlBJKTtDdC5SQURJQU5TX1BFUl9ERUdSRUU9TWF0aC5QSS8xODA7Q3QuREVHUkVFU19QRVJfUkFESUFOPTE4MC9NYXRoLlBJO0N0LlJBRElBTlNfUEVSX0FSQ1NFQ09ORD1DdC5SQURJQU5TX1BFUl9ERUdSRUUvMzYwMDtDdC50b1JhZGlhbnM9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEIoImRlZ3JlZXMgaXMgcmVxdWlyZWQuIik7cmV0dXJuIHQqQ3QuUkFESUFOU19QRVJfREVHUkVFfTtDdC50b0RlZ3JlZXM9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEIoInJhZGlhbnMgaXMgcmVxdWlyZWQuIik7cmV0dXJuIHQqQ3QuREVHUkVFU19QRVJfUkFESUFOfTtDdC5jb252ZXJ0TG9uZ2l0dWRlUmFuZ2U9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEIoImFuZ2xlIGlzIHJlcXVpcmVkLiIpO2xldCBlPUN0LlRXT19QSSxuPXQtTWF0aC5mbG9vcih0L2UpKmU7cmV0dXJuIG48LU1hdGguUEk/bitlOm4+PU1hdGguUEk/bi1lOm59O0N0LmNsYW1wVG9MYXRpdHVkZVJhbmdlPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJhbmdsZSBpcyByZXF1aXJlZC4iKTtyZXR1cm4gQ3QuY2xhbXAodCwtMSpDdC5QSV9PVkVSX1RXTyxDdC5QSV9PVkVSX1RXTyl9O0N0Lm5lZ2F0aXZlUGlUb1BpPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJhbmdsZSBpcyByZXF1aXJlZC4iKTtyZXR1cm4gdD49LUN0LlBJJiZ0PD1DdC5QST90OkN0Lnplcm9Ub1R3b1BpKHQrQ3QuUEkpLUN0LlBJfTtDdC56ZXJvVG9Ud29QaT1mdW5jdGlvbih0KXtpZighaCh0KSl0aHJvdyBuZXcgQigiYW5nbGUgaXMgcmVxdWlyZWQuIik7aWYodD49MCYmdDw9Q3QuVFdPX1BJKXJldHVybiB0O2xldCBlPUN0Lm1vZCh0LEN0LlRXT19QSSk7cmV0dXJuIE1hdGguYWJzKGUpPEN0LkVQU0lMT04xNCYmTWF0aC5hYnModCk+Q3QuRVBTSUxPTjE0P0N0LlRXT19QSTplfTtDdC5tb2Q9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgQigibSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgQigibiBpcyByZXF1aXJlZC4iKTtpZihlPT09MCl0aHJvdyBuZXcgQigiZGl2aXNvciBjYW5ub3QgYmUgMC4iKTtyZXR1cm4gQ3Quc2lnbih0KT09PUN0LnNpZ24oZSkmJk1hdGguYWJzKHQpPE1hdGguYWJzKGUpP3Q6KHQlZStlKSVlfTtDdC5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSxuLG8pe2lmKCFoKHQpKXRocm93IG5ldyBCKCJsZWZ0IGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBCKCJyaWdodCBpcyByZXF1aXJlZC4iKTtuPXgobiwwKSxvPXgobyxuKTtsZXQgcj1NYXRoLmFicyh0LWUpO3JldHVybiByPD1vfHxyPD1uKk1hdGgubWF4KE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKX07Q3QubGVzc1RoYW49ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBCKCJmaXJzdCBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgQigic2Vjb25kIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG4pKXRocm93IG5ldyBCKCJhYnNvbHV0ZUVwc2lsb24gaXMgcmVxdWlyZWQuIik7cmV0dXJuIHQtZTwtbn07Q3QubGVzc1RoYW5PckVxdWFscz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEIoImZpcnN0IGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBCKCJzZWNvbmQgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEIoImFic29sdXRlRXBzaWxvbiBpcyByZXF1aXJlZC4iKTtyZXR1cm4gdC1lPG59O0N0LmdyZWF0ZXJUaGFuPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgQigiZmlyc3QgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEIoInNlY29uZCBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgQigiYWJzb2x1dGVFcHNpbG9uIGlzIHJlcXVpcmVkLiIpO3JldHVybiB0LWU+bn07Q3QuZ3JlYXRlclRoYW5PckVxdWFscz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEIoImZpcnN0IGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBCKCJzZWNvbmQgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEIoImFic29sdXRlRXBzaWxvbiBpcyByZXF1aXJlZC4iKTtyZXR1cm4gdC1lPi1ufTtVbD1bMV07Q3QuZmFjdG9yaWFsPWZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0IT0ibnVtYmVyInx8dDwwKXRocm93IG5ldyBCKCJBIG51bWJlciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCBpcyByZXF1aXJlZC4iKTtsZXQgZT1VbC5sZW5ndGg7aWYodD49ZSl7bGV0IG49VWxbZS0xXTtmb3IobGV0IG89ZTtvPD10O28rKyl7bGV0IHI9bipvO1VsLnB1c2gociksbj1yfX1yZXR1cm4gVWxbdF19O0N0LmluY3JlbWVudFdyYXA9ZnVuY3Rpb24odCxlLG4pe2lmKG49eChuLDApLCFoKHQpKXRocm93IG5ldyBCKCJuIGlzIHJlcXVpcmVkLiIpO2lmKGU8PW4pdGhyb3cgbmV3IEIoIm1heGltdW1WYWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBtaW5pbXVtVmFsdWUuIik7cmV0dXJuKyt0LHQ+ZSYmKHQ9biksdH07Q3QuaXNQb3dlck9mVHdvPWZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0IT0ibnVtYmVyInx8dDwwfHx0PjQyOTQ5NjcyOTUpdGhyb3cgbmV3IEIoIkEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKDJeMzIpLTEgaXMgcmVxdWlyZWQuIik7cmV0dXJuIHQhPT0wJiYodCZ0LTEpPT09MH07Q3QubmV4dFBvd2VyT2ZUd289ZnVuY3Rpb24odCl7aWYodHlwZW9mIHQhPSJudW1iZXIifHx0PDB8fHQ+MjE0NzQ4MzY0OCl0aHJvdyBuZXcgQigiQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyXjMxIGlzIHJlcXVpcmVkLiIpO3JldHVybi0tdCx0fD10Pj4xLHR8PXQ+PjIsdHw9dD4+NCx0fD10Pj44LHR8PXQ+PjE2LCsrdCx0fTtDdC5wcmV2aW91c1Bvd2VyT2ZUd289ZnVuY3Rpb24odCl7aWYodHlwZW9mIHQhPSJudW1iZXIifHx0PDB8fHQ+NDI5NDk2NzI5NSl0aHJvdyBuZXcgQigiQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoMl4zMiktMSBpcyByZXF1aXJlZC4iKTtyZXR1cm4gdHw9dD4+MSx0fD10Pj4yLHR8PXQ+PjQsdHw9dD4+OCx0fD10Pj4xNix0fD10Pj4zMix0PSh0Pj4+MCktKHQ+Pj4xKSx0fTtDdC5jbGFtcD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm51bWJlcigidmFsdWUiLHQpLHkudHlwZU9mLm51bWJlcigibWluIixlKSx5LnR5cGVPZi5udW1iZXIoIm1heCIsbiksdDxlP2U6dD5uP246dH07dTE9bmV3IHltLmRlZmF1bHQ7Q3Quc2V0UmFuZG9tTnVtYmVyU2VlZD1mdW5jdGlvbih0KXtpZighaCh0KSl0aHJvdyBuZXcgQigic2VlZCBpcyByZXF1aXJlZC4iKTt1MT1uZXcgeW0uZGVmYXVsdCh0KX07Q3QubmV4dFJhbmRvbU51bWJlcj1mdW5jdGlvbigpe3JldHVybiB1MS5yYW5kb20oKX07Q3QucmFuZG9tQmV0d2Vlbj1mdW5jdGlvbih0LGUpe3JldHVybiBDdC5uZXh0UmFuZG9tTnVtYmVyKCkqKGUtdCkrdH07Q3QuYWNvc0NsYW1wZWQ9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEIoInZhbHVlIGlzIHJlcXVpcmVkLiIpO3JldHVybiBNYXRoLmFjb3MoQ3QuY2xhbXAodCwtMSwxKSl9O0N0LmFzaW5DbGFtcGVkPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJ2YWx1ZSBpcyByZXF1aXJlZC4iKTtyZXR1cm4gTWF0aC5hc2luKEN0LmNsYW1wKHQsLTEsMSkpfTtDdC5jaG9yZExlbmd0aD1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJhbmdsZSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgQigicmFkaXVzIGlzIHJlcXVpcmVkLiIpO3JldHVybiAyKmUqTWF0aC5zaW4odCouNSl9O0N0LmxvZ0Jhc2U9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgQigibnVtYmVyIGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBCKCJiYXNlIGlzIHJlcXVpcmVkLiIpO3JldHVybiBNYXRoLmxvZyh0KS9NYXRoLmxvZyhlKX07Q3QuY2JydD14KE1hdGguY2JydCxmdW5jdGlvbihlKXtsZXQgbj1NYXRoLnBvdyhNYXRoLmFicyhlKSwuMzMzMzMzMzMzMzMzMzMzMyk7cmV0dXJuIGU8MD8tbjpufSk7Q3QubG9nMj14KE1hdGgubG9nMixmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5sb2coZSkqTWF0aC5MT0cyRX0pO0N0LmZvZz1mdW5jdGlvbih0LGUpe2xldCBuPXQqZTtyZXR1cm4gMS1NYXRoLmV4cCgtKG4qbikpfTtDdC5mYXN0QXBwcm94aW1hdGVBdGFuPWZ1bmN0aW9uKHQpe3JldHVybiB5LnR5cGVPZi5udW1iZXIoIngiLHQpLHQqKC0uMTc4NCpNYXRoLmFicyh0KS0uMDY2Myp0KnQrMS4wMzAxKX07Q3QuZmFzdEFwcHJveGltYXRlQXRhbjI9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5udW1iZXIoIngiLHQpLHkudHlwZU9mLm51bWJlcigieSIsZSk7bGV0IG4sbz1NYXRoLmFicyh0KTtuPU1hdGguYWJzKGUpO2xldCByPU1hdGgubWF4KG8sbik7bj1NYXRoLm1pbihvLG4pO2xldCBpPW4vcjtpZihpc05hTihpKSl0aHJvdyBuZXcgQigiZWl0aGVyIHggb3IgeSBtdXN0IGJlIG5vbnplcm8iKTtyZXR1cm4gbz1DdC5mYXN0QXBwcm94aW1hdGVBdGFuKGkpLG89TWF0aC5hYnMoZSk+TWF0aC5hYnModCk/Q3QuUElfT1ZFUl9UV08tbzpvLG89dDwwP0N0LlBJLW86byxvPWU8MD8tbzpvLG99O009Q3R9KTtmdW5jdGlvbiBidCh0LGUsbil7dGhpcy54PXgodCwwKSx0aGlzLnk9eChlLDApLHRoaXMuej14KG4sMCl9dmFyIGtsLGwxLFZsLGdtLFlTLG1yLEhjLCRTLGEsVXQ9WigoKT0+e1l0KCk7SXQoKTthdCgpO0h0KCk7V3QoKTtidC5mcm9tU3BoZXJpY2FsPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJzcGhlcmljYWwiLHQpLGgoZSl8fChlPW5ldyBidCk7bGV0IG49dC5jbG9jayxvPXQuY29uZSxyPXgodC5tYWduaXR1ZGUsMSksaT1yKk1hdGguc2luKG8pO3JldHVybiBlLng9aSpNYXRoLmNvcyhuKSxlLnk9aSpNYXRoLnNpbihuKSxlLno9cipNYXRoLmNvcyhvKSxlfTtidC5mcm9tRWxlbWVudHM9ZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJuIGgobyk/KG8ueD10LG8ueT1lLG8uej1uLG8pOm5ldyBidCh0LGUsbil9O2J0LmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYoaCh0KSlyZXR1cm4gaChlKT8oZS54PXQueCxlLnk9dC55LGUuej10LnosZSk6bmV3IGJ0KHQueCx0LnksdC56KX07YnQuZnJvbUNhcnRlc2lhbjQ9YnQuY2xvbmU7YnQucGFja2VkTGVuZ3RoPTM7YnQucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49eChuLDApLGVbbisrXT10LngsZVtuKytdPXQueSxlW25dPXQueixlfTtidC51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImFycmF5Iix0KSxlPXgoZSwwKSxoKG4pfHwobj1uZXcgYnQpLG4ueD10W2UrK10sbi55PXRbZSsrXSxuLno9dFtlXSxufTtidC5wYWNrQXJyYXk9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImFycmF5Iix0KTtsZXQgbj10Lmxlbmd0aCxvPW4qMztpZighaChlKSllPW5ldyBBcnJheShvKTtlbHNle2lmKCFBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aCE9PW8pdGhyb3cgbmV3IEIoIklmIHJlc3VsdCBpcyBhIHR5cGVkIGFycmF5LCBpdCBtdXN0IGhhdmUgZXhhY3RseSBhcnJheS5sZW5ndGggKiAzIGVsZW1lbnRzIik7ZS5sZW5ndGghPT1vJiYoZS5sZW5ndGg9byl9Zm9yKGxldCByPTA7cjxuOysrcilidC5wYWNrKHRbcl0sZSxyKjMpO3JldHVybiBlfTtidC51bnBhY2tBcnJheT1mdW5jdGlvbih0LGUpe2lmKHkuZGVmaW5lZCgiYXJyYXkiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJhcnJheS5sZW5ndGgiLHQubGVuZ3RoLDMpLHQubGVuZ3RoJTMhPT0wKXRocm93IG5ldyBCKCJhcnJheSBsZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMuIik7bGV0IG49dC5sZW5ndGg7aChlKT9lLmxlbmd0aD1uLzM6ZT1uZXcgQXJyYXkobi8zKTtmb3IobGV0IG89MDtvPG47bys9Myl7bGV0IHI9by8zO2Vbcl09YnQudW5wYWNrKHQsbyxlW3JdKX1yZXR1cm4gZX07YnQuZnJvbUFycmF5PWJ0LnVucGFjaztidC5tYXhpbXVtQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCksTWF0aC5tYXgodC54LHQueSx0LnopfTtidC5taW5pbXVtQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCksTWF0aC5taW4odC54LHQueSx0LnopfTtidC5taW5pbXVtQnlDb21wb25lbnQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImZpcnN0Iix0KSx5LnR5cGVPZi5vYmplY3QoInNlY29uZCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD1NYXRoLm1pbih0LngsZS54KSxuLnk9TWF0aC5taW4odC55LGUueSksbi56PU1hdGgubWluKHQueixlLnopLG59O2J0Lm1heGltdW1CeUNvbXBvbmVudD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiZmlyc3QiLHQpLHkudHlwZU9mLm9iamVjdCgic2Vjb25kIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PU1hdGgubWF4KHQueCxlLngpLG4ueT1NYXRoLm1heCh0LnksZS55KSxuLno9TWF0aC5tYXgodC56LGUueiksbn07YnQuY2xhbXA9ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS50eXBlT2Yub2JqZWN0KCJtaW4iLGUpLHkudHlwZU9mLm9iamVjdCgibWF4IixuKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbyk7bGV0IHI9TS5jbGFtcCh0LngsZS54LG4ueCksaT1NLmNsYW1wKHQueSxlLnksbi55KSxzPU0uY2xhbXAodC56LGUueixuLnopO3JldHVybiBvLng9cixvLnk9aSxvLno9cyxvfTtidC5tYWduaXR1ZGVTcXVhcmVkPWZ1bmN0aW9uKHQpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCksdC54KnQueCt0LnkqdC55K3Queip0Lnp9O2J0Lm1hZ25pdHVkZT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KGJ0Lm1hZ25pdHVkZVNxdWFyZWQodCkpfTtrbD1uZXcgYnQ7YnQuZGlzdGFuY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSxidC5zdWJ0cmFjdCh0LGUsa2wpLGJ0Lm1hZ25pdHVkZShrbCl9O2J0LmRpc3RhbmNlU3F1YXJlZD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLGJ0LnN1YnRyYWN0KHQsZSxrbCksYnQubWFnbml0dWRlU3F1YXJlZChrbCl9O2J0Lm5vcm1hbGl6ZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSk7bGV0IG49YnQubWFnbml0dWRlKHQpO2lmKGUueD10LngvbixlLnk9dC55L24sZS56PXQuei9uLGlzTmFOKGUueCl8fGlzTmFOKGUueSl8fGlzTmFOKGUueikpdGhyb3cgbmV3IEIoIm5vcm1hbGl6ZWQgcmVzdWx0IGlzIG5vdCBhIG51bWJlciIpO3JldHVybiBlfTtidC5kb3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx0LngqZS54K3QueSplLnkrdC56KmUuen07YnQubXVsdGlwbHlDb21wb25lbnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PXQueCplLngsbi55PXQueSplLnksbi56PXQueiplLnosbn07YnQuZGl2aWRlQ29tcG9uZW50cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngvZS54LG4ueT10LnkvZS55LG4uej10LnovZS56LG59O2J0LmFkZD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngrZS54LG4ueT10LnkrZS55LG4uej10LnorZS56LG59O2J0LnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PXQueC1lLngsbi55PXQueS1lLnksbi56PXQuei1lLnosbn07YnQubXVsdGlwbHlCeVNjYWxhcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx5LnR5cGVPZi5udW1iZXIoInNjYWxhciIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngqZSxuLnk9dC55KmUsbi56PXQueiplLG59O2J0LmRpdmlkZUJ5U2NhbGFyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGFyIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PXQueC9lLG4ueT10LnkvZSxuLno9dC56L2Usbn07YnQubmVnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZS54PS10LngsZS55PS10LnksZS56PS10LnosZX07YnQuYWJzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZS54PU1hdGguYWJzKHQueCksZS55PU1hdGguYWJzKHQueSksZS56PU1hdGguYWJzKHQueiksZX07bDE9bmV3IGJ0O2J0LmxlcnA9ZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgic3RhcnQiLHQpLHkudHlwZU9mLm9iamVjdCgiZW5kIixlKSx5LnR5cGVPZi5udW1iZXIoInQiLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKSxidC5tdWx0aXBseUJ5U2NhbGFyKGUsbixsMSksbz1idC5tdWx0aXBseUJ5U2NhbGFyKHQsMS1uLG8pLGJ0LmFkZChsMSxvLG8pfTtWbD1uZXcgYnQsZ209bmV3IGJ0O2J0LmFuZ2xlQmV0d2Vlbj1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSksYnQubm9ybWFsaXplKHQsVmwpLGJ0Lm5vcm1hbGl6ZShlLGdtKTtsZXQgbj1idC5kb3QoVmwsZ20pLG89YnQubWFnbml0dWRlKGJ0LmNyb3NzKFZsLGdtLFZsKSk7cmV0dXJuIE1hdGguYXRhbjIobyxuKX07WVM9bmV3IGJ0O2J0Lm1vc3RPcnRob2dvbmFsQXhpcz1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSk7bGV0IG49YnQubm9ybWFsaXplKHQsWVMpO3JldHVybiBidC5hYnMobixuKSxuLng8PW4ueT9uLng8PW4uej9lPWJ0LmNsb25lKGJ0LlVOSVRfWCxlKTplPWJ0LmNsb25lKGJ0LlVOSVRfWixlKTpuLnk8PW4uej9lPWJ0LmNsb25lKGJ0LlVOSVRfWSxlKTplPWJ0LmNsb25lKGJ0LlVOSVRfWixlKSxlfTtidC5wcm9qZWN0VmVjdG9yPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImEiLHQpLHkuZGVmaW5lZCgiYiIsZSkseS5kZWZpbmVkKCJyZXN1bHQiLG4pO2xldCBvPWJ0LmRvdCh0LGUpL2J0LmRvdChlLGUpO3JldHVybiBidC5tdWx0aXBseUJ5U2NhbGFyKGUsbyxuKX07YnQuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZ0Lng9PT1lLngmJnQueT09PWUueSYmdC56PT09ZS56fTtidC5lcXVhbHNBcnJheT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQueD09PWVbbl0mJnQueT09PWVbbisxXSYmdC56PT09ZVtuKzJdfTtidC5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB0PT09ZXx8aCh0KSYmaChlKSYmTS5lcXVhbHNFcHNpbG9uKHQueCxlLngsbixvKSYmTS5lcXVhbHNFcHNpbG9uKHQueSxlLnksbixvKSYmTS5lcXVhbHNFcHNpbG9uKHQueixlLnosbixvKX07YnQuY3Jvc3M9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPXQueCxyPXQueSxpPXQueixzPWUueCxmPWUueSx1PWUueixjPXIqdS1pKmYsbD1pKnMtbyp1LHA9bypmLXIqcztyZXR1cm4gbi54PWMsbi55PWwsbi56PXAsbn07YnQubWlkcG9pbnQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9KHQueCtlLngpKi41LG4ueT0odC55K2UueSkqLjUsbi56PSh0LnorZS56KSouNSxufTtidC5mcm9tRGVncmVlcz1mdW5jdGlvbih0LGUsbixvLHIpe3JldHVybiB5LnR5cGVPZi5udW1iZXIoImxvbmdpdHVkZSIsdCkseS50eXBlT2YubnVtYmVyKCJsYXRpdHVkZSIsZSksdD1NLnRvUmFkaWFucyh0KSxlPU0udG9SYWRpYW5zKGUpLGJ0LmZyb21SYWRpYW5zKHQsZSxuLG8scil9O21yPW5ldyBidCxIYz1uZXcgYnQsJFM9bmV3IGJ0KDYzNzgxMzcqNjM3ODEzNyw2Mzc4MTM3KjYzNzgxMzcsNjM1Njc1MjMxNDI0NTE3OWUtOSo2MzU2NzUyMzE0MjQ1MTc5ZS05KTtidC5mcm9tUmFkaWFucz1mdW5jdGlvbih0LGUsbixvLHIpe3kudHlwZU9mLm51bWJlcigibG9uZ2l0dWRlIix0KSx5LnR5cGVPZi5udW1iZXIoImxhdGl0dWRlIixlKSxuPXgobiwwKTtsZXQgaT1oKG8pP28ucmFkaWlTcXVhcmVkOiRTLHM9TWF0aC5jb3MoZSk7bXIueD1zKk1hdGguY29zKHQpLG1yLnk9cypNYXRoLnNpbih0KSxtci56PU1hdGguc2luKGUpLG1yPWJ0Lm5vcm1hbGl6ZShtcixtciksYnQubXVsdGlwbHlDb21wb25lbnRzKGksbXIsSGMpO2xldCBmPU1hdGguc3FydChidC5kb3QobXIsSGMpKTtyZXR1cm4gSGM9YnQuZGl2aWRlQnlTY2FsYXIoSGMsZixIYyksbXI9YnQubXVsdGlwbHlCeVNjYWxhcihtcixuLG1yKSxoKHIpfHwocj1uZXcgYnQpLGJ0LmFkZChIYyxtcixyKX07YnQuZnJvbURlZ3JlZXNBcnJheT1mdW5jdGlvbih0LGUsbil7aWYoeS5kZWZpbmVkKCJjb29yZGluYXRlcyIsdCksdC5sZW5ndGg8Mnx8dC5sZW5ndGglMiE9PTApdGhyb3cgbmV3IEIoInRoZSBudW1iZXIgb2YgY29vcmRpbmF0ZXMgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDIgYW5kIGF0IGxlYXN0IDIiKTtsZXQgbz10Lmxlbmd0aDtoKG4pP24ubGVuZ3RoPW8vMjpuPW5ldyBBcnJheShvLzIpO2ZvcihsZXQgcj0wO3I8bztyKz0yKXtsZXQgaT10W3JdLHM9dFtyKzFdLGY9ci8yO25bZl09YnQuZnJvbURlZ3JlZXMoaSxzLDAsZSxuW2ZdKX1yZXR1cm4gbn07YnQuZnJvbVJhZGlhbnNBcnJheT1mdW5jdGlvbih0LGUsbil7aWYoeS5kZWZpbmVkKCJjb29yZGluYXRlcyIsdCksdC5sZW5ndGg8Mnx8dC5sZW5ndGglMiE9PTApdGhyb3cgbmV3IEIoInRoZSBudW1iZXIgb2YgY29vcmRpbmF0ZXMgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDIgYW5kIGF0IGxlYXN0IDIiKTtsZXQgbz10Lmxlbmd0aDtoKG4pP24ubGVuZ3RoPW8vMjpuPW5ldyBBcnJheShvLzIpO2ZvcihsZXQgcj0wO3I8bztyKz0yKXtsZXQgaT10W3JdLHM9dFtyKzFdLGY9ci8yO25bZl09YnQuZnJvbVJhZGlhbnMoaSxzLDAsZSxuW2ZdKX1yZXR1cm4gbn07YnQuZnJvbURlZ3JlZXNBcnJheUhlaWdodHM9ZnVuY3Rpb24odCxlLG4pe2lmKHkuZGVmaW5lZCgiY29vcmRpbmF0ZXMiLHQpLHQubGVuZ3RoPDN8fHQubGVuZ3RoJTMhPT0wKXRocm93IG5ldyBCKCJ0aGUgbnVtYmVyIG9mIGNvb3JkaW5hdGVzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzIGFuZCBhdCBsZWFzdCAzIik7bGV0IG89dC5sZW5ndGg7aChuKT9uLmxlbmd0aD1vLzM6bj1uZXcgQXJyYXkoby8zKTtmb3IobGV0IHI9MDtyPG87cis9Myl7bGV0IGk9dFtyXSxzPXRbcisxXSxmPXRbcisyXSx1PXIvMztuW3VdPWJ0LmZyb21EZWdyZWVzKGkscyxmLGUsblt1XSl9cmV0dXJuIG59O2J0LmZyb21SYWRpYW5zQXJyYXlIZWlnaHRzPWZ1bmN0aW9uKHQsZSxuKXtpZih5LmRlZmluZWQoImNvb3JkaW5hdGVzIix0KSx0Lmxlbmd0aDwzfHx0Lmxlbmd0aCUzIT09MCl0aHJvdyBuZXcgQigidGhlIG51bWJlciBvZiBjb29yZGluYXRlcyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMyBhbmQgYXQgbGVhc3QgMyIpO2xldCBvPXQubGVuZ3RoO2gobik/bi5sZW5ndGg9by8zOm49bmV3IEFycmF5KG8vMyk7Zm9yKGxldCByPTA7cjxvO3IrPTMpe2xldCBpPXRbcl0scz10W3IrMV0sZj10W3IrMl0sdT1yLzM7blt1XT1idC5mcm9tUmFkaWFucyhpLHMsZixlLG5bdV0pfXJldHVybiBufTtidC5aRVJPPU9iamVjdC5mcmVlemUobmV3IGJ0KDAsMCwwKSk7YnQuT05FPU9iamVjdC5mcmVlemUobmV3IGJ0KDEsMSwxKSk7YnQuVU5JVF9YPU9iamVjdC5mcmVlemUobmV3IGJ0KDEsMCwwKSk7YnQuVU5JVF9ZPU9iamVjdC5mcmVlemUobmV3IGJ0KDAsMSwwKSk7YnQuVU5JVF9aPU9iamVjdC5mcmVlemUobmV3IGJ0KDAsMCwxKSk7YnQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBidC5jbG9uZSh0aGlzLHQpfTtidC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBidC5lcXVhbHModGhpcyx0KX07YnQucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiBidC5lcXVhbHNFcHNpbG9uKHRoaXMsdCxlLG4pfTtidC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5gKCR7dGhpcy54fSwgJHt0aGlzLnl9LCAke3RoaXMuen0pYH07YT1idH0pO2Z1bmN0aW9uIEpTKHQsZSxuLG8scil7aWYoIWgodCkpdGhyb3cgbmV3IEIoImNhcnRlc2lhbiBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgQigib25lT3ZlclJhZGlpIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG4pKXRocm93IG5ldyBCKCJvbmVPdmVyUmFkaWlTcXVhcmVkIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG8pKXRocm93IG5ldyBCKCJjZW50ZXJUb2xlcmFuY2VTcXVhcmVkIGlzIHJlcXVpcmVkLiIpO2xldCBpPXQueCxzPXQueSxmPXQueix1PWUueCxjPWUueSxsPWUueixwPWkqaSp1KnUsZD1zKnMqYypjLG09ZipmKmwqbCxfPXArZCttLGc9TWF0aC5zcXJ0KDEvXyksYj1hLm11bHRpcGx5QnlTY2FsYXIodCxnLFpTKTtpZihfPG8pcmV0dXJuIGlzRmluaXRlKGcpP2EuY2xvbmUoYixyKTp2b2lkIDA7bGV0IE89bi54LFQ9bi55LEU9bi56LHc9UVM7dy54PWIueCpPKjIsdy55PWIueSpUKjIsdy56PWIueipFKjI7bGV0IEM9KDEtZykqYS5tYWduaXR1ZGUodCkvKC41KmEubWFnbml0dWRlKHcpKSxOPTAsSSxMLHYsRCxVLEEsUyxQLEYsaixIO2Rve0MtPU4sdj0xLygxK0MqTyksRD0xLygxK0MqVCksVT0xLygxK0MqRSksQT12KnYsUz1EKkQsUD1VKlUsRj1BKnYsaj1TKkQsSD1QKlUsST1wKkErZCpTK20qUC0xLEw9cCpGKk8rZCpqKlQrbSpIKkU7bGV0IGs9LTIqTDtOPUkva313aGlsZShNYXRoLmFicyhJKT5NLkVQU0lMT04xMik7cmV0dXJuIGgocik/KHIueD1pKnYsci55PXMqRCxyLno9ZipVLHIpOm5ldyBhKGkqdixzKkQsZipVKX12YXIgWlMsUVMsR2wsQW09WigoKT0+e1V0KCk7YXQoKTtIdCgpO1d0KCk7WlM9bmV3IGEsUVM9bmV3IGE7R2w9SlN9KTtmdW5jdGlvbiBWbih0LGUsbil7dGhpcy5sb25naXR1ZGU9eCh0LDApLHRoaXMubGF0aXR1ZGU9eChlLDApLHRoaXMuaGVpZ2h0PXgobiwwKX12YXIgdEMsZUMsbkMsb0MsckMsaUMsY3QsdmU9WigoKT0+e1V0KCk7WXQoKTtJdCgpO2F0KCk7V3QoKTtBbSgpO1ZuLmZyb21SYWRpYW5zPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB5LnR5cGVPZi5udW1iZXIoImxvbmdpdHVkZSIsdCkseS50eXBlT2YubnVtYmVyKCJsYXRpdHVkZSIsZSksbj14KG4sMCksaChvKT8oby5sb25naXR1ZGU9dCxvLmxhdGl0dWRlPWUsby5oZWlnaHQ9bixvKTpuZXcgVm4odCxlLG4pfTtWbi5mcm9tRGVncmVlcz1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4geS50eXBlT2YubnVtYmVyKCJsb25naXR1ZGUiLHQpLHkudHlwZU9mLm51bWJlcigibGF0aXR1ZGUiLGUpLHQ9TS50b1JhZGlhbnModCksZT1NLnRvUmFkaWFucyhlKSxWbi5mcm9tUmFkaWFucyh0LGUsbixvKX07dEM9bmV3IGEsZUM9bmV3IGEsbkM9bmV3IGEsb0M9bmV3IGEoMS82Mzc4MTM3LDEvNjM3ODEzNywxLzYzNTY3NTIzMTQyNDUxNzllLTkpLHJDPW5ldyBhKDEvKDYzNzgxMzcqNjM3ODEzNyksMS8oNjM3ODEzNyo2Mzc4MTM3KSwxLyg2MzU2NzUyMzE0MjQ1MTc5ZS05KjYzNTY3NTIzMTQyNDUxNzllLTkpKSxpQz1NLkVQU0lMT04xO1ZuLmZyb21DYXJ0ZXNpYW49ZnVuY3Rpb24odCxlLG4pe2xldCBvPWgoZSk/ZS5vbmVPdmVyUmFkaWk6b0Mscj1oKGUpP2Uub25lT3ZlclJhZGlpU3F1YXJlZDpyQyxpPWgoZSk/ZS5fY2VudGVyVG9sZXJhbmNlU3F1YXJlZDppQyxzPUdsKHQsbyxyLGksZUMpO2lmKCFoKHMpKXJldHVybjtsZXQgZj1hLm11bHRpcGx5Q29tcG9uZW50cyhzLHIsdEMpO2Y9YS5ub3JtYWxpemUoZixmKTtsZXQgdT1hLnN1YnRyYWN0KHQscyxuQyksYz1NYXRoLmF0YW4yKGYueSxmLngpLGw9TWF0aC5hc2luKGYueikscD1NLnNpZ24oYS5kb3QodSx0KSkqYS5tYWduaXR1ZGUodSk7cmV0dXJuIGgobik/KG4ubG9uZ2l0dWRlPWMsbi5sYXRpdHVkZT1sLG4uaGVpZ2h0PXAsbik6bmV3IFZuKGMsbCxwKX07Vm4udG9DYXJ0ZXNpYW49ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImNhcnRvZ3JhcGhpYyIsdCksYS5mcm9tUmFkaWFucyh0LmxvbmdpdHVkZSx0LmxhdGl0dWRlLHQuaGVpZ2h0LGUsbil9O1ZuLmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYoaCh0KSlyZXR1cm4gaChlKT8oZS5sb25naXR1ZGU9dC5sb25naXR1ZGUsZS5sYXRpdHVkZT10LmxhdGl0dWRlLGUuaGVpZ2h0PXQuaGVpZ2h0LGUpOm5ldyBWbih0LmxvbmdpdHVkZSx0LmxhdGl0dWRlLHQuaGVpZ2h0KX07Vm4uZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZ0LmxvbmdpdHVkZT09PWUubG9uZ2l0dWRlJiZ0LmxhdGl0dWRlPT09ZS5sYXRpdHVkZSYmdC5oZWlnaHQ9PT1lLmhlaWdodH07Vm4uZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG49eChuLDApLHQ9PT1lfHxoKHQpJiZoKGUpJiZNYXRoLmFicyh0LmxvbmdpdHVkZS1lLmxvbmdpdHVkZSk8PW4mJk1hdGguYWJzKHQubGF0aXR1ZGUtZS5sYXRpdHVkZSk8PW4mJk1hdGguYWJzKHQuaGVpZ2h0LWUuaGVpZ2h0KTw9bn07Vm4uWkVSTz1PYmplY3QuZnJlZXplKG5ldyBWbigwLDAsMCkpO1ZuLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gVm4uY2xvbmUodGhpcyx0KX07Vm4ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gVm4uZXF1YWxzKHRoaXMsdCl9O1ZuLnByb3RvdHlwZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZuLmVxdWFsc0Vwc2lsb24odGhpcyx0LGUpfTtWbi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5gKCR7dGhpcy5sb25naXR1ZGV9LCAke3RoaXMubGF0aXR1ZGV9LCAke3RoaXMuaGVpZ2h0fSlgfTtjdD1Wbn0pO2Z1bmN0aW9uIGQxKHQsZSxuLG8pe2U9eChlLDApLG49eChuLDApLG89eChvLDApLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJ4IixlLDApLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJ5IixuLDApLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJ6IixvLDApLHQuX3JhZGlpPW5ldyBhKGUsbixvKSx0Ll9yYWRpaVNxdWFyZWQ9bmV3IGEoZSplLG4qbixvKm8pLHQuX3JhZGlpVG9UaGVGb3VydGg9bmV3IGEoZSplKmUqZSxuKm4qbipuLG8qbypvKm8pLHQuX29uZU92ZXJSYWRpaT1uZXcgYShlPT09MD8wOjEvZSxuPT09MD8wOjEvbixvPT09MD8wOjEvbyksdC5fb25lT3ZlclJhZGlpU3F1YXJlZD1uZXcgYShlPT09MD8wOjEvKGUqZSksbj09PTA/MDoxLyhuKm4pLG89PT0wPzA6MS8obypvKSksdC5fbWluaW11bVJhZGl1cz1NYXRoLm1pbihlLG4sbyksdC5fbWF4aW11bVJhZGl1cz1NYXRoLm1heChlLG4sbyksdC5fY2VudGVyVG9sZXJhbmNlU3F1YXJlZD1NLkVQU0lMT04xLHQuX3JhZGlpU3F1YXJlZC56IT09MCYmKHQuX3NxdWFyZWRYT3ZlclNxdWFyZWRaPXQuX3JhZGlpU3F1YXJlZC54L3QuX3JhZGlpU3F1YXJlZC56KX1mdW5jdGlvbiBHZSh0LGUsbil7dGhpcy5fcmFkaWk9dm9pZCAwLHRoaXMuX3JhZGlpU3F1YXJlZD12b2lkIDAsdGhpcy5fcmFkaWlUb1RoZUZvdXJ0aD12b2lkIDAsdGhpcy5fb25lT3ZlclJhZGlpPXZvaWQgMCx0aGlzLl9vbmVPdmVyUmFkaWlTcXVhcmVkPXZvaWQgMCx0aGlzLl9taW5pbXVtUmFkaXVzPXZvaWQgMCx0aGlzLl9tYXhpbXVtUmFkaXVzPXZvaWQgMCx0aGlzLl9jZW50ZXJUb2xlcmFuY2VTcXVhcmVkPXZvaWQgMCx0aGlzLl9zcXVhcmVkWE92ZXJTcXVhcmVkWj12b2lkIDAsZDEodGhpcyx0LGUsbil9ZnVuY3Rpb24gcDEodCxlLG4pe3kudHlwZU9mLm51bWJlcigiYSIsdCkseS50eXBlT2YubnVtYmVyKCJiIixlKSx5LnR5cGVPZi5mdW5jKCJmdW5jIixuKTtsZXQgbz0uNSooZSt0KSxyPS41KihlLXQpLGk9MDtmb3IobGV0IHM9MDtzPDU7cysrKXtsZXQgZj1yKmxDW3NdO2krPXBDW3NdKihuKG8rZikrbihvLWYpKX1yZXR1cm4gaSo9cixpfXZhciBzQyxjQyxhQyxmQyx1QyxsQyxwQywkLFp0PVooKCk9PntVdCgpO3ZlKCk7WXQoKTtJdCgpO2F0KCk7SHQoKTtXdCgpO0FtKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR2UucHJvdG90eXBlLHtyYWRpaTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhZGlpfX0scmFkaWlTcXVhcmVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmFkaWlTcXVhcmVkfX0scmFkaWlUb1RoZUZvdXJ0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhZGlpVG9UaGVGb3VydGh9fSxvbmVPdmVyUmFkaWk6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbmVPdmVyUmFkaWl9fSxvbmVPdmVyUmFkaWlTcXVhcmVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25lT3ZlclJhZGlpU3F1YXJlZH19LG1pbmltdW1SYWRpdXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9taW5pbXVtUmFkaXVzfX0sbWF4aW11bVJhZGl1czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21heGltdW1SYWRpdXN9fX0pO0dlLmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpcmV0dXJuO2xldCBuPXQuX3JhZGlpO3JldHVybiBoKGUpPyhhLmNsb25lKG4sZS5fcmFkaWkpLGEuY2xvbmUodC5fcmFkaWlTcXVhcmVkLGUuX3JhZGlpU3F1YXJlZCksYS5jbG9uZSh0Ll9yYWRpaVRvVGhlRm91cnRoLGUuX3JhZGlpVG9UaGVGb3VydGgpLGEuY2xvbmUodC5fb25lT3ZlclJhZGlpLGUuX29uZU92ZXJSYWRpaSksYS5jbG9uZSh0Ll9vbmVPdmVyUmFkaWlTcXVhcmVkLGUuX29uZU92ZXJSYWRpaVNxdWFyZWQpLGUuX21pbmltdW1SYWRpdXM9dC5fbWluaW11bVJhZGl1cyxlLl9tYXhpbXVtUmFkaXVzPXQuX21heGltdW1SYWRpdXMsZS5fY2VudGVyVG9sZXJhbmNlU3F1YXJlZD10Ll9jZW50ZXJUb2xlcmFuY2VTcXVhcmVkLGUpOm5ldyBHZShuLngsbi55LG4ueil9O0dlLmZyb21DYXJ0ZXNpYW4zPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgoZSl8fChlPW5ldyBHZSksaCh0KSYmZDEoZSx0LngsdC55LHQueiksZX07R2UuV0dTODQ9T2JqZWN0LmZyZWV6ZShuZXcgR2UoNjM3ODEzNyw2Mzc4MTM3LDYzNTY3NTIzMTQyNDUxNzllLTkpKTtHZS5VTklUX1NQSEVSRT1PYmplY3QuZnJlZXplKG5ldyBHZSgxLDEsMSkpO0dlLk1PT049T2JqZWN0LmZyZWV6ZShuZXcgR2UoTS5MVU5BUl9SQURJVVMsTS5MVU5BUl9SQURJVVMsTS5MVU5BUl9SQURJVVMpKTtHZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIEdlLmNsb25lKHRoaXMsdCl9O0dlLnBhY2tlZExlbmd0aD1hLnBhY2tlZExlbmd0aDtHZS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj14KG4sMCksYS5wYWNrKHQuX3JhZGlpLGUsbiksZX07R2UudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSxlPXgoZSwwKTtsZXQgbz1hLnVucGFjayh0LGUpO3JldHVybiBHZS5mcm9tQ2FydGVzaWFuMyhvLG4pfTtHZS5wcm90b3R5cGUuZ2VvY2VudHJpY1N1cmZhY2VOb3JtYWw9YS5ub3JtYWxpemU7R2UucHJvdG90eXBlLmdlb2RldGljU3VyZmFjZU5vcm1hbENhcnRvZ3JhcGhpYz1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiY2FydG9ncmFwaGljIix0KTtsZXQgbj10LmxvbmdpdHVkZSxvPXQubGF0aXR1ZGUscj1NYXRoLmNvcyhvKSxpPXIqTWF0aC5jb3Mobikscz1yKk1hdGguc2luKG4pLGY9TWF0aC5zaW4obyk7cmV0dXJuIGgoZSl8fChlPW5ldyBhKSxlLng9aSxlLnk9cyxlLno9ZixhLm5vcm1hbGl6ZShlLGUpfTtHZS5wcm90b3R5cGUuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsPWZ1bmN0aW9uKHQsZSl7aWYoIWEuZXF1YWxzRXBzaWxvbih0LGEuWkVSTyxNLkVQU0lMT04xNCkpcmV0dXJuIGgoZSl8fChlPW5ldyBhKSxlPWEubXVsdGlwbHlDb21wb25lbnRzKHQsdGhpcy5fb25lT3ZlclJhZGlpU3F1YXJlZCxlKSxhLm5vcm1hbGl6ZShlLGUpfTtzQz1uZXcgYSxjQz1uZXcgYTtHZS5wcm90b3R5cGUuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW49ZnVuY3Rpb24odCxlKXtsZXQgbj1zQyxvPWNDO3RoaXMuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsQ2FydG9ncmFwaGljKHQsbiksYS5tdWx0aXBseUNvbXBvbmVudHModGhpcy5fcmFkaWlTcXVhcmVkLG4sbyk7bGV0IHI9TWF0aC5zcXJ0KGEuZG90KG4sbykpO3JldHVybiBhLmRpdmlkZUJ5U2NhbGFyKG8scixvKSxhLm11bHRpcGx5QnlTY2FsYXIobix0LmhlaWdodCxuKSxoKGUpfHwoZT1uZXcgYSksYS5hZGQobyxuLGUpfTtHZS5wcm90b3R5cGUuY2FydG9ncmFwaGljQXJyYXlUb0NhcnRlc2lhbkFycmF5PWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJjYXJ0b2dyYXBoaWNzIix0KTtsZXQgbj10Lmxlbmd0aDtoKGUpP2UubGVuZ3RoPW46ZT1uZXcgQXJyYXkobik7Zm9yKGxldCBvPTA7bzxuO28rKyllW29dPXRoaXMuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4odFtvXSxlW29dKTtyZXR1cm4gZX07YUM9bmV3IGEsZkM9bmV3IGEsdUM9bmV3IGE7R2UucHJvdG90eXBlLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljPWZ1bmN0aW9uKHQsZSl7bGV0IG49dGhpcy5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKHQsZkMpO2lmKCFoKG4pKXJldHVybjtsZXQgbz10aGlzLmdlb2RldGljU3VyZmFjZU5vcm1hbChuLGFDKSxyPWEuc3VidHJhY3QodCxuLHVDKSxpPU1hdGguYXRhbjIoby55LG8ueCkscz1NYXRoLmFzaW4oby56KSxmPU0uc2lnbihhLmRvdChyLHQpKSphLm1hZ25pdHVkZShyKTtyZXR1cm4gaChlKT8oZS5sb25naXR1ZGU9aSxlLmxhdGl0dWRlPXMsZS5oZWlnaHQ9ZixlKTpuZXcgY3QoaSxzLGYpfTtHZS5wcm90b3R5cGUuY2FydGVzaWFuQXJyYXlUb0NhcnRvZ3JhcGhpY0FycmF5PWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJjYXJ0ZXNpYW5zIix0KTtsZXQgbj10Lmxlbmd0aDtoKGUpP2UubGVuZ3RoPW46ZT1uZXcgQXJyYXkobik7Zm9yKGxldCBvPTA7bzxuOysrbyllW29dPXRoaXMuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModFtvXSxlW29dKTtyZXR1cm4gZX07R2UucHJvdG90eXBlLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gR2wodCx0aGlzLl9vbmVPdmVyUmFkaWksdGhpcy5fb25lT3ZlclJhZGlpU3F1YXJlZCx0aGlzLl9jZW50ZXJUb2xlcmFuY2VTcXVhcmVkLGUpfTtHZS5wcm90b3R5cGUuc2NhbGVUb0dlb2NlbnRyaWNTdXJmYWNlPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLGgoZSl8fChlPW5ldyBhKTtsZXQgbj10Lngsbz10Lnkscj10LnosaT10aGlzLl9vbmVPdmVyUmFkaWlTcXVhcmVkLHM9MS9NYXRoLnNxcnQobipuKmkueCtvKm8qaS55K3IqcippLnopO3JldHVybiBhLm11bHRpcGx5QnlTY2FsYXIodCxzLGUpfTtHZS5wcm90b3R5cGUudHJhbnNmb3JtUG9zaXRpb25Ub1NjYWxlZFNwYWNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgoZSl8fChlPW5ldyBhKSxhLm11bHRpcGx5Q29tcG9uZW50cyh0LHRoaXMuX29uZU92ZXJSYWRpaSxlKX07R2UucHJvdG90eXBlLnRyYW5zZm9ybVBvc2l0aW9uRnJvbVNjYWxlZFNwYWNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgoZSl8fChlPW5ldyBhKSxhLm11bHRpcGx5Q29tcG9uZW50cyh0LHRoaXMuX3JhZGlpLGUpfTtHZS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dHx8aCh0KSYmYS5lcXVhbHModGhpcy5fcmFkaWksdC5fcmFkaWkpfTtHZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmFkaWkudG9TdHJpbmcoKX07R2UucHJvdG90eXBlLmdldFN1cmZhY2VOb3JtYWxJbnRlcnNlY3Rpb25XaXRoWkF4aXM9ZnVuY3Rpb24odCxlLG4pe2lmKHkudHlwZU9mLm9iamVjdCgicG9zaXRpb24iLHQpLCFNLmVxdWFsc0Vwc2lsb24odGhpcy5fcmFkaWkueCx0aGlzLl9yYWRpaS55LE0uRVBTSUxPTjE1KSl0aHJvdyBuZXcgQigiRWxsaXBzb2lkIG11c3QgYmUgYW4gZWxsaXBzb2lkIG9mIHJldm9sdXRpb24gKHJhZGlpLnggPT0gcmFkaWkueSkiKTt5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW4oIkVsbGlwc29pZC5yYWRpaS56Iix0aGlzLl9yYWRpaS56LDApLGU9eChlLDApO2xldCBvPXRoaXMuX3NxdWFyZWRYT3ZlclNxdWFyZWRaO2lmKGgobil8fChuPW5ldyBhKSxuLng9MCxuLnk9MCxuLno9dC56KigxLW8pLCEoTWF0aC5hYnMobi56KT49dGhpcy5fcmFkaWkuei1lKSlyZXR1cm4gbn07bEM9Wy4xNDg4NzQzMzg5ODE2MywuNDMzMzk1Mzk0MTI5MjUsLjY3OTQwOTU2ODI5OTAyLC44NjUwNjMzNjY2ODg5OCwuOTczOTA2NTI4NTE3MTcsMF0scEM9Wy4yOTU1MjQyMjQ3MTQ3NSwuMjY5MjY2NzE5MzA5OTksLjIxOTA4NjM2MjUxNTk4LC4xNDk0NTEzNDkxNTA1OCwuMDY2NjcxMzQ0MzA4Njg0LDBdO0dlLnByb3RvdHlwZS5zdXJmYWNlQXJlYT1mdW5jdGlvbih0KXt5LnR5cGVPZi5vYmplY3QoInJlY3RhbmdsZSIsdCk7bGV0IGU9dC53ZXN0LG49dC5lYXN0LG89dC5zb3V0aCxyPXQubm9ydGg7Zm9yKDtuPGU7KW4rPU0uVFdPX1BJO2xldCBpPXRoaXMuX3JhZGlpU3F1YXJlZCxzPWkueCxmPWkueSx1PWkueixjPXMqZjtyZXR1cm4gcDEobyxyLGZ1bmN0aW9uKGwpe2xldCBwPU1hdGguY29zKGwpLGQ9TWF0aC5zaW4obCk7cmV0dXJuIE1hdGguY29zKGwpKnAxKGUsbixmdW5jdGlvbihtKXtsZXQgXz1NYXRoLmNvcyhtKSxnPU1hdGguc2luKG0pO3JldHVybiBNYXRoLnNxcnQoYypkKmQrdSooZipfKl8rcypnKmcpKnAqcCl9KX0pfTskPUdlfSk7ZnVuY3Rpb24gemwodCl7dGhpcy5fZWxsaXBzb2lkPXgodCwkLldHUzg0KSx0aGlzLl9zZW1pbWFqb3JBeGlzPXRoaXMuX2VsbGlwc29pZC5tYXhpbXVtUmFkaXVzLHRoaXMuX29uZU92ZXJTZW1pbWFqb3JBeGlzPTEvdGhpcy5fc2VtaW1ham9yQXhpc312YXIgUW4sUmk9WigoKT0+e1V0KCk7dmUoKTtJdCgpO2F0KCk7SHQoKTtadCgpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHpsLnByb3RvdHlwZSx7ZWxsaXBzb2lkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxsaXBzb2lkfX19KTt6bC5wcm90b3R5cGUucHJvamVjdD1mdW5jdGlvbih0LGUpe2xldCBuPXRoaXMuX3NlbWltYWpvckF4aXMsbz10LmxvbmdpdHVkZSpuLHI9dC5sYXRpdHVkZSpuLGk9dC5oZWlnaHQ7cmV0dXJuIGgoZSk/KGUueD1vLGUueT1yLGUuej1pLGUpOm5ldyBhKG8scixpKX07emwucHJvdG90eXBlLnVucHJvamVjdD1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJjYXJ0ZXNpYW4gaXMgcmVxdWlyZWQiKTtsZXQgbj10aGlzLl9vbmVPdmVyU2VtaW1ham9yQXhpcyxvPXQueCpuLHI9dC55Km4saT10Lno7cmV0dXJuIGgoZSk/KGUubG9uZ2l0dWRlPW8sZS5sYXRpdHVkZT1yLGUuaGVpZ2h0PWksZSk6bmV3IGN0KG8scixpKX07UW49emx9KTt2YXIgZEMsRW4sVnM9WigoKT0+e2RDPXtPVVRTSURFOi0xLElOVEVSU0VDVElORzowLElOU0lERToxfSxFbj1PYmplY3QuZnJlZXplKGRDKX0pO2Z1bmN0aW9uIG1DKHQsZSl7dGhpcy5zdGFydD14KHQsMCksdGhpcy5zdG9wPXgoZSwwKX12YXIgUXIsamw9WigoKT0+e0l0KCk7UXI9bUN9KTtmdW5jdGlvbiB3dCh0LGUsbixvLHIsaSxzLGYsdSl7dGhpc1swXT14KHQsMCksdGhpc1sxXT14KG8sMCksdGhpc1syXT14KHMsMCksdGhpc1szXT14KGUsMCksdGhpc1s0XT14KHIsMCksdGhpc1s1XT14KGYsMCksdGhpc1s2XT14KG4sMCksdGhpc1s3XT14KGksMCksdGhpc1s4XT14KHUsMCl9ZnVuY3Rpb24gQUModCl7bGV0IGU9MDtmb3IobGV0IG49MDtuPDk7KytuKXtsZXQgbz10W25dO2UrPW8qb31yZXR1cm4gTWF0aC5zcXJ0KGUpfWZ1bmN0aW9uIGJDKHQpe2xldCBlPTA7Zm9yKGxldCBuPTA7bjwzOysrbil7bGV0IG89dFt3dC5nZXRFbGVtZW50SW5kZXgoVG1bbl0sd21bbl0pXTtlKz0yKm8qb31yZXR1cm4gTWF0aC5zcXJ0KGUpfWZ1bmN0aW9uIHdDKHQsZSl7bGV0IG49TS5FUFNJTE9OMTUsbz0wLHI9MTtmb3IobGV0IGM9MDtjPDM7KytjKXtsZXQgbD1NYXRoLmFicyh0W3d0LmdldEVsZW1lbnRJbmRleChUbVtjXSx3bVtjXSldKTtsPm8mJihyPWMsbz1sKX1sZXQgaT0xLHM9MCxmPXdtW3JdLHU9VG1bcl07aWYoTWF0aC5hYnModFt3dC5nZXRFbGVtZW50SW5kZXgodSxmKV0pPm4pe2xldCBjPXRbd3QuZ2V0RWxlbWVudEluZGV4KHUsdSldLGw9dFt3dC5nZXRFbGVtZW50SW5kZXgoZixmKV0scD10W3d0LmdldEVsZW1lbnRJbmRleCh1LGYpXSxkPShjLWwpLzIvcCxtO2Q8MD9tPS0xLygtZCtNYXRoLnNxcnQoMStkKmQpKTptPTEvKGQrTWF0aC5zcXJ0KDErZCpkKSksaT0xL01hdGguc3FydCgxK20qbSkscz1tKml9cmV0dXJuIGU9d3QuY2xvbmUod3QuSURFTlRJVFksZSksZVt3dC5nZXRFbGVtZW50SW5kZXgoZixmKV09ZVt3dC5nZXRFbGVtZW50SW5kZXgodSx1KV09aSxlW3d0LmdldEVsZW1lbnRJbmRleCh1LGYpXT1zLGVbd3QuZ2V0RWxlbWVudEluZGV4KGYsdSldPS1zLGV9dmFyIGhDLF9DLGJtLG0xLHlDLGdDLHdtLFRtLEhsLGgxLFRDLHR0LEZuPVooKCk9PntVdCgpO1l0KCk7SXQoKTthdCgpO0h0KCk7V3QoKTt3dC5wYWNrZWRMZW5ndGg9OTt3dC5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj14KG4sMCksZVtuKytdPXRbMF0sZVtuKytdPXRbMV0sZVtuKytdPXRbMl0sZVtuKytdPXRbM10sZVtuKytdPXRbNF0sZVtuKytdPXRbNV0sZVtuKytdPXRbNl0sZVtuKytdPXRbN10sZVtuKytdPXRbOF0sZX07d3QudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJhcnJheSIsdCksZT14KGUsMCksaChuKXx8KG49bmV3IHd0KSxuWzBdPXRbZSsrXSxuWzFdPXRbZSsrXSxuWzJdPXRbZSsrXSxuWzNdPXRbZSsrXSxuWzRdPXRbZSsrXSxuWzVdPXRbZSsrXSxuWzZdPXRbZSsrXSxuWzddPXRbZSsrXSxuWzhdPXRbZSsrXSxufTt3dC5wYWNrQXJyYXk9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImFycmF5Iix0KTtsZXQgbj10Lmxlbmd0aCxvPW4qOTtpZighaChlKSllPW5ldyBBcnJheShvKTtlbHNle2lmKCFBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aCE9PW8pdGhyb3cgbmV3IEIoIklmIHJlc3VsdCBpcyBhIHR5cGVkIGFycmF5LCBpdCBtdXN0IGhhdmUgZXhhY3RseSBhcnJheS5sZW5ndGggKiA5IGVsZW1lbnRzIik7ZS5sZW5ndGghPT1vJiYoZS5sZW5ndGg9byl9Zm9yKGxldCByPTA7cjxuOysrcil3dC5wYWNrKHRbcl0sZSxyKjkpO3JldHVybiBlfTt3dC51bnBhY2tBcnJheT1mdW5jdGlvbih0LGUpe2lmKHkuZGVmaW5lZCgiYXJyYXkiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJhcnJheS5sZW5ndGgiLHQubGVuZ3RoLDkpLHQubGVuZ3RoJTkhPT0wKXRocm93IG5ldyBCKCJhcnJheSBsZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDkuIik7bGV0IG49dC5sZW5ndGg7aChlKT9lLmxlbmd0aD1uLzk6ZT1uZXcgQXJyYXkobi85KTtmb3IobGV0IG89MDtvPG47bys9OSl7bGV0IHI9by85O2Vbcl09d3QudW5wYWNrKHQsbyxlW3JdKX1yZXR1cm4gZX07d3QuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZVs0XT10WzRdLGVbNV09dFs1XSxlWzZdPXRbNl0sZVs3XT10WzddLGVbOF09dFs4XSxlKTpuZXcgd3QodFswXSx0WzNdLHRbNl0sdFsxXSx0WzRdLHRbN10sdFsyXSx0WzVdLHRbOF0pfTt3dC5mcm9tQXJyYXk9d3QudW5wYWNrO3d0LmZyb21Db2x1bW5NYWpvckFycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkuZGVmaW5lZCgidmFsdWVzIix0KSx3dC5jbG9uZSh0LGUpfTt3dC5mcm9tUm93TWFqb3JBcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB5LmRlZmluZWQoInZhbHVlcyIsdCksaChlKT8oZVswXT10WzBdLGVbMV09dFszXSxlWzJdPXRbNl0sZVszXT10WzFdLGVbNF09dFs0XSxlWzVdPXRbN10sZVs2XT10WzJdLGVbN109dFs1XSxlWzhdPXRbOF0sZSk6bmV3IHd0KHRbMF0sdFsxXSx0WzJdLHRbM10sdFs0XSx0WzVdLHRbNl0sdFs3XSx0WzhdKX07d3QuZnJvbVF1YXRlcm5pb249ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoInF1YXRlcm5pb24iLHQpO2xldCBuPXQueCp0Lngsbz10LngqdC55LHI9dC54KnQueixpPXQueCp0Lncscz10LnkqdC55LGY9dC55KnQueix1PXQueSp0LncsYz10LnoqdC56LGw9dC56KnQudyxwPXQudyp0LncsZD1uLXMtYytwLG09Miooby1sKSxfPTIqKHIrdSksZz0yKihvK2wpLGI9LW4rcy1jK3AsTz0yKihmLWkpLFQ9Miooci11KSxFPTIqKGYraSksdz0tbi1zK2MrcDtyZXR1cm4gaChlKT8oZVswXT1kLGVbMV09ZyxlWzJdPVQsZVszXT1tLGVbNF09YixlWzVdPUUsZVs2XT1fLGVbN109TyxlWzhdPXcsZSk6bmV3IHd0KGQsbSxfLGcsYixPLFQsRSx3KX07d3QuZnJvbUhlYWRpbmdQaXRjaFJvbGw9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoImhlYWRpbmdQaXRjaFJvbGwiLHQpO2xldCBuPU1hdGguY29zKC10LnBpdGNoKSxvPU1hdGguY29zKC10LmhlYWRpbmcpLHI9TWF0aC5jb3ModC5yb2xsKSxpPU1hdGguc2luKC10LnBpdGNoKSxzPU1hdGguc2luKC10LmhlYWRpbmcpLGY9TWF0aC5zaW4odC5yb2xsKSx1PW4qbyxjPS1yKnMrZippKm8sbD1mKnMrcippKm8scD1uKnMsZD1yKm8rZippKnMsbT0tZipvK3IqaSpzLF89LWksZz1mKm4sYj1yKm47cmV0dXJuIGgoZSk/KGVbMF09dSxlWzFdPXAsZVsyXT1fLGVbM109YyxlWzRdPWQsZVs1XT1nLGVbNl09bCxlWzddPW0sZVs4XT1iLGUpOm5ldyB3dCh1LGMsbCxwLGQsbSxfLGcsYil9O3d0LmZyb21TY2FsZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInNjYWxlIix0KSxoKGUpPyhlWzBdPXQueCxlWzFdPTAsZVsyXT0wLGVbM109MCxlWzRdPXQueSxlWzVdPTAsZVs2XT0wLGVbN109MCxlWzhdPXQueixlKTpuZXcgd3QodC54LDAsMCwwLHQueSwwLDAsMCx0LnopfTt3dC5mcm9tVW5pZm9ybVNjYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm51bWJlcigic2NhbGUiLHQpLGgoZSk/KGVbMF09dCxlWzFdPTAsZVsyXT0wLGVbM109MCxlWzRdPXQsZVs1XT0wLGVbNl09MCxlWzddPTAsZVs4XT10LGUpOm5ldyB3dCh0LDAsMCwwLHQsMCwwLDAsdCl9O3d0LmZyb21Dcm9zc1Byb2R1Y3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2ZWN0b3IiLHQpLGgoZSk/KGVbMF09MCxlWzFdPXQueixlWzJdPS10LnksZVszXT0tdC56LGVbNF09MCxlWzVdPXQueCxlWzZdPXQueSxlWzddPS10LngsZVs4XT0wLGUpOm5ldyB3dCgwLC10LnosdC55LHQueiwwLC10LngsLXQueSx0LngsMCl9O3d0LmZyb21Sb3RhdGlvblg9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5udW1iZXIoImFuZ2xlIix0KTtsZXQgbj1NYXRoLmNvcyh0KSxvPU1hdGguc2luKHQpO3JldHVybiBoKGUpPyhlWzBdPTEsZVsxXT0wLGVbMl09MCxlWzNdPTAsZVs0XT1uLGVbNV09byxlWzZdPTAsZVs3XT0tbyxlWzhdPW4sZSk6bmV3IHd0KDEsMCwwLDAsbiwtbywwLG8sbil9O3d0LmZyb21Sb3RhdGlvblk9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5udW1iZXIoImFuZ2xlIix0KTtsZXQgbj1NYXRoLmNvcyh0KSxvPU1hdGguc2luKHQpO3JldHVybiBoKGUpPyhlWzBdPW4sZVsxXT0wLGVbMl09LW8sZVszXT0wLGVbNF09MSxlWzVdPTAsZVs2XT1vLGVbN109MCxlWzhdPW4sZSk6bmV3IHd0KG4sMCxvLDAsMSwwLC1vLDAsbil9O3d0LmZyb21Sb3RhdGlvblo9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5udW1iZXIoImFuZ2xlIix0KTtsZXQgbj1NYXRoLmNvcyh0KSxvPU1hdGguc2luKHQpO3JldHVybiBoKGUpPyhlWzBdPW4sZVsxXT1vLGVbMl09MCxlWzNdPS1vLGVbNF09bixlWzVdPTAsZVs2XT0wLGVbN109MCxlWzhdPTEsZSk6bmV3IHd0KG4sLW8sMCxvLG4sMCwwLDAsMSl9O3d0LnRvQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLGgoZSk/KGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlWzRdPXRbNF0sZVs1XT10WzVdLGVbNl09dFs2XSxlWzddPXRbN10sZVs4XT10WzhdLGUpOlt0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSx0WzZdLHRbN10sdFs4XV19O3d0LmdldEVsZW1lbnRJbmRleD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygicm93IixlLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJyb3ciLGUsMikseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImNvbHVtbiIsdCwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiY29sdW1uIix0LDIpLHQqMytlfTt3dC5nZXRDb2x1bW49ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiaW5kZXgiLGUsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoImluZGV4IixlLDIpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1lKjMscj10W29dLGk9dFtvKzFdLHM9dFtvKzJdO3JldHVybiBuLng9cixuLnk9aSxuLno9cyxufTt3dC5zZXRDb2x1bW49ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiaW5kZXgiLGUsMikseS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKSxvPXd0LmNsb25lKHQsbyk7bGV0IHI9ZSozO3JldHVybiBvW3JdPW4ueCxvW3IrMV09bi55LG9bcisyXT1uLnosb307d3QuZ2V0Um93PWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImluZGV4IixlLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwyKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89dFtlXSxyPXRbZSszXSxpPXRbZSs2XTtyZXR1cm4gbi54PW8sbi55PXIsbi56PWksbn07d3Quc2V0Um93PWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImluZGV4IixlLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwyKSx5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pLG89d3QuY2xvbmUodCxvKSxvW2VdPW4ueCxvW2UrM109bi55LG9bZSs2XT1uLnosb307aEM9bmV3IGE7d3Quc2V0U2NhbGU9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInNjYWxlIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89d3QuZ2V0U2NhbGUodCxoQykscj1lLngvby54LGk9ZS55L28ueSxzPWUuei9vLno7cmV0dXJuIG5bMF09dFswXSpyLG5bMV09dFsxXSpyLG5bMl09dFsyXSpyLG5bM109dFszXSppLG5bNF09dFs0XSppLG5bNV09dFs1XSppLG5bNl09dFs2XSpzLG5bN109dFs3XSpzLG5bOF09dFs4XSpzLG59O19DPW5ldyBhO3d0LnNldFVuaWZvcm1TY2FsZT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz13dC5nZXRTY2FsZSh0LF9DKSxyPWUvby54LGk9ZS9vLnkscz1lL28uejtyZXR1cm4gblswXT10WzBdKnIsblsxXT10WzFdKnIsblsyXT10WzJdKnIsblszXT10WzNdKmksbls0XT10WzRdKmksbls1XT10WzVdKmksbls2XT10WzZdKnMsbls3XT10WzddKnMsbls4XT10WzhdKnMsbn07Ym09bmV3IGE7d3QuZ2V0U2NhbGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxlLng9YS5tYWduaXR1ZGUoYS5mcm9tRWxlbWVudHModFswXSx0WzFdLHRbMl0sYm0pKSxlLnk9YS5tYWduaXR1ZGUoYS5mcm9tRWxlbWVudHModFszXSx0WzRdLHRbNV0sYm0pKSxlLno9YS5tYWduaXR1ZGUoYS5mcm9tRWxlbWVudHModFs2XSx0WzddLHRbOF0sYm0pKSxlfTttMT1uZXcgYTt3dC5nZXRNYXhpbXVtU2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHd0LmdldFNjYWxlKHQsbTEpLGEubWF4aW11bUNvbXBvbmVudChtMSl9O3lDPW5ldyBhO3d0LnNldFJvdGF0aW9uPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPXd0LmdldFNjYWxlKHQseUMpO3JldHVybiBuWzBdPWVbMF0qby54LG5bMV09ZVsxXSpvLngsblsyXT1lWzJdKm8ueCxuWzNdPWVbM10qby55LG5bNF09ZVs0XSpvLnksbls1XT1lWzVdKm8ueSxuWzZdPWVbNl0qby56LG5bN109ZVs3XSpvLnosbls4XT1lWzhdKm8ueixufTtnQz1uZXcgYTt3dC5nZXRSb3RhdGlvbj1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSk7bGV0IG49d3QuZ2V0U2NhbGUodCxnQyk7cmV0dXJuIGVbMF09dFswXS9uLngsZVsxXT10WzFdL24ueCxlWzJdPXRbMl0vbi54LGVbM109dFszXS9uLnksZVs0XT10WzRdL24ueSxlWzVdPXRbNV0vbi55LGVbNl09dFs2XS9uLnosZVs3XT10WzddL24ueixlWzhdPXRbOF0vbi56LGV9O3d0Lm11bHRpcGx5PWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz10WzBdKmVbMF0rdFszXSplWzFdK3RbNl0qZVsyXSxyPXRbMV0qZVswXSt0WzRdKmVbMV0rdFs3XSplWzJdLGk9dFsyXSplWzBdK3RbNV0qZVsxXSt0WzhdKmVbMl0scz10WzBdKmVbM10rdFszXSplWzRdK3RbNl0qZVs1XSxmPXRbMV0qZVszXSt0WzRdKmVbNF0rdFs3XSplWzVdLHU9dFsyXSplWzNdK3RbNV0qZVs0XSt0WzhdKmVbNV0sYz10WzBdKmVbNl0rdFszXSplWzddK3RbNl0qZVs4XSxsPXRbMV0qZVs2XSt0WzRdKmVbN10rdFs3XSplWzhdLHA9dFsyXSplWzZdK3RbNV0qZVs3XSt0WzhdKmVbOF07cmV0dXJuIG5bMF09byxuWzFdPXIsblsyXT1pLG5bM109cyxuWzRdPWYsbls1XT11LG5bNl09YyxuWzddPWwsbls4XT1wLG59O3d0LmFkZD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG5bMF09dFswXStlWzBdLG5bMV09dFsxXStlWzFdLG5bMl09dFsyXStlWzJdLG5bM109dFszXStlWzNdLG5bNF09dFs0XStlWzRdLG5bNV09dFs1XStlWzVdLG5bNl09dFs2XStlWzZdLG5bN109dFs3XStlWzddLG5bOF09dFs4XStlWzhdLG59O3d0LnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksblswXT10WzBdLWVbMF0sblsxXT10WzFdLWVbMV0sblsyXT10WzJdLWVbMl0sblszXT10WzNdLWVbM10sbls0XT10WzRdLWVbNF0sbls1XT10WzVdLWVbNV0sbls2XT10WzZdLWVbNl0sbls3XT10WzddLWVbN10sbls4XT10WzhdLWVbOF0sbn07d3QubXVsdGlwbHlCeVZlY3Rvcj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89ZS54LHI9ZS55LGk9ZS56LHM9dFswXSpvK3RbM10qcit0WzZdKmksZj10WzFdKm8rdFs0XSpyK3RbN10qaSx1PXRbMl0qbyt0WzVdKnIrdFs4XSppO3JldHVybiBuLng9cyxuLnk9ZixuLno9dSxufTt3dC5tdWx0aXBseUJ5U2NhbGFyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGFyIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksblswXT10WzBdKmUsblsxXT10WzFdKmUsblsyXT10WzJdKmUsblszXT10WzNdKmUsbls0XT10WzRdKmUsbls1XT10WzVdKmUsbls2XT10WzZdKmUsbls3XT10WzddKmUsbls4XT10WzhdKmUsbn07d3QubXVsdGlwbHlCeVNjYWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuWzBdPXRbMF0qZS54LG5bMV09dFsxXSplLngsblsyXT10WzJdKmUueCxuWzNdPXRbM10qZS55LG5bNF09dFs0XSplLnksbls1XT10WzVdKmUueSxuWzZdPXRbNl0qZS56LG5bN109dFs3XSplLnosbls4XT10WzhdKmUueixufTt3dC5tdWx0aXBseUJ5VW5pZm9ybVNjYWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuWzBdPXRbMF0qZSxuWzFdPXRbMV0qZSxuWzJdPXRbMl0qZSxuWzNdPXRbM10qZSxuWzRdPXRbNF0qZSxuWzVdPXRbNV0qZSxuWzZdPXRbNl0qZSxuWzddPXRbN10qZSxuWzhdPXRbOF0qZSxufTt3dC5uZWdhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxlWzBdPS10WzBdLGVbMV09LXRbMV0sZVsyXT0tdFsyXSxlWzNdPS10WzNdLGVbNF09LXRbNF0sZVs1XT0tdFs1XSxlWzZdPS10WzZdLGVbN109LXRbN10sZVs4XT0tdFs4XSxlfTt3dC50cmFuc3Bvc2U9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPXRbMF0sbz10WzNdLHI9dFs2XSxpPXRbMV0scz10WzRdLGY9dFs3XSx1PXRbMl0sYz10WzVdLGw9dFs4XTtyZXR1cm4gZVswXT1uLGVbMV09byxlWzJdPXIsZVszXT1pLGVbNF09cyxlWzVdPWYsZVs2XT11LGVbN109YyxlWzhdPWwsZX07d209WzEsMCwwXSxUbT1bMiwyLDFdO0hsPW5ldyB3dCxoMT1uZXcgd3Q7d3QuY29tcHV0ZUVpZ2VuRGVjb21wb3NpdGlvbj1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KTtsZXQgbj1NLkVQU0lMT04yMCxvPTEwLHI9MCxpPTA7aChlKXx8KGU9e30pO2xldCBzPWUudW5pdGFyeT13dC5jbG9uZSh3dC5JREVOVElUWSxlLnVuaXRhcnkpLGY9ZS5kaWFnb25hbD13dC5jbG9uZSh0LGUuZGlhZ29uYWwpLHU9bipBQyhmKTtmb3IoO2k8byYmYkMoZik+dTspd0MoZixIbCksd3QudHJhbnNwb3NlKEhsLGgxKSx3dC5tdWx0aXBseShmLEhsLGYpLHd0Lm11bHRpcGx5KGgxLGYsZiksd3QubXVsdGlwbHkocyxIbCxzKSwrK3I+MiYmKCsraSxyPTApO3JldHVybiBlfTt3dC5hYnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxlWzBdPU1hdGguYWJzKHRbMF0pLGVbMV09TWF0aC5hYnModFsxXSksZVsyXT1NYXRoLmFicyh0WzJdKSxlWzNdPU1hdGguYWJzKHRbM10pLGVbNF09TWF0aC5hYnModFs0XSksZVs1XT1NYXRoLmFicyh0WzVdKSxlWzZdPU1hdGguYWJzKHRbNl0pLGVbN109TWF0aC5hYnModFs3XSksZVs4XT1NYXRoLmFicyh0WzhdKSxlfTt3dC5kZXRlcm1pbmFudD1mdW5jdGlvbih0KXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCk7bGV0IGU9dFswXSxuPXRbM10sbz10WzZdLHI9dFsxXSxpPXRbNF0scz10WzddLGY9dFsyXSx1PXRbNV0sYz10WzhdO3JldHVybiBlKihpKmMtdSpzKStyKih1Km8tbipjKStmKihuKnMtaSpvKX07d3QuaW52ZXJzZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSk7bGV0IG49dFswXSxvPXRbMV0scj10WzJdLGk9dFszXSxzPXRbNF0sZj10WzVdLHU9dFs2XSxjPXRbN10sbD10WzhdLHA9d3QuZGV0ZXJtaW5hbnQodCk7aWYoTWF0aC5hYnMocCk8PU0uRVBTSUxPTjE1KXRocm93IG5ldyBCKCJtYXRyaXggaXMgbm90IGludmVydGlibGUiKTtlWzBdPXMqbC1jKmYsZVsxXT1jKnItbypsLGVbMl09bypmLXMqcixlWzNdPXUqZi1pKmwsZVs0XT1uKmwtdSpyLGVbNV09aSpyLW4qZixlWzZdPWkqYy11KnMsZVs3XT11Km8tbipjLGVbOF09bipzLWkqbztsZXQgZD0xL3A7cmV0dXJuIHd0Lm11bHRpcGx5QnlTY2FsYXIoZSxkLGUpfTtUQz1uZXcgd3Q7d3QuaW52ZXJzZVRyYW5zcG9zZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpLHd0LmludmVyc2Uod3QudHJhbnNwb3NlKHQsVEMpLGUpfTt3dC5lcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fGgodCkmJmgoZSkmJnRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl0mJnRbM109PT1lWzNdJiZ0WzRdPT09ZVs0XSYmdFs1XT09PWVbNV0mJnRbNl09PT1lWzZdJiZ0WzddPT09ZVs3XSYmdFs4XT09PWVbOF19O3d0LmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiBuPXgobiwwKSx0PT09ZXx8aCh0KSYmaChlKSYmTWF0aC5hYnModFswXS1lWzBdKTw9biYmTWF0aC5hYnModFsxXS1lWzFdKTw9biYmTWF0aC5hYnModFsyXS1lWzJdKTw9biYmTWF0aC5hYnModFszXS1lWzNdKTw9biYmTWF0aC5hYnModFs0XS1lWzRdKTw9biYmTWF0aC5hYnModFs1XS1lWzVdKTw9biYmTWF0aC5hYnModFs2XS1lWzZdKTw9biYmTWF0aC5hYnModFs3XS1lWzddKTw9biYmTWF0aC5hYnModFs4XS1lWzhdKTw9bn07d3QuSURFTlRJVFk9T2JqZWN0LmZyZWV6ZShuZXcgd3QoMSwwLDAsMCwxLDAsMCwwLDEpKTt3dC5aRVJPPU9iamVjdC5mcmVlemUobmV3IHd0KDAsMCwwLDAsMCwwLDAsMCwwKSk7d3QuQ09MVU1OMFJPVzA9MDt3dC5DT0xVTU4wUk9XMT0xO3d0LkNPTFVNTjBST1cyPTI7d3QuQ09MVU1OMVJPVzA9Mzt3dC5DT0xVTU4xUk9XMT00O3d0LkNPTFVNTjFST1cyPTU7d3QuQ09MVU1OMlJPVzA9Njt3dC5DT0xVTU4yUk9XMT03O3d0LkNPTFVNTjJST1cyPTg7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMod3QucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB3dC5wYWNrZWRMZW5ndGh9fX0pO3d0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gd3QuY2xvbmUodGhpcyx0KX07d3QucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gd3QuZXF1YWxzKHRoaXMsdCl9O3d0LmVxdWFsc0FycmF5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdFswXT09PWVbbl0mJnRbMV09PT1lW24rMV0mJnRbMl09PT1lW24rMl0mJnRbM109PT1lW24rM10mJnRbNF09PT1lW24rNF0mJnRbNV09PT1lW24rNV0mJnRbNl09PT1lW24rNl0mJnRbN109PT1lW24rN10mJnRbOF09PT1lW24rOF19O3d0LnByb3RvdHlwZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHd0LmVxdWFsc0Vwc2lsb24odGhpcyx0LGUpfTt3dC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5gKCR7dGhpc1swXX0sICR7dGhpc1szXX0sICR7dGhpc1s2XX0pCigke3RoaXNbMV19LCAke3RoaXNbNF19LCAke3RoaXNbN119KQooJHt0aGlzWzJdfSwgJHt0aGlzWzVdfSwgJHt0aGlzWzhdfSlgfTt0dD13dH0pO2Z1bmN0aW9uIHZ0KHQsZSxuLG8pe3RoaXMueD14KHQsMCksdGhpcy55PXgoZSwwKSx0aGlzLno9eChuLDApLHRoaXMudz14KG8sMCl9dmFyIHFsLF8xLE9DLE9tLGJvLEVDLFJDLHkxLF9lLGhyPVooKCk9PntZdCgpO0l0KCk7YXQoKTtIdCgpO1d0KCk7dnQuZnJvbUVsZW1lbnRzPWZ1bmN0aW9uKHQsZSxuLG8scil7cmV0dXJuIGgocik/KHIueD10LHIueT1lLHIuej1uLHIudz1vLHIpOm5ldyB2dCh0LGUsbixvKX07dnQuZnJvbUNvbG9yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY29sb3IiLHQpLGgoZSk/KGUueD10LnJlZCxlLnk9dC5ncmVlbixlLno9dC5ibHVlLGUudz10LmFscGhhLGUpOm5ldyB2dCh0LnJlZCx0LmdyZWVuLHQuYmx1ZSx0LmFscGhhKX07dnQuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlLng9dC54LGUueT10LnksZS56PXQueixlLnc9dC53LGUpOm5ldyB2dCh0LngsdC55LHQueix0LncpfTt2dC5wYWNrZWRMZW5ndGg9NDt2dC5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj14KG4sMCksZVtuKytdPXQueCxlW24rK109dC55LGVbbisrXT10LnosZVtuXT10LncsZX07dnQudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJhcnJheSIsdCksZT14KGUsMCksaChuKXx8KG49bmV3IHZ0KSxuLng9dFtlKytdLG4ueT10W2UrK10sbi56PXRbZSsrXSxuLnc9dFtlXSxufTt2dC5wYWNrQXJyYXk9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImFycmF5Iix0KTtsZXQgbj10Lmxlbmd0aCxvPW4qNDtpZighaChlKSllPW5ldyBBcnJheShvKTtlbHNle2lmKCFBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aCE9PW8pdGhyb3cgbmV3IEIoIklmIHJlc3VsdCBpcyBhIHR5cGVkIGFycmF5LCBpdCBtdXN0IGhhdmUgZXhhY3RseSBhcnJheS5sZW5ndGggKiA0IGVsZW1lbnRzIik7ZS5sZW5ndGghPT1vJiYoZS5sZW5ndGg9byl9Zm9yKGxldCByPTA7cjxuOysrcil2dC5wYWNrKHRbcl0sZSxyKjQpO3JldHVybiBlfTt2dC51bnBhY2tBcnJheT1mdW5jdGlvbih0LGUpe2lmKHkuZGVmaW5lZCgiYXJyYXkiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJhcnJheS5sZW5ndGgiLHQubGVuZ3RoLDQpLHQubGVuZ3RoJTQhPT0wKXRocm93IG5ldyBCKCJhcnJheSBsZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQuIik7bGV0IG49dC5sZW5ndGg7aChlKT9lLmxlbmd0aD1uLzQ6ZT1uZXcgQXJyYXkobi80KTtmb3IobGV0IG89MDtvPG47bys9NCl7bGV0IHI9by80O2Vbcl09dnQudW5wYWNrKHQsbyxlW3JdKX1yZXR1cm4gZX07dnQuZnJvbUFycmF5PXZ0LnVucGFjazt2dC5tYXhpbXVtQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCksTWF0aC5tYXgodC54LHQueSx0LnosdC53KX07dnQubWluaW11bUNvbXBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLE1hdGgubWluKHQueCx0LnksdC56LHQudyl9O3Z0Lm1pbmltdW1CeUNvbXBvbmVudD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiZmlyc3QiLHQpLHkudHlwZU9mLm9iamVjdCgic2Vjb25kIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PU1hdGgubWluKHQueCxlLngpLG4ueT1NYXRoLm1pbih0LnksZS55KSxuLno9TWF0aC5taW4odC56LGUueiksbi53PU1hdGgubWluKHQudyxlLncpLG59O3Z0Lm1heGltdW1CeUNvbXBvbmVudD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiZmlyc3QiLHQpLHkudHlwZU9mLm9iamVjdCgic2Vjb25kIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PU1hdGgubWF4KHQueCxlLngpLG4ueT1NYXRoLm1heCh0LnksZS55KSxuLno9TWF0aC5tYXgodC56LGUueiksbi53PU1hdGgubWF4KHQudyxlLncpLG59O3Z0LmNsYW1wPWZ1bmN0aW9uKHQsZSxuLG8pe3kudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkudHlwZU9mLm9iamVjdCgibWluIixlKSx5LnR5cGVPZi5vYmplY3QoIm1heCIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pO2xldCByPU0uY2xhbXAodC54LGUueCxuLngpLGk9TS5jbGFtcCh0LnksZS55LG4ueSkscz1NLmNsYW1wKHQueixlLnosbi56KSxmPU0uY2xhbXAodC53LGUudyxuLncpO3JldHVybiBvLng9cixvLnk9aSxvLno9cyxvLnc9ZixvfTt2dC5tYWduaXR1ZGVTcXVhcmVkPWZ1bmN0aW9uKHQpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCksdC54KnQueCt0LnkqdC55K3Queip0LnordC53KnQud307dnQubWFnbml0dWRlPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQodnQubWFnbml0dWRlU3F1YXJlZCh0KSl9O3FsPW5ldyB2dDt2dC5kaXN0YW5jZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHZ0LnN1YnRyYWN0KHQsZSxxbCksdnQubWFnbml0dWRlKHFsKX07dnQuZGlzdGFuY2VTcXVhcmVkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSksdnQuc3VidHJhY3QodCxlLHFsKSx2dC5tYWduaXR1ZGVTcXVhcmVkKHFsKX07dnQubm9ybWFsaXplPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj12dC5tYWduaXR1ZGUodCk7aWYoZS54PXQueC9uLGUueT10LnkvbixlLno9dC56L24sZS53PXQudy9uLGlzTmFOKGUueCl8fGlzTmFOKGUueSl8fGlzTmFOKGUueil8fGlzTmFOKGUudykpdGhyb3cgbmV3IEIoIm5vcm1hbGl6ZWQgcmVzdWx0IGlzIG5vdCBhIG51bWJlciIpO3JldHVybiBlfTt2dC5kb3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx0LngqZS54K3QueSplLnkrdC56KmUueit0LncqZS53fTt2dC5tdWx0aXBseUNvbXBvbmVudHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54KmUueCxuLnk9dC55KmUueSxuLno9dC56KmUueixuLnc9dC53KmUudyxufTt2dC5kaXZpZGVDb21wb25lbnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PXQueC9lLngsbi55PXQueS9lLnksbi56PXQuei9lLnosbi53PXQudy9lLncsbn07dnQuYWRkPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PXQueCtlLngsbi55PXQueStlLnksbi56PXQueitlLnosbi53PXQudytlLncsbn07dnQuc3VidHJhY3Q9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54LWUueCxuLnk9dC55LWUueSxuLno9dC56LWUueixuLnc9dC53LWUudyxufTt2dC5tdWx0aXBseUJ5U2NhbGFyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGFyIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PXQueCplLG4ueT10LnkqZSxuLno9dC56KmUsbi53PXQudyplLG59O3Z0LmRpdmlkZUJ5U2NhbGFyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGFyIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PXQueC9lLG4ueT10LnkvZSxuLno9dC56L2Usbi53PXQudy9lLG59O3Z0Lm5lZ2F0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpLGUueD0tdC54LGUueT0tdC55LGUuej0tdC56LGUudz0tdC53LGV9O3Z0LmFicz1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpLGUueD1NYXRoLmFicyh0LngpLGUueT1NYXRoLmFicyh0LnkpLGUuej1NYXRoLmFicyh0LnopLGUudz1NYXRoLmFicyh0LncpLGV9O18xPW5ldyB2dDt2dC5sZXJwPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInN0YXJ0Iix0KSx5LnR5cGVPZi5vYmplY3QoImVuZCIsZSkseS50eXBlT2YubnVtYmVyKCJ0IixuKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbyksdnQubXVsdGlwbHlCeVNjYWxhcihlLG4sXzEpLG89dnQubXVsdGlwbHlCeVNjYWxhcih0LDEtbixvKSx2dC5hZGQoXzEsbyxvKX07T0M9bmV3IHZ0O3Z0Lm1vc3RPcnRob2dvbmFsQXhpcz1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSk7bGV0IG49dnQubm9ybWFsaXplKHQsT0MpO3JldHVybiB2dC5hYnMobixuKSxuLng8PW4ueT9uLng8PW4uej9uLng8PW4udz9lPXZ0LmNsb25lKHZ0LlVOSVRfWCxlKTplPXZ0LmNsb25lKHZ0LlVOSVRfVyxlKTpuLno8PW4udz9lPXZ0LmNsb25lKHZ0LlVOSVRfWixlKTplPXZ0LmNsb25lKHZ0LlVOSVRfVyxlKTpuLnk8PW4uej9uLnk8PW4udz9lPXZ0LmNsb25lKHZ0LlVOSVRfWSxlKTplPXZ0LmNsb25lKHZ0LlVOSVRfVyxlKTpuLno8PW4udz9lPXZ0LmNsb25lKHZ0LlVOSVRfWixlKTplPXZ0LmNsb25lKHZ0LlVOSVRfVyxlKSxlfTt2dC5lcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fGgodCkmJmgoZSkmJnQueD09PWUueCYmdC55PT09ZS55JiZ0Lno9PT1lLnomJnQudz09PWUud307dnQuZXF1YWxzQXJyYXk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0Lng9PT1lW25dJiZ0Lnk9PT1lW24rMV0mJnQuej09PWVbbisyXSYmdC53PT09ZVtuKzNdfTt2dC5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB0PT09ZXx8aCh0KSYmaChlKSYmTS5lcXVhbHNFcHNpbG9uKHQueCxlLngsbixvKSYmTS5lcXVhbHNFcHNpbG9uKHQueSxlLnksbixvKSYmTS5lcXVhbHNFcHNpbG9uKHQueixlLnosbixvKSYmTS5lcXVhbHNFcHNpbG9uKHQudyxlLncsbixvKX07dnQuWkVSTz1PYmplY3QuZnJlZXplKG5ldyB2dCgwLDAsMCwwKSk7dnQuT05FPU9iamVjdC5mcmVlemUobmV3IHZ0KDEsMSwxLDEpKTt2dC5VTklUX1g9T2JqZWN0LmZyZWV6ZShuZXcgdnQoMSwwLDAsMCkpO3Z0LlVOSVRfWT1PYmplY3QuZnJlZXplKG5ldyB2dCgwLDEsMCwwKSk7dnQuVU5JVF9aPU9iamVjdC5mcmVlemUobmV3IHZ0KDAsMCwxLDApKTt2dC5VTklUX1c9T2JqZWN0LmZyZWV6ZShuZXcgdnQoMCwwLDAsMSkpO3Z0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gdnQuY2xvbmUodGhpcyx0KX07dnQucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gdnQuZXF1YWxzKHRoaXMsdCl9O3Z0LnByb3RvdHlwZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdnQuZXF1YWxzRXBzaWxvbih0aGlzLHQsZSxuKX07dnQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXMueH0sICR7dGhpcy55fSwgJHt0aGlzLnp9LCAke3RoaXMud30pYH07T209bmV3IEZsb2F0MzJBcnJheSgxKSxibz1uZXcgVWludDhBcnJheShPbS5idWZmZXIpLEVDPW5ldyBVaW50MzJBcnJheShbMjg3NDU0MDIwXSksUkM9bmV3IFVpbnQ4QXJyYXkoRUMuYnVmZmVyKSx5MT1SQ1swXT09PTY4O3Z0LnBhY2tGbG9hdD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5udW1iZXIoInZhbHVlIix0KSxoKGUpfHwoZT1uZXcgdnQpLE9tWzBdPXQseTE/KGUueD1ib1swXSxlLnk9Ym9bMV0sZS56PWJvWzJdLGUudz1ib1szXSk6KGUueD1ib1szXSxlLnk9Ym9bMl0sZS56PWJvWzFdLGUudz1ib1swXSksZX07dnQudW5wYWNrRmxvYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgicGFja2VkRmxvYXQiLHQpLHkxPyhib1swXT10LngsYm9bMV09dC55LGJvWzJdPXQueixib1szXT10LncpOihib1swXT10LncsYm9bMV09dC56LGJvWzJdPXQueSxib1szXT10LngpLE9tWzBdfTtfZT12dH0pO2Z1bmN0aW9uIGNmKHQpe3RoaXMubmFtZT0iUnVudGltZUVycm9yIix0aGlzLm1lc3NhZ2U9dDtsZXQgZTt0cnl7dGhyb3cgbmV3IEVycm9yfWNhdGNoKG4pe2U9bi5zdGFja310aGlzLnN0YWNrPWV9dmFyIGdlLEpyPVooKCk9PnthdCgpO2goT2JqZWN0LmNyZWF0ZSkmJihjZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLGNmLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jZik7Y2YucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7bGV0IHQ9YCR7dGhpcy5uYW1lfTogJHt0aGlzLm1lc3NhZ2V9YDtyZXR1cm4gaCh0aGlzLnN0YWNrKSYmKHQrPWAKJHt0aGlzLnN0YWNrLnRvU3RyaW5nKCl9YCksdH07Z2U9Y2Z9KTtmdW5jdGlvbiBBdCh0LGUsbixvLHIsaSxzLGYsdSxjLGwscCxkLG0sXyxnKXt0aGlzWzBdPXgodCwwKSx0aGlzWzFdPXgociwwKSx0aGlzWzJdPXgodSwwKSx0aGlzWzNdPXgoZCwwKSx0aGlzWzRdPXgoZSwwKSx0aGlzWzVdPXgoaSwwKSx0aGlzWzZdPXgoYywwKSx0aGlzWzddPXgobSwwKSx0aGlzWzhdPXgobiwwKSx0aGlzWzldPXgocywwKSx0aGlzWzEwXT14KGwsMCksdGhpc1sxMV09eChfLDApLHRoaXNbMTJdPXgobywwKSx0aGlzWzEzXT14KGYsMCksdGhpc1sxNF09eChwLDApLHRoaXNbMTVdPXgoZywwKX12YXIgcWMsS2MsYWYsU0MsQ0MsRW0sZzEseEMsUEMsTUMsTkMsSUMsdkMsREMsc3Qsa249WigoKT0+e1V0KCk7aHIoKTtZdCgpO0l0KCk7YXQoKTtIdCgpO1d0KCk7Rm4oKTtKcigpO0F0LnBhY2tlZExlbmd0aD0xNjtBdC5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj14KG4sMCksZVtuKytdPXRbMF0sZVtuKytdPXRbMV0sZVtuKytdPXRbMl0sZVtuKytdPXRbM10sZVtuKytdPXRbNF0sZVtuKytdPXRbNV0sZVtuKytdPXRbNl0sZVtuKytdPXRbN10sZVtuKytdPXRbOF0sZVtuKytdPXRbOV0sZVtuKytdPXRbMTBdLGVbbisrXT10WzExXSxlW24rK109dFsxMl0sZVtuKytdPXRbMTNdLGVbbisrXT10WzE0XSxlW25dPXRbMTVdLGV9O0F0LnVucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkuZGVmaW5lZCgiYXJyYXkiLHQpLGU9eChlLDApLGgobil8fChuPW5ldyBBdCksblswXT10W2UrK10sblsxXT10W2UrK10sblsyXT10W2UrK10sblszXT10W2UrK10sbls0XT10W2UrK10sbls1XT10W2UrK10sbls2XT10W2UrK10sbls3XT10W2UrK10sbls4XT10W2UrK10sbls5XT10W2UrK10sblsxMF09dFtlKytdLG5bMTFdPXRbZSsrXSxuWzEyXT10W2UrK10sblsxM109dFtlKytdLG5bMTRdPXRbZSsrXSxuWzE1XT10W2VdLG59O0F0LnBhY2tBcnJheT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiYXJyYXkiLHQpO2xldCBuPXQubGVuZ3RoLG89bioxNjtpZighaChlKSllPW5ldyBBcnJheShvKTtlbHNle2lmKCFBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aCE9PW8pdGhyb3cgbmV3IEIoIklmIHJlc3VsdCBpcyBhIHR5cGVkIGFycmF5LCBpdCBtdXN0IGhhdmUgZXhhY3RseSBhcnJheS5sZW5ndGggKiAxNiBlbGVtZW50cyIpO2UubGVuZ3RoIT09byYmKGUubGVuZ3RoPW8pfWZvcihsZXQgcj0wO3I8bjsrK3IpQXQucGFjayh0W3JdLGUscioxNik7cmV0dXJuIGV9O0F0LnVucGFja0FycmF5PWZ1bmN0aW9uKHQsZSl7aWYoeS5kZWZpbmVkKCJhcnJheSIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImFycmF5Lmxlbmd0aCIsdC5sZW5ndGgsMTYpLHQubGVuZ3RoJTE2IT09MCl0aHJvdyBuZXcgQigiYXJyYXkgbGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi4iKTtsZXQgbj10Lmxlbmd0aDtoKGUpP2UubGVuZ3RoPW4vMTY6ZT1uZXcgQXJyYXkobi8xNik7Zm9yKGxldCBvPTA7bzxuO28rPTE2KXtsZXQgcj1vLzE2O2Vbcl09QXQudW5wYWNrKHQsbyxlW3JdKX1yZXR1cm4gZX07QXQuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZVs0XT10WzRdLGVbNV09dFs1XSxlWzZdPXRbNl0sZVs3XT10WzddLGVbOF09dFs4XSxlWzldPXRbOV0sZVsxMF09dFsxMF0sZVsxMV09dFsxMV0sZVsxMl09dFsxMl0sZVsxM109dFsxM10sZVsxNF09dFsxNF0sZVsxNV09dFsxNV0sZSk6bmV3IEF0KHRbMF0sdFs0XSx0WzhdLHRbMTJdLHRbMV0sdFs1XSx0WzldLHRbMTNdLHRbMl0sdFs2XSx0WzEwXSx0WzE0XSx0WzNdLHRbN10sdFsxMV0sdFsxNV0pfTtBdC5mcm9tQXJyYXk9QXQudW5wYWNrO0F0LmZyb21Db2x1bW5NYWpvckFycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkuZGVmaW5lZCgidmFsdWVzIix0KSxBdC5jbG9uZSh0LGUpfTtBdC5mcm9tUm93TWFqb3JBcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB5LmRlZmluZWQoInZhbHVlcyIsdCksaChlKT8oZVswXT10WzBdLGVbMV09dFs0XSxlWzJdPXRbOF0sZVszXT10WzEyXSxlWzRdPXRbMV0sZVs1XT10WzVdLGVbNl09dFs5XSxlWzddPXRbMTNdLGVbOF09dFsyXSxlWzldPXRbNl0sZVsxMF09dFsxMF0sZVsxMV09dFsxNF0sZVsxMl09dFszXSxlWzEzXT10WzddLGVbMTRdPXRbMTFdLGVbMTVdPXRbMTVdLGUpOm5ldyBBdCh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSx0WzZdLHRbN10sdFs4XSx0WzldLHRbMTBdLHRbMTFdLHRbMTJdLHRbMTNdLHRbMTRdLHRbMTVdKX07QXQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInJvdGF0aW9uIix0KSxlPXgoZSxhLlpFUk8pLGgobik/KG5bMF09dFswXSxuWzFdPXRbMV0sblsyXT10WzJdLG5bM109MCxuWzRdPXRbM10sbls1XT10WzRdLG5bNl09dFs1XSxuWzddPTAsbls4XT10WzZdLG5bOV09dFs3XSxuWzEwXT10WzhdLG5bMTFdPTAsblsxMl09ZS54LG5bMTNdPWUueSxuWzE0XT1lLnosblsxNV09MSxuKTpuZXcgQXQodFswXSx0WzNdLHRbNl0sZS54LHRbMV0sdFs0XSx0WzddLGUueSx0WzJdLHRbNV0sdFs4XSxlLnosMCwwLDAsMSl9O0F0LmZyb21UcmFuc2xhdGlvblF1YXRlcm5pb25Sb3RhdGlvblNjYWxlPWZ1bmN0aW9uKHQsZSxuLG8pe3kudHlwZU9mLm9iamVjdCgidHJhbnNsYXRpb24iLHQpLHkudHlwZU9mLm9iamVjdCgicm90YXRpb24iLGUpLHkudHlwZU9mLm9iamVjdCgic2NhbGUiLG4pLGgobyl8fChvPW5ldyBBdCk7bGV0IHI9bi54LGk9bi55LHM9bi56LGY9ZS54KmUueCx1PWUueCplLnksYz1lLngqZS56LGw9ZS54KmUudyxwPWUueSplLnksZD1lLnkqZS56LG09ZS55KmUudyxfPWUueiplLnosZz1lLnoqZS53LGI9ZS53KmUudyxPPWYtcC1fK2IsVD0yKih1LWcpLEU9MiooYyttKSx3PTIqKHUrZyksQz0tZitwLV8rYixOPTIqKGQtbCksST0yKihjLW0pLEw9MiooZCtsKSx2PS1mLXArXytiO3JldHVybiBvWzBdPU8qcixvWzFdPXcqcixvWzJdPUkqcixvWzNdPTAsb1s0XT1UKmksb1s1XT1DKmksb1s2XT1MKmksb1s3XT0wLG9bOF09RSpzLG9bOV09TipzLG9bMTBdPXYqcyxvWzExXT0wLG9bMTJdPXQueCxvWzEzXT10Lnksb1sxNF09dC56LG9bMTVdPTEsb307QXQuZnJvbVRyYW5zbGF0aW9uUm90YXRpb25TY2FsZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInRyYW5zbGF0aW9uUm90YXRpb25TY2FsZSIsdCksQXQuZnJvbVRyYW5zbGF0aW9uUXVhdGVybmlvblJvdGF0aW9uU2NhbGUodC50cmFuc2xhdGlvbix0LnJvdGF0aW9uLHQuc2NhbGUsZSl9O0F0LmZyb21UcmFuc2xhdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInRyYW5zbGF0aW9uIix0KSxBdC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbih0dC5JREVOVElUWSx0LGUpfTtBdC5mcm9tU2NhbGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJzY2FsZSIsdCksaChlKT8oZVswXT10LngsZVsxXT0wLGVbMl09MCxlWzNdPTAsZVs0XT0wLGVbNV09dC55LGVbNl09MCxlWzddPTAsZVs4XT0wLGVbOV09MCxlWzEwXT10LnosZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLGUpOm5ldyBBdCh0LngsMCwwLDAsMCx0LnksMCwwLDAsMCx0LnosMCwwLDAsMCwxKX07QXQuZnJvbVVuaWZvcm1TY2FsZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5udW1iZXIoInNjYWxlIix0KSxoKGUpPyhlWzBdPXQsZVsxXT0wLGVbMl09MCxlWzNdPTAsZVs0XT0wLGVbNV09dCxlWzZdPTAsZVs3XT0wLGVbOF09MCxlWzldPTAsZVsxMF09dCxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsZSk6bmV3IEF0KHQsMCwwLDAsMCx0LDAsMCwwLDAsdCwwLDAsMCwwLDEpfTtBdC5mcm9tUm90YXRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJyb3RhdGlvbiIsdCksaChlKXx8KGU9bmV3IEF0KSxlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPTAsZVs0XT10WzNdLGVbNV09dFs0XSxlWzZdPXRbNV0sZVs3XT0wLGVbOF09dFs2XSxlWzldPXRbN10sZVsxMF09dFs4XSxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsZX07cWM9bmV3IGEsS2M9bmV3IGEsYWY9bmV3IGE7QXQuZnJvbUNhbWVyYT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiY2FtZXJhIix0KTtsZXQgbj10LnBvc2l0aW9uLG89dC5kaXJlY3Rpb24scj10LnVwO3kudHlwZU9mLm9iamVjdCgiY2FtZXJhLnBvc2l0aW9uIixuKSx5LnR5cGVPZi5vYmplY3QoImNhbWVyYS5kaXJlY3Rpb24iLG8pLHkudHlwZU9mLm9iamVjdCgiY2FtZXJhLnVwIixyKSxhLm5vcm1hbGl6ZShvLHFjKSxhLm5vcm1hbGl6ZShhLmNyb3NzKHFjLHIsS2MpLEtjKSxhLm5vcm1hbGl6ZShhLmNyb3NzKEtjLHFjLGFmKSxhZik7bGV0IGk9S2MueCxzPUtjLnksZj1LYy56LHU9cWMueCxjPXFjLnksbD1xYy56LHA9YWYueCxkPWFmLnksbT1hZi56LF89bi54LGc9bi55LGI9bi56LE89aSotXytzKi1nK2YqLWIsVD1wKi1fK2QqLWcrbSotYixFPXUqXytjKmcrbCpiO3JldHVybiBoKGUpPyhlWzBdPWksZVsxXT1wLGVbMl09LXUsZVszXT0wLGVbNF09cyxlWzVdPWQsZVs2XT0tYyxlWzddPTAsZVs4XT1mLGVbOV09bSxlWzEwXT0tbCxlWzExXT0wLGVbMTJdPU8sZVsxM109VCxlWzE0XT1FLGVbMTVdPTEsZSk6bmV3IEF0KGkscyxmLE8scCxkLG0sVCwtdSwtYywtbCxFLDAsMCwwLDEpfTtBdC5jb21wdXRlUGVyc3BlY3RpdmVGaWVsZE9mVmlldz1mdW5jdGlvbih0LGUsbixvLHIpe3kudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbigiZm92WSIsdCwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW4oImZvdlkiLHQsTWF0aC5QSSkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuKCJuZWFyIixuLDApLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbigiZmFyIixvLDApLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixyKTtsZXQgcz0xL01hdGgudGFuKHQqLjUpLGY9cy9lLHU9KG8rbikvKG4tbyksYz0yKm8qbi8obi1vKTtyZXR1cm4gclswXT1mLHJbMV09MCxyWzJdPTAsclszXT0wLHJbNF09MCxyWzVdPXMscls2XT0wLHJbN109MCxyWzhdPTAscls5XT0wLHJbMTBdPXUsclsxMV09LTEsclsxMl09MCxyWzEzXT0wLHJbMTRdPWMsclsxNV09MCxyfTtBdC5jb21wdXRlT3J0aG9ncmFwaGljT2ZmQ2VudGVyPWZ1bmN0aW9uKHQsZSxuLG8scixpLHMpe3kudHlwZU9mLm51bWJlcigibGVmdCIsdCkseS50eXBlT2YubnVtYmVyKCJyaWdodCIsZSkseS50eXBlT2YubnVtYmVyKCJib3R0b20iLG4pLHkudHlwZU9mLm51bWJlcigidG9wIixvKSx5LnR5cGVPZi5udW1iZXIoIm5lYXIiLHIpLHkudHlwZU9mLm51bWJlcigiZmFyIixpKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIscyk7bGV0IGY9MS8oZS10KSx1PTEvKG8tbiksYz0xLyhpLXIpLGw9LShlK3QpKmYscD0tKG8rbikqdSxkPS0oaStyKSpjO3JldHVybiBmKj0yLHUqPTIsYyo9LTIsc1swXT1mLHNbMV09MCxzWzJdPTAsc1szXT0wLHNbNF09MCxzWzVdPXUsc1s2XT0wLHNbN109MCxzWzhdPTAsc1s5XT0wLHNbMTBdPWMsc1sxMV09MCxzWzEyXT1sLHNbMTNdPXAsc1sxNF09ZCxzWzE1XT0xLHN9O0F0LmNvbXB1dGVQZXJzcGVjdGl2ZU9mZkNlbnRlcj1mdW5jdGlvbih0LGUsbixvLHIsaSxzKXt5LnR5cGVPZi5udW1iZXIoImxlZnQiLHQpLHkudHlwZU9mLm51bWJlcigicmlnaHQiLGUpLHkudHlwZU9mLm51bWJlcigiYm90dG9tIixuKSx5LnR5cGVPZi5udW1iZXIoInRvcCIsbykseS50eXBlT2YubnVtYmVyKCJuZWFyIixyKSx5LnR5cGVPZi5udW1iZXIoImZhciIsaSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLHMpO2xldCBmPTIqci8oZS10KSx1PTIqci8oby1uKSxjPShlK3QpLyhlLXQpLGw9KG8rbikvKG8tbikscD0tKGkrcikvKGktciksZD0tMSxtPS0yKmkqci8oaS1yKTtyZXR1cm4gc1swXT1mLHNbMV09MCxzWzJdPTAsc1szXT0wLHNbNF09MCxzWzVdPXUsc1s2XT0wLHNbN109MCxzWzhdPWMsc1s5XT1sLHNbMTBdPXAsc1sxMV09ZCxzWzEyXT0wLHNbMTNdPTAsc1sxNF09bSxzWzE1XT0wLHN9O0F0LmNvbXB1dGVJbmZpbml0ZVBlcnNwZWN0aXZlT2ZmQ2VudGVyPWZ1bmN0aW9uKHQsZSxuLG8scixpKXt5LnR5cGVPZi5udW1iZXIoImxlZnQiLHQpLHkudHlwZU9mLm51bWJlcigicmlnaHQiLGUpLHkudHlwZU9mLm51bWJlcigiYm90dG9tIixuKSx5LnR5cGVPZi5udW1iZXIoInRvcCIsbykseS50eXBlT2YubnVtYmVyKCJuZWFyIixyKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsaSk7bGV0IHM9MipyLyhlLXQpLGY9MipyLyhvLW4pLHU9KGUrdCkvKGUtdCksYz0obytuKS8oby1uKSxsPS0xLHA9LTEsZD0tMipyO3JldHVybiBpWzBdPXMsaVsxXT0wLGlbMl09MCxpWzNdPTAsaVs0XT0wLGlbNV09ZixpWzZdPTAsaVs3XT0wLGlbOF09dSxpWzldPWMsaVsxMF09bCxpWzExXT1wLGlbMTJdPTAsaVsxM109MCxpWzE0XT1kLGlbMTVdPTAsaX07QXQuY29tcHV0ZVZpZXdwb3J0VHJhbnNmb3JtYXRpb249ZnVuY3Rpb24odCxlLG4sbyl7aChvKXx8KG89bmV3IEF0KSx0PXgodCx4LkVNUFRZX09CSkVDVCk7bGV0IHI9eCh0LngsMCksaT14KHQueSwwKSxzPXgodC53aWR0aCwwKSxmPXgodC5oZWlnaHQsMCk7ZT14KGUsMCksbj14KG4sMSk7bGV0IHU9cyouNSxjPWYqLjUsbD0obi1lKSouNSxwPXUsZD1jLG09bCxfPXIrdSxnPWkrYyxiPWUrbCxPPTE7cmV0dXJuIG9bMF09cCxvWzFdPTAsb1syXT0wLG9bM109MCxvWzRdPTAsb1s1XT1kLG9bNl09MCxvWzddPTAsb1s4XT0wLG9bOV09MCxvWzEwXT1tLG9bMTFdPTAsb1sxMl09XyxvWzEzXT1nLG9bMTRdPWIsb1sxNV09TyxvfTtBdC5jb21wdXRlVmlldz1mdW5jdGlvbih0LGUsbixvLHIpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInBvc2l0aW9uIix0KSx5LnR5cGVPZi5vYmplY3QoImRpcmVjdGlvbiIsZSkseS50eXBlT2Yub2JqZWN0KCJ1cCIsbikseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsbykseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLHIpLHJbMF09by54LHJbMV09bi54LHJbMl09LWUueCxyWzNdPTAscls0XT1vLnkscls1XT1uLnkscls2XT0tZS55LHJbN109MCxyWzhdPW8ueixyWzldPW4ueixyWzEwXT0tZS56LHJbMTFdPTAsclsxMl09LWEuZG90KG8sdCksclsxM109LWEuZG90KG4sdCksclsxNF09YS5kb3QoZSx0KSxyWzE1XT0xLHJ9O0F0LnRvQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLGgoZSk/KGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlWzRdPXRbNF0sZVs1XT10WzVdLGVbNl09dFs2XSxlWzddPXRbN10sZVs4XT10WzhdLGVbOV09dFs5XSxlWzEwXT10WzEwXSxlWzExXT10WzExXSxlWzEyXT10WzEyXSxlWzEzXT10WzEzXSxlWzE0XT10WzE0XSxlWzE1XT10WzE1XSxlKTpbdFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0sdFs2XSx0WzddLHRbOF0sdFs5XSx0WzEwXSx0WzExXSx0WzEyXSx0WzEzXSx0WzE0XSx0WzE1XV19O0F0LmdldEVsZW1lbnRJbmRleD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygicm93IixlLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJyb3ciLGUsMykseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImNvbHVtbiIsdCwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiY29sdW1uIix0LDMpLHQqNCtlfTtBdC5nZXRDb2x1bW49ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiaW5kZXgiLGUsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoImluZGV4IixlLDMpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1lKjQscj10W29dLGk9dFtvKzFdLHM9dFtvKzJdLGY9dFtvKzNdO3JldHVybiBuLng9cixuLnk9aSxuLno9cyxuLnc9ZixufTtBdC5zZXRDb2x1bW49ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiaW5kZXgiLGUsMykseS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKSxvPUF0LmNsb25lKHQsbyk7bGV0IHI9ZSo0O3JldHVybiBvW3JdPW4ueCxvW3IrMV09bi55LG9bcisyXT1uLnosb1tyKzNdPW4udyxvfTtBdC5nZXRSb3c9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiaW5kZXgiLGUsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoImluZGV4IixlLDMpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz10W2VdLHI9dFtlKzRdLGk9dFtlKzhdLHM9dFtlKzEyXTtyZXR1cm4gbi54PW8sbi55PXIsbi56PWksbi53PXMsbn07QXQuc2V0Um93PWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImluZGV4IixlLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwzKSx5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pLG89QXQuY2xvbmUodCxvKSxvW2VdPW4ueCxvW2UrNF09bi55LG9bZSs4XT1uLnosb1tlKzEyXT1uLncsb307QXQuc2V0VHJhbnNsYXRpb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJ0cmFuc2xhdGlvbiIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG5bMF09dFswXSxuWzFdPXRbMV0sblsyXT10WzJdLG5bM109dFszXSxuWzRdPXRbNF0sbls1XT10WzVdLG5bNl09dFs2XSxuWzddPXRbN10sbls4XT10WzhdLG5bOV09dFs5XSxuWzEwXT10WzEwXSxuWzExXT10WzExXSxuWzEyXT1lLngsblsxM109ZS55LG5bMTRdPWUueixuWzE1XT10WzE1XSxufTtTQz1uZXcgYTtBdC5zZXRTY2FsZT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1BdC5nZXRTY2FsZSh0LFNDKSxyPWUueC9vLngsaT1lLnkvby55LHM9ZS56L28uejtyZXR1cm4gblswXT10WzBdKnIsblsxXT10WzFdKnIsblsyXT10WzJdKnIsblszXT10WzNdLG5bNF09dFs0XSppLG5bNV09dFs1XSppLG5bNl09dFs2XSppLG5bN109dFs3XSxuWzhdPXRbOF0qcyxuWzldPXRbOV0qcyxuWzEwXT10WzEwXSpzLG5bMTFdPXRbMTFdLG5bMTJdPXRbMTJdLG5bMTNdPXRbMTNdLG5bMTRdPXRbMTRdLG5bMTVdPXRbMTVdLG59O0NDPW5ldyBhO0F0LnNldFVuaWZvcm1TY2FsZT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1BdC5nZXRTY2FsZSh0LENDKSxyPWUvby54LGk9ZS9vLnkscz1lL28uejtyZXR1cm4gblswXT10WzBdKnIsblsxXT10WzFdKnIsblsyXT10WzJdKnIsblszXT10WzNdLG5bNF09dFs0XSppLG5bNV09dFs1XSppLG5bNl09dFs2XSppLG5bN109dFs3XSxuWzhdPXRbOF0qcyxuWzldPXRbOV0qcyxuWzEwXT10WzEwXSpzLG5bMTFdPXRbMTFdLG5bMTJdPXRbMTJdLG5bMTNdPXRbMTNdLG5bMTRdPXRbMTRdLG5bMTVdPXRbMTVdLG59O0VtPW5ldyBhO0F0LmdldFNjYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZS54PWEubWFnbml0dWRlKGEuZnJvbUVsZW1lbnRzKHRbMF0sdFsxXSx0WzJdLEVtKSksZS55PWEubWFnbml0dWRlKGEuZnJvbUVsZW1lbnRzKHRbNF0sdFs1XSx0WzZdLEVtKSksZS56PWEubWFnbml0dWRlKGEuZnJvbUVsZW1lbnRzKHRbOF0sdFs5XSx0WzEwXSxFbSkpLGV9O2cxPW5ldyBhO0F0LmdldE1heGltdW1TY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gQXQuZ2V0U2NhbGUodCxnMSksYS5tYXhpbXVtQ29tcG9uZW50KGcxKX07eEM9bmV3IGE7QXQuc2V0Um90YXRpb249ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89QXQuZ2V0U2NhbGUodCx4Qyk7cmV0dXJuIG5bMF09ZVswXSpvLngsblsxXT1lWzFdKm8ueCxuWzJdPWVbMl0qby54LG5bM109dFszXSxuWzRdPWVbM10qby55LG5bNV09ZVs0XSpvLnksbls2XT1lWzVdKm8ueSxuWzddPXRbN10sbls4XT1lWzZdKm8ueixuWzldPWVbN10qby56LG5bMTBdPWVbOF0qby56LG5bMTFdPXRbMTFdLG5bMTJdPXRbMTJdLG5bMTNdPXRbMTNdLG5bMTRdPXRbMTRdLG5bMTVdPXRbMTVdLG59O1BDPW5ldyBhO0F0LmdldFJvdGF0aW9uPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj1BdC5nZXRTY2FsZSh0LFBDKTtyZXR1cm4gZVswXT10WzBdL24ueCxlWzFdPXRbMV0vbi54LGVbMl09dFsyXS9uLngsZVszXT10WzRdL24ueSxlWzRdPXRbNV0vbi55LGVbNV09dFs2XS9uLnksZVs2XT10WzhdL24ueixlWzddPXRbOV0vbi56LGVbOF09dFsxMF0vbi56LGV9O0F0Lm11bHRpcGx5PWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz10WzBdLHI9dFsxXSxpPXRbMl0scz10WzNdLGY9dFs0XSx1PXRbNV0sYz10WzZdLGw9dFs3XSxwPXRbOF0sZD10WzldLG09dFsxMF0sXz10WzExXSxnPXRbMTJdLGI9dFsxM10sTz10WzE0XSxUPXRbMTVdLEU9ZVswXSx3PWVbMV0sQz1lWzJdLE49ZVszXSxJPWVbNF0sTD1lWzVdLHY9ZVs2XSxEPWVbN10sVT1lWzhdLEE9ZVs5XSxTPWVbMTBdLFA9ZVsxMV0sRj1lWzEyXSxqPWVbMTNdLEg9ZVsxNF0saz1lWzE1XSxLPW8qRStmKncrcCpDK2cqTixYPXIqRSt1KncrZCpDK2IqTixSPWkqRStjKncrbSpDK08qTixRPXMqRStsKncrXypDK1QqTixmdD1vKkkrZipMK3AqditnKkQscHQ9cipJK3UqTCtkKnYrYipELGd0PWkqSStjKkwrbSp2K08qRCxpdD1zKkkrbCpMK18qditUKkQsTnQ9bypVK2YqQStwKlMrZypQLE90PXIqVSt1KkErZCpTK2IqUCx4dD1pKlUrYypBK20qUytPKlAsX3Q9cypVK2wqQStfKlMrVCpQLGR0PW8qRitmKmorcCpIK2cqayxWdD1yKkYrdSpqK2QqSCtiKmssenQ9aSpGK2MqaittKkgrTyprLGhlPXMqRitsKmorXypIK1QqaztyZXR1cm4gblswXT1LLG5bMV09WCxuWzJdPVIsblszXT1RLG5bNF09ZnQsbls1XT1wdCxuWzZdPWd0LG5bN109aXQsbls4XT1OdCxuWzldPU90LG5bMTBdPXh0LG5bMTFdPV90LG5bMTJdPWR0LG5bMTNdPVZ0LG5bMTRdPXp0LG5bMTVdPWhlLG59O0F0LmFkZD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG5bMF09dFswXStlWzBdLG5bMV09dFsxXStlWzFdLG5bMl09dFsyXStlWzJdLG5bM109dFszXStlWzNdLG5bNF09dFs0XStlWzRdLG5bNV09dFs1XStlWzVdLG5bNl09dFs2XStlWzZdLG5bN109dFs3XStlWzddLG5bOF09dFs4XStlWzhdLG5bOV09dFs5XStlWzldLG5bMTBdPXRbMTBdK2VbMTBdLG5bMTFdPXRbMTFdK2VbMTFdLG5bMTJdPXRbMTJdK2VbMTJdLG5bMTNdPXRbMTNdK2VbMTNdLG5bMTRdPXRbMTRdK2VbMTRdLG5bMTVdPXRbMTVdK2VbMTVdLG59O0F0LnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksblswXT10WzBdLWVbMF0sblsxXT10WzFdLWVbMV0sblsyXT10WzJdLWVbMl0sblszXT10WzNdLWVbM10sbls0XT10WzRdLWVbNF0sbls1XT10WzVdLWVbNV0sbls2XT10WzZdLWVbNl0sbls3XT10WzddLWVbN10sbls4XT10WzhdLWVbOF0sbls5XT10WzldLWVbOV0sblsxMF09dFsxMF0tZVsxMF0sblsxMV09dFsxMV0tZVsxMV0sblsxMl09dFsxMl0tZVsxMl0sblsxM109dFsxM10tZVsxM10sblsxNF09dFsxNF0tZVsxNF0sblsxNV09dFsxNV0tZVsxNV0sbn07QXQubXVsdGlwbHlUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89dFswXSxyPXRbMV0saT10WzJdLHM9dFs0XSxmPXRbNV0sdT10WzZdLGM9dFs4XSxsPXRbOV0scD10WzEwXSxkPXRbMTJdLG09dFsxM10sXz10WzE0XSxnPWVbMF0sYj1lWzFdLE89ZVsyXSxUPWVbNF0sRT1lWzVdLHc9ZVs2XSxDPWVbOF0sTj1lWzldLEk9ZVsxMF0sTD1lWzEyXSx2PWVbMTNdLEQ9ZVsxNF0sVT1vKmcrcypiK2MqTyxBPXIqZytmKmIrbCpPLFM9aSpnK3UqYitwKk8sUD1vKlQrcypFK2MqdyxGPXIqVCtmKkUrbCp3LGo9aSpUK3UqRStwKncsSD1vKkMrcypOK2MqSSxrPXIqQytmKk4rbCpJLEs9aSpDK3UqTitwKkksWD1vKkwrcyp2K2MqRCtkLFI9cipMK2YqditsKkQrbSxRPWkqTCt1KnYrcCpEK187cmV0dXJuIG5bMF09VSxuWzFdPUEsblsyXT1TLG5bM109MCxuWzRdPVAsbls1XT1GLG5bNl09aixuWzddPTAsbls4XT1ILG5bOV09ayxuWzEwXT1LLG5bMTFdPTAsblsxMl09WCxuWzEzXT1SLG5bMTRdPVEsblsxNV09MSxufTtBdC5tdWx0aXBseUJ5TWF0cml4Mz1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicm90YXRpb24iLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz10WzBdLHI9dFsxXSxpPXRbMl0scz10WzRdLGY9dFs1XSx1PXRbNl0sYz10WzhdLGw9dFs5XSxwPXRbMTBdLGQ9ZVswXSxtPWVbMV0sXz1lWzJdLGc9ZVszXSxiPWVbNF0sTz1lWzVdLFQ9ZVs2XSxFPWVbN10sdz1lWzhdLEM9bypkK3MqbStjKl8sTj1yKmQrZiptK2wqXyxJPWkqZCt1Km0rcCpfLEw9bypnK3MqYitjKk8sdj1yKmcrZipiK2wqTyxEPWkqZyt1KmIrcCpPLFU9bypUK3MqRStjKncsQT1yKlQrZipFK2wqdyxTPWkqVCt1KkUrcCp3O3JldHVybiBuWzBdPUMsblsxXT1OLG5bMl09SSxuWzNdPTAsbls0XT1MLG5bNV09dixuWzZdPUQsbls3XT0wLG5bOF09VSxuWzldPUEsblsxMF09UyxuWzExXT0wLG5bMTJdPXRbMTJdLG5bMTNdPXRbMTNdLG5bMTRdPXRbMTRdLG5bMTVdPXRbMTVdLG59O0F0Lm11bHRpcGx5QnlUcmFuc2xhdGlvbj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgidHJhbnNsYXRpb24iLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1lLngscj1lLnksaT1lLnoscz1vKnRbMF0rcip0WzRdK2kqdFs4XSt0WzEyXSxmPW8qdFsxXStyKnRbNV0raSp0WzldK3RbMTNdLHU9byp0WzJdK3IqdFs2XStpKnRbMTBdK3RbMTRdO3JldHVybiBuWzBdPXRbMF0sblsxXT10WzFdLG5bMl09dFsyXSxuWzNdPXRbM10sbls0XT10WzRdLG5bNV09dFs1XSxuWzZdPXRbNl0sbls3XT10WzddLG5bOF09dFs4XSxuWzldPXRbOV0sblsxMF09dFsxMF0sblsxMV09dFsxMV0sblsxMl09cyxuWzEzXT1mLG5bMTRdPXUsblsxNV09dFsxNV0sbn07QXQubXVsdGlwbHlCeVNjYWxlPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJzY2FsZSIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPWUueCxyPWUueSxpPWUuejtyZXR1cm4gbz09PTEmJnI9PT0xJiZpPT09MT9BdC5jbG9uZSh0LG4pOihuWzBdPW8qdFswXSxuWzFdPW8qdFsxXSxuWzJdPW8qdFsyXSxuWzNdPXRbM10sbls0XT1yKnRbNF0sbls1XT1yKnRbNV0sbls2XT1yKnRbNl0sbls3XT10WzddLG5bOF09aSp0WzhdLG5bOV09aSp0WzldLG5bMTBdPWkqdFsxMF0sblsxMV09dFsxMV0sblsxMl09dFsxMl0sblsxM109dFsxM10sblsxNF09dFsxNF0sblsxNV09dFsxNV0sbil9O0F0Lm11bHRpcGx5QnlVbmlmb3JtU2NhbGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsZSIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG5bMF09dFswXSplLG5bMV09dFsxXSplLG5bMl09dFsyXSplLG5bM109dFszXSxuWzRdPXRbNF0qZSxuWzVdPXRbNV0qZSxuWzZdPXRbNl0qZSxuWzddPXRbN10sbls4XT10WzhdKmUsbls5XT10WzldKmUsblsxMF09dFsxMF0qZSxuWzExXT10WzExXSxuWzEyXT10WzEyXSxuWzEzXT10WzEzXSxuWzE0XT10WzE0XSxuWzE1XT10WzE1XSxufTtBdC5tdWx0aXBseUJ5VmVjdG9yPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1lLngscj1lLnksaT1lLnoscz1lLncsZj10WzBdKm8rdFs0XSpyK3RbOF0qaSt0WzEyXSpzLHU9dFsxXSpvK3RbNV0qcit0WzldKmkrdFsxM10qcyxjPXRbMl0qbyt0WzZdKnIrdFsxMF0qaSt0WzE0XSpzLGw9dFszXSpvK3RbN10qcit0WzExXSppK3RbMTVdKnM7cmV0dXJuIG4ueD1mLG4ueT11LG4uej1jLG4udz1sLG59O0F0Lm11bHRpcGx5QnlQb2ludEFzVmVjdG9yPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1lLngscj1lLnksaT1lLnoscz10WzBdKm8rdFs0XSpyK3RbOF0qaSxmPXRbMV0qbyt0WzVdKnIrdFs5XSppLHU9dFsyXSpvK3RbNl0qcit0WzEwXSppO3JldHVybiBuLng9cyxuLnk9ZixuLno9dSxufTtBdC5tdWx0aXBseUJ5UG9pbnQ9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPWUueCxyPWUueSxpPWUueixzPXRbMF0qbyt0WzRdKnIrdFs4XSppK3RbMTJdLGY9dFsxXSpvK3RbNV0qcit0WzldKmkrdFsxM10sdT10WzJdKm8rdFs2XSpyK3RbMTBdKmkrdFsxNF07cmV0dXJuIG4ueD1zLG4ueT1mLG4uej11LG59O0F0Lm11bHRpcGx5QnlTY2FsYXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuWzBdPXRbMF0qZSxuWzFdPXRbMV0qZSxuWzJdPXRbMl0qZSxuWzNdPXRbM10qZSxuWzRdPXRbNF0qZSxuWzVdPXRbNV0qZSxuWzZdPXRbNl0qZSxuWzddPXRbN10qZSxuWzhdPXRbOF0qZSxuWzldPXRbOV0qZSxuWzEwXT10WzEwXSplLG5bMTFdPXRbMTFdKmUsblsxMl09dFsxMl0qZSxuWzEzXT10WzEzXSplLG5bMTRdPXRbMTRdKmUsblsxNV09dFsxNV0qZSxufTtBdC5uZWdhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxlWzBdPS10WzBdLGVbMV09LXRbMV0sZVsyXT0tdFsyXSxlWzNdPS10WzNdLGVbNF09LXRbNF0sZVs1XT0tdFs1XSxlWzZdPS10WzZdLGVbN109LXRbN10sZVs4XT0tdFs4XSxlWzldPS10WzldLGVbMTBdPS10WzEwXSxlWzExXT0tdFsxMV0sZVsxMl09LXRbMTJdLGVbMTNdPS10WzEzXSxlWzE0XT0tdFsxNF0sZVsxNV09LXRbMTVdLGV9O0F0LnRyYW5zcG9zZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSk7bGV0IG49dFsxXSxvPXRbMl0scj10WzNdLGk9dFs2XSxzPXRbN10sZj10WzExXTtyZXR1cm4gZVswXT10WzBdLGVbMV09dFs0XSxlWzJdPXRbOF0sZVszXT10WzEyXSxlWzRdPW4sZVs1XT10WzVdLGVbNl09dFs5XSxlWzddPXRbMTNdLGVbOF09byxlWzldPWksZVsxMF09dFsxMF0sZVsxMV09dFsxNF0sZVsxMl09cixlWzEzXT1zLGVbMTRdPWYsZVsxNV09dFsxNV0sZX07QXQuYWJzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZVswXT1NYXRoLmFicyh0WzBdKSxlWzFdPU1hdGguYWJzKHRbMV0pLGVbMl09TWF0aC5hYnModFsyXSksZVszXT1NYXRoLmFicyh0WzNdKSxlWzRdPU1hdGguYWJzKHRbNF0pLGVbNV09TWF0aC5hYnModFs1XSksZVs2XT1NYXRoLmFicyh0WzZdKSxlWzddPU1hdGguYWJzKHRbN10pLGVbOF09TWF0aC5hYnModFs4XSksZVs5XT1NYXRoLmFicyh0WzldKSxlWzEwXT1NYXRoLmFicyh0WzEwXSksZVsxMV09TWF0aC5hYnModFsxMV0pLGVbMTJdPU1hdGguYWJzKHRbMTJdKSxlWzEzXT1NYXRoLmFicyh0WzEzXSksZVsxNF09TWF0aC5hYnModFsxNF0pLGVbMTVdPU1hdGguYWJzKHRbMTVdKSxlfTtBdC5lcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fGgodCkmJmgoZSkmJnRbMTJdPT09ZVsxMl0mJnRbMTNdPT09ZVsxM10mJnRbMTRdPT09ZVsxNF0mJnRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl0mJnRbNF09PT1lWzRdJiZ0WzVdPT09ZVs1XSYmdFs2XT09PWVbNl0mJnRbOF09PT1lWzhdJiZ0WzldPT09ZVs5XSYmdFsxMF09PT1lWzEwXSYmdFszXT09PWVbM10mJnRbN109PT1lWzddJiZ0WzExXT09PWVbMTFdJiZ0WzE1XT09PWVbMTVdfTtBdC5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbj14KG4sMCksdD09PWV8fGgodCkmJmgoZSkmJk1hdGguYWJzKHRbMF0tZVswXSk8PW4mJk1hdGguYWJzKHRbMV0tZVsxXSk8PW4mJk1hdGguYWJzKHRbMl0tZVsyXSk8PW4mJk1hdGguYWJzKHRbM10tZVszXSk8PW4mJk1hdGguYWJzKHRbNF0tZVs0XSk8PW4mJk1hdGguYWJzKHRbNV0tZVs1XSk8PW4mJk1hdGguYWJzKHRbNl0tZVs2XSk8PW4mJk1hdGguYWJzKHRbN10tZVs3XSk8PW4mJk1hdGguYWJzKHRbOF0tZVs4XSk8PW4mJk1hdGguYWJzKHRbOV0tZVs5XSk8PW4mJk1hdGguYWJzKHRbMTBdLWVbMTBdKTw9biYmTWF0aC5hYnModFsxMV0tZVsxMV0pPD1uJiZNYXRoLmFicyh0WzEyXS1lWzEyXSk8PW4mJk1hdGguYWJzKHRbMTNdLWVbMTNdKTw9biYmTWF0aC5hYnModFsxNF0tZVsxNF0pPD1uJiZNYXRoLmFicyh0WzE1XS1lWzE1XSk8PW59O0F0LmdldFRyYW5zbGF0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZS54PXRbMTJdLGUueT10WzEzXSxlLno9dFsxNF0sZX07QXQuZ2V0TWF0cml4Mz1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpLGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFs0XSxlWzRdPXRbNV0sZVs1XT10WzZdLGVbNl09dFs4XSxlWzddPXRbOV0sZVs4XT10WzEwXSxlfTtNQz1uZXcgdHQsTkM9bmV3IHR0LElDPW5ldyBfZSx2Qz1uZXcgX2UoMCwwLDAsMSk7QXQuaW52ZXJzZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSk7bGV0IG49dFswXSxvPXRbNF0scj10WzhdLGk9dFsxMl0scz10WzFdLGY9dFs1XSx1PXRbOV0sYz10WzEzXSxsPXRbMl0scD10WzZdLGQ9dFsxMF0sbT10WzE0XSxfPXRbM10sZz10WzddLGI9dFsxMV0sTz10WzE1XSxUPWQqTyxFPW0qYix3PXAqTyxDPW0qZyxOPXAqYixJPWQqZyxMPWwqTyx2PW0qXyxEPWwqYixVPWQqXyxBPWwqZyxTPXAqXyxQPVQqZitDKnUrTipjLShFKmYrdyp1K0kqYyksRj1FKnMrTCp1K1UqYy0oVCpzK3YqdStEKmMpLGo9dypzK3YqZitBKmMtKEMqcytMKmYrUypjKSxIPUkqcytEKmYrUyp1LShOKnMrVSpmK0EqdSksaz1FKm8rdypyK0kqaS0oVCpvK0MqcitOKmkpLEs9VCpuK3YqcitEKmktKEUqbitMKnIrVSppKSxYPUMqbitMKm8rUyppLSh3Km4rdipvK0EqaSksUj1OKm4rVSpvK0Eqci0oSSpuK0QqbytTKnIpO1Q9cipjLEU9aSp1LHc9bypjLEM9aSpmLE49byp1LEk9cipmLEw9bipjLHY9aSpzLEQ9bip1LFU9cipzLEE9bipmLFM9bypzO2xldCBRPVQqZytDKmIrTipPLShFKmcrdypiK0kqTyksZnQ9RSpfK0wqYitVKk8tKFQqXyt2KmIrRCpPKSxwdD13Kl8rdipnK0EqTy0oQypfK0wqZytTKk8pLGd0PUkqXytEKmcrUypiLShOKl8rVSpnK0EqYiksaXQ9dypkK0kqbStFKnAtKE4qbStUKnArQypkKSxOdD1EKm0rVCpsK3YqZC0oTCpkK1UqbStFKmwpLE90PUwqcCtTKm0rQypsLShBKm0rdypsK3YqcCkseHQ9QSpkK04qbCtVKnAtKEQqcCtTKmQrSSpsKSxfdD1uKlArbypGK3IqaitpKkg7aWYoTWF0aC5hYnMoX3QpPE0uRVBTSUxPTjIxKXtpZih0dC5lcXVhbHNFcHNpbG9uKEF0LmdldE1hdHJpeDModCxNQyksTkMsTS5FUFNJTE9ONykmJl9lLmVxdWFscyhBdC5nZXRSb3codCwzLElDKSx2QykpcmV0dXJuIGVbMF09MCxlWzFdPTAsZVsyXT0wLGVbM109MCxlWzRdPTAsZVs1XT0wLGVbNl09MCxlWzddPTAsZVs4XT0wLGVbOV09MCxlWzEwXT0wLGVbMTFdPTAsZVsxMl09LXRbMTJdLGVbMTNdPS10WzEzXSxlWzE0XT0tdFsxNF0sZVsxNV09MSxlO3Rocm93IG5ldyBnZSgibWF0cml4IGlzIG5vdCBpbnZlcnRpYmxlIGJlY2F1c2UgaXRzIGRldGVybWluYXRlIGlzIHplcm8uIil9cmV0dXJuIF90PTEvX3QsZVswXT1QKl90LGVbMV09RipfdCxlWzJdPWoqX3QsZVszXT1IKl90LGVbNF09aypfdCxlWzVdPUsqX3QsZVs2XT1YKl90LGVbN109UipfdCxlWzhdPVEqX3QsZVs5XT1mdCpfdCxlWzEwXT1wdCpfdCxlWzExXT1ndCpfdCxlWzEyXT1pdCpfdCxlWzEzXT1OdCpfdCxlWzE0XT1PdCpfdCxlWzE1XT14dCpfdCxlfTtBdC5pbnZlcnNlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPXRbMF0sbz10WzFdLHI9dFsyXSxpPXRbNF0scz10WzVdLGY9dFs2XSx1PXRbOF0sYz10WzldLGw9dFsxMF0scD10WzEyXSxkPXRbMTNdLG09dFsxNF0sXz0tbipwLW8qZC1yKm0sZz0taSpwLXMqZC1mKm0sYj0tdSpwLWMqZC1sKm07cmV0dXJuIGVbMF09bixlWzFdPWksZVsyXT11LGVbM109MCxlWzRdPW8sZVs1XT1zLGVbNl09YyxlWzddPTAsZVs4XT1yLGVbOV09ZixlWzEwXT1sLGVbMTFdPTAsZVsxMl09XyxlWzEzXT1nLGVbMTRdPWIsZVsxNV09MSxlfTtEQz1uZXcgQXQ7QXQuaW52ZXJzZVRyYW5zcG9zZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpLEF0LmludmVyc2UoQXQudHJhbnNwb3NlKHQsREMpLGUpfTtBdC5JREVOVElUWT1PYmplY3QuZnJlZXplKG5ldyBBdCgxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxKSk7QXQuWkVSTz1PYmplY3QuZnJlZXplKG5ldyBBdCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKSk7QXQuQ09MVU1OMFJPVzA9MDtBdC5DT0xVTU4wUk9XMT0xO0F0LkNPTFVNTjBST1cyPTI7QXQuQ09MVU1OMFJPVzM9MztBdC5DT0xVTU4xUk9XMD00O0F0LkNPTFVNTjFST1cxPTU7QXQuQ09MVU1OMVJPVzI9NjtBdC5DT0xVTU4xUk9XMz03O0F0LkNPTFVNTjJST1cwPTg7QXQuQ09MVU1OMlJPVzE9OTtBdC5DT0xVTU4yUk9XMj0xMDtBdC5DT0xVTU4yUk9XMz0xMTtBdC5DT0xVTU4zUk9XMD0xMjtBdC5DT0xVTU4zUk9XMT0xMztBdC5DT0xVTU4zUk9XMj0xNDtBdC5DT0xVTU4zUk9XMz0xNTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBdC5wcm90b3R5cGUse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEF0LnBhY2tlZExlbmd0aH19fSk7QXQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBBdC5jbG9uZSh0aGlzLHQpfTtBdC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBBdC5lcXVhbHModGhpcyx0KX07QXQuZXF1YWxzQXJyYXk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0WzBdPT09ZVtuXSYmdFsxXT09PWVbbisxXSYmdFsyXT09PWVbbisyXSYmdFszXT09PWVbbiszXSYmdFs0XT09PWVbbis0XSYmdFs1XT09PWVbbis1XSYmdFs2XT09PWVbbis2XSYmdFs3XT09PWVbbis3XSYmdFs4XT09PWVbbis4XSYmdFs5XT09PWVbbis5XSYmdFsxMF09PT1lW24rMTBdJiZ0WzExXT09PWVbbisxMV0mJnRbMTJdPT09ZVtuKzEyXSYmdFsxM109PT1lW24rMTNdJiZ0WzE0XT09PWVbbisxNF0mJnRbMTVdPT09ZVtuKzE1XX07QXQucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gQXQuZXF1YWxzRXBzaWxvbih0aGlzLHQsZSl9O0F0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybmAoJHt0aGlzWzBdfSwgJHt0aGlzWzRdfSwgJHt0aGlzWzhdfSwgJHt0aGlzWzEyXX0pCigke3RoaXNbMV19LCAke3RoaXNbNV19LCAke3RoaXNbOV19LCAke3RoaXNbMTNdfSkKKCR7dGhpc1syXX0sICR7dGhpc1s2XX0sICR7dGhpc1sxMF19LCAke3RoaXNbMTRdfSkKKCR7dGhpc1szXX0sICR7dGhpc1s3XX0sICR7dGhpc1sxMV19LCAke3RoaXNbMTVdfSlgfTtzdD1BdH0pO2Z1bmN0aW9uIGRlKHQsZSxuLG8pe3RoaXMud2VzdD14KHQsMCksdGhpcy5zb3V0aD14KGUsMCksdGhpcy5lYXN0PXgobiwwKSx0aGlzLm5vcnRoPXgobywwKX12YXIgTEMsUHQsQW49WigoKT0+e3ZlKCk7WXQoKTtJdCgpO2F0KCk7WnQoKTtXdCgpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGRlLnByb3RvdHlwZSx7d2lkdGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBkZS5jb21wdXRlV2lkdGgodGhpcyl9fSxoZWlnaHQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBkZS5jb21wdXRlSGVpZ2h0KHRoaXMpfX19KTtkZS5wYWNrZWRMZW5ndGg9NDtkZS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj14KG4sMCksZVtuKytdPXQud2VzdCxlW24rK109dC5zb3V0aCxlW24rK109dC5lYXN0LGVbbl09dC5ub3J0aCxlfTtkZS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImFycmF5Iix0KSxlPXgoZSwwKSxoKG4pfHwobj1uZXcgZGUpLG4ud2VzdD10W2UrK10sbi5zb3V0aD10W2UrK10sbi5lYXN0PXRbZSsrXSxuLm5vcnRoPXRbZV0sbn07ZGUuY29tcHV0ZVdpZHRoPWZ1bmN0aW9uKHQpe3kudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KTtsZXQgZT10LmVhc3Qsbj10Lndlc3Q7cmV0dXJuIGU8biYmKGUrPU0uVFdPX1BJKSxlLW59O2RlLmNvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KSx0Lm5vcnRoLXQuc291dGh9O2RlLmZyb21EZWdyZWVzPWZ1bmN0aW9uKHQsZSxuLG8scil7cmV0dXJuIHQ9TS50b1JhZGlhbnMoeCh0LDApKSxlPU0udG9SYWRpYW5zKHgoZSwwKSksbj1NLnRvUmFkaWFucyh4KG4sMCkpLG89TS50b1JhZGlhbnMoeChvLDApKSxoKHIpPyhyLndlc3Q9dCxyLnNvdXRoPWUsci5lYXN0PW4sci5ub3J0aD1vLHIpOm5ldyBkZSh0LGUsbixvKX07ZGUuZnJvbVJhZGlhbnM9ZnVuY3Rpb24odCxlLG4sbyxyKXtyZXR1cm4gaChyKT8oci53ZXN0PXgodCwwKSxyLnNvdXRoPXgoZSwwKSxyLmVhc3Q9eChuLDApLHIubm9ydGg9eChvLDApLHIpOm5ldyBkZSh0LGUsbixvKX07ZGUuZnJvbUNhcnRvZ3JhcGhpY0FycmF5PWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJjYXJ0b2dyYXBoaWNzIix0KTtsZXQgbj1OdW1iZXIuTUFYX1ZBTFVFLG89LU51bWJlci5NQVhfVkFMVUUscj1OdW1iZXIuTUFYX1ZBTFVFLGk9LU51bWJlci5NQVhfVkFMVUUscz1OdW1iZXIuTUFYX1ZBTFVFLGY9LU51bWJlci5NQVhfVkFMVUU7Zm9yKGxldCB1PTAsYz10Lmxlbmd0aDt1PGM7dSsrKXtsZXQgbD10W3VdO249TWF0aC5taW4obixsLmxvbmdpdHVkZSksbz1NYXRoLm1heChvLGwubG9uZ2l0dWRlKSxzPU1hdGgubWluKHMsbC5sYXRpdHVkZSksZj1NYXRoLm1heChmLGwubGF0aXR1ZGUpO2xldCBwPWwubG9uZ2l0dWRlPj0wP2wubG9uZ2l0dWRlOmwubG9uZ2l0dWRlK00uVFdPX1BJO3I9TWF0aC5taW4ocixwKSxpPU1hdGgubWF4KGkscCl9cmV0dXJuIG8tbj5pLXImJihuPXIsbz1pLG8+TS5QSSYmKG89by1NLlRXT19QSSksbj5NLlBJJiYobj1uLU0uVFdPX1BJKSksaChlKT8oZS53ZXN0PW4sZS5zb3V0aD1zLGUuZWFzdD1vLGUubm9ydGg9ZixlKTpuZXcgZGUobixzLG8sZil9O2RlLmZyb21DYXJ0ZXNpYW5BcnJheT1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJjYXJ0ZXNpYW5zIix0KSxlPXgoZSwkLldHUzg0KTtsZXQgbz1OdW1iZXIuTUFYX1ZBTFVFLHI9LU51bWJlci5NQVhfVkFMVUUsaT1OdW1iZXIuTUFYX1ZBTFVFLHM9LU51bWJlci5NQVhfVkFMVUUsZj1OdW1iZXIuTUFYX1ZBTFVFLHU9LU51bWJlci5NQVhfVkFMVUU7Zm9yKGxldCBjPTAsbD10Lmxlbmd0aDtjPGw7YysrKXtsZXQgcD1lLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHRbY10pO289TWF0aC5taW4obyxwLmxvbmdpdHVkZSkscj1NYXRoLm1heChyLHAubG9uZ2l0dWRlKSxmPU1hdGgubWluKGYscC5sYXRpdHVkZSksdT1NYXRoLm1heCh1LHAubGF0aXR1ZGUpO2xldCBkPXAubG9uZ2l0dWRlPj0wP3AubG9uZ2l0dWRlOnAubG9uZ2l0dWRlK00uVFdPX1BJO2k9TWF0aC5taW4oaSxkKSxzPU1hdGgubWF4KHMsZCl9cmV0dXJuIHItbz5zLWkmJihvPWkscj1zLHI+TS5QSSYmKHI9ci1NLlRXT19QSSksbz5NLlBJJiYobz1vLU0uVFdPX1BJKSksaChuKT8obi53ZXN0PW8sbi5zb3V0aD1mLG4uZWFzdD1yLG4ubm9ydGg9dSxuKTpuZXcgZGUobyxmLHIsdSl9O2RlLmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYoaCh0KSlyZXR1cm4gaChlKT8oZS53ZXN0PXQud2VzdCxlLnNvdXRoPXQuc291dGgsZS5lYXN0PXQuZWFzdCxlLm5vcnRoPXQubm9ydGgsZSk6bmV3IGRlKHQud2VzdCx0LnNvdXRoLHQuZWFzdCx0Lm5vcnRoKX07ZGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG49eChuLDApLHQ9PT1lfHxoKHQpJiZoKGUpJiZNYXRoLmFicyh0Lndlc3QtZS53ZXN0KTw9biYmTWF0aC5hYnModC5zb3V0aC1lLnNvdXRoKTw9biYmTWF0aC5hYnModC5lYXN0LWUuZWFzdCk8PW4mJk1hdGguYWJzKHQubm9ydGgtZS5ub3J0aCk8PW59O2RlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gZGUuY2xvbmUodGhpcyx0KX07ZGUucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gZGUuZXF1YWxzKHRoaXMsdCl9O2RlLmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8aCh0KSYmaChlKSYmdC53ZXN0PT09ZS53ZXN0JiZ0LnNvdXRoPT09ZS5zb3V0aCYmdC5lYXN0PT09ZS5lYXN0JiZ0Lm5vcnRoPT09ZS5ub3J0aH07ZGUucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gZGUuZXF1YWxzRXBzaWxvbih0aGlzLHQsZSl9O2RlLnZhbGlkYXRlPWZ1bmN0aW9uKHQpe3kudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KTtsZXQgZT10Lm5vcnRoO3kudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJub3J0aCIsZSwtTS5QSV9PVkVSX1RXTykseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIm5vcnRoIixlLE0uUElfT1ZFUl9UV08pO2xldCBuPXQuc291dGg7eS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoInNvdXRoIixuLC1NLlBJX09WRVJfVFdPKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygic291dGgiLG4sTS5QSV9PVkVSX1RXTyk7bGV0IG89dC53ZXN0O3kudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJ3ZXN0IixvLC1NYXRoLlBJKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygid2VzdCIsbyxNYXRoLlBJKTtsZXQgcj10LmVhc3Q7eS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImVhc3QiLHIsLU1hdGguUEkpLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJlYXN0IixyLE1hdGguUEkpfTtkZS5zb3V0aHdlc3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLGgoZSk/KGUubG9uZ2l0dWRlPXQud2VzdCxlLmxhdGl0dWRlPXQuc291dGgsZS5oZWlnaHQ9MCxlKTpuZXcgY3QodC53ZXN0LHQuc291dGgpfTtkZS5ub3J0aHdlc3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLGgoZSk/KGUubG9uZ2l0dWRlPXQud2VzdCxlLmxhdGl0dWRlPXQubm9ydGgsZS5oZWlnaHQ9MCxlKTpuZXcgY3QodC53ZXN0LHQubm9ydGgpfTtkZS5ub3J0aGVhc3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLGgoZSk/KGUubG9uZ2l0dWRlPXQuZWFzdCxlLmxhdGl0dWRlPXQubm9ydGgsZS5oZWlnaHQ9MCxlKTpuZXcgY3QodC5lYXN0LHQubm9ydGgpfTtkZS5zb3V0aGVhc3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLGgoZSk/KGUubG9uZ2l0dWRlPXQuZWFzdCxlLmxhdGl0dWRlPXQuc291dGgsZS5oZWlnaHQ9MCxlKTpuZXcgY3QodC5lYXN0LHQuc291dGgpfTtkZS5jZW50ZXI9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoInJlY3RhbmdsZSIsdCk7bGV0IG49dC5lYXN0LG89dC53ZXN0O248byYmKG4rPU0uVFdPX1BJKTtsZXQgcj1NLm5lZ2F0aXZlUGlUb1BpKChvK24pKi41KSxpPSh0LnNvdXRoK3Qubm9ydGgpKi41O3JldHVybiBoKGUpPyhlLmxvbmdpdHVkZT1yLGUubGF0aXR1ZGU9aSxlLmhlaWdodD0wLGUpOm5ldyBjdChyLGkpfTtkZS5pbnRlcnNlY3Rpb249ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KSx5LnR5cGVPZi5vYmplY3QoIm90aGVyUmVjdGFuZ2xlIixlKTtsZXQgbz10LmVhc3Qscj10Lndlc3QsaT1lLmVhc3Qscz1lLndlc3Q7bzxyJiZpPjA/bys9TS5UV09fUEk6aTxzJiZvPjAmJihpKz1NLlRXT19QSSksbzxyJiZzPDA/cys9TS5UV09fUEk6aTxzJiZyPDAmJihyKz1NLlRXT19QSSk7bGV0IGY9TS5uZWdhdGl2ZVBpVG9QaShNYXRoLm1heChyLHMpKSx1PU0ubmVnYXRpdmVQaVRvUGkoTWF0aC5taW4obyxpKSk7aWYoKHQud2VzdDx0LmVhc3R8fGUud2VzdDxlLmVhc3QpJiZ1PD1mKXJldHVybjtsZXQgYz1NYXRoLm1heCh0LnNvdXRoLGUuc291dGgpLGw9TWF0aC5taW4odC5ub3J0aCxlLm5vcnRoKTtpZighKGM+PWwpKXJldHVybiBoKG4pPyhuLndlc3Q9ZixuLnNvdXRoPWMsbi5lYXN0PXUsbi5ub3J0aD1sLG4pOm5ldyBkZShmLGMsdSxsKX07ZGUuc2ltcGxlSW50ZXJzZWN0aW9uPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoInJlY3RhbmdsZSIsdCkseS50eXBlT2Yub2JqZWN0KCJvdGhlclJlY3RhbmdsZSIsZSk7bGV0IG89TWF0aC5tYXgodC53ZXN0LGUud2VzdCkscj1NYXRoLm1heCh0LnNvdXRoLGUuc291dGgpLGk9TWF0aC5taW4odC5lYXN0LGUuZWFzdCkscz1NYXRoLm1pbih0Lm5vcnRoLGUubm9ydGgpO2lmKCEocj49c3x8bz49aSkpcmV0dXJuIGgobik/KG4ud2VzdD1vLG4uc291dGg9cixuLmVhc3Q9aSxuLm5vcnRoPXMsbik6bmV3IGRlKG8scixpLHMpfTtkZS51bmlvbj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLHkudHlwZU9mLm9iamVjdCgib3RoZXJSZWN0YW5nbGUiLGUpLGgobil8fChuPW5ldyBkZSk7bGV0IG89dC5lYXN0LHI9dC53ZXN0LGk9ZS5lYXN0LHM9ZS53ZXN0O288ciYmaT4wP28rPU0uVFdPX1BJOmk8cyYmbz4wJiYoaSs9TS5UV09fUEkpLG88ciYmczwwP3MrPU0uVFdPX1BJOmk8cyYmcjwwJiYocis9TS5UV09fUEkpO2xldCBmPU0ubmVnYXRpdmVQaVRvUGkoTWF0aC5taW4ocixzKSksdT1NLm5lZ2F0aXZlUGlUb1BpKE1hdGgubWF4KG8saSkpO3JldHVybiBuLndlc3Q9ZixuLnNvdXRoPU1hdGgubWluKHQuc291dGgsZS5zb3V0aCksbi5lYXN0PXUsbi5ub3J0aD1NYXRoLm1heCh0Lm5vcnRoLGUubm9ydGgpLG59O2RlLmV4cGFuZD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KSx5LnR5cGVPZi5vYmplY3QoImNhcnRvZ3JhcGhpYyIsZSksaChuKXx8KG49bmV3IGRlKSxuLndlc3Q9TWF0aC5taW4odC53ZXN0LGUubG9uZ2l0dWRlKSxuLnNvdXRoPU1hdGgubWluKHQuc291dGgsZS5sYXRpdHVkZSksbi5lYXN0PU1hdGgubWF4KHQuZWFzdCxlLmxvbmdpdHVkZSksbi5ub3J0aD1NYXRoLm1heCh0Lm5vcnRoLGUubGF0aXR1ZGUpLG59O2RlLmNvbnRhaW5zPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLHkudHlwZU9mLm9iamVjdCgiY2FydG9ncmFwaGljIixlKTtsZXQgbj1lLmxvbmdpdHVkZSxvPWUubGF0aXR1ZGUscj10Lndlc3QsaT10LmVhc3Q7cmV0dXJuIGk8ciYmKGkrPU0uVFdPX1BJLG48MCYmKG4rPU0uVFdPX1BJKSksKG4+cnx8TS5lcXVhbHNFcHNpbG9uKG4scixNLkVQU0lMT04xNCkpJiYobjxpfHxNLmVxdWFsc0Vwc2lsb24obixpLE0uRVBTSUxPTjE0KSkmJm8+PXQuc291dGgmJm88PXQubm9ydGh9O0xDPW5ldyBjdDtkZS5zdWJzYW1wbGU9ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLGU9eChlLCQuV0dTODQpLG49eChuLDApLGgobyl8fChvPVtdKTtsZXQgcj0wLGk9dC5ub3J0aCxzPXQuc291dGgsZj10LmVhc3QsdT10Lndlc3QsYz1MQztjLmhlaWdodD1uLGMubG9uZ2l0dWRlPXUsYy5sYXRpdHVkZT1pLG9bcl09ZS5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihjLG9bcl0pLHIrKyxjLmxvbmdpdHVkZT1mLG9bcl09ZS5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihjLG9bcl0pLHIrKyxjLmxhdGl0dWRlPXMsb1tyXT1lLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGMsb1tyXSkscisrLGMubG9uZ2l0dWRlPXUsb1tyXT1lLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGMsb1tyXSkscisrLGk8MD9jLmxhdGl0dWRlPWk6cz4wP2MubGF0aXR1ZGU9czpjLmxhdGl0dWRlPTA7Zm9yKGxldCBsPTE7bDw4OysrbCljLmxvbmdpdHVkZT0tTWF0aC5QSStsKk0uUElfT1ZFUl9UV08sZGUuY29udGFpbnModCxjKSYmKG9bcl09ZS5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihjLG9bcl0pLHIrKyk7cmV0dXJuIGMubGF0aXR1ZGU9PT0wJiYoYy5sb25naXR1ZGU9dSxvW3JdPWUuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oYyxvW3JdKSxyKyssYy5sb25naXR1ZGU9ZixvW3JdPWUuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oYyxvW3JdKSxyKyspLG8ubGVuZ3RoPXIsb307ZGUuc3Vic2VjdGlvbj1mdW5jdGlvbih0LGUsbixvLHIsaSl7aWYoeS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJ3ZXN0TGVycCIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygid2VzdExlcnAiLGUsMSkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoInNvdXRoTGVycCIsbiwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygic291dGhMZXJwIixuLDEpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJlYXN0TGVycCIsbywwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiZWFzdExlcnAiLG8sMSkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIm5vcnRoTGVycCIsciwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygibm9ydGhMZXJwIixyLDEpLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJ3ZXN0TGVycCIsZSxvKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygic291dGhMZXJwIixuLHIpLGgoaSl8fChpPW5ldyBkZSksdC53ZXN0PD10LmVhc3Qpe2xldCBmPXQuZWFzdC10Lndlc3Q7aS53ZXN0PXQud2VzdCtlKmYsaS5lYXN0PXQud2VzdCtvKmZ9ZWxzZXtsZXQgZj1NLlRXT19QSSt0LmVhc3QtdC53ZXN0O2kud2VzdD1NLm5lZ2F0aXZlUGlUb1BpKHQud2VzdCtlKmYpLGkuZWFzdD1NLm5lZ2F0aXZlUGlUb1BpKHQud2VzdCtvKmYpfWxldCBzPXQubm9ydGgtdC5zb3V0aDtyZXR1cm4gaS5zb3V0aD10LnNvdXRoK24qcyxpLm5vcnRoPXQuc291dGgrcipzLGU9PT0xJiYoaS53ZXN0PXQuZWFzdCksbz09PTEmJihpLmVhc3Q9dC5lYXN0KSxuPT09MSYmKGkuc291dGg9dC5ub3J0aCkscj09PTEmJihpLm5vcnRoPXQubm9ydGgpLGl9O2RlLk1BWF9WQUxVRT1PYmplY3QuZnJlZXplKG5ldyBkZSgtTWF0aC5QSSwtTS5QSV9PVkVSX1RXTyxNYXRoLlBJLE0uUElfT1ZFUl9UV08pKTtQdD1kZX0pO2Z1bmN0aW9uIGVlKHQsZSl7dGhpcy5jZW50ZXI9YS5jbG9uZSh4KHQsYS5aRVJPKSksdGhpcy5yYWRpdXM9eChlLDApfXZhciBDbSx4bSxQbSxNbSxObSxJbSx2bSxybyxEbSxMbSxGbSxCbSxGQyxCQyxVQyxWQyxSbSxTbSxrQyxHQyx6QyxqQyxIQyxxQyxLQyxXQyxYQyxZQywkQyxaQyxBMSxRQyxKQyx0eCxleCxueCxiMSxveCx5dCxQZT1aKCgpPT57VXQoKTt2ZSgpO1l0KCk7SXQoKTthdCgpO1p0KCk7UmkoKTtWcygpO2psKCk7V3QoKTtGbigpO2tuKCk7QW4oKTtDbT1uZXcgYSx4bT1uZXcgYSxQbT1uZXcgYSxNbT1uZXcgYSxObT1uZXcgYSxJbT1uZXcgYSx2bT1uZXcgYSxybz1uZXcgYSxEbT1uZXcgYSxMbT1uZXcgYSxGbT1uZXcgYSxCbT1uZXcgYSxGQz00LzMqTS5QSTtlZS5mcm9tUG9pbnRzPWZ1bmN0aW9uKHQsZSl7aWYoaChlKXx8KGU9bmV3IGVlKSwhaCh0KXx8dC5sZW5ndGg9PT0wKXJldHVybiBlLmNlbnRlcj1hLmNsb25lKGEuWkVSTyxlLmNlbnRlciksZS5yYWRpdXM9MCxlO2xldCBuPWEuY2xvbmUodFswXSx2bSksbz1hLmNsb25lKG4sQ20pLHI9YS5jbG9uZShuLHhtKSxpPWEuY2xvbmUobixQbSkscz1hLmNsb25lKG4sTW0pLGY9YS5jbG9uZShuLE5tKSx1PWEuY2xvbmUobixJbSksYz10Lmxlbmd0aCxsO2ZvcihsPTE7bDxjO2wrKyl7YS5jbG9uZSh0W2xdLG4pO2xldCBMPW4ueCx2PW4ueSxEPW4uejtMPG8ueCYmYS5jbG9uZShuLG8pLEw+cy54JiZhLmNsb25lKG4scyksdjxyLnkmJmEuY2xvbmUobixyKSx2PmYueSYmYS5jbG9uZShuLGYpLEQ8aS56JiZhLmNsb25lKG4saSksRD51LnomJmEuY2xvbmUobix1KX1sZXQgcD1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChzLG8scm8pKSxkPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KGYscixybykpLG09YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QodSxpLHJvKSksXz1vLGc9cyxiPXA7ZD5iJiYoYj1kLF89cixnPWYpLG0+YiYmKGI9bSxfPWksZz11KTtsZXQgTz1EbTtPLng9KF8ueCtnLngpKi41LE8ueT0oXy55K2cueSkqLjUsTy56PShfLnorZy56KSouNTtsZXQgVD1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChnLE8scm8pKSxFPU1hdGguc3FydChUKSx3PUxtO3cueD1vLngsdy55PXIueSx3Lno9aS56O2xldCBDPUZtO0MueD1zLngsQy55PWYueSxDLno9dS56O2xldCBOPWEubWlkcG9pbnQodyxDLEJtKSxJPTA7Zm9yKGw9MDtsPGM7bCsrKXthLmNsb25lKHRbbF0sbik7bGV0IEw9YS5tYWduaXR1ZGUoYS5zdWJ0cmFjdChuLE4scm8pKTtMPkkmJihJPUwpO2xldCB2PWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KG4sTyxybykpO2lmKHY+VCl7bGV0IEQ9TWF0aC5zcXJ0KHYpO0U9KEUrRCkqLjUsVD1FKkU7bGV0IFU9RC1FO08ueD0oRSpPLngrVSpuLngpL0QsTy55PShFKk8ueStVKm4ueSkvRCxPLno9KEUqTy56K1Uqbi56KS9EfX1yZXR1cm4gRTxJPyhhLmNsb25lKE8sZS5jZW50ZXIpLGUucmFkaXVzPUUpOihhLmNsb25lKE4sZS5jZW50ZXIpLGUucmFkaXVzPUkpLGV9O0JDPW5ldyBRbixVQz1uZXcgYSxWQz1uZXcgYSxSbT1uZXcgY3QsU209bmV3IGN0O2VlLmZyb21SZWN0YW5nbGUyRD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGVlLmZyb21SZWN0YW5nbGVXaXRoSGVpZ2h0czJEKHQsZSwwLDAsbil9O2VlLmZyb21SZWN0YW5nbGVXaXRoSGVpZ2h0czJEPWZ1bmN0aW9uKHQsZSxuLG8scil7aWYoaChyKXx8KHI9bmV3IGVlKSwhaCh0KSlyZXR1cm4gci5jZW50ZXI9YS5jbG9uZShhLlpFUk8sci5jZW50ZXIpLHIucmFkaXVzPTAscjtlPXgoZSxCQyksUHQuc291dGh3ZXN0KHQsUm0pLFJtLmhlaWdodD1uLFB0Lm5vcnRoZWFzdCh0LFNtKSxTbS5oZWlnaHQ9bztsZXQgaT1lLnByb2plY3QoUm0sVUMpLHM9ZS5wcm9qZWN0KFNtLFZDKSxmPXMueC1pLngsdT1zLnktaS55LGM9cy56LWkuejtyLnJhZGl1cz1NYXRoLnNxcnQoZipmK3UqdStjKmMpKi41O2xldCBsPXIuY2VudGVyO3JldHVybiBsLng9aS54K2YqLjUsbC55PWkueSt1Ki41LGwuej1pLnorYyouNSxyfTtrQz1bXTtlZS5mcm9tUmVjdGFuZ2xlM0Q9ZnVuY3Rpb24odCxlLG4sbyl7aWYoZT14KGUsJC5XR1M4NCksbj14KG4sMCksaChvKXx8KG89bmV3IGVlKSwhaCh0KSlyZXR1cm4gby5jZW50ZXI9YS5jbG9uZShhLlpFUk8sby5jZW50ZXIpLG8ucmFkaXVzPTAsbztsZXQgcj1QdC5zdWJzYW1wbGUodCxlLG4sa0MpO3JldHVybiBlZS5mcm9tUG9pbnRzKHIsbyl9O2VlLmZyb21WZXJ0aWNlcz1mdW5jdGlvbih0LGUsbixvKXtpZihoKG8pfHwobz1uZXcgZWUpLCFoKHQpfHx0Lmxlbmd0aD09PTApcmV0dXJuIG8uY2VudGVyPWEuY2xvbmUoYS5aRVJPLG8uY2VudGVyKSxvLnJhZGl1cz0wLG87ZT14KGUsYS5aRVJPKSxuPXgobiwzKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygic3RyaWRlIixuLDMpO2xldCByPXZtO3IueD10WzBdK2UueCxyLnk9dFsxXStlLnksci56PXRbMl0rZS56O2xldCBpPWEuY2xvbmUocixDbSkscz1hLmNsb25lKHIseG0pLGY9YS5jbG9uZShyLFBtKSx1PWEuY2xvbmUocixNbSksYz1hLmNsb25lKHIsTm0pLGw9YS5jbG9uZShyLEltKSxwPXQubGVuZ3RoLGQ7Zm9yKGQ9MDtkPHA7ZCs9bil7bGV0IEQ9dFtkXStlLngsVT10W2QrMV0rZS55LEE9dFtkKzJdK2UuejtyLng9RCxyLnk9VSxyLno9QSxEPGkueCYmYS5jbG9uZShyLGkpLEQ+dS54JiZhLmNsb25lKHIsdSksVTxzLnkmJmEuY2xvbmUocixzKSxVPmMueSYmYS5jbG9uZShyLGMpLEE8Zi56JiZhLmNsb25lKHIsZiksQT5sLnomJmEuY2xvbmUocixsKX1sZXQgbT1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdCh1LGkscm8pKSxfPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KGMscyxybykpLGc9YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QobCxmLHJvKSksYj1pLE89dSxUPW07Xz5UJiYoVD1fLGI9cyxPPWMpLGc+VCYmKFQ9ZyxiPWYsTz1sKTtsZXQgRT1EbTtFLng9KGIueCtPLngpKi41LEUueT0oYi55K08ueSkqLjUsRS56PShiLnorTy56KSouNTtsZXQgdz1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChPLEUscm8pKSxDPU1hdGguc3FydCh3KSxOPUxtO04ueD1pLngsTi55PXMueSxOLno9Zi56O2xldCBJPUZtO0kueD11LngsSS55PWMueSxJLno9bC56O2xldCBMPWEubWlkcG9pbnQoTixJLEJtKSx2PTA7Zm9yKGQ9MDtkPHA7ZCs9bil7ci54PXRbZF0rZS54LHIueT10W2QrMV0rZS55LHIuej10W2QrMl0rZS56O2xldCBEPWEubWFnbml0dWRlKGEuc3VidHJhY3QocixMLHJvKSk7RD52JiYodj1EKTtsZXQgVT1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChyLEUscm8pKTtpZihVPncpe2xldCBBPU1hdGguc3FydChVKTtDPShDK0EpKi41LHc9QypDO2xldCBTPUEtQztFLng9KEMqRS54K1Mqci54KS9BLEUueT0oQypFLnkrUypyLnkpL0EsRS56PShDKkUueitTKnIueikvQX19cmV0dXJuIEM8dj8oYS5jbG9uZShFLG8uY2VudGVyKSxvLnJhZGl1cz1DKTooYS5jbG9uZShMLG8uY2VudGVyKSxvLnJhZGl1cz12KSxvfTtlZS5mcm9tRW5jb2RlZENhcnRlc2lhblZlcnRpY2VzPWZ1bmN0aW9uKHQsZSxuKXtpZihoKG4pfHwobj1uZXcgZWUpLCFoKHQpfHwhaChlKXx8dC5sZW5ndGghPT1lLmxlbmd0aHx8dC5sZW5ndGg9PT0wKXJldHVybiBuLmNlbnRlcj1hLmNsb25lKGEuWkVSTyxuLmNlbnRlciksbi5yYWRpdXM9MCxuO2xldCBvPXZtO28ueD10WzBdK2VbMF0sby55PXRbMV0rZVsxXSxvLno9dFsyXStlWzJdO2xldCByPWEuY2xvbmUobyxDbSksaT1hLmNsb25lKG8seG0pLHM9YS5jbG9uZShvLFBtKSxmPWEuY2xvbmUobyxNbSksdT1hLmNsb25lKG8sTm0pLGM9YS5jbG9uZShvLEltKSxsPXQubGVuZ3RoLHA7Zm9yKHA9MDtwPGw7cCs9Myl7bGV0IHY9dFtwXStlW3BdLEQ9dFtwKzFdK2VbcCsxXSxVPXRbcCsyXStlW3ArMl07by54PXYsby55PUQsby56PVUsdjxyLngmJmEuY2xvbmUobyxyKSx2PmYueCYmYS5jbG9uZShvLGYpLEQ8aS55JiZhLmNsb25lKG8saSksRD51LnkmJmEuY2xvbmUobyx1KSxVPHMueiYmYS5jbG9uZShvLHMpLFU+Yy56JiZhLmNsb25lKG8sYyl9bGV0IGQ9YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QoZixyLHJvKSksbT1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdCh1LGkscm8pKSxfPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KGMscyxybykpLGc9cixiPWYsTz1kO20+TyYmKE89bSxnPWksYj11KSxfPk8mJihPPV8sZz1zLGI9Yyk7bGV0IFQ9RG07VC54PShnLngrYi54KSouNSxULnk9KGcueStiLnkpKi41LFQuej0oZy56K2IueikqLjU7bGV0IEU9YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QoYixULHJvKSksdz1NYXRoLnNxcnQoRSksQz1MbTtDLng9ci54LEMueT1pLnksQy56PXMuejtsZXQgTj1GbTtOLng9Zi54LE4ueT11LnksTi56PWMuejtsZXQgST1hLm1pZHBvaW50KEMsTixCbSksTD0wO2ZvcihwPTA7cDxsO3ArPTMpe28ueD10W3BdK2VbcF0sby55PXRbcCsxXStlW3ArMV0sby56PXRbcCsyXStlW3ArMl07bGV0IHY9YS5tYWduaXR1ZGUoYS5zdWJ0cmFjdChvLEkscm8pKTt2PkwmJihMPXYpO2xldCBEPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KG8sVCxybykpO2lmKEQ+RSl7bGV0IFU9TWF0aC5zcXJ0KEQpO3c9KHcrVSkqLjUsRT13Knc7bGV0IEE9VS13O1QueD0odypULngrQSpvLngpL1UsVC55PSh3KlQueStBKm8ueSkvVSxULno9KHcqVC56K0Eqby56KS9VfX1yZXR1cm4gdzxMPyhhLmNsb25lKFQsbi5jZW50ZXIpLG4ucmFkaXVzPXcpOihhLmNsb25lKEksbi5jZW50ZXIpLG4ucmFkaXVzPUwpLG59O2VlLmZyb21Db3JuZXJQb2ludHM9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgiY29ybmVyIix0KSx5LnR5cGVPZi5vYmplY3QoIm9wcG9zaXRlQ29ybmVyIixlKSxoKG4pfHwobj1uZXcgZWUpO2xldCBvPWEubWlkcG9pbnQodCxlLG4uY2VudGVyKTtyZXR1cm4gbi5yYWRpdXM9YS5kaXN0YW5jZShvLGUpLG59O2VlLmZyb21FbGxpcHNvaWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJlbGxpcHNvaWQiLHQpLGgoZSl8fChlPW5ldyBlZSksYS5jbG9uZShhLlpFUk8sZS5jZW50ZXIpLGUucmFkaXVzPXQubWF4aW11bVJhZGl1cyxlfTtHQz1uZXcgYTtlZS5mcm9tQm91bmRpbmdTcGhlcmVzPWZ1bmN0aW9uKHQsZSl7aWYoaChlKXx8KGU9bmV3IGVlKSwhaCh0KXx8dC5sZW5ndGg9PT0wKXJldHVybiBlLmNlbnRlcj1hLmNsb25lKGEuWkVSTyxlLmNlbnRlciksZS5yYWRpdXM9MCxlO2xldCBuPXQubGVuZ3RoO2lmKG49PT0xKXJldHVybiBlZS5jbG9uZSh0WzBdLGUpO2lmKG49PT0yKXJldHVybiBlZS51bmlvbih0WzBdLHRbMV0sZSk7bGV0IG89W10scjtmb3Iocj0wO3I8bjtyKyspby5wdXNoKHRbcl0uY2VudGVyKTtlPWVlLmZyb21Qb2ludHMobyxlKTtsZXQgaT1lLmNlbnRlcixzPWUucmFkaXVzO2ZvcihyPTA7cjxuO3IrKyl7bGV0IGY9dFtyXTtzPU1hdGgubWF4KHMsYS5kaXN0YW5jZShpLGYuY2VudGVyLEdDKStmLnJhZGl1cyl9cmV0dXJuIGUucmFkaXVzPXMsZX07ekM9bmV3IGEsakM9bmV3IGEsSEM9bmV3IGE7ZWUuZnJvbU9yaWVudGVkQm91bmRpbmdCb3g9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoIm9yaWVudGVkQm91bmRpbmdCb3giLHQpLGgoZSl8fChlPW5ldyBlZSk7bGV0IG49dC5oYWxmQXhlcyxvPXR0LmdldENvbHVtbihuLDAsekMpLHI9dHQuZ2V0Q29sdW1uKG4sMSxqQyksaT10dC5nZXRDb2x1bW4obiwyLEhDKTtyZXR1cm4gYS5hZGQobyxyLG8pLGEuYWRkKG8saSxvKSxlLmNlbnRlcj1hLmNsb25lKHQuY2VudGVyLGUuY2VudGVyKSxlLnJhZGl1cz1hLm1hZ25pdHVkZShvKSxlfTtxQz1uZXcgYSxLQz1uZXcgYTtlZS5mcm9tVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoInRyYW5zZm9ybWF0aW9uIix0KSxoKGUpfHwoZT1uZXcgZWUpO2xldCBuPXN0LmdldFRyYW5zbGF0aW9uKHQscUMpLG89c3QuZ2V0U2NhbGUodCxLQykscj0uNSphLm1hZ25pdHVkZShvKTtyZXR1cm4gZS5jZW50ZXI9YS5jbG9uZShuLGUuY2VudGVyKSxlLnJhZGl1cz1yLGV9O2VlLmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYoaCh0KSlyZXR1cm4gaChlKT8oZS5jZW50ZXI9YS5jbG9uZSh0LmNlbnRlcixlLmNlbnRlciksZS5yYWRpdXM9dC5yYWRpdXMsZSk6bmV3IGVlKHQuY2VudGVyLHQucmFkaXVzKX07ZWUucGFja2VkTGVuZ3RoPTQ7ZWUucGFjaz1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj14KG4sMCk7bGV0IG89dC5jZW50ZXI7cmV0dXJuIGVbbisrXT1vLngsZVtuKytdPW8ueSxlW24rK109by56LGVbbl09dC5yYWRpdXMsZX07ZWUudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSxlPXgoZSwwKSxoKG4pfHwobj1uZXcgZWUpO2xldCBvPW4uY2VudGVyO3JldHVybiBvLng9dFtlKytdLG8ueT10W2UrK10sby56PXRbZSsrXSxuLnJhZGl1cz10W2VdLG59O1dDPW5ldyBhLFhDPW5ldyBhO2VlLnVuaW9uPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLGgobil8fChuPW5ldyBlZSk7bGV0IG89dC5jZW50ZXIscj10LnJhZGl1cyxpPWUuY2VudGVyLHM9ZS5yYWRpdXMsZj1hLnN1YnRyYWN0KGksbyxXQyksdT1hLm1hZ25pdHVkZShmKTtpZihyPj11K3MpcmV0dXJuIHQuY2xvbmUobiksbjtpZihzPj11K3IpcmV0dXJuIGUuY2xvbmUobiksbjtsZXQgYz0ocit1K3MpKi41LGw9YS5tdWx0aXBseUJ5U2NhbGFyKGYsKC1yK2MpL3UsWEMpO3JldHVybiBhLmFkZChsLG8sbCksYS5jbG9uZShsLG4uY2VudGVyKSxuLnJhZGl1cz1jLG59O1lDPW5ldyBhO2VlLmV4cGFuZD1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJzcGhlcmUiLHQpLHkudHlwZU9mLm9iamVjdCgicG9pbnQiLGUpLG49ZWUuY2xvbmUodCxuKTtsZXQgbz1hLm1hZ25pdHVkZShhLnN1YnRyYWN0KGUsbi5jZW50ZXIsWUMpKTtyZXR1cm4gbz5uLnJhZGl1cyYmKG4ucmFkaXVzPW8pLG59O2VlLmludGVyc2VjdFBsYW5lPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJzcGhlcmUiLHQpLHkudHlwZU9mLm9iamVjdCgicGxhbmUiLGUpO2xldCBuPXQuY2VudGVyLG89dC5yYWRpdXMscj1lLm5vcm1hbCxpPWEuZG90KHIsbikrZS5kaXN0YW5jZTtyZXR1cm4gaTwtbz9Fbi5PVVRTSURFOmk8bz9Fbi5JTlRFUlNFQ1RJTkc6RW4uSU5TSURFfTtlZS50cmFuc2Zvcm09ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInNwaGVyZSIsdCkseS50eXBlT2Yub2JqZWN0KCJ0cmFuc2Zvcm0iLGUpLGgobil8fChuPW5ldyBlZSksbi5jZW50ZXI9c3QubXVsdGlwbHlCeVBvaW50KGUsdC5jZW50ZXIsbi5jZW50ZXIpLG4ucmFkaXVzPXN0LmdldE1heGltdW1TY2FsZShlKSp0LnJhZGl1cyxufTskQz1uZXcgYTtlZS5kaXN0YW5jZVNxdWFyZWRUbz1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgic3BoZXJlIix0KSx5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsZSk7bGV0IG49YS5zdWJ0cmFjdCh0LmNlbnRlcixlLCRDKSxvPWEubWFnbml0dWRlKG4pLXQucmFkaXVzO3JldHVybiBvPD0wPzA6bypvfTtlZS50cmFuc2Zvcm1XaXRob3V0U2NhbGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInNwaGVyZSIsdCkseS50eXBlT2Yub2JqZWN0KCJ0cmFuc2Zvcm0iLGUpLGgobil8fChuPW5ldyBlZSksbi5jZW50ZXI9c3QubXVsdGlwbHlCeVBvaW50KGUsdC5jZW50ZXIsbi5jZW50ZXIpLG4ucmFkaXVzPXQucmFkaXVzLG59O1pDPW5ldyBhO2VlLmNvbXB1dGVQbGFuZURpc3RhbmNlcz1mdW5jdGlvbih0LGUsbixvKXt5LnR5cGVPZi5vYmplY3QoInNwaGVyZSIsdCkseS50eXBlT2Yub2JqZWN0KCJwb3NpdGlvbiIsZSkseS50eXBlT2Yub2JqZWN0KCJkaXJlY3Rpb24iLG4pLGgobyl8fChvPW5ldyBRcik7bGV0IHI9YS5zdWJ0cmFjdCh0LmNlbnRlcixlLFpDKSxpPWEuZG90KG4scik7cmV0dXJuIG8uc3RhcnQ9aS10LnJhZGl1cyxvLnN0b3A9aSt0LnJhZGl1cyxvfTtBMT1uZXcgYSxRQz1uZXcgYSxKQz1uZXcgYSx0eD1uZXcgYSxleD1uZXcgYSxueD1uZXcgY3QsYjE9bmV3IEFycmF5KDgpO2ZvcihsZXQgdD0wO3Q8ODsrK3QpYjFbdF09bmV3IGE7b3g9bmV3IFFuO2VlLnByb2plY3RUbzJEPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoInNwaGVyZSIsdCksZT14KGUsb3gpO2xldCBvPWUuZWxsaXBzb2lkLHI9dC5jZW50ZXIsaT10LnJhZGl1cyxzO2EuZXF1YWxzKHIsYS5aRVJPKT9zPWEuY2xvbmUoYS5VTklUX1gsQTEpOnM9by5nZW9kZXRpY1N1cmZhY2VOb3JtYWwocixBMSk7bGV0IGY9YS5jcm9zcyhhLlVOSVRfWixzLFFDKTthLm5vcm1hbGl6ZShmLGYpO2xldCB1PWEuY3Jvc3MocyxmLEpDKTthLm5vcm1hbGl6ZSh1LHUpLGEubXVsdGlwbHlCeVNjYWxhcihzLGkscyksYS5tdWx0aXBseUJ5U2NhbGFyKHUsaSx1KSxhLm11bHRpcGx5QnlTY2FsYXIoZixpLGYpO2xldCBjPWEubmVnYXRlKHUsZXgpLGw9YS5uZWdhdGUoZix0eCkscD1iMSxkPXBbMF07YS5hZGQocyx1LGQpLGEuYWRkKGQsZixkKSxkPXBbMV0sYS5hZGQocyx1LGQpLGEuYWRkKGQsbCxkKSxkPXBbMl0sYS5hZGQocyxjLGQpLGEuYWRkKGQsbCxkKSxkPXBbM10sYS5hZGQocyxjLGQpLGEuYWRkKGQsZixkKSxhLm5lZ2F0ZShzLHMpLGQ9cFs0XSxhLmFkZChzLHUsZCksYS5hZGQoZCxmLGQpLGQ9cFs1XSxhLmFkZChzLHUsZCksYS5hZGQoZCxsLGQpLGQ9cFs2XSxhLmFkZChzLGMsZCksYS5hZGQoZCxsLGQpLGQ9cFs3XSxhLmFkZChzLGMsZCksYS5hZGQoZCxmLGQpO2xldCBtPXAubGVuZ3RoO2ZvcihsZXQgTz0wO088bTsrK08pe2xldCBUPXBbT107YS5hZGQocixULFQpO2xldCBFPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoVCxueCk7ZS5wcm9qZWN0KEUsVCl9bj1lZS5mcm9tUG9pbnRzKHAsbikscj1uLmNlbnRlcjtsZXQgXz1yLngsZz1yLnksYj1yLno7cmV0dXJuIHIueD1iLHIueT1fLHIuej1nLG59O2VlLmlzT2NjbHVkZWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJzcGhlcmUiLHQpLHkudHlwZU9mLm9iamVjdCgib2NjbHVkZXIiLGUpLCFlLmlzQm91bmRpbmdTcGhlcmVWaXNpYmxlKHQpfTtlZS5lcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fGgodCkmJmgoZSkmJmEuZXF1YWxzKHQuY2VudGVyLGUuY2VudGVyKSYmdC5yYWRpdXM9PT1lLnJhZGl1c307ZWUucHJvdG90eXBlLmludGVyc2VjdFBsYW5lPWZ1bmN0aW9uKHQpe3JldHVybiBlZS5pbnRlcnNlY3RQbGFuZSh0aGlzLHQpfTtlZS5wcm90b3R5cGUuZGlzdGFuY2VTcXVhcmVkVG89ZnVuY3Rpb24odCl7cmV0dXJuIGVlLmRpc3RhbmNlU3F1YXJlZFRvKHRoaXMsdCl9O2VlLnByb3RvdHlwZS5jb21wdXRlUGxhbmVEaXN0YW5jZXM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlZS5jb21wdXRlUGxhbmVEaXN0YW5jZXModGhpcyx0LGUsbil9O2VlLnByb3RvdHlwZS5pc09jY2x1ZGVkPWZ1bmN0aW9uKHQpe3JldHVybiBlZS5pc09jY2x1ZGVkKHRoaXMsdCl9O2VlLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGVlLmVxdWFscyh0aGlzLHQpfTtlZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIGVlLmNsb25lKHRoaXMsdCl9O2VlLnByb3RvdHlwZS52b2x1bWU9ZnVuY3Rpb24oKXtsZXQgdD10aGlzLnJhZGl1cztyZXR1cm4gRkMqdCp0KnR9O3l0PWVlfSk7dmFyIHJ4LHF0LGtzPVooKCk9PntyeD17REVQVEhfQlVGRkVSX0JJVDoyNTYsU1RFTkNJTF9CVUZGRVJfQklUOjEwMjQsQ09MT1JfQlVGRkVSX0JJVDoxNjM4NCxQT0lOVFM6MCxMSU5FUzoxLExJTkVfTE9PUDoyLExJTkVfU1RSSVA6MyxUUklBTkdMRVM6NCxUUklBTkdMRV9TVFJJUDo1LFRSSUFOR0xFX0ZBTjo2LFpFUk86MCxPTkU6MSxTUkNfQ09MT1I6NzY4LE9ORV9NSU5VU19TUkNfQ09MT1I6NzY5LFNSQ19BTFBIQTo3NzAsT05FX01JTlVTX1NSQ19BTFBIQTo3NzEsRFNUX0FMUEhBOjc3MixPTkVfTUlOVVNfRFNUX0FMUEhBOjc3MyxEU1RfQ09MT1I6Nzc0LE9ORV9NSU5VU19EU1RfQ09MT1I6Nzc1LFNSQ19BTFBIQV9TQVRVUkFURTo3NzYsRlVOQ19BREQ6MzI3NzQsQkxFTkRfRVFVQVRJT046MzI3NzcsQkxFTkRfRVFVQVRJT05fUkdCOjMyNzc3LEJMRU5EX0VRVUFUSU9OX0FMUEhBOjM0ODc3LEZVTkNfU1VCVFJBQ1Q6MzI3NzgsRlVOQ19SRVZFUlNFX1NVQlRSQUNUOjMyNzc5LEJMRU5EX0RTVF9SR0I6MzI5NjgsQkxFTkRfU1JDX1JHQjozMjk2OSxCTEVORF9EU1RfQUxQSEE6MzI5NzAsQkxFTkRfU1JDX0FMUEhBOjMyOTcxLENPTlNUQU5UX0NPTE9SOjMyNzY5LE9ORV9NSU5VU19DT05TVEFOVF9DT0xPUjozMjc3MCxDT05TVEFOVF9BTFBIQTozMjc3MSxPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6MzI3NzIsQkxFTkRfQ09MT1I6MzI3NzMsQVJSQVlfQlVGRkVSOjM0OTYyLEVMRU1FTlRfQVJSQVlfQlVGRkVSOjM0OTYzLEFSUkFZX0JVRkZFUl9CSU5ESU5HOjM0OTY0LEVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6MzQ5NjUsU1RSRUFNX0RSQVc6MzUwNDAsU1RBVElDX0RSQVc6MzUwNDQsRFlOQU1JQ19EUkFXOjM1MDQ4LEJVRkZFUl9TSVpFOjM0NjYwLEJVRkZFUl9VU0FHRTozNDY2MSxDVVJSRU5UX1ZFUlRFWF9BVFRSSUI6MzQzNDIsRlJPTlQ6MTAyOCxCQUNLOjEwMjksRlJPTlRfQU5EX0JBQ0s6MTAzMixDVUxMX0ZBQ0U6Mjg4NCxCTEVORDozMDQyLERJVEhFUjozMDI0LFNURU5DSUxfVEVTVDoyOTYwLERFUFRIX1RFU1Q6MjkyOSxTQ0lTU09SX1RFU1Q6MzA4OSxQT0xZR09OX09GRlNFVF9GSUxMOjMyODIzLFNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTozMjkyNixTQU1QTEVfQ09WRVJBR0U6MzI5MjgsTk9fRVJST1I6MCxJTlZBTElEX0VOVU06MTI4MCxJTlZBTElEX1ZBTFVFOjEyODEsSU5WQUxJRF9PUEVSQVRJT046MTI4MixPVVRfT0ZfTUVNT1JZOjEyODUsQ1c6MjMwNCxDQ1c6MjMwNSxMSU5FX1dJRFRIOjI4NDksQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOjMzOTAxLEFMSUFTRURfTElORV9XSURUSF9SQU5HRTozMzkwMixDVUxMX0ZBQ0VfTU9ERToyODg1LEZST05UX0ZBQ0U6Mjg4NixERVBUSF9SQU5HRToyOTI4LERFUFRIX1dSSVRFTUFTSzoyOTMwLERFUFRIX0NMRUFSX1ZBTFVFOjI5MzEsREVQVEhfRlVOQzoyOTMyLFNURU5DSUxfQ0xFQVJfVkFMVUU6Mjk2MSxTVEVOQ0lMX0ZVTkM6Mjk2MixTVEVOQ0lMX0ZBSUw6Mjk2NCxTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDoyOTY1LFNURU5DSUxfUEFTU19ERVBUSF9QQVNTOjI5NjYsU1RFTkNJTF9SRUY6Mjk2NyxTVEVOQ0lMX1ZBTFVFX01BU0s6Mjk2MyxTVEVOQ0lMX1dSSVRFTUFTSzoyOTY4LFNURU5DSUxfQkFDS19GVU5DOjM0ODE2LFNURU5DSUxfQkFDS19GQUlMOjM0ODE3LFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6MzQ4MTgsU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzozNDgxOSxTVEVOQ0lMX0JBQ0tfUkVGOjM2MDAzLFNURU5DSUxfQkFDS19WQUxVRV9NQVNLOjM2MDA0LFNURU5DSUxfQkFDS19XUklURU1BU0s6MzYwMDUsVklFV1BPUlQ6Mjk3OCxTQ0lTU09SX0JPWDozMDg4LENPTE9SX0NMRUFSX1ZBTFVFOjMxMDYsQ09MT1JfV1JJVEVNQVNLOjMxMDcsVU5QQUNLX0FMSUdOTUVOVDozMzE3LFBBQ0tfQUxJR05NRU5UOjMzMzMsTUFYX1RFWFRVUkVfU0laRTozMzc5LE1BWF9WSUVXUE9SVF9ESU1TOjMzODYsU1VCUElYRUxfQklUUzozNDA4LFJFRF9CSVRTOjM0MTAsR1JFRU5fQklUUzozNDExLEJMVUVfQklUUzozNDEyLEFMUEhBX0JJVFM6MzQxMyxERVBUSF9CSVRTOjM0MTQsU1RFTkNJTF9CSVRTOjM0MTUsUE9MWUdPTl9PRkZTRVRfVU5JVFM6MTA3NTIsUE9MWUdPTl9PRkZTRVRfRkFDVE9SOjMyODI0LFRFWFRVUkVfQklORElOR18yRDozMjg3MyxTQU1QTEVfQlVGRkVSUzozMjkzNixTQU1QTEVTOjMyOTM3LFNBTVBMRV9DT1ZFUkFHRV9WQUxVRTozMjkzOCxTQU1QTEVfQ09WRVJBR0VfSU5WRVJUOjMyOTM5LENPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOjM0NDY3LERPTlRfQ0FSRTo0MzUyLEZBU1RFU1Q6NDM1MyxOSUNFU1Q6NDM1NCxHRU5FUkFURV9NSVBNQVBfSElOVDozMzE3MCxCWVRFOjUxMjAsVU5TSUdORURfQllURTo1MTIxLFNIT1JUOjUxMjIsVU5TSUdORURfU0hPUlQ6NTEyMyxJTlQ6NTEyNCxVTlNJR05FRF9JTlQ6NTEyNSxGTE9BVDo1MTI2LERFUFRIX0NPTVBPTkVOVDo2NDAyLEFMUEhBOjY0MDYsUkdCOjY0MDcsUkdCQTo2NDA4LExVTUlOQU5DRTo2NDA5LExVTUlOQU5DRV9BTFBIQTo2NDEwLFVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6MzI4MTksVU5TSUdORURfU0hPUlRfNV81XzVfMTozMjgyMCxVTlNJR05FRF9TSE9SVF81XzZfNTozMzYzNSxGUkFHTUVOVF9TSEFERVI6MzU2MzIsVkVSVEVYX1NIQURFUjozNTYzMyxNQVhfVkVSVEVYX0FUVFJJQlM6MzQ5MjEsTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6MzYzNDcsTUFYX1ZBUllJTkdfVkVDVE9SUzozNjM0OCxNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzozNTY2MSxNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6MzU2NjAsTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6MzQ5MzAsTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzozNjM0OSxTSEFERVJfVFlQRTozNTY2MyxERUxFVEVfU1RBVFVTOjM1NzEyLExJTktfU1RBVFVTOjM1NzE0LFZBTElEQVRFX1NUQVRVUzozNTcxNSxBVFRBQ0hFRF9TSEFERVJTOjM1NzE3LEFDVElWRV9VTklGT1JNUzozNTcxOCxBQ1RJVkVfQVRUUklCVVRFUzozNTcyMSxTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT046MzU3MjQsQ1VSUkVOVF9QUk9HUkFNOjM1NzI1LE5FVkVSOjUxMixMRVNTOjUxMyxFUVVBTDo1MTQsTEVRVUFMOjUxNSxHUkVBVEVSOjUxNixOT1RFUVVBTDo1MTcsR0VRVUFMOjUxOCxBTFdBWVM6NTE5LEtFRVA6NzY4MCxSRVBMQUNFOjc2ODEsSU5DUjo3NjgyLERFQ1I6NzY4MyxJTlZFUlQ6NTM4NixJTkNSX1dSQVA6MzQwNTUsREVDUl9XUkFQOjM0MDU2LFZFTkRPUjo3OTM2LFJFTkRFUkVSOjc5MzcsVkVSU0lPTjo3OTM4LE5FQVJFU1Q6OTcyOCxMSU5FQVI6OTcyOSxORUFSRVNUX01JUE1BUF9ORUFSRVNUOjk5ODQsTElORUFSX01JUE1BUF9ORUFSRVNUOjk5ODUsTkVBUkVTVF9NSVBNQVBfTElORUFSOjk5ODYsTElORUFSX01JUE1BUF9MSU5FQVI6OTk4NyxURVhUVVJFX01BR19GSUxURVI6MTAyNDAsVEVYVFVSRV9NSU5fRklMVEVSOjEwMjQxLFRFWFRVUkVfV1JBUF9TOjEwMjQyLFRFWFRVUkVfV1JBUF9UOjEwMjQzLFRFWFRVUkVfMkQ6MzU1MyxURVhUVVJFOjU4OTAsVEVYVFVSRV9DVUJFX01BUDozNDA2NyxURVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA6MzQwNjgsVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOjM0MDY5LFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDozNDA3MCxURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6MzQwNzEsVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOjM0MDcyLFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjozNDA3MyxURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6MzQwNzQsTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRTozNDA3NixURVhUVVJFMDozMzk4NCxURVhUVVJFMTozMzk4NSxURVhUVVJFMjozMzk4NixURVhUVVJFMzozMzk4NyxURVhUVVJFNDozMzk4OCxURVhUVVJFNTozMzk4OSxURVhUVVJFNjozMzk5MCxURVhUVVJFNzozMzk5MSxURVhUVVJFODozMzk5MixURVhUVVJFOTozMzk5MyxURVhUVVJFMTA6MzM5OTQsVEVYVFVSRTExOjMzOTk1LFRFWFRVUkUxMjozMzk5NixURVhUVVJFMTM6MzM5OTcsVEVYVFVSRTE0OjMzOTk4LFRFWFRVUkUxNTozMzk5OSxURVhUVVJFMTY6MzRlMyxURVhUVVJFMTc6MzQwMDEsVEVYVFVSRTE4OjM0MDAyLFRFWFRVUkUxOTozNDAwMyxURVhUVVJFMjA6MzQwMDQsVEVYVFVSRTIxOjM0MDA1LFRFWFRVUkUyMjozNDAwNixURVhUVVJFMjM6MzQwMDcsVEVYVFVSRTI0OjM0MDA4LFRFWFRVUkUyNTozNDAwOSxURVhUVVJFMjY6MzQwMTAsVEVYVFVSRTI3OjM0MDExLFRFWFRVUkUyODozNDAxMixURVhUVVJFMjk6MzQwMTMsVEVYVFVSRTMwOjM0MDE0LFRFWFRVUkUzMTozNDAxNSxBQ1RJVkVfVEVYVFVSRTozNDAxNixSRVBFQVQ6MTA0OTcsQ0xBTVBfVE9fRURHRTozMzA3MSxNSVJST1JFRF9SRVBFQVQ6MzM2NDgsRkxPQVRfVkVDMjozNTY2NCxGTE9BVF9WRUMzOjM1NjY1LEZMT0FUX1ZFQzQ6MzU2NjYsSU5UX1ZFQzI6MzU2NjcsSU5UX1ZFQzM6MzU2NjgsSU5UX1ZFQzQ6MzU2NjksQk9PTDozNTY3MCxCT09MX1ZFQzI6MzU2NzEsQk9PTF9WRUMzOjM1NjcyLEJPT0xfVkVDNDozNTY3MyxGTE9BVF9NQVQyOjM1Njc0LEZMT0FUX01BVDM6MzU2NzUsRkxPQVRfTUFUNDozNTY3NixTQU1QTEVSXzJEOjM1Njc4LFNBTVBMRVJfQ1VCRTozNTY4MCxWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6MzQzMzgsVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOjM0MzM5LFZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOjM0MzQwLFZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRTozNDM0MSxWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6MzQ5MjIsVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSOjM0MzczLFZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6MzQ5NzUsSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOjM1NzM4LElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUOjM1NzM5LENPTVBJTEVfU1RBVFVTOjM1NzEzLExPV19GTE9BVDozNjMzNixNRURJVU1fRkxPQVQ6MzYzMzcsSElHSF9GTE9BVDozNjMzOCxMT1dfSU5UOjM2MzM5LE1FRElVTV9JTlQ6MzYzNDAsSElHSF9JTlQ6MzYzNDEsRlJBTUVCVUZGRVI6MzYxNjAsUkVOREVSQlVGRkVSOjM2MTYxLFJHQkE0OjMyODU0LFJHQjVfQTE6MzI4NTUsUkdCNTY1OjM2MTk0LERFUFRIX0NPTVBPTkVOVDE2OjMzMTg5LFNURU5DSUxfSU5ERVg6NjQwMSxTVEVOQ0lMX0lOREVYODozNjE2OCxERVBUSF9TVEVOQ0lMOjM0MDQxLFJFTkRFUkJVRkZFUl9XSURUSDozNjE2MixSRU5ERVJCVUZGRVJfSEVJR0hUOjM2MTYzLFJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6MzYxNjQsUkVOREVSQlVGRkVSX1JFRF9TSVpFOjM2MTc2LFJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFOjM2MTc3LFJFTkRFUkJVRkZFUl9CTFVFX1NJWkU6MzYxNzgsUkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6MzYxNzksUkVOREVSQlVGRkVSX0RFUFRIX1NJWkU6MzYxODAsUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRTozNjE4MSxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOjM2MDQ4LEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6MzYwNDksRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOjM2MDUwLEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFOjM2MDUxLENPTE9SX0FUVEFDSE1FTlQwOjM2MDY0LERFUFRIX0FUVEFDSE1FTlQ6MzYwOTYsU1RFTkNJTF9BVFRBQ0hNRU5UOjM2MTI4LERFUFRIX1NURU5DSUxfQVRUQUNITUVOVDozMzMwNixOT05FOjAsRlJBTUVCVUZGRVJfQ09NUExFVEU6MzYwNTMsRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOjM2MDU0LEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UOjM2MDU1LEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUzozNjA1NyxGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDozNjA2MSxGUkFNRUJVRkZFUl9CSU5ESU5HOjM2MDA2LFJFTkRFUkJVRkZFUl9CSU5ESU5HOjM2MDA3LE1BWF9SRU5ERVJCVUZGRVJfU0laRTozNDAyNCxJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjoxMjg2LFVOUEFDS19GTElQX1lfV0VCR0w6Mzc0NDAsVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMOjM3NDQxLENPTlRFWFRfTE9TVF9XRUJHTDozNzQ0MixVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOjM3NDQzLEJST1dTRVJfREVGQVVMVF9XRUJHTDozNzQ0NCxDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOjMzNzc2LENPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOjMzNzc3LENPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOjMzNzc4LENPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOjMzNzc5LENPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6MzU4NDAsQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRzozNTg0MSxDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRzozNTg0MixDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzozNTg0MyxDT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfV0VCR0w6Mzc4MDgsQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTDozNjE5NixDT01QUkVTU0VEX1JHQkFfQlBUQ19VTk9STTozNjQ5MixIQUxGX0ZMT0FUX09FUzozNjE5MyxET1VCTEU6NTEzMCxSRUFEX0JVRkZFUjozMDc0LFVOUEFDS19ST1dfTEVOR1RIOjMzMTQsVU5QQUNLX1NLSVBfUk9XUzozMzE1LFVOUEFDS19TS0lQX1BJWEVMUzozMzE2LFBBQ0tfUk9XX0xFTkdUSDozMzMwLFBBQ0tfU0tJUF9ST1dTOjMzMzEsUEFDS19TS0lQX1BJWEVMUzozMzMyLENPTE9SOjYxNDQsREVQVEg6NjE0NSxTVEVOQ0lMOjYxNDYsUkVEOjY0MDMsUkdCODozMjg0OSxSR0JBODozMjg1NixSR0IxMF9BMjozMjg1NyxURVhUVVJFX0JJTkRJTkdfM0Q6MzI4NzQsVU5QQUNLX1NLSVBfSU1BR0VTOjMyODc3LFVOUEFDS19JTUFHRV9IRUlHSFQ6MzI4NzgsVEVYVFVSRV8zRDozMjg3OSxURVhUVVJFX1dSQVBfUjozMjg4MixNQVhfM0RfVEVYVFVSRV9TSVpFOjMyODgzLFVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjozMzY0MCxNQVhfRUxFTUVOVFNfVkVSVElDRVM6MzNlMyxNQVhfRUxFTUVOVFNfSU5ESUNFUzozMzAwMSxURVhUVVJFX01JTl9MT0Q6MzMwODIsVEVYVFVSRV9NQVhfTE9EOjMzMDgzLFRFWFRVUkVfQkFTRV9MRVZFTDozMzA4NCxURVhUVVJFX01BWF9MRVZFTDozMzA4NSxNSU46MzI3NzUsTUFYOjMyNzc2LERFUFRIX0NPTVBPTkVOVDI0OjMzMTkwLE1BWF9URVhUVVJFX0xPRF9CSUFTOjM0MDQ1LFRFWFRVUkVfQ09NUEFSRV9NT0RFOjM0ODkyLFRFWFRVUkVfQ09NUEFSRV9GVU5DOjM0ODkzLENVUlJFTlRfUVVFUlk6MzQ5MTcsUVVFUllfUkVTVUxUOjM0OTE4LFFVRVJZX1JFU1VMVF9BVkFJTEFCTEU6MzQ5MTksU1RSRUFNX1JFQUQ6MzUwNDEsU1RSRUFNX0NPUFk6MzUwNDIsU1RBVElDX1JFQUQ6MzUwNDUsU1RBVElDX0NPUFk6MzUwNDYsRFlOQU1JQ19SRUFEOjM1MDQ5LERZTkFNSUNfQ09QWTozNTA1MCxNQVhfRFJBV19CVUZGRVJTOjM0ODUyLERSQVdfQlVGRkVSMDozNDg1MyxEUkFXX0JVRkZFUjE6MzQ4NTQsRFJBV19CVUZGRVIyOjM0ODU1LERSQVdfQlVGRkVSMzozNDg1NixEUkFXX0JVRkZFUjQ6MzQ4NTcsRFJBV19CVUZGRVI1OjM0ODU4LERSQVdfQlVGRkVSNjozNDg1OSxEUkFXX0JVRkZFUjc6MzQ4NjAsRFJBV19CVUZGRVI4OjM0ODYxLERSQVdfQlVGRkVSOTozNDg2MixEUkFXX0JVRkZFUjEwOjM0ODYzLERSQVdfQlVGRkVSMTE6MzQ4NjQsRFJBV19CVUZGRVIxMjozNDg2NSxEUkFXX0JVRkZFUjEzOjM0ODY2LERSQVdfQlVGRkVSMTQ6MzQ4NjcsRFJBV19CVUZGRVIxNTozNDg2OCxNQVhfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTOjM1NjU3LE1BWF9WRVJURVhfVU5JRk9STV9DT01QT05FTlRTOjM1NjU4LFNBTVBMRVJfM0Q6MzU2NzksU0FNUExFUl8yRF9TSEFET1c6MzU2ODIsRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVDozNTcyMyxQSVhFTF9QQUNLX0JVRkZFUjozNTA1MSxQSVhFTF9VTlBBQ0tfQlVGRkVSOjM1MDUyLFBJWEVMX1BBQ0tfQlVGRkVSX0JJTkRJTkc6MzUwNTMsUElYRUxfVU5QQUNLX0JVRkZFUl9CSU5ESU5HOjM1MDU1LEZMT0FUX01BVDJ4MzozNTY4NSxGTE9BVF9NQVQyeDQ6MzU2ODYsRkxPQVRfTUFUM3gyOjM1Njg3LEZMT0FUX01BVDN4NDozNTY4OCxGTE9BVF9NQVQ0eDI6MzU2ODksRkxPQVRfTUFUNHgzOjM1NjkwLFNSR0I6MzU5MDQsU1JHQjg6MzU5MDUsU1JHQjhfQUxQSEE4OjM1OTA3LENPTVBBUkVfUkVGX1RPX1RFWFRVUkU6MzQ4OTQsUkdCQTMyRjozNDgzNixSR0IzMkY6MzQ4MzcsUkdCQTE2RjozNDg0MixSR0IxNkY6MzQ4NDMsVkVSVEVYX0FUVFJJQl9BUlJBWV9JTlRFR0VSOjM1MDY5LE1BWF9BUlJBWV9URVhUVVJFX0xBWUVSUzozNTA3MSxNSU5fUFJPR1JBTV9URVhFTF9PRkZTRVQ6MzUwNzYsTUFYX1BST0dSQU1fVEVYRUxfT0ZGU0VUOjM1MDc3LE1BWF9WQVJZSU5HX0NPTVBPTkVOVFM6MzU2NTksVEVYVFVSRV8yRF9BUlJBWTozNTg2NixURVhUVVJFX0JJTkRJTkdfMkRfQVJSQVk6MzU4NjksUjExRl9HMTFGX0IxMEY6MzU4OTgsVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFVjozNTg5OSxSR0I5X0U1OjM1OTAxLFVOU0lHTkVEX0lOVF81XzlfOV85X1JFVjozNTkwMixUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX01PREU6MzU5NjcsTUFYX1RSQU5TRk9STV9GRUVEQkFDS19TRVBBUkFURV9DT01QT05FTlRTOjM1OTY4LFRSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5HUzozNTk3MSxUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX1NUQVJUOjM1OTcyLFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU0laRTozNTk3MyxUUkFOU0ZPUk1fRkVFREJBQ0tfUFJJTUlUSVZFU19XUklUVEVOOjM1OTc2LFJBU1RFUklaRVJfRElTQ0FSRDozNTk3NyxNQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0lOVEVSTEVBVkVEX0NPTVBPTkVOVFM6MzU5NzgsTUFYX1RSQU5TRk9STV9GRUVEQkFDS19TRVBBUkFURV9BVFRSSUJTOjM1OTc5LElOVEVSTEVBVkVEX0FUVFJJQlM6MzU5ODAsU0VQQVJBVEVfQVRUUklCUzozNTk4MSxUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOjM1OTgyLFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzozNTk4MyxSR0JBMzJVSTozNjIwOCxSR0IzMlVJOjM2MjA5LFJHQkExNlVJOjM2MjE0LFJHQjE2VUk6MzYyMTUsUkdCQThVSTozNjIyMCxSR0I4VUk6MzYyMjEsUkdCQTMySTozNjIyNixSR0IzMkk6MzYyMjcsUkdCQTE2STozNjIzMixSR0IxNkk6MzYyMzMsUkdCQThJOjM2MjM4LFJHQjhJOjM2MjM5LFJFRF9JTlRFR0VSOjM2MjQ0LFJHQl9JTlRFR0VSOjM2MjQ4LFJHQkFfSU5URUdFUjozNjI0OSxTQU1QTEVSXzJEX0FSUkFZOjM2Mjg5LFNBTVBMRVJfMkRfQVJSQVlfU0hBRE9XOjM2MjkyLFNBTVBMRVJfQ1VCRV9TSEFET1c6MzYyOTMsVU5TSUdORURfSU5UX1ZFQzI6MzYyOTQsVU5TSUdORURfSU5UX1ZFQzM6MzYyOTUsVU5TSUdORURfSU5UX1ZFQzQ6MzYyOTYsSU5UX1NBTVBMRVJfMkQ6MzYyOTgsSU5UX1NBTVBMRVJfM0Q6MzYyOTksSU5UX1NBTVBMRVJfQ1VCRTozNjMwMCxJTlRfU0FNUExFUl8yRF9BUlJBWTozNjMwMyxVTlNJR05FRF9JTlRfU0FNUExFUl8yRDozNjMwNixVTlNJR05FRF9JTlRfU0FNUExFUl8zRDozNjMwNyxVTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFOjM2MzA4LFVOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOjM2MzExLERFUFRIX0NPTVBPTkVOVDMyRjozNjAxMixERVBUSDMyRl9TVEVOQ0lMODozNjAxMyxGTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVY6MzYyNjksRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElORzozMzI5NixGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTVBPTkVOVF9UWVBFOjMzMjk3LEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfUkVEX1NJWkU6MzMyOTgsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9HUkVFTl9TSVpFOjMzMjk5LEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQkxVRV9TSVpFOjMzMzAwLEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQUxQSEFfU0laRTozMzMwMSxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0RFUFRIX1NJWkU6MzMzMDIsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9TVEVOQ0lMX1NJWkU6MzMzMDMsRlJBTUVCVUZGRVJfREVGQVVMVDozMzMwNCxVTlNJR05FRF9JTlRfMjRfODozNDA0MixERVBUSDI0X1NURU5DSUw4OjM1MDU2LFVOU0lHTkVEX05PUk1BTElaRUQ6MzU4NjMsRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HOjM2MDA2LFJFQURfRlJBTUVCVUZGRVI6MzYwMDgsRFJBV19GUkFNRUJVRkZFUjozNjAwOSxSRUFEX0ZSQU1FQlVGRkVSX0JJTkRJTkc6MzYwMTAsUkVOREVSQlVGRkVSX1NBTVBMRVM6MzYwMTEsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xBWUVSOjM2MDUyLE1BWF9DT0xPUl9BVFRBQ0hNRU5UUzozNjA2MyxDT0xPUl9BVFRBQ0hNRU5UMTozNjA2NSxDT0xPUl9BVFRBQ0hNRU5UMjozNjA2NixDT0xPUl9BVFRBQ0hNRU5UMzozNjA2NyxDT0xPUl9BVFRBQ0hNRU5UNDozNjA2OCxDT0xPUl9BVFRBQ0hNRU5UNTozNjA2OSxDT0xPUl9BVFRBQ0hNRU5UNjozNjA3MCxDT0xPUl9BVFRBQ0hNRU5UNzozNjA3MSxDT0xPUl9BVFRBQ0hNRU5UODozNjA3MixDT0xPUl9BVFRBQ0hNRU5UOTozNjA3MyxDT0xPUl9BVFRBQ0hNRU5UMTA6MzYwNzQsQ09MT1JfQVRUQUNITUVOVDExOjM2MDc1LENPTE9SX0FUVEFDSE1FTlQxMjozNjA3NixDT0xPUl9BVFRBQ0hNRU5UMTM6MzYwNzcsQ09MT1JfQVRUQUNITUVOVDE0OjM2MDc4LENPTE9SX0FUVEFDSE1FTlQxNTozNjA3OSxGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFOjM2MTgyLE1BWF9TQU1QTEVTOjM2MTgzLEhBTEZfRkxPQVQ6NTEzMSxSRzozMzMxOSxSR19JTlRFR0VSOjMzMzIwLFI4OjMzMzIxLFJHODozMzMyMyxSMTZGOjMzMzI1LFIzMkY6MzMzMjYsUkcxNkY6MzMzMjcsUkczMkY6MzMzMjgsUjhJOjMzMzI5LFI4VUk6MzMzMzAsUjE2STozMzMzMSxSMTZVSTozMzMzMixSMzJJOjMzMzMzLFIzMlVJOjMzMzM0LFJHOEk6MzMzMzUsUkc4VUk6MzMzMzYsUkcxNkk6MzMzMzcsUkcxNlVJOjMzMzM4LFJHMzJJOjMzMzM5LFJHMzJVSTozMzM0MCxWRVJURVhfQVJSQVlfQklORElORzozNDIyOSxSOF9TTk9STTozNjc1NixSRzhfU05PUk06MzY3NTcsUkdCOF9TTk9STTozNjc1OCxSR0JBOF9TTk9STTozNjc1OSxTSUdORURfTk9STUFMSVpFRDozNjc2NCxDT1BZX1JFQURfQlVGRkVSOjM2NjYyLENPUFlfV1JJVEVfQlVGRkVSOjM2NjYzLENPUFlfUkVBRF9CVUZGRVJfQklORElORzozNjY2MixDT1BZX1dSSVRFX0JVRkZFUl9CSU5ESU5HOjM2NjYzLFVOSUZPUk1fQlVGRkVSOjM1MzQ1LFVOSUZPUk1fQlVGRkVSX0JJTkRJTkc6MzUzNjgsVU5JRk9STV9CVUZGRVJfU1RBUlQ6MzUzNjksVU5JRk9STV9CVUZGRVJfU0laRTozNTM3MCxNQVhfVkVSVEVYX1VOSUZPUk1fQkxPQ0tTOjM1MzcxLE1BWF9GUkFHTUVOVF9VTklGT1JNX0JMT0NLUzozNTM3MyxNQVhfQ09NQklORURfVU5JRk9STV9CTE9DS1M6MzUzNzQsTUFYX1VOSUZPUk1fQlVGRkVSX0JJTkRJTkdTOjM1Mzc1LE1BWF9VTklGT1JNX0JMT0NLX1NJWkU6MzUzNzYsTUFYX0NPTUJJTkVEX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFM6MzUzNzcsTUFYX0NPTUJJTkVEX0ZSQUdNRU5UX1VOSUZPUk1fQ09NUE9ORU5UUzozNTM3OSxVTklGT1JNX0JVRkZFUl9PRkZTRVRfQUxJR05NRU5UOjM1MzgwLEFDVElWRV9VTklGT1JNX0JMT0NLUzozNTM4MixVTklGT1JNX1RZUEU6MzUzODMsVU5JRk9STV9TSVpFOjM1Mzg0LFVOSUZPUk1fQkxPQ0tfSU5ERVg6MzUzODYsVU5JRk9STV9PRkZTRVQ6MzUzODcsVU5JRk9STV9BUlJBWV9TVFJJREU6MzUzODgsVU5JRk9STV9NQVRSSVhfU1RSSURFOjM1Mzg5LFVOSUZPUk1fSVNfUk9XX01BSk9SOjM1MzkwLFVOSUZPUk1fQkxPQ0tfQklORElORzozNTM5MSxVTklGT1JNX0JMT0NLX0RBVEFfU0laRTozNTM5MixVTklGT1JNX0JMT0NLX0FDVElWRV9VTklGT1JNUzozNTM5NCxVTklGT1JNX0JMT0NLX0FDVElWRV9VTklGT1JNX0lORElDRVM6MzUzOTUsVU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX1ZFUlRFWF9TSEFERVI6MzUzOTYsVU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX0ZSQUdNRU5UX1NIQURFUjozNTM5OCxJTlZBTElEX0lOREVYOjQyOTQ5NjcyOTUsTUFYX1ZFUlRFWF9PVVRQVVRfQ09NUE9ORU5UUzozNzE1NCxNQVhfRlJBR01FTlRfSU5QVVRfQ09NUE9ORU5UUzozNzE1NyxNQVhfU0VSVkVSX1dBSVRfVElNRU9VVDozNzEzNyxPQkpFQ1RfVFlQRTozNzEzOCxTWU5DX0NPTkRJVElPTjozNzEzOSxTWU5DX1NUQVRVUzozNzE0MCxTWU5DX0ZMQUdTOjM3MTQxLFNZTkNfRkVOQ0U6MzcxNDIsU1lOQ19HUFVfQ09NTUFORFNfQ09NUExFVEU6MzcxNDMsVU5TSUdOQUxFRDozNzE0NCxTSUdOQUxFRDozNzE0NSxBTFJFQURZX1NJR05BTEVEOjM3MTQ2LFRJTUVPVVRfRVhQSVJFRDozNzE0NyxDT05ESVRJT05fU0FUSVNGSUVEOjM3MTQ4LFdBSVRfRkFJTEVEOjM3MTQ5LFNZTkNfRkxVU0hfQ09NTUFORFNfQklUOjEsVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SOjM1MDcwLEFOWV9TQU1QTEVTX1BBU1NFRDozNTg4NyxBTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFOjM2MjAyLFNBTVBMRVJfQklORElORzozNTA5NyxSR0IxMF9BMlVJOjM2OTc1LElOVF8yXzEwXzEwXzEwX1JFVjozNjI1NSxUUkFOU0ZPUk1fRkVFREJBQ0s6MzYzODYsVFJBTlNGT1JNX0ZFRURCQUNLX1BBVVNFRDozNjM4NyxUUkFOU0ZPUk1fRkVFREJBQ0tfQUNUSVZFOjM2Mzg4LFRSQU5TRk9STV9GRUVEQkFDS19CSU5ESU5HOjM2Mzg5LENPTVBSRVNTRURfUjExX0VBQzozNzQ4OCxDT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDOjM3NDg5LENPTVBSRVNTRURfUkcxMV9FQUM6Mzc0OTAsQ09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUM6Mzc0OTEsQ09NUFJFU1NFRF9SR0I4X0VUQzI6Mzc0OTIsQ09NUFJFU1NFRF9TUkdCOF9FVEMyOjM3NDkzLENPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzI6Mzc0OTQsQ09NUFJFU1NFRF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzI6Mzc0OTUsQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQzozNzQ5NixDT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzozNzQ5NyxURVhUVVJFX0lNTVVUQUJMRV9GT1JNQVQ6MzcxNjcsTUFYX0VMRU1FTlRfSU5ERVg6MzYyMDMsVEVYVFVSRV9JTU1VVEFCTEVfTEVWRUxTOjMzNTAzLE1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDozNDA0N30scXQ9T2JqZWN0LmZyZWV6ZShyeCl9KTt2YXIgaWUsb3QsRGU9WigoKT0+e0l0KCk7YXQoKTtIdCgpO2tzKCk7aWU9e0JZVEU6cXQuQllURSxVTlNJR05FRF9CWVRFOnF0LlVOU0lHTkVEX0JZVEUsU0hPUlQ6cXQuU0hPUlQsVU5TSUdORURfU0hPUlQ6cXQuVU5TSUdORURfU0hPUlQsSU5UOnF0LklOVCxVTlNJR05FRF9JTlQ6cXQuVU5TSUdORURfSU5ULEZMT0FUOnF0LkZMT0FULERPVUJMRTpxdC5ET1VCTEV9O2llLmdldFNpemVJbkJ5dGVzPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJ2YWx1ZSBpcyByZXF1aXJlZC4iKTtzd2l0Y2godCl7Y2FzZSBpZS5CWVRFOnJldHVybiBJbnQ4QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBpZS5VTlNJR05FRF9CWVRFOnJldHVybiBVaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2UgaWUuU0hPUlQ6cmV0dXJuIEludDE2QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBpZS5VTlNJR05FRF9TSE9SVDpyZXR1cm4gVWludDE2QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBpZS5JTlQ6cmV0dXJuIEludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBpZS5VTlNJR05FRF9JTlQ6cmV0dXJuIFVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2UgaWUuRkxPQVQ6cmV0dXJuIEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtjYXNlIGllLkRPVUJMRTpyZXR1cm4gRmxvYXQ2NEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2RlZmF1bHQ6dGhyb3cgbmV3IEIoImNvbXBvbmVudERhdGF0eXBlIGlzIG5vdCBhIHZhbGlkIHZhbHVlLiIpfX07aWUuZnJvbVR5cGVkQXJyYXk9ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIEludDhBcnJheSlyZXR1cm4gaWUuQllURTtpZih0IGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gaWUuVU5TSUdORURfQllURTtpZih0IGluc3RhbmNlb2YgSW50MTZBcnJheSlyZXR1cm4gaWUuU0hPUlQ7aWYodCBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KXJldHVybiBpZS5VTlNJR05FRF9TSE9SVDtpZih0IGluc3RhbmNlb2YgSW50MzJBcnJheSlyZXR1cm4gaWUuSU5UO2lmKHQgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlyZXR1cm4gaWUuVU5TSUdORURfSU5UO2lmKHQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpcmV0dXJuIGllLkZMT0FUO2lmKHQgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpcmV0dXJuIGllLkRPVUJMRTt0aHJvdyBuZXcgQigiYXJyYXkgbXVzdCBiZSBhbiBJbnQ4QXJyYXksIFVpbnQ4QXJyYXksIEludDE2QXJyYXksIFVpbnQxNkFycmF5LCBJbnQzMkFycmF5LCBVaW50MzJBcnJheSwgRmxvYXQzMkFycmF5LCBvciBGbG9hdDY0QXJyYXkuIil9O2llLnZhbGlkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBoKHQpJiYodD09PWllLkJZVEV8fHQ9PT1pZS5VTlNJR05FRF9CWVRFfHx0PT09aWUuU0hPUlR8fHQ9PT1pZS5VTlNJR05FRF9TSE9SVHx8dD09PWllLklOVHx8dD09PWllLlVOU0lHTkVEX0lOVHx8dD09PWllLkZMT0FUfHx0PT09aWUuRE9VQkxFKX07aWUuY3JlYXRlVHlwZWRBcnJheT1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJjb21wb25lbnREYXRhdHlwZSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgQigidmFsdWVzT3JMZW5ndGggaXMgcmVxdWlyZWQuIik7c3dpdGNoKHQpe2Nhc2UgaWUuQllURTpyZXR1cm4gbmV3IEludDhBcnJheShlKTtjYXNlIGllLlVOU0lHTkVEX0JZVEU6cmV0dXJuIG5ldyBVaW50OEFycmF5KGUpO2Nhc2UgaWUuU0hPUlQ6cmV0dXJuIG5ldyBJbnQxNkFycmF5KGUpO2Nhc2UgaWUuVU5TSUdORURfU0hPUlQ6cmV0dXJuIG5ldyBVaW50MTZBcnJheShlKTtjYXNlIGllLklOVDpyZXR1cm4gbmV3IEludDMyQXJyYXkoZSk7Y2FzZSBpZS5VTlNJR05FRF9JTlQ6cmV0dXJuIG5ldyBVaW50MzJBcnJheShlKTtjYXNlIGllLkZMT0FUOnJldHVybiBuZXcgRmxvYXQzMkFycmF5KGUpO2Nhc2UgaWUuRE9VQkxFOnJldHVybiBuZXcgRmxvYXQ2NEFycmF5KGUpO2RlZmF1bHQ6dGhyb3cgbmV3IEIoImNvbXBvbmVudERhdGF0eXBlIGlzIG5vdCBhIHZhbGlkIHZhbHVlLiIpfX07aWUuY3JlYXRlQXJyYXlCdWZmZXJWaWV3PWZ1bmN0aW9uKHQsZSxuLG8pe2lmKCFoKHQpKXRocm93IG5ldyBCKCJjb21wb25lbnREYXRhdHlwZSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgQigiYnVmZmVyIGlzIHJlcXVpcmVkLiIpO3N3aXRjaChuPXgobiwwKSxvPXgobywoZS5ieXRlTGVuZ3RoLW4pL2llLmdldFNpemVJbkJ5dGVzKHQpKSx0KXtjYXNlIGllLkJZVEU6cmV0dXJuIG5ldyBJbnQ4QXJyYXkoZSxuLG8pO2Nhc2UgaWUuVU5TSUdORURfQllURTpyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZSxuLG8pO2Nhc2UgaWUuU0hPUlQ6cmV0dXJuIG5ldyBJbnQxNkFycmF5KGUsbixvKTtjYXNlIGllLlVOU0lHTkVEX1NIT1JUOnJldHVybiBuZXcgVWludDE2QXJyYXkoZSxuLG8pO2Nhc2UgaWUuSU5UOnJldHVybiBuZXcgSW50MzJBcnJheShlLG4sbyk7Y2FzZSBpZS5VTlNJR05FRF9JTlQ6cmV0dXJuIG5ldyBVaW50MzJBcnJheShlLG4sbyk7Y2FzZSBpZS5GTE9BVDpyZXR1cm4gbmV3IEZsb2F0MzJBcnJheShlLG4sbyk7Y2FzZSBpZS5ET1VCTEU6cmV0dXJuIG5ldyBGbG9hdDY0QXJyYXkoZSxuLG8pO2RlZmF1bHQ6dGhyb3cgbmV3IEIoImNvbXBvbmVudERhdGF0eXBlIGlzIG5vdCBhIHZhbGlkIHZhbHVlLiIpfX07aWUuZnJvbU5hbWU9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiQllURSI6cmV0dXJuIGllLkJZVEU7Y2FzZSJVTlNJR05FRF9CWVRFIjpyZXR1cm4gaWUuVU5TSUdORURfQllURTtjYXNlIlNIT1JUIjpyZXR1cm4gaWUuU0hPUlQ7Y2FzZSJVTlNJR05FRF9TSE9SVCI6cmV0dXJuIGllLlVOU0lHTkVEX1NIT1JUO2Nhc2UiSU5UIjpyZXR1cm4gaWUuSU5UO2Nhc2UiVU5TSUdORURfSU5UIjpyZXR1cm4gaWUuVU5TSUdORURfSU5UO2Nhc2UiRkxPQVQiOnJldHVybiBpZS5GTE9BVDtjYXNlIkRPVUJMRSI6cmV0dXJuIGllLkRPVUJMRTtkZWZhdWx0OnRocm93IG5ldyBCKCJuYW1lIGlzIG5vdCBhIHZhbGlkIHZhbHVlLiIpfX07b3Q9T2JqZWN0LmZyZWV6ZShpZSl9KTtmdW5jdGlvbiBqdCh0LGUpe3RoaXMueD14KHQsMCksdGhpcy55PXgoZSwwKX12YXIgS2wsdzEsVDEsTzEsaXgsbnQsemU9WigoKT0+e1l0KCk7SXQoKTthdCgpO0h0KCk7V3QoKTtqdC5mcm9tRWxlbWVudHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBoKG4pPyhuLng9dCxuLnk9ZSxuKTpuZXcganQodCxlKX07anQuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlLng9dC54LGUueT10LnksZSk6bmV3IGp0KHQueCx0LnkpfTtqdC5mcm9tQ2FydGVzaWFuMz1qdC5jbG9uZTtqdC5mcm9tQ2FydGVzaWFuND1qdC5jbG9uZTtqdC5wYWNrZWRMZW5ndGg9MjtqdC5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj14KG4sMCksZVtuKytdPXQueCxlW25dPXQueSxlfTtqdC51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImFycmF5Iix0KSxlPXgoZSwwKSxoKG4pfHwobj1uZXcganQpLG4ueD10W2UrK10sbi55PXRbZV0sbn07anQucGFja0FycmF5PWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJhcnJheSIsdCk7bGV0IG49dC5sZW5ndGgsbz1uKjI7aWYoIWgoZSkpZT1uZXcgQXJyYXkobyk7ZWxzZXtpZighQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGghPT1vKXRocm93IG5ldyBCKCJJZiByZXN1bHQgaXMgYSB0eXBlZCBhcnJheSwgaXQgbXVzdCBoYXZlIGV4YWN0bHkgYXJyYXkubGVuZ3RoICogMiBlbGVtZW50cyIpO2UubGVuZ3RoIT09byYmKGUubGVuZ3RoPW8pfWZvcihsZXQgcj0wO3I8bjsrK3IpanQucGFjayh0W3JdLGUscioyKTtyZXR1cm4gZX07anQudW5wYWNrQXJyYXk9ZnVuY3Rpb24odCxlKXtpZih5LmRlZmluZWQoImFycmF5Iix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiYXJyYXkubGVuZ3RoIix0Lmxlbmd0aCwyKSx0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgQigiYXJyYXkgbGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAyLiIpO2xldCBuPXQubGVuZ3RoO2goZSk/ZS5sZW5ndGg9bi8yOmU9bmV3IEFycmF5KG4vMik7Zm9yKGxldCBvPTA7bzxuO28rPTIpe2xldCByPW8vMjtlW3JdPWp0LnVucGFjayh0LG8sZVtyXSl9cmV0dXJuIGV9O2p0LmZyb21BcnJheT1qdC51bnBhY2s7anQubWF4aW11bUNvbXBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLE1hdGgubWF4KHQueCx0LnkpfTtqdC5taW5pbXVtQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCksTWF0aC5taW4odC54LHQueSl9O2p0Lm1pbmltdW1CeUNvbXBvbmVudD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiZmlyc3QiLHQpLHkudHlwZU9mLm9iamVjdCgic2Vjb25kIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PU1hdGgubWluKHQueCxlLngpLG4ueT1NYXRoLm1pbih0LnksZS55KSxufTtqdC5tYXhpbXVtQnlDb21wb25lbnQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImZpcnN0Iix0KSx5LnR5cGVPZi5vYmplY3QoInNlY29uZCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD1NYXRoLm1heCh0LngsZS54KSxuLnk9TWF0aC5tYXgodC55LGUueSksbn07anQuY2xhbXA9ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS50eXBlT2Yub2JqZWN0KCJtaW4iLGUpLHkudHlwZU9mLm9iamVjdCgibWF4IixuKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbyk7bGV0IHI9TS5jbGFtcCh0LngsZS54LG4ueCksaT1NLmNsYW1wKHQueSxlLnksbi55KTtyZXR1cm4gby54PXIsby55PWksb307anQubWFnbml0dWRlU3F1YXJlZD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHQueCp0LngrdC55KnQueX07anQubWFnbml0dWRlPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoanQubWFnbml0dWRlU3F1YXJlZCh0KSl9O0tsPW5ldyBqdDtqdC5kaXN0YW5jZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLGp0LnN1YnRyYWN0KHQsZSxLbCksanQubWFnbml0dWRlKEtsKX07anQuZGlzdGFuY2VTcXVhcmVkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSksanQuc3VidHJhY3QodCxlLEtsKSxqdC5tYWduaXR1ZGVTcXVhcmVkKEtsKX07anQubm9ybWFsaXplPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj1qdC5tYWduaXR1ZGUodCk7aWYoZS54PXQueC9uLGUueT10Lnkvbixpc05hTihlLngpfHxpc05hTihlLnkpKXRocm93IG5ldyBCKCJub3JtYWxpemVkIHJlc3VsdCBpcyBub3QgYSBudW1iZXIiKTtyZXR1cm4gZX07anQuZG90PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSksdC54KmUueCt0LnkqZS55fTtqdC5jcm9zcz1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHQueCplLnktdC55KmUueH07anQubXVsdGlwbHlDb21wb25lbnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PXQueCplLngsbi55PXQueSplLnksbn07anQuZGl2aWRlQ29tcG9uZW50cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngvZS54LG4ueT10LnkvZS55LG59O2p0LmFkZD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngrZS54LG4ueT10LnkrZS55LG59O2p0LnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PXQueC1lLngsbi55PXQueS1lLnksbn07anQubXVsdGlwbHlCeVNjYWxhcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx5LnR5cGVPZi5udW1iZXIoInNjYWxhciIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngqZSxuLnk9dC55KmUsbn07anQuZGl2aWRlQnlTY2FsYXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54L2Usbi55PXQueS9lLG59O2p0Lm5lZ2F0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpLGUueD0tdC54LGUueT0tdC55LGV9O2p0LmFicz1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpLGUueD1NYXRoLmFicyh0LngpLGUueT1NYXRoLmFicyh0LnkpLGV9O3cxPW5ldyBqdDtqdC5sZXJwPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInN0YXJ0Iix0KSx5LnR5cGVPZi5vYmplY3QoImVuZCIsZSkseS50eXBlT2YubnVtYmVyKCJ0IixuKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbyksanQubXVsdGlwbHlCeVNjYWxhcihlLG4sdzEpLG89anQubXVsdGlwbHlCeVNjYWxhcih0LDEtbixvKSxqdC5hZGQodzEsbyxvKX07VDE9bmV3IGp0LE8xPW5ldyBqdDtqdC5hbmdsZUJldHdlZW49ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSxqdC5ub3JtYWxpemUodCxUMSksanQubm9ybWFsaXplKGUsTzEpLE0uYWNvc0NsYW1wZWQoanQuZG90KFQxLE8xKSl9O2l4PW5ldyBqdDtqdC5tb3N0T3J0aG9nb25hbEF4aXM9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPWp0Lm5vcm1hbGl6ZSh0LGl4KTtyZXR1cm4ganQuYWJzKG4sbiksbi54PD1uLnk/ZT1qdC5jbG9uZShqdC5VTklUX1gsZSk6ZT1qdC5jbG9uZShqdC5VTklUX1ksZSksZX07anQuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZ0Lng9PT1lLngmJnQueT09PWUueX07anQuZXF1YWxzQXJyYXk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0Lng9PT1lW25dJiZ0Lnk9PT1lW24rMV19O2p0LmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZNLmVxdWFsc0Vwc2lsb24odC54LGUueCxuLG8pJiZNLmVxdWFsc0Vwc2lsb24odC55LGUueSxuLG8pfTtqdC5aRVJPPU9iamVjdC5mcmVlemUobmV3IGp0KDAsMCkpO2p0Lk9ORT1PYmplY3QuZnJlZXplKG5ldyBqdCgxLDEpKTtqdC5VTklUX1g9T2JqZWN0LmZyZWV6ZShuZXcganQoMSwwKSk7anQuVU5JVF9ZPU9iamVjdC5mcmVlemUobmV3IGp0KDAsMSkpO2p0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4ganQuY2xvbmUodGhpcyx0KX07anQucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4ganQuZXF1YWxzKHRoaXMsdCl9O2p0LnByb3RvdHlwZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4ganQuZXF1YWxzRXBzaWxvbih0aGlzLHQsZSxuKX07anQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXMueH0sICR7dGhpcy55fSlgfTtudD1qdH0pO3ZhciBzeCxTaSxXbD1aKCgpPT57c3g9e05PTkU6MCxUUklBTkdMRVM6MSxMSU5FUzoyLFBPTFlMSU5FUzozfSxTaT1PYmplY3QuZnJlZXplKHN4KX0pO2Z1bmN0aW9uIFh0KHQsZSxuLG8pe3RoaXNbMF09eCh0LDApLHRoaXNbMV09eChuLDApLHRoaXNbMl09eChlLDApLHRoaXNbM109eChvLDApfXZhciBjeCxheCxFMSxSMSxmeCx1eCxYbyxmZj1aKCgpPT57emUoKTtZdCgpO0l0KCk7YXQoKTtIdCgpO1h0LnBhY2tlZExlbmd0aD00O1h0LnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPXgobiwwKSxlW24rK109dFswXSxlW24rK109dFsxXSxlW24rK109dFsyXSxlW24rK109dFszXSxlfTtYdC51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImFycmF5Iix0KSxlPXgoZSwwKSxoKG4pfHwobj1uZXcgWHQpLG5bMF09dFtlKytdLG5bMV09dFtlKytdLG5bMl09dFtlKytdLG5bM109dFtlKytdLG59O1h0LnBhY2tBcnJheT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiYXJyYXkiLHQpO2xldCBuPXQubGVuZ3RoLG89bio0O2lmKCFoKGUpKWU9bmV3IEFycmF5KG8pO2Vsc2V7aWYoIUFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoIT09byl0aHJvdyBuZXcgQigiSWYgcmVzdWx0IGlzIGEgdHlwZWQgYXJyYXksIGl0IG11c3QgaGF2ZSBleGFjdGx5IGFycmF5Lmxlbmd0aCAqIDQgZWxlbWVudHMiKTtlLmxlbmd0aCE9PW8mJihlLmxlbmd0aD1vKX1mb3IobGV0IHI9MDtyPG47KytyKVh0LnBhY2sodFtyXSxlLHIqNCk7cmV0dXJuIGV9O1h0LnVucGFja0FycmF5PWZ1bmN0aW9uKHQsZSl7aWYoeS5kZWZpbmVkKCJhcnJheSIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImFycmF5Lmxlbmd0aCIsdC5sZW5ndGgsNCksdC5sZW5ndGglNCE9PTApdGhyb3cgbmV3IEIoImFycmF5IGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4iKTtsZXQgbj10Lmxlbmd0aDtoKGUpP2UubGVuZ3RoPW4vNDplPW5ldyBBcnJheShuLzQpO2ZvcihsZXQgbz0wO288bjtvKz00KXtsZXQgcj1vLzQ7ZVtyXT1YdC51bnBhY2sodCxvLGVbcl0pfXJldHVybiBlfTtYdC5jbG9uZT1mdW5jdGlvbih0LGUpe2lmKGgodCkpcmV0dXJuIGgoZSk/KGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlKTpuZXcgWHQodFswXSx0WzJdLHRbMV0sdFszXSl9O1h0LmZyb21BcnJheT1YdC51bnBhY2s7WHQuZnJvbUNvbHVtbk1ham9yQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5kZWZpbmVkKCJ2YWx1ZXMiLHQpLFh0LmNsb25lKHQsZSl9O1h0LmZyb21Sb3dNYWpvckFycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkuZGVmaW5lZCgidmFsdWVzIix0KSxoKGUpPyhlWzBdPXRbMF0sZVsxXT10WzJdLGVbMl09dFsxXSxlWzNdPXRbM10sZSk6bmV3IFh0KHRbMF0sdFsxXSx0WzJdLHRbM10pfTtYdC5mcm9tU2NhbGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJzY2FsZSIsdCksaChlKT8oZVswXT10LngsZVsxXT0wLGVbMl09MCxlWzNdPXQueSxlKTpuZXcgWHQodC54LDAsMCx0LnkpfTtYdC5mcm9tVW5pZm9ybVNjYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm51bWJlcigic2NhbGUiLHQpLGgoZSk/KGVbMF09dCxlWzFdPTAsZVsyXT0wLGVbM109dCxlKTpuZXcgWHQodCwwLDAsdCl9O1h0LmZyb21Sb3RhdGlvbj1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm51bWJlcigiYW5nbGUiLHQpO2xldCBuPU1hdGguY29zKHQpLG89TWF0aC5zaW4odCk7cmV0dXJuIGgoZSk/KGVbMF09bixlWzFdPW8sZVsyXT0tbyxlWzNdPW4sZSk6bmV3IFh0KG4sLW8sbyxuKX07WHQudG9BcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCksaChlKT8oZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGUpOlt0WzBdLHRbMV0sdFsyXSx0WzNdXX07WHQuZ2V0RWxlbWVudEluZGV4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJyb3ciLGUsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoInJvdyIsZSwxKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiY29sdW1uIix0LDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJjb2x1bW4iLHQsMSksdCoyK2V9O1h0LmdldENvbHVtbj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiaW5kZXgiLGUsMSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPWUqMixyPXRbb10saT10W28rMV07cmV0dXJuIG4ueD1yLG4ueT1pLG59O1h0LnNldENvbHVtbj1mdW5jdGlvbih0LGUsbixvKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImluZGV4IixlLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwxKSx5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pLG89WHQuY2xvbmUodCxvKTtsZXQgcj1lKjI7cmV0dXJuIG9bcl09bi54LG9bcisxXT1uLnksb307WHQuZ2V0Um93PWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImluZGV4IixlLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwxKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89dFtlXSxyPXRbZSsyXTtyZXR1cm4gbi54PW8sbi55PXIsbn07WHQuc2V0Um93PWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImluZGV4IixlLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwxKSx5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pLG89WHQuY2xvbmUodCxvKSxvW2VdPW4ueCxvW2UrMl09bi55LG99O2N4PW5ldyBudDtYdC5zZXRTY2FsZT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1YdC5nZXRTY2FsZSh0LGN4KSxyPWUueC9vLngsaT1lLnkvby55O3JldHVybiBuWzBdPXRbMF0qcixuWzFdPXRbMV0qcixuWzJdPXRbMl0qaSxuWzNdPXRbM10qaSxufTtheD1uZXcgbnQ7WHQuc2V0VW5pZm9ybVNjYWxlPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsZSIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPVh0LmdldFNjYWxlKHQsYXgpLHI9ZS9vLngsaT1lL28ueTtyZXR1cm4gblswXT10WzBdKnIsblsxXT10WzFdKnIsblsyXT10WzJdKmksblszXT10WzNdKmksbn07RTE9bmV3IG50O1h0LmdldFNjYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZS54PW50Lm1hZ25pdHVkZShudC5mcm9tRWxlbWVudHModFswXSx0WzFdLEUxKSksZS55PW50Lm1hZ25pdHVkZShudC5mcm9tRWxlbWVudHModFsyXSx0WzNdLEUxKSksZX07UjE9bmV3IG50O1h0LmdldE1heGltdW1TY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gWHQuZ2V0U2NhbGUodCxSMSksbnQubWF4aW11bUNvbXBvbmVudChSMSl9O2Z4PW5ldyBudDtYdC5zZXRSb3RhdGlvbj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1YdC5nZXRTY2FsZSh0LGZ4KTtyZXR1cm4gblswXT1lWzBdKm8ueCxuWzFdPWVbMV0qby54LG5bMl09ZVsyXSpvLnksblszXT1lWzNdKm8ueSxufTt1eD1uZXcgbnQ7WHQuZ2V0Um90YXRpb249ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPVh0LmdldFNjYWxlKHQsdXgpO3JldHVybiBlWzBdPXRbMF0vbi54LGVbMV09dFsxXS9uLngsZVsyXT10WzJdL24ueSxlWzNdPXRbM10vbi55LGV9O1h0Lm11bHRpcGx5PWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz10WzBdKmVbMF0rdFsyXSplWzFdLHI9dFswXSplWzJdK3RbMl0qZVszXSxpPXRbMV0qZVswXSt0WzNdKmVbMV0scz10WzFdKmVbMl0rdFszXSplWzNdO3JldHVybiBuWzBdPW8sblsxXT1pLG5bMl09cixuWzNdPXMsbn07WHQuYWRkPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksblswXT10WzBdK2VbMF0sblsxXT10WzFdK2VbMV0sblsyXT10WzJdK2VbMl0sblszXT10WzNdK2VbM10sbn07WHQuc3VidHJhY3Q9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuWzBdPXRbMF0tZVswXSxuWzFdPXRbMV0tZVsxXSxuWzJdPXRbMl0tZVsyXSxuWzNdPXRbM10tZVszXSxufTtYdC5tdWx0aXBseUJ5VmVjdG9yPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz10WzBdKmUueCt0WzJdKmUueSxyPXRbMV0qZS54K3RbM10qZS55O3JldHVybiBuLng9byxuLnk9cixufTtYdC5tdWx0aXBseUJ5U2NhbGFyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGFyIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksblswXT10WzBdKmUsblsxXT10WzFdKmUsblsyXT10WzJdKmUsblszXT10WzNdKmUsbn07WHQubXVsdGlwbHlCeVNjYWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuWzBdPXRbMF0qZS54LG5bMV09dFsxXSplLngsblsyXT10WzJdKmUueSxuWzNdPXRbM10qZS55LG59O1h0Lm11bHRpcGx5QnlVbmlmb3JtU2NhbGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsZSIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG5bMF09dFswXSplLG5bMV09dFsxXSplLG5bMl09dFsyXSplLG5bM109dFszXSplLG59O1h0Lm5lZ2F0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpLGVbMF09LXRbMF0sZVsxXT0tdFsxXSxlWzJdPS10WzJdLGVbM109LXRbM10sZX07WHQudHJhbnNwb3NlPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj10WzBdLG89dFsyXSxyPXRbMV0saT10WzNdO3JldHVybiBlWzBdPW4sZVsxXT1vLGVbMl09cixlWzNdPWksZX07WHQuYWJzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZVswXT1NYXRoLmFicyh0WzBdKSxlWzFdPU1hdGguYWJzKHRbMV0pLGVbMl09TWF0aC5hYnModFsyXSksZVszXT1NYXRoLmFicyh0WzNdKSxlfTtYdC5lcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fGgodCkmJmgoZSkmJnRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl0mJnRbM109PT1lWzNdfTtYdC5lcXVhbHNBcnJheT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRbMF09PT1lW25dJiZ0WzFdPT09ZVtuKzFdJiZ0WzJdPT09ZVtuKzJdJiZ0WzNdPT09ZVtuKzNdfTtYdC5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbj14KG4sMCksdD09PWV8fGgodCkmJmgoZSkmJk1hdGguYWJzKHRbMF0tZVswXSk8PW4mJk1hdGguYWJzKHRbMV0tZVsxXSk8PW4mJk1hdGguYWJzKHRbMl0tZVsyXSk8PW4mJk1hdGguYWJzKHRbM10tZVszXSk8PW59O1h0LklERU5USVRZPU9iamVjdC5mcmVlemUobmV3IFh0KDEsMCwwLDEpKTtYdC5aRVJPPU9iamVjdC5mcmVlemUobmV3IFh0KDAsMCwwLDApKTtYdC5DT0xVTU4wUk9XMD0wO1h0LkNPTFVNTjBST1cxPTE7WHQuQ09MVU1OMVJPVzA9MjtYdC5DT0xVTU4xUk9XMT0zO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFh0LnByb3RvdHlwZSx7bGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWHQucGFja2VkTGVuZ3RofX19KTtYdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIFh0LmNsb25lKHRoaXMsdCl9O1h0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIFh0LmVxdWFscyh0aGlzLHQpfTtYdC5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUpe3JldHVybiBYdC5lcXVhbHNFcHNpbG9uKHRoaXMsdCxlKX07WHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXNbMF19LCAke3RoaXNbMl19KQooJHt0aGlzWzFdfSwgJHt0aGlzWzNdfSlgfTtYbz1YdH0pO3ZhciBobyxMdCx0bj1aKCgpPT57a3MoKTtobz17UE9JTlRTOnF0LlBPSU5UUyxMSU5FUzpxdC5MSU5FUyxMSU5FX0xPT1A6cXQuTElORV9MT09QLExJTkVfU1RSSVA6cXQuTElORV9TVFJJUCxUUklBTkdMRVM6cXQuVFJJQU5HTEVTLFRSSUFOR0xFX1NUUklQOnF0LlRSSUFOR0xFX1NUUklQLFRSSUFOR0xFX0ZBTjpxdC5UUklBTkdMRV9GQU59O2hvLmlzTGluZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1oby5MSU5FU3x8dD09PWhvLkxJTkVfTE9PUHx8dD09PWhvLkxJTkVfU1RSSVB9O2hvLmlzVHJpYW5nbGVzPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09aG8uVFJJQU5HTEVTfHx0PT09aG8uVFJJQU5HTEVfU1RSSVB8fHQ9PT1oby5UUklBTkdMRV9GQU59O2hvLnZhbGlkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09aG8uUE9JTlRTfHx0PT09aG8uTElORVN8fHQ9PT1oby5MSU5FX0xPT1B8fHQ9PT1oby5MSU5FX1NUUklQfHx0PT09aG8uVFJJQU5HTEVTfHx0PT09aG8uVFJJQU5HTEVfU1RSSVB8fHQ9PT1oby5UUklBTkdMRV9GQU59O0x0PU9iamVjdC5mcmVlemUoaG8pfSk7dmFyIGVzLE1uLFlvLFMxLEMxPVooKCk9PnthdCgpO01uPXtyZXF1ZXN0RnVsbHNjcmVlbjp2b2lkIDAsZXhpdEZ1bGxzY3JlZW46dm9pZCAwLGZ1bGxzY3JlZW5FbmFibGVkOnZvaWQgMCxmdWxsc2NyZWVuRWxlbWVudDp2b2lkIDAsZnVsbHNjcmVlbmNoYW5nZTp2b2lkIDAsZnVsbHNjcmVlbmVycm9yOnZvaWQgMH0sWW89e307T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWW8se2VsZW1lbnQ6e2dldDpmdW5jdGlvbigpe2lmKFlvLnN1cHBvcnRzRnVsbHNjcmVlbigpKXJldHVybiBkb2N1bWVudFtNbi5mdWxsc2NyZWVuRWxlbWVudF19fSxjaGFuZ2VFdmVudE5hbWU6e2dldDpmdW5jdGlvbigpe2lmKFlvLnN1cHBvcnRzRnVsbHNjcmVlbigpKXJldHVybiBNbi5mdWxsc2NyZWVuY2hhbmdlfX0sZXJyb3JFdmVudE5hbWU6e2dldDpmdW5jdGlvbigpe2lmKFlvLnN1cHBvcnRzRnVsbHNjcmVlbigpKXJldHVybiBNbi5mdWxsc2NyZWVuZXJyb3J9fSxlbmFibGVkOntnZXQ6ZnVuY3Rpb24oKXtpZihZby5zdXBwb3J0c0Z1bGxzY3JlZW4oKSlyZXR1cm4gZG9jdW1lbnRbTW4uZnVsbHNjcmVlbkVuYWJsZWRdfX0sZnVsbHNjcmVlbjp7Z2V0OmZ1bmN0aW9uKCl7aWYoWW8uc3VwcG9ydHNGdWxsc2NyZWVuKCkpcmV0dXJuIFlvLmVsZW1lbnQhPT1udWxsfX19KTtZby5zdXBwb3J0c0Z1bGxzY3JlZW49ZnVuY3Rpb24oKXtpZihoKGVzKSlyZXR1cm4gZXM7ZXM9ITE7bGV0IHQ9ZG9jdW1lbnQuYm9keTtpZih0eXBlb2YgdC5yZXF1ZXN0RnVsbHNjcmVlbj09ImZ1bmN0aW9uIilyZXR1cm4gTW4ucmVxdWVzdEZ1bGxzY3JlZW49InJlcXVlc3RGdWxsc2NyZWVuIixNbi5leGl0RnVsbHNjcmVlbj0iZXhpdEZ1bGxzY3JlZW4iLE1uLmZ1bGxzY3JlZW5FbmFibGVkPSJmdWxsc2NyZWVuRW5hYmxlZCIsTW4uZnVsbHNjcmVlbkVsZW1lbnQ9ImZ1bGxzY3JlZW5FbGVtZW50IixNbi5mdWxsc2NyZWVuY2hhbmdlPSJmdWxsc2NyZWVuY2hhbmdlIixNbi5mdWxsc2NyZWVuZXJyb3I9ImZ1bGxzY3JlZW5lcnJvciIsZXM9ITAsZXM7bGV0IGU9WyJ3ZWJraXQiLCJtb3oiLCJvIiwibXMiLCJraHRtbCJdLG47Zm9yKGxldCBvPTAscj1lLmxlbmd0aDtvPHI7KytvKXtsZXQgaT1lW29dO249YCR7aX1SZXF1ZXN0RnVsbHNjcmVlbmAsdHlwZW9mIHRbbl09PSJmdW5jdGlvbiI/KE1uLnJlcXVlc3RGdWxsc2NyZWVuPW4sZXM9ITApOihuPWAke2l9UmVxdWVzdEZ1bGxTY3JlZW5gLHR5cGVvZiB0W25dPT0iZnVuY3Rpb24iJiYoTW4ucmVxdWVzdEZ1bGxzY3JlZW49bixlcz0hMCkpLG49YCR7aX1FeGl0RnVsbHNjcmVlbmAsdHlwZW9mIGRvY3VtZW50W25dPT0iZnVuY3Rpb24iP01uLmV4aXRGdWxsc2NyZWVuPW46KG49YCR7aX1DYW5jZWxGdWxsU2NyZWVuYCx0eXBlb2YgZG9jdW1lbnRbbl09PSJmdW5jdGlvbiImJihNbi5leGl0RnVsbHNjcmVlbj1uKSksbj1gJHtpfUZ1bGxzY3JlZW5FbmFibGVkYCxkb2N1bWVudFtuXSE9PXZvaWQgMD9Nbi5mdWxsc2NyZWVuRW5hYmxlZD1uOihuPWAke2l9RnVsbFNjcmVlbkVuYWJsZWRgLGRvY3VtZW50W25dIT09dm9pZCAwJiYoTW4uZnVsbHNjcmVlbkVuYWJsZWQ9bikpLG49YCR7aX1GdWxsc2NyZWVuRWxlbWVudGAsZG9jdW1lbnRbbl0hPT12b2lkIDA/TW4uZnVsbHNjcmVlbkVsZW1lbnQ9bjoobj1gJHtpfUZ1bGxTY3JlZW5FbGVtZW50YCxkb2N1bWVudFtuXSE9PXZvaWQgMCYmKE1uLmZ1bGxzY3JlZW5FbGVtZW50PW4pKSxuPWAke2l9ZnVsbHNjcmVlbmNoYW5nZWAsZG9jdW1lbnRbYG9uJHtufWBdIT09dm9pZCAwJiYoaT09PSJtcyImJihuPSJNU0Z1bGxzY3JlZW5DaGFuZ2UiKSxNbi5mdWxsc2NyZWVuY2hhbmdlPW4pLG49YCR7aX1mdWxsc2NyZWVuZXJyb3JgLGRvY3VtZW50W2BvbiR7bn1gXSE9PXZvaWQgMCYmKGk9PT0ibXMiJiYobj0iTVNGdWxsc2NyZWVuRXJyb3IiKSxNbi5mdWxsc2NyZWVuZXJyb3I9bil9cmV0dXJuIGVzfTtZby5yZXF1ZXN0RnVsbHNjcmVlbj1mdW5jdGlvbih0LGUpe1lvLnN1cHBvcnRzRnVsbHNjcmVlbigpJiZ0W01uLnJlcXVlc3RGdWxsc2NyZWVuXSh7dnJEaXNwbGF5OmV9KX07WW8uZXhpdEZ1bGxzY3JlZW49ZnVuY3Rpb24oKXtZby5zdXBwb3J0c0Z1bGxzY3JlZW4oKSYmZG9jdW1lbnRbTW4uZXhpdEZ1bGxzY3JlZW5dKCl9O1lvLl9uYW1lcz1NbjtTMT1Zb30pO2Z1bmN0aW9uIEdzKHQpe2xldCBlPXQuc3BsaXQoIi4iKTtmb3IobGV0IG49MCxvPWUubGVuZ3RoO248bzsrK24pZVtuXT1wYXJzZUludChlW25dLDEwKTtyZXR1cm4gZX1mdW5jdGlvbiBqbSgpe2lmKCFoKFhsKSYmKFhsPSExLCF0cCgpKSl7bGV0IHQ9LyBDaHJvbWVcLyhbXC4wLTldKykvLmV4ZWMoVG8udXNlckFnZW50KTt0IT09bnVsbCYmKFhsPSEwLHgxPUdzKHRbMV0pKX1yZXR1cm4gWGx9ZnVuY3Rpb24gbHgoKXtyZXR1cm4gam0oKSYmeDF9ZnVuY3Rpb24gTTEoKXtpZighaChZbCkmJihZbD0hMSwham0oKSYmIXRwKCkmJi8gU2FmYXJpXC9bXC4wLTldKy8udGVzdChUby51c2VyQWdlbnQpKSl7bGV0IHQ9LyBWZXJzaW9uXC8oW1wuMC05XSspLy5leGVjKFRvLnVzZXJBZ2VudCk7dCE9PW51bGwmJihZbD0hMCxQMT1Hcyh0WzFdKSl9cmV0dXJuIFlsfWZ1bmN0aW9uIHB4KCl7cmV0dXJuIE0xKCkmJlAxfWZ1bmN0aW9uIE4xKCl7aWYoIWgoJGwpKXskbD0hMTtsZXQgdD0vIEFwcGxlV2ViS2l0XC8oW1wuMC05XSspKFwrPykvLmV4ZWMoVG8udXNlckFnZW50KTt0IT09bnVsbCYmKCRsPSEwLEdtPUdzKHRbMV0pLEdtLmlzTmlnaHRseT0hIXRbMl0pfXJldHVybiAkbH1mdW5jdGlvbiBkeCgpe3JldHVybiBOMSgpJiZHbX1mdW5jdGlvbiBJMSgpe2lmKCFoKHVmKSl7dWY9ITE7bGV0IHQ7VG8uYXBwTmFtZT09PSJNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXIiPyh0PS9NU0lFIChbMC05XXsxLH1bXC4wLTldezAsfSkvLmV4ZWMoVG8udXNlckFnZW50KSx0IT09bnVsbCYmKHVmPSEwLHptPUdzKHRbMV0pKSk6VG8uYXBwTmFtZT09PSJOZXRzY2FwZSImJih0PS9UcmlkZW50XC8uKnJ2OihbMC05XXsxLH1bXC4wLTldezAsfSkvLmV4ZWMoVG8udXNlckFnZW50KSx0IT09bnVsbCYmKHVmPSEwLHptPUdzKHRbMV0pKSl9cmV0dXJuIHVmfWZ1bmN0aW9uIG14KCl7cmV0dXJuIEkxKCkmJnptfWZ1bmN0aW9uIHRwKCl7aWYoIWgoWmwpKXtabD0hMTtsZXQgdD0vIEVkZ1wvKFtcLjAtOV0rKS8uZXhlYyhUby51c2VyQWdlbnQpO3QhPT1udWxsJiYoWmw9ITAsdjE9R3ModFsxXSkpfXJldHVybiBabH1mdW5jdGlvbiBoeCgpe3JldHVybiB0cCgpJiZ2MX1mdW5jdGlvbiBlcCgpe2lmKCFoKFFsKSl7UWw9ITE7bGV0IHQ9L0ZpcmVmb3hcLyhbXC4wLTldKykvLmV4ZWMoVG8udXNlckFnZW50KTt0IT09bnVsbCYmKFFsPSEwLEhtPUdzKHRbMV0pKX1yZXR1cm4gUWx9ZnVuY3Rpb24gX3goKXtyZXR1cm4gaChVbSl8fChVbT0vV2luZG93cy9pLnRlc3QoVG8uYXBwVmVyc2lvbikpLFVtfWZ1bmN0aW9uIHl4KCl7cmV0dXJuIGgoVm0pfHwoVm09bmF2aWdhdG9yLnBsYXRmb3JtPT09ImlQaG9uZSJ8fG5hdmlnYXRvci5wbGF0Zm9ybT09PSJpUG9kInx8bmF2aWdhdG9yLnBsYXRmb3JtPT09ImlQYWQiKSxWbX1mdW5jdGlvbiBneCgpe3JldHVybiBlcCgpJiZIbX1mdW5jdGlvbiBBeCgpe3JldHVybiBoKGttKXx8KGttPSFlcCgpJiZ0eXBlb2YgUG9pbnRlckV2ZW50PCJ1IiYmKCFoKFRvLnBvaW50ZXJFbmFibGVkKXx8VG8ucG9pbnRlckVuYWJsZWQpKSxrbX1mdW5jdGlvbiBMMSgpe2lmKCFoKEpsKSl7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7dC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiaW1hZ2UtcmVuZGVyaW5nOiAtbW96LWNyaXNwLWVkZ2VzO2ltYWdlLXJlbmRlcmluZzogcGl4ZWxhdGVkOyIpO2xldCBlPXQuc3R5bGUuaW1hZ2VSZW5kZXJpbmc7Smw9aChlKSYmZSE9PSIiLEpsJiYoRDE9ZSl9cmV0dXJuIEpsfWZ1bmN0aW9uIGJ4KCl7cmV0dXJuIEwxKCk/RDE6dm9pZCAwfWZ1bmN0aW9uIHdvKCl7aWYoIXdvLmluaXRpYWxpemVkKXRocm93IG5ldyBCKCJZb3UgbXVzdCBjYWxsIEZlYXR1cmVEZXRlY3Rpb24uc3VwcG9ydHNXZWJQLmluaXRpYWxpemUgYW5kIHdhaXQgZm9yIHRoZSBwcm9taXNlIHRvIHJlc29sdmUgYmVmb3JlIGNhbGxpbmcgRmVhdHVyZURldGVjdGlvbi5zdXBwb3J0c1dlYlAiKTtyZXR1cm4gd28uX3Jlc3VsdH12YXIgVG8sWGwseDEsWWwsUDEsJGwsR20sdWYsem0sWmwsdjEsUWwsSG0sVW0sVm0sa20sRDEsSmwsV2MsX3IsenMscW09WigoKT0+e1l0KCk7SXQoKTthdCgpO0h0KCk7QzEoKTt0eXBlb2YgbmF2aWdhdG9yPCJ1Ij9Ubz1uYXZpZ2F0b3I6VG89e307d28uX3Byb21pc2U9dm9pZCAwO3dvLl9yZXN1bHQ9dm9pZCAwO3dvLmluaXRpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gaCh3by5fcHJvbWlzZSl8fCh3by5fcHJvbWlzZT1uZXcgUHJvbWlzZSh0PT57bGV0IGU9bmV3IEltYWdlO2Uub25sb2FkPWZ1bmN0aW9uKCl7d28uX3Jlc3VsdD1lLndpZHRoPjAmJmUuaGVpZ2h0PjAsdCh3by5fcmVzdWx0KX0sZS5vbmVycm9yPWZ1bmN0aW9uKCl7d28uX3Jlc3VsdD0hMSx0KHdvLl9yZXN1bHQpfSxlLnNyYz0iZGF0YTppbWFnZS93ZWJwO2Jhc2U2NCxVa2xHUmlJQUFBQlhSVUpRVmxBNElCWUFBQUF3QVFDZEFTb0JBQUVBRHNEK0phUUFBM0FBQUFBQSJ9KSksd28uX3Byb21pc2V9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHdvLHtpbml0aWFsaXplZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGgod28uX3Jlc3VsdCl9fX0pO1djPVtdO3R5cGVvZiBBcnJheUJ1ZmZlcjwidSImJihXYy5wdXNoKEludDhBcnJheSxVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5KSx0eXBlb2YgVWludDhDbGFtcGVkQXJyYXk8InUiJiZXYy5wdXNoKFVpbnQ4Q2xhbXBlZEFycmF5KSx0eXBlb2YgVWludDhDbGFtcGVkQXJyYXk8InUiJiZXYy5wdXNoKFVpbnQ4Q2xhbXBlZEFycmF5KSx0eXBlb2YgQmlnSW50NjRBcnJheTwidSImJldjLnB1c2goQmlnSW50NjRBcnJheSksdHlwZW9mIEJpZ1VpbnQ2NEFycmF5PCJ1IiYmV2MucHVzaChCaWdVaW50NjRBcnJheSkpO19yPXtpc0Nocm9tZTpqbSxjaHJvbWVWZXJzaW9uOmx4LGlzU2FmYXJpOk0xLHNhZmFyaVZlcnNpb246cHgsaXNXZWJraXQ6TjEsd2Via2l0VmVyc2lvbjpkeCxpc0ludGVybmV0RXhwbG9yZXI6STEsaW50ZXJuZXRFeHBsb3JlclZlcnNpb246bXgsaXNFZGdlOnRwLGVkZ2VWZXJzaW9uOmh4LGlzRmlyZWZveDplcCxmaXJlZm94VmVyc2lvbjpneCxpc1dpbmRvd3M6X3gsaXNJUGFkT3JJT1M6eXgsaGFyZHdhcmVDb25jdXJyZW5jeTp4KFRvLmhhcmR3YXJlQ29uY3VycmVuY3ksMyksc3VwcG9ydHNQb2ludGVyRXZlbnRzOkF4LHN1cHBvcnRzSW1hZ2VSZW5kZXJpbmdQaXhlbGF0ZWQ6TDEsc3VwcG9ydHNXZWJQOndvLGltYWdlUmVuZGVyaW5nVmFsdWU6YngsdHlwZWRBcnJheVR5cGVzOldjfTtfci5zdXBwb3J0c0Jhc2lzPWZ1bmN0aW9uKHQpe3JldHVybiBfci5zdXBwb3J0c1dlYkFzc2VtYmx5KCkmJnQuY29udGV4dC5zdXBwb3J0c0Jhc2lzfTtfci5zdXBwb3J0c0Z1bGxzY3JlZW49ZnVuY3Rpb24oKXtyZXR1cm4gUzEuc3VwcG9ydHNGdWxsc2NyZWVuKCl9O19yLnN1cHBvcnRzVHlwZWRBcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1In07X3Iuc3VwcG9ydHNCaWdJbnQ2NEFycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBCaWdJbnQ2NEFycmF5PCJ1In07X3Iuc3VwcG9ydHNCaWdVaW50NjRBcnJheT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgQmlnVWludDY0QXJyYXk8InUifTtfci5zdXBwb3J0c0JpZ0ludD1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgQmlnSW50PCJ1In07X3Iuc3VwcG9ydHNXZWJXb3JrZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBXb3JrZXI8InUifTtfci5zdXBwb3J0c1dlYkFzc2VtYmx5PWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBXZWJBc3NlbWJseTwidSJ9O19yLnN1cHBvcnRzV2ViZ2wyPWZ1bmN0aW9uKHQpe3JldHVybiB5LmRlZmluZWQoInNjZW5lIix0KSx0LmNvbnRleHQud2ViZ2wyfTtfci5zdXBwb3J0c0VzbVdlYldvcmtlcnM9ZnVuY3Rpb24oKXtyZXR1cm4hZXAoKXx8cGFyc2VJbnQoSG0pPj0xMTR9O3pzPV9yfSk7ZnVuY3Rpb24gRXQodCxlLG4sbyl7dGhpcy54PXgodCwwKSx0aGlzLnk9eChlLDApLHRoaXMuej14KG4sMCksdGhpcy53PXgobywwKX12YXIgbGYsd3gsVHgsRjEsQjEsS20sVTEsbnAsV20sTHIsVjEsb3AsWG0sazEsWW0sJG0sT3gsRXgscGYsWGMsUngsRzEscnAsaXAsQ2kseGksbmUsJG89WigoKT0+e1V0KCk7WXQoKTtJdCgpO2F0KCk7cW0oKTtXdCgpO0ZuKCk7bGY9bmV3IGE7RXQuZnJvbUF4aXNBbmdsZT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJheGlzIix0KSx5LnR5cGVPZi5udW1iZXIoImFuZ2xlIixlKTtsZXQgbz1lLzIscj1NYXRoLnNpbihvKTtsZj1hLm5vcm1hbGl6ZSh0LGxmKTtsZXQgaT1sZi54KnIscz1sZi55KnIsZj1sZi56KnIsdT1NYXRoLmNvcyhvKTtyZXR1cm4gaChuKT8obi54PWksbi55PXMsbi56PWYsbi53PXUsbik6bmV3IEV0KGkscyxmLHUpfTt3eD1bMSwyLDBdLFR4PW5ldyBBcnJheSgzKTtFdC5mcm9tUm90YXRpb25NYXRyaXg9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCk7bGV0IG4sbyxyLGkscyxmPXRbdHQuQ09MVU1OMFJPVzBdLHU9dFt0dC5DT0xVTU4xUk9XMV0sYz10W3R0LkNPTFVNTjJST1cyXSxsPWYrdStjO2lmKGw+MCluPU1hdGguc3FydChsKzEpLHM9LjUqbixuPS41L24sbz0odFt0dC5DT0xVTU4xUk9XMl0tdFt0dC5DT0xVTU4yUk9XMV0pKm4scj0odFt0dC5DT0xVTU4yUk9XMF0tdFt0dC5DT0xVTU4wUk9XMl0pKm4saT0odFt0dC5DT0xVTU4wUk9XMV0tdFt0dC5DT0xVTU4xUk9XMF0pKm47ZWxzZXtsZXQgcD13eCxkPTA7dT5mJiYoZD0xKSxjPmYmJmM+dSYmKGQ9Mik7bGV0IG09cFtkXSxfPXBbbV07bj1NYXRoLnNxcnQodFt0dC5nZXRFbGVtZW50SW5kZXgoZCxkKV0tdFt0dC5nZXRFbGVtZW50SW5kZXgobSxtKV0tdFt0dC5nZXRFbGVtZW50SW5kZXgoXyxfKV0rMSk7bGV0IGc9VHg7Z1tkXT0uNSpuLG49LjUvbixzPSh0W3R0LmdldEVsZW1lbnRJbmRleChfLG0pXS10W3R0LmdldEVsZW1lbnRJbmRleChtLF8pXSkqbixnW21dPSh0W3R0LmdldEVsZW1lbnRJbmRleChtLGQpXSt0W3R0LmdldEVsZW1lbnRJbmRleChkLG0pXSkqbixnW19dPSh0W3R0LmdldEVsZW1lbnRJbmRleChfLGQpXSt0W3R0LmdldEVsZW1lbnRJbmRleChkLF8pXSkqbixvPS1nWzBdLHI9LWdbMV0saT0tZ1syXX1yZXR1cm4gaChlKT8oZS54PW8sZS55PXIsZS56PWksZS53PXMsZSk6bmV3IEV0KG8scixpLHMpfTtGMT1uZXcgRXQsQjE9bmV3IEV0LEttPW5ldyBFdCxVMT1uZXcgRXQ7RXQuZnJvbUhlYWRpbmdQaXRjaFJvbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJoZWFkaW5nUGl0Y2hSb2xsIix0KSxVMT1FdC5mcm9tQXhpc0FuZ2xlKGEuVU5JVF9YLHQucm9sbCxGMSksS209RXQuZnJvbUF4aXNBbmdsZShhLlVOSVRfWSwtdC5waXRjaCxlKSxlPUV0Lm11bHRpcGx5KEttLFUxLEttKSxCMT1FdC5mcm9tQXhpc0FuZ2xlKGEuVU5JVF9aLC10LmhlYWRpbmcsRjEpLEV0Lm11bHRpcGx5KEIxLGUsZSl9O25wPW5ldyBhLFdtPW5ldyBhLExyPW5ldyBFdCxWMT1uZXcgRXQsb3A9bmV3IEV0O0V0LnBhY2tlZExlbmd0aD00O0V0LnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPXgobiwwKSxlW24rK109dC54LGVbbisrXT10LnksZVtuKytdPXQueixlW25dPXQudyxlfTtFdC51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImFycmF5Iix0KSxlPXgoZSwwKSxoKG4pfHwobj1uZXcgRXQpLG4ueD10W2VdLG4ueT10W2UrMV0sbi56PXRbZSsyXSxuLnc9dFtlKzNdLG59O0V0LnBhY2tlZEludGVycG9sYXRpb25MZW5ndGg9MztFdC5jb252ZXJ0UGFja2VkQXJyYXlGb3JJbnRlcnBvbGF0aW9uPWZ1bmN0aW9uKHQsZSxuLG8pe0V0LnVucGFjayh0LG4qNCxvcCksRXQuY29uanVnYXRlKG9wLG9wKTtmb3IobGV0IHI9MCxpPW4tZSsxO3I8aTtyKyspe2xldCBzPXIqMztFdC51bnBhY2sodCwoZStyKSo0LExyKSxFdC5tdWx0aXBseShMcixvcCxMciksTHIudzwwJiZFdC5uZWdhdGUoTHIsTHIpLEV0LmNvbXB1dGVBeGlzKExyLG5wKTtsZXQgZj1FdC5jb21wdXRlQW5nbGUoTHIpO2gobyl8fChvPVtdKSxvW3NdPW5wLngqZixvW3MrMV09bnAueSpmLG9bcysyXT1ucC56KmZ9fTtFdC51bnBhY2tJbnRlcnBvbGF0aW9uUmVzdWx0PWZ1bmN0aW9uKHQsZSxuLG8scil7aChyKXx8KHI9bmV3IEV0KSxhLmZyb21BcnJheSh0LDAsV20pO2xldCBpPWEubWFnbml0dWRlKFdtKTtyZXR1cm4gRXQudW5wYWNrKGUsbyo0LFYxKSxpPT09MD9FdC5jbG9uZShFdC5JREVOVElUWSxMcik6RXQuZnJvbUF4aXNBbmdsZShXbSxpLExyKSxFdC5tdWx0aXBseShMcixWMSxyKX07RXQuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlLng9dC54LGUueT10LnksZS56PXQueixlLnc9dC53LGUpOm5ldyBFdCh0LngsdC55LHQueix0LncpfTtFdC5jb25qdWdhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJxdWF0ZXJuaW9uIix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZS54PS10LngsZS55PS10LnksZS56PS10LnosZS53PXQudyxlfTtFdC5tYWduaXR1ZGVTcXVhcmVkPWZ1bmN0aW9uKHQpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInF1YXRlcm5pb24iLHQpLHQueCp0LngrdC55KnQueSt0LnoqdC56K3Qudyp0Lnd9O0V0Lm1hZ25pdHVkZT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KEV0Lm1hZ25pdHVkZVNxdWFyZWQodCkpfTtFdC5ub3JtYWxpemU9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSk7bGV0IG49MS9FdC5tYWduaXR1ZGUodCksbz10LngqbixyPXQueSpuLGk9dC56Km4scz10LncqbjtyZXR1cm4gZS54PW8sZS55PXIsZS56PWksZS53PXMsZX07RXQuaW52ZXJzZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj1FdC5tYWduaXR1ZGVTcXVhcmVkKHQpO3JldHVybiBlPUV0LmNvbmp1Z2F0ZSh0LGUpLEV0Lm11bHRpcGx5QnlTY2FsYXIoZSwxL24sZSl9O0V0LmFkZD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngrZS54LG4ueT10LnkrZS55LG4uej10LnorZS56LG4udz10LncrZS53LG59O0V0LnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PXQueC1lLngsbi55PXQueS1lLnksbi56PXQuei1lLnosbi53PXQudy1lLncsbn07RXQubmVnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgicXVhdGVybmlvbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpLGUueD0tdC54LGUueT0tdC55LGUuej0tdC56LGUudz0tdC53LGV9O0V0LmRvdD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHQueCplLngrdC55KmUueSt0LnoqZS56K3QudyplLnd9O0V0Lm11bHRpcGx5PWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz10Lngscj10LnksaT10Lnoscz10LncsZj1lLngsdT1lLnksYz1lLnosbD1lLncscD1zKmYrbypsK3IqYy1pKnUsZD1zKnUtbypjK3IqbCtpKmYsbT1zKmMrbyp1LXIqZitpKmwsXz1zKmwtbypmLXIqdS1pKmM7cmV0dXJuIG4ueD1wLG4ueT1kLG4uej1tLG4udz1fLG59O0V0Lm11bHRpcGx5QnlTY2FsYXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInF1YXRlcm5pb24iLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGFyIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PXQueCplLG4ueT10LnkqZSxuLno9dC56KmUsbi53PXQudyplLG59O0V0LmRpdmlkZUJ5U2NhbGFyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJxdWF0ZXJuaW9uIix0KSx5LnR5cGVPZi5udW1iZXIoInNjYWxhciIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngvZSxuLnk9dC55L2Usbi56PXQuei9lLG4udz10LncvZSxufTtFdC5jb21wdXRlQXhpcz1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgicXVhdGVybmlvbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPXQudztpZihNYXRoLmFicyhuLTEpPE0uRVBTSUxPTjYpcmV0dXJuIGUueD1lLnk9ZS56PTAsZTtsZXQgbz0xL01hdGguc3FydCgxLW4qbik7cmV0dXJuIGUueD10LngqbyxlLnk9dC55Km8sZS56PXQueipvLGV9O0V0LmNvbXB1dGVBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJxdWF0ZXJuaW9uIix0KSxNYXRoLmFicyh0LnctMSk8TS5FUFNJTE9ONj8wOjIqTWF0aC5hY29zKHQudyl9O1htPW5ldyBFdDtFdC5sZXJwPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInN0YXJ0Iix0KSx5LnR5cGVPZi5vYmplY3QoImVuZCIsZSkseS50eXBlT2YubnVtYmVyKCJ0IixuKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbyksWG09RXQubXVsdGlwbHlCeVNjYWxhcihlLG4sWG0pLG89RXQubXVsdGlwbHlCeVNjYWxhcih0LDEtbixvKSxFdC5hZGQoWG0sbyxvKX07azE9bmV3IEV0LFltPW5ldyBFdCwkbT1uZXcgRXQ7RXQuc2xlcnA9ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJzdGFydCIsdCkseS50eXBlT2Yub2JqZWN0KCJlbmQiLGUpLHkudHlwZU9mLm51bWJlcigidCIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pO2xldCByPUV0LmRvdCh0LGUpLGk9ZTtpZihyPDAmJihyPS1yLGk9azE9RXQubmVnYXRlKGUsazEpKSwxLXI8TS5FUFNJTE9ONilyZXR1cm4gRXQubGVycCh0LGksbixvKTtsZXQgcz1NYXRoLmFjb3Mocik7cmV0dXJuIFltPUV0Lm11bHRpcGx5QnlTY2FsYXIodCxNYXRoLnNpbigoMS1uKSpzKSxZbSksJG09RXQubXVsdGlwbHlCeVNjYWxhcihpLE1hdGguc2luKG4qcyksJG0pLG89RXQuYWRkKFltLCRtLG8pLEV0Lm11bHRpcGx5QnlTY2FsYXIobywxL01hdGguc2luKHMpLG8pfTtFdC5sb2c9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoInF1YXRlcm5pb24iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj1NLmFjb3NDbGFtcGVkKHQudyksbz0wO3JldHVybiBuIT09MCYmKG89bi9NYXRoLnNpbihuKSksYS5tdWx0aXBseUJ5U2NhbGFyKHQsbyxlKX07RXQuZXhwPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj1hLm1hZ25pdHVkZSh0KSxvPTA7cmV0dXJuIG4hPT0wJiYobz1NYXRoLnNpbihuKS9uKSxlLng9dC54Km8sZS55PXQueSpvLGUuej10LnoqbyxlLnc9TWF0aC5jb3MobiksZX07T3g9bmV3IGEsRXg9bmV3IGEscGY9bmV3IEV0LFhjPW5ldyBFdDtFdC5jb21wdXRlSW5uZXJRdWFkcmFuZ2xlPWZ1bmN0aW9uKHQsZSxuLG8pe3kudHlwZU9mLm9iamVjdCgicTAiLHQpLHkudHlwZU9mLm9iamVjdCgicTEiLGUpLHkudHlwZU9mLm9iamVjdCgicTIiLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKTtsZXQgcj1FdC5jb25qdWdhdGUoZSxwZik7RXQubXVsdGlwbHkocixuLFhjKTtsZXQgaT1FdC5sb2coWGMsT3gpO0V0Lm11bHRpcGx5KHIsdCxYYyk7bGV0IHM9RXQubG9nKFhjLEV4KTtyZXR1cm4gYS5hZGQoaSxzLGkpLGEubXVsdGlwbHlCeVNjYWxhcihpLC4yNSxpKSxhLm5lZ2F0ZShpLGkpLEV0LmV4cChpLHBmKSxFdC5tdWx0aXBseShlLHBmLG8pfTtFdC5zcXVhZD1mdW5jdGlvbih0LGUsbixvLHIsaSl7eS50eXBlT2Yub2JqZWN0KCJxMCIsdCkseS50eXBlT2Yub2JqZWN0KCJxMSIsZSkseS50eXBlT2Yub2JqZWN0KCJzMCIsbikseS50eXBlT2Yub2JqZWN0KCJzMSIsbykseS50eXBlT2YubnVtYmVyKCJ0IixyKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsaSk7bGV0IHM9RXQuc2xlcnAodCxlLHIscGYpLGY9RXQuc2xlcnAobixvLHIsWGMpO3JldHVybiBFdC5zbGVycChzLGYsMipyKigxLXIpLGkpfTtSeD1uZXcgRXQsRzE9MS45MDExMDc0NTM1MTczMDAzLHJwPXpzLnN1cHBvcnRzVHlwZWRBcnJheXMoKT9uZXcgRmxvYXQzMkFycmF5KDgpOltdLGlwPXpzLnN1cHBvcnRzVHlwZWRBcnJheXMoKT9uZXcgRmxvYXQzMkFycmF5KDgpOltdLENpPXpzLnN1cHBvcnRzVHlwZWRBcnJheXMoKT9uZXcgRmxvYXQzMkFycmF5KDgpOltdLHhpPXpzLnN1cHBvcnRzVHlwZWRBcnJheXMoKT9uZXcgRmxvYXQzMkFycmF5KDgpOltdO2ZvcihsZXQgdD0wO3Q8NzsrK3Qpe2xldCBlPXQrMSxuPTIqZSsxO3JwW3RdPTEvKGUqbiksaXBbdF09ZS9ufXJwWzddPUcxLyg4KjE3KTtpcFs3XT1HMSo4LzE3O0V0LmZhc3RTbGVycD1mdW5jdGlvbih0LGUsbixvKXt5LnR5cGVPZi5vYmplY3QoInN0YXJ0Iix0KSx5LnR5cGVPZi5vYmplY3QoImVuZCIsZSkseS50eXBlT2YubnVtYmVyKCJ0IixuKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbyk7bGV0IHI9RXQuZG90KHQsZSksaTtyPj0wP2k9MTooaT0tMSxyPS1yKTtsZXQgcz1yLTEsZj0xLW4sdT1uKm4sYz1mKmY7Zm9yKGxldCBtPTc7bT49MDstLW0pQ2lbbV09KHJwW21dKnUtaXBbbV0pKnMseGlbbV09KHJwW21dKmMtaXBbbV0pKnM7bGV0IGw9aSpuKigxK0NpWzBdKigxK0NpWzFdKigxK0NpWzJdKigxK0NpWzNdKigxK0NpWzRdKigxK0NpWzVdKigxK0NpWzZdKigxK0NpWzddKSkpKSkpKSkscD1mKigxK3hpWzBdKigxK3hpWzFdKigxK3hpWzJdKigxK3hpWzNdKigxK3hpWzRdKigxK3hpWzVdKigxK3hpWzZdKigxK3hpWzddKSkpKSkpKSksZD1FdC5tdWx0aXBseUJ5U2NhbGFyKHQscCxSeCk7cmV0dXJuIEV0Lm11bHRpcGx5QnlTY2FsYXIoZSxsLG8pLEV0LmFkZChkLG8sbyl9O0V0LmZhc3RTcXVhZD1mdW5jdGlvbih0LGUsbixvLHIsaSl7eS50eXBlT2Yub2JqZWN0KCJxMCIsdCkseS50eXBlT2Yub2JqZWN0KCJxMSIsZSkseS50eXBlT2Yub2JqZWN0KCJzMCIsbikseS50eXBlT2Yub2JqZWN0KCJzMSIsbykseS50eXBlT2YubnVtYmVyKCJ0IixyKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsaSk7bGV0IHM9RXQuZmFzdFNsZXJwKHQsZSxyLHBmKSxmPUV0LmZhc3RTbGVycChuLG8scixYYyk7cmV0dXJuIEV0LmZhc3RTbGVycChzLGYsMipyKigxLXIpLGkpfTtFdC5lcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fGgodCkmJmgoZSkmJnQueD09PWUueCYmdC55PT09ZS55JiZ0Lno9PT1lLnomJnQudz09PWUud307RXQuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG49eChuLDApLHQ9PT1lfHxoKHQpJiZoKGUpJiZNYXRoLmFicyh0LngtZS54KTw9biYmTWF0aC5hYnModC55LWUueSk8PW4mJk1hdGguYWJzKHQuei1lLnopPD1uJiZNYXRoLmFicyh0LnctZS53KTw9bn07RXQuWkVSTz1PYmplY3QuZnJlZXplKG5ldyBFdCgwLDAsMCwwKSk7RXQuSURFTlRJVFk9T2JqZWN0LmZyZWV6ZShuZXcgRXQoMCwwLDAsMSkpO0V0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gRXQuY2xvbmUodGhpcyx0KX07RXQucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gRXQuZXF1YWxzKHRoaXMsdCl9O0V0LnByb3RvdHlwZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEV0LmVxdWFsc0Vwc2lsb24odGhpcyx0LGUpfTtFdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5gKCR7dGhpcy54fSwgJHt0aGlzLnl9LCAke3RoaXMuen0sICR7dGhpcy53fSlgfTtuZT1FdH0pO2Z1bmN0aW9uIFN4KHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSx5LmRlZmluZWQoIml0ZW1Ub0ZpbmQiLGUpLHkuZGVmaW5lZCgiY29tcGFyYXRvciIsbik7bGV0IG89MCxyPXQubGVuZ3RoLTEsaSxzO2Zvcig7bzw9cjspe2lmKGk9fn4oKG8rcikvMikscz1uKHRbaV0sZSksczwwKXtvPWkrMTtjb250aW51ZX1pZihzPjApe3I9aS0xO2NvbnRpbnVlfXJldHVybiBpfXJldHVybn4ocisxKX12YXIganMsWm09WigoKT0+e1l0KCk7anM9U3h9KTtmdW5jdGlvbiBDeCh0LGUsbixvLHIpe3RoaXMueFBvbGVXYW5kZXI9dCx0aGlzLnlQb2xlV2FuZGVyPWUsdGhpcy54UG9sZU9mZnNldD1uLHRoaXMueVBvbGVPZmZzZXQ9byx0aGlzLnV0MU1pbnVzVXRjPXJ9dmFyIGRmLFFtPVooKCk9PntkZj1DeH0pO2Z1bmN0aW9uIHh4KHQsZSxuLG8scixpLHMsZil7dGhpcy55ZWFyPXQsdGhpcy5tb250aD1lLHRoaXMuZGF5PW4sdGhpcy5ob3VyPW8sdGhpcy5taW51dGU9cix0aGlzLnNlY29uZD1pLHRoaXMubWlsbGlzZWNvbmQ9cyx0aGlzLmlzTGVhcFNlY29uZD1mfXZhciBzcCx6MT1aKCgpPT57c3A9eHh9KTtmdW5jdGlvbiBQeCh0KXtpZih0PT09bnVsbHx8aXNOYU4odCkpdGhyb3cgbmV3IEIoInllYXIgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBudW1iZXIuIik7cmV0dXJuIHQlND09PTAmJnQlMTAwIT09MHx8dCU0MDA9PT0wfXZhciBKbSxqMT1aKCgpPT57SHQoKTtKbT1QeH0pO2Z1bmN0aW9uIE14KHQsZSl7dGhpcy5qdWxpYW5EYXRlPXQsdGhpcy5vZmZzZXQ9ZX12YXIgV2UsdGg9WigoKT0+e1dlPU14fSk7dmFyIE54LF9uLGNwPVooKCk9PntOeD17U0VDT05EU19QRVJfTUlMTElTRUNPTkQ6LjAwMSxTRUNPTkRTX1BFUl9NSU5VVEU6NjAsTUlOVVRFU19QRVJfSE9VUjo2MCxIT1VSU19QRVJfREFZOjI0LFNFQ09ORFNfUEVSX0hPVVI6MzYwMCxNSU5VVEVTX1BFUl9EQVk6MTQ0MCxTRUNPTkRTX1BFUl9EQVk6ODY0MDAsREFZU19QRVJfSlVMSUFOX0NFTlRVUlk6MzY1MjUsUElDT1NFQ09ORDoxZS05LE1PRElGSUVEX0pVTElBTl9EQVRFX0RJRkZFUkVOQ0U6MjQwMDAwMDVlLTF9LF9uPU9iamVjdC5mcmVlemUoTngpfSk7dmFyIEl4LE9lLGFwPVooKCk9PntJeD17VVRDOjAsVEFJOjF9LE9lPU9iamVjdC5mcmVlemUoSXgpfSk7ZnVuY3Rpb24gZWgodCxlKXtyZXR1cm4gR3QuY29tcGFyZSh0Lmp1bGlhbkRhdGUsZS5qdWxpYW5EYXRlKX1mdW5jdGlvbiBwcCh0KXtZYy5qdWxpYW5EYXRlPXQ7bGV0IGU9R3QubGVhcFNlY29uZHMsbj1qcyhlLFljLGVoKTtuPDAmJihuPX5uKSxuPj1lLmxlbmd0aCYmKG49ZS5sZW5ndGgtMSk7bGV0IG89ZVtuXS5vZmZzZXQ7bj4wJiZHdC5zZWNvbmRzRGlmZmVyZW5jZShlW25dLmp1bGlhbkRhdGUsdCk+byYmKG4tLSxvPWVbbl0ub2Zmc2V0KSxHdC5hZGRTZWNvbmRzKHQsbyx0KX1mdW5jdGlvbiBIMSh0LGUpe1ljLmp1bGlhbkRhdGU9dDtsZXQgbj1HdC5sZWFwU2Vjb25kcyxvPWpzKG4sWWMsZWgpO2lmKG88MCYmKG89fm8pLG89PT0wKXJldHVybiBHdC5hZGRTZWNvbmRzKHQsLW5bMF0ub2Zmc2V0LGUpO2lmKG8+PW4ubGVuZ3RoKXJldHVybiBHdC5hZGRTZWNvbmRzKHQsLW5bby0xXS5vZmZzZXQsZSk7bGV0IHI9R3Quc2Vjb25kc0RpZmZlcmVuY2UobltvXS5qdWxpYW5EYXRlLHQpO2lmKHI9PT0wKXJldHVybiBHdC5hZGRTZWNvbmRzKHQsLW5bb10ub2Zmc2V0LGUpO2lmKCEocjw9MSkpcmV0dXJuIEd0LmFkZFNlY29uZHModCwtblstLW9dLm9mZnNldCxlKX1mdW5jdGlvbiBucyh0LGUsbil7bGV0IG89ZS9fbi5TRUNPTkRTX1BFUl9EQVl8MDtyZXR1cm4gdCs9byxlLT1fbi5TRUNPTkRTX1BFUl9EQVkqbyxlPDAmJih0LS0sZSs9X24uU0VDT05EU19QRVJfREFZKSxuLmRheU51bWJlcj10LG4uc2Vjb25kc09mRGF5PWUsbn1mdW5jdGlvbiBuaCh0LGUsbixvLHIsaSxzKXtsZXQgZj0oZS0xNCkvMTJ8MCx1PXQrNDgwMCtmLGM9KDE0NjEqdS80fDApKygzNjcqKGUtMi0xMipmKS8xMnwwKS0oMyooKHUrMTAwKS8xMDB8MCkvNHwwKStuLTMyMDc1O289by0xMixvPDAmJihvKz0yNCk7bGV0IGw9aSsobypfbi5TRUNPTkRTX1BFUl9IT1VSK3IqX24uU0VDT05EU19QRVJfTUlOVVRFK3MqX24uU0VDT05EU19QRVJfTUlMTElTRUNPTkQpO3JldHVybiBsPj00MzIwMCYmKGMtPTEpLFtjLGxdfWZ1bmN0aW9uIEd0KHQsZSxuKXt0aGlzLmRheU51bWJlcj12b2lkIDAsdGhpcy5zZWNvbmRzT2ZEYXk9dm9pZCAwLHQ9eCh0LDApLGU9eChlLDApLG49eChuLE9lLlVUQyk7bGV0IG89dHwwO2U9ZSsodC1vKSpfbi5TRUNPTkRTX1BFUl9EQVksbnMobyxlLHRoaXMpLG49PT1PZS5VVEMmJnBwKHRoaXMpfXZhciBxMSxmcCx1cCxZYyx2eCxEeCxMeCxGeCxCeCxvaCxVeCxWeCxreCxGcixscCxpbyxkcD1aKCgpPT57Wm0oKTtJdCgpO2F0KCk7SHQoKTt6MSgpO2oxKCk7dGgoKTtjcCgpO2FwKCk7cTE9bmV3IHNwLGZwPVszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0sdXA9Mjk7WWM9bmV3IFdlO3Z4PS9eKFxkezR9KSQvLER4PS9eKFxkezR9KS0oXGR7Mn0pJC8sTHg9L14oXGR7NH0pLT8oXGR7M30pJC8sRng9L14oXGR7NH0pLT9XKFxkezJ9KS0/KFxkezF9KT8kLyxCeD0vXihcZHs0fSktPyhcZHsyfSktPyhcZHsyfSkkLyxvaD0vKFtaK1wtXSk/KFxkezJ9KT86PyhcZHsyfSk/JC8sVXg9L14oXGR7Mn0pKFwuXGQrKT8vLnNvdXJjZStvaC5zb3VyY2UsVng9L14oXGR7Mn0pOj8oXGR7Mn0pKFwuXGQrKT8vLnNvdXJjZStvaC5zb3VyY2Usa3g9L14oXGR7Mn0pOj8oXGR7Mn0pOj8oXGR7Mn0pKFwuXGQrKT8vLnNvdXJjZStvaC5zb3VyY2UsRnI9IkludmFsaWQgSVNPIDg2MDEgZGF0ZS4iO0d0LmZyb21HcmVnb3JpYW5EYXRlPWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2Ygc3ApKXRocm93IG5ldyBCKCJkYXRlIG11c3QgYmUgYSB2YWxpZCBHcmVnb3JpYW5EYXRlLiIpO2xldCBuPW5oKHQueWVhcix0Lm1vbnRoLHQuZGF5LHQuaG91cix0Lm1pbnV0ZSx0LnNlY29uZCx0Lm1pbGxpc2Vjb25kKTtyZXR1cm4gaChlKT8obnMoblswXSxuWzFdLGUpLHBwKGUpLGUpOm5ldyBHdChuWzBdLG5bMV0sT2UuVVRDKX07R3QuZnJvbURhdGU9ZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBEYXRlKXx8aXNOYU4odC5nZXRUaW1lKCkpKXRocm93IG5ldyBCKCJkYXRlIG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IERhdGUuIik7bGV0IG49bmgodC5nZXRVVENGdWxsWWVhcigpLHQuZ2V0VVRDTW9udGgoKSsxLHQuZ2V0VVRDRGF0ZSgpLHQuZ2V0VVRDSG91cnMoKSx0LmdldFVUQ01pbnV0ZXMoKSx0LmdldFVUQ1NlY29uZHMoKSx0LmdldFVUQ01pbGxpc2Vjb25kcygpKTtyZXR1cm4gaChlKT8obnMoblswXSxuWzFdLGUpLHBwKGUpLGUpOm5ldyBHdChuWzBdLG5bMV0sT2UuVVRDKX07R3QuZnJvbUlzbzg2MDE9ZnVuY3Rpb24odCxlKXtpZih0eXBlb2YgdCE9InN0cmluZyIpdGhyb3cgbmV3IEIoRnIpO3Q9dC5yZXBsYWNlKCIsIiwiLiIpO2xldCBuPXQuc3BsaXQoIlQiKSxvLHI9MSxpPTEscz0wLGY9MCx1PTAsYz0wLGw9blswXSxwPW5bMV0sZCxtO2lmKCFoKGwpKXRocm93IG5ldyBCKEZyKTtsZXQgXztpZihuPWwubWF0Y2goQngpLG4hPT1udWxsKXtpZihfPWwuc3BsaXQoIi0iKS5sZW5ndGgtMSxfPjAmJl8hPT0yKXRocm93IG5ldyBCKEZyKTtvPStuWzFdLHI9K25bMl0saT0rblszXX1lbHNlIGlmKG49bC5tYXRjaChEeCksbiE9PW51bGwpbz0rblsxXSxyPStuWzJdO2Vsc2UgaWYobj1sLm1hdGNoKHZ4KSxuIT09bnVsbClvPStuWzFdO2Vsc2V7bGV0IFQ7aWYobj1sLm1hdGNoKEx4KSxuIT09bnVsbCl7aWYobz0rblsxXSxUPStuWzJdLG09Sm0obyksVDwxfHxtJiZUPjM2Nnx8IW0mJlQ+MzY1KXRocm93IG5ldyBCKEZyKX1lbHNlIGlmKG49bC5tYXRjaChGeCksbiE9PW51bGwpe289K25bMV07bGV0IEU9K25bMl0sdz0rblszXXx8MDtpZihfPWwuc3BsaXQoIi0iKS5sZW5ndGgtMSxfPjAmJighaChuWzNdKSYmXyE9PTF8fGgoblszXSkmJl8hPT0yKSl0aHJvdyBuZXcgQihGcik7bGV0IEM9bmV3IERhdGUoRGF0ZS5VVEMobywwLDQpKTtUPUUqNyt3LUMuZ2V0VVRDRGF5KCktM31lbHNlIHRocm93IG5ldyBCKEZyKTtkPW5ldyBEYXRlKERhdGUuVVRDKG8sMCwxKSksZC5zZXRVVENEYXRlKFQpLHI9ZC5nZXRVVENNb250aCgpKzEsaT1kLmdldFVUQ0RhdGUoKX1pZihtPUptKG8pLHI8MXx8cj4xMnx8aTwxfHwociE9PTJ8fCFtKSYmaT5mcFtyLTFdfHxtJiZyPT09MiYmaT51cCl0aHJvdyBuZXcgQihGcik7bGV0IGc7aWYoaChwKSl7aWYobj1wLm1hdGNoKGt4KSxuIT09bnVsbCl7aWYoXz1wLnNwbGl0KCI6IikubGVuZ3RoLTEsXz4wJiZfIT09MiYmXyE9PTMpdGhyb3cgbmV3IEIoRnIpO3M9K25bMV0sZj0rblsyXSx1PStuWzNdLGM9KyhuWzRdfHwwKSoxZTMsZz01fWVsc2UgaWYobj1wLm1hdGNoKFZ4KSxuIT09bnVsbCl7aWYoXz1wLnNwbGl0KCI6IikubGVuZ3RoLTEsXz4yKXRocm93IG5ldyBCKEZyKTtzPStuWzFdLGY9K25bMl0sdT0rKG5bM118fDApKjYwLGc9NH1lbHNlIGlmKG49cC5tYXRjaChVeCksbiE9PW51bGwpcz0rblsxXSxmPSsoblsyXXx8MCkqNjAsZz0zO2Vsc2UgdGhyb3cgbmV3IEIoRnIpO2lmKGY+PTYwfHx1Pj02MXx8cz4yNHx8cz09PTI0JiYoZj4wfHx1PjB8fGM+MCkpdGhyb3cgbmV3IEIoRnIpO2xldCBUPW5bZ10sRT0rbltnKzFdLHc9KyhuW2crMl18fDApO3N3aXRjaChUKXtjYXNlIisiOnM9cy1FLGY9Zi13O2JyZWFrO2Nhc2UiLSI6cz1zK0UsZj1mK3c7YnJlYWs7Y2FzZSJaIjpicmVhaztkZWZhdWx0OmY9ZituZXcgRGF0ZShEYXRlLlVUQyhvLHItMSxpLHMsZikpLmdldFRpbWV6b25lT2Zmc2V0KCk7YnJlYWt9fWxldCBiPXU9PT02MDtmb3IoYiYmdS0tO2Y+PTYwOylmLT02MCxzKys7Zm9yKDtzPj0yNDspcy09MjQsaSsrO2ZvcihkPW0mJnI9PT0yP3VwOmZwW3ItMV07aT5kOylpLT1kLHIrKyxyPjEyJiYoci09MTIsbysrKSxkPW0mJnI9PT0yP3VwOmZwW3ItMV07Zm9yKDtmPDA7KWYrPTYwLHMtLTtmb3IoO3M8MDspcys9MjQsaS0tO2Zvcig7aTwxOylyLS0scjwxJiYocis9MTIsby0tKSxkPW0mJnI9PT0yP3VwOmZwW3ItMV0saSs9ZDtsZXQgTz1uaChvLHIsaSxzLGYsdSxjKTtyZXR1cm4gaChlKT8obnMoT1swXSxPWzFdLGUpLHBwKGUpKTplPW5ldyBHdChPWzBdLE9bMV0sT2UuVVRDKSxiJiZHdC5hZGRTZWNvbmRzKGUsMSxlKSxlfTtHdC5ub3c9ZnVuY3Rpb24odCl7cmV0dXJuIEd0LmZyb21EYXRlKG5ldyBEYXRlLHQpfTtscD1uZXcgR3QoMCwwLE9lLlRBSSk7R3QudG9HcmVnb3JpYW5EYXRlPWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEIoImp1bGlhbkRhdGUgaXMgcmVxdWlyZWQuIik7bGV0IG49ITEsbz1IMSh0LGxwKTtoKG8pfHwoR3QuYWRkU2Vjb25kcyh0LC0xLGxwKSxvPUgxKGxwLGxwKSxuPSEwKTtsZXQgcj1vLmRheU51bWJlcixpPW8uc2Vjb25kc09mRGF5O2k+PTQzMjAwJiYocis9MSk7bGV0IHM9cis2ODU2OXwwLGY9NCpzLzE0NjA5N3wwO3M9cy0oKDE0NjA5NypmKzMpLzR8MCl8MDtsZXQgdT00ZTMqKHMrMSkvMTQ2MTAwMXwwO3M9cy0oMTQ2MSp1LzR8MCkrMzF8MDtsZXQgYz04MCpzLzI0NDd8MCxsPXMtKDI0NDcqYy84MHwwKXwwO3M9Yy8xMXwwO2xldCBwPWMrMi0xMipzfDAsZD0xMDAqKGYtNDkpK3Urc3wwLG09aS9fbi5TRUNPTkRTX1BFUl9IT1VSfDAsXz1pLW0qX24uU0VDT05EU19QRVJfSE9VUixnPV8vX24uU0VDT05EU19QRVJfTUlOVVRFfDA7Xz1fLWcqX24uU0VDT05EU19QRVJfTUlOVVRFO2xldCBiPV98MCxPPShfLWIpL19uLlNFQ09ORFNfUEVSX01JTExJU0VDT05EO3JldHVybiBtKz0xMixtPjIzJiYobS09MjQpLG4mJihiKz0xKSxoKGUpPyhlLnllYXI9ZCxlLm1vbnRoPXAsZS5kYXk9bCxlLmhvdXI9bSxlLm1pbnV0ZT1nLGUuc2Vjb25kPWIsZS5taWxsaXNlY29uZD1PLGUuaXNMZWFwU2Vjb25kPW4sZSk6bmV3IHNwKGQscCxsLG0sZyxiLE8sbil9O0d0LnRvRGF0ZT1mdW5jdGlvbih0KXtpZighaCh0KSl0aHJvdyBuZXcgQigianVsaWFuRGF0ZSBpcyByZXF1aXJlZC4iKTtsZXQgZT1HdC50b0dyZWdvcmlhbkRhdGUodCxxMSksbj1lLnNlY29uZDtyZXR1cm4gZS5pc0xlYXBTZWNvbmQmJihuLT0xKSxuZXcgRGF0ZShEYXRlLlVUQyhlLnllYXIsZS5tb250aC0xLGUuZGF5LGUuaG91cixlLm1pbnV0ZSxuLGUubWlsbGlzZWNvbmQpKX07R3QudG9Jc284NjAxPWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEIoImp1bGlhbkRhdGUgaXMgcmVxdWlyZWQuIik7bGV0IG49R3QudG9HcmVnb3JpYW5EYXRlKHQscTEpLG89bi55ZWFyLHI9bi5tb250aCxpPW4uZGF5LHM9bi5ob3VyLGY9bi5taW51dGUsdT1uLnNlY29uZCxjPW4ubWlsbGlzZWNvbmQ7bz09PTFlNCYmcj09PTEmJmk9PT0xJiZzPT09MCYmZj09PTAmJnU9PT0wJiZjPT09MCYmKG89OTk5OSxyPTEyLGk9MzEscz0yNCk7bGV0IGw7cmV0dXJuIWgoZSkmJmMhPT0wPyhsPShjKi4wMSkudG9TdHJpbmcoKS5yZXBsYWNlKCIuIiwiIiksYCR7by50b1N0cmluZygpLnBhZFN0YXJ0KDQsIjAiKX0tJHtyLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS0ke2kudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9VCR7cy50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHtmLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfToke3UudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9LiR7bH1aYCk6IWgoZSl8fGU9PT0wP2Ake28udG9TdHJpbmcoKS5wYWRTdGFydCg0LCIwIil9LSR7ci50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0tJHtpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfVQke3MudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7Zi50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHt1LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfVpgOihsPShjKi4wMSkudG9GaXhlZChlKS5yZXBsYWNlKCIuIiwiIikuc2xpY2UoMCxlKSxgJHtvLnRvU3RyaW5nKCkucGFkU3RhcnQoNCwiMCIpfS0ke3IudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9LSR7aS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1UJHtzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfToke2YudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7dS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0uJHtsfVpgKX07R3QuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlLmRheU51bWJlcj10LmRheU51bWJlcixlLnNlY29uZHNPZkRheT10LnNlY29uZHNPZkRheSxlKTpuZXcgR3QodC5kYXlOdW1iZXIsdC5zZWNvbmRzT2ZEYXksT2UuVEFJKX07R3QuY29tcGFyZT1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJsZWZ0IGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBCKCJyaWdodCBpcyByZXF1aXJlZC4iKTtsZXQgbj10LmRheU51bWJlci1lLmRheU51bWJlcjtyZXR1cm4gbiE9PTA/bjp0LnNlY29uZHNPZkRheS1lLnNlY29uZHNPZkRheX07R3QuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZ0LmRheU51bWJlcj09PWUuZGF5TnVtYmVyJiZ0LnNlY29uZHNPZkRheT09PWUuc2Vjb25kc09mRGF5fTtHdC5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbj14KG4sMCksdD09PWV8fGgodCkmJmgoZSkmJk1hdGguYWJzKEd0LnNlY29uZHNEaWZmZXJlbmNlKHQsZSkpPD1ufTtHdC50b3RhbERheXM9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEIoImp1bGlhbkRhdGUgaXMgcmVxdWlyZWQuIik7cmV0dXJuIHQuZGF5TnVtYmVyK3Quc2Vjb25kc09mRGF5L19uLlNFQ09ORFNfUEVSX0RBWX07R3Quc2Vjb25kc0RpZmZlcmVuY2U9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgQigibGVmdCBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgQigicmlnaHQgaXMgcmVxdWlyZWQuIik7cmV0dXJuKHQuZGF5TnVtYmVyLWUuZGF5TnVtYmVyKSpfbi5TRUNPTkRTX1BFUl9EQVkrKHQuc2Vjb25kc09mRGF5LWUuc2Vjb25kc09mRGF5KX07R3QuZGF5c0RpZmZlcmVuY2U9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgQigibGVmdCBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgQigicmlnaHQgaXMgcmVxdWlyZWQuIik7bGV0IG49dC5kYXlOdW1iZXItZS5kYXlOdW1iZXIsbz0odC5zZWNvbmRzT2ZEYXktZS5zZWNvbmRzT2ZEYXkpL19uLlNFQ09ORFNfUEVSX0RBWTtyZXR1cm4gbitvfTtHdC5jb21wdXRlVGFpTWludXNVdGM9ZnVuY3Rpb24odCl7WWMuanVsaWFuRGF0ZT10O2xldCBlPUd0LmxlYXBTZWNvbmRzLG49anMoZSxZYyxlaCk7cmV0dXJuIG48MCYmKG49fm4sLS1uLG48MCYmKG49MCkpLGVbbl0ub2Zmc2V0fTtHdC5hZGRTZWNvbmRzPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgQigianVsaWFuRGF0ZSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgQigic2Vjb25kcyBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgQigicmVzdWx0IGlzIHJlcXVpcmVkLiIpO3JldHVybiBucyh0LmRheU51bWJlcix0LnNlY29uZHNPZkRheStlLG4pfTtHdC5hZGRNaW51dGVzPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgQigianVsaWFuRGF0ZSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgQigibWludXRlcyBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgQigicmVzdWx0IGlzIHJlcXVpcmVkLiIpO2xldCBvPXQuc2Vjb25kc09mRGF5K2UqX24uU0VDT05EU19QRVJfTUlOVVRFO3JldHVybiBucyh0LmRheU51bWJlcixvLG4pfTtHdC5hZGRIb3Vycz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEIoImp1bGlhbkRhdGUgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEIoImhvdXJzIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG4pKXRocm93IG5ldyBCKCJyZXN1bHQgaXMgcmVxdWlyZWQuIik7bGV0IG89dC5zZWNvbmRzT2ZEYXkrZSpfbi5TRUNPTkRTX1BFUl9IT1VSO3JldHVybiBucyh0LmRheU51bWJlcixvLG4pfTtHdC5hZGREYXlzPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgQigianVsaWFuRGF0ZSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgQigiZGF5cyBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgQigicmVzdWx0IGlzIHJlcXVpcmVkLiIpO2xldCBvPXQuZGF5TnVtYmVyK2U7cmV0dXJuIG5zKG8sdC5zZWNvbmRzT2ZEYXksbil9O0d0Lmxlc3NUaGFuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEd0LmNvbXBhcmUodCxlKTwwfTtHdC5sZXNzVGhhbk9yRXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEd0LmNvbXBhcmUodCxlKTw9MH07R3QuZ3JlYXRlclRoYW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gR3QuY29tcGFyZSh0LGUpPjB9O0d0LmdyZWF0ZXJUaGFuT3JFcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gR3QuY29tcGFyZSh0LGUpPj0wfTtHdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIEd0LmNsb25lKHRoaXMsdCl9O0d0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIEd0LmVxdWFscyh0aGlzLHQpfTtHdC5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUpe3JldHVybiBHdC5lcXVhbHNFcHNpbG9uKHRoaXMsdCxlKX07R3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEd0LnRvSXNvODYwMSh0aGlzKX07R3QubGVhcFNlY29uZHM9W25ldyBXZShuZXcgR3QoMjQ0MTMxNyw0MzIxMCxPZS5UQUkpLDEwKSxuZXcgV2UobmV3IEd0KDI0NDE0OTksNDMyMTEsT2UuVEFJKSwxMSksbmV3IFdlKG5ldyBHdCgyNDQxNjgzLDQzMjEyLE9lLlRBSSksMTIpLG5ldyBXZShuZXcgR3QoMjQ0MjA0OCw0MzIxMyxPZS5UQUkpLDEzKSxuZXcgV2UobmV3IEd0KDI0NDI0MTMsNDMyMTQsT2UuVEFJKSwxNCksbmV3IFdlKG5ldyBHdCgyNDQyNzc4LDQzMjE1LE9lLlRBSSksMTUpLG5ldyBXZShuZXcgR3QoMjQ0MzE0NCw0MzIxNixPZS5UQUkpLDE2KSxuZXcgV2UobmV3IEd0KDI0NDM1MDksNDMyMTcsT2UuVEFJKSwxNyksbmV3IFdlKG5ldyBHdCgyNDQzODc0LDQzMjE4LE9lLlRBSSksMTgpLG5ldyBXZShuZXcgR3QoMjQ0NDIzOSw0MzIxOSxPZS5UQUkpLDE5KSxuZXcgV2UobmV3IEd0KDI0NDQ3ODYsNDMyMjAsT2UuVEFJKSwyMCksbmV3IFdlKG5ldyBHdCgyNDQ1MTUxLDQzMjIxLE9lLlRBSSksMjEpLG5ldyBXZShuZXcgR3QoMjQ0NTUxNiw0MzIyMixPZS5UQUkpLDIyKSxuZXcgV2UobmV3IEd0KDI0NDYyNDcsNDMyMjMsT2UuVEFJKSwyMyksbmV3IFdlKG5ldyBHdCgyNDQ3MTYxLDQzMjI0LE9lLlRBSSksMjQpLG5ldyBXZShuZXcgR3QoMjQ0Nzg5Miw0MzIyNSxPZS5UQUkpLDI1KSxuZXcgV2UobmV3IEd0KDI0NDgyNTcsNDMyMjYsT2UuVEFJKSwyNiksbmV3IFdlKG5ldyBHdCgyNDQ4ODA0LDQzMjI3LE9lLlRBSSksMjcpLG5ldyBXZShuZXcgR3QoMjQ0OTE2OSw0MzIyOCxPZS5UQUkpLDI4KSxuZXcgV2UobmV3IEd0KDI0NDk1MzQsNDMyMjksT2UuVEFJKSwyOSksbmV3IFdlKG5ldyBHdCgyNDUwMDgzLDQzMjMwLE9lLlRBSSksMzApLG5ldyBXZShuZXcgR3QoMjQ1MDYzMCw0MzIzMSxPZS5UQUkpLDMxKSxuZXcgV2UobmV3IEd0KDI0NTExNzksNDMyMzIsT2UuVEFJKSwzMiksbmV3IFdlKG5ldyBHdCgyNDUzNzM2LDQzMjMzLE9lLlRBSSksMzMpLG5ldyBXZShuZXcgR3QoMjQ1NDgzMiw0MzIzNCxPZS5UQUkpLDM0KSxuZXcgV2UobmV3IEd0KDI0NTYxMDksNDMyMzUsT2UuVEFJKSwzNSksbmV3IFdlKG5ldyBHdCgyNDU3MjA0LDQzMjM2LE9lLlRBSSksMzYpLG5ldyBXZShuZXcgR3QoMjQ1Nzc1NCw0MzIzNyxPZS5UQUkpLDM3KV07aW89R3R9KTt2YXIgSzE9VW4oKCRjLFpjKT0+ey8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4wIGJ5IEBtYXRoaWFzICovKGZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiAkYz09Im9iamVjdCImJiRjJiYhJGMubm9kZVR5cGUmJiRjLG49dHlwZW9mIFpjPT0ib2JqZWN0IiYmWmMmJiFaYy5ub2RlVHlwZSYmWmMsbz10eXBlb2YgZ2xvYmFsPT0ib2JqZWN0IiYmZ2xvYmFsOyhvLmdsb2JhbD09PW98fG8ud2luZG93PT09b3x8by5zZWxmPT09bykmJih0PW8pO3ZhciByLGk9MjE0NzQ4MzY0NyxzPTM2LGY9MSx1PTI2LGM9MzgsbD03MDAscD03MixkPTEyOCxtPSItIixfPS9eeG4tLS8sZz0vW15ceDIwLVx4N0VdLyxiPS9bXHgyRVx1MzAwMlx1RkYwRVx1RkY2MV0vZyxPPXtvdmVyZmxvdzoiT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MiLCJub3QtYmFzaWMiOiJJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpIiwiaW52YWxpZC1pbnB1dCI6IkludmFsaWQgaW5wdXQifSxUPXMtZixFPU1hdGguZmxvb3Isdz1TdHJpbmcuZnJvbUNoYXJDb2RlLEM7ZnVuY3Rpb24gTihrKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihPW2tdKX1mdW5jdGlvbiBJKGssSyl7Zm9yKHZhciBYPWsubGVuZ3RoLFI9W107WC0tOylSW1hdPUsoa1tYXSk7cmV0dXJuIFJ9ZnVuY3Rpb24gTChrLEspe3ZhciBYPWsuc3BsaXQoIkAiKSxSPSIiO1gubGVuZ3RoPjEmJihSPVhbMF0rIkAiLGs9WFsxXSksaz1rLnJlcGxhY2UoYiwiLiIpO3ZhciBRPWsuc3BsaXQoIi4iKSxmdD1JKFEsSykuam9pbigiLiIpO3JldHVybiBSK2Z0fWZ1bmN0aW9uIHYoayl7Zm9yKHZhciBLPVtdLFg9MCxSPWsubGVuZ3RoLFEsZnQ7WDxSOylRPWsuY2hhckNvZGVBdChYKyspLFE+PTU1Mjk2JiZRPD01NjMxOSYmWDxSPyhmdD1rLmNoYXJDb2RlQXQoWCsrKSwoZnQmNjQ1MTIpPT01NjMyMD9LLnB1c2goKChRJjEwMjMpPDwxMCkrKGZ0JjEwMjMpKzY1NTM2KTooSy5wdXNoKFEpLFgtLSkpOksucHVzaChRKTtyZXR1cm4gS31mdW5jdGlvbiBEKGspe3JldHVybiBJKGssZnVuY3Rpb24oSyl7dmFyIFg9IiI7cmV0dXJuIEs+NjU1MzUmJihLLT02NTUzNixYKz13KEs+Pj4xMCYxMDIzfDU1Mjk2KSxLPTU2MzIwfEsmMTAyMyksWCs9dyhLKSxYfSkuam9pbigiIil9ZnVuY3Rpb24gVShrKXtyZXR1cm4gay00ODwxMD9rLTIyOmstNjU8MjY/ay02NTprLTk3PDI2P2stOTc6c31mdW5jdGlvbiBBKGssSyl7cmV0dXJuIGsrMjIrNzUqKGs8MjYpLSgoSyE9MCk8PDUpfWZ1bmN0aW9uIFMoayxLLFgpe3ZhciBSPTA7Zm9yKGs9WD9FKGsvbCk6az4+MSxrKz1FKGsvSyk7az5UKnU+PjE7Uis9cylrPUUoay9UKTtyZXR1cm4gRShSKyhUKzEpKmsvKGsrYykpfWZ1bmN0aW9uIFAoayl7dmFyIEs9W10sWD1rLmxlbmd0aCxSLFE9MCxmdD1kLHB0PXAsZ3QsaXQsTnQsT3QseHQsX3QsZHQsVnQsenQ7Zm9yKGd0PWsubGFzdEluZGV4T2YobSksZ3Q8MCYmKGd0PTApLGl0PTA7aXQ8Z3Q7KytpdClrLmNoYXJDb2RlQXQoaXQpPj0xMjgmJk4oIm5vdC1iYXNpYyIpLEsucHVzaChrLmNoYXJDb2RlQXQoaXQpKTtmb3IoTnQ9Z3Q+MD9ndCsxOjA7TnQ8WDspe2ZvcihPdD1RLHh0PTEsX3Q9cztOdD49WCYmTigiaW52YWxpZC1pbnB1dCIpLGR0PVUoay5jaGFyQ29kZUF0KE50KyspKSwoZHQ+PXN8fGR0PkUoKGktUSkveHQpKSYmTigib3ZlcmZsb3ciKSxRKz1kdCp4dCxWdD1fdDw9cHQ/ZjpfdD49cHQrdT91Ol90LXB0LCEoZHQ8VnQpO190Kz1zKXp0PXMtVnQseHQ+RShpL3p0KSYmTigib3ZlcmZsb3ciKSx4dCo9enQ7Uj1LLmxlbmd0aCsxLHB0PVMoUS1PdCxSLE90PT0wKSxFKFEvUik+aS1mdCYmTigib3ZlcmZsb3ciKSxmdCs9RShRL1IpLFElPVIsSy5zcGxpY2UoUSsrLDAsZnQpfXJldHVybiBEKEspfWZ1bmN0aW9uIEYoayl7dmFyIEssWCxSLFEsZnQscHQsZ3QsaXQsTnQsT3QseHQsX3Q9W10sZHQsVnQsenQsaGU7Zm9yKGs9dihrKSxkdD1rLmxlbmd0aCxLPWQsWD0wLGZ0PXAscHQ9MDtwdDxkdDsrK3B0KXh0PWtbcHRdLHh0PDEyOCYmX3QucHVzaCh3KHh0KSk7Zm9yKFI9UT1fdC5sZW5ndGgsUSYmX3QucHVzaChtKTtSPGR0Oyl7Zm9yKGd0PWkscHQ9MDtwdDxkdDsrK3B0KXh0PWtbcHRdLHh0Pj1LJiZ4dDxndCYmKGd0PXh0KTtmb3IoVnQ9UisxLGd0LUs+RSgoaS1YKS9WdCkmJk4oIm92ZXJmbG93IiksWCs9KGd0LUspKlZ0LEs9Z3QscHQ9MDtwdDxkdDsrK3B0KWlmKHh0PWtbcHRdLHh0PEsmJisrWD5pJiZOKCJvdmVyZmxvdyIpLHh0PT1LKXtmb3IoaXQ9WCxOdD1zO090PU50PD1mdD9mOk50Pj1mdCt1P3U6TnQtZnQsIShpdDxPdCk7TnQrPXMpaGU9aXQtT3QsenQ9cy1PdCxfdC5wdXNoKHcoQShPdCtoZSV6dCwwKSkpLGl0PUUoaGUvenQpO190LnB1c2godyhBKGl0LDApKSksZnQ9UyhYLFZ0LFI9PVEpLFg9MCwrK1J9KytYLCsrS31yZXR1cm4gX3Quam9pbigiIil9ZnVuY3Rpb24gaihrKXtyZXR1cm4gTChrLGZ1bmN0aW9uKEspe3JldHVybiBfLnRlc3QoSyk/UChLLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOkt9KX1mdW5jdGlvbiBIKGspe3JldHVybiBMKGssZnVuY3Rpb24oSyl7cmV0dXJuIGcudGVzdChLKT8ieG4tLSIrRihLKTpLfSl9aWYocj17dmVyc2lvbjoiMS4zLjIiLHVjczI6e2RlY29kZTp2LGVuY29kZTpEfSxkZWNvZGU6UCxlbmNvZGU6Rix0b0FTQ0lJOkgsdG9Vbmljb2RlOmp9LHR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJnR5cGVvZiBkZWZpbmUuYW1kPT0ib2JqZWN0IiYmZGVmaW5lLmFtZClkZWZpbmUoInB1bnljb2RlIixmdW5jdGlvbigpe3JldHVybiByfSk7ZWxzZSBpZihlJiZuKWlmKFpjLmV4cG9ydHM9PWUpbi5leHBvcnRzPXI7ZWxzZSBmb3IoQyBpbiByKXIuaGFzT3duUHJvcGVydHkoQykmJihlW0NdPXJbQ10pO2Vsc2UgdC5wdW55Y29kZT1yfSkoJGMpfSk7dmFyIFgxPVVuKChXMSxtcCk9PnsvKiEKICogVVJJLmpzIC0gTXV0YXRpbmcgVVJMcwogKiBJUHY2IFN1cHBvcnQKICoKICogVmVyc2lvbjogMS4xOS4xMQogKgogKiBBdXRob3I6IFJvZG5leSBSZWhtCiAqIFdlYjogaHR0cDovL21lZGlhbGl6ZS5naXRodWIuaW8vVVJJLmpzLwogKgogKiBMaWNlbnNlZCB1bmRlcgogKiAgIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UKICoKICovKGZ1bmN0aW9uKHQsZSl7InVzZSBzdHJpY3QiO3R5cGVvZiBtcD09Im9iamVjdCImJm1wLmV4cG9ydHM/bXAuZXhwb3J0cz1lKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6dC5JUHY2PWUodCl9KShXMSxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dmFyIGU9dCYmdC5JUHY2O2Z1bmN0aW9uIG4ocil7dmFyIGk9ci50b0xvd2VyQ2FzZSgpLHM9aS5zcGxpdCgiOiIpLGY9cy5sZW5ndGgsdT04O3NbMF09PT0iIiYmc1sxXT09PSIiJiZzWzJdPT09IiI/KHMuc2hpZnQoKSxzLnNoaWZ0KCkpOnNbMF09PT0iIiYmc1sxXT09PSIiP3Muc2hpZnQoKTpzW2YtMV09PT0iIiYmc1tmLTJdPT09IiImJnMucG9wKCksZj1zLmxlbmd0aCxzW2YtMV0uaW5kZXhPZigiLiIpIT09LTEmJih1PTcpO3ZhciBjO2ZvcihjPTA7YzxmJiZzW2NdIT09IiI7YysrKTtpZihjPHUpZm9yKHMuc3BsaWNlKGMsMSwiMDAwMCIpO3MubGVuZ3RoPHU7KXMuc3BsaWNlKGMsMCwiMDAwMCIpO2Zvcih2YXIgbCxwPTA7cDx1O3ArKyl7bD1zW3BdLnNwbGl0KCIiKTtmb3IodmFyIGQ9MDtkPDMmJihsWzBdPT09IjAiJiZsLmxlbmd0aD4xKTtkKyspbC5zcGxpY2UoMCwxKTtzW3BdPWwuam9pbigiIil9dmFyIG09LTEsXz0wLGc9MCxiPS0xLE89ITE7Zm9yKHA9MDtwPHU7cCsrKU8/c1twXT09PSIwIj9nKz0xOihPPSExLGc+XyYmKG09YixfPWcpKTpzW3BdPT09IjAiJiYoTz0hMCxiPXAsZz0xKTtnPl8mJihtPWIsXz1nKSxfPjEmJnMuc3BsaWNlKG0sXywiIiksZj1zLmxlbmd0aDt2YXIgVD0iIjtmb3Ioc1swXT09PSIiJiYoVD0iOiIpLHA9MDtwPGYmJihUKz1zW3BdLHAhPT1mLTEpO3ArKylUKz0iOiI7cmV0dXJuIHNbZi0xXT09PSIiJiYoVCs9IjoiKSxUfWZ1bmN0aW9uIG8oKXtyZXR1cm4gdC5JUHY2PT09dGhpcyYmKHQuSVB2Nj1lKSx0aGlzfXJldHVybntiZXN0Om4sbm9Db25mbGljdDpvfX0pfSk7dmFyICQxPVVuKChZMSxocCk9PnsvKiEKICogVVJJLmpzIC0gTXV0YXRpbmcgVVJMcwogKiBTZWNvbmQgTGV2ZWwgRG9tYWluIChTTEQpIFN1cHBvcnQKICoKICogVmVyc2lvbjogMS4xOS4xMQogKgogKiBBdXRob3I6IFJvZG5leSBSZWhtCiAqIFdlYjogaHR0cDovL21lZGlhbGl6ZS5naXRodWIuaW8vVVJJLmpzLwogKgogKiBMaWNlbnNlZCB1bmRlcgogKiAgIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UKICoKICovKGZ1bmN0aW9uKHQsZSl7InVzZSBzdHJpY3QiO3R5cGVvZiBocD09Im9iamVjdCImJmhwLmV4cG9ydHM/aHAuZXhwb3J0cz1lKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6dC5TZWNvbmRMZXZlbERvbWFpbnM9ZSh0KX0pKFkxLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgZT10JiZ0LlNlY29uZExldmVsRG9tYWlucyxuPXtsaXN0OnthYzoiIGNvbSBnb3YgbWlsIG5ldCBvcmcgIixhZToiIGFjIGNvIGdvdiBtaWwgbmFtZSBuZXQgb3JnIHBybyBzY2ggIixhZjoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixhbDoiIGNvbSBlZHUgZ292IG1pbCBuZXQgb3JnICIsYW86IiBjbyBlZCBndiBpdCBvZyBwYiAiLGFyOiIgY29tIGVkdSBnb2IgZ292IGludCBtaWwgbmV0IG9yZyB0dXIgIixhdDoiIGFjIGNvIGd2IG9yICIsYXU6IiBhc24gY29tIGNzaXJvIGVkdSBnb3YgaWQgbmV0IG9yZyAiLGJhOiIgY28gY29tIGVkdSBnb3YgbWlsIG5ldCBvcmcgcnMgdW5iaSB1bm1vIHVuc2EgdW50eiB1bnplICIsYmI6IiBiaXogY28gY29tIGVkdSBnb3YgaW5mbyBuZXQgb3JnIHN0b3JlIHR2ICIsYmg6IiBiaXogY2MgY29tIGVkdSBnb3YgaW5mbyBuZXQgb3JnICIsYm46IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsYm86IiBjb20gZWR1IGdvYiBnb3YgaW50IG1pbCBuZXQgb3JnIHR2ICIsYnI6IiBhZG0gYWR2IGFnciBhbSBhcnEgYXJ0IGF0byBiIGJpbyBibG9nIGJtZCBjaW0gY25nIGNudCBjb20gY29vcCBlY24gZWR1IGVuZyBlc3AgZXRjIGV0aSBmYXIgZmxvZyBmbSBmbmQgZm90IGZzdCBnMTIgZ2dmIGdvdiBpbWIgaW5kIGluZiBqb3IganVzIGxlbCBtYXQgbWVkIG1pbCBtdXMgbmV0IG5vbSBub3QgbnRyIG9kbyBvcmcgcHBnIHBybyBwc2MgcHNpIHFzbCByZWMgc2xnIHNydiB0bXAgdHJkIHR1ciB0diB2ZXQgdmxvZyB3aWtpIHpsZyAiLGJzOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLGJ6OiIgZHUgZXQgb20gb3YgcmcgIixjYToiIGFiIGJjIG1iIG5iIG5mIG5sIG5zIG50IG51IG9uIHBlIHFjIHNrIHlrICIsY2s6IiBiaXogY28gZWR1IGdlbiBnb3YgaW5mbyBuZXQgb3JnICIsY246IiBhYyBhaCBiaiBjb20gY3EgZWR1IGZqIGdkIGdvdiBncyBneCBneiBoYSBoYiBoZSBoaSBobCBobiBqbCBqcyBqeCBsbiBtaWwgbmV0IG5tIG54IG9yZyBxaCBzYyBzZCBzaCBzbiBzeCB0aiB0dyB4aiB4eiB5biB6aiAiLGNvOiIgY29tIGVkdSBnb3YgbWlsIG5ldCBub20gb3JnICIsY3I6IiBhYyBjIGNvIGVkIGZpIGdvIG9yIHNhICIsY3k6IiBhYyBiaXogY29tIGVrbG9nZXMgZ292IGx0ZCBuYW1lIG5ldCBvcmcgcGFybGlhbWVudCBwcmVzcyBwcm8gdG0gIixkbzoiIGFydCBjb20gZWR1IGdvYiBnb3YgbWlsIG5ldCBvcmcgc2xkIHdlYiAiLGR6OiIgYXJ0IGFzc28gY29tIGVkdSBnb3YgbmV0IG9yZyBwb2wgIixlYzoiIGNvbSBlZHUgZmluIGdvdiBpbmZvIG1lZCBtaWwgbmV0IG9yZyBwcm8gIixlZzoiIGNvbSBlZHUgZXVuIGdvdiBtaWwgbmFtZSBuZXQgb3JnIHNjaSAiLGVyOiIgY29tIGVkdSBnb3YgaW5kIG1pbCBuZXQgb3JnIHJvY2hlc3QgdyAiLGVzOiIgY29tIGVkdSBnb2Igbm9tIG9yZyAiLGV0OiIgYml6IGNvbSBlZHUgZ292IGluZm8gbmFtZSBuZXQgb3JnICIsZmo6IiBhYyBiaXogY29tIGluZm8gbWlsIG5hbWUgbmV0IG9yZyBwcm8gIixmazoiIGFjIGNvIGdvdiBuZXQgbm9tIG9yZyAiLGZyOiIgYXNzbyBjb20gZiBnb3V2IG5vbSBwcmQgcHJlc3NlIHRtICIsZ2c6IiBjbyBuZXQgb3JnICIsZ2g6IiBjb20gZWR1IGdvdiBtaWwgb3JnICIsZ246IiBhYyBjb20gZ292IG5ldCBvcmcgIixncjoiIGNvbSBlZHUgZ292IG1pbCBuZXQgb3JnICIsZ3Q6IiBjb20gZWR1IGdvYiBpbmQgbWlsIG5ldCBvcmcgIixndToiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixoazoiIGNvbSBlZHUgZ292IGlkdiBuZXQgb3JnICIsaHU6IiAyMDAwIGFncmFyIGJvbHQgY2FzaW5vIGNpdHkgY28gZXJvdGljYSBlcm90aWthIGZpbG0gZm9ydW0gZ2FtZXMgaG90ZWwgaW5mbyBpbmdhdGxhbiBqb2dhc3oga29ueXZlbG8gbGFrYXMgbWVkaWEgbmV3cyBvcmcgcHJpdiByZWtsYW0gc2V4IHNob3Agc3BvcnQgc3VsaSBzemV4IHRtIHRvenNkZSB1dGF6YXMgdmlkZW8gIixpZDoiIGFjIGNvIGdvIG1pbCBuZXQgb3Igc2NoIHdlYiAiLGlsOiIgYWMgY28gZ292IGlkZiBrMTIgbXVuaSBuZXQgb3JnICIsaW46IiBhYyBjbyBlZHUgZXJuZXQgZmlybSBnZW4gZ292IGkgaW5kIG1pbCBuZXQgbmljIG9yZyByZXMgIixpcToiIGNvbSBlZHUgZ292IGkgbWlsIG5ldCBvcmcgIixpcjoiIGFjIGNvIGRuc3NlYyBnb3YgaSBpZCBuZXQgb3JnIHNjaCAiLGl0OiIgZWR1IGdvdiAiLGplOiIgY28gbmV0IG9yZyAiLGpvOiIgY29tIGVkdSBnb3YgbWlsIG5hbWUgbmV0IG9yZyBzY2ggIixqcDoiIGFjIGFkIGNvIGVkIGdvIGdyIGxnIG5lIG9yICIsa2U6IiBhYyBjbyBnbyBpbmZvIG1lIG1vYmkgbmUgb3Igc2MgIixraDoiIGNvbSBlZHUgZ292IG1pbCBuZXQgb3JnIHBlciAiLGtpOiIgYml6IGNvbSBkZSBlZHUgZ292IGluZm8gbW9iIG5ldCBvcmcgdGVsICIsa206IiBhc3NvIGNvbSBjb29wIGVkdSBnb3V2IGsgbWVkZWNpbiBtaWwgbm9tIG5vdGFpcmVzIHBoYXJtYWNpZW5zIHByZXNzZSB0bSB2ZXRlcmluYWlyZSAiLGtuOiIgZWR1IGdvdiBuZXQgb3JnICIsa3I6IiBhYyBidXNhbiBjaHVuZ2J1ayBjaHVuZ25hbSBjbyBkYWVndSBkYWVqZW9uIGVzIGdhbmd3b24gZ28gZ3dhbmdqdSBneWVvbmdidWsgZ3llb25nZ2kgZ3llb25nbmFtIGhzIGluY2hlb24gamVqdSBqZW9uYnVrIGplb25uYW0gayBrZyBtaWwgbXMgbmUgb3IgcGUgcmUgc2Mgc2VvdWwgdWxzYW4gIixrdzoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixreToiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixrejoiIGNvbSBlZHUgZ292IG1pbCBuZXQgb3JnICIsbGI6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsbGs6IiBhc3NuIGNvbSBlZHUgZ292IGdycCBob3RlbCBpbnQgbHRkIG5ldCBuZ28gb3JnIHNjaCBzb2Mgd2ViICIsbHI6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsbHY6IiBhc24gY29tIGNvbmYgZWR1IGdvdiBpZCBtaWwgbmV0IG9yZyAiLGx5OiIgY29tIGVkdSBnb3YgaWQgbWVkIG5ldCBvcmcgcGxjIHNjaCAiLG1hOiIgYWMgY28gZ292IG0gbmV0IG9yZyBwcmVzcyAiLG1jOiIgYXNzbyB0bSAiLG1lOiIgYWMgY28gZWR1IGdvdiBpdHMgbmV0IG9yZyBwcml2ICIsbWc6IiBjb20gZWR1IGdvdiBtaWwgbm9tIG9yZyBwcmQgdG0gIixtazoiIGNvbSBlZHUgZ292IGluZiBuYW1lIG5ldCBvcmcgcHJvICIsbWw6IiBjb20gZWR1IGdvdiBuZXQgb3JnIHByZXNzZSAiLG1uOiIgZWR1IGdvdiBvcmcgIixtbzoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixtdDoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixtdjoiIGFlcm8gYml6IGNvbSBjb29wIGVkdSBnb3YgaW5mbyBpbnQgbWlsIG11c2V1bSBuYW1lIG5ldCBvcmcgcHJvICIsbXc6IiBhYyBjbyBjb20gY29vcCBlZHUgZ292IGludCBtdXNldW0gbmV0IG9yZyAiLG14OiIgY29tIGVkdSBnb2IgbmV0IG9yZyAiLG15OiIgY29tIGVkdSBnb3YgbWlsIG5hbWUgbmV0IG9yZyBzY2ggIixuZjoiIGFydHMgY29tIGZpcm0gaW5mbyBuZXQgb3RoZXIgcGVyIHJlYyBzdG9yZSB3ZWIgIixuZzoiIGJpeiBjb20gZWR1IGdvdiBtaWwgbW9iaSBuYW1lIG5ldCBvcmcgc2NoICIsbmk6IiBhYyBjbyBjb20gZWR1IGdvYiBtaWwgbmV0IG5vbSBvcmcgIixucDoiIGNvbSBlZHUgZ292IG1pbCBuZXQgb3JnICIsbnI6IiBiaXogY29tIGVkdSBnb3YgaW5mbyBuZXQgb3JnICIsb206IiBhYyBiaXogY28gY29tIGVkdSBnb3YgbWVkIG1pbCBtdXNldW0gbmV0IG9yZyBwcm8gc2NoICIscGU6IiBjb20gZWR1IGdvYiBtaWwgbmV0IG5vbSBvcmcgc2xkICIscGg6IiBjb20gZWR1IGdvdiBpIG1pbCBuZXQgbmdvIG9yZyAiLHBrOiIgYml6IGNvbSBlZHUgZmFtIGdvYiBnb2sgZ29uIGdvcCBnb3MgZ292IG5ldCBvcmcgd2ViICIscGw6IiBhcnQgYmlhbHlzdG9rIGJpeiBjb20gZWR1IGdkYSBnZGFuc2sgZ29yem93IGdvdiBpbmZvIGthdG93aWNlIGtyYWtvdyBsb2R6IGx1YmxpbiBtaWwgbmV0IG5nbyBvbHN6dHluIG9yZyBwb3puYW4gcHdyIHJhZG9tIHNsdXBzayBzemN6ZWNpbiB0b3J1biB3YXJzemF3YSB3YXcgd3JvYyB3cm9jbGF3IHpnb3JhICIscHI6IiBhYyBiaXogY29tIGVkdSBlc3QgZ292IGluZm8gaXNsYSBuYW1lIG5ldCBvcmcgcHJvIHByb2YgIixwczoiIGNvbSBlZHUgZ292IG5ldCBvcmcgcGxvIHNlYyAiLHB3OiIgYmVsYXUgY28gZWQgZ28gbmUgb3IgIixybzoiIGFydHMgY29tIGZpcm0gaW5mbyBub20gbnQgb3JnIHJlYyBzdG9yZSB0bSB3d3cgIixyczoiIGFjIGNvIGVkdSBnb3YgaW4gb3JnICIsc2I6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsc2M6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsc2g6IiBjbyBjb20gZWR1IGdvdiBuZXQgbm9tIG9yZyAiLHNsOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLHN0OiIgY28gY29tIGNvbnN1bGFkbyBlZHUgZW1iYWl4YWRhIGdvdiBtaWwgbmV0IG9yZyBwcmluY2lwZSBzYW90b21lIHN0b3JlICIsc3Y6IiBjb20gZWR1IGdvYiBvcmcgcmVkICIsc3o6IiBhYyBjbyBvcmcgIix0cjoiIGF2IGJicyBiZWwgYml6IGNvbSBkciBlZHUgZ2VuIGdvdiBpbmZvIGsxMiBuYW1lIG5ldCBvcmcgcG9sIHRlbCB0c2sgdHYgd2ViICIsdHQ6IiBhZXJvIGJpeiBjYXQgY28gY29tIGNvb3AgZWR1IGdvdiBpbmZvIGludCBqb2JzIG1pbCBtb2JpIG11c2V1bSBuYW1lIG5ldCBvcmcgcHJvIHRlbCB0cmF2ZWwgIix0dzoiIGNsdWIgY29tIGViaXogZWR1IGdhbWUgZ292IGlkdiBtaWwgbmV0IG9yZyAiLG11OiIgYWMgY28gY29tIGdvdiBuZXQgb3Igb3JnICIsbXo6IiBhYyBjbyBlZHUgZ292IG9yZyAiLG5hOiIgY28gY29tICIsbno6IiBhYyBjbyBjcmkgZ2VlayBnZW4gZ292dCBoZWFsdGggaXdpIG1hb3JpIG1pbCBuZXQgb3JnIHBhcmxpYW1lbnQgc2Nob29sICIscGE6IiBhYm8gYWMgY29tIGVkdSBnb2IgaW5nIG1lZCBuZXQgbm9tIG9yZyBzbGQgIixwdDoiIGNvbSBlZHUgZ292IGludCBuZXQgbm9tZSBvcmcgcHVibCAiLHB5OiIgY29tIGVkdSBnb3YgbWlsIG5ldCBvcmcgIixxYToiIGNvbSBlZHUgZ292IG1pbCBuZXQgb3JnICIscmU6IiBhc3NvIGNvbSBub20gIixydToiIGFjIGFkeWdleWEgYWx0YWkgYW11ciBhcmtoYW5nZWxzayBhc3RyYWtoYW4gYmFzaGtpcmlhIGJlbGdvcm9kIGJpciBicnlhbnNrIGJ1cnlhdGlhIGNiZyBjaGVsIGNoZWx5YWJpbnNrIGNoaXRhIGNodWtvdGthIGNodXZhc2hpYSBjb20gZGFnZXN0YW4gZS1idXJnIGVkdSBnb3YgZ3Jvem55IGludCBpcmt1dHNrIGl2YW5vdm8gaXpoZXZzayBqYXIgam9zaGthci1vbGEga2FsbXlraWEga2FsdWdhIGthbWNoYXRrYSBrYXJlbGlhIGthemFuIGtjaHIga2VtZXJvdm8ga2hhYmFyb3ZzayBraGFrYXNzaWEga2h2IGtpcm92IGtvZW5pZyBrb21pIGtvc3Ryb21hIGtyYW5veWFyc2sga3ViYW4ga3VyZ2FuIGt1cnNrIGxpcGV0c2sgbWFnYWRhbiBtYXJpIG1hcmktZWwgbWFyaW5lIG1pbCBtb3Jkb3ZpYSBtb3NyZWcgbXNrIG11cm1hbnNrIG5hbGNoaWsgbmV0IG5ub3Ygbm92IG5vdm9zaWJpcnNrIG5zayBvbXNrIG9yZW5idXJnIG9yZyBvcnlvbCBwZW56YSBwZXJtIHBwIHBza292IHB0eiBybmQgcnlhemFuIHNha2hhbGluIHNhbWFyYSBzYXJhdG92IHNpbWJpcnNrIHNtb2xlbnNrIHNwYiBzdGF2cm9wb2wgc3R2IHN1cmd1dCB0YW1ib3YgdGF0YXJzdGFuIHRvbSB0b21zayB0c2FyaXRzeW4gdHNrIHR1bGEgdHV2YSB0dmVyIHR5dW1lbiB1ZG0gdWRtdXJ0aWEgdWxhbi11ZGUgdmxhZGlrYXZrYXogdmxhZGltaXIgdmxhZGl2b3N0b2sgdm9sZ29ncmFkIHZvbG9nZGEgdm9yb25lemggdnJuIHZ5YXRrYSB5YWt1dGlhIHlhbWFsIHlla2F0ZXJpbmJ1cmcgeXV6aG5vLXNha2hhbGluc2sgIixydzoiIGFjIGNvIGNvbSBlZHUgZ291diBnb3YgaW50IG1pbCBuZXQgIixzYToiIGNvbSBlZHUgZ292IG1lZCBuZXQgb3JnIHB1YiBzY2ggIixzZDoiIGNvbSBlZHUgZ292IGluZm8gbWVkIG5ldCBvcmcgdHYgIixzZToiIGEgYWMgYiBiZCBjIGQgZSBmIGcgaCBpIGsgbCBtIG4gbyBvcmcgcCBwYXJ0aSBwcCBwcmVzcyByIHMgdCB0bSB1IHcgeCB5IHogIixzZzoiIGNvbSBlZHUgZ292IGlkbiBuZXQgb3JnIHBlciAiLHNuOiIgYXJ0IGNvbSBlZHUgZ291diBvcmcgcGVyc28gdW5pdiAiLHN5OiIgY29tIGVkdSBnb3YgbWlsIG5ldCBuZXdzIG9yZyAiLHRoOiIgYWMgY28gZ28gaW4gbWkgbmV0IG9yICIsdGo6IiBhYyBiaXogY28gY29tIGVkdSBnbyBnb3YgaW5mbyBpbnQgbWlsIG5hbWUgbmV0IG5pYyBvcmcgdGVzdCB3ZWIgIix0bjoiIGFncmluZXQgY29tIGRlZmVuc2UgZWR1bmV0IGVucyBmaW4gZ292IGluZCBpbmZvIGludGwgbWluY29tIG5hdCBuZXQgb3JnIHBlcnNvIHJucnQgcm5zIHJudSB0b3VyaXNtICIsdHo6IiBhYyBjbyBnbyBuZSBvciAiLHVhOiIgYml6IGNoZXJrYXNzeSBjaGVybmlnb3YgY2hlcm5vdnRzeSBjayBjbiBjbyBjb20gY3JpbWVhIGN2IGRuIGRuZXByb3BldHJvdnNrIGRvbmV0c2sgZHAgZWR1IGdvdiBpZiBpbiBpdmFuby1mcmFua2l2c2sga2gga2hhcmtvdiBraGVyc29uIGtobWVsbml0c2tpeSBraWV2IGtpcm92b2dyYWQga20ga3Iga3Mga3YgbGcgbHVnYW5zayBsdXRzayBsdml2IG1lIG1rIG5ldCBuaWtvbGFldiBvZCBvZGVzc2Egb3JnIHBsIHBvbHRhdmEgcHAgcm92bm8gcnYgc2ViYXN0b3BvbCBzdW15IHRlIHRlcm5vcGlsIHV6aGdvcm9kIHZpbm5pY2Egdm4gemFwb3Jpemh6aGUgemhpdG9taXIgenAgenQgIix1ZzoiIGFjIGNvIGdvIG5lIG9yIG9yZyBzYyAiLHVrOiIgYWMgYmwgYnJpdGlzaC1saWJyYXJ5IGNvIGN5bSBnb3YgZ292dCBpY25ldCBqZXQgbGVhIGx0ZCBtZSBtaWwgbW9kIG5hdGlvbmFsLWxpYnJhcnktc2NvdGxhbmQgbmVsIG5ldCBuaHMgbmljIG5scyBvcmcgb3JnbiBwYXJsaWFtZW50IHBsYyBwb2xpY2Ugc2NoIHNjb3Qgc29jICIsdXM6IiBkbmkgZmVkIGlzYSBraWRzIG5zbiAiLHV5OiIgY29tIGVkdSBndWIgbWlsIG5ldCBvcmcgIix2ZToiIGNvIGNvbSBlZHUgZ29iIGluZm8gbWlsIG5ldCBvcmcgd2ViICIsdmk6IiBjbyBjb20gazEyIG5ldCBvcmcgIix2bjoiIGFjIGJpeiBjb20gZWR1IGdvdiBoZWFsdGggaW5mbyBpbnQgbmFtZSBuZXQgb3JnIHBybyAiLHllOiIgY28gY29tIGdvdiBsdGQgbWUgbmV0IG9yZyBwbGMgIix5dToiIGFjIGNvIGVkdSBnb3Ygb3JnICIsemE6IiBhYyBhZ3JpYyBhbHQgYm91cnNlIGNpdHkgY28gY3liZXJuZXQgZGIgZWR1IGdvdiBncm9uZGFyIGlhY2Nlc3MgaW10IGluY2EgbGFuZGVzaWduIGxhdyBtaWwgbmV0IG5nbyBuaXMgbm9tIG9saXZldHRpIG9yZyBwaXggc2Nob29sIHRtIHdlYiAiLHptOiIgYWMgY28gY29tIGVkdSBnb3YgbmV0IG9yZyBzY2ggIixjb206ImFyIGJyIGNuIGRlIGV1IGdiIGdyIGh1IGpwbiBrciBubyBxYyBydSBzYSBzZSB1ayB1cyB1eSB6YSAiLG5ldDoiZ2IganAgc2UgdWsgIixvcmc6ImFlIixkZToiY29tICJ9LGhhczpmdW5jdGlvbihvKXt2YXIgcj1vLmxhc3RJbmRleE9mKCIuIik7aWYocjw9MHx8cj49by5sZW5ndGgtMSlyZXR1cm4hMTt2YXIgaT1vLmxhc3RJbmRleE9mKCIuIixyLTEpO2lmKGk8PTB8fGk+PXItMSlyZXR1cm4hMTt2YXIgcz1uLmxpc3Rbby5zbGljZShyKzEpXTtyZXR1cm4gcz9zLmluZGV4T2YoIiAiK28uc2xpY2UoaSsxLHIpKyIgIik+PTA6ITF9LGlzOmZ1bmN0aW9uKG8pe3ZhciByPW8ubGFzdEluZGV4T2YoIi4iKTtpZihyPD0wfHxyPj1vLmxlbmd0aC0xKXJldHVybiExO3ZhciBpPW8ubGFzdEluZGV4T2YoIi4iLHItMSk7aWYoaT49MClyZXR1cm4hMTt2YXIgcz1uLmxpc3Rbby5zbGljZShyKzEpXTtyZXR1cm4gcz9zLmluZGV4T2YoIiAiK28uc2xpY2UoMCxyKSsiICIpPj0wOiExfSxnZXQ6ZnVuY3Rpb24obyl7dmFyIHI9by5sYXN0SW5kZXhPZigiLiIpO2lmKHI8PTB8fHI+PW8ubGVuZ3RoLTEpcmV0dXJuIG51bGw7dmFyIGk9by5sYXN0SW5kZXhPZigiLiIsci0xKTtpZihpPD0wfHxpPj1yLTEpcmV0dXJuIG51bGw7dmFyIHM9bi5saXN0W28uc2xpY2UocisxKV07cmV0dXJuIXN8fHMuaW5kZXhPZigiICIrby5zbGljZShpKzEscikrIiAiKTwwP251bGw6by5zbGljZShpKzEpfSxub0NvbmZsaWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuU2Vjb25kTGV2ZWxEb21haW5zPT09dGhpcyYmKHQuU2Vjb25kTGV2ZWxEb21haW5zPWUpLHRoaXN9fTtyZXR1cm4gbn0pfSk7dmFyIEhzPVVuKChaMSxfcCk9PnsvKiEKICogVVJJLmpzIC0gTXV0YXRpbmcgVVJMcwogKgogKiBWZXJzaW9uOiAxLjE5LjExCiAqCiAqIEF1dGhvcjogUm9kbmV5IFJlaG0KICogV2ViOiBodHRwOi8vbWVkaWFsaXplLmdpdGh1Yi5pby9VUkkuanMvCiAqCiAqIExpY2Vuc2VkIHVuZGVyCiAqICAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZQogKgogKi8oZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7dHlwZW9mIF9wPT0ib2JqZWN0IiYmX3AuZXhwb3J0cz9fcC5leHBvcnRzPWUoSzEoKSxYMSgpLCQxKCkpOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKFsiLi9wdW55Y29kZSIsIi4vSVB2NiIsIi4vU2Vjb25kTGV2ZWxEb21haW5zIl0sZSk6dC5VUkk9ZSh0LnB1bnljb2RlLHQuSVB2Nix0LlNlY29uZExldmVsRG9tYWlucyx0KX0pKFoxLGZ1bmN0aW9uKHQsZSxuLG8peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1vJiZvLlVSSTtmdW5jdGlvbiBpKEEsUyl7dmFyIFA9YXJndW1lbnRzLmxlbmd0aD49MSxGPWFyZ3VtZW50cy5sZW5ndGg+PTI7aWYoISh0aGlzIGluc3RhbmNlb2YgaSkpcmV0dXJuIFA/Rj9uZXcgaShBLFMpOm5ldyBpKEEpOm5ldyBpO2lmKEE9PT12b2lkIDApe2lmKFApdGhyb3cgbmV3IFR5cGVFcnJvcigidW5kZWZpbmVkIGlzIG5vdCBhIHZhbGlkIGFyZ3VtZW50IGZvciBVUkkiKTt0eXBlb2YgbG9jYXRpb248InUiP0E9bG9jYXRpb24uaHJlZisiIjpBPSIifWlmKEE9PT1udWxsJiZQKXRocm93IG5ldyBUeXBlRXJyb3IoIm51bGwgaXMgbm90IGEgdmFsaWQgYXJndW1lbnQgZm9yIFVSSSIpO3JldHVybiB0aGlzLmhyZWYoQSksUyE9PXZvaWQgMD90aGlzLmFic29sdXRlVG8oUyk6dGhpc31mdW5jdGlvbiBzKEEpe3JldHVybi9eWzAtOV0rJC8udGVzdChBKX1pLnZlcnNpb249IjEuMTkuMTEiO3ZhciBmPWkucHJvdG90eXBlLHU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBjKEEpe3JldHVybiBBLnJlcGxhY2UoLyhbLiorP149IToke30oKXxbXF1cL1xcXSkvZywiXFwkMSIpfWZ1bmN0aW9uIGwoQSl7cmV0dXJuIEE9PT12b2lkIDA/IlVuZGVmaW5lZCI6U3RyaW5nKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChBKSkuc2xpY2UoOCwtMSl9ZnVuY3Rpb24gcChBKXtyZXR1cm4gbChBKT09PSJBcnJheSJ9ZnVuY3Rpb24gZChBLFMpe3ZhciBQPXt9LEYsajtpZihsKFMpPT09IlJlZ0V4cCIpUD1udWxsO2Vsc2UgaWYocChTKSlmb3IoRj0wLGo9Uy5sZW5ndGg7RjxqO0YrKylQW1NbRl1dPSEwO2Vsc2UgUFtTXT0hMDtmb3IoRj0wLGo9QS5sZW5ndGg7RjxqO0YrKyl7dmFyIEg9UCYmUFtBW0ZdXSE9PXZvaWQgMHx8IVAmJlMudGVzdChBW0ZdKTtIJiYoQS5zcGxpY2UoRiwxKSxqLS0sRi0tKX1yZXR1cm4gQX1mdW5jdGlvbiBtKEEsUyl7dmFyIFAsRjtpZihwKFMpKXtmb3IoUD0wLEY9Uy5sZW5ndGg7UDxGO1ArKylpZighbShBLFNbUF0pKXJldHVybiExO3JldHVybiEwfXZhciBqPWwoUyk7Zm9yKFA9MCxGPUEubGVuZ3RoO1A8RjtQKyspaWYoaj09PSJSZWdFeHAiKXtpZih0eXBlb2YgQVtQXT09InN0cmluZyImJkFbUF0ubWF0Y2goUykpcmV0dXJuITB9ZWxzZSBpZihBW1BdPT09UylyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBfKEEsUyl7aWYoIXAoQSl8fCFwKFMpfHxBLmxlbmd0aCE9PVMubGVuZ3RoKXJldHVybiExO0Euc29ydCgpLFMuc29ydCgpO2Zvcih2YXIgUD0wLEY9QS5sZW5ndGg7UDxGO1ArKylpZihBW1BdIT09U1tQXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBnKEEpe3ZhciBTPS9eXC8rfFwvKyQvZztyZXR1cm4gQS5yZXBsYWNlKFMsIiIpfWkuX3BhcnRzPWZ1bmN0aW9uKCl7cmV0dXJue3Byb3RvY29sOm51bGwsdXNlcm5hbWU6bnVsbCxwYXNzd29yZDpudWxsLGhvc3RuYW1lOm51bGwsdXJuOm51bGwscG9ydDpudWxsLHBhdGg6bnVsbCxxdWVyeTpudWxsLGZyYWdtZW50Om51bGwscHJldmVudEludmFsaWRIb3N0bmFtZTppLnByZXZlbnRJbnZhbGlkSG9zdG5hbWUsZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzOmkuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLGVzY2FwZVF1ZXJ5U3BhY2U6aS5lc2NhcGVRdWVyeVNwYWNlfX0saS5wcmV2ZW50SW52YWxpZEhvc3RuYW1lPSExLGkuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzPSExLGkuZXNjYXBlUXVlcnlTcGFjZT0hMCxpLnByb3RvY29sX2V4cHJlc3Npb249L15bYS16XVthLXowLTkuKy1dKiQvaSxpLmlkbl9leHByZXNzaW9uPS9bXmEtejAtOVwuXy1dL2ksaS5wdW55Y29kZV9leHByZXNzaW9uPS8oeG4tLSkvaSxpLmlwNF9leHByZXNzaW9uPS9eXGR7MSwzfVwuXGR7MSwzfVwuXGR7MSwzfVwuXGR7MSwzfSQvLGkuaXA2X2V4cHJlc3Npb249L15ccyooKChbMC05QS1GYS1mXXsxLDR9Oil7N30oWzAtOUEtRmEtZl17MSw0fXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7Nn0oOlswLTlBLUZhLWZdezEsNH18KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXs1fSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDJ9KXw6KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXs0fSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDN9KXwoKDpbMC05QS1GYS1mXXsxLDR9KT86KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7M30oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw0fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCwyfTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXsyfSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDV9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDN9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezF9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsNn0pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsNH06KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KDooKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw3fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCw1fTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKSkoJS4rKT9ccyokLyxpLmZpbmRfdXJpX2V4cHJlc3Npb249L1xiKCg/OlthLXpdW1x3LV0rOig/OlwvezEsM318W2EtejAtOSVdKXx3d3dcZHswLDN9Wy5dfFthLXowLTkuXC1dK1suXVthLXpdezIsNH1cLykoPzpbXlxzKCk8Pl0rfFwoKFteXHMoKTw+XSt8KFwoW15ccygpPD5dK1wpKSkqXCkpKyg/OlwoKFteXHMoKTw+XSt8KFwoW15ccygpPD5dK1wpKSkqXCl8W15cc2AhKClcW1xde307OiciLiw8Pj/Cq8K74oCc4oCd4oCY4oCZXSkpL2lnLGkuZmluZFVyaT17c3RhcnQ6L1xiKD86KFthLXpdW2EtejAtOS4rLV0qOlwvXC8pfHd3d1wuKS9naSxlbmQ6L1tcc1xyXG5dfCQvLHRyaW06L1tgISgpXFtcXXt9OzonIi4sPD4/wqvCu+KAnOKAneKAnuKAmOKAmV0rJC8scGFyZW5zOi8oXChbXlwpXSpcKXxcW1teXF1dKlxdfFx7W159XSpcfXw8W14+XSo+KS9nfSxpLmxlYWRpbmdfd2hpdGVzcGFjZV9leHByZXNzaW9uPS9eW1x4MDAtXHgyMFx1MDBhMFx1MTY4MFx1MjAwMC1cdTIwMGFcdTIwMjhcdTIwMjlcdTIwMmZcdTIwNWZcdTMwMDBcdWZlZmZdKy8saS5hc2NpaV90YWJfd2hpdGVzcGFjZT0vW1x1MDAwOVx1MDAwQVx1MDAwRF0rL2csaS5kZWZhdWx0UG9ydHM9e2h0dHA6IjgwIixodHRwczoiNDQzIixmdHA6IjIxIixnb3BoZXI6IjcwIix3czoiODAiLHdzczoiNDQzIn0saS5ob3N0UHJvdG9jb2xzPVsiaHR0cCIsImh0dHBzIl0saS5pbnZhbGlkX2hvc3RuYW1lX2NoYXJhY3RlcnM9L1teYS16QS1aMC05XC5cLTpfXS8saS5kb21BdHRyaWJ1dGVzPXthOiJocmVmIixibG9ja3F1b3RlOiJjaXRlIixsaW5rOiJocmVmIixiYXNlOiJocmVmIixzY3JpcHQ6InNyYyIsZm9ybToiYWN0aW9uIixpbWc6InNyYyIsYXJlYToiaHJlZiIsaWZyYW1lOiJzcmMiLGVtYmVkOiJzcmMiLHNvdXJjZToic3JjIix0cmFjazoic3JjIixpbnB1dDoic3JjIixhdWRpbzoic3JjIix2aWRlbzoic3JjIn0saS5nZXREb21BdHRyaWJ1dGU9ZnVuY3Rpb24oQSl7aWYoISghQXx8IUEubm9kZU5hbWUpKXt2YXIgUz1BLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoIShTPT09ImlucHV0IiYmQS50eXBlIT09ImltYWdlIikpcmV0dXJuIGkuZG9tQXR0cmlidXRlc1tTXX19O2Z1bmN0aW9uIGIoQSl7cmV0dXJuIGVzY2FwZShBKX1mdW5jdGlvbiBPKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyEnKCkqXS9nLGIpLnJlcGxhY2UoL1wqL2csIiUyQSIpfWkuZW5jb2RlPU8saS5kZWNvZGU9ZGVjb2RlVVJJQ29tcG9uZW50LGkuaXNvODg1OT1mdW5jdGlvbigpe2kuZW5jb2RlPWVzY2FwZSxpLmRlY29kZT11bmVzY2FwZX0saS51bmljb2RlPWZ1bmN0aW9uKCl7aS5lbmNvZGU9TyxpLmRlY29kZT1kZWNvZGVVUklDb21wb25lbnR9LGkuY2hhcmFjdGVycz17cGF0aG5hbWU6e2VuY29kZTp7ZXhwcmVzc2lvbjovJSgyNHwyNnwyQnwyQ3wzQnwzRHwzQXw0MCkvaWcsbWFwOnsiJTI0IjoiJCIsIiUyNiI6IiYiLCIlMkIiOiIrIiwiJTJDIjoiLCIsIiUzQiI6IjsiLCIlM0QiOiI9IiwiJTNBIjoiOiIsIiU0MCI6IkAifX0sZGVjb2RlOntleHByZXNzaW9uOi9bXC9cPyNdL2csbWFwOnsiLyI6IiUyRiIsIj8iOiIlM0YiLCIjIjoiJTIzIn19fSxyZXNlcnZlZDp7ZW5jb2RlOntleHByZXNzaW9uOi8lKDIxfDIzfDI0fDI2fDI3fDI4fDI5fDJBfDJCfDJDfDJGfDNBfDNCfDNEfDNGfDQwfDVCfDVEKS9pZyxtYXA6eyIlM0EiOiI6IiwiJTJGIjoiLyIsIiUzRiI6Ij8iLCIlMjMiOiIjIiwiJTVCIjoiWyIsIiU1RCI6Il0iLCIlNDAiOiJAIiwiJTIxIjoiISIsIiUyNCI6IiQiLCIlMjYiOiImIiwiJTI3IjoiJyIsIiUyOCI6IigiLCIlMjkiOiIpIiwiJTJBIjoiKiIsIiUyQiI6IisiLCIlMkMiOiIsIiwiJTNCIjoiOyIsIiUzRCI6Ij0ifX19LHVybnBhdGg6e2VuY29kZTp7ZXhwcmVzc2lvbjovJSgyMXwyNHwyN3wyOHwyOXwyQXwyQnwyQ3wzQnwzRHw0MCkvaWcsbWFwOnsiJTIxIjoiISIsIiUyNCI6IiQiLCIlMjciOiInIiwiJTI4IjoiKCIsIiUyOSI6IikiLCIlMkEiOiIqIiwiJTJCIjoiKyIsIiUyQyI6IiwiLCIlM0IiOiI7IiwiJTNEIjoiPSIsIiU0MCI6IkAifX0sZGVjb2RlOntleHByZXNzaW9uOi9bXC9cPyM6XS9nLG1hcDp7Ii8iOiIlMkYiLCI/IjoiJTNGIiwiIyI6IiUyMyIsIjoiOiIlM0EifX19fSxpLmVuY29kZVF1ZXJ5PWZ1bmN0aW9uKEEsUyl7dmFyIFA9aS5lbmNvZGUoQSsiIik7cmV0dXJuIFM9PT12b2lkIDAmJihTPWkuZXNjYXBlUXVlcnlTcGFjZSksUz9QLnJlcGxhY2UoLyUyMC9nLCIrIik6UH0saS5kZWNvZGVRdWVyeT1mdW5jdGlvbihBLFMpe0ErPSIiLFM9PT12b2lkIDAmJihTPWkuZXNjYXBlUXVlcnlTcGFjZSk7dHJ5e3JldHVybiBpLmRlY29kZShTP0EucmVwbGFjZSgvXCsvZywiJTIwIik6QSl9Y2F0Y2h7cmV0dXJuIEF9fTt2YXIgVD17ZW5jb2RlOiJlbmNvZGUiLGRlY29kZToiZGVjb2RlIn0sRSx3PWZ1bmN0aW9uKEEsUyl7cmV0dXJuIGZ1bmN0aW9uKFApe3RyeXtyZXR1cm4gaVtTXShQKyIiKS5yZXBsYWNlKGkuY2hhcmFjdGVyc1tBXVtTXS5leHByZXNzaW9uLGZ1bmN0aW9uKEYpe3JldHVybiBpLmNoYXJhY3RlcnNbQV1bU10ubWFwW0ZdfSl9Y2F0Y2h7cmV0dXJuIFB9fX07Zm9yKEUgaW4gVClpW0UrIlBhdGhTZWdtZW50Il09dygicGF0aG5hbWUiLFRbRV0pLGlbRSsiVXJuUGF0aFNlZ21lbnQiXT13KCJ1cm5wYXRoIixUW0VdKTt2YXIgQz1mdW5jdGlvbihBLFMsUCl7cmV0dXJuIGZ1bmN0aW9uKEYpe3ZhciBqO1A/aj1mdW5jdGlvbihYKXtyZXR1cm4gaVtTXShpW1BdKFgpKX06aj1pW1NdO2Zvcih2YXIgSD0oRisiIikuc3BsaXQoQSksaz0wLEs9SC5sZW5ndGg7azxLO2srKylIW2tdPWooSFtrXSk7cmV0dXJuIEguam9pbihBKX19O2kuZGVjb2RlUGF0aD1DKCIvIiwiZGVjb2RlUGF0aFNlZ21lbnQiKSxpLmRlY29kZVVyblBhdGg9QygiOiIsImRlY29kZVVyblBhdGhTZWdtZW50IiksaS5yZWNvZGVQYXRoPUMoIi8iLCJlbmNvZGVQYXRoU2VnbWVudCIsImRlY29kZSIpLGkucmVjb2RlVXJuUGF0aD1DKCI6IiwiZW5jb2RlVXJuUGF0aFNlZ21lbnQiLCJkZWNvZGUiKSxpLmVuY29kZVJlc2VydmVkPXcoInJlc2VydmVkIiwiZW5jb2RlIiksaS5wYXJzZT1mdW5jdGlvbihBLFMpe3ZhciBQO3JldHVybiBTfHwoUz17cHJldmVudEludmFsaWRIb3N0bmFtZTppLnByZXZlbnRJbnZhbGlkSG9zdG5hbWV9KSxBPUEucmVwbGFjZShpLmxlYWRpbmdfd2hpdGVzcGFjZV9leHByZXNzaW9uLCIiKSxBPUEucmVwbGFjZShpLmFzY2lpX3RhYl93aGl0ZXNwYWNlLCIiKSxQPUEuaW5kZXhPZigiIyIpLFA+LTEmJihTLmZyYWdtZW50PUEuc3Vic3RyaW5nKFArMSl8fG51bGwsQT1BLnN1YnN0cmluZygwLFApKSxQPUEuaW5kZXhPZigiPyIpLFA+LTEmJihTLnF1ZXJ5PUEuc3Vic3RyaW5nKFArMSl8fG51bGwsQT1BLnN1YnN0cmluZygwLFApKSxBPUEucmVwbGFjZSgvXihodHRwcz98ZnRwfHdzcz8pPzorWy9cXF0qL2ksIiQxOi8vIiksQT1BLnJlcGxhY2UoL15bL1xcXXsyLH0vaSwiLy8iKSxBLnN1YnN0cmluZygwLDIpPT09Ii8vIj8oUy5wcm90b2NvbD1udWxsLEE9QS5zdWJzdHJpbmcoMiksQT1pLnBhcnNlQXV0aG9yaXR5KEEsUykpOihQPUEuaW5kZXhPZigiOiIpLFA+LTEmJihTLnByb3RvY29sPUEuc3Vic3RyaW5nKDAsUCl8fG51bGwsUy5wcm90b2NvbCYmIVMucHJvdG9jb2wubWF0Y2goaS5wcm90b2NvbF9leHByZXNzaW9uKT9TLnByb3RvY29sPXZvaWQgMDpBLnN1YnN0cmluZyhQKzEsUCszKS5yZXBsYWNlKC9cXC9nLCIvIik9PT0iLy8iPyhBPUEuc3Vic3RyaW5nKFArMyksQT1pLnBhcnNlQXV0aG9yaXR5KEEsUykpOihBPUEuc3Vic3RyaW5nKFArMSksUy51cm49ITApKSksUy5wYXRoPUEsU30saS5wYXJzZUhvc3Q9ZnVuY3Rpb24oQSxTKXtBfHwoQT0iIiksQT1BLnJlcGxhY2UoL1xcL2csIi8iKTt2YXIgUD1BLmluZGV4T2YoIi8iKSxGLGo7aWYoUD09PS0xJiYoUD1BLmxlbmd0aCksQS5jaGFyQXQoMCk9PT0iWyIpRj1BLmluZGV4T2YoIl0iKSxTLmhvc3RuYW1lPUEuc3Vic3RyaW5nKDEsRil8fG51bGwsUy5wb3J0PUEuc3Vic3RyaW5nKEYrMixQKXx8bnVsbCxTLnBvcnQ9PT0iLyImJihTLnBvcnQ9bnVsbCk7ZWxzZXt2YXIgSD1BLmluZGV4T2YoIjoiKSxrPUEuaW5kZXhPZigiLyIpLEs9QS5pbmRleE9mKCI6IixIKzEpO0shPT0tMSYmKGs9PT0tMXx8SzxrKT8oUy5ob3N0bmFtZT1BLnN1YnN0cmluZygwLFApfHxudWxsLFMucG9ydD1udWxsKTooaj1BLnN1YnN0cmluZygwLFApLnNwbGl0KCI6IiksUy5ob3N0bmFtZT1qWzBdfHxudWxsLFMucG9ydD1qWzFdfHxudWxsKX1yZXR1cm4gUy5ob3N0bmFtZSYmQS5zdWJzdHJpbmcoUCkuY2hhckF0KDApIT09Ii8iJiYoUCsrLEE9Ii8iK0EpLFMucHJldmVudEludmFsaWRIb3N0bmFtZSYmaS5lbnN1cmVWYWxpZEhvc3RuYW1lKFMuaG9zdG5hbWUsUy5wcm90b2NvbCksUy5wb3J0JiZpLmVuc3VyZVZhbGlkUG9ydChTLnBvcnQpLEEuc3Vic3RyaW5nKFApfHwiLyJ9LGkucGFyc2VBdXRob3JpdHk9ZnVuY3Rpb24oQSxTKXtyZXR1cm4gQT1pLnBhcnNlVXNlcmluZm8oQSxTKSxpLnBhcnNlSG9zdChBLFMpfSxpLnBhcnNlVXNlcmluZm89ZnVuY3Rpb24oQSxTKXt2YXIgUD1BLEY9QS5pbmRleE9mKCJcXCIpO0YhPT0tMSYmKEE9QS5yZXBsYWNlKC9cXC9nLCIvIikpO3ZhciBqPUEuaW5kZXhPZigiLyIpLEg9QS5sYXN0SW5kZXhPZigiQCIsaj4tMT9qOkEubGVuZ3RoLTEpLGs7cmV0dXJuIEg+LTEmJihqPT09LTF8fEg8aik/KGs9QS5zdWJzdHJpbmcoMCxIKS5zcGxpdCgiOiIpLFMudXNlcm5hbWU9a1swXT9pLmRlY29kZShrWzBdKTpudWxsLGsuc2hpZnQoKSxTLnBhc3N3b3JkPWtbMF0/aS5kZWNvZGUoay5qb2luKCI6IikpOm51bGwsQT1QLnN1YnN0cmluZyhIKzEpKTooUy51c2VybmFtZT1udWxsLFMucGFzc3dvcmQ9bnVsbCksQX0saS5wYXJzZVF1ZXJ5PWZ1bmN0aW9uKEEsUyl7aWYoIUEpcmV0dXJue307aWYoQT1BLnJlcGxhY2UoLyYrL2csIiYiKS5yZXBsYWNlKC9eXD8qJip8JiskL2csIiIpLCFBKXJldHVybnt9O2Zvcih2YXIgUD17fSxGPUEuc3BsaXQoIiYiKSxqPUYubGVuZ3RoLEgsayxLLFg9MDtYPGo7WCsrKUg9RltYXS5zcGxpdCgiPSIpLGs9aS5kZWNvZGVRdWVyeShILnNoaWZ0KCksUyksSz1ILmxlbmd0aD9pLmRlY29kZVF1ZXJ5KEguam9pbigiPSIpLFMpOm51bGwsayE9PSJfX3Byb3RvX18iJiYodS5jYWxsKFAsayk/KCh0eXBlb2YgUFtrXT09InN0cmluZyJ8fFBba109PT1udWxsKSYmKFBba109W1Bba11dKSxQW2tdLnB1c2goSykpOlBba109Syk7cmV0dXJuIFB9LGkuYnVpbGQ9ZnVuY3Rpb24oQSl7dmFyIFM9IiIsUD0hMTtyZXR1cm4gQS5wcm90b2NvbCYmKFMrPUEucHJvdG9jb2wrIjoiKSwhQS51cm4mJihTfHxBLmhvc3RuYW1lKSYmKFMrPSIvLyIsUD0hMCksUys9aS5idWlsZEF1dGhvcml0eShBKXx8IiIsdHlwZW9mIEEucGF0aD09InN0cmluZyImJihBLnBhdGguY2hhckF0KDApIT09Ii8iJiZQJiYoUys9Ii8iKSxTKz1BLnBhdGgpLHR5cGVvZiBBLnF1ZXJ5PT0ic3RyaW5nIiYmQS5xdWVyeSYmKFMrPSI/IitBLnF1ZXJ5KSx0eXBlb2YgQS5mcmFnbWVudD09InN0cmluZyImJkEuZnJhZ21lbnQmJihTKz0iIyIrQS5mcmFnbWVudCksU30saS5idWlsZEhvc3Q9ZnVuY3Rpb24oQSl7dmFyIFM9IiI7aWYoQS5ob3N0bmFtZSlpLmlwNl9leHByZXNzaW9uLnRlc3QoQS5ob3N0bmFtZSk/Uys9IlsiK0EuaG9zdG5hbWUrIl0iOlMrPUEuaG9zdG5hbWU7ZWxzZSByZXR1cm4iIjtyZXR1cm4gQS5wb3J0JiYoUys9IjoiK0EucG9ydCksU30saS5idWlsZEF1dGhvcml0eT1mdW5jdGlvbihBKXtyZXR1cm4gaS5idWlsZFVzZXJpbmZvKEEpK2kuYnVpbGRIb3N0KEEpfSxpLmJ1aWxkVXNlcmluZm89ZnVuY3Rpb24oQSl7dmFyIFM9IiI7cmV0dXJuIEEudXNlcm5hbWUmJihTKz1pLmVuY29kZShBLnVzZXJuYW1lKSksQS5wYXNzd29yZCYmKFMrPSI6IitpLmVuY29kZShBLnBhc3N3b3JkKSksUyYmKFMrPSJAIiksU30saS5idWlsZFF1ZXJ5PWZ1bmN0aW9uKEEsUyxQKXt2YXIgRj0iIixqLEgsayxLO2ZvcihIIGluIEEpaWYoSCE9PSJfX3Byb3RvX18iJiZ1LmNhbGwoQSxIKSlpZihwKEFbSF0pKWZvcihqPXt9LGs9MCxLPUFbSF0ubGVuZ3RoO2s8SztrKyspQVtIXVtrXSE9PXZvaWQgMCYmaltBW0hdW2tdKyIiXT09PXZvaWQgMCYmKEYrPSImIitpLmJ1aWxkUXVlcnlQYXJhbWV0ZXIoSCxBW0hdW2tdLFApLFMhPT0hMCYmKGpbQVtIXVtrXSsiIl09ITApKTtlbHNlIEFbSF0hPT12b2lkIDAmJihGKz0iJiIraS5idWlsZFF1ZXJ5UGFyYW1ldGVyKEgsQVtIXSxQKSk7cmV0dXJuIEYuc3Vic3RyaW5nKDEpfSxpLmJ1aWxkUXVlcnlQYXJhbWV0ZXI9ZnVuY3Rpb24oQSxTLFApe3JldHVybiBpLmVuY29kZVF1ZXJ5KEEsUCkrKFMhPT1udWxsPyI9IitpLmVuY29kZVF1ZXJ5KFMsUCk6IiIpfSxpLmFkZFF1ZXJ5PWZ1bmN0aW9uKEEsUyxQKXtpZih0eXBlb2YgUz09Im9iamVjdCIpZm9yKHZhciBGIGluIFMpdS5jYWxsKFMsRikmJmkuYWRkUXVlcnkoQSxGLFNbRl0pO2Vsc2UgaWYodHlwZW9mIFM9PSJzdHJpbmciKXtpZihBW1NdPT09dm9pZCAwKXtBW1NdPVA7cmV0dXJufWVsc2UgdHlwZW9mIEFbU109PSJzdHJpbmciJiYoQVtTXT1bQVtTXV0pO3AoUCl8fChQPVtQXSksQVtTXT0oQVtTXXx8W10pLmNvbmNhdChQKX1lbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoIlVSSS5hZGRRdWVyeSgpIGFjY2VwdHMgYW4gb2JqZWN0LCBzdHJpbmcgYXMgdGhlIG5hbWUgcGFyYW1ldGVyIil9LGkuc2V0UXVlcnk9ZnVuY3Rpb24oQSxTLFApe2lmKHR5cGVvZiBTPT0ib2JqZWN0Iilmb3IodmFyIEYgaW4gUyl1LmNhbGwoUyxGKSYmaS5zZXRRdWVyeShBLEYsU1tGXSk7ZWxzZSBpZih0eXBlb2YgUz09InN0cmluZyIpQVtTXT1QPT09dm9pZCAwP251bGw6UDtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoIlVSSS5zZXRRdWVyeSgpIGFjY2VwdHMgYW4gb2JqZWN0LCBzdHJpbmcgYXMgdGhlIG5hbWUgcGFyYW1ldGVyIil9LGkucmVtb3ZlUXVlcnk9ZnVuY3Rpb24oQSxTLFApe3ZhciBGLGosSDtpZihwKFMpKWZvcihGPTAsaj1TLmxlbmd0aDtGPGo7RisrKUFbU1tGXV09dm9pZCAwO2Vsc2UgaWYobChTKT09PSJSZWdFeHAiKWZvcihIIGluIEEpUy50ZXN0KEgpJiYoQVtIXT12b2lkIDApO2Vsc2UgaWYodHlwZW9mIFM9PSJvYmplY3QiKWZvcihIIGluIFMpdS5jYWxsKFMsSCkmJmkucmVtb3ZlUXVlcnkoQSxILFNbSF0pO2Vsc2UgaWYodHlwZW9mIFM9PSJzdHJpbmciKVAhPT12b2lkIDA/bChQKT09PSJSZWdFeHAiPyFwKEFbU10pJiZQLnRlc3QoQVtTXSk/QVtTXT12b2lkIDA6QVtTXT1kKEFbU10sUCk6QVtTXT09PVN0cmluZyhQKSYmKCFwKFApfHxQLmxlbmd0aD09PTEpP0FbU109dm9pZCAwOnAoQVtTXSkmJihBW1NdPWQoQVtTXSxQKSk6QVtTXT12b2lkIDA7ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJVUkkucmVtb3ZlUXVlcnkoKSBhY2NlcHRzIGFuIG9iamVjdCwgc3RyaW5nLCBSZWdFeHAgYXMgdGhlIGZpcnN0IHBhcmFtZXRlciIpfSxpLmhhc1F1ZXJ5PWZ1bmN0aW9uKEEsUyxQLEYpe3N3aXRjaChsKFMpKXtjYXNlIlN0cmluZyI6YnJlYWs7Y2FzZSJSZWdFeHAiOmZvcih2YXIgaiBpbiBBKWlmKHUuY2FsbChBLGopJiZTLnRlc3QoaikmJihQPT09dm9pZCAwfHxpLmhhc1F1ZXJ5KEEsaixQKSkpcmV0dXJuITA7cmV0dXJuITE7Y2FzZSJPYmplY3QiOmZvcih2YXIgSCBpbiBTKWlmKHUuY2FsbChTLEgpJiYhaS5oYXNRdWVyeShBLEgsU1tIXSkpcmV0dXJuITE7cmV0dXJuITA7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJVUkkuaGFzUXVlcnkoKSBhY2NlcHRzIGEgc3RyaW5nLCByZWd1bGFyIGV4cHJlc3Npb24gb3Igb2JqZWN0IGFzIHRoZSBuYW1lIHBhcmFtZXRlciIpfXN3aXRjaChsKFApKXtjYXNlIlVuZGVmaW5lZCI6cmV0dXJuIFMgaW4gQTtjYXNlIkJvb2xlYW4iOnZhciBrPSEhKHAoQVtTXSk/QVtTXS5sZW5ndGg6QVtTXSk7cmV0dXJuIFA9PT1rO2Nhc2UiRnVuY3Rpb24iOnJldHVybiEhUChBW1NdLFMsQSk7Y2FzZSJBcnJheSI6aWYoIXAoQVtTXSkpcmV0dXJuITE7dmFyIEs9Rj9tOl87cmV0dXJuIEsoQVtTXSxQKTtjYXNlIlJlZ0V4cCI6cmV0dXJuIHAoQVtTXSk/Rj9tKEFbU10sUCk6ITE6ISEoQVtTXSYmQVtTXS5tYXRjaChQKSk7Y2FzZSJOdW1iZXIiOlA9U3RyaW5nKFApO2Nhc2UiU3RyaW5nIjpyZXR1cm4gcChBW1NdKT9GP20oQVtTXSxQKTohMTpBW1NdPT09UDtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIlVSSS5oYXNRdWVyeSgpIGFjY2VwdHMgdW5kZWZpbmVkLCBib29sZWFuLCBzdHJpbmcsIG51bWJlciwgUmVnRXhwLCBGdW5jdGlvbiBhcyB0aGUgdmFsdWUgcGFyYW1ldGVyIil9fSxpLmpvaW5QYXRocz1mdW5jdGlvbigpe2Zvcih2YXIgQT1bXSxTPVtdLFA9MCxGPTA7Rjxhcmd1bWVudHMubGVuZ3RoO0YrKyl7dmFyIGo9bmV3IGkoYXJndW1lbnRzW0ZdKTtBLnB1c2goaik7Zm9yKHZhciBIPWouc2VnbWVudCgpLGs9MDtrPEgubGVuZ3RoO2srKyl0eXBlb2YgSFtrXT09InN0cmluZyImJlMucHVzaChIW2tdKSxIW2tdJiZQKyt9aWYoIVMubGVuZ3RofHwhUClyZXR1cm4gbmV3IGkoIiIpO3ZhciBLPW5ldyBpKCIiKS5zZWdtZW50KFMpO3JldHVybihBWzBdLnBhdGgoKT09PSIifHxBWzBdLnBhdGgoKS5zbGljZSgwLDEpPT09Ii8iKSYmSy5wYXRoKCIvIitLLnBhdGgoKSksSy5ub3JtYWxpemUoKX0saS5jb21tb25QYXRoPWZ1bmN0aW9uKEEsUyl7dmFyIFA9TWF0aC5taW4oQS5sZW5ndGgsUy5sZW5ndGgpLEY7Zm9yKEY9MDtGPFA7RisrKWlmKEEuY2hhckF0KEYpIT09Uy5jaGFyQXQoRikpe0YtLTticmVha31yZXR1cm4gRjwxP0EuY2hhckF0KDApPT09Uy5jaGFyQXQoMCkmJkEuY2hhckF0KDApPT09Ii8iPyIvIjoiIjooKEEuY2hhckF0KEYpIT09Ii8ifHxTLmNoYXJBdChGKSE9PSIvIikmJihGPUEuc3Vic3RyaW5nKDAsRikubGFzdEluZGV4T2YoIi8iKSksQS5zdWJzdHJpbmcoMCxGKzEpKX0saS53aXRoaW5TdHJpbmc9ZnVuY3Rpb24oQSxTLFApe1B8fChQPXt9KTt2YXIgRj1QLnN0YXJ0fHxpLmZpbmRVcmkuc3RhcnQsaj1QLmVuZHx8aS5maW5kVXJpLmVuZCxIPVAudHJpbXx8aS5maW5kVXJpLnRyaW0saz1QLnBhcmVuc3x8aS5maW5kVXJpLnBhcmVucyxLPS9bYS16MC05LV09WyInXT8kL2k7Zm9yKEYubGFzdEluZGV4PTA7Oyl7dmFyIFg9Ri5leGVjKEEpO2lmKCFYKWJyZWFrO3ZhciBSPVguaW5kZXg7aWYoUC5pZ25vcmVIdG1sKXt2YXIgUT1BLnNsaWNlKE1hdGgubWF4KFItMywwKSxSKTtpZihRJiZLLnRlc3QoUSkpY29udGludWV9Zm9yKHZhciBmdD1SK0Euc2xpY2UoUikuc2VhcmNoKGopLHB0PUEuc2xpY2UoUixmdCksZ3Q9LTE7Oyl7dmFyIGl0PWsuZXhlYyhwdCk7aWYoIWl0KWJyZWFrO3ZhciBOdD1pdC5pbmRleCtpdFswXS5sZW5ndGg7Z3Q9TWF0aC5tYXgoZ3QsTnQpfWlmKGd0Pi0xP3B0PXB0LnNsaWNlKDAsZ3QpK3B0LnNsaWNlKGd0KS5yZXBsYWNlKEgsIiIpOnB0PXB0LnJlcGxhY2UoSCwiIiksIShwdC5sZW5ndGg8PVhbMF0ubGVuZ3RoKSYmIShQLmlnbm9yZSYmUC5pZ25vcmUudGVzdChwdCkpKXtmdD1SK3B0Lmxlbmd0aDt2YXIgT3Q9UyhwdCxSLGZ0LEEpO2lmKE90PT09dm9pZCAwKXtGLmxhc3RJbmRleD1mdDtjb250aW51ZX1PdD1TdHJpbmcoT3QpLEE9QS5zbGljZSgwLFIpK090K0Euc2xpY2UoZnQpLEYubGFzdEluZGV4PVIrT3QubGVuZ3RofX1yZXR1cm4gRi5sYXN0SW5kZXg9MCxBfSxpLmVuc3VyZVZhbGlkSG9zdG5hbWU9ZnVuY3Rpb24oQSxTKXt2YXIgUD0hIUEsRj0hIVMsaj0hMTtpZihGJiYoaj1tKGkuaG9zdFByb3RvY29scyxTKSksaiYmIVApdGhyb3cgbmV3IFR5cGVFcnJvcigiSG9zdG5hbWUgY2Fubm90IGJlIGVtcHR5LCBpZiBwcm90b2NvbCBpcyAiK1MpO2lmKEEmJkEubWF0Y2goaS5pbnZhbGlkX2hvc3RuYW1lX2NoYXJhY3RlcnMpKXtpZighdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdIb3N0bmFtZSAiJytBKyciIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05Li06X10gYW5kIFB1bnljb2RlLmpzIGlzIG5vdCBhdmFpbGFibGUnKTtpZih0LnRvQVNDSUkoQSkubWF0Y2goaS5pbnZhbGlkX2hvc3RuYW1lX2NoYXJhY3RlcnMpKXRocm93IG5ldyBUeXBlRXJyb3IoJ0hvc3RuYW1lICInK0ErJyIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuLTpfXScpfX0saS5lbnN1cmVWYWxpZFBvcnQ9ZnVuY3Rpb24oQSl7aWYoQSl7dmFyIFM9TnVtYmVyKEEpO2lmKCEocyhTKSYmUz4wJiZTPDY1NTM2KSl0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3J0ICInK0ErJyIgaXMgbm90IGEgdmFsaWQgcG9ydCcpfX0saS5ub0NvbmZsaWN0PWZ1bmN0aW9uKEEpe2lmKEEpe3ZhciBTPXtVUkk6dGhpcy5ub0NvbmZsaWN0KCl9O3JldHVybiBvLlVSSVRlbXBsYXRlJiZ0eXBlb2Ygby5VUklUZW1wbGF0ZS5ub0NvbmZsaWN0PT0iZnVuY3Rpb24iJiYoUy5VUklUZW1wbGF0ZT1vLlVSSVRlbXBsYXRlLm5vQ29uZmxpY3QoKSksby5JUHY2JiZ0eXBlb2Ygby5JUHY2Lm5vQ29uZmxpY3Q9PSJmdW5jdGlvbiImJihTLklQdjY9by5JUHY2Lm5vQ29uZmxpY3QoKSksby5TZWNvbmRMZXZlbERvbWFpbnMmJnR5cGVvZiBvLlNlY29uZExldmVsRG9tYWlucy5ub0NvbmZsaWN0PT0iZnVuY3Rpb24iJiYoUy5TZWNvbmRMZXZlbERvbWFpbnM9by5TZWNvbmRMZXZlbERvbWFpbnMubm9Db25mbGljdCgpKSxTfWVsc2Ugby5VUkk9PT10aGlzJiYoby5VUkk9cik7cmV0dXJuIHRoaXN9LGYuYnVpbGQ9ZnVuY3Rpb24oQSl7cmV0dXJuIEE9PT0hMD90aGlzLl9kZWZlcnJlZF9idWlsZD0hMDooQT09PXZvaWQgMHx8dGhpcy5fZGVmZXJyZWRfYnVpbGQpJiYodGhpcy5fc3RyaW5nPWkuYnVpbGQodGhpcy5fcGFydHMpLHRoaXMuX2RlZmVycmVkX2J1aWxkPSExKSx0aGlzfSxmLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpKHRoaXMpfSxmLnZhbHVlT2Y9Zi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1aWxkKCExKS5fc3RyaW5nfTtmdW5jdGlvbiBOKEEpe3JldHVybiBmdW5jdGlvbihTLFApe3JldHVybiBTPT09dm9pZCAwP3RoaXMuX3BhcnRzW0FdfHwiIjoodGhpcy5fcGFydHNbQV09U3x8bnVsbCx0aGlzLmJ1aWxkKCFQKSx0aGlzKX19ZnVuY3Rpb24gSShBLFMpe3JldHVybiBmdW5jdGlvbihQLEYpe3JldHVybiBQPT09dm9pZCAwP3RoaXMuX3BhcnRzW0FdfHwiIjooUCE9PW51bGwmJihQPVArIiIsUC5jaGFyQXQoMCk9PT1TJiYoUD1QLnN1YnN0cmluZygxKSkpLHRoaXMuX3BhcnRzW0FdPVAsdGhpcy5idWlsZCghRiksdGhpcyl9fWYucHJvdG9jb2w9TigicHJvdG9jb2wiKSxmLnVzZXJuYW1lPU4oInVzZXJuYW1lIiksZi5wYXNzd29yZD1OKCJwYXNzd29yZCIpLGYuaG9zdG5hbWU9TigiaG9zdG5hbWUiKSxmLnBvcnQ9TigicG9ydCIpLGYucXVlcnk9SSgicXVlcnkiLCI/IiksZi5mcmFnbWVudD1JKCJmcmFnbWVudCIsIiMiKSxmLnNlYXJjaD1mdW5jdGlvbihBLFMpe3ZhciBQPXRoaXMucXVlcnkoQSxTKTtyZXR1cm4gdHlwZW9mIFA9PSJzdHJpbmciJiZQLmxlbmd0aD8iPyIrUDpQfSxmLmhhc2g9ZnVuY3Rpb24oQSxTKXt2YXIgUD10aGlzLmZyYWdtZW50KEEsUyk7cmV0dXJuIHR5cGVvZiBQPT0ic3RyaW5nIiYmUC5sZW5ndGg/IiMiK1A6UH0sZi5wYXRobmFtZT1mdW5jdGlvbihBLFMpe2lmKEE9PT12b2lkIDB8fEE9PT0hMCl7dmFyIFA9dGhpcy5fcGFydHMucGF0aHx8KHRoaXMuX3BhcnRzLmhvc3RuYW1lPyIvIjoiIik7cmV0dXJuIEE/KHRoaXMuX3BhcnRzLnVybj9pLmRlY29kZVVyblBhdGg6aS5kZWNvZGVQYXRoKShQKTpQfWVsc2UgcmV0dXJuIHRoaXMuX3BhcnRzLnVybj90aGlzLl9wYXJ0cy5wYXRoPUE/aS5yZWNvZGVVcm5QYXRoKEEpOiIiOnRoaXMuX3BhcnRzLnBhdGg9QT9pLnJlY29kZVBhdGgoQSk6Ii8iLHRoaXMuYnVpbGQoIVMpLHRoaXN9LGYucGF0aD1mLnBhdGhuYW1lLGYuaHJlZj1mdW5jdGlvbihBLFMpe3ZhciBQO2lmKEE9PT12b2lkIDApcmV0dXJuIHRoaXMudG9TdHJpbmcoKTt0aGlzLl9zdHJpbmc9IiIsdGhpcy5fcGFydHM9aS5fcGFydHMoKTt2YXIgRj1BIGluc3RhbmNlb2YgaSxqPXR5cGVvZiBBPT0ib2JqZWN0IiYmKEEuaG9zdG5hbWV8fEEucGF0aHx8QS5wYXRobmFtZSk7aWYoQS5ub2RlTmFtZSl7dmFyIEg9aS5nZXREb21BdHRyaWJ1dGUoQSk7QT1BW0hdfHwiIixqPSExfWlmKCFGJiZqJiZBLnBhdGhuYW1lIT09dm9pZCAwJiYoQT1BLnRvU3RyaW5nKCkpLHR5cGVvZiBBPT0ic3RyaW5nInx8QSBpbnN0YW5jZW9mIFN0cmluZyl0aGlzLl9wYXJ0cz1pLnBhcnNlKFN0cmluZyhBKSx0aGlzLl9wYXJ0cyk7ZWxzZSBpZihGfHxqKXt2YXIgaz1GP0EuX3BhcnRzOkE7Zm9yKFAgaW4gaylQIT09InF1ZXJ5IiYmdS5jYWxsKHRoaXMuX3BhcnRzLFApJiYodGhpcy5fcGFydHNbUF09a1tQXSk7ay5xdWVyeSYmdGhpcy5xdWVyeShrLnF1ZXJ5LCExKX1lbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaW5wdXQiKTtyZXR1cm4gdGhpcy5idWlsZCghUyksdGhpc30sZi5pcz1mdW5jdGlvbihBKXt2YXIgUz0hMSxQPSExLEY9ITEsaj0hMSxIPSExLGs9ITEsSz0hMSxYPSF0aGlzLl9wYXJ0cy51cm47c3dpdGNoKHRoaXMuX3BhcnRzLmhvc3RuYW1lJiYoWD0hMSxQPWkuaXA0X2V4cHJlc3Npb24udGVzdCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSksRj1pLmlwNl9leHByZXNzaW9uLnRlc3QodGhpcy5fcGFydHMuaG9zdG5hbWUpLFM9UHx8RixqPSFTLEg9aiYmbiYmbi5oYXModGhpcy5fcGFydHMuaG9zdG5hbWUpLGs9aiYmaS5pZG5fZXhwcmVzc2lvbi50ZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKSxLPWomJmkucHVueWNvZGVfZXhwcmVzc2lvbi50ZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKSksQS50b0xvd2VyQ2FzZSgpKXtjYXNlInJlbGF0aXZlIjpyZXR1cm4gWDtjYXNlImFic29sdXRlIjpyZXR1cm4hWDtjYXNlImRvbWFpbiI6Y2FzZSJuYW1lIjpyZXR1cm4gajtjYXNlInNsZCI6cmV0dXJuIEg7Y2FzZSJpcCI6cmV0dXJuIFM7Y2FzZSJpcDQiOmNhc2UiaXB2NCI6Y2FzZSJpbmV0NCI6cmV0dXJuIFA7Y2FzZSJpcDYiOmNhc2UiaXB2NiI6Y2FzZSJpbmV0NiI6cmV0dXJuIEY7Y2FzZSJpZG4iOnJldHVybiBrO2Nhc2UidXJsIjpyZXR1cm4hdGhpcy5fcGFydHMudXJuO2Nhc2UidXJuIjpyZXR1cm4hIXRoaXMuX3BhcnRzLnVybjtjYXNlInB1bnljb2RlIjpyZXR1cm4gS31yZXR1cm4gbnVsbH07dmFyIEw9Zi5wcm90b2NvbCx2PWYucG9ydCxEPWYuaG9zdG5hbWU7Zi5wcm90b2NvbD1mdW5jdGlvbihBLFMpe2lmKEEmJihBPUEucmVwbGFjZSgvOihcL1wvKT8kLywiIiksIUEubWF0Y2goaS5wcm90b2NvbF9leHByZXNzaW9uKSkpdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdG9jb2wgIicrQStgIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4rLV0gb3IgZG9lc24ndCBzdGFydCB3aXRoIFtBLVpdYCk7cmV0dXJuIEwuY2FsbCh0aGlzLEEsUyl9LGYuc2NoZW1lPWYucHJvdG9jb2wsZi5wb3J0PWZ1bmN0aW9uKEEsUyl7cmV0dXJuIHRoaXMuX3BhcnRzLnVybj9BPT09dm9pZCAwPyIiOnRoaXM6KEEhPT12b2lkIDAmJihBPT09MCYmKEE9bnVsbCksQSYmKEErPSIiLEEuY2hhckF0KDApPT09IjoiJiYoQT1BLnN1YnN0cmluZygxKSksaS5lbnN1cmVWYWxpZFBvcnQoQSkpKSx2LmNhbGwodGhpcyxBLFMpKX0sZi5ob3N0bmFtZT1mdW5jdGlvbihBLFMpe2lmKHRoaXMuX3BhcnRzLnVybilyZXR1cm4gQT09PXZvaWQgMD8iIjp0aGlzO2lmKEEhPT12b2lkIDApe3ZhciBQPXtwcmV2ZW50SW52YWxpZEhvc3RuYW1lOnRoaXMuX3BhcnRzLnByZXZlbnRJbnZhbGlkSG9zdG5hbWV9LEY9aS5wYXJzZUhvc3QoQSxQKTtpZihGIT09Ii8iKXRocm93IG5ldyBUeXBlRXJyb3IoJ0hvc3RuYW1lICInK0ErJyIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuLV0nKTtBPVAuaG9zdG5hbWUsdGhpcy5fcGFydHMucHJldmVudEludmFsaWRIb3N0bmFtZSYmaS5lbnN1cmVWYWxpZEhvc3RuYW1lKEEsdGhpcy5fcGFydHMucHJvdG9jb2wpfXJldHVybiBELmNhbGwodGhpcyxBLFMpfSxmLm9yaWdpbj1mdW5jdGlvbihBLFMpe2lmKHRoaXMuX3BhcnRzLnVybilyZXR1cm4gQT09PXZvaWQgMD8iIjp0aGlzO2lmKEE9PT12b2lkIDApe3ZhciBQPXRoaXMucHJvdG9jb2woKSxGPXRoaXMuYXV0aG9yaXR5KCk7cmV0dXJuIEY/KFA/UCsiOi8vIjoiIikrdGhpcy5hdXRob3JpdHkoKToiIn1lbHNle3ZhciBqPWkoQSk7cmV0dXJuIHRoaXMucHJvdG9jb2woai5wcm90b2NvbCgpKS5hdXRob3JpdHkoai5hdXRob3JpdHkoKSkuYnVpbGQoIVMpLHRoaXN9fSxmLmhvc3Q9ZnVuY3Rpb24oQSxTKXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZihBPT09dm9pZCAwKXJldHVybiB0aGlzLl9wYXJ0cy5ob3N0bmFtZT9pLmJ1aWxkSG9zdCh0aGlzLl9wYXJ0cyk6IiI7dmFyIFA9aS5wYXJzZUhvc3QoQSx0aGlzLl9wYXJ0cyk7aWYoUCE9PSIvIil0aHJvdyBuZXcgVHlwZUVycm9yKCdIb3N0bmFtZSAiJytBKyciIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05Li1dJyk7cmV0dXJuIHRoaXMuYnVpbGQoIVMpLHRoaXN9LGYuYXV0aG9yaXR5PWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYoQT09PXZvaWQgMClyZXR1cm4gdGhpcy5fcGFydHMuaG9zdG5hbWU/aS5idWlsZEF1dGhvcml0eSh0aGlzLl9wYXJ0cyk6IiI7dmFyIFA9aS5wYXJzZUF1dGhvcml0eShBLHRoaXMuX3BhcnRzKTtpZihQIT09Ii8iKXRocm93IG5ldyBUeXBlRXJyb3IoJ0hvc3RuYW1lICInK0ErJyIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuLV0nKTtyZXR1cm4gdGhpcy5idWlsZCghUyksdGhpc30sZi51c2VyaW5mbz1mdW5jdGlvbihBLFMpe2lmKHRoaXMuX3BhcnRzLnVybilyZXR1cm4gQT09PXZvaWQgMD8iIjp0aGlzO2lmKEE9PT12b2lkIDApe3ZhciBQPWkuYnVpbGRVc2VyaW5mbyh0aGlzLl9wYXJ0cyk7cmV0dXJuIFAmJlAuc3Vic3RyaW5nKDAsUC5sZW5ndGgtMSl9ZWxzZSByZXR1cm4gQVtBLmxlbmd0aC0xXSE9PSJAIiYmKEErPSJAIiksaS5wYXJzZVVzZXJpbmZvKEEsdGhpcy5fcGFydHMpLHRoaXMuYnVpbGQoIVMpLHRoaXN9LGYucmVzb3VyY2U9ZnVuY3Rpb24oQSxTKXt2YXIgUDtyZXR1cm4gQT09PXZvaWQgMD90aGlzLnBhdGgoKSt0aGlzLnNlYXJjaCgpK3RoaXMuaGFzaCgpOihQPWkucGFyc2UoQSksdGhpcy5fcGFydHMucGF0aD1QLnBhdGgsdGhpcy5fcGFydHMucXVlcnk9UC5xdWVyeSx0aGlzLl9wYXJ0cy5mcmFnbWVudD1QLmZyYWdtZW50LHRoaXMuYnVpbGQoIVMpLHRoaXMpfSxmLnN1YmRvbWFpbj1mdW5jdGlvbihBLFMpe2lmKHRoaXMuX3BhcnRzLnVybilyZXR1cm4gQT09PXZvaWQgMD8iIjp0aGlzO2lmKEE9PT12b2lkIDApe2lmKCF0aGlzLl9wYXJ0cy5ob3N0bmFtZXx8dGhpcy5pcygiSVAiKSlyZXR1cm4iIjt2YXIgUD10aGlzLl9wYXJ0cy5ob3N0bmFtZS5sZW5ndGgtdGhpcy5kb21haW4oKS5sZW5ndGgtMTtyZXR1cm4gdGhpcy5fcGFydHMuaG9zdG5hbWUuc3Vic3RyaW5nKDAsUCl8fCIifWVsc2V7dmFyIEY9dGhpcy5fcGFydHMuaG9zdG5hbWUubGVuZ3RoLXRoaXMuZG9tYWluKCkubGVuZ3RoLGo9dGhpcy5fcGFydHMuaG9zdG5hbWUuc3Vic3RyaW5nKDAsRiksSD1uZXcgUmVnRXhwKCJeIitjKGopKTtpZihBJiZBLmNoYXJBdChBLmxlbmd0aC0xKSE9PSIuIiYmKEErPSIuIiksQS5pbmRleE9mKCI6IikhPT0tMSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEb21haW5zIGNhbm5vdCBjb250YWluIGNvbG9ucyIpO3JldHVybiBBJiZpLmVuc3VyZVZhbGlkSG9zdG5hbWUoQSx0aGlzLl9wYXJ0cy5wcm90b2NvbCksdGhpcy5fcGFydHMuaG9zdG5hbWU9dGhpcy5fcGFydHMuaG9zdG5hbWUucmVwbGFjZShILEEpLHRoaXMuYnVpbGQoIVMpLHRoaXN9fSxmLmRvbWFpbj1mdW5jdGlvbihBLFMpe2lmKHRoaXMuX3BhcnRzLnVybilyZXR1cm4gQT09PXZvaWQgMD8iIjp0aGlzO2lmKHR5cGVvZiBBPT0iYm9vbGVhbiImJihTPUEsQT12b2lkIDApLEE9PT12b2lkIDApe2lmKCF0aGlzLl9wYXJ0cy5ob3N0bmFtZXx8dGhpcy5pcygiSVAiKSlyZXR1cm4iIjt2YXIgUD10aGlzLl9wYXJ0cy5ob3N0bmFtZS5tYXRjaCgvXC4vZyk7aWYoUCYmUC5sZW5ndGg8MilyZXR1cm4gdGhpcy5fcGFydHMuaG9zdG5hbWU7dmFyIEY9dGhpcy5fcGFydHMuaG9zdG5hbWUubGVuZ3RoLXRoaXMudGxkKFMpLmxlbmd0aC0xO3JldHVybiBGPXRoaXMuX3BhcnRzLmhvc3RuYW1lLmxhc3RJbmRleE9mKCIuIixGLTEpKzEsdGhpcy5fcGFydHMuaG9zdG5hbWUuc3Vic3RyaW5nKEYpfHwiIn1lbHNle2lmKCFBKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbm5vdCBzZXQgZG9tYWluIGVtcHR5Iik7aWYoQS5pbmRleE9mKCI6IikhPT0tMSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEb21haW5zIGNhbm5vdCBjb250YWluIGNvbG9ucyIpO2lmKGkuZW5zdXJlVmFsaWRIb3N0bmFtZShBLHRoaXMuX3BhcnRzLnByb3RvY29sKSwhdGhpcy5fcGFydHMuaG9zdG5hbWV8fHRoaXMuaXMoIklQIikpdGhpcy5fcGFydHMuaG9zdG5hbWU9QTtlbHNle3ZhciBqPW5ldyBSZWdFeHAoYyh0aGlzLmRvbWFpbigpKSsiJCIpO3RoaXMuX3BhcnRzLmhvc3RuYW1lPXRoaXMuX3BhcnRzLmhvc3RuYW1lLnJlcGxhY2UoaixBKX1yZXR1cm4gdGhpcy5idWlsZCghUyksdGhpc319LGYudGxkPWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYodHlwZW9mIEE9PSJib29sZWFuIiYmKFM9QSxBPXZvaWQgMCksQT09PXZvaWQgMCl7aWYoIXRoaXMuX3BhcnRzLmhvc3RuYW1lfHx0aGlzLmlzKCJJUCIpKXJldHVybiIiO3ZhciBQPXRoaXMuX3BhcnRzLmhvc3RuYW1lLmxhc3RJbmRleE9mKCIuIiksRj10aGlzLl9wYXJ0cy5ob3N0bmFtZS5zdWJzdHJpbmcoUCsxKTtyZXR1cm4gUyE9PSEwJiZuJiZuLmxpc3RbRi50b0xvd2VyQ2FzZSgpXSYmbi5nZXQodGhpcy5fcGFydHMuaG9zdG5hbWUpfHxGfWVsc2V7dmFyIGo7aWYoQSlpZihBLm1hdGNoKC9bXmEtekEtWjAtOS1dLykpaWYobiYmbi5pcyhBKSlqPW5ldyBSZWdFeHAoYyh0aGlzLnRsZCgpKSsiJCIpLHRoaXMuX3BhcnRzLmhvc3RuYW1lPXRoaXMuX3BhcnRzLmhvc3RuYW1lLnJlcGxhY2UoaixBKTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RMRCAiJytBKyciIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05XScpO2Vsc2V7aWYoIXRoaXMuX3BhcnRzLmhvc3RuYW1lfHx0aGlzLmlzKCJJUCIpKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigiY2Fubm90IHNldCBUTEQgb24gbm9uLWRvbWFpbiBob3N0Iik7aj1uZXcgUmVnRXhwKGModGhpcy50bGQoKSkrIiQiKSx0aGlzLl9wYXJ0cy5ob3N0bmFtZT10aGlzLl9wYXJ0cy5ob3N0bmFtZS5yZXBsYWNlKGosQSl9ZWxzZSB0aHJvdyBuZXcgVHlwZUVycm9yKCJjYW5ub3Qgc2V0IFRMRCBlbXB0eSIpO3JldHVybiB0aGlzLmJ1aWxkKCFTKSx0aGlzfX0sZi5kaXJlY3Rvcnk9ZnVuY3Rpb24oQSxTKXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZihBPT09dm9pZCAwfHxBPT09ITApe2lmKCF0aGlzLl9wYXJ0cy5wYXRoJiYhdGhpcy5fcGFydHMuaG9zdG5hbWUpcmV0dXJuIiI7aWYodGhpcy5fcGFydHMucGF0aD09PSIvIilyZXR1cm4iLyI7dmFyIFA9dGhpcy5fcGFydHMucGF0aC5sZW5ndGgtdGhpcy5maWxlbmFtZSgpLmxlbmd0aC0xLEY9dGhpcy5fcGFydHMucGF0aC5zdWJzdHJpbmcoMCxQKXx8KHRoaXMuX3BhcnRzLmhvc3RuYW1lPyIvIjoiIik7cmV0dXJuIEE/aS5kZWNvZGVQYXRoKEYpOkZ9ZWxzZXt2YXIgaj10aGlzLl9wYXJ0cy5wYXRoLmxlbmd0aC10aGlzLmZpbGVuYW1lKCkubGVuZ3RoLEg9dGhpcy5fcGFydHMucGF0aC5zdWJzdHJpbmcoMCxqKSxrPW5ldyBSZWdFeHAoIl4iK2MoSCkpO3JldHVybiB0aGlzLmlzKCJyZWxhdGl2ZSIpfHwoQXx8KEE9Ii8iKSxBLmNoYXJBdCgwKSE9PSIvIiYmKEE9Ii8iK0EpKSxBJiZBLmNoYXJBdChBLmxlbmd0aC0xKSE9PSIvIiYmKEErPSIvIiksQT1pLnJlY29kZVBhdGgoQSksdGhpcy5fcGFydHMucGF0aD10aGlzLl9wYXJ0cy5wYXRoLnJlcGxhY2UoayxBKSx0aGlzLmJ1aWxkKCFTKSx0aGlzfX0sZi5maWxlbmFtZT1mdW5jdGlvbihBLFMpe2lmKHRoaXMuX3BhcnRzLnVybilyZXR1cm4gQT09PXZvaWQgMD8iIjp0aGlzO2lmKHR5cGVvZiBBIT0ic3RyaW5nIil7aWYoIXRoaXMuX3BhcnRzLnBhdGh8fHRoaXMuX3BhcnRzLnBhdGg9PT0iLyIpcmV0dXJuIiI7dmFyIFA9dGhpcy5fcGFydHMucGF0aC5sYXN0SW5kZXhPZigiLyIpLEY9dGhpcy5fcGFydHMucGF0aC5zdWJzdHJpbmcoUCsxKTtyZXR1cm4gQT9pLmRlY29kZVBhdGhTZWdtZW50KEYpOkZ9ZWxzZXt2YXIgaj0hMTtBLmNoYXJBdCgwKT09PSIvIiYmKEE9QS5zdWJzdHJpbmcoMSkpLEEubWF0Y2goL1wuP1wvLykmJihqPSEwKTt2YXIgSD1uZXcgUmVnRXhwKGModGhpcy5maWxlbmFtZSgpKSsiJCIpO3JldHVybiBBPWkucmVjb2RlUGF0aChBKSx0aGlzLl9wYXJ0cy5wYXRoPXRoaXMuX3BhcnRzLnBhdGgucmVwbGFjZShILEEpLGo/dGhpcy5ub3JtYWxpemVQYXRoKFMpOnRoaXMuYnVpbGQoIVMpLHRoaXN9fSxmLnN1ZmZpeD1mdW5jdGlvbihBLFMpe2lmKHRoaXMuX3BhcnRzLnVybilyZXR1cm4gQT09PXZvaWQgMD8iIjp0aGlzO2lmKEE9PT12b2lkIDB8fEE9PT0hMCl7aWYoIXRoaXMuX3BhcnRzLnBhdGh8fHRoaXMuX3BhcnRzLnBhdGg9PT0iLyIpcmV0dXJuIiI7dmFyIFA9dGhpcy5maWxlbmFtZSgpLEY9UC5sYXN0SW5kZXhPZigiLiIpLGosSDtyZXR1cm4gRj09PS0xPyIiOihqPVAuc3Vic3RyaW5nKEYrMSksSD0vXlthLXowLTklXSskL2kudGVzdChqKT9qOiIiLEE/aS5kZWNvZGVQYXRoU2VnbWVudChIKTpIKX1lbHNle0EuY2hhckF0KDApPT09Ii4iJiYoQT1BLnN1YnN0cmluZygxKSk7dmFyIGs9dGhpcy5zdWZmaXgoKSxLO2lmKGspQT9LPW5ldyBSZWdFeHAoYyhrKSsiJCIpOks9bmV3IFJlZ0V4cChjKCIuIitrKSsiJCIpO2Vsc2V7aWYoIUEpcmV0dXJuIHRoaXM7dGhpcy5fcGFydHMucGF0aCs9Ii4iK2kucmVjb2RlUGF0aChBKX1yZXR1cm4gSyYmKEE9aS5yZWNvZGVQYXRoKEEpLHRoaXMuX3BhcnRzLnBhdGg9dGhpcy5fcGFydHMucGF0aC5yZXBsYWNlKEssQSkpLHRoaXMuYnVpbGQoIVMpLHRoaXN9fSxmLnNlZ21lbnQ9ZnVuY3Rpb24oQSxTLFApe3ZhciBGPXRoaXMuX3BhcnRzLnVybj8iOiI6Ii8iLGo9dGhpcy5wYXRoKCksSD1qLnN1YnN0cmluZygwLDEpPT09Ii8iLGs9ai5zcGxpdChGKTtpZihBIT09dm9pZCAwJiZ0eXBlb2YgQSE9Im51bWJlciImJihQPVMsUz1BLEE9dm9pZCAwKSxBIT09dm9pZCAwJiZ0eXBlb2YgQSE9Im51bWJlciIpdGhyb3cgbmV3IEVycm9yKCdCYWQgc2VnbWVudCAiJytBKyciLCBtdXN0IGJlIDAtYmFzZWQgaW50ZWdlcicpO2lmKEgmJmsuc2hpZnQoKSxBPDAmJihBPU1hdGgubWF4KGsubGVuZ3RoK0EsMCkpLFM9PT12b2lkIDApcmV0dXJuIEE9PT12b2lkIDA/azprW0FdO2lmKEE9PT1udWxsfHxrW0FdPT09dm9pZCAwKWlmKHAoUykpe2s9W107Zm9yKHZhciBLPTAsWD1TLmxlbmd0aDtLPFg7SysrKSFTW0tdLmxlbmd0aCYmKCFrLmxlbmd0aHx8IWtbay5sZW5ndGgtMV0ubGVuZ3RoKXx8KGsubGVuZ3RoJiYha1trLmxlbmd0aC0xXS5sZW5ndGgmJmsucG9wKCksay5wdXNoKGcoU1tLXSkpKX1lbHNlKFN8fHR5cGVvZiBTPT0ic3RyaW5nIikmJihTPWcoUyksa1trLmxlbmd0aC0xXT09PSIiP2tbay5sZW5ndGgtMV09UzprLnB1c2goUykpO2Vsc2UgUz9rW0FdPWcoUyk6ay5zcGxpY2UoQSwxKTtyZXR1cm4gSCYmay51bnNoaWZ0KCIiKSx0aGlzLnBhdGgoay5qb2luKEYpLFApfSxmLnNlZ21lbnRDb2RlZD1mdW5jdGlvbihBLFMsUCl7dmFyIEYsaixIO2lmKHR5cGVvZiBBIT0ibnVtYmVyIiYmKFA9UyxTPUEsQT12b2lkIDApLFM9PT12b2lkIDApe2lmKEY9dGhpcy5zZWdtZW50KEEsUyxQKSwhcChGKSlGPUYhPT12b2lkIDA/aS5kZWNvZGUoRik6dm9pZCAwO2Vsc2UgZm9yKGo9MCxIPUYubGVuZ3RoO2o8SDtqKyspRltqXT1pLmRlY29kZShGW2pdKTtyZXR1cm4gRn1pZighcChTKSlTPXR5cGVvZiBTPT0ic3RyaW5nInx8UyBpbnN0YW5jZW9mIFN0cmluZz9pLmVuY29kZShTKTpTO2Vsc2UgZm9yKGo9MCxIPVMubGVuZ3RoO2o8SDtqKyspU1tqXT1pLmVuY29kZShTW2pdKTtyZXR1cm4gdGhpcy5zZWdtZW50KEEsUyxQKX07dmFyIFU9Zi5xdWVyeTtyZXR1cm4gZi5xdWVyeT1mdW5jdGlvbihBLFMpe2lmKEE9PT0hMClyZXR1cm4gaS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO2lmKHR5cGVvZiBBPT0iZnVuY3Rpb24iKXt2YXIgUD1pLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSksRj1BLmNhbGwodGhpcyxQKTtyZXR1cm4gdGhpcy5fcGFydHMucXVlcnk9aS5idWlsZFF1ZXJ5KEZ8fFAsdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpLHRoaXMuYnVpbGQoIVMpLHRoaXN9ZWxzZSByZXR1cm4gQSE9PXZvaWQgMCYmdHlwZW9mIEEhPSJzdHJpbmciPyh0aGlzLl9wYXJ0cy5xdWVyeT1pLmJ1aWxkUXVlcnkoQSx0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSksdGhpcy5idWlsZCghUyksdGhpcyk6VS5jYWxsKHRoaXMsQSxTKX0sZi5zZXRRdWVyeT1mdW5jdGlvbihBLFMsUCl7dmFyIEY9aS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO2lmKHR5cGVvZiBBPT0ic3RyaW5nInx8QSBpbnN0YW5jZW9mIFN0cmluZylGW0FdPVMhPT12b2lkIDA/UzpudWxsO2Vsc2UgaWYodHlwZW9mIEE9PSJvYmplY3QiKWZvcih2YXIgaiBpbiBBKXUuY2FsbChBLGopJiYoRltqXT1BW2pdKTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoIlVSSS5hZGRRdWVyeSgpIGFjY2VwdHMgYW4gb2JqZWN0LCBzdHJpbmcgYXMgdGhlIG5hbWUgcGFyYW1ldGVyIik7cmV0dXJuIHRoaXMuX3BhcnRzLnF1ZXJ5PWkuYnVpbGRRdWVyeShGLHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKSx0eXBlb2YgQSE9InN0cmluZyImJihQPVMpLHRoaXMuYnVpbGQoIVApLHRoaXN9LGYuYWRkUXVlcnk9ZnVuY3Rpb24oQSxTLFApe3ZhciBGPWkucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtyZXR1cm4gaS5hZGRRdWVyeShGLEEsUz09PXZvaWQgMD9udWxsOlMpLHRoaXMuX3BhcnRzLnF1ZXJ5PWkuYnVpbGRRdWVyeShGLHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKSx0eXBlb2YgQSE9InN0cmluZyImJihQPVMpLHRoaXMuYnVpbGQoIVApLHRoaXN9LGYucmVtb3ZlUXVlcnk9ZnVuY3Rpb24oQSxTLFApe3ZhciBGPWkucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtyZXR1cm4gaS5yZW1vdmVRdWVyeShGLEEsUyksdGhpcy5fcGFydHMucXVlcnk9aS5idWlsZFF1ZXJ5KEYsdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpLHR5cGVvZiBBIT0ic3RyaW5nIiYmKFA9UyksdGhpcy5idWlsZCghUCksdGhpc30sZi5oYXNRdWVyeT1mdW5jdGlvbihBLFMsUCl7dmFyIEY9aS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO3JldHVybiBpLmhhc1F1ZXJ5KEYsQSxTLFApfSxmLnNldFNlYXJjaD1mLnNldFF1ZXJ5LGYuYWRkU2VhcmNoPWYuYWRkUXVlcnksZi5yZW1vdmVTZWFyY2g9Zi5yZW1vdmVRdWVyeSxmLmhhc1NlYXJjaD1mLmhhc1F1ZXJ5LGYubm9ybWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcnRzLnVybj90aGlzLm5vcm1hbGl6ZVByb3RvY29sKCExKS5ub3JtYWxpemVQYXRoKCExKS5ub3JtYWxpemVRdWVyeSghMSkubm9ybWFsaXplRnJhZ21lbnQoITEpLmJ1aWxkKCk6dGhpcy5ub3JtYWxpemVQcm90b2NvbCghMSkubm9ybWFsaXplSG9zdG5hbWUoITEpLm5vcm1hbGl6ZVBvcnQoITEpLm5vcm1hbGl6ZVBhdGgoITEpLm5vcm1hbGl6ZVF1ZXJ5KCExKS5ub3JtYWxpemVGcmFnbWVudCghMSkuYnVpbGQoKX0sZi5ub3JtYWxpemVQcm90b2NvbD1mdW5jdGlvbihBKXtyZXR1cm4gdHlwZW9mIHRoaXMuX3BhcnRzLnByb3RvY29sPT0ic3RyaW5nIiYmKHRoaXMuX3BhcnRzLnByb3RvY29sPXRoaXMuX3BhcnRzLnByb3RvY29sLnRvTG93ZXJDYXNlKCksdGhpcy5idWlsZCghQSkpLHRoaXN9LGYubm9ybWFsaXplSG9zdG5hbWU9ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lJiYodGhpcy5pcygiSUROIikmJnQ/dGhpcy5fcGFydHMuaG9zdG5hbWU9dC50b0FTQ0lJKHRoaXMuX3BhcnRzLmhvc3RuYW1lKTp0aGlzLmlzKCJJUHY2IikmJmUmJih0aGlzLl9wYXJ0cy5ob3N0bmFtZT1lLmJlc3QodGhpcy5fcGFydHMuaG9zdG5hbWUpKSx0aGlzLl9wYXJ0cy5ob3N0bmFtZT10aGlzLl9wYXJ0cy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpLHRoaXMuYnVpbGQoIUEpKSx0aGlzfSxmLm5vcm1hbGl6ZVBvcnQ9ZnVuY3Rpb24oQSl7cmV0dXJuIHR5cGVvZiB0aGlzLl9wYXJ0cy5wcm90b2NvbD09InN0cmluZyImJnRoaXMuX3BhcnRzLnBvcnQ9PT1pLmRlZmF1bHRQb3J0c1t0aGlzLl9wYXJ0cy5wcm90b2NvbF0mJih0aGlzLl9wYXJ0cy5wb3J0PW51bGwsdGhpcy5idWlsZCghQSkpLHRoaXN9LGYubm9ybWFsaXplUGF0aD1mdW5jdGlvbihBKXt2YXIgUz10aGlzLl9wYXJ0cy5wYXRoO2lmKCFTKXJldHVybiB0aGlzO2lmKHRoaXMuX3BhcnRzLnVybilyZXR1cm4gdGhpcy5fcGFydHMucGF0aD1pLnJlY29kZVVyblBhdGgodGhpcy5fcGFydHMucGF0aCksdGhpcy5idWlsZCghQSksdGhpcztpZih0aGlzLl9wYXJ0cy5wYXRoPT09Ii8iKXJldHVybiB0aGlzO1M9aS5yZWNvZGVQYXRoKFMpO3ZhciBQLEY9IiIsaixIO2ZvcihTLmNoYXJBdCgwKSE9PSIvIiYmKFA9ITAsUz0iLyIrUyksKFMuc2xpY2UoLTMpPT09Ii8uLiJ8fFMuc2xpY2UoLTIpPT09Ii8uIikmJihTKz0iLyIpLFM9Uy5yZXBsYWNlKC8oXC8oXC5cLykrKXwoXC9cLiQpL2csIi8iKS5yZXBsYWNlKC9cL3syLH0vZywiLyIpLFAmJihGPVMuc3Vic3RyaW5nKDEpLm1hdGNoKC9eKFwuXC5cLykrLyl8fCIiLEYmJihGPUZbMF0pKTtqPVMuc2VhcmNoKC9cL1wuXC4oXC98JCkvKSxqIT09LTE7KXtpZihqPT09MCl7Uz1TLnN1YnN0cmluZygzKTtjb250aW51ZX1IPVMuc3Vic3RyaW5nKDAsaikubGFzdEluZGV4T2YoIi8iKSxIPT09LTEmJihIPWopLFM9Uy5zdWJzdHJpbmcoMCxIKStTLnN1YnN0cmluZyhqKzMpfXJldHVybiBQJiZ0aGlzLmlzKCJyZWxhdGl2ZSIpJiYoUz1GK1Muc3Vic3RyaW5nKDEpKSx0aGlzLl9wYXJ0cy5wYXRoPVMsdGhpcy5idWlsZCghQSksdGhpc30sZi5ub3JtYWxpemVQYXRobmFtZT1mLm5vcm1hbGl6ZVBhdGgsZi5ub3JtYWxpemVRdWVyeT1mdW5jdGlvbihBKXtyZXR1cm4gdHlwZW9mIHRoaXMuX3BhcnRzLnF1ZXJ5PT0ic3RyaW5nIiYmKHRoaXMuX3BhcnRzLnF1ZXJ5Lmxlbmd0aD90aGlzLnF1ZXJ5KGkucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKSk6dGhpcy5fcGFydHMucXVlcnk9bnVsbCx0aGlzLmJ1aWxkKCFBKSksdGhpc30sZi5ub3JtYWxpemVGcmFnbWVudD1mdW5jdGlvbihBKXtyZXR1cm4gdGhpcy5fcGFydHMuZnJhZ21lbnR8fCh0aGlzLl9wYXJ0cy5mcmFnbWVudD1udWxsLHRoaXMuYnVpbGQoIUEpKSx0aGlzfSxmLm5vcm1hbGl6ZVNlYXJjaD1mLm5vcm1hbGl6ZVF1ZXJ5LGYubm9ybWFsaXplSGFzaD1mLm5vcm1hbGl6ZUZyYWdtZW50LGYuaXNvODg1OT1mdW5jdGlvbigpe3ZhciBBPWkuZW5jb2RlLFM9aS5kZWNvZGU7aS5lbmNvZGU9ZXNjYXBlLGkuZGVjb2RlPWRlY29kZVVSSUNvbXBvbmVudDt0cnl7dGhpcy5ub3JtYWxpemUoKX1maW5hbGx5e2kuZW5jb2RlPUEsaS5kZWNvZGU9U31yZXR1cm4gdGhpc30sZi51bmljb2RlPWZ1bmN0aW9uKCl7dmFyIEE9aS5lbmNvZGUsUz1pLmRlY29kZTtpLmVuY29kZT1PLGkuZGVjb2RlPXVuZXNjYXBlO3RyeXt0aGlzLm5vcm1hbGl6ZSgpfWZpbmFsbHl7aS5lbmNvZGU9QSxpLmRlY29kZT1TfXJldHVybiB0aGlzfSxmLnJlYWRhYmxlPWZ1bmN0aW9uKCl7dmFyIEE9dGhpcy5jbG9uZSgpO0EudXNlcm5hbWUoIiIpLnBhc3N3b3JkKCIiKS5ub3JtYWxpemUoKTt2YXIgUz0iIjtpZihBLl9wYXJ0cy5wcm90b2NvbCYmKFMrPUEuX3BhcnRzLnByb3RvY29sKyI6Ly8iKSxBLl9wYXJ0cy5ob3N0bmFtZSYmKEEuaXMoInB1bnljb2RlIikmJnQ/KFMrPXQudG9Vbmljb2RlKEEuX3BhcnRzLmhvc3RuYW1lKSxBLl9wYXJ0cy5wb3J0JiYoUys9IjoiK0EuX3BhcnRzLnBvcnQpKTpTKz1BLmhvc3QoKSksQS5fcGFydHMuaG9zdG5hbWUmJkEuX3BhcnRzLnBhdGgmJkEuX3BhcnRzLnBhdGguY2hhckF0KDApIT09Ii8iJiYoUys9Ii8iKSxTKz1BLnBhdGgoITApLEEuX3BhcnRzLnF1ZXJ5KXtmb3IodmFyIFA9IiIsRj0wLGo9QS5fcGFydHMucXVlcnkuc3BsaXQoIiYiKSxIPWoubGVuZ3RoO0Y8SDtGKyspe3ZhciBrPShqW0ZdfHwiIikuc3BsaXQoIj0iKTtQKz0iJiIraS5kZWNvZGVRdWVyeShrWzBdLHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpLnJlcGxhY2UoLyYvZywiJTI2Iiksa1sxXSE9PXZvaWQgMCYmKFArPSI9IitpLmRlY29kZVF1ZXJ5KGtbMV0sdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSkucmVwbGFjZSgvJi9nLCIlMjYiKSl9Uys9Ij8iK1Auc3Vic3RyaW5nKDEpfXJldHVybiBTKz1pLmRlY29kZVF1ZXJ5KEEuaGFzaCgpLCEwKSxTfSxmLmFic29sdXRlVG89ZnVuY3Rpb24oQSl7dmFyIFM9dGhpcy5jbG9uZSgpLFA9WyJwcm90b2NvbCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJob3N0bmFtZSIsInBvcnQiXSxGLGosSDtpZih0aGlzLl9wYXJ0cy51cm4pdGhyb3cgbmV3IEVycm9yKCJVUk5zIGRvIG5vdCBoYXZlIGFueSBnZW5lcmFsbHkgZGVmaW5lZCBoaWVyYXJjaGljYWwgY29tcG9uZW50cyIpO2lmKEEgaW5zdGFuY2VvZiBpfHwoQT1uZXcgaShBKSksUy5fcGFydHMucHJvdG9jb2x8fChTLl9wYXJ0cy5wcm90b2NvbD1BLl9wYXJ0cy5wcm90b2NvbCx0aGlzLl9wYXJ0cy5ob3N0bmFtZSkpcmV0dXJuIFM7Zm9yKGo9MDtIPVBbal07aisrKVMuX3BhcnRzW0hdPUEuX3BhcnRzW0hdO3JldHVybiBTLl9wYXJ0cy5wYXRoPyhTLl9wYXJ0cy5wYXRoLnN1YnN0cmluZygtMik9PT0iLi4iJiYoUy5fcGFydHMucGF0aCs9Ii8iKSxTLnBhdGgoKS5jaGFyQXQoMCkhPT0iLyImJihGPUEuZGlyZWN0b3J5KCksRj1GfHwoQS5wYXRoKCkuaW5kZXhPZigiLyIpPT09MD8iLyI6IiIpLFMuX3BhcnRzLnBhdGg9KEY/RisiLyI6IiIpK1MuX3BhcnRzLnBhdGgsUy5ub3JtYWxpemVQYXRoKCkpKTooUy5fcGFydHMucGF0aD1BLl9wYXJ0cy5wYXRoLFMuX3BhcnRzLnF1ZXJ5fHwoUy5fcGFydHMucXVlcnk9QS5fcGFydHMucXVlcnkpKSxTLmJ1aWxkKCksU30sZi5yZWxhdGl2ZVRvPWZ1bmN0aW9uKEEpe3ZhciBTPXRoaXMuY2xvbmUoKS5ub3JtYWxpemUoKSxQLEYsaixILGs7aWYoUy5fcGFydHMudXJuKXRocm93IG5ldyBFcnJvcigiVVJOcyBkbyBub3QgaGF2ZSBhbnkgZ2VuZXJhbGx5IGRlZmluZWQgaGllcmFyY2hpY2FsIGNvbXBvbmVudHMiKTtpZihBPW5ldyBpKEEpLm5vcm1hbGl6ZSgpLFA9Uy5fcGFydHMsRj1BLl9wYXJ0cyxIPVMucGF0aCgpLGs9QS5wYXRoKCksSC5jaGFyQXQoMCkhPT0iLyIpdGhyb3cgbmV3IEVycm9yKCJVUkkgaXMgYWxyZWFkeSByZWxhdGl2ZSIpO2lmKGsuY2hhckF0KDApIT09Ii8iKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNhbGN1bGF0ZSBhIFVSSSByZWxhdGl2ZSB0byBhbm90aGVyIHJlbGF0aXZlIFVSSSIpO2lmKFAucHJvdG9jb2w9PT1GLnByb3RvY29sJiYoUC5wcm90b2NvbD1udWxsKSxQLnVzZXJuYW1lIT09Ri51c2VybmFtZXx8UC5wYXNzd29yZCE9PUYucGFzc3dvcmR8fFAucHJvdG9jb2whPT1udWxsfHxQLnVzZXJuYW1lIT09bnVsbHx8UC5wYXNzd29yZCE9PW51bGwpcmV0dXJuIFMuYnVpbGQoKTtpZihQLmhvc3RuYW1lPT09Ri5ob3N0bmFtZSYmUC5wb3J0PT09Ri5wb3J0KVAuaG9zdG5hbWU9bnVsbCxQLnBvcnQ9bnVsbDtlbHNlIHJldHVybiBTLmJ1aWxkKCk7aWYoSD09PWspcmV0dXJuIFAucGF0aD0iIixTLmJ1aWxkKCk7aWYoaj1pLmNvbW1vblBhdGgoSCxrKSwhailyZXR1cm4gUy5idWlsZCgpO3ZhciBLPUYucGF0aC5zdWJzdHJpbmcoai5sZW5ndGgpLnJlcGxhY2UoL1teXC9dKiQvLCIiKS5yZXBsYWNlKC8uKj9cLy9nLCIuLi8iKTtyZXR1cm4gUC5wYXRoPUsrUC5wYXRoLnN1YnN0cmluZyhqLmxlbmd0aCl8fCIuLyIsUy5idWlsZCgpfSxmLmVxdWFscz1mdW5jdGlvbihBKXt2YXIgUz10aGlzLmNsb25lKCksUD1uZXcgaShBKSxGPXt9LGo9e30sSD17fSxrLEssWDtpZihTLm5vcm1hbGl6ZSgpLFAubm9ybWFsaXplKCksUy50b1N0cmluZygpPT09UC50b1N0cmluZygpKXJldHVybiEwO2lmKGs9Uy5xdWVyeSgpLEs9UC5xdWVyeSgpLFMucXVlcnkoIiIpLFAucXVlcnkoIiIpLFMudG9TdHJpbmcoKSE9PVAudG9TdHJpbmcoKXx8ay5sZW5ndGghPT1LLmxlbmd0aClyZXR1cm4hMTtGPWkucGFyc2VRdWVyeShrLHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpLGo9aS5wYXJzZVF1ZXJ5KEssdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7Zm9yKFggaW4gRilpZih1LmNhbGwoRixYKSl7aWYocChGW1hdKSl7aWYoIV8oRltYXSxqW1hdKSlyZXR1cm4hMX1lbHNlIGlmKEZbWF0hPT1qW1hdKXJldHVybiExO0hbWF09ITB9Zm9yKFggaW4gailpZih1LmNhbGwoaixYKSYmIUhbWF0pcmV0dXJuITE7cmV0dXJuITB9LGYucHJldmVudEludmFsaWRIb3N0bmFtZT1mdW5jdGlvbihBKXtyZXR1cm4gdGhpcy5fcGFydHMucHJldmVudEludmFsaWRIb3N0bmFtZT0hIUEsdGhpc30sZi5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnM9ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycz0hIUEsdGhpc30sZi5lc2NhcGVRdWVyeVNwYWNlPWZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlPSEhQSx0aGlzfSxpfSl9KTtmdW5jdGlvbiBHeCh0KXtyZXR1cm4odC5sZW5ndGg9PT0wfHx0W3QubGVuZ3RoLTFdIT09Ii8iKSYmKHQ9YCR7dH0vYCksdH12YXIgUTEsSjE9WigoKT0+e1ExPUd4fSk7ZnVuY3Rpb24gdEEodCxlKXtpZih0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKXJldHVybiB0O2U9eChlLCExKTtsZXQgbj1uZXcgdC5jb25zdHJ1Y3Rvcjtmb3IobGV0IG8gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG8pKXtsZXQgcj10W29dO2UmJihyPXRBKHIsZSkpLG5bb109cn1yZXR1cm4gbn12YXIgUWMsZUE9WigoKT0+e0l0KCk7UWM9dEF9KTtmdW5jdGlvbiBuQSh0LGUsbil7bj14KG4sITEpO2xldCBvPXt9LHI9aCh0KSxpPWgoZSkscyxmLHU7aWYocilmb3IocyBpbiB0KXQuaGFzT3duUHJvcGVydHkocykmJihmPXRbc10saSYmbiYmdHlwZW9mIGY9PSJvYmplY3QiJiZlLmhhc093blByb3BlcnR5KHMpPyh1PWVbc10sdHlwZW9mIHU9PSJvYmplY3QiP29bc109bkEoZix1LG4pOm9bc109Zik6b1tzXT1mKTtpZihpKWZvcihzIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShzKSYmIW8uaGFzT3duUHJvcGVydHkocykmJih1PWVbc10sb1tzXT11KTtyZXR1cm4gb312YXIgeXIseXA9WigoKT0+e0l0KCk7YXQoKTt5cj1uQX0pO2Z1bmN0aW9uIHp4KCl7bGV0IHQsZSxuPW5ldyBQcm9taXNlKGZ1bmN0aW9uKG8scil7dD1vLGU9cn0pO3JldHVybntyZXNvbHZlOnQscmVqZWN0OmUscHJvbWlzZTpufX12YXIgcXMscmg9WigoKT0+e3FzPXp4fSk7ZnVuY3Rpb24gaWgodCxlKXtsZXQgbjtyZXR1cm4gdHlwZW9mIGRvY3VtZW50PCJ1IiYmKG49ZG9jdW1lbnQpLGloLl9pbXBsZW1lbnRhdGlvbih0LGUsbil9dmFyIG9BLG1mLHNoPVooKCk9PntvQT1tbyhIcygpLDEpO0l0KCk7YXQoKTtIdCgpO2loLl9pbXBsZW1lbnRhdGlvbj1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEIoInJlbGF0aXZlIHVyaSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl7aWYodHlwZW9mIG4+InUiKXJldHVybiB0O2U9eChuLmJhc2VVUkksbi5sb2NhdGlvbi5ocmVmKX1sZXQgbz1uZXcgb0EuZGVmYXVsdCh0KTtyZXR1cm4gby5zY2hlbWUoKSE9PSIiP28udG9TdHJpbmcoKTpvLmFic29sdXRlVG8oZSkudG9TdHJpbmcoKX07bWY9aWh9KTtmdW5jdGlvbiBqeCh0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJ1cmkgaXMgcmVxdWlyZWQuIik7bGV0IG49IiIsbz10Lmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIG8hPT0tMSYmKG49dC5zdWJzdHJpbmcoMCxvKzEpKSxlJiYodD1uZXcgckEuZGVmYXVsdCh0KSx0LnF1ZXJ5KCkubGVuZ3RoIT09MCYmKG4rPWA/JHt0LnF1ZXJ5KCl9YCksdC5mcmFnbWVudCgpLmxlbmd0aCE9PTAmJihuKz1gIyR7dC5mcmFnbWVudCgpfWApKSxufXZhciByQSxpQSxzQT1aKCgpPT57ckE9bW8oSHMoKSwxKTthdCgpO0h0KCk7aUE9anh9KTtmdW5jdGlvbiBIeCh0KXtpZighaCh0KSl0aHJvdyBuZXcgQigidXJpIGlzIHJlcXVpcmVkLiIpO2xldCBlPW5ldyBjQS5kZWZhdWx0KHQpO2Uubm9ybWFsaXplKCk7bGV0IG49ZS5wYXRoKCksbz1uLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIG8hPT0tMSYmKG49bi5zdWJzdHIobysxKSksbz1uLmxhc3RJbmRleE9mKCIuIiksbz09PS0xP249IiI6bj1uLnN1YnN0cihvKzEpLG59dmFyIGNBLGFBLGZBPVooKCk9PntjQT1tbyhIcygpLDEpO2F0KCk7SHQoKTthQT1IeH0pO2Z1bmN0aW9uIHF4KHQsZSxuKXtoKGUpfHwoZT10LndpZHRoKSxoKG4pfHwobj10LmhlaWdodCk7bGV0IG89dUFbZV07aChvKXx8KG89e30sdUFbZV09byk7bGV0IHI9b1tuXTtpZighaChyKSl7bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7aS53aWR0aD1lLGkuaGVpZ2h0PW4scj1pLmdldENvbnRleHQoIjJkIix7d2lsbFJlYWRGcmVxdWVudGx5OiEwfSksci5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249ImNvcHkiLG9bbl09cn1yZXR1cm4gci5kcmF3SW1hZ2UodCwwLDAsZSxuKSxyLmdldEltYWdlRGF0YSgwLDAsZSxuKS5kYXRhfXZhciB1QSxjaCxsQT1aKCgpPT57YXQoKTt1QT17fTtjaD1xeH0pO2Z1bmN0aW9uIFd4KHQpe3JldHVybiB5LnR5cGVPZi5zdHJpbmcoInVyaSIsdCksS3gudGVzdCh0KX12YXIgS3gsZ3AsYWg9WigoKT0+e1l0KCk7S3g9L15ibG9iOi9pO2dwPVd4fSk7ZnVuY3Rpb24gWHgodCl7aCh0aSl8fCh0aT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLHRpLmhyZWY9d2luZG93LmxvY2F0aW9uLmhyZWY7bGV0IGU9dGkuaG9zdCxuPXRpLnByb3RvY29sO3JldHVybiB0aS5ocmVmPXQsdGkuaHJlZj10aS5ocmVmLG4hPT10aS5wcm90b2NvbHx8ZSE9PXRpLmhvc3R9dmFyIHRpLHBBLGRBPVooKCk9PnthdCgpO3BBPVh4fSk7ZnVuY3Rpb24gJHgodCl7cmV0dXJuIHkudHlwZU9mLnN0cmluZygidXJpIix0KSxZeC50ZXN0KHQpfXZhciBZeCxBcCxmaD1aKCgpPT57WXQoKTtZeD0vXmRhdGE6L2k7QXA9JHh9KTtmdW5jdGlvbiBaeCh0KXtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtyZXR1cm4gZS5hc3luYz0hMCxlLnNyYz10LG5ldyBQcm9taXNlKChuLG8pPT57d2luZG93LmNyb3NzT3JpZ2luSXNvbGF0ZWQmJmUuc2V0QXR0cmlidXRlKCJjcm9zc29yaWdpbiIsImFub255bW91cyIpO2xldCByPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07ZS5vbmxvYWQ9ZnVuY3Rpb24oKXtlLm9ubG9hZD12b2lkIDAsci5yZW1vdmVDaGlsZChlKSxuKCl9LGUub25lcnJvcj1mdW5jdGlvbihpKXtvKGkpfSxyLmFwcGVuZENoaWxkKGUpfSl9dmFyIG1BLGhBPVooKCk9PnttQT1aeH0pO2Z1bmN0aW9uIFF4KHQpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJvYmogaXMgcmVxdWlyZWQuIik7bGV0IGU9IiI7Zm9yKGxldCBuIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShuKSl7bGV0IG89dFtuXSxyPWAke2VuY29kZVVSSUNvbXBvbmVudChuKX09YDtpZihBcnJheS5pc0FycmF5KG8pKWZvcihsZXQgaT0wLHM9by5sZW5ndGg7aTxzOysraSllKz1gJHtyK2VuY29kZVVSSUNvbXBvbmVudChvW2ldKX0mYDtlbHNlIGUrPWAke3IrZW5jb2RlVVJJQ29tcG9uZW50KG8pfSZgfXJldHVybiBlPWUuc2xpY2UoMCwtMSksZX12YXIgX0EseUE9WigoKT0+e2F0KCk7SHQoKTtfQT1ReH0pO2Z1bmN0aW9uIEp4KHQpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJxdWVyeVN0cmluZyBpcyByZXF1aXJlZC4iKTtsZXQgZT17fTtpZih0PT09IiIpcmV0dXJuIGU7bGV0IG49dC5yZXBsYWNlKC9cKy9nLCIlMjAiKS5zcGxpdCgvWyY7XS8pO2ZvcihsZXQgbz0wLHI9bi5sZW5ndGg7bzxyOysrbyl7bGV0IGk9bltvXS5zcGxpdCgiPSIpLHM9ZGVjb2RlVVJJQ29tcG9uZW50KGlbMF0pLGY9aVsxXTtoKGYpP2Y9ZGVjb2RlVVJJQ29tcG9uZW50KGYpOmY9IiI7bGV0IHU9ZVtzXTt0eXBlb2YgdT09InN0cmluZyI/ZVtzXT1bdSxmXTpBcnJheS5pc0FycmF5KHUpP3UucHVzaChmKTplW3NdPWZ9cmV0dXJuIGV9dmFyIGdBLEFBPVooKCk9PnthdCgpO0h0KCk7Z0E9Snh9KTt2YXIgdFAsUm4sYnA9WigoKT0+e3RQPXtVTklTU1VFRDowLElTU1VFRDoxLEFDVElWRToyLFJFQ0VJVkVEOjMsQ0FOQ0VMTEVEOjQsRkFJTEVEOjV9LFJuPU9iamVjdC5mcmVlemUodFApfSk7dmFyIGVQLGJBLHdBPVooKCk9PntlUD17VEVSUkFJTjowLElNQUdFUlk6MSxUSUxFUzNEOjIsT1RIRVI6M30sYkE9T2JqZWN0LmZyZWV6ZShlUCl9KTtmdW5jdGlvbiB3cCh0KXt0PXgodCx4LkVNUFRZX09CSkVDVCk7bGV0IGU9eCh0LnRocm90dGxlQnlTZXJ2ZXIsITEpLG49eCh0LnRocm90dGxlLCExKTt0aGlzLnVybD10LnVybCx0aGlzLnJlcXVlc3RGdW5jdGlvbj10LnJlcXVlc3RGdW5jdGlvbix0aGlzLmNhbmNlbEZ1bmN0aW9uPXQuY2FuY2VsRnVuY3Rpb24sdGhpcy5wcmlvcml0eUZ1bmN0aW9uPXQucHJpb3JpdHlGdW5jdGlvbix0aGlzLnByaW9yaXR5PXgodC5wcmlvcml0eSwwKSx0aGlzLnRocm90dGxlPW4sdGhpcy50aHJvdHRsZUJ5U2VydmVyPWUsdGhpcy50eXBlPXgodC50eXBlLGJBLk9USEVSKSx0aGlzLnNlcnZlcktleT10LnNlcnZlcktleSx0aGlzLnN0YXRlPVJuLlVOSVNTVUVELHRoaXMuZGVmZXJyZWQ9dm9pZCAwLHRoaXMuY2FuY2VsbGVkPSExfXZhciBUQSxPQT1aKCgpPT57SXQoKTthdCgpO2JwKCk7d0EoKTt3cC5wcm90b3R5cGUuY2FuY2VsPWZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxsZWQ9ITB9O3dwLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gaCh0KT8odC51cmw9dGhpcy51cmwsdC5yZXF1ZXN0RnVuY3Rpb249dGhpcy5yZXF1ZXN0RnVuY3Rpb24sdC5jYW5jZWxGdW5jdGlvbj10aGlzLmNhbmNlbEZ1bmN0aW9uLHQucHJpb3JpdHlGdW5jdGlvbj10aGlzLnByaW9yaXR5RnVuY3Rpb24sdC5wcmlvcml0eT10aGlzLnByaW9yaXR5LHQudGhyb3R0bGU9dGhpcy50aHJvdHRsZSx0LnRocm90dGxlQnlTZXJ2ZXI9dGhpcy50aHJvdHRsZUJ5U2VydmVyLHQudHlwZT10aGlzLnR5cGUsdC5zZXJ2ZXJLZXk9dGhpcy5zZXJ2ZXJLZXksdC5zdGF0ZT1Sbi5VTklTU1VFRCx0LmRlZmVycmVkPXZvaWQgMCx0LmNhbmNlbGxlZD0hMSx0KTpuZXcgd3AodGhpcyl9O1RBPXdwfSk7ZnVuY3Rpb24gblAodCl7bGV0IGU9e307aWYoIXQpcmV0dXJuIGU7bGV0IG49dC5zcGxpdChgXHIKYCk7Zm9yKGxldCBvPTA7bzxuLmxlbmd0aDsrK28pe2xldCByPW5bb10saT1yLmluZGV4T2YoIjogIik7aWYoaT4wKXtsZXQgcz1yLnN1YnN0cmluZygwLGkpLGY9ci5zdWJzdHJpbmcoaSsyKTtlW3NdPWZ9fXJldHVybiBlfXZhciBFQSxSQT1aKCgpPT57RUE9blB9KTtmdW5jdGlvbiBTQSh0LGUsbil7dGhpcy5zdGF0dXNDb2RlPXQsdGhpcy5yZXNwb25zZT1lLHRoaXMucmVzcG9uc2VIZWFkZXJzPW4sdHlwZW9mIHRoaXMucmVzcG9uc2VIZWFkZXJzPT0ic3RyaW5nIiYmKHRoaXMucmVzcG9uc2VIZWFkZXJzPUVBKHRoaXMucmVzcG9uc2VIZWFkZXJzKSl9dmFyIGhmLENBPVooKCk9PnthdCgpO1JBKCk7U0EucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7bGV0IHQ9IlJlcXVlc3QgaGFzIGZhaWxlZC4iO3JldHVybiBoKHRoaXMuc3RhdHVzQ29kZSkmJih0Kz1gIFN0YXR1cyBDb2RlOiAke3RoaXMuc3RhdHVzQ29kZX1gKSx0fTtoZj1TQX0pO2Z1bmN0aW9uIF9mKCl7dGhpcy5fbGlzdGVuZXJzPVtdLHRoaXMuX3Njb3Blcz1bXSx0aGlzLl90b1JlbW92ZT1bXSx0aGlzLl9pbnNpZGVSYWlzZUV2ZW50PSExfWZ1bmN0aW9uIG9QKHQsZSl7cmV0dXJuIGUtdH12YXIgeEEsUEE9WigoKT0+e1l0KCk7YXQoKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhfZi5wcm90b3R5cGUse251bWJlck9mTGlzdGVuZXJzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGlzdGVuZXJzLmxlbmd0aC10aGlzLl90b1JlbW92ZS5sZW5ndGh9fX0pO19mLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2YuZnVuYygibGlzdGVuZXIiLHQpLHRoaXMuX2xpc3RlbmVycy5wdXNoKHQpLHRoaXMuX3Njb3Blcy5wdXNoKGUpO2xldCBuPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKCl7bi5yZW1vdmVFdmVudExpc3RlbmVyKHQsZSl9fTtfZi5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3kudHlwZU9mLmZ1bmMoImxpc3RlbmVyIix0KTtsZXQgbj10aGlzLl9saXN0ZW5lcnMsbz10aGlzLl9zY29wZXMscj0tMTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKylpZihuW2ldPT09dCYmb1tpXT09PWUpe3I9aTticmVha31yZXR1cm4gciE9PS0xPyh0aGlzLl9pbnNpZGVSYWlzZUV2ZW50Pyh0aGlzLl90b1JlbW92ZS5wdXNoKHIpLG5bcl09dm9pZCAwLG9bcl09dm9pZCAwKToobi5zcGxpY2UociwxKSxvLnNwbGljZShyLDEpKSwhMCk6ITF9O19mLnByb3RvdHlwZS5yYWlzZUV2ZW50PWZ1bmN0aW9uKCl7dGhpcy5faW5zaWRlUmFpc2VFdmVudD0hMDtsZXQgdCxlPXRoaXMuX2xpc3RlbmVycyxuPXRoaXMuX3Njb3BlcyxvPWUubGVuZ3RoO2Zvcih0PTA7dDxvO3QrKyl7bGV0IGk9ZVt0XTtoKGkpJiZlW3RdLmFwcGx5KG5bdF0sYXJndW1lbnRzKX1sZXQgcj10aGlzLl90b1JlbW92ZTtpZihvPXIubGVuZ3RoLG8+MCl7Zm9yKHIuc29ydChvUCksdD0wO3Q8bzt0Kyspe2xldCBpPXJbdF07ZS5zcGxpY2UoaSwxKSxuLnNwbGljZShpLDEpfXIubGVuZ3RoPTB9dGhpcy5faW5zaWRlUmFpc2VFdmVudD0hMX07eEE9X2Z9KTtmdW5jdGlvbiBLcyh0KXt5LnR5cGVPZi5vYmplY3QoIm9wdGlvbnMiLHQpLHkuZGVmaW5lZCgib3B0aW9ucy5jb21wYXJhdG9yIix0LmNvbXBhcmF0b3IpLHRoaXMuX2NvbXBhcmF0b3I9dC5jb21wYXJhdG9yLHRoaXMuX2FycmF5PVtdLHRoaXMuX2xlbmd0aD0wLHRoaXMuX21heGltdW1MZW5ndGg9dm9pZCAwfWZ1bmN0aW9uIHVoKHQsZSxuKXtsZXQgbz10W2VdO3RbZV09dFtuXSx0W25dPW99dmFyIE1BLE5BPVooKCk9PntZdCgpO0l0KCk7YXQoKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhLcy5wcm90b3R5cGUse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xlbmd0aH19LGludGVybmFsQXJyYXk6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnJheX19LG1heGltdW1MZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhpbXVtTGVuZ3RofSxzZXQ6ZnVuY3Rpb24odCl7eS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIm1heGltdW1MZW5ndGgiLHQsMCk7bGV0IGU9dGhpcy5fbGVuZ3RoO2lmKHQ8ZSl7bGV0IG49dGhpcy5fYXJyYXk7Zm9yKGxldCBvPXQ7bzxlOysrbyluW29dPXZvaWQgMDt0aGlzLl9sZW5ndGg9dCxuLmxlbmd0aD10fXRoaXMuX21heGltdW1MZW5ndGg9dH19LGNvbXBhcmF0b3I6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21wYXJhdG9yfX19KTtLcy5wcm90b3R5cGUucmVzZXJ2ZT1mdW5jdGlvbih0KXt0PXgodCx0aGlzLl9sZW5ndGgpLHRoaXMuX2FycmF5Lmxlbmd0aD10fTtLcy5wcm90b3R5cGUuaGVhcGlmeT1mdW5jdGlvbih0KXt0PXgodCwwKTtsZXQgZT10aGlzLl9sZW5ndGgsbj10aGlzLl9jb21wYXJhdG9yLG89dGhpcy5fYXJyYXkscj0tMSxpPSEwO2Zvcig7aTspe2xldCBzPTIqKHQrMSksZj1zLTE7ZjxlJiZuKG9bZl0sb1t0XSk8MD9yPWY6cj10LHM8ZSYmbihvW3NdLG9bcl0pPDAmJihyPXMpLHIhPT10Pyh1aChvLHIsdCksdD1yKTppPSExfX07S3MucHJvdG90eXBlLnJlc29ydD1mdW5jdGlvbigpe2xldCB0PXRoaXMuX2xlbmd0aDtmb3IobGV0IGU9TWF0aC5jZWlsKHQvMik7ZT49MDstLWUpdGhpcy5oZWFwaWZ5KGUpfTtLcy5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQpe3kuZGVmaW5lZCgiZWxlbWVudCIsdCk7bGV0IGU9dGhpcy5fYXJyYXksbj10aGlzLl9jb21wYXJhdG9yLG89dGhpcy5fbWF4aW11bUxlbmd0aCxyPXRoaXMuX2xlbmd0aCsrO2ZvcihyPGUubGVuZ3RoP2Vbcl09dDplLnB1c2godCk7ciE9PTA7KXtsZXQgcz1NYXRoLmZsb29yKChyLTEpLzIpO2lmKG4oZVtyXSxlW3NdKTwwKXVoKGUscixzKSxyPXM7ZWxzZSBicmVha31sZXQgaTtyZXR1cm4gaChvKSYmdGhpcy5fbGVuZ3RoPm8mJihpPWVbb10sdGhpcy5fbGVuZ3RoPW8pLGl9O0tzLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24odCl7aWYodD14KHQsMCksdGhpcy5fbGVuZ3RoPT09MClyZXR1cm47eS50eXBlT2YubnVtYmVyLmxlc3NUaGFuKCJpbmRleCIsdCx0aGlzLl9sZW5ndGgpO2xldCBlPXRoaXMuX2FycmF5LG49ZVt0XTtyZXR1cm4gdWgoZSx0LC0tdGhpcy5fbGVuZ3RoKSx0aGlzLmhlYXBpZnkodCksZVt0aGlzLl9sZW5ndGhdPXZvaWQgMCxufTtNQT1Lc30pO2Z1bmN0aW9uIHJQKHQsZSl7cmV0dXJuIHQucHJpb3JpdHktZS5wcmlvcml0eX1mdW5jdGlvbiBibigpe31mdW5jdGlvbiBJQSh0KXtoKHQucHJpb3JpdHlGdW5jdGlvbikmJih0LnByaW9yaXR5PXQucHJpb3JpdHlGdW5jdGlvbigpKX1mdW5jdGlvbiB2QSh0KXtyZXR1cm4gdC5zdGF0ZT09PVJuLlVOSVNTVUVEJiYodC5zdGF0ZT1Sbi5JU1NVRUQsdC5kZWZlcnJlZD1xcygpKSx0LmRlZmVycmVkLnByb21pc2V9ZnVuY3Rpb24gc1AodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHQuc3RhdGU9PT1Sbi5DQU5DRUxMRUQpcmV0dXJuO2xldCBuPXQuZGVmZXJyZWQ7LS1qZS5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzLC0tUGlbdC5zZXJ2ZXJLZXldLE9wLnJhaXNlRXZlbnQoKSx0LnN0YXRlPVJuLlJFQ0VJVkVELHQuZGVmZXJyZWQ9dm9pZCAwLG4ucmVzb2x2ZShlKX19ZnVuY3Rpb24gY1AodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3Quc3RhdGUhPT1Sbi5DQU5DRUxMRUQmJigrK2plLm51bWJlck9mRmFpbGVkUmVxdWVzdHMsLS1qZS5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzLC0tUGlbdC5zZXJ2ZXJLZXldLE9wLnJhaXNlRXZlbnQoZSksdC5zdGF0ZT1Sbi5GQUlMRUQsdC5kZWZlcnJlZC5yZWplY3QoZSkpfX1mdW5jdGlvbiBEQSh0KXtsZXQgZT12QSh0KTtyZXR1cm4gdC5zdGF0ZT1Sbi5BQ1RJVkUsZWkucHVzaCh0KSwrK2plLm51bWJlck9mQWN0aXZlUmVxdWVzdHMsKytqZS5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzRXZlciwrK1BpW3Quc2VydmVyS2V5XSx0LnJlcXVlc3RGdW5jdGlvbigpLnRoZW4oc1AodCkpLmNhdGNoKGNQKHQpKSxlfWZ1bmN0aW9uIFdzKHQpe2xldCBlPXQuc3RhdGU9PT1Sbi5BQ1RJVkU7aWYodC5zdGF0ZT1Sbi5DQU5DRUxMRUQsKytqZS5udW1iZXJPZkNhbmNlbGxlZFJlcXVlc3RzLGgodC5kZWZlcnJlZCkpe2xldCBuPXQuZGVmZXJyZWQ7dC5kZWZlcnJlZD12b2lkIDAsbi5yZWplY3QoKX1lJiYoLS1qZS5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzLC0tUGlbdC5zZXJ2ZXJLZXldLCsramUubnVtYmVyT2ZDYW5jZWxsZWRBY3RpdmVSZXF1ZXN0cyksaCh0LmNhbmNlbEZ1bmN0aW9uKSYmdC5jYW5jZWxGdW5jdGlvbigpfWZ1bmN0aW9uIGFQKCl7Ym4uZGVidWdTaG93U3RhdGlzdGljcyYmKGplLm51bWJlck9mQWN0aXZlUmVxdWVzdHM9PT0wJiZqZS5sYXN0TnVtYmVyT2ZBY3RpdmVSZXF1ZXN0cz4wJiYoamUubnVtYmVyT2ZBdHRlbXB0ZWRSZXF1ZXN0cz4wJiYoY29uc29sZS5sb2coYE51bWJlciBvZiBhdHRlbXB0ZWQgcmVxdWVzdHM6ICR7amUubnVtYmVyT2ZBdHRlbXB0ZWRSZXF1ZXN0c31gKSxqZS5udW1iZXJPZkF0dGVtcHRlZFJlcXVlc3RzPTApLGplLm51bWJlck9mQ2FuY2VsbGVkUmVxdWVzdHM+MCYmKGNvbnNvbGUubG9nKGBOdW1iZXIgb2YgY2FuY2VsbGVkIHJlcXVlc3RzOiAke2plLm51bWJlck9mQ2FuY2VsbGVkUmVxdWVzdHN9YCksamUubnVtYmVyT2ZDYW5jZWxsZWRSZXF1ZXN0cz0wKSxqZS5udW1iZXJPZkNhbmNlbGxlZEFjdGl2ZVJlcXVlc3RzPjAmJihjb25zb2xlLmxvZyhgTnVtYmVyIG9mIGNhbmNlbGxlZCBhY3RpdmUgcmVxdWVzdHM6ICR7amUubnVtYmVyT2ZDYW5jZWxsZWRBY3RpdmVSZXF1ZXN0c31gKSxqZS5udW1iZXJPZkNhbmNlbGxlZEFjdGl2ZVJlcXVlc3RzPTApLGplLm51bWJlck9mRmFpbGVkUmVxdWVzdHM+MCYmKGNvbnNvbGUubG9nKGBOdW1iZXIgb2YgZmFpbGVkIHJlcXVlc3RzOiAke2plLm51bWJlck9mRmFpbGVkUmVxdWVzdHN9YCksamUubnVtYmVyT2ZGYWlsZWRSZXF1ZXN0cz0wKSksamUubGFzdE51bWJlck9mQWN0aXZlUmVxdWVzdHM9amUubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0cyl9dmFyIFRwLGplLEpjLE9vLGVpLFBpLGlQLE9wLEVwLExBPVooKCk9PntUcD1tbyhIcygpLDEpO1l0KCk7SXQoKTtyaCgpO2F0KCk7UEEoKTtOQSgpO2FoKCk7ZmgoKTticCgpO2plPXtudW1iZXJPZkF0dGVtcHRlZFJlcXVlc3RzOjAsbnVtYmVyT2ZBY3RpdmVSZXF1ZXN0czowLG51bWJlck9mQ2FuY2VsbGVkUmVxdWVzdHM6MCxudW1iZXJPZkNhbmNlbGxlZEFjdGl2ZVJlcXVlc3RzOjAsbnVtYmVyT2ZGYWlsZWRSZXF1ZXN0czowLG51bWJlck9mQWN0aXZlUmVxdWVzdHNFdmVyOjAsbGFzdE51bWJlck9mQWN0aXZlUmVxdWVzdHM6MH0sSmM9MjAsT289bmV3IE1BKHtjb21wYXJhdG9yOnJQfSk7T28ubWF4aW11bUxlbmd0aD1KYztPby5yZXNlcnZlKEpjKTtlaT1bXSxQaT17fSxpUD10eXBlb2YgZG9jdW1lbnQ8InUiP25ldyBUcC5kZWZhdWx0KGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpOm5ldyBUcC5kZWZhdWx0LE9wPW5ldyB4QTtibi5tYXhpbXVtUmVxdWVzdHM9NTA7Ym4ubWF4aW11bVJlcXVlc3RzUGVyU2VydmVyPTY7Ym4ucmVxdWVzdHNCeVNlcnZlcj17ImFwaS5jZXNpdW0uY29tOjQ0MyI6MTgsImFzc2V0cy5pb24uY2VzaXVtLmNvbTo0NDMiOjE4LCJpYmFzZW1hcHMtYXBpLmFyY2dpcy5jb206NDQzIjoxOCwidGlsZS5nb29nbGVhcGlzLmNvbTo0NDMiOjE4LCJ0aWxlLm9wZW5zdHJlZXRtYXAub3JnOjQ0MyI6MTh9O2JuLnRocm90dGxlUmVxdWVzdHM9ITA7Ym4uZGVidWdTaG93U3RhdGlzdGljcz0hMTtibi5yZXF1ZXN0Q29tcGxldGVkRXZlbnQ9T3A7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYm4se3N0YXRpc3RpY3M6e2dldDpmdW5jdGlvbigpe3JldHVybiBqZX19LHByaW9yaXR5SGVhcExlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEpjfSxzZXQ6ZnVuY3Rpb24odCl7aWYodDxKYylmb3IoO09vLmxlbmd0aD50Oyl7bGV0IGU9T28ucG9wKCk7V3MoZSl9SmM9dCxPby5tYXhpbXVtTGVuZ3RoPXQsT28ucmVzZXJ2ZSh0KX19fSk7Ym4uc2VydmVySGFzT3BlblNsb3RzPWZ1bmN0aW9uKHQsZSl7ZT14KGUsMSk7bGV0IG49eChibi5yZXF1ZXN0c0J5U2VydmVyW3RdLGJuLm1heGltdW1SZXF1ZXN0c1BlclNlcnZlcik7cmV0dXJuIFBpW3RdK2U8PW59O2JuLmhlYXBIYXNPcGVuU2xvdHM9ZnVuY3Rpb24odCl7cmV0dXJuIE9vLmxlbmd0aCt0PD1KY307Ym4udXBkYXRlPWZ1bmN0aW9uKCl7bGV0IHQsZSxuPTAsbz1laS5sZW5ndGg7Zm9yKHQ9MDt0PG87Kyt0KXtpZihlPWVpW3RdLGUuY2FuY2VsbGVkJiZXcyhlKSxlLnN0YXRlIT09Um4uQUNUSVZFKXsrK247Y29udGludWV9bj4wJiYoZWlbdC1uXT1lKX1laS5sZW5ndGgtPW47bGV0IHI9T28uaW50ZXJuYWxBcnJheSxpPU9vLmxlbmd0aDtmb3IodD0wO3Q8aTsrK3QpSUEoclt0XSk7T28ucmVzb3J0KCk7bGV0IHM9TWF0aC5tYXgoYm4ubWF4aW11bVJlcXVlc3RzLWVpLmxlbmd0aCwwKSxmPTA7Zm9yKDtmPHMmJk9vLmxlbmd0aD4wOyl7aWYoZT1Pby5wb3AoKSxlLmNhbmNlbGxlZCl7V3MoZSk7Y29udGludWV9aWYoZS50aHJvdHRsZUJ5U2VydmVyJiYhYm4uc2VydmVySGFzT3BlblNsb3RzKGUuc2VydmVyS2V5KSl7V3MoZSk7Y29udGludWV9REEoZSksKytmfWFQKCl9O2JuLmdldFNlcnZlcktleT1mdW5jdGlvbih0KXt5LnR5cGVPZi5zdHJpbmcoInVybCIsdCk7bGV0IGU9bmV3IFRwLmRlZmF1bHQodCk7ZS5zY2hlbWUoKT09PSIiJiYoZT1lLmFic29sdXRlVG8oaVApLGUubm9ybWFsaXplKCkpO2xldCBuPWUuYXV0aG9yaXR5KCk7LzovLnRlc3Qobil8fChuPWAke259OiR7ZS5zY2hlbWUoKT09PSJodHRwcyI/IjQ0MyI6IjgwIn1gKTtsZXQgbz1QaVtuXTtyZXR1cm4gaChvKXx8KFBpW25dPTApLG59O2JuLnJlcXVlc3Q9ZnVuY3Rpb24odCl7aWYoeS50eXBlT2Yub2JqZWN0KCJyZXF1ZXN0Iix0KSx5LnR5cGVPZi5zdHJpbmcoInJlcXVlc3QudXJsIix0LnVybCkseS50eXBlT2YuZnVuYygicmVxdWVzdC5yZXF1ZXN0RnVuY3Rpb24iLHQucmVxdWVzdEZ1bmN0aW9uKSxBcCh0LnVybCl8fGdwKHQudXJsKSlyZXR1cm4gT3AucmFpc2VFdmVudCgpLHQuc3RhdGU9Um4uUkVDRUlWRUQsdC5yZXF1ZXN0RnVuY3Rpb24oKTtpZigrK2plLm51bWJlck9mQXR0ZW1wdGVkUmVxdWVzdHMsaCh0LnNlcnZlcktleSl8fCh0LnNlcnZlcktleT1ibi5nZXRTZXJ2ZXJLZXkodC51cmwpKSxibi50aHJvdHRsZVJlcXVlc3RzJiZ0LnRocm90dGxlQnlTZXJ2ZXImJiFibi5zZXJ2ZXJIYXNPcGVuU2xvdHModC5zZXJ2ZXJLZXkpKXJldHVybjtpZighYm4udGhyb3R0bGVSZXF1ZXN0c3x8IXQudGhyb3R0bGUpcmV0dXJuIERBKHQpO2lmKGVpLmxlbmd0aD49Ym4ubWF4aW11bVJlcXVlc3RzKXJldHVybjtJQSh0KTtsZXQgZT1Pby5pbnNlcnQodCk7aWYoaChlKSl7aWYoZT09PXQpcmV0dXJuO1dzKGUpfXJldHVybiB2QSh0KX07Ym4uY2xlYXJGb3JTcGVjcz1mdW5jdGlvbigpe2Zvcig7T28ubGVuZ3RoPjA7KXtsZXQgZT1Pby5wb3AoKTtXcyhlKX1sZXQgdD1laS5sZW5ndGg7Zm9yKGxldCBlPTA7ZTx0OysrZSlXcyhlaVtlXSk7ZWkubGVuZ3RoPTAsUGk9e30samUubnVtYmVyT2ZBdHRlbXB0ZWRSZXF1ZXN0cz0wLGplLm51bWJlck9mQWN0aXZlUmVxdWVzdHM9MCxqZS5udW1iZXJPZkNhbmNlbGxlZFJlcXVlc3RzPTAsamUubnVtYmVyT2ZDYW5jZWxsZWRBY3RpdmVSZXF1ZXN0cz0wLGplLm51bWJlck9mRmFpbGVkUmVxdWVzdHM9MCxqZS5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzRXZlcj0wLGplLmxhc3ROdW1iZXJPZkFjdGl2ZVJlcXVlc3RzPTB9O2JuLm51bWJlck9mQWN0aXZlUmVxdWVzdHNCeVNlcnZlcj1mdW5jdGlvbih0KXtyZXR1cm4gUGlbdF19O2JuLnJlcXVlc3RIZWFwPU9vO0VwPWJufSk7ZnVuY3Rpb24gZlAodCl7bGV0IGU9bmV3IEZBLmRlZmF1bHQodCk7ZS5ub3JtYWxpemUoKTtsZXQgbj1lLmF1dGhvcml0eSgpO2lmKG4ubGVuZ3RoIT09MCl7aWYoZS5hdXRob3JpdHkobiksbi5pbmRleE9mKCJAIikhPT0tMSYmKG49bi5zcGxpdCgiQCIpWzFdKSxuLmluZGV4T2YoIjoiKT09PS0xKXtsZXQgbz1lLnNjaGVtZSgpO2lmKG8ubGVuZ3RoPT09MCYmKG89d2luZG93LmxvY2F0aW9uLnByb3RvY29sLG89by5zdWJzdHJpbmcoMCxvLmxlbmd0aC0xKSksbz09PSJodHRwIiluKz0iOjgwIjtlbHNlIGlmKG89PT0iaHR0cHMiKW4rPSI6NDQzIjtlbHNlIHJldHVybn1yZXR1cm4gbn19dmFyIEZBLHlmLHRhLGxoLEJBPVooKCk9PntGQT1tbyhIcygpLDEpO2F0KCk7SHQoKTt5Zj17fSx0YT17fTt5Zi5hZGQ9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgQigiaG9zdCBpcyByZXF1aXJlZC4iKTtpZighaChlKXx8ZTw9MCl0aHJvdyBuZXcgQigicG9ydCBpcyByZXF1aXJlZCB0byBiZSBncmVhdGVyIHRoYW4gMC4iKTtsZXQgbj1gJHt0LnRvTG93ZXJDYXNlKCl9OiR7ZX1gO2godGFbbl0pfHwodGFbbl09ITApfTt5Zi5yZW1vdmU9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgQigiaG9zdCBpcyByZXF1aXJlZC4iKTtpZighaChlKXx8ZTw9MCl0aHJvdyBuZXcgQigicG9ydCBpcyByZXF1aXJlZCB0byBiZSBncmVhdGVyIHRoYW4gMC4iKTtsZXQgbj1gJHt0LnRvTG93ZXJDYXNlKCl9OiR7ZX1gO2godGFbbl0pJiZkZWxldGUgdGFbbl19O3lmLmNvbnRhaW5zPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJ1cmwgaXMgcmVxdWlyZWQuIik7bGV0IGU9ZlAodCk7cmV0dXJuISEoaChlKSYmaCh0YVtlXSkpfTt5Zi5jbGVhcj1mdW5jdGlvbigpe3RhPXt9fTtsaD15Zn0pO2Z1bmN0aW9uIGt0KHQpe3Q9eCh0LHguRU1QVFlfT0JKRUNUKSx0eXBlb2YgdD09InN0cmluZyImJih0PXt1cmw6dH0pLHkudHlwZU9mLnN0cmluZygib3B0aW9ucy51cmwiLHQudXJsKSx0aGlzLl91cmw9dm9pZCAwLHRoaXMuX3RlbXBsYXRlVmFsdWVzPW5pKHQudGVtcGxhdGVWYWx1ZXMse30pLHRoaXMuX3F1ZXJ5UGFyYW1ldGVycz1uaSh0LnF1ZXJ5UGFyYW1ldGVycyx7fSksdGhpcy5oZWFkZXJzPW5pKHQuaGVhZGVycyx7fSksdGhpcy5yZXF1ZXN0PXgodC5yZXF1ZXN0LG5ldyBUQSksdGhpcy5wcm94eT10LnByb3h5LHRoaXMucmV0cnlDYWxsYmFjaz10LnJldHJ5Q2FsbGJhY2ssdGhpcy5yZXRyeUF0dGVtcHRzPXgodC5yZXRyeUF0dGVtcHRzLDApLHRoaXMuX3JldHJ5Q291bnQ9MCx4KHQucGFyc2VVcmwsITApP3RoaXMucGFyc2VVcmwodC51cmwsITAsITApOnRoaXMuX3VybD10LnVybCx0aGlzLl9jcmVkaXRzPXQuY3JlZGl0c31mdW5jdGlvbiBuaSh0LGUpe3JldHVybiBoKHQpP1FjKHQpOmV9ZnVuY3Rpb24gdVAodCl7cmV0dXJuIHQubGVuZ3RoPT09MD97fTp0LmluZGV4T2YoIj0iKT09PS0xP3tbdF06dm9pZCAwfTpnQSh0KX1mdW5jdGlvbiBTcCh0LGUsbil7aWYoIW4pcmV0dXJuIHlyKHQsZSk7bGV0IG89UWModCwhMCk7Zm9yKGxldCByIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShyKSl7bGV0IGk9b1tyXSxzPWVbcl07aChpKT8oQXJyYXkuaXNBcnJheShpKXx8KGk9b1tyXT1baV0pLG9bcl09aS5jb25jYXQocykpOm9bcl09QXJyYXkuaXNBcnJheShzKT9zLnNsaWNlKCk6c31yZXR1cm4gb31mdW5jdGlvbiBsUCh0KXtsZXQgZT1PYmplY3Qua2V5cyh0KTtyZXR1cm4gZS5sZW5ndGg9PT0wPyIiOmUubGVuZ3RoPT09MSYmIWgodFtlWzBdXSk/YD8ke2VbMF19YDpgPyR7X0EodCl9YH1mdW5jdGlvbiBwaCh0KXtsZXQgZT10LnJlc291cmNlLG49dC5mbGlwWSxvPXQuc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uLHI9dC5wcmVmZXJJbWFnZUJpdG1hcCxpPWUucmVxdWVzdDtpLnVybD1lLnVybCxpLnJlcXVlc3RGdW5jdGlvbj1mdW5jdGlvbigpe2xldCBmPSExOyFlLmlzRGF0YVVyaSYmIWUuaXNCbG9iVXJpJiYoZj1lLmlzQ3Jvc3NPcmlnaW5VcmwpO2xldCB1PXFzKCk7cmV0dXJuIGt0Ll9JbXBsZW1lbnRhdGlvbnMuY3JlYXRlSW1hZ2UoaSxmLHUsbixvLHIpLHUucHJvbWlzZX07bGV0IHM9RXAucmVxdWVzdChpKTtpZihoKHMpKXJldHVybiBzLmNhdGNoKGZ1bmN0aW9uKGYpe3JldHVybiBpLnN0YXRlIT09Um4uRkFJTEVEP1Byb21pc2UucmVqZWN0KGYpOmUucmV0cnlPbkVycm9yKGYpLnRoZW4oZnVuY3Rpb24odSl7cmV0dXJuIHU/KGkuc3RhdGU9Um4uVU5JU1NVRUQsaS5kZWZlcnJlZD12b2lkIDAscGgoe3Jlc291cmNlOmUsZmxpcFk6bixza2lwQ29sb3JTcGFjZUNvbnZlcnNpb246byxwcmVmZXJJbWFnZUJpdG1hcDpyfSkpOlByb21pc2UucmVqZWN0KGYpfSl9KX1mdW5jdGlvbiB6QSh0LGUsbil7bGV0IG89e307b1tlXT1uLHQuc2V0UXVlcnlQYXJhbWV0ZXJzKG8pO2xldCByPXQucmVxdWVzdCxpPXQudXJsO3IudXJsPWksci5yZXF1ZXN0RnVuY3Rpb249ZnVuY3Rpb24oKXtsZXQgZj1xcygpO3JldHVybiB3aW5kb3dbbl09ZnVuY3Rpb24odSl7Zi5yZXNvbHZlKHUpO3RyeXtkZWxldGUgd2luZG93W25dfWNhdGNoe3dpbmRvd1tuXT12b2lkIDB9fSxrdC5fSW1wbGVtZW50YXRpb25zLmxvYWRBbmRFeGVjdXRlU2NyaXB0KGksbixmKSxmLnByb21pc2V9O2xldCBzPUVwLnJlcXVlc3Qocik7aWYoaChzKSlyZXR1cm4gcy5jYXRjaChmdW5jdGlvbihmKXtyZXR1cm4gci5zdGF0ZSE9PVJuLkZBSUxFRD9Qcm9taXNlLnJlamVjdChmKTp0LnJldHJ5T25FcnJvcihmKS50aGVuKGZ1bmN0aW9uKHUpe3JldHVybiB1PyhyLnN0YXRlPVJuLlVOSVNTVUVELHIuZGVmZXJyZWQ9dm9pZCAwLHpBKHQsZSxuKSk6UHJvbWlzZS5yZWplY3QoZil9KX0pfWZ1bmN0aW9uIGRoKHQpe2lmKHQuc3RhdGU9PT1Sbi5JU1NVRUR8fHQuc3RhdGU9PT1Sbi5BQ1RJVkUpdGhyb3cgbmV3IGdlKCJUaGUgUmVzb3VyY2UgaXMgYWxyZWFkeSBiZWluZyBmZXRjaGVkLiIpO3Quc3RhdGU9Um4uVU5JU1NVRUQsdC5kZWZlcnJlZD12b2lkIDB9ZnVuY3Rpb24gUnAodCxlKXtsZXQgbj1kZWNvZGVVUklDb21wb25lbnQoZSk7cmV0dXJuIHQ/YXRvYihuKTpufWZ1bmN0aW9uIFVBKHQsZSl7bGV0IG49UnAodCxlKSxvPW5ldyBBcnJheUJ1ZmZlcihuLmxlbmd0aCkscj1uZXcgVWludDhBcnJheShvKTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKylyW2ldPW4uY2hhckNvZGVBdChpKTtyZXR1cm4gb31mdW5jdGlvbiBkUCh0LGUpe2U9eChlLCIiKTtsZXQgbj10WzFdLG89ISF0WzJdLHI9dFszXSxpLHM7c3dpdGNoKGUpe2Nhc2UiIjpjYXNlInRleHQiOnJldHVybiBScChvLHIpO2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBVQShvLHIpO2Nhc2UiYmxvYiI6cmV0dXJuIGk9VUEobyxyKSxuZXcgQmxvYihbaV0se3R5cGU6bn0pO2Nhc2UiZG9jdW1lbnQiOnJldHVybiBzPW5ldyBET01QYXJzZXIscy5wYXJzZUZyb21TdHJpbmcoUnAobyxyKSxuKTtjYXNlImpzb24iOnJldHVybiBKU09OLnBhcnNlKFJwKG8scikpO2RlZmF1bHQ6dGhyb3cgbmV3IEIoYFVuaGFuZGxlZCByZXNwb25zZVR5cGU6ICR7ZX1gKX19ZnVuY3Rpb24gVkEodCxlKXtzd2l0Y2goZSl7Y2FzZSJ0ZXh0IjpyZXR1cm4gdC50b1N0cmluZygidXRmOCIpO2Nhc2UianNvbiI6cmV0dXJuIEpTT04ucGFyc2UodC50b1N0cmluZygidXRmOCIpKTtkZWZhdWx0OnJldHVybiBuZXcgVWludDhBcnJheSh0KS5idWZmZXJ9fWZ1bmN0aW9uIG1QKHQsZSxuLG8scixpLHMpe2xldCBmLHU7UHJvbWlzZS5hbGwoW2ltcG9ydCgidXJsIiksaW1wb3J0KCJ6bGliIildKS50aGVuKChbYyxsXSk9PihmPWMucGFyc2UodCksdT1sLGYucHJvdG9jb2w9PT0iaHR0cHM6Ij9pbXBvcnQoImh0dHBzIik6aW1wb3J0KCJodHRwIikpKS50aGVuKGM9PntsZXQgbD17cHJvdG9jb2w6Zi5wcm90b2NvbCxob3N0bmFtZTpmLmhvc3RuYW1lLHBvcnQ6Zi5wb3J0LHBhdGg6Zi5wYXRoLHF1ZXJ5OmYucXVlcnksbWV0aG9kOm4saGVhZGVyczpyfTtjLnJlcXVlc3QobCkub24oInJlc3BvbnNlIixmdW5jdGlvbihwKXtpZihwLnN0YXR1c0NvZGU8MjAwfHxwLnN0YXR1c0NvZGU+PTMwMCl7aS5yZWplY3QobmV3IGhmKHAuc3RhdHVzQ29kZSxwLHAuaGVhZGVycykpO3JldHVybn1sZXQgZD1bXTtwLm9uKCJkYXRhIixmdW5jdGlvbihtKXtkLnB1c2gobSl9KSxwLm9uKCJlbmQiLGZ1bmN0aW9uKCl7bGV0IG09QnVmZmVyLmNvbmNhdChkKTtwLmhlYWRlcnNbImNvbnRlbnQtZW5jb2RpbmciXT09PSJnemlwIj91Lmd1bnppcChtLGZ1bmN0aW9uKF8sZyl7Xz9pLnJlamVjdChuZXcgZ2UoIkVycm9yIGRlY29tcHJlc3NpbmcgcmVzcG9uc2UuIikpOmkucmVzb2x2ZShWQShnLGUpKX0pOmkucmVzb2x2ZShWQShtLGUpKX0pfSkub24oImVycm9yIixmdW5jdGlvbihwKXtpLnJlamVjdChuZXcgaGYpfSkuZW5kKCl9KX12YXIga0EsR0EsZWEscFAsaFAsb2ksZ2Y9WigoKT0+e2tBPW1vKEhzKCksMSk7SjEoKTtZdCgpO2VBKCk7eXAoKTtJdCgpO3JoKCk7YXQoKTtIdCgpO3NoKCk7c0EoKTtmQSgpO2xBKCk7YWgoKTtkQSgpO2ZoKCk7aEEoKTtXdCgpO3lBKCk7QUEoKTtPQSgpO0NBKCk7TEEoKTticCgpO0pyKCk7QkEoKTtHQT1mdW5jdGlvbigpe3RyeXtsZXQgdD1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIHQub3BlbigiR0VUIiwiIyIsITApLHQucmVzcG9uc2VUeXBlPSJibG9iIix0LnJlc3BvbnNlVHlwZT09PSJibG9iIn1jYXRjaHtyZXR1cm4hMX19KCk7a3QuY3JlYXRlSWZOZWVkZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBrdD90LmdldERlcml2ZWRSZXNvdXJjZSh7cmVxdWVzdDp0LnJlcXVlc3R9KTp0eXBlb2YgdCE9InN0cmluZyI/dDpuZXcga3Qoe3VybDp0fSl9O2t0LnN1cHBvcnRzSW1hZ2VCaXRtYXBPcHRpb25zPWZ1bmN0aW9uKCl7aWYoaChlYSkpcmV0dXJuIGVhO2lmKHR5cGVvZiBjcmVhdGVJbWFnZUJpdG1hcCE9ImZ1bmN0aW9uIilyZXR1cm4gZWE9UHJvbWlzZS5yZXNvbHZlKCExKSxlYTtsZXQgdD0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FJQUFBQ1FkMVBlQUFBQUJHZEJUVUVBQUU0ZzNyRWlEZ0FBQUNCalNGSk5BQUI2SmdBQWdJUUFBUG9BQUFDQTZBQUFkVEFBQU9wZ0FBQTZtQUFBRjNDY3VsRThBQUFBREVsRVFWUUkxMk5nNkdBQUFBRVVBSW5nRTNaaUFBQUFBRWxGVGtTdVFtQ0MiO3JldHVybiBlYT1rdC5mZXRjaEJsb2Ioe3VybDp0fSkudGhlbihmdW5jdGlvbihlKXtsZXQgbj17aW1hZ2VPcmllbnRhdGlvbjoiZmxpcFkiLHByZW11bHRpcGx5QWxwaGE6Im5vbmUiLGNvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn07cmV0dXJuIFByb21pc2UuYWxsKFtjcmVhdGVJbWFnZUJpdG1hcChlLG4pLGNyZWF0ZUltYWdlQml0bWFwKGUpXSl9KS50aGVuKGZ1bmN0aW9uKGUpe2xldCBuPWNoKGVbMF0pLG89Y2goZVsxXSk7cmV0dXJuIG5bMV0hPT1vWzFdfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4hMX0pLGVhfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhrdCx7aXNCbG9iU3VwcG9ydGVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gR0F9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGt0LnByb3RvdHlwZSx7cXVlcnlQYXJhbWV0ZXJzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbWV0ZXJzfX0sdGVtcGxhdGVWYWx1ZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90ZW1wbGF0ZVZhbHVlc319LHVybDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VXJsQ29tcG9uZW50KCEwLCEwKX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMucGFyc2VVcmwodCwhMSwhMSl9fSxleHRlbnNpb246e2dldDpmdW5jdGlvbigpe3JldHVybiBhQSh0aGlzLl91cmwpfX0saXNEYXRhVXJpOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQXAodGhpcy5fdXJsKX19LGlzQmxvYlVyaTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGdwKHRoaXMuX3VybCl9fSxpc0Nyb3NzT3JpZ2luVXJsOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcEEodGhpcy5fdXJsKX19LGhhc0hlYWRlcnM6e2dldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmhlYWRlcnMpLmxlbmd0aD4wfX0sY3JlZGl0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NyZWRpdHN9fX0pO2t0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFVybENvbXBvbmVudCghMCwhMCl9O2t0LnByb3RvdHlwZS5wYXJzZVVybD1mdW5jdGlvbih0LGUsbixvKXtsZXQgcj1uZXcga0EuZGVmYXVsdCh0KSxpPXVQKHIucXVlcnkoKSk7dGhpcy5fcXVlcnlQYXJhbWV0ZXJzPWU/U3AoaSx0aGlzLnF1ZXJ5UGFyYW1ldGVycyxuKTppLHIuc2VhcmNoKCIiKSxyLmZyYWdtZW50KCIiKSxoKG8pJiZyLnNjaGVtZSgpPT09IiImJihyPXIuYWJzb2x1dGVUbyhtZihvKSkpLHRoaXMuX3VybD1yLnRvU3RyaW5nKCl9O2t0LnByb3RvdHlwZS5nZXRVcmxDb21wb25lbnQ9ZnVuY3Rpb24odCxlKXtpZih0aGlzLmlzRGF0YVVyaSlyZXR1cm4gdGhpcy5fdXJsO2xldCBuPXRoaXMuX3VybDt0JiYobj1gJHtufSR7bFAodGhpcy5xdWVyeVBhcmFtZXRlcnMpfWApLG49bi5yZXBsYWNlKC8lN0IvZywieyIpLnJlcGxhY2UoLyU3RC9nLCJ9Iik7bGV0IG89dGhpcy5fdGVtcGxhdGVWYWx1ZXM7cmV0dXJuIE9iamVjdC5rZXlzKG8pLmxlbmd0aD4wJiYobj1uLnJlcGxhY2UoL3soLio/KX0vZyxmdW5jdGlvbihyLGkpe2xldCBzPW9baV07cmV0dXJuIGgocyk/ZW5jb2RlVVJJQ29tcG9uZW50KHMpOnJ9KSksZSYmaCh0aGlzLnByb3h5KSYmKG49dGhpcy5wcm94eS5nZXRVUkwobikpLG59O2t0LnByb3RvdHlwZS5zZXRRdWVyeVBhcmFtZXRlcnM9ZnVuY3Rpb24odCxlKXtlP3RoaXMuX3F1ZXJ5UGFyYW1ldGVycz1TcCh0aGlzLl9xdWVyeVBhcmFtZXRlcnMsdCwhMSk6dGhpcy5fcXVlcnlQYXJhbWV0ZXJzPVNwKHQsdGhpcy5fcXVlcnlQYXJhbWV0ZXJzLCExKX07a3QucHJvdG90eXBlLmFwcGVuZFF1ZXJ5UGFyYW1ldGVycz1mdW5jdGlvbih0KXt0aGlzLl9xdWVyeVBhcmFtZXRlcnM9U3AodCx0aGlzLl9xdWVyeVBhcmFtZXRlcnMsITApfTtrdC5wcm90b3R5cGUuc2V0VGVtcGxhdGVWYWx1ZXM9ZnVuY3Rpb24odCxlKXtlP3RoaXMuX3RlbXBsYXRlVmFsdWVzPXlyKHRoaXMuX3RlbXBsYXRlVmFsdWVzLHQpOnRoaXMuX3RlbXBsYXRlVmFsdWVzPXlyKHQsdGhpcy5fdGVtcGxhdGVWYWx1ZXMpfTtrdC5wcm90b3R5cGUuZ2V0RGVyaXZlZFJlc291cmNlPWZ1bmN0aW9uKHQpe2xldCBlPXRoaXMuY2xvbmUoKTtpZihlLl9yZXRyeUNvdW50PTAsaCh0LnVybCkpe2xldCBuPXgodC5wcmVzZXJ2ZVF1ZXJ5UGFyYW1ldGVycywhMSk7ZS5wYXJzZVVybCh0LnVybCwhMCxuLHRoaXMuX3VybCl9cmV0dXJuIGgodC5xdWVyeVBhcmFtZXRlcnMpJiYoZS5fcXVlcnlQYXJhbWV0ZXJzPXlyKHQucXVlcnlQYXJhbWV0ZXJzLGUucXVlcnlQYXJhbWV0ZXJzKSksaCh0LnRlbXBsYXRlVmFsdWVzKSYmKGUuX3RlbXBsYXRlVmFsdWVzPXlyKHQudGVtcGxhdGVWYWx1ZXMsZS50ZW1wbGF0ZVZhbHVlcykpLGgodC5oZWFkZXJzKSYmKGUuaGVhZGVycz15cih0LmhlYWRlcnMsZS5oZWFkZXJzKSksaCh0LnByb3h5KSYmKGUucHJveHk9dC5wcm94eSksaCh0LnJlcXVlc3QpJiYoZS5yZXF1ZXN0PXQucmVxdWVzdCksaCh0LnJldHJ5Q2FsbGJhY2spJiYoZS5yZXRyeUNhbGxiYWNrPXQucmV0cnlDYWxsYmFjayksaCh0LnJldHJ5QXR0ZW1wdHMpJiYoZS5yZXRyeUF0dGVtcHRzPXQucmV0cnlBdHRlbXB0cyksZX07a3QucHJvdG90eXBlLnJldHJ5T25FcnJvcj1mdW5jdGlvbih0KXtsZXQgZT10aGlzLnJldHJ5Q2FsbGJhY2s7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiJ8fHRoaXMuX3JldHJ5Q291bnQ+PXRoaXMucmV0cnlBdHRlbXB0cylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCExKTtsZXQgbj10aGlzO3JldHVybiBQcm9taXNlLnJlc29sdmUoZSh0aGlzLHQpKS50aGVuKGZ1bmN0aW9uKG8pe3JldHVybisrbi5fcmV0cnlDb3VudCxvfSl9O2t0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gaCh0KT8odC5fdXJsPXRoaXMuX3VybCx0Ll9xdWVyeVBhcmFtZXRlcnM9UWModGhpcy5fcXVlcnlQYXJhbWV0ZXJzKSx0Ll90ZW1wbGF0ZVZhbHVlcz1RYyh0aGlzLl90ZW1wbGF0ZVZhbHVlcyksdC5oZWFkZXJzPVFjKHRoaXMuaGVhZGVycyksdC5wcm94eT10aGlzLnByb3h5LHQucmV0cnlDYWxsYmFjaz10aGlzLnJldHJ5Q2FsbGJhY2ssdC5yZXRyeUF0dGVtcHRzPXRoaXMucmV0cnlBdHRlbXB0cyx0Ll9yZXRyeUNvdW50PTAsdC5yZXF1ZXN0PXRoaXMucmVxdWVzdC5jbG9uZSgpLHQpOm5ldyBrdCh7dXJsOnRoaXMuX3VybCxxdWVyeVBhcmFtZXRlcnM6dGhpcy5xdWVyeVBhcmFtZXRlcnMsdGVtcGxhdGVWYWx1ZXM6dGhpcy50ZW1wbGF0ZVZhbHVlcyxoZWFkZXJzOnRoaXMuaGVhZGVycyxwcm94eTp0aGlzLnByb3h5LHJldHJ5Q2FsbGJhY2s6dGhpcy5yZXRyeUNhbGxiYWNrLHJldHJ5QXR0ZW1wdHM6dGhpcy5yZXRyeUF0dGVtcHRzLHJlcXVlc3Q6dGhpcy5yZXF1ZXN0LmNsb25lKCkscGFyc2VVcmw6ITEsY3JlZGl0czpoKHRoaXMuY3JlZGl0cyk/dGhpcy5jcmVkaXRzLnNsaWNlKCk6dm9pZCAwfSl9O2t0LnByb3RvdHlwZS5nZXRCYXNlVXJpPWZ1bmN0aW9uKHQpe3JldHVybiBpQSh0aGlzLmdldFVybENvbXBvbmVudCh0KSx0KX07a3QucHJvdG90eXBlLmFwcGVuZEZvcndhcmRTbGFzaD1mdW5jdGlvbigpe3RoaXMuX3VybD1RMSh0aGlzLl91cmwpfTtrdC5wcm90b3R5cGUuZmV0Y2hBcnJheUJ1ZmZlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZldGNoKHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIn0pfTtrdC5mZXRjaEFycmF5QnVmZmVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcga3QodCkuZmV0Y2hBcnJheUJ1ZmZlcigpfTtrdC5wcm90b3R5cGUuZmV0Y2hCbG9iPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmV0Y2goe3Jlc3BvbnNlVHlwZToiYmxvYiJ9KX07a3QuZmV0Y2hCbG9iPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcga3QodCkuZmV0Y2hCbG9iKCl9O2t0LnByb3RvdHlwZS5mZXRjaEltYWdlPWZ1bmN0aW9uKHQpe3Q9eCh0LHguRU1QVFlfT0JKRUNUKTtsZXQgZT14KHQucHJlZmVySW1hZ2VCaXRtYXAsITEpLG49eCh0LnByZWZlckJsb2IsITEpLG89eCh0LmZsaXBZLCExKSxyPXgodC5za2lwQ29sb3JTcGFjZUNvbnZlcnNpb24sITEpO2lmKGRoKHRoaXMucmVxdWVzdCksIUdBfHx0aGlzLmlzRGF0YVVyaXx8dGhpcy5pc0Jsb2JVcml8fCF0aGlzLmhhc0hlYWRlcnMmJiFuKXJldHVybiBwaCh7cmVzb3VyY2U6dGhpcyxmbGlwWTpvLHNraXBDb2xvclNwYWNlQ29udmVyc2lvbjpyLHByZWZlckltYWdlQml0bWFwOmV9KTtsZXQgaT10aGlzLmZldGNoQmxvYigpO2lmKCFoKGkpKXJldHVybjtsZXQgcyxmLHUsYztyZXR1cm4ga3Quc3VwcG9ydHNJbWFnZUJpdG1hcE9wdGlvbnMoKS50aGVuKGZ1bmN0aW9uKGwpe3JldHVybiBzPWwsZj1zJiZlLGl9KS50aGVuKGZ1bmN0aW9uKGwpe2lmKCFoKGwpKXJldHVybjtpZihjPWwsZilyZXR1cm4ga3QuY3JlYXRlSW1hZ2VCaXRtYXBGcm9tQmxvYihsLHtmbGlwWTpvLHByZW11bHRpcGx5QWxwaGE6ITEsc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uOnJ9KTtsZXQgcD13aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChsKTtyZXR1cm4gdT1uZXcga3Qoe3VybDpwfSkscGgoe3Jlc291cmNlOnUsZmxpcFk6byxza2lwQ29sb3JTcGFjZUNvbnZlcnNpb246cixwcmVmZXJJbWFnZUJpdG1hcDohMX0pfSkudGhlbihmdW5jdGlvbihsKXtpZihoKGwpKXJldHVybiBsLmJsb2I9YyxmfHx3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1LnVybCksbH0pLmNhdGNoKGZ1bmN0aW9uKGwpe3JldHVybiBoKHUpJiZ3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1LnVybCksbC5ibG9iPWMsUHJvbWlzZS5yZWplY3QobCl9KX07a3QuZmV0Y2hJbWFnZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGt0KHQpLmZldGNoSW1hZ2Uoe2ZsaXBZOnQuZmxpcFksc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uOnQuc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uLHByZWZlckJsb2I6dC5wcmVmZXJCbG9iLHByZWZlckltYWdlQml0bWFwOnQucHJlZmVySW1hZ2VCaXRtYXB9KX07a3QucHJvdG90eXBlLmZldGNoVGV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZldGNoKHtyZXNwb25zZVR5cGU6InRleHQifSl9O2t0LmZldGNoVGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGt0KHQpLmZldGNoVGV4dCgpfTtrdC5wcm90b3R5cGUuZmV0Y2hKc29uPWZ1bmN0aW9uKCl7bGV0IHQ9dGhpcy5mZXRjaCh7cmVzcG9uc2VUeXBlOiJ0ZXh0IixoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sKi8qO3E9MC4wMSJ9fSk7aWYoaCh0KSlyZXR1cm4gdC50aGVuKGZ1bmN0aW9uKGUpe2lmKGgoZSkpcmV0dXJuIEpTT04ucGFyc2UoZSl9KX07a3QuZmV0Y2hKc29uPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcga3QodCkuZmV0Y2hKc29uKCl9O2t0LnByb3RvdHlwZS5mZXRjaFhNTD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZldGNoKHtyZXNwb25zZVR5cGU6ImRvY3VtZW50IixvdmVycmlkZU1pbWVUeXBlOiJ0ZXh0L3htbCJ9KX07a3QuZmV0Y2hYTUw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBrdCh0KS5mZXRjaFhNTCgpfTtrdC5wcm90b3R5cGUuZmV0Y2hKc29ucD1mdW5jdGlvbih0KXt0PXgodCwiY2FsbGJhY2siKSxkaCh0aGlzLnJlcXVlc3QpO2xldCBlO2RvIGU9YGxvYWRKc29ucCR7TS5uZXh0UmFuZG9tTnVtYmVyKCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMiw4KX1gO3doaWxlKGgod2luZG93W2VdKSk7cmV0dXJuIHpBKHRoaXMsdCxlKX07a3QuZmV0Y2hKc29ucD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGt0KHQpLmZldGNoSnNvbnAodC5jYWxsYmFja1BhcmFtZXRlck5hbWUpfTtrdC5wcm90b3R5cGUuX21ha2VSZXF1ZXN0PWZ1bmN0aW9uKHQpe2xldCBlPXRoaXM7ZGgoZS5yZXF1ZXN0KTtsZXQgbj1lLnJlcXVlc3Qsbz1lLnVybDtuLnVybD1vLG4ucmVxdWVzdEZ1bmN0aW9uPWZ1bmN0aW9uKCl7bGV0IGk9dC5yZXNwb25zZVR5cGUscz15cih0LmhlYWRlcnMsZS5oZWFkZXJzKSxmPXQub3ZlcnJpZGVNaW1lVHlwZSx1PXQubWV0aG9kLGM9dC5kYXRhLGw9cXMoKSxwPWt0Ll9JbXBsZW1lbnRhdGlvbnMubG9hZFdpdGhYaHIobyxpLHUsYyxzLGwsZik7cmV0dXJuIGgocCkmJmgocC5hYm9ydCkmJihuLmNhbmNlbEZ1bmN0aW9uPWZ1bmN0aW9uKCl7cC5hYm9ydCgpfSksbC5wcm9taXNlfTtsZXQgcj1FcC5yZXF1ZXN0KG4pO2lmKGgocikpcmV0dXJuIHIudGhlbihmdW5jdGlvbihpKXtyZXR1cm4gbi5jYW5jZWxGdW5jdGlvbj12b2lkIDAsaX0pLmNhdGNoKGZ1bmN0aW9uKGkpe3JldHVybiBuLmNhbmNlbEZ1bmN0aW9uPXZvaWQgMCxuLnN0YXRlIT09Um4uRkFJTEVEP1Byb21pc2UucmVqZWN0KGkpOmUucmV0cnlPbkVycm9yKGkpLnRoZW4oZnVuY3Rpb24ocyl7cmV0dXJuIHM/KG4uc3RhdGU9Um4uVU5JU1NVRUQsbi5kZWZlcnJlZD12b2lkIDAsZS5mZXRjaCh0KSk6UHJvbWlzZS5yZWplY3QoaSl9KX0pfTtwUD0vXmRhdGE6KC4qPykoO2Jhc2U2NCk/LCguKikkLztrdC5wcm90b3R5cGUuZmV0Y2g9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bmkodCx7fSksdC5tZXRob2Q9IkdFVCIsdGhpcy5fbWFrZVJlcXVlc3QodCl9O2t0LmZldGNoPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcga3QodCkuZmV0Y2goe3Jlc3BvbnNlVHlwZTp0LnJlc3BvbnNlVHlwZSxvdmVycmlkZU1pbWVUeXBlOnQub3ZlcnJpZGVNaW1lVHlwZX0pfTtrdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0PW5pKHQse30pLHQubWV0aG9kPSJERUxFVEUiLHRoaXMuX21ha2VSZXF1ZXN0KHQpfTtrdC5kZWxldGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBrdCh0KS5kZWxldGUoe3Jlc3BvbnNlVHlwZTp0LnJlc3BvbnNlVHlwZSxvdmVycmlkZU1pbWVUeXBlOnQub3ZlcnJpZGVNaW1lVHlwZSxkYXRhOnQuZGF0YX0pfTtrdC5wcm90b3R5cGUuaGVhZD1mdW5jdGlvbih0KXtyZXR1cm4gdD1uaSh0LHt9KSx0Lm1ldGhvZD0iSEVBRCIsdGhpcy5fbWFrZVJlcXVlc3QodCl9O2t0LmhlYWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBrdCh0KS5oZWFkKHtyZXNwb25zZVR5cGU6dC5yZXNwb25zZVR5cGUsb3ZlcnJpZGVNaW1lVHlwZTp0Lm92ZXJyaWRlTWltZVR5cGV9KX07a3QucHJvdG90eXBlLm9wdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bmkodCx7fSksdC5tZXRob2Q9Ik9QVElPTlMiLHRoaXMuX21ha2VSZXF1ZXN0KHQpfTtrdC5vcHRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcga3QodCkub3B0aW9ucyh7cmVzcG9uc2VUeXBlOnQucmVzcG9uc2VUeXBlLG92ZXJyaWRlTWltZVR5cGU6dC5vdmVycmlkZU1pbWVUeXBlfSl9O2t0LnByb3RvdHlwZS5wb3N0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkuZGVmaW5lZCgiZGF0YSIsdCksZT1uaShlLHt9KSxlLm1ldGhvZD0iUE9TVCIsZS5kYXRhPXQsdGhpcy5fbWFrZVJlcXVlc3QoZSl9O2t0LnBvc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBrdCh0KS5wb3N0KHQuZGF0YSx7cmVzcG9uc2VUeXBlOnQucmVzcG9uc2VUeXBlLG92ZXJyaWRlTWltZVR5cGU6dC5vdmVycmlkZU1pbWVUeXBlfSl9O2t0LnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5kZWZpbmVkKCJkYXRhIix0KSxlPW5pKGUse30pLGUubWV0aG9kPSJQVVQiLGUuZGF0YT10LHRoaXMuX21ha2VSZXF1ZXN0KGUpfTtrdC5wdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBrdCh0KS5wdXQodC5kYXRhLHtyZXNwb25zZVR5cGU6dC5yZXNwb25zZVR5cGUsb3ZlcnJpZGVNaW1lVHlwZTp0Lm92ZXJyaWRlTWltZVR5cGV9KX07a3QucHJvdG90eXBlLnBhdGNoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkuZGVmaW5lZCgiZGF0YSIsdCksZT1uaShlLHt9KSxlLm1ldGhvZD0iUEFUQ0giLGUuZGF0YT10LHRoaXMuX21ha2VSZXF1ZXN0KGUpfTtrdC5wYXRjaD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGt0KHQpLnBhdGNoKHQuZGF0YSx7cmVzcG9uc2VUeXBlOnQucmVzcG9uc2VUeXBlLG92ZXJyaWRlTWltZVR5cGU6dC5vdmVycmlkZU1pbWVUeXBlfSl9O2t0Ll9JbXBsZW1lbnRhdGlvbnM9e307a3QuX0ltcGxlbWVudGF0aW9ucy5sb2FkSW1hZ2VFbGVtZW50PWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz1uZXcgSW1hZ2U7by5vbmxvYWQ9ZnVuY3Rpb24oKXtvLm5hdHVyYWxXaWR0aD09PTAmJm8ubmF0dXJhbEhlaWdodD09PTAmJm8ud2lkdGg9PT0wJiZvLmhlaWdodD09PTAmJihvLndpZHRoPTMwMCxvLmhlaWdodD0xNTApLG4ucmVzb2x2ZShvKX0sby5vbmVycm9yPWZ1bmN0aW9uKHIpe24ucmVqZWN0KHIpfSxlJiYobGguY29udGFpbnModCk/by5jcm9zc09yaWdpbj0idXNlLWNyZWRlbnRpYWxzIjpvLmNyb3NzT3JpZ2luPSIiKSxvLnNyYz10fTtrdC5fSW1wbGVtZW50YXRpb25zLmNyZWF0ZUltYWdlPWZ1bmN0aW9uKHQsZSxuLG8scixpKXtsZXQgcz10LnVybDtrdC5zdXBwb3J0c0ltYWdlQml0bWFwT3B0aW9ucygpLnRoZW4oZnVuY3Rpb24oZil7aWYoIShmJiZpKSl7a3QuX0ltcGxlbWVudGF0aW9ucy5sb2FkSW1hZ2VFbGVtZW50KHMsZSxuKTtyZXR1cm59bGV0IHU9ImJsb2IiLGM9IkdFVCIsbD1xcygpLHA9a3QuX0ltcGxlbWVudGF0aW9ucy5sb2FkV2l0aFhocihzLHUsYyx2b2lkIDAsdm9pZCAwLGwsdm9pZCAwLHZvaWQgMCx2b2lkIDApO3JldHVybiBoKHApJiZoKHAuYWJvcnQpJiYodC5jYW5jZWxGdW5jdGlvbj1mdW5jdGlvbigpe3AuYWJvcnQoKX0pLGwucHJvbWlzZS50aGVuKGZ1bmN0aW9uKGQpe2lmKCFoKGQpKXtuLnJlamVjdChuZXcgZ2UoYFN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgJHtzfSBidXQgaXQgY29udGFpbmVkIG5vIGNvbnRlbnQuYCkpO3JldHVybn1yZXR1cm4ga3QuY3JlYXRlSW1hZ2VCaXRtYXBGcm9tQmxvYihkLHtmbGlwWTpvLHByZW11bHRpcGx5QWxwaGE6ITEsc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uOnJ9KX0pLnRoZW4oZnVuY3Rpb24oZCl7bi5yZXNvbHZlKGQpfSl9KS5jYXRjaChmdW5jdGlvbihmKXtuLnJlamVjdChmKX0pfTtrdC5jcmVhdGVJbWFnZUJpdG1hcEZyb21CbG9iPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkuZGVmaW5lZCgib3B0aW9ucyIsZSkseS50eXBlT2YuYm9vbCgib3B0aW9ucy5mbGlwWSIsZS5mbGlwWSkseS50eXBlT2YuYm9vbCgib3B0aW9ucy5wcmVtdWx0aXBseUFscGhhIixlLnByZW11bHRpcGx5QWxwaGEpLHkudHlwZU9mLmJvb2woIm9wdGlvbnMuc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uIixlLnNraXBDb2xvclNwYWNlQ29udmVyc2lvbiksY3JlYXRlSW1hZ2VCaXRtYXAodCx7aW1hZ2VPcmllbnRhdGlvbjplLmZsaXBZPyJmbGlwWSI6Im5vbmUiLHByZW11bHRpcGx5QWxwaGE6ZS5wcmVtdWx0aXBseUFscGhhPyJwcmVtdWx0aXBseSI6Im5vbmUiLGNvbG9yU3BhY2VDb252ZXJzaW9uOmUuc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uPyJub25lIjoiZGVmYXVsdCJ9KX07aFA9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PiJ1IjtrdC5fSW1wbGVtZW50YXRpb25zLmxvYWRXaXRoWGhyPWZ1bmN0aW9uKHQsZSxuLG8scixpLHMpe2xldCBmPXBQLmV4ZWModCk7aWYoZiE9PW51bGwpe2kucmVzb2x2ZShkUChmLGUpKTtyZXR1cm59aWYoaFApe21QKHQsZSxuLG8scixpLHMpO3JldHVybn1sZXQgdT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYobGguY29udGFpbnModCkmJih1LndpdGhDcmVkZW50aWFscz0hMCksdS5vcGVuKG4sdCwhMCksaChzKSYmaCh1Lm92ZXJyaWRlTWltZVR5cGUpJiZ1Lm92ZXJyaWRlTWltZVR5cGUocyksaChyKSlmb3IobGV0IGwgaW4gcilyLmhhc093blByb3BlcnR5KGwpJiZ1LnNldFJlcXVlc3RIZWFkZXIobCxyW2xdKTtoKGUpJiYodS5yZXNwb25zZVR5cGU9ZSk7bGV0IGM9ITE7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIiYmKGM9dC5pbmRleE9mKCJmaWxlOi8vIik9PT0wfHx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmxvY2F0aW9uLm9yaWdpbj09PSJmaWxlOi8vIiksdS5vbmxvYWQ9ZnVuY3Rpb24oKXtpZigodS5zdGF0dXM8MjAwfHx1LnN0YXR1cz49MzAwKSYmIShjJiZ1LnN0YXR1cz09PTApKXtpLnJlamVjdChuZXcgaGYodS5zdGF0dXMsdS5yZXNwb25zZSx1LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSk7cmV0dXJufWxldCBsPXUucmVzcG9uc2UscD11LnJlc3BvbnNlVHlwZTtpZihuPT09IkhFQUQifHxuPT09Ik9QVElPTlMiKXtsZXQgbT11LmdldEFsbFJlc3BvbnNlSGVhZGVycygpLnRyaW0oKS5zcGxpdCgvW1xyXG5dKy8pLF89e307bS5mb3JFYWNoKGZ1bmN0aW9uKGcpe2xldCBiPWcuc3BsaXQoIjogIiksTz1iLnNoaWZ0KCk7X1tPXT1iLmpvaW4oIjogIil9KSxpLnJlc29sdmUoXyk7cmV0dXJufWlmKHUuc3RhdHVzPT09MjA0KWkucmVzb2x2ZSgpO2Vsc2UgaWYoaChsKSYmKCFoKGUpfHxwPT09ZSkpaS5yZXNvbHZlKGwpO2Vsc2UgaWYoZT09PSJqc29uIiYmdHlwZW9mIGw9PSJzdHJpbmciKXRyeXtpLnJlc29sdmUoSlNPTi5wYXJzZShsKSl9Y2F0Y2goZCl7aS5yZWplY3QoZCl9ZWxzZShwPT09IiJ8fHA9PT0iZG9jdW1lbnQiKSYmaCh1LnJlc3BvbnNlWE1MKSYmdS5yZXNwb25zZVhNTC5oYXNDaGlsZE5vZGVzKCk/aS5yZXNvbHZlKHUucmVzcG9uc2VYTUwpOihwPT09IiJ8fHA9PT0idGV4dCIpJiZoKHUucmVzcG9uc2VUZXh0KT9pLnJlc29sdmUodS5yZXNwb25zZVRleHQpOmkucmVqZWN0KG5ldyBnZSgiSW52YWxpZCBYTUxIdHRwUmVxdWVzdCByZXNwb25zZSB0eXBlLiIpKX0sdS5vbmVycm9yPWZ1bmN0aW9uKGwpe2kucmVqZWN0KG5ldyBoZil9LHUuc2VuZChvKSx1fTtrdC5fSW1wbGVtZW50YXRpb25zLmxvYWRBbmRFeGVjdXRlU2NyaXB0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbUEodCxlKS5jYXRjaChmdW5jdGlvbihvKXtuLnJlamVjdChvKX0pfTtrdC5fRGVmYXVsdEltcGxlbWVudGF0aW9ucz17fTtrdC5fRGVmYXVsdEltcGxlbWVudGF0aW9ucy5jcmVhdGVJbWFnZT1rdC5fSW1wbGVtZW50YXRpb25zLmNyZWF0ZUltYWdlO2t0Ll9EZWZhdWx0SW1wbGVtZW50YXRpb25zLmxvYWRXaXRoWGhyPWt0Ll9JbXBsZW1lbnRhdGlvbnMubG9hZFdpdGhYaHI7a3QuX0RlZmF1bHRJbXBsZW1lbnRhdGlvbnMubG9hZEFuZEV4ZWN1dGVTY3JpcHQ9a3QuX0ltcGxlbWVudGF0aW9ucy5sb2FkQW5kRXhlY3V0ZVNjcmlwdDtrdC5ERUZBVUxUPU9iamVjdC5mcmVlemUobmV3IGt0KHt1cmw6dHlwZW9mIGRvY3VtZW50PiJ1Ij8iIjpkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnNwbGl0KCI/IilbMF19KSk7b2k9a3R9KTtmdW5jdGlvbiBiZih0KXt0PXgodCx4LkVNUFRZX09CSkVDVCksdGhpcy5fZGF0ZXM9dm9pZCAwLHRoaXMuX3NhbXBsZXM9dm9pZCAwLHRoaXMuX2RhdGVDb2x1bW49LTEsdGhpcy5feFBvbGVXYW5kZXJSYWRpYW5zQ29sdW1uPS0xLHRoaXMuX3lQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbj0tMSx0aGlzLl91dDFNaW51c1V0Y1NlY29uZHNDb2x1bW49LTEsdGhpcy5feENlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zQ29sdW1uPS0xLHRoaXMuX3lDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbj0tMSx0aGlzLl90YWlNaW51c1V0Y1NlY29uZHNDb2x1bW49LTEsdGhpcy5fY29sdW1uQ291bnQ9MCx0aGlzLl9sYXN0SW5kZXg9LTEsdGhpcy5fYWRkTmV3TGVhcFNlY29uZHM9eCh0LmFkZE5ld0xlYXBTZWNvbmRzLCEwKSxoKHQuZGF0YSk/akEodGhpcyx0LmRhdGEpOmpBKHRoaXMse2NvbHVtbk5hbWVzOlsiZGF0ZUlzbzg2MDEiLCJtb2RpZmllZEp1bGlhbkRhdGVVdGMiLCJ4UG9sZVdhbmRlclJhZGlhbnMiLCJ5UG9sZVdhbmRlclJhZGlhbnMiLCJ1dDFNaW51c1V0Y1NlY29uZHMiLCJsZW5ndGhPZkRheUNvcnJlY3Rpb25TZWNvbmRzIiwieENlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zIiwieUNlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zIiwidGFpTWludXNVdGNTZWNvbmRzIl0sc2FtcGxlczpbXX0pfWZ1bmN0aW9uIF9QKHQsZSl7cmV0dXJuIGlvLmNvbXBhcmUodC5qdWxpYW5EYXRlLGUpfWZ1bmN0aW9uIGpBKHQsZSl7aWYoIWgoZS5jb2x1bW5OYW1lcykpdGhyb3cgbmV3IGdlKCJFcnJvciBpbiBsb2FkZWQgRU9QIGRhdGE6IFRoZSBjb2x1bW5OYW1lcyBwcm9wZXJ0eSBpcyByZXF1aXJlZC4iKTtpZighaChlLnNhbXBsZXMpKXRocm93IG5ldyBnZSgiRXJyb3IgaW4gbG9hZGVkIEVPUCBkYXRhOiBUaGUgc2FtcGxlcyBwcm9wZXJ0eSBpcyByZXF1aXJlZC4iKTtsZXQgbj1lLmNvbHVtbk5hbWVzLmluZGV4T2YoIm1vZGlmaWVkSnVsaWFuRGF0ZVV0YyIpLG89ZS5jb2x1bW5OYW1lcy5pbmRleE9mKCJ4UG9sZVdhbmRlclJhZGlhbnMiKSxyPWUuY29sdW1uTmFtZXMuaW5kZXhPZigieVBvbGVXYW5kZXJSYWRpYW5zIiksaT1lLmNvbHVtbk5hbWVzLmluZGV4T2YoInV0MU1pbnVzVXRjU2Vjb25kcyIpLHM9ZS5jb2x1bW5OYW1lcy5pbmRleE9mKCJ4Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnMiKSxmPWUuY29sdW1uTmFtZXMuaW5kZXhPZigieUNlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zIiksdT1lLmNvbHVtbk5hbWVzLmluZGV4T2YoInRhaU1pbnVzVXRjU2Vjb25kcyIpO2lmKG48MHx8bzwwfHxyPDB8fGk8MHx8czwwfHxmPDB8fHU8MCl0aHJvdyBuZXcgZ2UoIkVycm9yIGluIGxvYWRlZCBFT1AgZGF0YTogVGhlIGNvbHVtbk5hbWVzIHByb3BlcnR5IG11c3QgaW5jbHVkZSBtb2RpZmllZEp1bGlhbkRhdGVVdGMsIHhQb2xlV2FuZGVyUmFkaWFucywgeVBvbGVXYW5kZXJSYWRpYW5zLCB1dDFNaW51c1V0Y1NlY29uZHMsIHhDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFucywgeUNlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zLCBhbmQgdGFpTWludXNVdGNTZWNvbmRzIGNvbHVtbnMiKTtsZXQgYz10Ll9zYW1wbGVzPWUuc2FtcGxlcyxsPXQuX2RhdGVzPVtdO3QuX2RhdGVDb2x1bW49bix0Ll94UG9sZVdhbmRlclJhZGlhbnNDb2x1bW49byx0Ll95UG9sZVdhbmRlclJhZGlhbnNDb2x1bW49cix0Ll91dDFNaW51c1V0Y1NlY29uZHNDb2x1bW49aSx0Ll94Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW49cyx0Ll95Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW49Zix0Ll90YWlNaW51c1V0Y1NlY29uZHNDb2x1bW49dSx0Ll9jb2x1bW5Db3VudD1lLmNvbHVtbk5hbWVzLmxlbmd0aCx0Ll9sYXN0SW5kZXg9dm9pZCAwO2xldCBwLGQ9dC5fYWRkTmV3TGVhcFNlY29uZHM7Zm9yKGxldCBtPTAsXz1jLmxlbmd0aDttPF87bSs9dC5fY29sdW1uQ291bnQpe2xldCBnPWNbbStuXSxiPWNbbSt1XSxPPWcrX24uTU9ESUZJRURfSlVMSUFOX0RBVEVfRElGRkVSRU5DRSxUPW5ldyBpbyhPLGIsT2UuVEFJKTtpZihsLnB1c2goVCksZCl7aWYoYiE9PXAmJmgocCkpe2xldCBFPWlvLmxlYXBTZWNvbmRzLHc9anMoRSxULF9QKTtpZih3PDApe2xldCBDPW5ldyBXZShULGIpO0Uuc3BsaWNlKH53LDAsQyl9fXA9Yn19fWZ1bmN0aW9uIEhBKHQsZSxuLG8scil7bGV0IGk9bipvO3IueFBvbGVXYW5kZXI9ZVtpK3QuX3hQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbl0sci55UG9sZVdhbmRlcj1lW2krdC5feVBvbGVXYW5kZXJSYWRpYW5zQ29sdW1uXSxyLnhQb2xlT2Zmc2V0PWVbaSt0Ll94Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW5dLHIueVBvbGVPZmZzZXQ9ZVtpK3QuX3lDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbl0sci51dDFNaW51c1V0Yz1lW2krdC5fdXQxTWludXNVdGNTZWNvbmRzQ29sdW1uXX1mdW5jdGlvbiBBZih0LGUsbil7cmV0dXJuIGUrdCoobi1lKX1mdW5jdGlvbiBxQSh0LGUsbixvLHIsaSxzKXtsZXQgZj10Ll9jb2x1bW5Db3VudDtpZihpPmUubGVuZ3RoLTEpcmV0dXJuIHMueFBvbGVXYW5kZXI9MCxzLnlQb2xlV2FuZGVyPTAscy54UG9sZU9mZnNldD0wLHMueVBvbGVPZmZzZXQ9MCxzLnV0MU1pbnVzVXRjPTAscztsZXQgdT1lW3JdLGM9ZVtpXTtpZih1LmVxdWFscyhjKXx8by5lcXVhbHModSkpcmV0dXJuIEhBKHQsbixyLGYscykscztpZihvLmVxdWFscyhjKSlyZXR1cm4gSEEodCxuLGksZixzKSxzO2xldCBsPWlvLnNlY29uZHNEaWZmZXJlbmNlKG8sdSkvaW8uc2Vjb25kc0RpZmZlcmVuY2UoYyx1KSxwPXIqZixkPWkqZixtPW5bcCt0Ll91dDFNaW51c1V0Y1NlY29uZHNDb2x1bW5dLF89bltkK3QuX3V0MU1pbnVzVXRjU2Vjb25kc0NvbHVtbl0sZz1fLW07aWYoZz4uNXx8ZzwtLjUpe2xldCBiPW5bcCt0Ll90YWlNaW51c1V0Y1NlY29uZHNDb2x1bW5dLE89bltkK3QuX3RhaU1pbnVzVXRjU2Vjb25kc0NvbHVtbl07YiE9PU8mJihjLmVxdWFscyhvKT9tPV86Xy09Ty1iKX1yZXR1cm4gcy54UG9sZVdhbmRlcj1BZihsLG5bcCt0Ll94UG9sZVdhbmRlclJhZGlhbnNDb2x1bW5dLG5bZCt0Ll94UG9sZVdhbmRlclJhZGlhbnNDb2x1bW5dKSxzLnlQb2xlV2FuZGVyPUFmKGwsbltwK3QuX3lQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbl0sbltkK3QuX3lQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbl0pLHMueFBvbGVPZmZzZXQ9QWYobCxuW3ArdC5feENlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zQ29sdW1uXSxuW2QrdC5feENlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zQ29sdW1uXSkscy55UG9sZU9mZnNldD1BZihsLG5bcCt0Ll95Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW5dLG5bZCt0Ll95Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW5dKSxzLnV0MU1pbnVzVXRjPUFmKGwsbSxfKSxzfXZhciBLQSxXQT1aKCgpPT57Wm0oKTtZdCgpO0l0KCk7YXQoKTtRbSgpO2RwKCk7dGgoKTtnZigpO0pyKCk7Y3AoKTthcCgpO2JmLmZyb21Vcmw9YXN5bmMgZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoInVybCIsdCksZT14KGUseC5FTVBUWV9PQkpFQ1QpO2xldCBuPW9pLmNyZWF0ZUlmTmVlZGVkKHQpLG87dHJ5e289YXdhaXQgbi5mZXRjaEpzb24oKX1jYXRjaHt0aHJvdyBuZXcgZ2UoYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJldHJpZXZpbmcgdGhlIEVPUCBkYXRhIGZyb20gdGhlIFVSTCAke24udXJsfS5gKX1yZXR1cm4gbmV3IGJmKHthZGROZXdMZWFwU2Vjb25kczplLmFkZE5ld0xlYXBTZWNvbmRzLGRhdGE6b30pfTtiZi5OT05FPU9iamVjdC5mcmVlemUoe2NvbXB1dGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gaChlKT8oZS54UG9sZVdhbmRlcj0wLGUueVBvbGVXYW5kZXI9MCxlLnhQb2xlT2Zmc2V0PTAsZS55UG9sZU9mZnNldD0wLGUudXQxTWludXNVdGM9MCk6ZT1uZXcgZGYoMCwwLDAsMCwwKSxlfX0pO2JmLnByb3RvdHlwZS5jb21wdXRlPWZ1bmN0aW9uKHQsZSl7aWYoIWgodGhpcy5fc2FtcGxlcykpcmV0dXJuO2lmKGgoZSl8fChlPW5ldyBkZigwLDAsMCwwLDApKSx0aGlzLl9zYW1wbGVzLmxlbmd0aD09PTApcmV0dXJuIGUueFBvbGVXYW5kZXI9MCxlLnlQb2xlV2FuZGVyPTAsZS54UG9sZU9mZnNldD0wLGUueVBvbGVPZmZzZXQ9MCxlLnV0MU1pbnVzVXRjPTAsZTtsZXQgbj10aGlzLl9kYXRlcyxvPXRoaXMuX2xhc3RJbmRleCxyPTAsaT0wO2lmKGgobykpe2xldCBmPW5bb10sdT1uW28rMV0sYz1pby5sZXNzVGhhbk9yRXF1YWxzKGYsdCksbD0haCh1KSxwPWx8fGlvLmdyZWF0ZXJUaGFuT3JFcXVhbHModSx0KTtpZihjJiZwKXJldHVybiByPW8sIWwmJnUuZXF1YWxzKHQpJiYrK3IsaT1yKzEscUEodGhpcyxuLHRoaXMuX3NhbXBsZXMsdCxyLGksZSksZX1sZXQgcz1qcyhuLHQsaW8uY29tcGFyZSx0aGlzLl9kYXRlQ29sdW1uKTtyZXR1cm4gcz49MD8oczxuLmxlbmd0aC0xJiZuW3MrMV0uZXF1YWxzKHQpJiYrK3Mscj1zLGk9cyk6KGk9fnMscj1pLTEscjwwJiYocj0wKSksdGhpcy5fbGFzdEluZGV4PXIscUEodGhpcyxuLHRoaXMuX3NhbXBsZXMsdCxyLGksZSksZX07S0E9YmZ9KTtmdW5jdGlvbiBFbyh0LGUsbil7dGhpcy5oZWFkaW5nPXgodCwwKSx0aGlzLnBpdGNoPXgoZSwwKSx0aGlzLnJvbGw9eChuLDApfXZhciBtaCxYQT1aKCgpPT57SXQoKTthdCgpO0h0KCk7V3QoKTtFby5mcm9tUXVhdGVybmlvbj1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJxdWF0ZXJuaW9uIGlzIHJlcXVpcmVkIik7aChlKXx8KGU9bmV3IEVvKTtsZXQgbj0yKih0LncqdC55LXQueip0LngpLG89MS0yKih0LngqdC54K3QueSp0LnkpLHI9MioodC53KnQueCt0LnkqdC56KSxpPTEtMioodC55KnQueSt0LnoqdC56KSxzPTIqKHQudyp0LnordC54KnQueSk7cmV0dXJuIGUuaGVhZGluZz0tTWF0aC5hdGFuMihzLGkpLGUucm9sbD1NYXRoLmF0YW4yKHIsbyksZS5waXRjaD0tTS5hc2luQ2xhbXBlZChuKSxlfTtFby5mcm9tRGVncmVlcz1mdW5jdGlvbih0LGUsbixvKXtpZighaCh0KSl0aHJvdyBuZXcgQigiaGVhZGluZyBpcyByZXF1aXJlZCIpO2lmKCFoKGUpKXRocm93IG5ldyBCKCJwaXRjaCBpcyByZXF1aXJlZCIpO2lmKCFoKG4pKXRocm93IG5ldyBCKCJyb2xsIGlzIHJlcXVpcmVkIik7cmV0dXJuIGgobyl8fChvPW5ldyBFbyksby5oZWFkaW5nPXQqTS5SQURJQU5TX1BFUl9ERUdSRUUsby5waXRjaD1lKk0uUkFESUFOU19QRVJfREVHUkVFLG8ucm9sbD1uKk0uUkFESUFOU19QRVJfREVHUkVFLG99O0VvLmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYoaCh0KSlyZXR1cm4gaChlKT8oZS5oZWFkaW5nPXQuaGVhZGluZyxlLnBpdGNoPXQucGl0Y2gsZS5yb2xsPXQucm9sbCxlKTpuZXcgRW8odC5oZWFkaW5nLHQucGl0Y2gsdC5yb2xsKX07RW8uZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZ0LmhlYWRpbmc9PT1lLmhlYWRpbmcmJnQucGl0Y2g9PT1lLnBpdGNoJiZ0LnJvbGw9PT1lLnJvbGx9O0VvLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZNLmVxdWFsc0Vwc2lsb24odC5oZWFkaW5nLGUuaGVhZGluZyxuLG8pJiZNLmVxdWFsc0Vwc2lsb24odC5waXRjaCxlLnBpdGNoLG4sbykmJk0uZXF1YWxzRXBzaWxvbih0LnJvbGwsZS5yb2xsLG4sbyl9O0VvLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gRW8uY2xvbmUodGhpcyx0KX07RW8ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gRW8uZXF1YWxzKHRoaXMsdCl9O0VvLnByb3RvdHlwZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gRW8uZXF1YWxzRXBzaWxvbih0aGlzLHQsZSxuKX07RW8ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXMuaGVhZGluZ30sICR7dGhpcy5waXRjaH0sICR7dGhpcy5yb2xsfSlgfTttaD1Fb30pO2Z1bmN0aW9uIHlQKCl7bGV0IHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpO2ZvcihsZXQgZT0wLG49dC5sZW5ndGg7ZTxuOysrZSl7bGV0IG89dFtlXS5nZXRBdHRyaWJ1dGUoInNyYyIpLHI9JEEuZXhlYyhvKTtpZihyIT09bnVsbClyZXR1cm4gclsxXX19ZnVuY3Rpb24gWkEodCl7cmV0dXJuIHR5cGVvZiBkb2N1bWVudD4idSI/dDooaChDcCl8fChDcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLENwLmhyZWY9dCxDcC5ocmVmKX1mdW5jdGlvbiBRQSgpe2lmKGgoWHMpKXJldHVybiBYcztsZXQgdDtpZih0eXBlb2YgQ0VTSVVNX0JBU0VfVVJMPCJ1Ij90PUNFU0lVTV9CQVNFX1VSTDpoKFlBPy51cmwpP3Q9bWYoIi4iLFlBLnVybCk6dHlwZW9mIGRlZmluZT09Im9iamVjdCImJmgoZGVmaW5lLmFtZCkmJiFkZWZpbmUuYW1kLnRvVXJsVW5kZWZpbmVkJiZoKERvLnRvVXJsKT90PW1mKCIuLiIsWXMoIkNvcmUvYnVpbGRNb2R1bGVVcmwuanMiKSk6dD15UCgpLCFoKHQpKXRocm93IG5ldyBCKCJVbmFibGUgdG8gZGV0ZXJtaW5lIENlc2l1bSBiYXNlIFVSTCBhdXRvbWF0aWNhbGx5LCB0cnkgZGVmaW5pbmcgYSBnbG9iYWwgdmFyaWFibGUgY2FsbGVkIENFU0lVTV9CQVNFX1VSTC4iKTtyZXR1cm4gWHM9bmV3IG9pKHt1cmw6WkEodCl9KSxYcy5hcHBlbmRGb3J3YXJkU2xhc2goKSxYc31mdW5jdGlvbiBnUCh0KXtyZXR1cm4gWkEoRG8udG9VcmwoYC4uLyR7dH1gKSl9ZnVuY3Rpb24gSkEodCl7cmV0dXJuIFFBKCkuZ2V0RGVyaXZlZFJlc291cmNlKHt1cmw6dH0pLnVybH1mdW5jdGlvbiBZcyh0KXtyZXR1cm4gaCh4cCl8fCh0eXBlb2YgZGVmaW5lPT0ib2JqZWN0IiYmaChkZWZpbmUuYW1kKSYmIWRlZmluZS5hbWQudG9VcmxVbmRlZmluZWQmJmgoRG8udG9VcmwpP3hwPWdQOnhwPUpBKSx4cCh0KX12YXIgWUEsJEEsQ3AsWHMseHAsUHAsaGg9WigoKT0+e2F0KCk7SHQoKTtzaCgpO2dmKCk7WUE9e30sJEE9LygoPzouKlwvKXxeKUNlc2l1bVwuanMoPzpcP3xcI3wkKS87WXMuX2Nlc2l1bVNjcmlwdFJlZ2V4PSRBO1lzLl9idWlsZE1vZHVsZVVybEZyb21CYXNlVXJsPUpBO1lzLl9jbGVhckJhc2VSZXNvdXJjZT1mdW5jdGlvbigpe1hzPXZvaWQgMH07WXMuc2V0QmFzZVVybD1mdW5jdGlvbih0KXtYcz1vaS5ERUZBVUxULmdldERlcml2ZWRSZXNvdXJjZSh7dXJsOnR9KX07WXMuZ2V0Q2VzaXVtQmFzZVVybD1RQTtQcD1Zc30pO2Z1bmN0aW9uIEFQKHQsZSxuKXt0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLnM9bn12YXIgTXAsX2g9WigoKT0+e01wPUFQfSk7ZnVuY3Rpb24gQWgodCl7dD14KHQseC5FTVBUWV9PQkpFQ1QpLHRoaXMuX3h5c0ZpbGVVcmxUZW1wbGF0ZT1vaS5jcmVhdGVJZk5lZWRlZCh0Lnh5c0ZpbGVVcmxUZW1wbGF0ZSksdGhpcy5faW50ZXJwb2xhdGlvbk9yZGVyPXgodC5pbnRlcnBvbGF0aW9uT3JkZXIsOSksdGhpcy5fc2FtcGxlWmVyb0p1bGlhbkVwaGVtZXJpc0RhdGU9eCh0LnNhbXBsZVplcm9KdWxpYW5FcGhlbWVyaXNEYXRlLDI0NDIzOTY1ZS0xKSx0aGlzLl9zYW1wbGVaZXJvRGF0ZVRUPW5ldyBpbyh0aGlzLl9zYW1wbGVaZXJvSnVsaWFuRXBoZW1lcmlzRGF0ZSwwLE9lLlRBSSksdGhpcy5fc3RlcFNpemVEYXlzPXgodC5zdGVwU2l6ZURheXMsMSksdGhpcy5fc2FtcGxlc1Blclh5c0ZpbGU9eCh0LnNhbXBsZXNQZXJYeXNGaWxlLDFlMyksdGhpcy5fdG90YWxTYW1wbGVzPXgodC50b3RhbFNhbXBsZXMsMjc0MjYpLHRoaXMuX3NhbXBsZXM9bmV3IEFycmF5KHRoaXMuX3RvdGFsU2FtcGxlcyozKSx0aGlzLl9jaHVua0Rvd25sb2Fkc0luUHJvZ3Jlc3M9W107bGV0IGU9dGhpcy5faW50ZXJwb2xhdGlvbk9yZGVyLG49dGhpcy5fZGVub21pbmF0b3JzPW5ldyBBcnJheShlKzEpLG89dGhpcy5feFRhYmxlPW5ldyBBcnJheShlKzEpLHI9TWF0aC5wb3codGhpcy5fc3RlcFNpemVEYXlzLGUpO2ZvcihsZXQgaT0wO2k8PWU7KytpKXtuW2ldPXIsb1tpXT1pKnRoaXMuX3N0ZXBTaXplRGF5cztmb3IobGV0IHM9MDtzPD1lOysrcylzIT09aSYmKG5baV0qPWktcyk7bltpXT0xL25baV19dGhpcy5fd29yaz1uZXcgQXJyYXkoZSsxKSx0aGlzLl9jb2VmPW5ldyBBcnJheShlKzEpfWZ1bmN0aW9uIHloKHQsZSxuKXtsZXQgbz1iUDtyZXR1cm4gby5kYXlOdW1iZXI9ZSxvLnNlY29uZHNPZkRheT1uLGlvLmRheXNEaWZmZXJlbmNlKG8sdC5fc2FtcGxlWmVyb0RhdGVUVCl9ZnVuY3Rpb24gZ2godCxlKXtpZih0Ll9jaHVua0Rvd25sb2Fkc0luUHJvZ3Jlc3NbZV0pcmV0dXJuIHQuX2NodW5rRG93bmxvYWRzSW5Qcm9ncmVzc1tlXTtsZXQgbixvPXQuX3h5c0ZpbGVVcmxUZW1wbGF0ZTtoKG8pP249by5nZXREZXJpdmVkUmVzb3VyY2Uoe3RlbXBsYXRlVmFsdWVzOnswOmV9fSk6bj1uZXcgb2koe3VybDpQcChgQXNzZXRzL0lBVTIwMDZfWFlTL0lBVTIwMDZfWFlTXyR7ZX0uanNvbmApfSk7bGV0IHI9bi5mZXRjaEpzb24oKS50aGVuKGZ1bmN0aW9uKGkpe3QuX2NodW5rRG93bmxvYWRzSW5Qcm9ncmVzc1tlXT0hMTtsZXQgcz10Ll9zYW1wbGVzLGY9aS5zYW1wbGVzLHU9ZSp0Ll9zYW1wbGVzUGVyWHlzRmlsZSozO2ZvcihsZXQgYz0wLGw9Zi5sZW5ndGg7YzxsOysrYylzW3UrY109ZltjXX0pO3JldHVybiB0Ll9jaHVua0Rvd25sb2Fkc0luUHJvZ3Jlc3NbZV09cixyfXZhciBiUCx0YixlYj1aKCgpPT57aGgoKTtJdCgpO2F0KCk7X2goKTtkcCgpO2dmKCk7YXAoKTtiUD1uZXcgaW8oMCwwLE9lLlRBSSk7QWgucHJvdG90eXBlLnByZWxvYWQ9ZnVuY3Rpb24odCxlLG4sbyl7bGV0IHI9eWgodGhpcyx0LGUpLGk9eWgodGhpcyxuLG8pLHM9ci90aGlzLl9zdGVwU2l6ZURheXMtdGhpcy5faW50ZXJwb2xhdGlvbk9yZGVyLzJ8MDtzPDAmJihzPTApO2xldCBmPWkvdGhpcy5fc3RlcFNpemVEYXlzLXRoaXMuX2ludGVycG9sYXRpb25PcmRlci8yfDArdGhpcy5faW50ZXJwb2xhdGlvbk9yZGVyO2Y+PXRoaXMuX3RvdGFsU2FtcGxlcyYmKGY9dGhpcy5fdG90YWxTYW1wbGVzLTEpO2xldCB1PXMvdGhpcy5fc2FtcGxlc1Blclh5c0ZpbGV8MCxjPWYvdGhpcy5fc2FtcGxlc1Blclh5c0ZpbGV8MCxsPVtdO2ZvcihsZXQgcD11O3A8PWM7KytwKWwucHVzaChnaCh0aGlzLHApKTtyZXR1cm4gUHJvbWlzZS5hbGwobCl9O0FoLnByb3RvdHlwZS5jb21wdXRlWHlzUmFkaWFucz1mdW5jdGlvbih0LGUsbil7bGV0IG89eWgodGhpcyx0LGUpO2lmKG88MClyZXR1cm47bGV0IHI9by90aGlzLl9zdGVwU2l6ZURheXN8MDtpZihyPj10aGlzLl90b3RhbFNhbXBsZXMpcmV0dXJuO2xldCBpPXRoaXMuX2ludGVycG9sYXRpb25PcmRlcixzPXItKGkvMnwwKTtzPDAmJihzPTApO2xldCBmPXMraTtmPj10aGlzLl90b3RhbFNhbXBsZXMmJihmPXRoaXMuX3RvdGFsU2FtcGxlcy0xLHM9Zi1pLHM8MCYmKHM9MCkpO2xldCB1PSExLGM9dGhpcy5fc2FtcGxlcztpZihoKGNbcyozXSl8fChnaCh0aGlzLHMvdGhpcy5fc2FtcGxlc1Blclh5c0ZpbGV8MCksdT0hMCksaChjW2YqM10pfHwoZ2godGhpcyxmL3RoaXMuX3NhbXBsZXNQZXJYeXNGaWxlfDApLHU9ITApLHUpcmV0dXJuO2gobik/KG4ueD0wLG4ueT0wLG4ucz0wKTpuPW5ldyBNcCgwLDAsMCk7bGV0IGw9by1zKnRoaXMuX3N0ZXBTaXplRGF5cyxwPXRoaXMuX3dvcmssZD10aGlzLl9kZW5vbWluYXRvcnMsbT10aGlzLl9jb2VmLF89dGhpcy5feFRhYmxlLGcsYjtmb3IoZz0wO2c8PWk7KytnKXBbZ109bC1fW2ddO2ZvcihnPTA7Zzw9aTsrK2cpe2ZvcihtW2ddPTEsYj0wO2I8PWk7KytiKWIhPT1nJiYobVtnXSo9cFtiXSk7bVtnXSo9ZFtnXTtsZXQgTz0ocytnKSozO24ueCs9bVtnXSpjW08rK10sbi55Kz1tW2ddKmNbTysrXSxuLnMrPW1bZ10qY1tPXX1yZXR1cm4gbn07dGI9QWh9KTt2YXIgRmUsYmgsbmEsd2gsWm8sb3MscnMsaXMsd1AsVFAsT1AsRVAsUlAsU1AsQ1AsbmIseFAsUFAsTVAsTlAsSVAsdlAsRFAsTFAsRlAsQlAsTnAsRWgsVVAsVlAsa1AsVGgsT2gsR1AselAsalAsSFAsb2IscmIsaWIscVAsS1AsUmgsc2IsZ3IsJHM9WigoKT0+e3plKCk7VXQoKTtocigpO3ZlKCk7WXQoKTtJdCgpO2F0KCk7SHQoKTtXQSgpO1FtKCk7WnQoKTtYQSgpO2ViKCk7X2goKTtkcCgpO1d0KCk7Rm4oKTtrbigpOyRvKCk7Y3AoKTtGZT17fSxiaD17dXA6e3NvdXRoOiJlYXN0Iixub3J0aDoid2VzdCIsd2VzdDoic291dGgiLGVhc3Q6Im5vcnRoIn0sZG93bjp7c291dGg6Indlc3QiLG5vcnRoOiJlYXN0Iix3ZXN0OiJub3J0aCIsZWFzdDoic291dGgifSxzb3V0aDp7dXA6Indlc3QiLGRvd246ImVhc3QiLHdlc3Q6ImRvd24iLGVhc3Q6InVwIn0sbm9ydGg6e3VwOiJlYXN0Iixkb3duOiJ3ZXN0Iix3ZXN0OiJ1cCIsZWFzdDoiZG93biJ9LHdlc3Q6e3VwOiJub3J0aCIsZG93bjoic291dGgiLG5vcnRoOiJkb3duIixzb3V0aDoidXAifSxlYXN0Ont1cDoic291dGgiLGRvd246Im5vcnRoIixub3J0aDoidXAiLHNvdXRoOiJkb3duIn19LG5hPXtub3J0aDpbLTEsMCwwXSxlYXN0OlswLDEsMF0sdXA6WzAsMCwxXSxzb3V0aDpbMSwwLDBdLHdlc3Q6WzAsLTEsMF0sZG93bjpbMCwwLC0xXX0sd2g9e30sWm89e2Vhc3Q6bmV3IGEsbm9ydGg6bmV3IGEsdXA6bmV3IGEsd2VzdDpuZXcgYSxzb3V0aDpuZXcgYSxkb3duOm5ldyBhfSxvcz1uZXcgYSxycz1uZXcgYSxpcz1uZXcgYTtGZS5sb2NhbEZyYW1lVG9GaXhlZEZyYW1lR2VuZXJhdG9yPWZ1bmN0aW9uKHQsZSl7aWYoIWJoLmhhc093blByb3BlcnR5KHQpfHwhYmhbdF0uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEIoImZpcnN0QXhpcyBhbmQgc2Vjb25kQXhpcyBtdXN0IGJlIGVhc3QsIG5vcnRoLCB1cCwgd2VzdCwgc291dGggb3IgZG93bi4iKTtsZXQgbj1iaFt0XVtlXSxvLHI9dCtlO3JldHVybiBoKHdoW3JdKT9vPXdoW3JdOihvPWZ1bmN0aW9uKGkscyxmKXtpZighaChpKSl0aHJvdyBuZXcgQigib3JpZ2luIGlzIHJlcXVpcmVkLiIpO2lmKGgoZil8fChmPW5ldyBzdCksYS5lcXVhbHNFcHNpbG9uKGksYS5aRVJPLE0uRVBTSUxPTjE0KSlhLnVucGFjayhuYVt0XSwwLG9zKSxhLnVucGFjayhuYVtlXSwwLHJzKSxhLnVucGFjayhuYVtuXSwwLGlzKTtlbHNlIGlmKE0uZXF1YWxzRXBzaWxvbihpLngsMCxNLkVQU0lMT04xNCkmJk0uZXF1YWxzRXBzaWxvbihpLnksMCxNLkVQU0lMT04xNCkpe2xldCB1PU0uc2lnbihpLnopO2EudW5wYWNrKG5hW3RdLDAsb3MpLHQhPT0iZWFzdCImJnQhPT0id2VzdCImJmEubXVsdGlwbHlCeVNjYWxhcihvcyx1LG9zKSxhLnVucGFjayhuYVtlXSwwLHJzKSxlIT09ImVhc3QiJiZlIT09Indlc3QiJiZhLm11bHRpcGx5QnlTY2FsYXIocnMsdSxycyksYS51bnBhY2sobmFbbl0sMCxpcyksbiE9PSJlYXN0IiYmbiE9PSJ3ZXN0IiYmYS5tdWx0aXBseUJ5U2NhbGFyKGlzLHUsaXMpfWVsc2V7cz14KHMsJC5XR1M4NCkscy5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoaSxaby51cCk7bGV0IHU9Wm8udXAsYz1aby5lYXN0O2MueD0taS55LGMueT1pLngsYy56PTAsYS5ub3JtYWxpemUoYyxaby5lYXN0KSxhLmNyb3NzKHUsYyxaby5ub3J0aCksYS5tdWx0aXBseUJ5U2NhbGFyKFpvLnVwLC0xLFpvLmRvd24pLGEubXVsdGlwbHlCeVNjYWxhcihaby5lYXN0LC0xLFpvLndlc3QpLGEubXVsdGlwbHlCeVNjYWxhcihaby5ub3J0aCwtMSxaby5zb3V0aCksb3M9Wm9bdF0scnM9Wm9bZV0saXM9Wm9bbl19cmV0dXJuIGZbMF09b3MueCxmWzFdPW9zLnksZlsyXT1vcy56LGZbM109MCxmWzRdPXJzLngsZls1XT1ycy55LGZbNl09cnMueixmWzddPTAsZls4XT1pcy54LGZbOV09aXMueSxmWzEwXT1pcy56LGZbMTFdPTAsZlsxMl09aS54LGZbMTNdPWkueSxmWzE0XT1pLnosZlsxNV09MSxmfSx3aFtyXT1vKSxvfTtGZS5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZT1GZS5sb2NhbEZyYW1lVG9GaXhlZEZyYW1lR2VuZXJhdG9yKCJlYXN0Iiwibm9ydGgiKTtGZS5ub3J0aEVhc3REb3duVG9GaXhlZEZyYW1lPUZlLmxvY2FsRnJhbWVUb0ZpeGVkRnJhbWVHZW5lcmF0b3IoIm5vcnRoIiwiZWFzdCIpO0ZlLm5vcnRoVXBFYXN0VG9GaXhlZEZyYW1lPUZlLmxvY2FsRnJhbWVUb0ZpeGVkRnJhbWVHZW5lcmF0b3IoIm5vcnRoIiwidXAiKTtGZS5ub3J0aFdlc3RVcFRvRml4ZWRGcmFtZT1GZS5sb2NhbEZyYW1lVG9GaXhlZEZyYW1lR2VuZXJhdG9yKCJub3J0aCIsIndlc3QiKTt3UD1uZXcgbmUsVFA9bmV3IGEoMSwxLDEpLE9QPW5ldyBzdDtGZS5oZWFkaW5nUGl0Y2hSb2xsVG9GaXhlZEZyYW1lPWZ1bmN0aW9uKHQsZSxuLG8scil7eS50eXBlT2Yub2JqZWN0KCJIZWFkaW5nUGl0Y2hSb2xsIixlKSxvPXgobyxGZS5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZSk7bGV0IGk9bmUuZnJvbUhlYWRpbmdQaXRjaFJvbGwoZSx3UCkscz1zdC5mcm9tVHJhbnNsYXRpb25RdWF0ZXJuaW9uUm90YXRpb25TY2FsZShhLlpFUk8saSxUUCxPUCk7cmV0dXJuIHI9byh0LG4sciksc3QubXVsdGlwbHkocixzLHIpfTtFUD1uZXcgc3QsUlA9bmV3IHR0O0ZlLmhlYWRpbmdQaXRjaFJvbGxRdWF0ZXJuaW9uPWZ1bmN0aW9uKHQsZSxuLG8scil7eS50eXBlT2Yub2JqZWN0KCJIZWFkaW5nUGl0Y2hSb2xsIixlKTtsZXQgaT1GZS5oZWFkaW5nUGl0Y2hSb2xsVG9GaXhlZEZyYW1lKHQsZSxuLG8sRVApLHM9c3QuZ2V0TWF0cml4MyhpLFJQKTtyZXR1cm4gbmUuZnJvbVJvdGF0aW9uTWF0cml4KHMscil9O1NQPW5ldyBhKDEsMSwxKSxDUD1uZXcgYSxuYj1uZXcgc3QseFA9bmV3IHN0LFBQPW5ldyB0dCxNUD1uZXcgbmU7RmUuZml4ZWRGcmFtZVRvSGVhZGluZ1BpdGNoUm9sbD1mdW5jdGlvbih0LGUsbixvKXt5LmRlZmluZWQoInRyYW5zZm9ybSIsdCksZT14KGUsJC5XR1M4NCksbj14KG4sRmUuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUpLGgobyl8fChvPW5ldyBtaCk7bGV0IHI9c3QuZ2V0VHJhbnNsYXRpb24odCxDUCk7aWYoYS5lcXVhbHMocixhLlpFUk8pKXJldHVybiBvLmhlYWRpbmc9MCxvLnBpdGNoPTAsby5yb2xsPTAsbztsZXQgaT1zdC5pbnZlcnNlVHJhbnNmb3JtYXRpb24obihyLGUsbmIpLG5iKSxzPXN0LnNldFNjYWxlKHQsU1AseFApO3M9c3Quc2V0VHJhbnNsYXRpb24ocyxhLlpFUk8scyksaT1zdC5tdWx0aXBseShpLHMsaSk7bGV0IGY9bmUuZnJvbVJvdGF0aW9uTWF0cml4KHN0LmdldE1hdHJpeDMoaSxQUCksTVApO3JldHVybiBmPW5lLm5vcm1hbGl6ZShmLGYpLG1oLmZyb21RdWF0ZXJuaW9uKGYsbyl9O05QPTYqMzYwMCs0MSo2MCs1MC41NDg0MSxJUD04NjQwMTg0ODEyODY2ZS02LHZQPS4wOTMxMDQsRFA9LTYyZS03LExQPTExNzcyNzU4Mzg0NjY4ZS0zMixGUD03MjkyMTE1ODU1M2UtMTUsQlA9TS5UV09fUEkvODY0MDAsTnA9bmV3IGlvO0ZlLmNvbXB1dGVUZW1lVG9Qc2V1ZG9GaXhlZE1hdHJpeD1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJkYXRlIGlzIHJlcXVpcmVkLiIpO05wPWlvLmFkZFNlY29uZHModCwtaW8uY29tcHV0ZVRhaU1pbnVzVXRjKHQpLE5wKTtsZXQgbj1OcC5kYXlOdW1iZXIsbz1OcC5zZWNvbmRzT2ZEYXkscixpPW4tMjQ1MTU0NTtvPj00MzIwMD9yPShpKy41KS9fbi5EQVlTX1BFUl9KVUxJQU5fQ0VOVFVSWTpyPShpLS41KS9fbi5EQVlTX1BFUl9KVUxJQU5fQ0VOVFVSWTtsZXQgZj0oTlArciooSVArcioodlArcipEUCkpKSpCUCVNLlRXT19QSSx1PUZQK0xQKihuLTI0NTE1NDU1ZS0xKSxjPShvK19uLlNFQ09ORFNfUEVSX0RBWSouNSklX24uU0VDT05EU19QRVJfREFZLGw9Zit1KmMscD1NYXRoLmNvcyhsKSxkPU1hdGguc2luKGwpO3JldHVybiBoKGUpPyhlWzBdPXAsZVsxXT0tZCxlWzJdPTAsZVszXT1kLGVbNF09cCxlWzVdPTAsZVs2XT0wLGVbN109MCxlWzhdPTEsZSk6bmV3IHR0KHAsZCwwLC1kLHAsMCwwLDAsMSl9O0ZlLmlhdTIwMDZYeXNEYXRhPW5ldyB0YjtGZS5lYXJ0aE9yaWVudGF0aW9uUGFyYW1ldGVycz1LQS5OT05FO0VoPTMyLjE4NCxVUD0yNDUxNTQ1O0ZlLnByZWxvYWRJY3JmRml4ZWQ9ZnVuY3Rpb24odCl7bGV0IGU9dC5zdGFydC5kYXlOdW1iZXIsbj10LnN0YXJ0LnNlY29uZHNPZkRheStFaCxvPXQuc3RvcC5kYXlOdW1iZXIscj10LnN0b3Auc2Vjb25kc09mRGF5K0VoO3JldHVybiBGZS5pYXUyMDA2WHlzRGF0YS5wcmVsb2FkKGUsbixvLHIpfTtGZS5jb21wdXRlSWNyZlRvRml4ZWRNYXRyaXg9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgQigiZGF0ZSBpcyByZXF1aXJlZC4iKTtoKGUpfHwoZT1uZXcgdHQpO2xldCBuPUZlLmNvbXB1dGVGaXhlZFRvSWNyZk1hdHJpeCh0LGUpO2lmKGgobikpcmV0dXJuIHR0LnRyYW5zcG9zZShuLGUpfTtWUD1uZXcgTXAoMCwwLDApLGtQPW5ldyBkZigwLDAsMCwwLDAsMCksVGg9bmV3IHR0LE9oPW5ldyB0dDtGZS5jb21wdXRlRml4ZWRUb0ljcmZNYXRyaXg9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgQigiZGF0ZSBpcyByZXF1aXJlZC4iKTtoKGUpfHwoZT1uZXcgdHQpO2xldCBuPUZlLmVhcnRoT3JpZW50YXRpb25QYXJhbWV0ZXJzLmNvbXB1dGUodCxrUCk7aWYoIWgobikpcmV0dXJuO2xldCBvPXQuZGF5TnVtYmVyLHI9dC5zZWNvbmRzT2ZEYXkrRWgsaT1GZS5pYXUyMDA2WHlzRGF0YS5jb21wdXRlWHlzUmFkaWFucyhvLHIsVlApO2lmKCFoKGkpKXJldHVybjtsZXQgcz1pLngrbi54UG9sZU9mZnNldCxmPWkueStuLnlQb2xlT2Zmc2V0LHU9MS8oMStNYXRoLnNxcnQoMS1zKnMtZipmKSksYz1UaDtjWzBdPTEtdSpzKnMsY1szXT0tdSpzKmYsY1s2XT1zLGNbMV09LXUqcypmLGNbNF09MS11KmYqZixjWzddPWYsY1syXT0tcyxjWzVdPS1mLGNbOF09MS11KihzKnMrZipmKTtsZXQgbD10dC5mcm9tUm90YXRpb25aKC1pLnMsT2gpLHA9dHQubXVsdGlwbHkoYyxsLFRoKSxkPXQuZGF5TnVtYmVyLG09dC5zZWNvbmRzT2ZEYXktaW8uY29tcHV0ZVRhaU1pbnVzVXRjKHQpK24udXQxTWludXNVdGMsXz1kLTI0NTE1NDUsZz1tL19uLlNFQ09ORFNfUEVSX0RBWSxiPS43NzkwNTcyNzMyNjQrZysuMDAyNzM3ODExOTExMzU0NDgqKF8rZyk7Yj1iJTEqTS5UV09fUEk7bGV0IE89dHQuZnJvbVJvdGF0aW9uWihiLE9oKSxUPXR0Lm11bHRpcGx5KHAsTyxUaCksRT1NYXRoLmNvcyhuLnhQb2xlV2FuZGVyKSx3PU1hdGguY29zKG4ueVBvbGVXYW5kZXIpLEM9TWF0aC5zaW4obi54UG9sZVdhbmRlciksTj1NYXRoLnNpbihuLnlQb2xlV2FuZGVyKSxJPW8tVVArci9fbi5TRUNPTkRTX1BFUl9EQVk7SS89MzY1MjU7bGV0IEw9LTQ3ZS02KkkqTS5SQURJQU5TX1BFUl9ERUdSRUUvMzYwMCx2PU1hdGguY29zKEwpLEQ9TWF0aC5zaW4oTCksVT1PaDtyZXR1cm4gVVswXT1FKnYsVVsxXT1FKkQsVVsyXT1DLFVbM109LXcqRCtOKkMqdixVWzRdPXcqditOKkMqRCxVWzVdPS1OKkUsVVs2XT0tTipELXcqQyp2LFVbN109Tip2LXcqQypELFVbOF09dypFLHR0Lm11bHRpcGx5KFQsVSxlKX07R1A9bmV3IF9lO0ZlLnBvaW50VG9XaW5kb3dDb29yZGluYXRlcz1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gbz1GZS5wb2ludFRvR0xXaW5kb3dDb29yZGluYXRlcyh0LGUsbixvKSxvLnk9MiplWzVdLW8ueSxvfTtGZS5wb2ludFRvR0xXaW5kb3dDb29yZGluYXRlcz1mdW5jdGlvbih0LGUsbixvKXtpZighaCh0KSl0aHJvdyBuZXcgQigibW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgQigidmlld3BvcnRUcmFuc2Zvcm1hdGlvbiBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgQigicG9pbnQgaXMgcmVxdWlyZWQuIik7aChvKXx8KG89bmV3IG50KTtsZXQgcj1HUDtyZXR1cm4gc3QubXVsdGlwbHlCeVZlY3Rvcih0LF9lLmZyb21FbGVtZW50cyhuLngsbi55LG4ueiwxLHIpLHIpLF9lLm11bHRpcGx5QnlTY2FsYXIociwxL3IudyxyKSxzdC5tdWx0aXBseUJ5VmVjdG9yKGUscixyKSxudC5mcm9tQ2FydGVzaWFuNChyLG8pfTt6UD1uZXcgYSxqUD1uZXcgYSxIUD1uZXcgYTtGZS5yb3RhdGlvbk1hdHJpeEZyb21Qb3NpdGlvblZlbG9jaXR5PWZ1bmN0aW9uKHQsZSxuLG8pe2lmKCFoKHQpKXRocm93IG5ldyBCKCJwb3NpdGlvbiBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgQigidmVsb2NpdHkgaXMgcmVxdWlyZWQuIik7bGV0IHI9eChuLCQuV0dTODQpLmdlb2RldGljU3VyZmFjZU5vcm1hbCh0LHpQKSxpPWEuY3Jvc3MoZSxyLGpQKTthLmVxdWFsc0Vwc2lsb24oaSxhLlpFUk8sTS5FUFNJTE9ONikmJihpPWEuY2xvbmUoYS5VTklUX1gsaSkpO2xldCBzPWEuY3Jvc3MoaSxlLEhQKTtyZXR1cm4gYS5ub3JtYWxpemUocyxzKSxhLmNyb3NzKGUscyxpKSxhLm5lZ2F0ZShpLGkpLGEubm9ybWFsaXplKGksaSksaChvKXx8KG89bmV3IHR0KSxvWzBdPWUueCxvWzFdPWUueSxvWzJdPWUueixvWzNdPWkueCxvWzRdPWkueSxvWzVdPWkueixvWzZdPXMueCxvWzddPXMueSxvWzhdPXMueixvfTtvYj1uZXcgc3QoMCwwLDEsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDAsMSkscmI9bmV3IGN0LGliPW5ldyBhLHFQPW5ldyBhLEtQPW5ldyB0dCxSaD1uZXcgc3Qsc2I9bmV3IHN0O0ZlLmJhc2lzVG8yRD1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEIoInByb2plY3Rpb24gaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEIoIm1hdHJpeCBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgQigicmVzdWx0IGlzIHJlcXVpcmVkLiIpO2xldCBvPXN0LmdldFRyYW5zbGF0aW9uKGUscVApLHI9dC5lbGxpcHNvaWQsaT1yLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKG8scmIpLHM9dC5wcm9qZWN0KGksaWIpO2EuZnJvbUVsZW1lbnRzKHMueixzLngscy55LHMpO2xldCBmPUZlLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKG8scixSaCksdT1zdC5pbnZlcnNlVHJhbnNmb3JtYXRpb24oZixzYiksYz1zdC5nZXRNYXRyaXgzKGUsS1ApLGw9c3QubXVsdGlwbHlCeU1hdHJpeDModSxjLG4pO3JldHVybiBzdC5tdWx0aXBseShvYixsLG4pLHN0LnNldFRyYW5zbGF0aW9uKG4scyxuKSxufTtGZS53Z3M4NFRvMkRNb2RlbE1hdHJpeD1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEIoInByb2plY3Rpb24gaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEIoImNlbnRlciBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgQigicmVzdWx0IGlzIHJlcXVpcmVkLiIpO2xldCBvPXQuZWxsaXBzb2lkLHI9RmUuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUoZSxvLFJoKSxpPXN0LmludmVyc2VUcmFuc2Zvcm1hdGlvbihyLHNiKSxzPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZSxyYiksZj10LnByb2plY3QocyxpYik7YS5mcm9tRWxlbWVudHMoZi56LGYueCxmLnksZik7bGV0IHU9c3QuZnJvbVRyYW5zbGF0aW9uKGYsUmgpO3JldHVybiBzdC5tdWx0aXBseShvYixpLG4pLHN0Lm11bHRpcGx5KHUsbixuKSxufTtncj1GZX0pO2Z1bmN0aW9uIFNoKHQpe3Q9eCh0LHguRU1QVFlfT0JKRUNUKSx5LnR5cGVPZi5vYmplY3QoIm9wdGlvbnMuYXR0cmlidXRlcyIsdC5hdHRyaWJ1dGVzKSx0aGlzLmF0dHJpYnV0ZXM9dC5hdHRyaWJ1dGVzLHRoaXMuaW5kaWNlcz10LmluZGljZXMsdGhpcy5wcmltaXRpdmVUeXBlPXgodC5wcmltaXRpdmVUeXBlLEx0LlRSSUFOR0xFUyksdGhpcy5ib3VuZGluZ1NwaGVyZT10LmJvdW5kaW5nU3BoZXJlLHRoaXMuZ2VvbWV0cnlUeXBlPXgodC5nZW9tZXRyeVR5cGUsU2kuTk9ORSksdGhpcy5ib3VuZGluZ1NwaGVyZUNWPXQuYm91bmRpbmdTcGhlcmVDVix0aGlzLm9mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZX12YXIgV1AsWFAsY2IsWVAsJFAsWlAsUVAsSlAsdDMsZTMsRnQsWGU9WigoKT0+e3plKCk7VXQoKTt2ZSgpO1l0KCk7SXQoKTthdCgpO0h0KCk7V2woKTtmZigpO0ZuKCk7a24oKTt0bigpOyRvKCk7QW4oKTskcygpO1NoLmNvbXB1dGVOdW1iZXJPZlZlcnRpY2VzPWZ1bmN0aW9uKHQpe3kudHlwZU9mLm9iamVjdCgiZ2VvbWV0cnkiLHQpO2xldCBlPS0xO2ZvcihsZXQgbiBpbiB0LmF0dHJpYnV0ZXMpaWYodC5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KG4pJiZoKHQuYXR0cmlidXRlc1tuXSkmJmgodC5hdHRyaWJ1dGVzW25dLnZhbHVlcykpe2xldCBvPXQuYXR0cmlidXRlc1tuXSxyPW8udmFsdWVzLmxlbmd0aC9vLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGU7aWYoZSE9PXImJmUhPT0tMSl0aHJvdyBuZXcgQigiQWxsIGF0dHJpYnV0ZSBsaXN0cyBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMuIik7ZT1yfXJldHVybiBlfTtXUD1uZXcgY3QsWFA9bmV3IGEsY2I9bmV3IHN0LFlQPVtuZXcgY3QsbmV3IGN0LG5ldyBjdF0sJFA9W25ldyBudCxuZXcgbnQsbmV3IG50XSxaUD1bbmV3IG50LG5ldyBudCxuZXcgbnRdLFFQPW5ldyBhLEpQPW5ldyBuZSx0Mz1uZXcgc3QsZTM9bmV3IFhvO1NoLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzPWZ1bmN0aW9uKHQsZSxuLG8pe2xldCByLGk9UHQuY2VudGVyKG8sV1ApLHM9Y3QudG9DYXJ0ZXNpYW4oaSxuLFhQKSxmPWdyLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKHMsbixjYiksdT1zdC5pbnZlcnNlKGYsY2IpLGM9JFAsbD1ZUDtsWzBdLmxvbmdpdHVkZT1vLndlc3QsbFswXS5sYXRpdHVkZT1vLnNvdXRoLGxbMV0ubG9uZ2l0dWRlPW8ud2VzdCxsWzFdLmxhdGl0dWRlPW8ubm9ydGgsbFsyXS5sb25naXR1ZGU9by5lYXN0LGxbMl0ubGF0aXR1ZGU9by5zb3V0aDtsZXQgcD1RUDtmb3Iocj0wO3I8MztyKyspY3QudG9DYXJ0ZXNpYW4obFtyXSxuLHApLHA9c3QubXVsdGlwbHlCeVBvaW50QXNWZWN0b3IodSxwLHApLGNbcl0ueD1wLngsY1tyXS55PXAueTtsZXQgZD1uZS5mcm9tQXhpc0FuZ2xlKGEuVU5JVF9aLC1lLEpQKSxtPXR0LmZyb21RdWF0ZXJuaW9uKGQsdDMpLF89dC5sZW5ndGgsZz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksTz1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksVD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7Zm9yKHI9MDtyPF87cisrKXA9c3QubXVsdGlwbHlCeVBvaW50QXNWZWN0b3IodSx0W3JdLHApLHA9dHQubXVsdGlwbHlCeVZlY3RvcihtLHAscCksZz1NYXRoLm1pbihnLHAueCksYj1NYXRoLm1pbihiLHAueSksTz1NYXRoLm1heChPLHAueCksVD1NYXRoLm1heChULHAueSk7bGV0IEU9WG8uZnJvbVJvdGF0aW9uKGUsZTMpLHc9WlA7d1swXS54PWcsd1swXS55PWIsd1sxXS54PWcsd1sxXS55PVQsd1syXS54PU8sd1syXS55PWI7bGV0IEM9Y1swXSxOPWNbMl0ueC1DLngsST1jWzFdLnktQy55O2ZvcihyPTA7cjwzO3IrKyl7bGV0IEE9d1tyXTtYby5tdWx0aXBseUJ5VmVjdG9yKEUsQSxBKSxBLng9KEEueC1DLngpL04sQS55PShBLnktQy55KS9JfWxldCBMPXdbMF0sdj13WzFdLEQ9d1syXSxVPW5ldyBBcnJheSg2KTtyZXR1cm4gbnQucGFjayhMLFUpLG50LnBhY2sodixVLDIpLG50LnBhY2soRCxVLDQpLFV9O0Z0PVNofSk7ZnVuY3Rpb24gbjModCl7aWYodD14KHQseC5FTVBUWV9PQkpFQ1QpLCFoKHQuY29tcG9uZW50RGF0YXR5cGUpKXRocm93IG5ldyBCKCJvcHRpb25zLmNvbXBvbmVudERhdGF0eXBlIGlzIHJlcXVpcmVkLiIpO2lmKCFoKHQuY29tcG9uZW50c1BlckF0dHJpYnV0ZSkpdGhyb3cgbmV3IEIoIm9wdGlvbnMuY29tcG9uZW50c1BlckF0dHJpYnV0ZSBpcyByZXF1aXJlZC4iKTtpZih0LmNvbXBvbmVudHNQZXJBdHRyaWJ1dGU8MXx8dC5jb21wb25lbnRzUGVyQXR0cmlidXRlPjQpdGhyb3cgbmV3IEIoIm9wdGlvbnMuY29tcG9uZW50c1BlckF0dHJpYnV0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNC4iKTtpZighaCh0LnZhbHVlcykpdGhyb3cgbmV3IEIoIm9wdGlvbnMudmFsdWVzIGlzIHJlcXVpcmVkLiIpO3RoaXMuY29tcG9uZW50RGF0YXR5cGU9dC5jb21wb25lbnREYXRhdHlwZSx0aGlzLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGU9dC5jb21wb25lbnRzUGVyQXR0cmlidXRlLHRoaXMubm9ybWFsaXplPXgodC5ub3JtYWxpemUsITEpLHRoaXMudmFsdWVzPXQudmFsdWVzfXZhciBydCxZZT1aKCgpPT57SXQoKTthdCgpO0h0KCk7cnQ9bjN9KTtmdW5jdGlvbiBvMyh0KXt0PXgodCx4LkVNUFRZX09CSkVDVCksdGhpcy5wb3NpdGlvbj10LnBvc2l0aW9uLHRoaXMubm9ybWFsPXQubm9ybWFsLHRoaXMuc3Q9dC5zdCx0aGlzLmJpdGFuZ2VudD10LmJpdGFuZ2VudCx0aGlzLnRhbmdlbnQ9dC50YW5nZW50LHRoaXMuY29sb3I9dC5jb2xvcn12YXIgcmUsYW49WigoKT0+e0l0KCk7cmU9bzN9KTt2YXIgSGUsYWIsZmI9WigoKT0+e3plKCk7VXQoKTtocigpO1l0KCk7SHQoKTtmZigpO0ZuKCk7a24oKTtIZT17U0NBTEFSOiJTQ0FMQVIiLFZFQzI6IlZFQzIiLFZFQzM6IlZFQzMiLFZFQzQ6IlZFQzQiLE1BVDI6Ik1BVDIiLE1BVDM6Ik1BVDMiLE1BVDQ6Ik1BVDQifTtIZS5nZXRNYXRoVHlwZT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSBIZS5TQ0FMQVI6cmV0dXJuIE51bWJlcjtjYXNlIEhlLlZFQzI6cmV0dXJuIG50O2Nhc2UgSGUuVkVDMzpyZXR1cm4gYTtjYXNlIEhlLlZFQzQ6cmV0dXJuIF9lO2Nhc2UgSGUuTUFUMjpyZXR1cm4gWG87Y2FzZSBIZS5NQVQzOnJldHVybiB0dDtjYXNlIEhlLk1BVDQ6cmV0dXJuIHN0O2RlZmF1bHQ6dGhyb3cgbmV3IEIoImF0dHJpYnV0ZVR5cGUgaXMgbm90IGEgdmFsaWQgdmFsdWUuIil9fTtIZS5nZXROdW1iZXJPZkNvbXBvbmVudHM9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgSGUuU0NBTEFSOnJldHVybiAxO2Nhc2UgSGUuVkVDMjpyZXR1cm4gMjtjYXNlIEhlLlZFQzM6cmV0dXJuIDM7Y2FzZSBIZS5WRUM0OmNhc2UgSGUuTUFUMjpyZXR1cm4gNDtjYXNlIEhlLk1BVDM6cmV0dXJuIDk7Y2FzZSBIZS5NQVQ0OnJldHVybiAxNjtkZWZhdWx0OnRocm93IG5ldyBCKCJhdHRyaWJ1dGVUeXBlIGlzIG5vdCBhIHZhbGlkIHZhbHVlLiIpfX07SGUuZ2V0QXR0cmlidXRlTG9jYXRpb25Db3VudD1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSBIZS5TQ0FMQVI6Y2FzZSBIZS5WRUMyOmNhc2UgSGUuVkVDMzpjYXNlIEhlLlZFQzQ6cmV0dXJuIDE7Y2FzZSBIZS5NQVQyOnJldHVybiAyO2Nhc2UgSGUuTUFUMzpyZXR1cm4gMztjYXNlIEhlLk1BVDQ6cmV0dXJuIDQ7ZGVmYXVsdDp0aHJvdyBuZXcgQigiYXR0cmlidXRlVHlwZSBpcyBub3QgYSB2YWxpZCB2YWx1ZS4iKX19O0hlLmdldEdsc2xUeXBlPWZ1bmN0aW9uKHQpe3N3aXRjaCh5LnR5cGVPZi5zdHJpbmcoImF0dHJpYnV0ZVR5cGUiLHQpLHQpe2Nhc2UgSGUuU0NBTEFSOnJldHVybiJmbG9hdCI7Y2FzZSBIZS5WRUMyOnJldHVybiJ2ZWMyIjtjYXNlIEhlLlZFQzM6cmV0dXJuInZlYzMiO2Nhc2UgSGUuVkVDNDpyZXR1cm4idmVjNCI7Y2FzZSBIZS5NQVQyOnJldHVybiJtYXQyIjtjYXNlIEhlLk1BVDM6cmV0dXJuIm1hdDMiO2Nhc2UgSGUuTUFUNDpyZXR1cm4ibWF0NCI7ZGVmYXVsdDp0aHJvdyBuZXcgQigiYXR0cmlidXRlVHlwZSBpcyBub3QgYSB2YWxpZCB2YWx1ZS4iKX19O2FiPU9iamVjdC5mcmVlemUoSGUpfSk7ZnVuY3Rpb24gSXAodCl7cmV0dXJuIHBiWzBdPXQscGJbMF19ZnVuY3Rpb24gQ2godCl7cmV0dXJuIHQ+PjFeLSh0JjEpfXZhciB1YixsYixlbix3ZixwYix4aCxubixzcz1aKCgpPT57emUoKTtVdCgpO0RlKCk7WXQoKTthdCgpO0h0KCk7V3QoKTtmYigpO3ViPTEvMjU2LGxiPTI1Nixlbj17fTtlbi5vY3RFbmNvZGVJblJhbmdlPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoInZlY3RvciIsdCkseS5kZWZpbmVkKCJyZXN1bHQiLG4pO2xldCBvPWEubWFnbml0dWRlU3F1YXJlZCh0KTtpZihNYXRoLmFicyhvLTEpPk0uRVBTSUxPTjYpdGhyb3cgbmV3IEIoInZlY3RvciBtdXN0IGJlIG5vcm1hbGl6ZWQuIik7aWYobi54PXQueC8oTWF0aC5hYnModC54KStNYXRoLmFicyh0LnkpK01hdGguYWJzKHQueikpLG4ueT10LnkvKE1hdGguYWJzKHQueCkrTWF0aC5hYnModC55KStNYXRoLmFicyh0LnopKSx0Lno8MCl7bGV0IHI9bi54LGk9bi55O24ueD0oMS1NYXRoLmFicyhpKSkqTS5zaWduTm90WmVybyhyKSxuLnk9KDEtTWF0aC5hYnMocikpKk0uc2lnbk5vdFplcm8oaSl9cmV0dXJuIG4ueD1NLnRvU05vcm0obi54LGUpLG4ueT1NLnRvU05vcm0obi55LGUpLG59O2VuLm9jdEVuY29kZT1mdW5jdGlvbih0LGUpe3JldHVybiBlbi5vY3RFbmNvZGVJblJhbmdlKHQsMjU1LGUpfTt3Zj1uZXcgbnQscGI9bmV3IFVpbnQ4QXJyYXkoMSk7ZW4ub2N0RW5jb2RlVG9DYXJ0ZXNpYW40PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVuLm9jdEVuY29kZUluUmFuZ2UodCw2NTUzNSx3ZiksZS54PUlwKHdmLngqdWIpLGUueT1JcCh3Zi54KSxlLno9SXAod2YueSp1YiksZS53PUlwKHdmLnkpLGV9O2VuLm9jdERlY29kZUluUmFuZ2U9ZnVuY3Rpb24odCxlLG4sbyl7aWYoeS5kZWZpbmVkKCJyZXN1bHQiLG8pLHQ8MHx8dD5ufHxlPDB8fGU+bil0aHJvdyBuZXcgQihgeCBhbmQgeSBtdXN0IGJlIHVuc2lnbmVkIG5vcm1hbGl6ZWQgaW50ZWdlcnMgYmV0d2VlbiAwIGFuZCAke259YCk7aWYoby54PU0uZnJvbVNOb3JtKHQsbiksby55PU0uZnJvbVNOb3JtKGUsbiksby56PTEtKE1hdGguYWJzKG8ueCkrTWF0aC5hYnMoby55KSksby56PDApe2xldCByPW8ueDtvLng9KDEtTWF0aC5hYnMoby55KSkqTS5zaWduTm90WmVybyhyKSxvLnk9KDEtTWF0aC5hYnMocikpKk0uc2lnbk5vdFplcm8oby55KX1yZXR1cm4gYS5ub3JtYWxpemUobyxvKX07ZW4ub2N0RGVjb2RlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZW4ub2N0RGVjb2RlSW5SYW5nZSh0LGUsMjU1LG4pfTtlbi5vY3REZWNvZGVGcm9tQ2FydGVzaWFuND1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiZW5jb2RlZCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPXQueCxvPXQueSxyPXQueixpPXQudztpZihuPDB8fG4+MjU1fHxvPDB8fG8+MjU1fHxyPDB8fHI+MjU1fHxpPDB8fGk+MjU1KXRocm93IG5ldyBCKCJ4LCB5LCB6LCBhbmQgdyBtdXN0IGJlIHVuc2lnbmVkIG5vcm1hbGl6ZWQgaW50ZWdlcnMgYmV0d2VlbiAwIGFuZCAyNTUiKTtsZXQgcz1uKmxiK28sZj1yKmxiK2k7cmV0dXJuIGVuLm9jdERlY29kZUluUmFuZ2UocyxmLDY1NTM1LGUpfTtlbi5vY3RQYWNrRmxvYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHkuZGVmaW5lZCgiZW5jb2RlZCIsdCksMjU2KnQueCt0Lnl9O3hoPW5ldyBudDtlbi5vY3RFbmNvZGVGbG9hdD1mdW5jdGlvbih0KXtyZXR1cm4gZW4ub2N0RW5jb2RlKHQseGgpLGVuLm9jdFBhY2tGbG9hdCh4aCl9O2VuLm9jdERlY29kZUZsb2F0PWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJ2YWx1ZSIsdCk7bGV0IG49dC8yNTYsbz1NYXRoLmZsb29yKG4pLHI9KG4tbykqMjU2O3JldHVybiBlbi5vY3REZWNvZGUobyxyLGUpfTtlbi5vY3RQYWNrPWZ1bmN0aW9uKHQsZSxuLG8pe3kuZGVmaW5lZCgidjEiLHQpLHkuZGVmaW5lZCgidjIiLGUpLHkuZGVmaW5lZCgidjMiLG4pLHkuZGVmaW5lZCgicmVzdWx0IixvKTtsZXQgcj1lbi5vY3RFbmNvZGVGbG9hdCh0KSxpPWVuLm9jdEVuY29kZUZsb2F0KGUpLHM9ZW4ub2N0RW5jb2RlKG4seGgpO3JldHVybiBvLng9NjU1MzYqcy54K3Isby55PTY1NTM2KnMueStpLG99O2VuLm9jdFVucGFjaz1mdW5jdGlvbih0LGUsbixvKXt5LmRlZmluZWQoInBhY2tlZCIsdCkseS5kZWZpbmVkKCJ2MSIsZSkseS5kZWZpbmVkKCJ2MiIsbikseS5kZWZpbmVkKCJ2MyIsbyk7bGV0IHI9dC54LzY1NTM2LGk9TWF0aC5mbG9vcihyKSxzPShyLWkpKjY1NTM2O3I9dC55LzY1NTM2O2xldCBmPU1hdGguZmxvb3IociksdT0oci1mKSo2NTUzNjtlbi5vY3REZWNvZGVGbG9hdChzLGUpLGVuLm9jdERlY29kZUZsb2F0KHUsbiksZW4ub2N0RGVjb2RlKGksZixvKX07ZW4uY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXM9ZnVuY3Rpb24odCl7eS5kZWZpbmVkKCJ0ZXh0dXJlQ29vcmRpbmF0ZXMiLHQpO2xldCBlPXQueCo0MDk1fDAsbj10LnkqNDA5NXwwO3JldHVybiA0MDk2KmUrbn07ZW4uZGVjb21wcmVzc1RleHR1cmVDb29yZGluYXRlcz1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiY29tcHJlc3NlZCIsdCkseS5kZWZpbmVkKCJyZXN1bHQiLGUpO2xldCBuPXQvNDA5NixvPU1hdGguZmxvb3Iobik7cmV0dXJuIGUueD1vLzQwOTUsZS55PSh0LW8qNDA5NikvNDA5NSxlfTtlbi56aWdaYWdEZWx0YURlY29kZT1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJ1QnVmZmVyIix0KSx5LmRlZmluZWQoInZCdWZmZXIiLGUpLHkudHlwZU9mLm51bWJlci5lcXVhbHMoInVCdWZmZXIubGVuZ3RoIiwidkJ1ZmZlci5sZW5ndGgiLHQubGVuZ3RoLGUubGVuZ3RoKSxoKG4pJiZ5LnR5cGVPZi5udW1iZXIuZXF1YWxzKCJ1QnVmZmVyLmxlbmd0aCIsImhlaWdodEJ1ZmZlci5sZW5ndGgiLHQubGVuZ3RoLG4ubGVuZ3RoKTtsZXQgbz10Lmxlbmd0aCxyPTAsaT0wLHM9MDtmb3IobGV0IGY9MDtmPG87KytmKXIrPUNoKHRbZl0pLGkrPUNoKGVbZl0pLHRbZl09cixlW2ZdPWksaChuKSYmKHMrPUNoKG5bZl0pLG5bZl09cyl9O2VuLmRlcXVhbnRpemU9ZnVuY3Rpb24odCxlLG4sbyl7eS5kZWZpbmVkKCJ0eXBlZEFycmF5Iix0KSx5LmRlZmluZWQoImNvbXBvbmVudERhdGF0eXBlIixlKSx5LmRlZmluZWQoInR5cGUiLG4pLHkuZGVmaW5lZCgiY291bnQiLG8pO2xldCByPWFiLmdldE51bWJlck9mQ29tcG9uZW50cyhuKSxpO3N3aXRjaChlKXtjYXNlIG90LkJZVEU6aT0xMjc7YnJlYWs7Y2FzZSBvdC5VTlNJR05FRF9CWVRFOmk9MjU1O2JyZWFrO2Nhc2Ugb3QuU0hPUlQ6aT0zMjc2NzticmVhaztjYXNlIG90LlVOU0lHTkVEX1NIT1JUOmk9NjU1MzU7YnJlYWs7Y2FzZSBvdC5JTlQ6aT0yMTQ3NDgzNjQ3O2JyZWFrO2Nhc2Ugb3QuVU5TSUdORURfSU5UOmk9NDI5NDk2NzI5NTticmVhaztkZWZhdWx0OnRocm93IG5ldyBCKGBDYW5ub3QgZGVxdWFudGl6ZSBjb21wb25lbnQgZGF0YXR5cGU6ICR7ZX1gKX1sZXQgcz1uZXcgRmxvYXQzMkFycmF5KG8qcik7Zm9yKGxldCBmPTA7ZjxvO2YrKylmb3IobGV0IHU9MDt1PHI7dSsrKXtsZXQgYz1mKnIrdTtzW2NdPU1hdGgubWF4KHRbY10vaSwtMSl9cmV0dXJuIHN9O2VuLmRlY29kZVJHQjU2NT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgidHlwZWRBcnJheSIsdCk7bGV0IG49dC5sZW5ndGgqMztoKGUpJiZ5LnR5cGVPZi5udW1iZXIuZXF1YWxzKCJyZXN1bHQubGVuZ3RoIiwidHlwZWRBcnJheS5sZW5ndGggKiAzIixlLmxlbmd0aCxuKTtsZXQgbz10Lmxlbmd0aDtoKGUpfHwoZT1uZXcgRmxvYXQzMkFycmF5KG8qMykpO2xldCByPTMxLGk9NjMscz0xLzMxLGY9MS82Mztmb3IobGV0IHU9MDt1PG87dSsrKXtsZXQgYz10W3VdLGw9Yz4+MTEscD1jPj41JmksZD1jJnIsbT0zKnU7ZVttXT1sKnMsZVttKzFdPXAqZixlW20rMl09ZCpzfXJldHVybiBlfTtubj1lbn0pO2Z1bmN0aW9uIHIzKHQsZSxuLG8scil7eS5kZWZpbmVkKCJwb2ludCIsdCkseS5kZWZpbmVkKCJwMCIsZSkseS5kZWZpbmVkKCJwMSIsbikseS5kZWZpbmVkKCJwMiIsbyksaChyKXx8KHI9bmV3IGEpO2xldCBpLHMsZix1LGMsbCxwLGQ7aWYoaChlLnopKXtpZihhLmVxdWFsc0Vwc2lsb24odCxlLE0uRVBTSUxPTjE0KSlyZXR1cm4gYS5jbG9uZShhLlVOSVRfWCxyKTtpZihhLmVxdWFsc0Vwc2lsb24odCxuLE0uRVBTSUxPTjE0KSlyZXR1cm4gYS5jbG9uZShhLlVOSVRfWSxyKTtpZihhLmVxdWFsc0Vwc2lsb24odCxvLE0uRVBTSUxPTjE0KSlyZXR1cm4gYS5jbG9uZShhLlVOSVRfWixyKTtpPWEuc3VidHJhY3QobixlLGRiKSxzPWEuc3VidHJhY3QobyxlLG1iKSxmPWEuc3VidHJhY3QodCxlLGhiKSx1PWEuZG90KGksaSksYz1hLmRvdChpLHMpLGw9YS5kb3QoaSxmKSxwPWEuZG90KHMscyksZD1hLmRvdChzLGYpfWVsc2V7aWYobnQuZXF1YWxzRXBzaWxvbih0LGUsTS5FUFNJTE9OMTQpKXJldHVybiBhLmNsb25lKGEuVU5JVF9YLHIpO2lmKG50LmVxdWFsc0Vwc2lsb24odCxuLE0uRVBTSUxPTjE0KSlyZXR1cm4gYS5jbG9uZShhLlVOSVRfWSxyKTtpZihudC5lcXVhbHNFcHNpbG9uKHQsbyxNLkVQU0lMT04xNCkpcmV0dXJuIGEuY2xvbmUoYS5VTklUX1oscik7aT1udC5zdWJ0cmFjdChuLGUsZGIpLHM9bnQuc3VidHJhY3QobyxlLG1iKSxmPW50LnN1YnRyYWN0KHQsZSxoYiksdT1udC5kb3QoaSxpKSxjPW50LmRvdChpLHMpLGw9bnQuZG90KGksZikscD1udC5kb3QocyxzKSxkPW50LmRvdChzLGYpfXIueT1wKmwtYypkLHIuej11KmQtYypsO2xldCBtPXUqcC1jKmM7aWYobSE9PTApcmV0dXJuIHIueS89bSxyLnovPW0sci54PTEtci55LXIueixyfXZhciBkYixtYixoYixfYix5Yj1aKCgpPT57emUoKTtVdCgpO1l0KCk7YXQoKTtXdCgpO2RiPW5ldyBhLG1iPW5ldyBhLGhiPW5ldyBhO19iPXIzfSk7ZnVuY3Rpb24gcmkoKXt0aGlzLmhpZ2g9YS5jbG9uZShhLlpFUk8pLHRoaXMubG93PWEuY2xvbmUoYS5aRVJPKX12YXIgTWksUGgsWnMsTWg9WigoKT0+e1V0KCk7WXQoKTthdCgpO3JpLmVuY29kZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm51bWJlcigidmFsdWUiLHQpLGgoZSl8fChlPXtoaWdoOjAsbG93OjB9KTtsZXQgbjtyZXR1cm4gdD49MD8obj1NYXRoLmZsb29yKHQvNjU1MzYpKjY1NTM2LGUuaGlnaD1uLGUubG93PXQtbik6KG49TWF0aC5mbG9vcigtdC82NTUzNikqNjU1MzYsZS5oaWdoPS1uLGUubG93PXQrbiksZX07TWk9e2hpZ2g6MCxsb3c6MH07cmkuZnJvbUNhcnRlc2lhbj1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSxoKGUpfHwoZT1uZXcgcmkpO2xldCBuPWUuaGlnaCxvPWUubG93O3JldHVybiByaS5lbmNvZGUodC54LE1pKSxuLng9TWkuaGlnaCxvLng9TWkubG93LHJpLmVuY29kZSh0LnksTWkpLG4ueT1NaS5oaWdoLG8ueT1NaS5sb3cscmkuZW5jb2RlKHQueixNaSksbi56PU1pLmhpZ2gsby56PU1pLmxvdyxlfTtQaD1uZXcgcmk7cmkud3JpdGVFbGVtZW50cz1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJjYXJ0ZXNpYW5BcnJheSIsZSkseS50eXBlT2YubnVtYmVyKCJpbmRleCIsbikseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImluZGV4IixuLDApLHJpLmZyb21DYXJ0ZXNpYW4odCxQaCk7bGV0IG89UGguaGlnaCxyPVBoLmxvdztlW25dPW8ueCxlW24rMV09by55LGVbbisyXT1vLnosZVtuKzNdPXIueCxlW24rNF09ci55LGVbbis1XT1yLnp9O1pzPXJpfSk7dmFyIEpuLER0LCRlPVooKCk9PnthdCgpO0h0KCk7V3QoKTtrcygpO0puPXtVTlNJR05FRF9CWVRFOnF0LlVOU0lHTkVEX0JZVEUsVU5TSUdORURfU0hPUlQ6cXQuVU5TSUdORURfU0hPUlQsVU5TSUdORURfSU5UOnF0LlVOU0lHTkVEX0lOVH07Sm4uZ2V0U2l6ZUluQnl0ZXM9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgSm4uVU5TSUdORURfQllURTpyZXR1cm4gVWludDhBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtjYXNlIEpuLlVOU0lHTkVEX1NIT1JUOnJldHVybiBVaW50MTZBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtjYXNlIEpuLlVOU0lHTkVEX0lOVDpyZXR1cm4gVWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlR9dGhyb3cgbmV3IEIoImluZGV4RGF0YXR5cGUgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSB2YWxpZCBJbmRleERhdGF0eXBlIGNvbnN0YW50LiIpfTtKbi5mcm9tU2l6ZUluQnl0ZXM9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgMjpyZXR1cm4gSm4uVU5TSUdORURfU0hPUlQ7Y2FzZSA0OnJldHVybiBKbi5VTlNJR05FRF9JTlQ7Y2FzZSAxOnJldHVybiBKbi5VTlNJR05FRF9CWVRFO2RlZmF1bHQ6dGhyb3cgbmV3IEIoIlNpemUgaW4gYnl0ZXMgY2Fubm90IGJlIG1hcHBlZCB0byBhbiBJbmRleERhdGF0eXBlIil9fTtKbi52YWxpZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gaCh0KSYmKHQ9PT1Kbi5VTlNJR05FRF9CWVRFfHx0PT09Sm4uVU5TSUdORURfU0hPUlR8fHQ9PT1Kbi5VTlNJR05FRF9JTlQpfTtKbi5jcmVhdGVUeXBlZEFycmF5PWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEIoIm51bWJlck9mVmVydGljZXMgaXMgcmVxdWlyZWQuIik7cmV0dXJuIHQ+PU0uU0lYVFlfRk9VUl9LSUxPQllURVM/bmV3IFVpbnQzMkFycmF5KGUpOm5ldyBVaW50MTZBcnJheShlKX07Sm4uY3JlYXRlVHlwZWRBcnJheUZyb21BcnJheUJ1ZmZlcj1mdW5jdGlvbih0LGUsbixvKXtpZighaCh0KSl0aHJvdyBuZXcgQigibnVtYmVyT2ZWZXJ0aWNlcyBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgQigic291cmNlQXJyYXkgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEIoImJ5dGVPZmZzZXQgaXMgcmVxdWlyZWQuIik7cmV0dXJuIHQ+PU0uU0lYVFlfRk9VUl9LSUxPQllURVM/bmV3IFVpbnQzMkFycmF5KGUsbixvKTpuZXcgVWludDE2QXJyYXkoZSxuLG8pfTtKbi5mcm9tVHlwZWRBcnJheT1mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gSm4uVU5TSUdORURfQllURTtpZih0IGluc3RhbmNlb2YgVWludDE2QXJyYXkpcmV0dXJuIEpuLlVOU0lHTkVEX1NIT1JUO2lmKHQgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlyZXR1cm4gSm4uVU5TSUdORURfSU5UO3Rocm93IG5ldyBCKCJhcnJheSBtdXN0IGJlIGEgVWludDhBcnJheSwgVWludDE2QXJyYXksIG9yIFVpbnQzMkFycmF5LiIpfTtEdD1PYmplY3QuZnJlZXplKEpuKX0pO2Z1bmN0aW9uIGdiKHQsZSxuKXtsZXQgbz10K2U7cmV0dXJuIE0uc2lnbih0KSE9PU0uc2lnbihlKSYmTWF0aC5hYnMoby9NYXRoLm1heChNYXRoLmFicyh0KSxNYXRoLmFicyhlKSkpPG4/MDpvfXZhciBOaCxBcix2cD1aKCgpPT57SHQoKTtXdCgpO05oPXt9O05oLmNvbXB1dGVEaXNjcmltaW5hbnQ9ZnVuY3Rpb24odCxlLG4pe2lmKHR5cGVvZiB0IT0ibnVtYmVyIil0aHJvdyBuZXcgQigiYSBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgZSE9Im51bWJlciIpdGhyb3cgbmV3IEIoImIgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYodHlwZW9mIG4hPSJudW1iZXIiKXRocm93IG5ldyBCKCJjIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO3JldHVybiBlKmUtNCp0Km59O05oLmNvbXB1dGVSZWFsUm9vdHM9ZnVuY3Rpb24odCxlLG4pe2lmKHR5cGVvZiB0IT0ibnVtYmVyIil0aHJvdyBuZXcgQigiYSBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgZSE9Im51bWJlciIpdGhyb3cgbmV3IEIoImIgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYodHlwZW9mIG4hPSJudW1iZXIiKXRocm93IG5ldyBCKCJjIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2xldCBvO2lmKHQ9PT0wKXJldHVybiBlPT09MD9bXTpbLW4vZV07aWYoZT09PTApe2lmKG49PT0wKXJldHVyblswLDBdO2xldCB1PU1hdGguYWJzKG4pLGM9TWF0aC5hYnModCk7aWYodTxjJiZ1L2M8TS5FUFNJTE9OMTQpcmV0dXJuWzAsMF07aWYodT5jJiZjL3U8TS5FUFNJTE9OMTQpcmV0dXJuW107aWYobz0tbi90LG88MClyZXR1cm5bXTtsZXQgbD1NYXRoLnNxcnQobyk7cmV0dXJuWy1sLGxdfWVsc2UgaWYobj09PTApcmV0dXJuIG89LWUvdCxvPDA/W28sMF06WzAsb107bGV0IHI9ZSplLGk9NCp0Km4scz1nYihyLC1pLE0uRVBTSUxPTjE0KTtpZihzPDApcmV0dXJuW107bGV0IGY9LS41KmdiKGUsTS5zaWduKGUpKk1hdGguc3FydChzKSxNLkVQU0lMT04xNCk7cmV0dXJuIGU+MD9bZi90LG4vZl06W24vZixmL3RdfTtBcj1OaH0pO2Z1bmN0aW9uIEloKHQsZSxuLG8pe2xldCByPXQsaT1lLzMscz1uLzMsZj1vLHU9cipzLGM9aSpmLGw9aSppLHA9cypzLGQ9cipzLWwsbT1yKmYtaSpzLF89aSpmLXAsZz00KmQqXy1tKm0sYixPO2lmKGc8MCl7bGV0IFIsUSxmdDtsKmM+PXUqcD8oUj1yLFE9ZCxmdD0tMippKmQrciptKTooUj1mLFE9XyxmdD0tZiptKzIqcypfKTtsZXQgZ3Q9LShmdDwwPy0xOjEpKk1hdGguYWJzKFIpKk1hdGguc3FydCgtZyk7Tz0tZnQrZ3Q7bGV0IGl0PU8vMixOdD1pdDwwPy1NYXRoLnBvdygtaXQsMS8zKTpNYXRoLnBvdyhpdCwxLzMpLE90PU89PT1ndD8tTnQ6LVEvTnQ7cmV0dXJuIGI9UTw9MD9OdCtPdDotZnQvKE50Kk50K090Kk90K1EpLGwqYz49dSpwP1soYi1pKS9yXTpbLWYvKGIrcyldfWxldCBUPWQsRT0tMippKmQrciptLHc9XyxDPS1mKm0rMipzKl8sTj1NYXRoLnNxcnQoZyksST1NYXRoLnNxcnQoMykvMixMPU1hdGguYWJzKE1hdGguYXRhbjIocipOLC1FKS8zKTtiPTIqTWF0aC5zcXJ0KC1UKTtsZXQgdj1NYXRoLmNvcyhMKTtPPWIqdjtsZXQgRD1iKigtdi8yLUkqTWF0aC5zaW4oTCkpLFU9TytEPjIqaT9PLWk6RC1pLEE9cixTPVUvQTtMPU1hdGguYWJzKE1hdGguYXRhbjIoZipOLC1DKS8zKSxiPTIqTWF0aC5zcXJ0KC13KSx2PU1hdGguY29zKEwpLE89Yip2LEQ9YiooLXYvMi1JKk1hdGguc2luKEwpKTtsZXQgUD0tZixGPU8rRDwyKnM/TytzOkQrcyxqPVAvRixIPUEqRixrPS1VKkYtQSpQLEs9VSpQLFg9KHMqay1pKkspLygtaSprK3MqSCk7cmV0dXJuIFM8PVg/Uzw9aj9YPD1qP1tTLFgsal06W1MsaixYXTpbaixTLFhdOlM8PWo/W1gsUyxqXTpYPD1qP1tYLGosU106W2osWCxTXX12YXIgdmgsRHAsQWI9WigoKT0+e0h0KCk7dnAoKTt2aD17fTt2aC5jb21wdXRlRGlzY3JpbWluYW50PWZ1bmN0aW9uKHQsZSxuLG8pe2lmKHR5cGVvZiB0IT0ibnVtYmVyIil0aHJvdyBuZXcgQigiYSBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgZSE9Im51bWJlciIpdGhyb3cgbmV3IEIoImIgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYodHlwZW9mIG4hPSJudW1iZXIiKXRocm93IG5ldyBCKCJjIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2lmKHR5cGVvZiBvIT0ibnVtYmVyIil0aHJvdyBuZXcgQigiZCBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtsZXQgcj10KnQsaT1lKmUscz1uKm4sZj1vKm87cmV0dXJuIDE4KnQqZSpuKm8raSpzLTI3KnIqZi00Kih0KnMqbitpKmUqbyl9O3ZoLmNvbXB1dGVSZWFsUm9vdHM9ZnVuY3Rpb24odCxlLG4sbyl7aWYodHlwZW9mIHQhPSJudW1iZXIiKXRocm93IG5ldyBCKCJhIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2lmKHR5cGVvZiBlIT0ibnVtYmVyIil0aHJvdyBuZXcgQigiYiBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgbiE9Im51bWJlciIpdGhyb3cgbmV3IEIoImMgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYodHlwZW9mIG8hPSJudW1iZXIiKXRocm93IG5ldyBCKCJkIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2xldCByLGk7aWYodD09PTApcmV0dXJuIEFyLmNvbXB1dGVSZWFsUm9vdHMoZSxuLG8pO2lmKGU9PT0wKXtpZihuPT09MCl7aWYobz09PTApcmV0dXJuWzAsMCwwXTtpPS1vL3Q7bGV0IHM9aTwwPy1NYXRoLnBvdygtaSwxLzMpOk1hdGgucG93KGksMS8zKTtyZXR1cm5bcyxzLHNdfWVsc2UgaWYobz09PTApcmV0dXJuIHI9QXIuY29tcHV0ZVJlYWxSb290cyh0LDAsbiksci5MZW5ndGg9PT0wP1swXTpbclswXSwwLHJbMV1dO3JldHVybiBJaCh0LDAsbixvKX1lbHNle2lmKG49PT0wKXJldHVybiBvPT09MD8oaT0tZS90LGk8MD9baSwwLDBdOlswLDAsaV0pOkloKHQsZSwwLG8pO2lmKG89PT0wKXJldHVybiByPUFyLmNvbXB1dGVSZWFsUm9vdHModCxlLG4pLHIubGVuZ3RoPT09MD9bMF06clsxXTw9MD9bclswXSxyWzFdLDBdOnJbMF0+PTA/WzAsclswXSxyWzFdXTpbclswXSwwLHJbMV1dfXJldHVybiBJaCh0LGUsbixvKX07RHA9dmh9KTtmdW5jdGlvbiBCcih0LGUsbixvKXtsZXQgcj10KnQsaT1lLTMqci84LHM9bi1lKnQvMityKnQvOCxmPW8tbip0LzQrZSpyLzE2LTMqcipyLzI1Nix1PURwLmNvbXB1dGVSZWFsUm9vdHMoMSwyKmksaSppLTQqZiwtcypzKTtpZih1Lmxlbmd0aD4wKXtsZXQgYz0tdC80LGw9dVt1Lmxlbmd0aC0xXTtpZihNYXRoLmFicyhsKTxNLkVQU0lMT04xNCl7bGV0IHA9QXIuY29tcHV0ZVJlYWxSb290cygxLGksZik7aWYocC5sZW5ndGg9PT0yKXtsZXQgZD1wWzBdLG09cFsxXSxfO2lmKGQ+PTAmJm0+PTApe2xldCBnPU1hdGguc3FydChkKSxiPU1hdGguc3FydChtKTtyZXR1cm5bYy1iLGMtZyxjK2csYytiXX1lbHNle2lmKGQ+PTAmJm08MClyZXR1cm4gXz1NYXRoLnNxcnQoZCksW2MtXyxjK19dO2lmKGQ8MCYmbT49MClyZXR1cm4gXz1NYXRoLnNxcnQobSksW2MtXyxjK19dfX1yZXR1cm5bXX1lbHNlIGlmKGw+MCl7bGV0IHA9TWF0aC5zcXJ0KGwpLGQ9KGkrbC1zL3ApLzIsbT0oaStsK3MvcCkvMixfPUFyLmNvbXB1dGVSZWFsUm9vdHMoMSxwLGQpLGc9QXIuY29tcHV0ZVJlYWxSb290cygxLC1wLG0pO3JldHVybiBfLmxlbmd0aCE9PTA/KF9bMF0rPWMsX1sxXSs9YyxnLmxlbmd0aCE9PTA/KGdbMF0rPWMsZ1sxXSs9YyxfWzFdPD1nWzBdP1tfWzBdLF9bMV0sZ1swXSxnWzFdXTpnWzFdPD1fWzBdP1tnWzBdLGdbMV0sX1swXSxfWzFdXTpfWzBdPj1nWzBdJiZfWzFdPD1nWzFdP1tnWzBdLF9bMF0sX1sxXSxnWzFdXTpnWzBdPj1fWzBdJiZnWzFdPD1fWzFdP1tfWzBdLGdbMF0sZ1sxXSxfWzFdXTpfWzBdPmdbMF0mJl9bMF08Z1sxXT9bZ1swXSxfWzBdLGdbMV0sX1sxXV06W19bMF0sZ1swXSxfWzFdLGdbMV1dKTpfKTpnLmxlbmd0aCE9PTA/KGdbMF0rPWMsZ1sxXSs9YyxnKTpbXX19cmV0dXJuW119ZnVuY3Rpb24gVGYodCxlLG4sbyl7bGV0IHI9bipuLGk9ZSplLHM9dCp0LGY9LTIqZSx1PW4qdCtpLTQqbyxjPXMqby1uKmUqdCtyLGw9RHAuY29tcHV0ZVJlYWxSb290cygxLGYsdSxjKTtpZihsLmxlbmd0aD4wKXtsZXQgcD1sWzBdLGQ9ZS1wLG09ZCpkLF89dC8yLGc9ZC8yLGI9bS00Km8sTz1tKzQqTWF0aC5hYnMobyksVD1zLTQqcCxFPXMrNCpNYXRoLmFicyhwKSx3LEM7aWYocDwwfHxiKkU8VCpPKXtsZXQgQT1NYXRoLnNxcnQoVCk7dz1BLzIsQz1BPT09MD8wOih0KmctbikvQX1lbHNle2xldCBBPU1hdGguc3FydChiKTt3PUE9PT0wPzA6KHQqZy1uKS9BLEM9QS8yfWxldCBOLEk7Xz09PTAmJnc9PT0wPyhOPTAsST0wKTpNLnNpZ24oXyk9PT1NLnNpZ24odyk/KE49Xyt3LEk9cC9OKTooST1fLXcsTj1wL0kpO2xldCBMLHY7Zz09PTAmJkM9PT0wPyhMPTAsdj0wKTpNLnNpZ24oZyk9PT1NLnNpZ24oQyk/KEw9ZytDLHY9by9MKToodj1nLUMsTD1vL3YpO2xldCBEPUFyLmNvbXB1dGVSZWFsUm9vdHMoMSxOLEwpLFU9QXIuY29tcHV0ZVJlYWxSb290cygxLEksdik7aWYoRC5sZW5ndGghPT0wKXJldHVybiBVLmxlbmd0aCE9PTA/RFsxXTw9VVswXT9bRFswXSxEWzFdLFVbMF0sVVsxXV06VVsxXTw9RFswXT9bVVswXSxVWzFdLERbMF0sRFsxXV06RFswXT49VVswXSYmRFsxXTw9VVsxXT9bVVswXSxEWzBdLERbMV0sVVsxXV06VVswXT49RFswXSYmVVsxXTw9RFsxXT9bRFswXSxVWzBdLFVbMV0sRFsxXV06RFswXT5VWzBdJiZEWzBdPFVbMV0/W1VbMF0sRFswXSxVWzFdLERbMV1dOltEWzBdLFVbMF0sRFsxXSxVWzFdXTpEO2lmKFUubGVuZ3RoIT09MClyZXR1cm4gVX1yZXR1cm5bXX12YXIgRGgsYmIsd2I9WigoKT0+e0FiKCk7SHQoKTtXdCgpO3ZwKCk7RGg9e307RGguY29tcHV0ZURpc2NyaW1pbmFudD1mdW5jdGlvbih0LGUsbixvLHIpe2lmKHR5cGVvZiB0IT0ibnVtYmVyIil0aHJvdyBuZXcgQigiYSBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgZSE9Im51bWJlciIpdGhyb3cgbmV3IEIoImIgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYodHlwZW9mIG4hPSJudW1iZXIiKXRocm93IG5ldyBCKCJjIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2lmKHR5cGVvZiBvIT0ibnVtYmVyIil0aHJvdyBuZXcgQigiZCBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgciE9Im51bWJlciIpdGhyb3cgbmV3IEIoImUgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7bGV0IGk9dCp0LHM9aSp0LGY9ZSplLHU9ZiplLGM9bipuLGw9YypuLHA9bypvLGQ9cCpvLG09cipyLF89bSpyO3JldHVybiBmKmMqcC00KnUqZC00KnQqbCpwKzE4KnQqZSpuKmQtMjcqaSpwKnArMjU2KnMqXytyKigxOCp1Km4qby00KmYqbCsxNip0KmMqYy04MCp0KmUqYypvLTYqdCpmKnArMTQ0KmkqbipwKSttKigxNDQqdCpmKm4tMjcqZipmLTEyOCppKmMtMTkyKmkqZSpvKX07RGguY29tcHV0ZVJlYWxSb290cz1mdW5jdGlvbih0LGUsbixvLHIpe2lmKHR5cGVvZiB0IT0ibnVtYmVyIil0aHJvdyBuZXcgQigiYSBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgZSE9Im51bWJlciIpdGhyb3cgbmV3IEIoImIgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYodHlwZW9mIG4hPSJudW1iZXIiKXRocm93IG5ldyBCKCJjIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2lmKHR5cGVvZiBvIT0ibnVtYmVyIil0aHJvdyBuZXcgQigiZCBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgciE9Im51bWJlciIpdGhyb3cgbmV3IEIoImUgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYoTWF0aC5hYnModCk8TS5FUFNJTE9OMTUpcmV0dXJuIERwLmNvbXB1dGVSZWFsUm9vdHMoZSxuLG8scik7bGV0IGk9ZS90LHM9bi90LGY9by90LHU9ci90LGM9aTwwPzE6MDtzd2l0Y2goYys9czwwP2MrMTpjLGMrPWY8MD9jKzE6YyxjKz11PDA/YysxOmMsYyl7Y2FzZSAwOnJldHVybiBCcihpLHMsZix1KTtjYXNlIDE6cmV0dXJuIFRmKGkscyxmLHUpO2Nhc2UgMjpyZXR1cm4gVGYoaSxzLGYsdSk7Y2FzZSAzOnJldHVybiBCcihpLHMsZix1KTtjYXNlIDQ6cmV0dXJuIEJyKGkscyxmLHUpO2Nhc2UgNTpyZXR1cm4gVGYoaSxzLGYsdSk7Y2FzZSA2OnJldHVybiBCcihpLHMsZix1KTtjYXNlIDc6cmV0dXJuIEJyKGkscyxmLHUpO2Nhc2UgODpyZXR1cm4gVGYoaSxzLGYsdSk7Y2FzZSA5OnJldHVybiBCcihpLHMsZix1KTtjYXNlIDEwOnJldHVybiBCcihpLHMsZix1KTtjYXNlIDExOnJldHVybiBUZihpLHMsZix1KTtjYXNlIDEyOnJldHVybiBCcihpLHMsZix1KTtjYXNlIDEzOnJldHVybiBCcihpLHMsZix1KTtjYXNlIDE0OnJldHVybiBCcihpLHMsZix1KTtjYXNlIDE1OnJldHVybiBCcihpLHMsZix1KTtkZWZhdWx0OnJldHVybn19O2JiPURofSk7ZnVuY3Rpb24gTHAodCxlKXtlPWEuY2xvbmUoeChlLGEuWkVSTykpLGEuZXF1YWxzKGUsYS5aRVJPKXx8YS5ub3JtYWxpemUoZSxlKSx0aGlzLm9yaWdpbj1hLmNsb25lKHgodCxhLlpFUk8pKSx0aGlzLmRpcmVjdGlvbj1lfXZhciBRcyxGcD1aKCgpPT57VXQoKTtZdCgpO0l0KCk7YXQoKTtMcC5jbG9uZT1mdW5jdGlvbih0LGUpe2lmKGgodCkpcmV0dXJuIGgoZSk/KGUub3JpZ2luPWEuY2xvbmUodC5vcmlnaW4pLGUuZGlyZWN0aW9uPWEuY2xvbmUodC5kaXJlY3Rpb24pLGUpOm5ldyBMcCh0Lm9yaWdpbix0LmRpcmVjdGlvbil9O0xwLmdldFBvaW50PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJyYXkiLHQpLHkudHlwZU9mLm51bWJlcigidCIsZSksaChuKXx8KG49bmV3IGEpLG49YS5tdWx0aXBseUJ5U2NhbGFyKHQuZGlyZWN0aW9uLGUsbiksYS5hZGQodC5vcmlnaW4sbixuKX07UXM9THB9KTtmdW5jdGlvbiBhMyh0LGUsbixvKXtsZXQgcj1lKmUtNCp0Km47aWYocjwwKXJldHVybjtpZihyPjApe2xldCBzPTEvKDIqdCksZj1NYXRoLnNxcnQociksdT0oLWUrZikqcyxjPSgtZS1mKSpzO3JldHVybiB1PGM/KG8ucm9vdDA9dSxvLnJvb3QxPWMpOihvLnJvb3QwPWMsby5yb290MT11KSxvfWxldCBpPS1lLygyKnQpO2lmKGkhPT0wKXJldHVybiBvLnJvb3QwPW8ucm9vdDE9aSxvfWZ1bmN0aW9uIE1iKHQsZSxuKXtoKG4pfHwobj1uZXcgUXIpO2xldCBvPXQub3JpZ2luLHI9dC5kaXJlY3Rpb24saT1lLmNlbnRlcixzPWUucmFkaXVzKmUucmFkaXVzLGY9YS5zdWJ0cmFjdChvLGksUGIpLHU9YS5kb3QocixyKSxjPTIqYS5kb3QocixmKSxsPWEubWFnbml0dWRlU3F1YXJlZChmKS1zLHA9YTModSxjLGwsZjMpO2lmKGgocCkpcmV0dXJuIG4uc3RhcnQ9cC5yb290MCxuLnN0b3A9cC5yb290MSxufWZ1bmN0aW9uIEpzKHQsZSxuKXtsZXQgbz10K2U7cmV0dXJuIE0uc2lnbih0KSE9PU0uc2lnbihlKSYmTWF0aC5hYnMoby9NYXRoLm1heChNYXRoLmFicyh0KSxNYXRoLmFicyhlKSkpPG4/MDpvfWZ1bmN0aW9uIGQzKHQsZSxuLG8scil7bGV0IGk9bypvLHM9cipyLGY9KHRbdHQuQ09MVU1OMVJPVzFdLXRbdHQuQ09MVU1OMlJPVzJdKSpzLHU9cioobypKcyh0W3R0LkNPTFVNTjFST1cwXSx0W3R0LkNPTFVNTjBST1cxXSxNLkVQU0lMT04xNSkrZS55KSxjPXRbdHQuQ09MVU1OMFJPVzBdKmkrdFt0dC5DT0xVTU4yUk9XMl0qcytvKmUueCtuLGw9cypKcyh0W3R0LkNPTFVNTjJST1cxXSx0W3R0LkNPTFVNTjFST1cyXSxNLkVQU0lMT04xNSkscD1yKihvKkpzKHRbdHQuQ09MVU1OMlJPVzBdLHRbdHQuQ09MVU1OMFJPVzJdKStlLnopLGQsbT1bXTtpZihwPT09MCYmbD09PTApe2lmKGQ9QXIuY29tcHV0ZVJlYWxSb290cyhmLHUsYyksZC5sZW5ndGg9PT0wKXJldHVybiBtO2xldCBMPWRbMF0sdj1NYXRoLnNxcnQoTWF0aC5tYXgoMS1MKkwsMCkpO2lmKG0ucHVzaChuZXcgYShvLHIqTCxyKi12KSksbS5wdXNoKG5ldyBhKG8scipMLHIqdikpLGQubGVuZ3RoPT09Mil7bGV0IEQ9ZFsxXSxVPU1hdGguc3FydChNYXRoLm1heCgxLUQqRCwwKSk7bS5wdXNoKG5ldyBhKG8scipELHIqLVUpKSxtLnB1c2gobmV3IGEobyxyKkQscipVKSl9cmV0dXJuIG19bGV0IF89cCpwLGc9bCpsLGI9ZipmLE89cCpsLFQ9YitnLEU9MioodSpmK08pLHc9MipjKmYrdSp1LWcrXyxDPTIqKGMqdS1PKSxOPWMqYy1fO2lmKFQ9PT0wJiZFPT09MCYmdz09PTAmJkM9PT0wKXJldHVybiBtO2Q9YmIuY29tcHV0ZVJlYWxSb290cyhULEUsdyxDLE4pO2xldCBJPWQubGVuZ3RoO2lmKEk9PT0wKXJldHVybiBtO2ZvcihsZXQgTD0wO0w8STsrK0wpe2xldCB2PWRbTF0sRD12KnYsVT1NYXRoLm1heCgxLUQsMCksQT1NYXRoLnNxcnQoVSksUztNLnNpZ24oZik9PT1NLnNpZ24oYyk/Uz1KcyhmKkQrYyx1KnYsTS5FUFNJTE9OMTIpOk0uc2lnbihjKT09PU0uc2lnbih1KnYpP1M9SnMoZipELHUqditjLE0uRVBTSUxPTjEyKTpTPUpzKGYqRCt1KnYsYyxNLkVQU0lMT04xMik7bGV0IFA9SnMobCp2LHAsTS5FUFNJTE9OMTUpLEY9UypQO0Y8MD9tLnB1c2gobmV3IGEobyxyKnYscipBKSk6Rj4wP20ucHVzaChuZXcgYShvLHIqdixyKi1BKSk6QSE9PTA/KG0ucHVzaChuZXcgYShvLHIqdixyKi1BKSksbS5wdXNoKG5ldyBhKG8scip2LHIqQSkpLCsrTCk6bS5wdXNoKG5ldyBhKG8scip2LHIqQSkpfXJldHVybiBtfXZhciBTbixpMyxzMyxQYixUYixPYixjMyxmMyx1MyxsMyxwMyxMaCxFYixSYixCcCxtMyxoMyxfMyx5MyxnMyxBMyxTYixDYix4YixiMyx3MyxUMyxfbyx0Yz1aKCgpPT57VXQoKTt2ZSgpO0l0KCk7YXQoKTtIdCgpO2psKCk7V3QoKTtGbigpO3ZwKCk7d2IoKTtGcCgpO1NuPXt9O1NuLnJheVBsYW5lPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgQigicmF5IGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBCKCJwbGFuZSBpcyByZXF1aXJlZC4iKTtoKG4pfHwobj1uZXcgYSk7bGV0IG89dC5vcmlnaW4scj10LmRpcmVjdGlvbixpPWUubm9ybWFsLHM9YS5kb3QoaSxyKTtpZihNYXRoLmFicyhzKTxNLkVQU0lMT04xNSlyZXR1cm47bGV0IGY9KC1lLmRpc3RhbmNlLWEuZG90KGksbykpL3M7aWYoIShmPDApKXJldHVybiBuPWEubXVsdGlwbHlCeVNjYWxhcihyLGYsbiksYS5hZGQobyxuLG4pfTtpMz1uZXcgYSxzMz1uZXcgYSxQYj1uZXcgYSxUYj1uZXcgYSxPYj1uZXcgYTtTbi5yYXlUcmlhbmdsZVBhcmFtZXRyaWM9ZnVuY3Rpb24odCxlLG4sbyxyKXtpZighaCh0KSl0aHJvdyBuZXcgQigicmF5IGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBCKCJwMCBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgQigicDEgaXMgcmVxdWlyZWQuIik7aWYoIWgobykpdGhyb3cgbmV3IEIoInAyIGlzIHJlcXVpcmVkLiIpO3I9eChyLCExKTtsZXQgaT10Lm9yaWdpbixzPXQuZGlyZWN0aW9uLGY9YS5zdWJ0cmFjdChuLGUsaTMpLHU9YS5zdWJ0cmFjdChvLGUsczMpLGM9YS5jcm9zcyhzLHUsUGIpLGw9YS5kb3QoZixjKSxwLGQsbSxfLGc7aWYocil7aWYobDxNLkVQU0lMT042fHwocD1hLnN1YnRyYWN0KGksZSxUYiksbT1hLmRvdChwLGMpLG08MHx8bT5sKXx8KGQ9YS5jcm9zcyhwLGYsT2IpLF89YS5kb3QocyxkKSxfPDB8fG0rXz5sKSlyZXR1cm47Zz1hLmRvdCh1LGQpL2x9ZWxzZXtpZihNYXRoLmFicyhsKTxNLkVQU0lMT042KXJldHVybjtsZXQgYj0xL2w7aWYocD1hLnN1YnRyYWN0KGksZSxUYiksbT1hLmRvdChwLGMpKmIsbTwwfHxtPjF8fChkPWEuY3Jvc3MocCxmLE9iKSxfPWEuZG90KHMsZCkqYixfPDB8fG0rXz4xKSlyZXR1cm47Zz1hLmRvdCh1LGQpKmJ9cmV0dXJuIGd9O1NuLnJheVRyaWFuZ2xlPWZ1bmN0aW9uKHQsZSxuLG8scixpKXtsZXQgcz1Tbi5yYXlUcmlhbmdsZVBhcmFtZXRyaWModCxlLG4sbyxyKTtpZighKCFoKHMpfHxzPDApKXJldHVybiBoKGkpfHwoaT1uZXcgYSksYS5tdWx0aXBseUJ5U2NhbGFyKHQuZGlyZWN0aW9uLHMsaSksYS5hZGQodC5vcmlnaW4saSxpKX07YzM9bmV3IFFzO1NuLmxpbmVTZWdtZW50VHJpYW5nbGU9ZnVuY3Rpb24odCxlLG4sbyxyLGkscyl7aWYoIWgodCkpdGhyb3cgbmV3IEIoInYwIGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBCKCJ2MSBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgQigicDAgaXMgcmVxdWlyZWQuIik7aWYoIWgobykpdGhyb3cgbmV3IEIoInAxIGlzIHJlcXVpcmVkLiIpO2lmKCFoKHIpKXRocm93IG5ldyBCKCJwMiBpcyByZXF1aXJlZC4iKTtsZXQgZj1jMzthLmNsb25lKHQsZi5vcmlnaW4pLGEuc3VidHJhY3QoZSx0LGYuZGlyZWN0aW9uKSxhLm5vcm1hbGl6ZShmLmRpcmVjdGlvbixmLmRpcmVjdGlvbik7bGV0IHU9U24ucmF5VHJpYW5nbGVQYXJhbWV0cmljKGYsbixvLHIsaSk7aWYoISghaCh1KXx8dTwwfHx1PmEuZGlzdGFuY2UodCxlKSkpcmV0dXJuIGgocyl8fChzPW5ldyBhKSxhLm11bHRpcGx5QnlTY2FsYXIoZi5kaXJlY3Rpb24sdSxzKSxhLmFkZChmLm9yaWdpbixzLHMpfTtmMz17cm9vdDA6MCxyb290MTowfTtTbi5yYXlTcGhlcmU9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBCKCJyYXkgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEIoInNwaGVyZSBpcyByZXF1aXJlZC4iKTtpZihuPU1iKHQsZSxuKSwhKCFoKG4pfHxuLnN0b3A8MCkpcmV0dXJuIG4uc3RhcnQ9TWF0aC5tYXgobi5zdGFydCwwKSxufTt1Mz1uZXcgUXM7U24ubGluZVNlZ21lbnRTcGhlcmU9ZnVuY3Rpb24odCxlLG4sbyl7aWYoIWgodCkpdGhyb3cgbmV3IEIoInAwIGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBCKCJwMSBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgQigic3BoZXJlIGlzIHJlcXVpcmVkLiIpO2xldCByPXUzO2EuY2xvbmUodCxyLm9yaWdpbik7bGV0IGk9YS5zdWJ0cmFjdChlLHQsci5kaXJlY3Rpb24pLHM9YS5tYWduaXR1ZGUoaSk7aWYoYS5ub3JtYWxpemUoaSxpKSxvPU1iKHIsbixvKSwhKCFoKG8pfHxvLnN0b3A8MHx8by5zdGFydD5zKSlyZXR1cm4gby5zdGFydD1NYXRoLm1heChvLnN0YXJ0LDApLG8uc3RvcD1NYXRoLm1pbihvLnN0b3Ascyksb307bDM9bmV3IGEscDM9bmV3IGE7U24ucmF5RWxsaXBzb2lkPWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEIoInJheSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgQigiZWxsaXBzb2lkIGlzIHJlcXVpcmVkLiIpO2xldCBuPWUub25lT3ZlclJhZGlpLG89YS5tdWx0aXBseUNvbXBvbmVudHMobix0Lm9yaWdpbixsMykscj1hLm11bHRpcGx5Q29tcG9uZW50cyhuLHQuZGlyZWN0aW9uLHAzKSxpPWEubWFnbml0dWRlU3F1YXJlZChvKSxzPWEuZG90KG8sciksZix1LGMsbCxwO2lmKGk+MSl7aWYocz49MClyZXR1cm47bGV0IGQ9cypzO2lmKGY9aS0xLHU9YS5tYWduaXR1ZGVTcXVhcmVkKHIpLGM9dSpmLGQ8YylyZXR1cm47aWYoZD5jKXtsPXMqcy1jLHA9LXMrTWF0aC5zcXJ0KGwpO2xldCBfPXAvdSxnPWYvcDtyZXR1cm4gXzxnP25ldyBRcihfLGcpOntzdGFydDpnLHN0b3A6X319bGV0IG09TWF0aC5zcXJ0KGYvdSk7cmV0dXJuIG5ldyBRcihtLG0pfWVsc2UgaWYoaTwxKXJldHVybiBmPWktMSx1PWEubWFnbml0dWRlU3F1YXJlZChyKSxjPXUqZixsPXMqcy1jLHA9LXMrTWF0aC5zcXJ0KGwpLG5ldyBRcigwLHAvdSk7aWYoczwwKXJldHVybiB1PWEubWFnbml0dWRlU3F1YXJlZChyKSxuZXcgUXIoMCwtcy91KX07TGg9bmV3IGEsRWI9bmV3IGEsUmI9bmV3IGEsQnA9bmV3IGEsbTM9bmV3IGEsaDM9bmV3IHR0LF8zPW5ldyB0dCx5Mz1uZXcgdHQsZzM9bmV3IHR0LEEzPW5ldyB0dCxTYj1uZXcgdHQsQ2I9bmV3IHR0LHhiPW5ldyBhLGIzPW5ldyBhLHczPW5ldyBjdDtTbi5ncmF6aW5nQWx0aXR1ZGVMb2NhdGlvbj1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJyYXkgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEIoImVsbGlwc29pZCBpcyByZXF1aXJlZC4iKTtsZXQgbj10Lm9yaWdpbixvPXQuZGlyZWN0aW9uO2lmKCFhLmVxdWFscyhuLGEuWkVSTykpe2xldCBOPWUuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKG4sTGgpO2lmKGEuZG90KG8sTik+PTApcmV0dXJuIG59bGV0IHI9aCh0aGlzLnJheUVsbGlwc29pZCh0LGUpKSxpPWUudHJhbnNmb3JtUG9zaXRpb25Ub1NjYWxlZFNwYWNlKG8sTGgpLHM9YS5ub3JtYWxpemUoaSxpKSxmPWEubW9zdE9ydGhvZ29uYWxBeGlzKGksQnApLHU9YS5ub3JtYWxpemUoYS5jcm9zcyhmLHMsRWIpLEViKSxjPWEubm9ybWFsaXplKGEuY3Jvc3Mocyx1LFJiKSxSYiksbD1oMztsWzBdPXMueCxsWzFdPXMueSxsWzJdPXMueixsWzNdPXUueCxsWzRdPXUueSxsWzVdPXUueixsWzZdPWMueCxsWzddPWMueSxsWzhdPWMuejtsZXQgcD10dC50cmFuc3Bvc2UobCxfMyksZD10dC5mcm9tU2NhbGUoZS5yYWRpaSx5MyksbT10dC5mcm9tU2NhbGUoZS5vbmVPdmVyUmFkaWksZzMpLF89QTM7X1swXT0wLF9bMV09LW8ueixfWzJdPW8ueSxfWzNdPW8ueixfWzRdPTAsX1s1XT0tby54LF9bNl09LW8ueSxfWzddPW8ueCxfWzhdPTA7bGV0IGc9dHQubXVsdGlwbHkodHQubXVsdGlwbHkocCxtLFNiKSxfLFNiKSxiPXR0Lm11bHRpcGx5KHR0Lm11bHRpcGx5KGcsZCxDYiksbCxDYiksTz10dC5tdWx0aXBseUJ5VmVjdG9yKGcsbixtMyksVD1kMyhiLGEubmVnYXRlKE8sTGgpLDAsMCwxKSxFLHcsQz1ULmxlbmd0aDtpZihDPjApe2xldCBOPWEuY2xvbmUoYS5aRVJPLGIzKSxJPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtmb3IobGV0IHY9MDt2PEM7Kyt2KXtFPXR0Lm11bHRpcGx5QnlWZWN0b3IoZCx0dC5tdWx0aXBseUJ5VmVjdG9yKGwsVFt2XSx4YikseGIpO2xldCBEPWEubm9ybWFsaXplKGEuc3VidHJhY3QoRSxuLEJwKSxCcCksVT1hLmRvdChELG8pO1U+SSYmKEk9VSxOPWEuY2xvbmUoRSxOKSl9bGV0IEw9ZS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhOLHczKTtyZXR1cm4gST1NLmNsYW1wKEksMCwxKSx3PWEubWFnbml0dWRlKGEuc3VidHJhY3QoTixuLEJwKSkqTWF0aC5zcXJ0KDEtSSpJKSx3PXI/LXc6dyxMLmhlaWdodD13LGUuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oTCxuZXcgYSl9fTtUMz1uZXcgYTtTbi5saW5lU2VnbWVudFBsYW5lPWZ1bmN0aW9uKHQsZSxuLG8pe2lmKCFoKHQpKXRocm93IG5ldyBCKCJlbmRQb2ludDAgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEIoImVuZFBvaW50MSBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgQigicGxhbmUgaXMgcmVxdWlyZWQuIik7aChvKXx8KG89bmV3IGEpO2xldCByPWEuc3VidHJhY3QoZSx0LFQzKSxpPW4ubm9ybWFsLHM9YS5kb3QoaSxyKTtpZihNYXRoLmFicyhzKTxNLkVQU0lMT042KXJldHVybjtsZXQgZj1hLmRvdChpLHQpLHU9LShuLmRpc3RhbmNlK2YpL3M7aWYoISh1PDB8fHU+MSkpcmV0dXJuIGEubXVsdGlwbHlCeVNjYWxhcihyLHUsbyksYS5hZGQodCxvLG8pLG99O1NuLnRyaWFuZ2xlUGxhbmVJbnRlcnNlY3Rpb249ZnVuY3Rpb24odCxlLG4sbyl7aWYoIWgodCl8fCFoKGUpfHwhaChuKXx8IWgobykpdGhyb3cgbmV3IEIoInAwLCBwMSwgcDIsIGFuZCBwbGFuZSBhcmUgcmVxdWlyZWQuIik7bGV0IHI9by5ub3JtYWwsaT1vLmRpc3RhbmNlLHM9YS5kb3Qocix0KStpPDAsZj1hLmRvdChyLGUpK2k8MCx1PWEuZG90KHIsbikraTwwLGM9MDtjKz1zPzE6MCxjKz1mPzE6MCxjKz11PzE6MDtsZXQgbCxwO2lmKChjPT09MXx8Yz09PTIpJiYobD1uZXcgYSxwPW5ldyBhKSxjPT09MSl7aWYocylyZXR1cm4gU24ubGluZVNlZ21lbnRQbGFuZSh0LGUsbyxsKSxTbi5saW5lU2VnbWVudFBsYW5lKHQsbixvLHApLHtwb3NpdGlvbnM6W3QsZSxuLGwscF0saW5kaWNlczpbMCwzLDQsMSwyLDQsMSw0LDNdfTtpZihmKXJldHVybiBTbi5saW5lU2VnbWVudFBsYW5lKGUsbixvLGwpLFNuLmxpbmVTZWdtZW50UGxhbmUoZSx0LG8scCkse3Bvc2l0aW9uczpbdCxlLG4sbCxwXSxpbmRpY2VzOlsxLDMsNCwyLDAsNCwyLDQsM119O2lmKHUpcmV0dXJuIFNuLmxpbmVTZWdtZW50UGxhbmUobix0LG8sbCksU24ubGluZVNlZ21lbnRQbGFuZShuLGUsbyxwKSx7cG9zaXRpb25zOlt0LGUsbixsLHBdLGluZGljZXM6WzIsMyw0LDAsMSw0LDAsNCwzXX19ZWxzZSBpZihjPT09MilpZihzKWlmKGYpe2lmKCF1KXJldHVybiBTbi5saW5lU2VnbWVudFBsYW5lKHQsbixvLGwpLFNuLmxpbmVTZWdtZW50UGxhbmUoZSxuLG8scCkse3Bvc2l0aW9uczpbdCxlLG4sbCxwXSxpbmRpY2VzOlswLDEsNCwwLDQsMywyLDMsNF19fWVsc2UgcmV0dXJuIFNuLmxpbmVTZWdtZW50UGxhbmUobixlLG8sbCksU24ubGluZVNlZ21lbnRQbGFuZSh0LGUsbyxwKSx7cG9zaXRpb25zOlt0LGUsbixsLHBdLGluZGljZXM6WzIsMCw0LDIsNCwzLDEsMyw0XX07ZWxzZSByZXR1cm4gU24ubGluZVNlZ21lbnRQbGFuZShlLHQsbyxsKSxTbi5saW5lU2VnbWVudFBsYW5lKG4sdCxvLHApLHtwb3NpdGlvbnM6W3QsZSxuLGwscF0saW5kaWNlczpbMSwyLDQsMSw0LDMsMCwzLDRdfX07X289U259KTtmdW5jdGlvbiB0byh0LGUpe2lmKHkudHlwZU9mLm9iamVjdCgibm9ybWFsIix0KSwhTS5lcXVhbHNFcHNpbG9uKGEubWFnbml0dWRlKHQpLDEsTS5FUFNJTE9ONikpdGhyb3cgbmV3IEIoIm5vcm1hbCBtdXN0IGJlIG5vcm1hbGl6ZWQuIik7eS50eXBlT2YubnVtYmVyKCJkaXN0YW5jZSIsZSksdGhpcy5ub3JtYWw9YS5jbG9uZSh0KSx0aGlzLmRpc3RhbmNlPWV9dmFyIE8zLEUzLFIzLFMzLEMzLG9uLGNzPVooKCk9PntVdCgpO2hyKCk7WXQoKTthdCgpO0h0KCk7V3QoKTtrbigpO3RvLmZyb21Qb2ludE5vcm1hbD1mdW5jdGlvbih0LGUsbil7aWYoeS50eXBlT2Yub2JqZWN0KCJwb2ludCIsdCkseS50eXBlT2Yub2JqZWN0KCJub3JtYWwiLGUpLCFNLmVxdWFsc0Vwc2lsb24oYS5tYWduaXR1ZGUoZSksMSxNLkVQU0lMT042KSl0aHJvdyBuZXcgQigibm9ybWFsIG11c3QgYmUgbm9ybWFsaXplZC4iKTtsZXQgbz0tYS5kb3QoZSx0KTtyZXR1cm4gaChuKT8oYS5jbG9uZShlLG4ubm9ybWFsKSxuLmRpc3RhbmNlPW8sbik6bmV3IHRvKGUsbyl9O08zPW5ldyBhO3RvLmZyb21DYXJ0ZXNpYW40PWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJjb2VmZmljaWVudHMiLHQpO2xldCBuPWEuZnJvbUNhcnRlc2lhbjQodCxPMyksbz10Lnc7aWYoIU0uZXF1YWxzRXBzaWxvbihhLm1hZ25pdHVkZShuKSwxLE0uRVBTSUxPTjYpKXRocm93IG5ldyBCKCJub3JtYWwgbXVzdCBiZSBub3JtYWxpemVkLiIpO3JldHVybiBoKGUpPyhhLmNsb25lKG4sZS5ub3JtYWwpLGUuZGlzdGFuY2U9byxlKTpuZXcgdG8obixvKX07dG8uZ2V0UG9pbnREaXN0YW5jZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInBsYW5lIix0KSx5LnR5cGVPZi5vYmplY3QoInBvaW50IixlKSxhLmRvdCh0Lm5vcm1hbCxlKSt0LmRpc3RhbmNlfTtFMz1uZXcgYTt0by5wcm9qZWN0UG9pbnRPbnRvUGxhbmU9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgicGxhbmUiLHQpLHkudHlwZU9mLm9iamVjdCgicG9pbnQiLGUpLGgobil8fChuPW5ldyBhKTtsZXQgbz10by5nZXRQb2ludERpc3RhbmNlKHQsZSkscj1hLm11bHRpcGx5QnlTY2FsYXIodC5ub3JtYWwsbyxFMyk7cmV0dXJuIGEuc3VidHJhY3QoZSxyLG4pfTtSMz1uZXcgc3QsUzM9bmV3IF9lLEMzPW5ldyBhO3RvLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJwbGFuZSIsdCkseS50eXBlT2Yub2JqZWN0KCJ0cmFuc2Zvcm0iLGUpO2xldCBvPXQubm9ybWFsLHI9dC5kaXN0YW5jZSxpPXN0LmludmVyc2VUcmFuc3Bvc2UoZSxSMykscz1fZS5mcm9tRWxlbWVudHMoby54LG8ueSxvLnoscixTMyk7cz1zdC5tdWx0aXBseUJ5VmVjdG9yKGkscyxzKTtsZXQgZj1hLmZyb21DYXJ0ZXNpYW40KHMsQzMpO3JldHVybiBzPV9lLmRpdmlkZUJ5U2NhbGFyKHMsYS5tYWduaXR1ZGUoZikscyksdG8uZnJvbUNhcnRlc2lhbjQocyxuKX07dG8uY2xvbmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJwbGFuZSIsdCksaChlKT8oYS5jbG9uZSh0Lm5vcm1hbCxlLm5vcm1hbCksZS5kaXN0YW5jZT10LmRpc3RhbmNlLGUpOm5ldyB0byh0Lm5vcm1hbCx0LmRpc3RhbmNlKX07dG8uZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSksdC5kaXN0YW5jZT09PWUuZGlzdGFuY2UmJmEuZXF1YWxzKHQubm9ybWFsLGUubm9ybWFsKX07dG8uT1JJR0lOX1hZX1BMQU5FPU9iamVjdC5mcmVlemUobmV3IHRvKGEuVU5JVF9aLDApKTt0by5PUklHSU5fWVpfUExBTkU9T2JqZWN0LmZyZWV6ZShuZXcgdG8oYS5VTklUX1gsMCkpO3RvLk9SSUdJTl9aWF9QTEFORT1PYmplY3QuZnJlZXplKG5ldyB0byhhLlVOSVRfWSwwKSk7b249dG99KTt2YXIgRmgsTmIsSWI9WigoKT0+e0l0KCk7YXQoKTtIdCgpO0ZoPXt9O0ZoLmNhbGN1bGF0ZUFDTVI9ZnVuY3Rpb24odCl7dD14KHQseC5FTVBUWV9PQkpFQ1QpO2xldCBlPXQuaW5kaWNlcyxuPXQubWF4aW11bUluZGV4LG89eCh0LmNhY2hlU2l6ZSwyNCk7aWYoIWgoZSkpdGhyb3cgbmV3IEIoImluZGljZXMgaXMgcmVxdWlyZWQuIik7bGV0IHI9ZS5sZW5ndGg7aWYocjwzfHxyJTMhPT0wKXRocm93IG5ldyBCKCJpbmRpY2VzIGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhyZWUuIik7aWYobjw9MCl0aHJvdyBuZXcgQigibWF4aW11bUluZGV4IG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7aWYobzwzKXRocm93IG5ldyBCKCJjYWNoZVNpemUgbXVzdCBiZSBncmVhdGVyIHRoYW4gdHdvLiIpO2lmKCFoKG4pKXtuPTA7bGV0IGY9MCx1PWVbZl07Zm9yKDtmPHI7KXU+biYmKG49dSksKytmLHU9ZVtmXX1sZXQgaT1bXTtmb3IobGV0IGY9MDtmPG4rMTtmKyspaVtmXT0wO2xldCBzPW8rMTtmb3IobGV0IGY9MDtmPHI7KytmKXMtaVtlW2ZdXT5vJiYoaVtlW2ZdXT1zLCsrcyk7cmV0dXJuKHMtbysxKS8oci8zKX07RmgudGlwc2lmeT1mdW5jdGlvbih0KXt0PXgodCx4LkVNUFRZX09CSkVDVCk7bGV0IGU9dC5pbmRpY2VzLG49dC5tYXhpbXVtSW5kZXgsbz14KHQuY2FjaGVTaXplLDI0KSxyO2Z1bmN0aW9uIGkoVSxBLFMsUCl7Zm9yKDtBLmxlbmd0aD49MTspe2xldCBGPUFbQS5sZW5ndGgtMV07aWYoQS5zcGxpY2UoQS5sZW5ndGgtMSwxKSxVW0ZdLm51bUxpdmVUcmlhbmdsZXM+MClyZXR1cm4gRn1mb3IoO3I8UDspe2lmKFVbcl0ubnVtTGl2ZVRyaWFuZ2xlcz4wKXJldHVybisrcixyLTE7KytyfXJldHVybi0xfWZ1bmN0aW9uIHMoVSxBLFMsUCxGLGosSCl7bGV0IGs9LTEsSyxYPS0xLFI9MDtmb3IoO1I8Uy5sZW5ndGg7KXtsZXQgUT1TW1JdO1BbUV0ubnVtTGl2ZVRyaWFuZ2xlcyYmKEs9MCxGLVBbUV0udGltZVN0YW1wKzIqUFtRXS5udW1MaXZlVHJpYW5nbGVzPD1BJiYoSz1GLVBbUV0udGltZVN0YW1wKSwoSz5YfHxYPT09LTEpJiYoWD1LLGs9USkpLCsrUn1yZXR1cm4gaz09PS0xP2koUCxqLFUsSCk6a31pZighaChlKSl0aHJvdyBuZXcgQigiaW5kaWNlcyBpcyByZXF1aXJlZC4iKTtsZXQgZj1lLmxlbmd0aDtpZihmPDN8fGYlMyE9PTApdGhyb3cgbmV3IEIoImluZGljZXMgbGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aHJlZS4iKTtpZihuPD0wKXRocm93IG5ldyBCKCJtYXhpbXVtSW5kZXggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTtpZihvPDMpdGhyb3cgbmV3IEIoImNhY2hlU2l6ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0d28uIik7bGV0IHU9MCxjPTAsbD1lW2NdLHA9ZjtpZihoKG4pKXU9bisxO2Vsc2V7Zm9yKDtjPHA7KWw+dSYmKHU9bCksKytjLGw9ZVtjXTtpZih1PT09LTEpcmV0dXJuIDA7Kyt1fWxldCBkPVtdLG07Zm9yKG09MDttPHU7bSsrKWRbbV09e251bUxpdmVUcmlhbmdsZXM6MCx0aW1lU3RhbXA6MCx2ZXJ0ZXhUcmlhbmdsZXM6W119O2M9MDtsZXQgXz0wO2Zvcig7YzxwOylkW2VbY11dLnZlcnRleFRyaWFuZ2xlcy5wdXNoKF8pLCsrZFtlW2NdXS5udW1MaXZlVHJpYW5nbGVzLGRbZVtjKzFdXS52ZXJ0ZXhUcmlhbmdsZXMucHVzaChfKSwrK2RbZVtjKzFdXS5udW1MaXZlVHJpYW5nbGVzLGRbZVtjKzJdXS52ZXJ0ZXhUcmlhbmdsZXMucHVzaChfKSwrK2RbZVtjKzJdXS5udW1MaXZlVHJpYW5nbGVzLCsrXyxjKz0zO2xldCBnPTAsYj1vKzE7cj0xO2xldCBPPVtdLFQ9W10sRSx3LEM9MCxOPVtdLEk9Zi8zLEw9W107Zm9yKG09MDttPEk7bSsrKUxbbV09ITE7bGV0IHYsRDtmb3IoO2chPT0tMTspe089W10sdz1kW2ddLEQ9dy52ZXJ0ZXhUcmlhbmdsZXMubGVuZ3RoO2ZvcihsZXQgVT0wO1U8RDsrK1UpaWYoXz13LnZlcnRleFRyaWFuZ2xlc1tVXSwhTFtfXSl7TFtfXT0hMCxjPV8rXytfO2ZvcihsZXQgQT0wO0E8MzsrK0Epdj1lW2NdLE8ucHVzaCh2KSxULnB1c2godiksTltDXT12LCsrQyxFPWRbdl0sLS1FLm51bUxpdmVUcmlhbmdsZXMsYi1FLnRpbWVTdGFtcD5vJiYoRS50aW1lU3RhbXA9YiwrK2IpLCsrY31nPXMoZSxvLE8sZCxiLFQsdSl9cmV0dXJuIE59O05iPUZofSk7ZnVuY3Rpb24gSHAodCxlLG4sbyxyKXt0W2UrK109bix0W2UrK109byx0W2UrK109byx0W2UrK109cix0W2UrK109cix0W2VdPW59ZnVuY3Rpb24geDModCl7bGV0IGU9dC5sZW5ndGgsbj1lLzMqNixvPUR0LmNyZWF0ZVR5cGVkQXJyYXkoZSxuKSxyPTA7Zm9yKGxldCBpPTA7aTxlO2krPTMscis9NilIcChvLHIsdFtpXSx0W2krMV0sdFtpKzJdKTtyZXR1cm4gb31mdW5jdGlvbiBQMyh0KXtsZXQgZT10Lmxlbmd0aDtpZihlPj0zKXtsZXQgbj0oZS0yKSo2LG89RHQuY3JlYXRlVHlwZWRBcnJheShlLG4pO0hwKG8sMCx0WzBdLHRbMV0sdFsyXSk7bGV0IHI9Njtmb3IobGV0IGk9MztpPGU7KytpLHIrPTYpSHAobyxyLHRbaS0xXSx0W2ldLHRbaS0yXSk7cmV0dXJuIG99cmV0dXJuIG5ldyBVaW50MTZBcnJheX1mdW5jdGlvbiBNMyh0KXtpZih0Lmxlbmd0aD4wKXtsZXQgZT10Lmxlbmd0aC0xLG49KGUtMSkqNixvPUR0LmNyZWF0ZVR5cGVkQXJyYXkoZSxuKSxyPXRbMF0saT0wO2ZvcihsZXQgcz0xO3M8ZTsrK3MsaSs9NilIcChvLGkscix0W3NdLHRbcysxXSk7cmV0dXJuIG99cmV0dXJuIG5ldyBVaW50MTZBcnJheX1mdW5jdGlvbiB2Yih0KXtsZXQgZT17fTtmb3IobGV0IG4gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG4pJiZoKHRbbl0pJiZoKHRbbl0udmFsdWVzKSl7bGV0IG89dFtuXTtlW25dPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6by5jb21wb25lbnREYXRhdHlwZSxjb21wb25lbnRzUGVyQXR0cmlidXRlOm8uY29tcG9uZW50c1BlckF0dHJpYnV0ZSxub3JtYWxpemU6by5ub3JtYWxpemUsdmFsdWVzOltdfSl9cmV0dXJuIGV9ZnVuY3Rpb24gTjModCxlLG4pe2ZvcihsZXQgbyBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobykmJmgoZVtvXSkmJmgoZVtvXS52YWx1ZXMpKXtsZXQgcj1lW29dO2ZvcihsZXQgaT0wO2k8ci5jb21wb25lbnRzUGVyQXR0cmlidXRlOysraSl0W29dLnZhbHVlcy5wdXNoKHIudmFsdWVzW24qci5jb21wb25lbnRzUGVyQXR0cmlidXRlK2ldKX19ZnVuY3Rpb24gVWgodCxlKXtpZihoKGUpKXtsZXQgbj1lLnZhbHVlcyxvPW4ubGVuZ3RoO2ZvcihsZXQgcj0wO3I8bztyKz0zKWEudW5wYWNrKG4scixWciksc3QubXVsdGlwbHlCeVBvaW50KHQsVnIsVnIpLGEucGFjayhWcixuLHIpfX1mdW5jdGlvbiBWaCh0LGUpe2lmKGgoZSkpe2xldCBuPWUudmFsdWVzLG89bi5sZW5ndGg7Zm9yKGxldCByPTA7cjxvO3IrPTMpYS51bnBhY2sobixyLFZyKSx0dC5tdWx0aXBseUJ5VmVjdG9yKHQsVnIsVnIpLFZyPWEubm9ybWFsaXplKFZyLFZyKSxhLnBhY2soVnIsbixyKX19ZnVuY3Rpb24gdjModCxlKXtsZXQgbj10Lmxlbmd0aCxvPXt9LHI9dFswXVtlXS5hdHRyaWJ1dGVzLGk7Zm9yKGkgaW4gcilpZihyLmhhc093blByb3BlcnR5KGkpJiZoKHJbaV0pJiZoKHJbaV0udmFsdWVzKSl7bGV0IHM9cltpXSxmPXMudmFsdWVzLmxlbmd0aCx1PSEwO2ZvcihsZXQgYz0xO2M8bjsrK2Mpe2xldCBsPXRbY11bZV0uYXR0cmlidXRlc1tpXTtpZighaChsKXx8cy5jb21wb25lbnREYXRhdHlwZSE9PWwuY29tcG9uZW50RGF0YXR5cGV8fHMuY29tcG9uZW50c1BlckF0dHJpYnV0ZSE9PWwuY29tcG9uZW50c1BlckF0dHJpYnV0ZXx8cy5ub3JtYWxpemUhPT1sLm5vcm1hbGl6ZSl7dT0hMTticmVha31mKz1sLnZhbHVlcy5sZW5ndGh9dSYmKG9baV09bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpzLmNvbXBvbmVudERhdGF0eXBlLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6cy5jb21wb25lbnRzUGVyQXR0cmlidXRlLG5vcm1hbGl6ZTpzLm5vcm1hbGl6ZSx2YWx1ZXM6b3QuY3JlYXRlVHlwZWRBcnJheShzLmNvbXBvbmVudERhdGF0eXBlLGYpfSkpfXJldHVybiBvfWZ1bmN0aW9uIGtoKHQsZSl7bGV0IG49dC5sZW5ndGgsbyxyLGkscyxmPXRbMF0ubW9kZWxNYXRyaXgsdT1oKHRbMF1bZV0uaW5kaWNlcyksYz10WzBdW2VdLnByaW1pdGl2ZVR5cGU7Zm9yKHI9MTtyPG47KytyKXtpZighc3QuZXF1YWxzKHRbcl0ubW9kZWxNYXRyaXgsZikpdGhyb3cgbmV3IEIoIkFsbCBpbnN0YW5jZXMgbXVzdCBoYXZlIHRoZSBzYW1lIG1vZGVsTWF0cml4LiIpO2lmKGgodFtyXVtlXS5pbmRpY2VzKSE9PXUpdGhyb3cgbmV3IEIoIkFsbCBpbnN0YW5jZSBnZW9tZXRyaWVzIG11c3QgaGF2ZSBhbiBpbmRpY2VzIG9yIG5vdCBoYXZlIG9uZS4iKTtpZih0W3JdW2VdLnByaW1pdGl2ZVR5cGUhPT1jKXRocm93IG5ldyBCKCJBbGwgaW5zdGFuY2UgZ2VvbWV0cmllcyBtdXN0IGhhdmUgdGhlIHNhbWUgcHJpbWl0aXZlVHlwZS4iKX1sZXQgbD12Myh0LGUpLHAsZCxtO2ZvcihvIGluIGwpaWYobC5oYXNPd25Qcm9wZXJ0eShvKSlmb3IocD1sW29dLnZhbHVlcyxzPTAscj0wO3I8bjsrK3IpZm9yKGQ9dFtyXVtlXS5hdHRyaWJ1dGVzW29dLnZhbHVlcyxtPWQubGVuZ3RoLGk9MDtpPG07KytpKXBbcysrXT1kW2ldO2xldCBfO2lmKHUpe2xldCBUPTA7Zm9yKHI9MDtyPG47KytyKVQrPXRbcl1bZV0uaW5kaWNlcy5sZW5ndGg7bGV0IEU9RnQuY29tcHV0ZU51bWJlck9mVmVydGljZXMobmV3IEZ0KHthdHRyaWJ1dGVzOmwscHJpbWl0aXZlVHlwZTpMdC5QT0lOVFN9KSksdz1EdC5jcmVhdGVUeXBlZEFycmF5KEUsVCksQz0wLE49MDtmb3Iocj0wO3I8bjsrK3Ipe2xldCBJPXRbcl1bZV0uaW5kaWNlcyxMPUkubGVuZ3RoO2ZvcihzPTA7czxMOysrcyl3W0MrK109TitJW3NdO04rPUZ0LmNvbXB1dGVOdW1iZXJPZlZlcnRpY2VzKHRbcl1bZV0pfV89d31sZXQgZz1uZXcgYSxiPTAsTztmb3Iocj0wO3I8bjsrK3Ipe2lmKE89dFtyXVtlXS5ib3VuZGluZ1NwaGVyZSwhaChPKSl7Zz12b2lkIDA7YnJlYWt9YS5hZGQoTy5jZW50ZXIsZyxnKX1pZihoKGcpKWZvcihhLmRpdmlkZUJ5U2NhbGFyKGcsbixnKSxyPTA7cjxuOysrcil7Tz10W3JdW2VdLmJvdW5kaW5nU3BoZXJlO2xldCBUPWEubWFnbml0dWRlKGEuc3VidHJhY3QoTy5jZW50ZXIsZyxEMykpK08ucmFkaXVzO1Q+YiYmKGI9VCl9cmV0dXJuIG5ldyBGdCh7YXR0cmlidXRlczpsLGluZGljZXM6XyxwcmltaXRpdmVUeXBlOmMsYm91bmRpbmdTcGhlcmU6aChnKT9uZXcgeXQoZyxiKTp2b2lkIDB9KX1mdW5jdGlvbiBCMyh0KXtpZihoKHQuaW5kaWNlcykpcmV0dXJuIHQ7bGV0IGU9RnQuY29tcHV0ZU51bWJlck9mVmVydGljZXModCk7aWYoZTwzKXRocm93IG5ldyBCKCJUaGUgbnVtYmVyIG9mIHZlcnRpY2VzIG11c3QgYmUgYXQgbGVhc3QgdGhyZWUuIik7aWYoZSUzIT09MCl0aHJvdyBuZXcgQigiVGhlIG51bWJlciBvZiB2ZXJ0aWNlcyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhyZWUuIik7bGV0IG49RHQuY3JlYXRlVHlwZWRBcnJheShlLGUpO2ZvcihsZXQgbz0wO288ZTsrK28pbltvXT1vO3JldHVybiB0LmluZGljZXM9bix0fWZ1bmN0aW9uIFUzKHQpe2xldCBlPUZ0LmNvbXB1dGVOdW1iZXJPZlZlcnRpY2VzKHQpO2lmKGU8Myl0aHJvdyBuZXcgQigiVGhlIG51bWJlciBvZiB2ZXJ0aWNlcyBtdXN0IGJlIGF0IGxlYXN0IHRocmVlLiIpO2xldCBuPUR0LmNyZWF0ZVR5cGVkQXJyYXkoZSwoZS0yKSozKTtuWzBdPTEsblsxXT0wLG5bMl09MjtsZXQgbz0zO2ZvcihsZXQgcj0zO3I8ZTsrK3IpbltvKytdPXItMSxuW28rK109MCxuW28rK109cjtyZXR1cm4gdC5pbmRpY2VzPW4sdC5wcmltaXRpdmVUeXBlPUx0LlRSSUFOR0xFUyx0fWZ1bmN0aW9uIFYzKHQpe2xldCBlPUZ0LmNvbXB1dGVOdW1iZXJPZlZlcnRpY2VzKHQpO2lmKGU8Myl0aHJvdyBuZXcgQigiVGhlIG51bWJlciBvZiB2ZXJ0aWNlcyBtdXN0IGJlIGF0IGxlYXN0IDMuIik7bGV0IG49RHQuY3JlYXRlVHlwZWRBcnJheShlLChlLTIpKjMpO25bMF09MCxuWzFdPTEsblsyXT0yLGU+MyYmKG5bM109MCxuWzRdPTIsbls1XT0zKTtsZXQgbz02O2ZvcihsZXQgcj0zO3I8ZS0xO3IrPTIpbltvKytdPXIsbltvKytdPXItMSxuW28rK109cisxLHIrMjxlJiYobltvKytdPXIsbltvKytdPXIrMSxuW28rK109cisyKTtyZXR1cm4gdC5pbmRpY2VzPW4sdC5wcmltaXRpdmVUeXBlPUx0LlRSSUFOR0xFUyx0fWZ1bmN0aW9uIGszKHQpe2lmKGgodC5pbmRpY2VzKSlyZXR1cm4gdDtsZXQgZT1GdC5jb21wdXRlTnVtYmVyT2ZWZXJ0aWNlcyh0KTtpZihlPDIpdGhyb3cgbmV3IEIoIlRoZSBudW1iZXIgb2YgdmVydGljZXMgbXVzdCBiZSBhdCBsZWFzdCB0d28uIik7aWYoZSUyIT09MCl0aHJvdyBuZXcgQigiVGhlIG51bWJlciBvZiB2ZXJ0aWNlcyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMi4iKTtsZXQgbj1EdC5jcmVhdGVUeXBlZEFycmF5KGUsZSk7Zm9yKGxldCBvPTA7bzxlOysrbyluW29dPW87cmV0dXJuIHQuaW5kaWNlcz1uLHR9ZnVuY3Rpb24gRzModCl7bGV0IGU9RnQuY29tcHV0ZU51bWJlck9mVmVydGljZXModCk7aWYoZTwyKXRocm93IG5ldyBCKCJUaGUgbnVtYmVyIG9mIHZlcnRpY2VzIG11c3QgYmUgYXQgbGVhc3QgdHdvLiIpO2xldCBuPUR0LmNyZWF0ZVR5cGVkQXJyYXkoZSwoZS0xKSoyKTtuWzBdPTAsblsxXT0xO2xldCBvPTI7Zm9yKGxldCByPTI7cjxlOysrciluW28rK109ci0xLG5bbysrXT1yO3JldHVybiB0LmluZGljZXM9bix0LnByaW1pdGl2ZVR5cGU9THQuTElORVMsdH1mdW5jdGlvbiB6Myh0KXtsZXQgZT1GdC5jb21wdXRlTnVtYmVyT2ZWZXJ0aWNlcyh0KTtpZihlPDIpdGhyb3cgbmV3IEIoIlRoZSBudW1iZXIgb2YgdmVydGljZXMgbXVzdCBiZSBhdCBsZWFzdCB0d28uIik7bGV0IG49RHQuY3JlYXRlVHlwZWRBcnJheShlLGUqMik7blswXT0wLG5bMV09MTtsZXQgbz0yO2ZvcihsZXQgcj0yO3I8ZTsrK3IpbltvKytdPXItMSxuW28rK109cjtyZXR1cm4gbltvKytdPWUtMSxuW29dPTAsdC5pbmRpY2VzPW4sdC5wcmltaXRpdmVUeXBlPUx0LkxJTkVTLHR9ZnVuY3Rpb24gajModCl7c3dpdGNoKHQucHJpbWl0aXZlVHlwZSl7Y2FzZSBMdC5UUklBTkdMRV9GQU46cmV0dXJuIFUzKHQpO2Nhc2UgTHQuVFJJQU5HTEVfU1RSSVA6cmV0dXJuIFYzKHQpO2Nhc2UgTHQuVFJJQU5HTEVTOnJldHVybiBCMyh0KTtjYXNlIEx0LkxJTkVfU1RSSVA6cmV0dXJuIEczKHQpO2Nhc2UgTHQuTElORV9MT09QOnJldHVybiB6Myh0KTtjYXNlIEx0LkxJTkVTOnJldHVybiBrMyh0KX1yZXR1cm4gdH1mdW5jdGlvbiBhcyh0LGUpe01hdGguYWJzKHQueSk8TS5FUFNJTE9ONiYmKGU/dC55PS1NLkVQU0lMT042OnQueT1NLkVQU0lMT042KX1mdW5jdGlvbiBIMyh0LGUsbil7aWYodC55IT09MCYmZS55IT09MCYmbi55IT09MCl7YXModCx0Lnk8MCksYXMoZSxlLnk8MCksYXMobixuLnk8MCk7cmV0dXJufWxldCBvPU1hdGguYWJzKHQueSkscj1NYXRoLmFicyhlLnkpLGk9TWF0aC5hYnMobi55KSxzO28+cj9vPmk/cz1NLnNpZ24odC55KTpzPU0uc2lnbihuLnkpOnI+aT9zPU0uc2lnbihlLnkpOnM9TS5zaWduKG4ueSk7bGV0IGY9czwwO2FzKHQsZiksYXMoZSxmKSxhcyhuLGYpfWZ1bmN0aW9uIHdyKHQsZSxuLG8pe2EuYWRkKHQsYS5tdWx0aXBseUJ5U2NhbGFyKGEuc3VidHJhY3QoZSx0LFViKSx0LnkvKHQueS1lLnkpLFViKSxuKSxhLmNsb25lKG4sbyksYXMobiwhMCksYXMobywhMSl9ZnVuY3Rpb24gcTModCxlLG4pe2lmKHQueD49MHx8ZS54Pj0wfHxuLng+PTApcmV0dXJuO0gzKHQsZSxuKTtsZXQgbz10Lnk8MCxyPWUueTwwLGk9bi55PDAscz0wO3MrPW8/MTowLHMrPXI/MTowLHMrPWk/MTowO2xldCBmPUdoLmluZGljZXM7cz09PTE/KGZbMV09MyxmWzJdPTQsZls1XT02LGZbN109NixmWzhdPTUsbz8od3IodCxlLGVjLG9jKSx3cih0LG4sbmMscmMpLGZbMF09MCxmWzNdPTEsZls0XT0yLGZbNl09MSk6cj8od3IoZSxuLGVjLG9jKSx3cihlLHQsbmMscmMpLGZbMF09MSxmWzNdPTIsZls0XT0wLGZbNl09Mik6aSYmKHdyKG4sdCxlYyxvYyksd3IobixlLG5jLHJjKSxmWzBdPTIsZlszXT0wLGZbNF09MSxmWzZdPTApKTpzPT09MiYmKGZbMl09NCxmWzRdPTQsZls1XT0zLGZbN109NSxmWzhdPTYsbz9yP2l8fCh3cihuLHQsZWMsb2MpLHdyKG4sZSxuYyxyYyksZlswXT0wLGZbMV09MSxmWzNdPTAsZls2XT0yKTood3IoZSxuLGVjLG9jKSx3cihlLHQsbmMscmMpLGZbMF09MixmWzFdPTAsZlszXT0yLGZbNl09MSk6KHdyKHQsZSxlYyxvYyksd3IodCxuLG5jLHJjKSxmWzBdPTEsZlsxXT0yLGZbM109MSxmWzZdPTApKTtsZXQgdT1HaC5wb3NpdGlvbnM7cmV0dXJuIHVbMF09dCx1WzFdPWUsdVsyXT1uLHUubGVuZ3RoPTMsKHM9PT0xfHxzPT09MikmJih1WzNdPWVjLHVbNF09bmMsdVs1XT1vYyx1WzZdPXJjLHUubGVuZ3RoPTcpLEdofWZ1bmN0aW9uIFZiKHQsZSl7bGV0IG49dC5hdHRyaWJ1dGVzO2lmKG4ucG9zaXRpb24udmFsdWVzLmxlbmd0aD09PTApcmV0dXJuO2ZvcihsZXQgciBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkocikmJmgobltyXSkmJmgobltyXS52YWx1ZXMpKXtsZXQgaT1uW3JdO2kudmFsdWVzPW90LmNyZWF0ZVR5cGVkQXJyYXkoaS5jb21wb25lbnREYXRhdHlwZSxpLnZhbHVlcyl9bGV0IG89RnQuY29tcHV0ZU51bWJlck9mVmVydGljZXModCk7cmV0dXJuIHQuaW5kaWNlcz1EdC5jcmVhdGVUeXBlZEFycmF5KG8sdC5pbmRpY2VzKSxlJiYodC5ib3VuZGluZ1NwaGVyZT15dC5mcm9tVmVydGljZXMobi5wb3NpdGlvbi52YWx1ZXMpKSx0fWZ1bmN0aW9uIHNhKHQpe2xldCBlPXQuYXR0cmlidXRlcyxuPXt9O2ZvcihsZXQgbyBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobykmJmgoZVtvXSkmJmgoZVtvXS52YWx1ZXMpKXtsZXQgcj1lW29dO25bb109bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpyLmNvbXBvbmVudERhdGF0eXBlLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6ci5jb21wb25lbnRzUGVyQXR0cmlidXRlLG5vcm1hbGl6ZTpyLm5vcm1hbGl6ZSx2YWx1ZXM6W119KX1yZXR1cm4gbmV3IEZ0KHthdHRyaWJ1dGVzOm4saW5kaWNlczpbXSxwcmltaXRpdmVUeXBlOnQucHJpbWl0aXZlVHlwZX0pfWZ1bmN0aW9uIHFoKHQsZSxuKXtsZXQgbz1oKHQuZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUpO2U9VmIoZSxvKSxuPVZiKG4sbyksaChuKSYmIWgoZSk/dC5nZW9tZXRyeT1uOiFoKG4pJiZoKGUpP3QuZ2VvbWV0cnk9ZToodC53ZXN0SGVtaXNwaGVyZUdlb21ldHJ5PWUsdC5lYXN0SGVtaXNwaGVyZUdlb21ldHJ5PW4sdC5nZW9tZXRyeT12b2lkIDApfWZ1bmN0aW9uIEtoKHQsZSl7bGV0IG49bmV3IHQsbz1uZXcgdCxyPW5ldyB0O3JldHVybiBmdW5jdGlvbihpLHMsZix1LGMsbCxwLGQpe2xldCBtPXQuZnJvbUFycmF5KGMsaSplLG4pLF89dC5mcm9tQXJyYXkoYyxzKmUsbyksZz10LmZyb21BcnJheShjLGYqZSxyKTt0Lm11bHRpcGx5QnlTY2FsYXIobSx1LngsbSksdC5tdWx0aXBseUJ5U2NhbGFyKF8sdS55LF8pLHQubXVsdGlwbHlCeVNjYWxhcihnLHUueixnKTtsZXQgYj10LmFkZChtLF8sbSk7dC5hZGQoYixnLGIpLGQmJnQubm9ybWFsaXplKGIsYiksdC5wYWNrKGIsbCxwKmUpfX1mdW5jdGlvbiBHcCh0LGUsbixvLHIsaSxzLGYsdSxjLGwscCxkLG0sXyxnKXtpZighaChpKSYmIWgocykmJiFoKGYpJiYhaCh1KSYmIWgoYykmJm09PT0wKXJldHVybjtsZXQgYj1hLmZyb21BcnJheShyLHQqMyxSZiksTz1hLmZyb21BcnJheShyLGUqMyx6aCksVD1hLmZyb21BcnJheShyLG4qMyxqaCksRT1fYihvLGIsTyxULFgzKTtpZihoKEUpKXtpZihoKGkpJiZqcCh0LGUsbixFLGkscC5ub3JtYWwudmFsdWVzLGcsITApLGgoYykpe2xldCB3PWEuZnJvbUFycmF5KGMsdCozLFJmKSxDPWEuZnJvbUFycmF5KGMsZSozLHpoKSxOPWEuZnJvbUFycmF5KGMsbiozLGpoKTthLm11bHRpcGx5QnlTY2FsYXIodyxFLngsdyksYS5tdWx0aXBseUJ5U2NhbGFyKEMsRS55LEMpLGEubXVsdGlwbHlCeVNjYWxhcihOLEUueixOKTtsZXQgSTshYS5lcXVhbHModyxhLlpFUk8pfHwhYS5lcXVhbHMoQyxhLlpFUk8pfHwhYS5lcXVhbHMoTixhLlpFUk8pPyhJPWEuYWRkKHcsQyx3KSxhLmFkZChJLE4sSSksYS5ub3JtYWxpemUoSSxJKSk6KEk9UmYsSS54PTAsSS55PTAsSS56PTApLGEucGFjayhJLHAuZXh0cnVkZURpcmVjdGlvbi52YWx1ZXMsZyozKX1pZihoKGwpJiZXMyh0LGUsbixFLGwscC5hcHBseU9mZnNldC52YWx1ZXMsZyksaChzKSYmanAodCxlLG4sRSxzLHAudGFuZ2VudC52YWx1ZXMsZywhMCksaChmKSYmanAodCxlLG4sRSxmLHAuYml0YW5nZW50LnZhbHVlcyxnLCEwKSxoKHUpJiZxYih0LGUsbixFLHUscC5zdC52YWx1ZXMsZyksbT4wKWZvcihsZXQgdz0wO3c8bTt3Kyspe2xldCBDPWRbd107WTModCxlLG4sRSxnLF9bQ10scFtDXSl9fX1mdW5jdGlvbiBZMyh0LGUsbixvLHIsaSxzKXtsZXQgZj1pLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGUsdT1pLnZhbHVlcyxjPXMudmFsdWVzO3N3aXRjaChmKXtjYXNlIDQ6SzModCxlLG4sbyx1LGMsciwhMSk7YnJlYWs7Y2FzZSAzOmpwKHQsZSxuLG8sdSxjLHIsITEpO2JyZWFrO2Nhc2UgMjpxYih0LGUsbixvLHUsYyxyLCExKTticmVhaztkZWZhdWx0OmNbcl09dVt0XSpvLngrdVtlXSpvLnkrdVtuXSpvLnp9fWZ1bmN0aW9uIGlpKHQsZSxuLG8scixpKXtsZXQgcz10LnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMztpZihyIT09LTEpe2xldCBmPW9bcl0sdT1uW2ZdO3JldHVybiB1PT09LTE/KG5bZl09cyx0LnBvc2l0aW9uLnZhbHVlcy5wdXNoKGkueCxpLnksaS56KSxlLnB1c2gocykscyk6KGUucHVzaCh1KSx1KX1yZXR1cm4gdC5wb3NpdGlvbi52YWx1ZXMucHVzaChpLngsaS55LGkueiksZS5wdXNoKHMpLHN9ZnVuY3Rpb24ga2IodCl7bGV0IGU9dC5nZW9tZXRyeSxuPWUuYXR0cmlidXRlcyxvPW4ucG9zaXRpb24udmFsdWVzLHI9aChuLm5vcm1hbCk/bi5ub3JtYWwudmFsdWVzOnZvaWQgMCxpPWgobi5iaXRhbmdlbnQpP24uYml0YW5nZW50LnZhbHVlczp2b2lkIDAscz1oKG4udGFuZ2VudCk/bi50YW5nZW50LnZhbHVlczp2b2lkIDAsZj1oKG4uc3QpP24uc3QudmFsdWVzOnZvaWQgMCx1PWgobi5leHRydWRlRGlyZWN0aW9uKT9uLmV4dHJ1ZGVEaXJlY3Rpb24udmFsdWVzOnZvaWQgMCxjPWgobi5hcHBseU9mZnNldCk/bi5hcHBseU9mZnNldC52YWx1ZXM6dm9pZCAwLGw9ZS5pbmRpY2VzLHA9W107Zm9yKGxldCBJIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShJKSYmISQzW0ldJiZoKG5bSV0pJiZwLnB1c2goSSk7bGV0IGQ9cC5sZW5ndGgsbT1zYShlKSxfPXNhKGUpLGcsYixPLFQsRSx3PVtdO3cubGVuZ3RoPW8ubGVuZ3RoLzM7bGV0IEM9W107Zm9yKEMubGVuZ3RoPW8ubGVuZ3RoLzMsRT0wO0U8dy5sZW5ndGg7KytFKXdbRV09LTEsQ1tFXT0tMTtsZXQgTj1sLmxlbmd0aDtmb3IoRT0wO0U8TjtFKz0zKXtsZXQgST1sW0VdLEw9bFtFKzFdLHY9bFtFKzJdLEQ9YS5mcm9tQXJyYXkobyxJKjMpLFU9YS5mcm9tQXJyYXkobyxMKjMpLEE9YS5mcm9tQXJyYXkobyx2KjMpLFM9cTMoRCxVLEEpO2lmKGgoUykmJlMucG9zaXRpb25zLmxlbmd0aD4zKXtsZXQgUD1TLnBvc2l0aW9ucyxGPVMuaW5kaWNlcyxqPUYubGVuZ3RoO2ZvcihsZXQgSD0wO0g8ajsrK0gpe2xldCBrPUZbSF0sSz1QW2tdO0sueTwwPyhnPV8uYXR0cmlidXRlcyxiPV8uaW5kaWNlcyxPPXcpOihnPW0uYXR0cmlidXRlcyxiPW0uaW5kaWNlcyxPPUMpLFQ9aWkoZyxiLE8sbCxrPDM/RStrOi0xLEspLEdwKEksTCx2LEssbyxyLHMsaSxmLHUsYyxnLHAsZCxuLFQpfX1lbHNlIGgoUykmJihEPVMucG9zaXRpb25zWzBdLFU9Uy5wb3NpdGlvbnNbMV0sQT1TLnBvc2l0aW9uc1syXSksRC55PDA/KGc9Xy5hdHRyaWJ1dGVzLGI9Xy5pbmRpY2VzLE89dyk6KGc9bS5hdHRyaWJ1dGVzLGI9bS5pbmRpY2VzLE89QyksVD1paShnLGIsTyxsLEUsRCksR3AoSSxMLHYsRCxvLHIscyxpLGYsdSxjLGcscCxkLG4sVCksVD1paShnLGIsTyxsLEUrMSxVKSxHcChJLEwsdixVLG8scixzLGksZix1LGMsZyxwLGQsbixUKSxUPWlpKGcsYixPLGwsRSsyLEEpLEdwKEksTCx2LEEsbyxyLHMsaSxmLHUsYyxnLHAsZCxuLFQpfXFoKHQsXyxtKX1mdW5jdGlvbiBpYSh0LGUsbixvLHIsaSxzKXtpZighaChzKSlyZXR1cm47bGV0IGY9YS5mcm9tQXJyYXkobyx0KjMsUmYpO2EuZXF1YWxzRXBzaWxvbihmLG4sTS5FUFNJTE9OMTApP2kuYXBwbHlPZmZzZXQudmFsdWVzW3JdPXNbdF06aS5hcHBseU9mZnNldC52YWx1ZXNbcl09c1tlXX1mdW5jdGlvbiBHYih0KXtsZXQgZT10Lmdlb21ldHJ5LG49ZS5hdHRyaWJ1dGVzLG89bi5wb3NpdGlvbi52YWx1ZXMscj1oKG4uYXBwbHlPZmZzZXQpP24uYXBwbHlPZmZzZXQudmFsdWVzOnZvaWQgMCxpPWUuaW5kaWNlcyxzPXNhKGUpLGY9c2EoZSksdSxjPWkubGVuZ3RoLGw9W107bC5sZW5ndGg9by5sZW5ndGgvMztsZXQgcD1bXTtmb3IocC5sZW5ndGg9by5sZW5ndGgvMyx1PTA7dTxsLmxlbmd0aDsrK3UpbFt1XT0tMSxwW3VdPS0xO2Zvcih1PTA7dTxjO3UrPTIpe2xldCBkPWlbdV0sbT1pW3UrMV0sXz1hLmZyb21BcnJheShvLGQqMyxSZiksZz1hLmZyb21BcnJheShvLG0qMyx6aCksYjtNYXRoLmFicyhfLnkpPE0uRVBTSUxPTjYmJihfLnk8MD9fLnk9LU0uRVBTSUxPTjY6Xy55PU0uRVBTSUxPTjYpLE1hdGguYWJzKGcueSk8TS5FUFNJTE9ONiYmKGcueTwwP2cueT0tTS5FUFNJTE9ONjpnLnk9TS5FUFNJTE9ONik7bGV0IE89cy5hdHRyaWJ1dGVzLFQ9cy5pbmRpY2VzLEU9cCx3PWYuYXR0cmlidXRlcyxDPWYuaW5kaWNlcyxOPWwsST1fby5saW5lU2VnbWVudFBsYW5lKF8sZyxLYixqaCk7aWYoaChJKSl7bGV0IEw9YS5tdWx0aXBseUJ5U2NhbGFyKGEuVU5JVF9ZLDUqTS5FUFNJTE9OOSxaMyk7Xy55PDAmJihhLm5lZ2F0ZShMLEwpLE89Zi5hdHRyaWJ1dGVzLFQ9Zi5pbmRpY2VzLEU9bCx3PXMuYXR0cmlidXRlcyxDPXMuaW5kaWNlcyxOPXApO2xldCB2PWEuYWRkKEksTCxRMyk7Yj1paShPLFQsRSxpLHUsXyksaWEoZCxtLF8sbyxiLE8sciksYj1paShPLFQsRSxpLC0xLHYpLGlhKGQsbSx2LG8sYixPLHIpLGEubmVnYXRlKEwsTCksYS5hZGQoSSxMLHYpLGI9aWkodyxDLE4saSwtMSx2KSxpYShkLG0sdixvLGIsdyxyKSxiPWlpKHcsQyxOLGksdSsxLGcpLGlhKGQsbSxnLG8sYix3LHIpfWVsc2V7bGV0IEwsdixEO18ueTwwPyhMPWYuYXR0cmlidXRlcyx2PWYuaW5kaWNlcyxEPWwpOihMPXMuYXR0cmlidXRlcyx2PXMuaW5kaWNlcyxEPXApLGI9aWkoTCx2LEQsaSx1LF8pLGlhKGQsbSxfLG8sYixMLHIpLGI9aWkoTCx2LEQsaSx1KzEsZyksaWEoZCxtLGcsbyxiLEwscil9fXFoKHQsZixzKX1mdW5jdGlvbiBIYih0KXtsZXQgZT10LmF0dHJpYnV0ZXMsbj1lLnBvc2l0aW9uLnZhbHVlcyxvPWUucHJldlBvc2l0aW9uLnZhbHVlcyxyPWUubmV4dFBvc2l0aW9uLnZhbHVlcyxpPW4ubGVuZ3RoO2ZvcihsZXQgcz0wO3M8aTtzKz0zKXtsZXQgZj1hLnVucGFjayhuLHMsV2IpO2lmKGYueD4wKWNvbnRpbnVlO2xldCB1PWEudW5wYWNrKG8scyxYYik7KGYueTwwJiZ1Lnk+MHx8Zi55PjAmJnUueTwwKSYmKHMtMz4wPyhvW3NdPW5bcy0zXSxvW3MrMV09bltzLTJdLG9bcysyXT1uW3MtMV0pOmEucGFjayhmLG8scykpO2xldCBjPWEudW5wYWNrKHIscyxIaCk7KGYueTwwJiZjLnk+MHx8Zi55PjAmJmMueTwwKSYmKHMrMzxpPyhyW3NdPW5bcyszXSxyW3MrMV09bltzKzRdLHJbcysyXT1uW3MrNV0pOmEucGFjayhmLHIscykpfX1mdW5jdGlvbiByTSh0KXtsZXQgZT10Lmdlb21ldHJ5LG49ZS5hdHRyaWJ1dGVzLG89bi5wb3NpdGlvbi52YWx1ZXMscj1uLnByZXZQb3NpdGlvbi52YWx1ZXMsaT1uLm5leHRQb3NpdGlvbi52YWx1ZXMscz1uLmV4cGFuZEFuZFdpZHRoLnZhbHVlcyxmPWgobi5zdCk/bi5zdC52YWx1ZXM6dm9pZCAwLHU9aChuLmNvbG9yKT9uLmNvbG9yLnZhbHVlczp2b2lkIDAsYz1zYShlKSxsPXNhKGUpLHAsZCxtLF89ITEsZz1vLmxlbmd0aC8zO2ZvcihwPTA7cDxnO3ArPTQpe2xldCBiPXAsTz1wKzIsVD1hLmZyb21BcnJheShvLGIqMyxXYiksRT1hLmZyb21BcnJheShvLE8qMyxYYik7aWYoTWF0aC5hYnMoVC55KTx6cClmb3IoVC55PXpwKihFLnk8MD8tMToxKSxvW3AqMysxXT1ULnksb1socCsxKSozKzFdPVQueSxkPWIqMztkPGIqMys0KjM7ZCs9MylyW2RdPW9bcCozXSxyW2QrMV09b1twKjMrMV0scltkKzJdPW9bcCozKzJdO2lmKE1hdGguYWJzKEUueSk8enApZm9yKEUueT16cCooVC55PDA/LTE6MSksb1socCsyKSozKzFdPUUueSxvWyhwKzMpKjMrMV09RS55LGQ9YiozO2Q8YiozKzQqMztkKz0zKWlbZF09b1socCsyKSozXSxpW2QrMV09b1socCsyKSozKzFdLGlbZCsyXT1vWyhwKzIpKjMrMl07bGV0IHc9Yy5hdHRyaWJ1dGVzLEM9Yy5pbmRpY2VzLE49bC5hdHRyaWJ1dGVzLEk9bC5pbmRpY2VzLEw9X28ubGluZVNlZ21lbnRQbGFuZShULEUsS2IsdE0pO2lmKGgoTCkpe189ITA7bGV0IHY9YS5tdWx0aXBseUJ5U2NhbGFyKGEuVU5JVF9ZLG9NLGVNKTtULnk8MCYmKGEubmVnYXRlKHYsdiksdz1sLmF0dHJpYnV0ZXMsQz1sLmluZGljZXMsTj1jLmF0dHJpYnV0ZXMsST1jLmluZGljZXMpO2xldCBEPWEuYWRkKEwsdixuTSk7dy5wb3NpdGlvbi52YWx1ZXMucHVzaChULngsVC55LFQueixULngsVC55LFQueiksdy5wb3NpdGlvbi52YWx1ZXMucHVzaChELngsRC55LEQueiksdy5wb3NpdGlvbi52YWx1ZXMucHVzaChELngsRC55LEQueiksdy5wcmV2UG9zaXRpb24udmFsdWVzLnB1c2gocltiKjNdLHJbYiozKzFdLHJbYiozKzJdKSx3LnByZXZQb3NpdGlvbi52YWx1ZXMucHVzaChyW2IqMyszXSxyW2IqMys0XSxyW2IqMys1XSksdy5wcmV2UG9zaXRpb24udmFsdWVzLnB1c2goVC54LFQueSxULnosVC54LFQueSxULnopLHcubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKEQueCxELnksRC56KSx3Lm5leHRQb3NpdGlvbi52YWx1ZXMucHVzaChELngsRC55LEQueiksdy5uZXh0UG9zaXRpb24udmFsdWVzLnB1c2goRC54LEQueSxELnopLHcubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKEQueCxELnksRC56KSxhLm5lZ2F0ZSh2LHYpLGEuYWRkKEwsdixEKSxOLnBvc2l0aW9uLnZhbHVlcy5wdXNoKEQueCxELnksRC56KSxOLnBvc2l0aW9uLnZhbHVlcy5wdXNoKEQueCxELnksRC56KSxOLnBvc2l0aW9uLnZhbHVlcy5wdXNoKEUueCxFLnksRS56LEUueCxFLnksRS56KSxOLnByZXZQb3NpdGlvbi52YWx1ZXMucHVzaChELngsRC55LEQueiksTi5wcmV2UG9zaXRpb24udmFsdWVzLnB1c2goRC54LEQueSxELnopLE4ucHJldlBvc2l0aW9uLnZhbHVlcy5wdXNoKEQueCxELnksRC56KSxOLnByZXZQb3NpdGlvbi52YWx1ZXMucHVzaChELngsRC55LEQueiksTi5uZXh0UG9zaXRpb24udmFsdWVzLnB1c2goRS54LEUueSxFLnosRS54LEUueSxFLnopLE4ubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKGlbTyozXSxpW08qMysxXSxpW08qMysyXSksTi5uZXh0UG9zaXRpb24udmFsdWVzLnB1c2goaVtPKjMrM10saVtPKjMrNF0saVtPKjMrNV0pO2xldCBVPW50LmZyb21BcnJheShzLGIqMix6YiksQT1NYXRoLmFicyhVLnkpO3cuZXhwYW5kQW5kV2lkdGgudmFsdWVzLnB1c2goLTEsQSwxLEEpLHcuZXhwYW5kQW5kV2lkdGgudmFsdWVzLnB1c2goLTEsLUEsMSwtQSksTi5leHBhbmRBbmRXaWR0aC52YWx1ZXMucHVzaCgtMSxBLDEsQSksTi5leHBhbmRBbmRXaWR0aC52YWx1ZXMucHVzaCgtMSwtQSwxLC1BKTtsZXQgUz1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChMLFQsSGgpKTtpZihTLz1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChFLFQsSGgpKSxoKHUpKXtsZXQgUD1fZS5mcm9tQXJyYXkodSxiKjQsamIpLEY9X2UuZnJvbUFycmF5KHUsTyo0LGpiKSxqPU0ubGVycChQLngsRi54LFMpLEg9TS5sZXJwKFAueSxGLnksUyksaz1NLmxlcnAoUC56LEYueixTKSxLPU0ubGVycChQLncsRi53LFMpO2ZvcihkPWIqNDtkPGIqNCsyKjQ7KytkKXcuY29sb3IudmFsdWVzLnB1c2godVtkXSk7Zm9yKHcuY29sb3IudmFsdWVzLnB1c2goaixILGssSyksdy5jb2xvci52YWx1ZXMucHVzaChqLEgsayxLKSxOLmNvbG9yLnZhbHVlcy5wdXNoKGosSCxrLEspLE4uY29sb3IudmFsdWVzLnB1c2goaixILGssSyksZD1PKjQ7ZDxPKjQrMio0OysrZClOLmNvbG9yLnZhbHVlcy5wdXNoKHVbZF0pfWlmKGgoZikpe2xldCBQPW50LmZyb21BcnJheShmLGIqMix6YiksRj1udC5mcm9tQXJyYXkoZiwocCszKSoyLEozKSxqPU0ubGVycChQLngsRi54LFMpO2ZvcihkPWIqMjtkPGIqMisyKjI7KytkKXcuc3QudmFsdWVzLnB1c2goZltkXSk7Zm9yKHcuc3QudmFsdWVzLnB1c2goaixQLnkpLHcuc3QudmFsdWVzLnB1c2goaixGLnkpLE4uc3QudmFsdWVzLnB1c2goaixQLnkpLE4uc3QudmFsdWVzLnB1c2goaixGLnkpLGQ9TyoyO2Q8TyoyKzIqMjsrK2QpTi5zdC52YWx1ZXMucHVzaChmW2RdKX1tPXcucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLTQsQy5wdXNoKG0sbSsyLG0rMSksQy5wdXNoKG0rMSxtKzIsbSszKSxtPU4ucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLTQsSS5wdXNoKG0sbSsyLG0rMSksSS5wdXNoKG0rMSxtKzIsbSszKX1lbHNle2xldCB2LEQ7Zm9yKFQueTwwPyh2PWwuYXR0cmlidXRlcyxEPWwuaW5kaWNlcyk6KHY9Yy5hdHRyaWJ1dGVzLEQ9Yy5pbmRpY2VzKSx2LnBvc2l0aW9uLnZhbHVlcy5wdXNoKFQueCxULnksVC56KSx2LnBvc2l0aW9uLnZhbHVlcy5wdXNoKFQueCxULnksVC56KSx2LnBvc2l0aW9uLnZhbHVlcy5wdXNoKEUueCxFLnksRS56KSx2LnBvc2l0aW9uLnZhbHVlcy5wdXNoKEUueCxFLnksRS56KSxkPXAqMztkPHAqMys0KjM7KytkKXYucHJldlBvc2l0aW9uLnZhbHVlcy5wdXNoKHJbZF0pLHYubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKGlbZF0pO2ZvcihkPXAqMjtkPHAqMis0KjI7KytkKXYuZXhwYW5kQW5kV2lkdGgudmFsdWVzLnB1c2goc1tkXSksaChmKSYmdi5zdC52YWx1ZXMucHVzaChmW2RdKTtpZihoKHUpKWZvcihkPXAqNDtkPHAqNCs0KjQ7KytkKXYuY29sb3IudmFsdWVzLnB1c2godVtkXSk7bT12LnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMy00LEQucHVzaChtLG0rMixtKzEpLEQucHVzaChtKzEsbSsyLG0rMyl9fV8mJihIYihsKSxIYihjKSkscWgodCxsLGMpfXZhciBMbyxEYixJMyxCaCxWcixVcCxWcCxEMyxicixPZixvYSxyYSxMMyxMYixGMyxFZixVcixGYixCYixrcCxVYixlYyxuYyxvYyxyYyxHaCxLMyxqcCxxYixXMyxSZix6aCxqaCxYMywkMyxLYixaMyxRMyx6YixKMyxXYixYYixIaCx0TSxlTSxuTSxqYixvTSx6cCxCZSxzaT1aKCgpPT57c3MoKTt5YigpO1BlKCk7emUoKTtVdCgpO2hyKCk7dmUoKTtEZSgpO0l0KCk7YXQoKTtIdCgpO01oKCk7UmkoKTtYZSgpO1llKCk7V2woKTskZSgpO1ZzKCk7dGMoKTtXdCgpO0ZuKCk7a24oKTtjcygpO3RuKCk7SWIoKTtMbz17fTtMby50b1dpcmVmcmFtZT1mdW5jdGlvbih0KXtpZighaCh0KSl0aHJvdyBuZXcgQigiZ2VvbWV0cnkgaXMgcmVxdWlyZWQuIik7bGV0IGU9dC5pbmRpY2VzO2lmKGgoZSkpe3N3aXRjaCh0LnByaW1pdGl2ZVR5cGUpe2Nhc2UgTHQuVFJJQU5HTEVTOnQuaW5kaWNlcz14MyhlKTticmVhaztjYXNlIEx0LlRSSUFOR0xFX1NUUklQOnQuaW5kaWNlcz1QMyhlKTticmVhaztjYXNlIEx0LlRSSUFOR0xFX0ZBTjp0LmluZGljZXM9TTMoZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgQigiZ2VvbWV0cnkucHJpbWl0aXZlVHlwZSBtdXN0IGJlIFRSSUFOR0xFUywgVFJJQU5HTEVfU1RSSVAsIG9yIFRSSUFOR0xFX0ZBTi4iKX10LnByaW1pdGl2ZVR5cGU9THQuTElORVN9cmV0dXJuIHR9O0xvLmNyZWF0ZUxpbmVTZWdtZW50c0ZvclZlY3RvcnM9ZnVuY3Rpb24odCxlLG4pe2lmKGU9eChlLCJub3JtYWwiKSwhaCh0KSl0aHJvdyBuZXcgQigiZ2VvbWV0cnkgaXMgcmVxdWlyZWQuIik7aWYoIWgodC5hdHRyaWJ1dGVzLnBvc2l0aW9uKSl0aHJvdyBuZXcgQigiZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbiBpcyByZXF1aXJlZC4iKTtpZighaCh0LmF0dHJpYnV0ZXNbZV0pKXRocm93IG5ldyBCKGBnZW9tZXRyeS5hdHRyaWJ1dGVzIG11c3QgaGF2ZSBhbiBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBhdHRyaWJ1dGVOYW1lIHBhcmFtZXRlciwgJHtlfS5gKTtuPXgobiwxZTQpO2xldCBvPXQuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMscj10LmF0dHJpYnV0ZXNbZV0udmFsdWVzLGk9by5sZW5ndGgscz1uZXcgRmxvYXQ2NEFycmF5KDIqaSksZj0wO2ZvcihsZXQgbD0wO2w8aTtsKz0zKXNbZisrXT1vW2xdLHNbZisrXT1vW2wrMV0sc1tmKytdPW9bbCsyXSxzW2YrK109b1tsXStyW2xdKm4sc1tmKytdPW9bbCsxXStyW2wrMV0qbixzW2YrK109b1tsKzJdK3JbbCsyXSpuO2xldCB1LGM9dC5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gaChjKSYmKHU9bmV3IHl0KGMuY2VudGVyLGMucmFkaXVzK24pKSxuZXcgRnQoe2F0dHJpYnV0ZXM6e3Bvc2l0aW9uOm5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6c30pfSxwcmltaXRpdmVUeXBlOkx0LkxJTkVTLGJvdW5kaW5nU3BoZXJlOnV9KX07TG8uY3JlYXRlQXR0cmlidXRlTG9jYXRpb25zPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJnZW9tZXRyeSBpcyByZXF1aXJlZC4iKTtsZXQgZT1bInBvc2l0aW9uIiwicG9zaXRpb25IaWdoIiwicG9zaXRpb25Mb3ciLCJwb3NpdGlvbjNESGlnaCIsInBvc2l0aW9uM0RMb3ciLCJwb3NpdGlvbjJESGlnaCIsInBvc2l0aW9uMkRMb3ciLCJwaWNrQ29sb3IiLCJub3JtYWwiLCJzdCIsInRhbmdlbnQiLCJiaXRhbmdlbnQiLCJleHRydWRlRGlyZWN0aW9uIiwiY29tcHJlc3NlZEF0dHJpYnV0ZXMiXSxuPXQuYXR0cmlidXRlcyxvPXt9LHI9MCxpLHM9ZS5sZW5ndGg7Zm9yKGk9MDtpPHM7KytpKXtsZXQgZj1lW2ldO2gobltmXSkmJihvW2ZdPXIrKyl9Zm9yKGxldCBmIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShmKSYmIWgob1tmXSkmJihvW2ZdPXIrKyk7cmV0dXJuIG99O0xvLnJlb3JkZXJGb3JQcmVWZXJ0ZXhDYWNoZT1mdW5jdGlvbih0KXtpZighaCh0KSl0aHJvdyBuZXcgQigiZ2VvbWV0cnkgaXMgcmVxdWlyZWQuIik7bGV0IGU9RnQuY29tcHV0ZU51bWJlck9mVmVydGljZXModCksbj10LmluZGljZXM7aWYoaChuKSl7bGV0IG89bmV3IEludDMyQXJyYXkoZSk7Zm9yKGxldCBkPTA7ZDxlO2QrKylvW2RdPS0xO2xldCByPW4saT1yLmxlbmd0aCxzPUR0LmNyZWF0ZVR5cGVkQXJyYXkoZSxpKSxmPTAsdT0wLGM9MCxsO2Zvcig7ZjxpOylsPW9bcltmXV0sbCE9PS0xP3NbdV09bDoobD1yW2ZdLG9bbF09YyxzW3VdPWMsKytjKSwrK2YsKyt1O3QuaW5kaWNlcz1zO2xldCBwPXQuYXR0cmlidXRlcztmb3IobGV0IGQgaW4gcClpZihwLmhhc093blByb3BlcnR5KGQpJiZoKHBbZF0pJiZoKHBbZF0udmFsdWVzKSl7bGV0IG09cFtkXSxfPW0udmFsdWVzLGc9MCxiPW0uY29tcG9uZW50c1BlckF0dHJpYnV0ZSxPPW90LmNyZWF0ZVR5cGVkQXJyYXkobS5jb21wb25lbnREYXRhdHlwZSxjKmIpO2Zvcig7ZzxlOyl7bGV0IFQ9b1tnXTtpZihUIT09LTEpZm9yKGxldCBFPTA7RTxiO0UrKylPW2IqVCtFXT1fW2IqZytFXTsrK2d9bS52YWx1ZXM9T319cmV0dXJuIHR9O0xvLnJlb3JkZXJGb3JQb3N0VmVydGV4Q2FjaGU9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgQigiZ2VvbWV0cnkgaXMgcmVxdWlyZWQuIik7bGV0IG49dC5pbmRpY2VzO2lmKHQucHJpbWl0aXZlVHlwZT09PUx0LlRSSUFOR0xFUyYmaChuKSl7bGV0IG89bi5sZW5ndGgscj0wO2ZvcihsZXQgaT0wO2k8bztpKyspbltpXT5yJiYocj1uW2ldKTt0LmluZGljZXM9TmIudGlwc2lmeSh7aW5kaWNlczpuLG1heGltdW1JbmRleDpyLGNhY2hlU2l6ZTplfSl9cmV0dXJuIHR9O0xvLmZpdFRvVW5zaWduZWRTaG9ydEluZGljZXM9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEIoImdlb21ldHJ5IGlzIHJlcXVpcmVkLiIpO2lmKGgodC5pbmRpY2VzKSYmdC5wcmltaXRpdmVUeXBlIT09THQuVFJJQU5HTEVTJiZ0LnByaW1pdGl2ZVR5cGUhPT1MdC5MSU5FUyYmdC5wcmltaXRpdmVUeXBlIT09THQuUE9JTlRTKXRocm93IG5ldyBCKCJnZW9tZXRyeS5wcmltaXRpdmVUeXBlIG11c3QgZXF1YWwgdG8gUHJpbWl0aXZlVHlwZS5UUklBTkdMRVMsIFByaW1pdGl2ZVR5cGUuTElORVMsIG9yIFByaW1pdGl2ZVR5cGUuUE9JTlRTLiIpO2xldCBlPVtdLG49RnQuY29tcHV0ZU51bWJlck9mVmVydGljZXModCk7aWYoaCh0LmluZGljZXMpJiZuPj1NLlNJWFRZX0ZPVVJfS0lMT0JZVEVTKXtsZXQgbz1bXSxyPVtdLGk9MCxzPXZiKHQuYXR0cmlidXRlcyksZj10LmluZGljZXMsdT1mLmxlbmd0aCxjO3QucHJpbWl0aXZlVHlwZT09PUx0LlRSSUFOR0xFUz9jPTM6dC5wcmltaXRpdmVUeXBlPT09THQuTElORVM/Yz0yOnQucHJpbWl0aXZlVHlwZT09PUx0LlBPSU5UUyYmKGM9MSk7Zm9yKGxldCBsPTA7bDx1O2wrPWMpe2ZvcihsZXQgcD0wO3A8YzsrK3Ape2xldCBkPWZbbCtwXSxtPW9bZF07aChtKXx8KG09aSsrLG9bZF09bSxOMyhzLHQuYXR0cmlidXRlcyxkKSksci5wdXNoKG0pfWkrYz49TS5TSVhUWV9GT1VSX0tJTE9CWVRFUyYmKGUucHVzaChuZXcgRnQoe2F0dHJpYnV0ZXM6cyxpbmRpY2VzOnIscHJpbWl0aXZlVHlwZTp0LnByaW1pdGl2ZVR5cGUsYm91bmRpbmdTcGhlcmU6dC5ib3VuZGluZ1NwaGVyZSxib3VuZGluZ1NwaGVyZUNWOnQuYm91bmRpbmdTcGhlcmVDVn0pKSxvPVtdLHI9W10saT0wLHM9dmIodC5hdHRyaWJ1dGVzKSl9ci5sZW5ndGghPT0wJiZlLnB1c2gobmV3IEZ0KHthdHRyaWJ1dGVzOnMsaW5kaWNlczpyLHByaW1pdGl2ZVR5cGU6dC5wcmltaXRpdmVUeXBlLGJvdW5kaW5nU3BoZXJlOnQuYm91bmRpbmdTcGhlcmUsYm91bmRpbmdTcGhlcmVDVjp0LmJvdW5kaW5nU3BoZXJlQ1Z9KSl9ZWxzZSBlLnB1c2godCk7cmV0dXJuIGV9O0RiPW5ldyBhLEkzPW5ldyBjdDtMby5wcm9qZWN0VG8yRD1mdW5jdGlvbih0LGUsbixvLHIpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJnZW9tZXRyeSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgQigiYXR0cmlidXRlTmFtZSBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgQigiYXR0cmlidXRlTmFtZTNEIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG8pKXRocm93IG5ldyBCKCJhdHRyaWJ1dGVOYW1lMkQgaXMgcmVxdWlyZWQuIik7aWYoIWgodC5hdHRyaWJ1dGVzW2VdKSl0aHJvdyBuZXcgQihgZ2VvbWV0cnkgbXVzdCBoYXZlIGF0dHJpYnV0ZSBtYXRjaGluZyB0aGUgYXR0cmlidXRlTmFtZSBhcmd1bWVudDogJHtlfS5gKTtpZih0LmF0dHJpYnV0ZXNbZV0uY29tcG9uZW50RGF0YXR5cGUhPT1vdC5ET1VCTEUpdGhyb3cgbmV3IEIoIlRoZSBhdHRyaWJ1dGUgY29tcG9uZW50RGF0YXR5cGUgbXVzdCBiZSBDb21wb25lbnREYXRhdHlwZS5ET1VCTEUuIik7bGV0IGk9dC5hdHRyaWJ1dGVzW2VdO3I9aChyKT9yOm5ldyBRbjtsZXQgcz1yLmVsbGlwc29pZCxmPWkudmFsdWVzLHU9bmV3IEZsb2F0NjRBcnJheShmLmxlbmd0aCksYz0wO2ZvcihsZXQgbD0wO2w8Zi5sZW5ndGg7bCs9Myl7bGV0IHA9YS5mcm9tQXJyYXkoZixsLERiKSxkPXMuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMocCxJMyk7aWYoIWgoZCkpdGhyb3cgbmV3IEIoYENvdWxkIG5vdCBwcm9qZWN0IHBvaW50ICgke3AueH0sICR7cC55fSwgJHtwLnp9KSB0byAyRC5gKTtsZXQgbT1yLnByb2plY3QoZCxEYik7dVtjKytdPW0ueCx1W2MrK109bS55LHVbYysrXT1tLnp9cmV0dXJuIHQuYXR0cmlidXRlc1tuXT1pLHQuYXR0cmlidXRlc1tvXT1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnV9KSxkZWxldGUgdC5hdHRyaWJ1dGVzW2VdLHR9O0JoPXtoaWdoOjAsbG93OjB9O0xvLmVuY29kZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbixvKXtpZighaCh0KSl0aHJvdyBuZXcgQigiZ2VvbWV0cnkgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEIoImF0dHJpYnV0ZU5hbWUgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEIoImF0dHJpYnV0ZUhpZ2hOYW1lIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG8pKXRocm93IG5ldyBCKCJhdHRyaWJ1dGVMb3dOYW1lIGlzIHJlcXVpcmVkLiIpO2lmKCFoKHQuYXR0cmlidXRlc1tlXSkpdGhyb3cgbmV3IEIoYGdlb21ldHJ5IG11c3QgaGF2ZSBhdHRyaWJ1dGUgbWF0Y2hpbmcgdGhlIGF0dHJpYnV0ZU5hbWUgYXJndW1lbnQ6ICR7ZX0uYCk7aWYodC5hdHRyaWJ1dGVzW2VdLmNvbXBvbmVudERhdGF0eXBlIT09b3QuRE9VQkxFKXRocm93IG5ldyBCKCJUaGUgYXR0cmlidXRlIGNvbXBvbmVudERhdGF0eXBlIG11c3QgYmUgQ29tcG9uZW50RGF0YXR5cGUuRE9VQkxFLiIpO2xldCByPXQuYXR0cmlidXRlc1tlXSxpPXIudmFsdWVzLHM9aS5sZW5ndGgsZj1uZXcgRmxvYXQzMkFycmF5KHMpLHU9bmV3IEZsb2F0MzJBcnJheShzKTtmb3IobGV0IGw9MDtsPHM7KytsKVpzLmVuY29kZShpW2xdLEJoKSxmW2xdPUJoLmhpZ2gsdVtsXT1CaC5sb3c7bGV0IGM9ci5jb21wb25lbnRzUGVyQXR0cmlidXRlO3JldHVybiB0LmF0dHJpYnV0ZXNbbl09bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOmMsdmFsdWVzOmZ9KSx0LmF0dHJpYnV0ZXNbb109bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOmMsdmFsdWVzOnV9KSxkZWxldGUgdC5hdHRyaWJ1dGVzW2VdLHR9O1ZyPW5ldyBhO1VwPW5ldyBzdCxWcD1uZXcgdHQ7TG8udHJhbnNmb3JtVG9Xb3JsZENvb3JkaW5hdGVzPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJpbnN0YW5jZSBpcyByZXF1aXJlZC4iKTtsZXQgZT10Lm1vZGVsTWF0cml4O2lmKHN0LmVxdWFscyhlLHN0LklERU5USVRZKSlyZXR1cm4gdDtsZXQgbj10Lmdlb21ldHJ5LmF0dHJpYnV0ZXM7VWgoZSxuLnBvc2l0aW9uKSxVaChlLG4ucHJldlBvc2l0aW9uKSxVaChlLG4ubmV4dFBvc2l0aW9uKSwoaChuLm5vcm1hbCl8fGgobi50YW5nZW50KXx8aChuLmJpdGFuZ2VudCkpJiYoc3QuaW52ZXJzZShlLFVwKSxzdC50cmFuc3Bvc2UoVXAsVXApLHN0LmdldE1hdHJpeDMoVXAsVnApLFZoKFZwLG4ubm9ybWFsKSxWaChWcCxuLnRhbmdlbnQpLFZoKFZwLG4uYml0YW5nZW50KSk7bGV0IG89dC5nZW9tZXRyeS5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gaChvKSYmKHQuZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmU9eXQudHJhbnNmb3JtKG8sZSxvKSksdC5tb2RlbE1hdHJpeD1zdC5jbG9uZShzdC5JREVOVElUWSksdH07RDM9bmV3IGE7TG8uY29tYmluZUluc3RhbmNlcz1mdW5jdGlvbih0KXtpZighaCh0KXx8dC5sZW5ndGg8MSl0aHJvdyBuZXcgQigiaW5zdGFuY2VzIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGhhdmUgbGVuZ3RoIGdyZWF0ZXIgdGhhbiB6ZXJvLiIpO2xldCBlPVtdLG49W10sbz10Lmxlbmd0aDtmb3IobGV0IGk9MDtpPG87KytpKXtsZXQgcz10W2ldO2gocy5nZW9tZXRyeSk/ZS5wdXNoKHMpOmgocy53ZXN0SGVtaXNwaGVyZUdlb21ldHJ5KSYmaChzLmVhc3RIZW1pc3BoZXJlR2VvbWV0cnkpJiZuLnB1c2gocyl9bGV0IHI9W107cmV0dXJuIGUubGVuZ3RoPjAmJnIucHVzaChraChlLCJnZW9tZXRyeSIpKSxuLmxlbmd0aD4wJiYoci5wdXNoKGtoKG4sIndlc3RIZW1pc3BoZXJlR2VvbWV0cnkiKSksci5wdXNoKGtoKG4sImVhc3RIZW1pc3BoZXJlR2VvbWV0cnkiKSkpLHJ9O2JyPW5ldyBhLE9mPW5ldyBhLG9hPW5ldyBhLHJhPW5ldyBhO0xvLmNvbXB1dGVOb3JtYWw9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEIoImdlb21ldHJ5IGlzIHJlcXVpcmVkLiIpO2lmKCFoKHQuYXR0cmlidXRlcy5wb3NpdGlvbil8fCFoKHQuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMpKXRocm93IG5ldyBCKCJnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyBpcyByZXF1aXJlZC4iKTtpZighaCh0LmluZGljZXMpKXRocm93IG5ldyBCKCJnZW9tZXRyeS5pbmRpY2VzIGlzIHJlcXVpcmVkLiIpO2lmKHQuaW5kaWNlcy5sZW5ndGg8Mnx8dC5pbmRpY2VzLmxlbmd0aCUzIT09MCl0aHJvdyBuZXcgQigiZ2VvbWV0cnkuaW5kaWNlcyBsZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gMCBhbmQgYmUgYSBtdWx0aXBsZSBvZiAzLiIpO2lmKHQucHJpbWl0aXZlVHlwZSE9PUx0LlRSSUFOR0xFUyl0aHJvdyBuZXcgQigiZ2VvbWV0cnkucHJpbWl0aXZlVHlwZSBtdXN0IGJlIFByaW1pdGl2ZVR5cGUuVFJJQU5HTEVTLiIpO2xldCBlPXQuaW5kaWNlcyxuPXQuYXR0cmlidXRlcyxvPW4ucG9zaXRpb24udmFsdWVzLHI9bi5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLzMsaT1lLmxlbmd0aCxzPW5ldyBBcnJheShyKSxmPW5ldyBBcnJheShpLzMpLHU9bmV3IEFycmF5KGkpLGM7Zm9yKGM9MDtjPHI7YysrKXNbY109e2luZGV4T2Zmc2V0OjAsY291bnQ6MCxjdXJyZW50Q291bnQ6MH07bGV0IGw9MDtmb3IoYz0wO2M8aTtjKz0zKXtsZXQgXz1lW2NdLGc9ZVtjKzFdLGI9ZVtjKzJdLE89XyozLFQ9ZyozLEU9YiozO09mLng9b1tPXSxPZi55PW9bTysxXSxPZi56PW9bTysyXSxvYS54PW9bVF0sb2EueT1vW1QrMV0sb2Euej1vW1QrMl0scmEueD1vW0VdLHJhLnk9b1tFKzFdLHJhLno9b1tFKzJdLHNbX10uY291bnQrKyxzW2ddLmNvdW50Kyssc1tiXS5jb3VudCsrLGEuc3VidHJhY3Qob2EsT2Ysb2EpLGEuc3VidHJhY3QocmEsT2YscmEpLGZbbF09YS5jcm9zcyhvYSxyYSxuZXcgYSksbCsrfWxldCBwPTA7Zm9yKGM9MDtjPHI7YysrKXNbY10uaW5kZXhPZmZzZXQrPXAscCs9c1tjXS5jb3VudDtsPTA7bGV0IGQ7Zm9yKGM9MDtjPGk7Yys9Myl7ZD1zW2VbY11dO2xldCBfPWQuaW5kZXhPZmZzZXQrZC5jdXJyZW50Q291bnQ7dVtfXT1sLGQuY3VycmVudENvdW50KyssZD1zW2VbYysxXV0sXz1kLmluZGV4T2Zmc2V0K2QuY3VycmVudENvdW50LHVbX109bCxkLmN1cnJlbnRDb3VudCsrLGQ9c1tlW2MrMl1dLF89ZC5pbmRleE9mZnNldCtkLmN1cnJlbnRDb3VudCx1W19dPWwsZC5jdXJyZW50Q291bnQrKyxsKyt9bGV0IG09bmV3IEZsb2F0MzJBcnJheShyKjMpO2ZvcihjPTA7YzxyO2MrKyl7bGV0IF89YyozO2lmKGQ9c1tjXSxhLmNsb25lKGEuWkVSTyxiciksZC5jb3VudD4wKXtmb3IobD0wO2w8ZC5jb3VudDtsKyspYS5hZGQoYnIsZlt1W2QuaW5kZXhPZmZzZXQrbF1dLGJyKTthLmVxdWFsc0Vwc2lsb24oYS5aRVJPLGJyLE0uRVBTSUxPTjEwKSYmYS5jbG9uZShmW3VbZC5pbmRleE9mZnNldF1dLGJyKX1hLmVxdWFsc0Vwc2lsb24oYS5aRVJPLGJyLE0uRVBTSUxPTjEwKSYmKGJyLno9MSksYS5ub3JtYWxpemUoYnIsYnIpLG1bX109YnIueCxtW18rMV09YnIueSxtW18rMl09YnIuen1yZXR1cm4gdC5hdHRyaWJ1dGVzLm5vcm1hbD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bX0pLHR9O0wzPW5ldyBhLExiPW5ldyBhLEYzPW5ldyBhO0xvLmNvbXB1dGVUYW5nZW50QW5kQml0YW5nZW50PWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJnZW9tZXRyeSBpcyByZXF1aXJlZC4iKTtsZXQgZT10LmF0dHJpYnV0ZXMsbj10LmluZGljZXM7aWYoIWgoZS5wb3NpdGlvbil8fCFoKGUucG9zaXRpb24udmFsdWVzKSl0aHJvdyBuZXcgQigiZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMgaXMgcmVxdWlyZWQuIik7aWYoIWgoZS5ub3JtYWwpfHwhaChlLm5vcm1hbC52YWx1ZXMpKXRocm93IG5ldyBCKCJnZW9tZXRyeS5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZXMgaXMgcmVxdWlyZWQuIik7aWYoIWgoZS5zdCl8fCFoKGUuc3QudmFsdWVzKSl0aHJvdyBuZXcgQigiZ2VvbWV0cnkuYXR0cmlidXRlcy5zdC52YWx1ZXMgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEIoImdlb21ldHJ5LmluZGljZXMgaXMgcmVxdWlyZWQuIik7aWYobi5sZW5ndGg8Mnx8bi5sZW5ndGglMyE9PTApdGhyb3cgbmV3IEIoImdlb21ldHJ5LmluZGljZXMgbGVuZ3RoIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAgYW5kIGJlIGEgbXVsdGlwbGUgb2YgMy4iKTtpZih0LnByaW1pdGl2ZVR5cGUhPT1MdC5UUklBTkdMRVMpdGhyb3cgbmV3IEIoImdlb21ldHJ5LnByaW1pdGl2ZVR5cGUgbXVzdCBiZSBQcmltaXRpdmVUeXBlLlRSSUFOR0xFUy4iKTtsZXQgbz10LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLHI9dC5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZXMsaT10LmF0dHJpYnV0ZXMuc3QudmFsdWVzLHM9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMyxmPW4ubGVuZ3RoLHU9bmV3IEFycmF5KHMqMyksYztmb3IoYz0wO2M8dS5sZW5ndGg7YysrKXVbY109MDtsZXQgbCxwLGQ7Zm9yKGM9MDtjPGY7Yys9Myl7bGV0IGc9bltjXSxiPW5bYysxXSxPPW5bYysyXTtsPWcqMyxwPWIqMyxkPU8qMztsZXQgVD1nKjIsRT1iKjIsdz1PKjIsQz1vW2xdLE49b1tsKzFdLEk9b1tsKzJdLEw9aVtUXSx2PWlbVCsxXSxEPWlbRSsxXS12LFU9aVt3KzFdLXYsQT0xLygoaVtFXS1MKSpVLShpW3ddLUwpKkQpLFM9KFUqKG9bcF0tQyktRCoob1tkXS1DKSkqQSxQPShVKihvW3ArMV0tTiktRCoob1tkKzFdLU4pKSpBLEY9KFUqKG9bcCsyXS1JKS1EKihvW2QrMl0tSSkpKkE7dVtsXSs9Uyx1W2wrMV0rPVAsdVtsKzJdKz1GLHVbcF0rPVMsdVtwKzFdKz1QLHVbcCsyXSs9Rix1W2RdKz1TLHVbZCsxXSs9UCx1W2QrMl0rPUZ9bGV0IG09bmV3IEZsb2F0MzJBcnJheShzKjMpLF89bmV3IEZsb2F0MzJBcnJheShzKjMpO2ZvcihjPTA7YzxzO2MrKyl7bD1jKjMscD1sKzEsZD1sKzI7bGV0IGc9YS5mcm9tQXJyYXkocixsLEwzKSxiPWEuZnJvbUFycmF5KHUsbCxGMyksTz1hLmRvdChnLGIpO2EubXVsdGlwbHlCeVNjYWxhcihnLE8sTGIpLGEubm9ybWFsaXplKGEuc3VidHJhY3QoYixMYixiKSxiKSxtW2xdPWIueCxtW3BdPWIueSxtW2RdPWIueixhLm5vcm1hbGl6ZShhLmNyb3NzKGcsYixiKSxiKSxfW2xdPWIueCxfW3BdPWIueSxfW2RdPWIuen1yZXR1cm4gdC5hdHRyaWJ1dGVzLnRhbmdlbnQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOm19KSx0LmF0dHJpYnV0ZXMuYml0YW5nZW50PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpffSksdH07RWY9bmV3IG50LFVyPW5ldyBhLEZiPW5ldyBhLEJiPW5ldyBhLGtwPW5ldyBudDtMby5jb21wcmVzc1ZlcnRpY2VzPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJnZW9tZXRyeSBpcyByZXF1aXJlZC4iKTtsZXQgZT10LmF0dHJpYnV0ZXMuZXh0cnVkZURpcmVjdGlvbixuLG87aWYoaChlKSl7bGV0IE49ZS52YWx1ZXM7bz1OLmxlbmd0aC8zO2xldCBJPW5ldyBGbG9hdDMyQXJyYXkobyoyKSxMPTA7Zm9yKG49MDtuPG87KytuKXtpZihhLmZyb21BcnJheShOLG4qMyxVciksYS5lcXVhbHMoVXIsYS5aRVJPKSl7TCs9Mjtjb250aW51ZX1rcD1ubi5vY3RFbmNvZGVJblJhbmdlKFVyLDY1NTM1LGtwKSxJW0wrK109a3AueCxJW0wrK109a3AueX1yZXR1cm4gdC5hdHRyaWJ1dGVzLmNvbXByZXNzZWRBdHRyaWJ1dGVzPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpJfSksZGVsZXRlIHQuYXR0cmlidXRlcy5leHRydWRlRGlyZWN0aW9uLHR9bGV0IHI9dC5hdHRyaWJ1dGVzLm5vcm1hbCxpPXQuYXR0cmlidXRlcy5zdCxzPWgociksZj1oKGkpO2lmKCFzJiYhZilyZXR1cm4gdDtsZXQgdT10LmF0dHJpYnV0ZXMudGFuZ2VudCxjPXQuYXR0cmlidXRlcy5iaXRhbmdlbnQsbD1oKHUpLHA9aChjKSxkLG0sXyxnO3MmJihkPXIudmFsdWVzKSxmJiYobT1pLnZhbHVlcyksbCYmKF89dS52YWx1ZXMpLHAmJihnPWMudmFsdWVzKSxvPShzP2QubGVuZ3RoOm0ubGVuZ3RoKS8ocz8zOjIpO2xldCBUPW8sRT1mJiZzPzI6MTtFKz1sfHxwPzE6MCxUKj1FO2xldCB3PW5ldyBGbG9hdDMyQXJyYXkoVCksQz0wO2ZvcihuPTA7bjxvOysrbil7ZiYmKG50LmZyb21BcnJheShtLG4qMixFZiksd1tDKytdPW5uLmNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzKEVmKSk7bGV0IE49biozO3MmJmgoXykmJmgoZyk/KGEuZnJvbUFycmF5KGQsTixVciksYS5mcm9tQXJyYXkoXyxOLEZiKSxhLmZyb21BcnJheShnLE4sQmIpLG5uLm9jdFBhY2soVXIsRmIsQmIsRWYpLHdbQysrXT1FZi54LHdbQysrXT1FZi55KToocyYmKGEuZnJvbUFycmF5KGQsTixVciksd1tDKytdPW5uLm9jdEVuY29kZUZsb2F0KFVyKSksbCYmKGEuZnJvbUFycmF5KF8sTixVciksd1tDKytdPW5uLm9jdEVuY29kZUZsb2F0KFVyKSkscCYmKGEuZnJvbUFycmF5KGcsTixVciksd1tDKytdPW5uLm9jdEVuY29kZUZsb2F0KFVyKSkpfXJldHVybiB0LmF0dHJpYnV0ZXMuY29tcHJlc3NlZEF0dHJpYnV0ZXM9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOkUsdmFsdWVzOnd9KSxzJiZkZWxldGUgdC5hdHRyaWJ1dGVzLm5vcm1hbCxmJiZkZWxldGUgdC5hdHRyaWJ1dGVzLnN0LHAmJmRlbGV0ZSB0LmF0dHJpYnV0ZXMuYml0YW5nZW50LGwmJmRlbGV0ZSB0LmF0dHJpYnV0ZXMudGFuZ2VudCx0fTtVYj1uZXcgYTtlYz1uZXcgYSxuYz1uZXcgYSxvYz1uZXcgYSxyYz1uZXcgYSxHaD17cG9zaXRpb25zOm5ldyBBcnJheSg3KSxpbmRpY2VzOm5ldyBBcnJheSgzKjMpfTtLMz1LaChfZSw0KSxqcD1LaChhLDMpLHFiPUtoKG50LDIpLFczPWZ1bmN0aW9uKHQsZSxuLG8scixpLHMpe2xldCBmPXJbdF0qby54LHU9cltlXSpvLnksYz1yW25dKm8uejtpW3NdPWYrdStjPk0uRVBTSUxPTjY/MTowfSxSZj1uZXcgYSx6aD1uZXcgYSxqaD1uZXcgYSxYMz1uZXcgYTskMz17cG9zaXRpb246ITAsbm9ybWFsOiEwLGJpdGFuZ2VudDohMCx0YW5nZW50OiEwLHN0OiEwLGV4dHJ1ZGVEaXJlY3Rpb246ITAsYXBwbHlPZmZzZXQ6ITB9O0tiPW9uLmZyb21Qb2ludE5vcm1hbChhLlpFUk8sYS5VTklUX1kpLFozPW5ldyBhLFEzPW5ldyBhO3piPW5ldyBudCxKMz1uZXcgbnQsV2I9bmV3IGEsWGI9bmV3IGEsSGg9bmV3IGEsdE09bmV3IGEsZU09bmV3IGEsbk09bmV3IGEsamI9bmV3IF9lO29NPTUqTS5FUFNJTE9OOSx6cD1NLkVQU0lMT042O0xvLnNwbGl0TG9uZ2l0dWRlPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJpbnN0YW5jZSBpcyByZXF1aXJlZC4iKTtsZXQgZT10Lmdlb21ldHJ5LG49ZS5ib3VuZGluZ1NwaGVyZTtpZihoKG4pJiYobi5jZW50ZXIueC1uLnJhZGl1cz4wfHx5dC5pbnRlcnNlY3RQbGFuZShuLG9uLk9SSUdJTl9aWF9QTEFORSkhPT1Fbi5JTlRFUlNFQ1RJTkcpKXJldHVybiB0O2lmKGUuZ2VvbWV0cnlUeXBlIT09U2kuTk9ORSlzd2l0Y2goZS5nZW9tZXRyeVR5cGUpe2Nhc2UgU2kuUE9MWUxJTkVTOnJNKHQpO2JyZWFrO2Nhc2UgU2kuVFJJQU5HTEVTOmtiKHQpO2JyZWFrO2Nhc2UgU2kuTElORVM6R2IodCk7YnJlYWt9ZWxzZSBqMyhlKSxlLnByaW1pdGl2ZVR5cGU9PT1MdC5UUklBTkdMRVM/a2IodCk6ZS5wcmltaXRpdmVUeXBlPT09THQuTElORVMmJkdiKHQpO3JldHVybiB0fTtCZT1Mb30pO2Z1bmN0aW9uIFNmKHQsZSxuKXt0PXgodCwwKSxlPXgoZSwwKSxuPXgobiwwKSx0aGlzLnZhbHVlPW5ldyBGbG9hdDMyQXJyYXkoW3QsZSxuXSl9dmFyIFliLCRiPVooKCk9PntZdCgpO0RlKCk7SXQoKTthdCgpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFNmLnByb3RvdHlwZSx7Y29tcG9uZW50RGF0YXR5cGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBvdC5GTE9BVH19LGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6e2dldDpmdW5jdGlvbigpe3JldHVybiAzfX0sbm9ybWFsaXplOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX19fSk7U2YuZnJvbUNhcnRlc2lhbjM9ZnVuY3Rpb24odCl7cmV0dXJuIHkuZGVmaW5lZCgib2Zmc2V0Iix0KSxuZXcgU2YodC54LHQueSx0LnopfTtTZi50b1ZhbHVlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkuZGVmaW5lZCgib2Zmc2V0Iix0KSxoKGUpfHwoZT1uZXcgRmxvYXQzMkFycmF5KFt0LngsdC55LHQuel0pKSxlWzBdPXQueCxlWzFdPXQueSxlWzJdPXQueixlfTtZYj1TZn0pO2Z1bmN0aW9uIFFvKHQpe3RoaXMuX2VsbGlwc29pZD14KHQsJC5XR1M4NCksdGhpcy5fc2VtaW1ham9yQXhpcz10aGlzLl9lbGxpcHNvaWQubWF4aW11bVJhZGl1cyx0aGlzLl9vbmVPdmVyU2VtaW1ham9yQXhpcz0xL3RoaXMuX3NlbWltYWpvckF4aXN9dmFyIGVvLGljPVooKCk9PntVdCgpO3ZlKCk7SXQoKTthdCgpO0h0KCk7WnQoKTtXdCgpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFFvLnByb3RvdHlwZSx7ZWxsaXBzb2lkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxsaXBzb2lkfX19KTtRby5tZXJjYXRvckFuZ2xlVG9HZW9kZXRpY0xhdGl0dWRlPWZ1bmN0aW9uKHQpe3JldHVybiBNLlBJX09WRVJfVFdPLTIqTWF0aC5hdGFuKE1hdGguZXhwKC10KSl9O1FvLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGU9ZnVuY3Rpb24odCl7dD5Rby5NYXhpbXVtTGF0aXR1ZGU/dD1Rby5NYXhpbXVtTGF0aXR1ZGU6dDwtUW8uTWF4aW11bUxhdGl0dWRlJiYodD0tUW8uTWF4aW11bUxhdGl0dWRlKTtsZXQgZT1NYXRoLnNpbih0KTtyZXR1cm4gLjUqTWF0aC5sb2coKDErZSkvKDEtZSkpfTtRby5NYXhpbXVtTGF0aXR1ZGU9UW8ubWVyY2F0b3JBbmdsZVRvR2VvZGV0aWNMYXRpdHVkZShNYXRoLlBJKTtRby5wcm90b3R5cGUucHJvamVjdD1mdW5jdGlvbih0LGUpe2xldCBuPXRoaXMuX3NlbWltYWpvckF4aXMsbz10LmxvbmdpdHVkZSpuLHI9UW8uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZSh0LmxhdGl0dWRlKSpuLGk9dC5oZWlnaHQ7cmV0dXJuIGgoZSk/KGUueD1vLGUueT1yLGUuej1pLGUpOm5ldyBhKG8scixpKX07UW8ucHJvdG90eXBlLnVucHJvamVjdD1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJjYXJ0ZXNpYW4gaXMgcmVxdWlyZWQiKTtsZXQgbj10aGlzLl9vbmVPdmVyU2VtaW1ham9yQXhpcyxvPXQueCpuLHI9UW8ubWVyY2F0b3JBbmdsZVRvR2VvZGV0aWNMYXRpdHVkZSh0LnkqbiksaT10Lno7cmV0dXJuIGgoZSk/KGUubG9uZ2l0dWRlPW8sZS5sYXRpdHVkZT1yLGUuaGVpZ2h0PWksZSk6bmV3IGN0KG8scixpKX07ZW89UW99KTtmdW5jdGlvbiBpTSh0LGUsbil7bGV0IG89IW4scj10Lmxlbmd0aCxpO2lmKCFvJiZyPjEpe2xldCBzPXRbMF0ubW9kZWxNYXRyaXg7Zm9yKGk9MTtpPHI7KytpKWlmKCFzdC5lcXVhbHMocyx0W2ldLm1vZGVsTWF0cml4KSl7bz0hMDticmVha319aWYobylmb3IoaT0wO2k8cjsrK2kpaCh0W2ldLmdlb21ldHJ5KSYmQmUudHJhbnNmb3JtVG9Xb3JsZENvb3JkaW5hdGVzKHRbaV0pO2Vsc2Ugc3QubXVsdGlwbHlUcmFuc2Zvcm1hdGlvbihlLHRbMF0ubW9kZWxNYXRyaXgsZSl9ZnVuY3Rpb24gV2godCxlKXtsZXQgbj10LmF0dHJpYnV0ZXMsbz1uLnBvc2l0aW9uLHI9by52YWx1ZXMubGVuZ3RoL28uY29tcG9uZW50c1BlckF0dHJpYnV0ZTtuLmJhdGNoSWQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOm5ldyBGbG9hdDMyQXJyYXkocil9KTtsZXQgaT1uLmJhdGNoSWQudmFsdWVzO2ZvcihsZXQgcz0wO3M8cjsrK3MpaVtzXT1lfWZ1bmN0aW9uIHNNKHQpe2xldCBlPXQubGVuZ3RoO2ZvcihsZXQgbj0wO248ZTsrK24pe2xldCBvPXRbbl07aChvLmdlb21ldHJ5KT9XaChvLmdlb21ldHJ5LG4pOmgoby53ZXN0SGVtaXNwaGVyZUdlb21ldHJ5KSYmaChvLmVhc3RIZW1pc3BoZXJlR2VvbWV0cnkpJiYoV2goby53ZXN0SGVtaXNwaGVyZUdlb21ldHJ5LG4pLFdoKG8uZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSxuKSl9fWZ1bmN0aW9uIGNNKHQpe2xldCBlPXQuaW5zdGFuY2VzLG49dC5wcm9qZWN0aW9uLG89dC5lbGVtZW50SW5kZXhVaW50U3VwcG9ydGVkLHI9dC5zY2VuZTNET25seSxpPXQudmVydGV4Q2FjaGVPcHRpbWl6ZSxzPXQuY29tcHJlc3NWZXJ0aWNlcyxmPXQubW9kZWxNYXRyaXgsdSxjLGwscD1lLmxlbmd0aDtmb3IodT0wO3U8cDsrK3UpaWYoaChlW3VdLmdlb21ldHJ5KSl7bD1lW3VdLmdlb21ldHJ5LnByaW1pdGl2ZVR5cGU7YnJlYWt9Zm9yKHU9MTt1PHA7Kyt1KWlmKGgoZVt1XS5nZW9tZXRyeSkmJmVbdV0uZ2VvbWV0cnkucHJpbWl0aXZlVHlwZSE9PWwpdGhyb3cgbmV3IEIoIkFsbCBpbnN0YW5jZSBnZW9tZXRyaWVzIG11c3QgaGF2ZSB0aGUgc2FtZSBwcmltaXRpdmVUeXBlLiIpO2lmKGlNKGUsZixyKSwhcilmb3IodT0wO3U8cDsrK3UpaChlW3VdLmdlb21ldHJ5KSYmQmUuc3BsaXRMb25naXR1ZGUoZVt1XSk7aWYoc00oZSksaSlmb3IodT0wO3U8cDsrK3Upe2xldCBtPWVbdV07aChtLmdlb21ldHJ5KT8oQmUucmVvcmRlckZvclBvc3RWZXJ0ZXhDYWNoZShtLmdlb21ldHJ5KSxCZS5yZW9yZGVyRm9yUHJlVmVydGV4Q2FjaGUobS5nZW9tZXRyeSkpOmgobS53ZXN0SGVtaXNwaGVyZUdlb21ldHJ5KSYmaChtLmVhc3RIZW1pc3BoZXJlR2VvbWV0cnkpJiYoQmUucmVvcmRlckZvclBvc3RWZXJ0ZXhDYWNoZShtLndlc3RIZW1pc3BoZXJlR2VvbWV0cnkpLEJlLnJlb3JkZXJGb3JQcmVWZXJ0ZXhDYWNoZShtLndlc3RIZW1pc3BoZXJlR2VvbWV0cnkpLEJlLnJlb3JkZXJGb3JQb3N0VmVydGV4Q2FjaGUobS5lYXN0SGVtaXNwaGVyZUdlb21ldHJ5KSxCZS5yZW9yZGVyRm9yUHJlVmVydGV4Q2FjaGUobS5lYXN0SGVtaXNwaGVyZUdlb21ldHJ5KSl9bGV0IGQ9QmUuY29tYmluZUluc3RhbmNlcyhlKTtmb3IocD1kLmxlbmd0aCx1PTA7dTxwOysrdSl7Yz1kW3VdO2xldCBtPWMuYXR0cmlidXRlcztpZihyKWZvcihsZXQgXyBpbiBtKW0uaGFzT3duUHJvcGVydHkoXykmJm1bX10uY29tcG9uZW50RGF0YXR5cGU9PT1vdC5ET1VCTEUmJkJlLmVuY29kZUF0dHJpYnV0ZShjLF8sYCR7X30zREhpZ2hgLGAke199M0RMb3dgKTtlbHNlIGZvcihsZXQgXyBpbiBtKWlmKG0uaGFzT3duUHJvcGVydHkoXykmJm1bX10uY29tcG9uZW50RGF0YXR5cGU9PT1vdC5ET1VCTEUpe2xldCBnPWAke199M0RgLGI9YCR7X30yRGA7QmUucHJvamVjdFRvMkQoYyxfLGcsYixuKSxoKGMuYm91bmRpbmdTcGhlcmUpJiZfPT09InBvc2l0aW9uIiYmKGMuYm91bmRpbmdTcGhlcmVDVj15dC5mcm9tVmVydGljZXMoYy5hdHRyaWJ1dGVzLnBvc2l0aW9uMkQudmFsdWVzKSksQmUuZW5jb2RlQXR0cmlidXRlKGMsZyxgJHtnfUhpZ2hgLGAke2d9TG93YCksQmUuZW5jb2RlQXR0cmlidXRlKGMsYixgJHtifUhpZ2hgLGAke2J9TG93YCl9cyYmQmUuY29tcHJlc3NWZXJ0aWNlcyhjKX1pZighbyl7bGV0IG09W107Zm9yKHA9ZC5sZW5ndGgsdT0wO3U8cDsrK3UpYz1kW3VdLG09bS5jb25jYXQoQmUuZml0VG9VbnNpZ25lZFNob3J0SW5kaWNlcyhjKSk7ZD1tfXJldHVybiBkfWZ1bmN0aW9uIFhoKHQsZSxuLG8pe2xldCByLGkscyxmPW8ubGVuZ3RoLTE7aWYoZj49MCl7bGV0IGM9b1tmXTtyPWMub2Zmc2V0K2MuY291bnQscz1jLmluZGV4LGk9bltzXS5pbmRpY2VzLmxlbmd0aH1lbHNlIHI9MCxzPTAsaT1uW3NdLmluZGljZXMubGVuZ3RoO2xldCB1PXQubGVuZ3RoO2ZvcihsZXQgYz0wO2M8dTsrK2Mpe2xldCBwPXRbY11bZV07aWYoIWgocCkpY29udGludWU7bGV0IGQ9cC5pbmRpY2VzLmxlbmd0aDtyK2Q+aSYmKHI9MCxpPW5bKytzXS5pbmRpY2VzLmxlbmd0aCksby5wdXNoKHtpbmRleDpzLG9mZnNldDpyLGNvdW50OmR9KSxyKz1kfX1mdW5jdGlvbiBhTSh0LGUpe2xldCBuPVtdO3JldHVybiBYaCh0LCJnZW9tZXRyeSIsZSxuKSxYaCh0LCJ3ZXN0SGVtaXNwaGVyZUdlb21ldHJ5IixlLG4pLFhoKHQsImVhc3RIZW1pc3BoZXJlR2VvbWV0cnkiLGUsbiksbn1mdW5jdGlvbiBmTSh0LGUpe2xldCBuPXQuYXR0cmlidXRlcztmb3IobGV0IG8gaW4gbilpZihuLmhhc093blByb3BlcnR5KG8pKXtsZXQgcj1uW29dO2gocikmJmgoci52YWx1ZXMpJiZlLnB1c2goci52YWx1ZXMuYnVmZmVyKX1oKHQuaW5kaWNlcykmJmUucHVzaCh0LmluZGljZXMuYnVmZmVyKX1mdW5jdGlvbiB1TSh0LGUpe2xldCBuPXQubGVuZ3RoO2ZvcihsZXQgbz0wO288bjsrK28pZk0odFtvXSxlKX1mdW5jdGlvbiBsTSh0KXtsZXQgZT0xLG49dC5sZW5ndGg7Zm9yKGxldCBvPTA7bzxuO28rKyl7bGV0IHI9dFtvXTtpZigrK2UsIWgocikpY29udGludWU7bGV0IGk9ci5hdHRyaWJ1dGVzO2UrPTcrMip5dC5wYWNrZWRMZW5ndGgrKGgoci5pbmRpY2VzKT9yLmluZGljZXMubGVuZ3RoOjApO2ZvcihsZXQgcyBpbiBpKWlmKGkuaGFzT3duUHJvcGVydHkocykmJmgoaVtzXSkpe2xldCBmPWlbc107ZSs9NStmLnZhbHVlcy5sZW5ndGh9fXJldHVybiBlfWZ1bmN0aW9uIHBNKHQsZSl7bGV0IG49dC5sZW5ndGgsbz1uZXcgRmxvYXQ2NEFycmF5KDErbioxOSkscj0wO29bcisrXT1uO2ZvcihsZXQgaT0wO2k8bjtpKyspe2xldCBzPXRbaV07aWYoc3QucGFjayhzLm1vZGVsTWF0cml4LG8scikscis9c3QucGFja2VkTGVuZ3RoLGgocy5hdHRyaWJ1dGVzKSYmaChzLmF0dHJpYnV0ZXMub2Zmc2V0KSl7bGV0IGY9cy5hdHRyaWJ1dGVzLm9mZnNldC52YWx1ZTtvW3JdPWZbMF0sb1tyKzFdPWZbMV0sb1tyKzJdPWZbMl19cis9M31yZXR1cm4gZS5wdXNoKG8uYnVmZmVyKSxvfWZ1bmN0aW9uIGRNKHQpe2xldCBlPXQsbj1uZXcgQXJyYXkoZVswXSksbz0wLHI9MTtmb3IoO3I8ZS5sZW5ndGg7KXtsZXQgaT1zdC51bnBhY2soZSxyKSxzO3IrPXN0LnBhY2tlZExlbmd0aCxoKGVbcl0pJiYocz17b2Zmc2V0Om5ldyBZYihlW3JdLGVbcisxXSxlW3IrMl0pfSkscis9MyxuW28rK109e21vZGVsTWF0cml4OmksYXR0cmlidXRlczpzfX1yZXR1cm4gbn1mdW5jdGlvbiBaYih0KXtsZXQgZT10Lmxlbmd0aCxuPTErKHl0LnBhY2tlZExlbmd0aCsxKSplLG89bmV3IEZsb2F0MzJBcnJheShuKSxyPTA7b1tyKytdPWU7Zm9yKGxldCBpPTA7aTxlOysraSl7bGV0IHM9dFtpXTtoKHMpPyhvW3IrK109MSx5dC5wYWNrKHRbaV0sbyxyKSk6b1tyKytdPTAscis9eXQucGFja2VkTGVuZ3RofXJldHVybiBvfWZ1bmN0aW9uIFFiKHQpe2xldCBlPW5ldyBBcnJheSh0WzBdKSxuPTAsbz0xO2Zvcig7bzx0Lmxlbmd0aDspdFtvKytdPT09MSYmKGVbbl09eXQudW5wYWNrKHQsbykpLCsrbixvKz15dC5wYWNrZWRMZW5ndGg7cmV0dXJuIGV9dmFyIE5pLGNhLFloPVooKCk9PntQZSgpO0RlKCk7SXQoKTthdCgpO0h0KCk7WnQoKTtSaSgpO1hlKCk7WWUoKTthbigpO3NpKCk7JGUoKTtrbigpOyRiKCk7aWMoKTtOaT17fTtOaS5jb21iaW5lR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGUsbixvPXQuaW5zdGFuY2VzLHI9by5sZW5ndGgsaSxzLGY9ITE7cj4wJiYoZT1jTSh0KSxlLmxlbmd0aD4wJiYobj1CZS5jcmVhdGVBdHRyaWJ1dGVMb2NhdGlvbnMoZVswXSksdC5jcmVhdGVQaWNrT2Zmc2V0cyYmKGk9YU0obyxlKSkpLGgob1swXS5hdHRyaWJ1dGVzKSYmaChvWzBdLmF0dHJpYnV0ZXMub2Zmc2V0KSYmKHM9bmV3IEFycmF5KHIpLGY9ITApKTtsZXQgdT1uZXcgQXJyYXkociksYz1uZXcgQXJyYXkocik7Zm9yKGxldCBsPTA7bDxyOysrbCl7bGV0IHA9b1tsXSxkPXAuZ2VvbWV0cnk7aChkKSYmKHVbbF09ZC5ib3VuZGluZ1NwaGVyZSxjW2xdPWQuYm91bmRpbmdTcGhlcmVDVixmJiYoc1tsXT1wLmdlb21ldHJ5Lm9mZnNldEF0dHJpYnV0ZSkpO2xldCBtPXAuZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSxfPXAud2VzdEhlbWlzcGhlcmVHZW9tZXRyeTtoKG0pJiZoKF8pJiYoaChtLmJvdW5kaW5nU3BoZXJlKSYmaChfLmJvdW5kaW5nU3BoZXJlKSYmKHVbbF09eXQudW5pb24obS5ib3VuZGluZ1NwaGVyZSxfLmJvdW5kaW5nU3BoZXJlKSksaChtLmJvdW5kaW5nU3BoZXJlQ1YpJiZoKF8uYm91bmRpbmdTcGhlcmVDVikmJihjW2xdPXl0LnVuaW9uKG0uYm91bmRpbmdTcGhlcmVDVixfLmJvdW5kaW5nU3BoZXJlQ1YpKSl9cmV0dXJue2dlb21ldHJpZXM6ZSxtb2RlbE1hdHJpeDp0Lm1vZGVsTWF0cml4LGF0dHJpYnV0ZUxvY2F0aW9uczpuLHBpY2tPZmZzZXRzOmksb2Zmc2V0SW5zdGFuY2VFeHRlbmQ6cyxib3VuZGluZ1NwaGVyZXM6dSxib3VuZGluZ1NwaGVyZXNDVjpjfX07TmkucGFja0NyZWF0ZUdlb21ldHJ5UmVzdWx0cz1mdW5jdGlvbih0LGUpe2xldCBuPW5ldyBGbG9hdDY0QXJyYXkobE0odCkpLG89W10scj17fSxpPXQubGVuZ3RoLHM9MDtuW3MrK109aTtmb3IobGV0IGY9MDtmPGk7ZisrKXtsZXQgdT10W2ZdLGM9aCh1KTtpZihuW3MrK109Yz8xOjAsIWMpY29udGludWU7bltzKytdPXUucHJpbWl0aXZlVHlwZSxuW3MrK109dS5nZW9tZXRyeVR5cGUsbltzKytdPXgodS5vZmZzZXRBdHRyaWJ1dGUsLTEpO2xldCBsPWgodS5ib3VuZGluZ1NwaGVyZSk/MTowO25bcysrXT1sLGwmJnl0LnBhY2sodS5ib3VuZGluZ1NwaGVyZSxuLHMpLHMrPXl0LnBhY2tlZExlbmd0aDtsZXQgcD1oKHUuYm91bmRpbmdTcGhlcmVDVik/MTowO25bcysrXT1wLHAmJnl0LnBhY2sodS5ib3VuZGluZ1NwaGVyZUNWLG4scykscys9eXQucGFja2VkTGVuZ3RoO2xldCBkPXUuYXR0cmlidXRlcyxtPVtdO2ZvcihsZXQgZyBpbiBkKWQuaGFzT3duUHJvcGVydHkoZykmJmgoZFtnXSkmJihtLnB1c2goZyksaChyW2ddKXx8KHJbZ109by5sZW5ndGgsby5wdXNoKGcpKSk7bltzKytdPW0ubGVuZ3RoO2ZvcihsZXQgZz0wO2c8bS5sZW5ndGg7ZysrKXtsZXQgYj1tW2ddLE89ZFtiXTtuW3MrK109cltiXSxuW3MrK109Ty5jb21wb25lbnREYXRhdHlwZSxuW3MrK109Ty5jb21wb25lbnRzUGVyQXR0cmlidXRlLG5bcysrXT1PLm5vcm1hbGl6ZT8xOjAsbltzKytdPU8udmFsdWVzLmxlbmd0aCxuLnNldChPLnZhbHVlcyxzKSxzKz1PLnZhbHVlcy5sZW5ndGh9bGV0IF89aCh1LmluZGljZXMpP3UuaW5kaWNlcy5sZW5ndGg6MDtuW3MrK109XyxfPjAmJihuLnNldCh1LmluZGljZXMscykscys9Xyl9cmV0dXJuIGUucHVzaChuLmJ1ZmZlcikse3N0cmluZ1RhYmxlOm8scGFja2VkRGF0YTpufX07TmkudW5wYWNrQ3JlYXRlR2VvbWV0cnlSZXN1bHRzPWZ1bmN0aW9uKHQpe2xldCBlPXQuc3RyaW5nVGFibGUsbj10LnBhY2tlZERhdGEsbyxyPW5ldyBBcnJheShuWzBdKSxpPTAscz0xO2Zvcig7czxuLmxlbmd0aDspe2lmKCEobltzKytdPT09MSkpe3JbaSsrXT12b2lkIDA7Y29udGludWV9bGV0IHU9bltzKytdLGM9bltzKytdLGw9bltzKytdO2w9PT0tMSYmKGw9dm9pZCAwKTtsZXQgcCxkO25bcysrXT09PTEmJihwPXl0LnVucGFjayhuLHMpKSxzKz15dC5wYWNrZWRMZW5ndGgsbltzKytdPT09MSYmKGQ9eXQudW5wYWNrKG4scykpLHMrPXl0LnBhY2tlZExlbmd0aDtsZXQgZyxiLE8sVD1uZXcgcmUsRT1uW3MrK107Zm9yKG89MDtvPEU7bysrKXtsZXQgQz1lW25bcysrXV0sTj1uW3MrK107Tz1uW3MrK107bGV0IEk9bltzKytdIT09MDtnPW5bcysrXSxiPW90LmNyZWF0ZVR5cGVkQXJyYXkoTixnKTtmb3IobGV0IEw9MDtMPGc7TCsrKWJbTF09bltzKytdO1RbQ109bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpOLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Tyxub3JtYWxpemU6SSx2YWx1ZXM6Yn0pfWxldCB3O2lmKGc9bltzKytdLGc+MCl7bGV0IEM9Yi5sZW5ndGgvTztmb3Iodz1EdC5jcmVhdGVUeXBlZEFycmF5KEMsZyksbz0wO288ZztvKyspd1tvXT1uW3MrK119cltpKytdPW5ldyBGdCh7cHJpbWl0aXZlVHlwZTp1LGdlb21ldHJ5VHlwZTpjLGJvdW5kaW5nU3BoZXJlOnAsYm91bmRpbmdTcGhlcmVDVjpkLGluZGljZXM6dyxhdHRyaWJ1dGVzOlQsb2Zmc2V0QXR0cmlidXRlOmx9KX1yZXR1cm4gcn07TmkucGFja0NvbWJpbmVHZW9tZXRyeVBhcmFtZXRlcnM9ZnVuY3Rpb24odCxlKXtsZXQgbj10LmNyZWF0ZUdlb21ldHJ5UmVzdWx0cyxvPW4ubGVuZ3RoO2ZvcihsZXQgcj0wO3I8bztyKyspZS5wdXNoKG5bcl0ucGFja2VkRGF0YS5idWZmZXIpO3JldHVybntjcmVhdGVHZW9tZXRyeVJlc3VsdHM6dC5jcmVhdGVHZW9tZXRyeVJlc3VsdHMscGFja2VkSW5zdGFuY2VzOnBNKHQuaW5zdGFuY2VzLGUpLGVsbGlwc29pZDp0LmVsbGlwc29pZCxpc0dlb2dyYXBoaWM6dC5wcm9qZWN0aW9uIGluc3RhbmNlb2YgUW4sZWxlbWVudEluZGV4VWludFN1cHBvcnRlZDp0LmVsZW1lbnRJbmRleFVpbnRTdXBwb3J0ZWQsc2NlbmUzRE9ubHk6dC5zY2VuZTNET25seSx2ZXJ0ZXhDYWNoZU9wdGltaXplOnQudmVydGV4Q2FjaGVPcHRpbWl6ZSxjb21wcmVzc1ZlcnRpY2VzOnQuY29tcHJlc3NWZXJ0aWNlcyxtb2RlbE1hdHJpeDp0Lm1vZGVsTWF0cml4LGNyZWF0ZVBpY2tPZmZzZXRzOnQuY3JlYXRlUGlja09mZnNldHN9fTtOaS51bnBhY2tDb21iaW5lR2VvbWV0cnlQYXJhbWV0ZXJzPWZ1bmN0aW9uKHQpe2xldCBlPWRNKHQucGFja2VkSW5zdGFuY2VzKSxuPXQuY3JlYXRlR2VvbWV0cnlSZXN1bHRzLG89bi5sZW5ndGgscj0wO2ZvcihsZXQgZj0wO2Y8bztmKyspe2xldCB1PU5pLnVucGFja0NyZWF0ZUdlb21ldHJ5UmVzdWx0cyhuW2ZdKSxjPXUubGVuZ3RoO2ZvcihsZXQgbD0wO2w8YztsKyspe2xldCBwPXVbbF0sZD1lW3JdO2QuZ2VvbWV0cnk9cCwrK3J9fWxldCBpPSQuY2xvbmUodC5lbGxpcHNvaWQpLHM9dC5pc0dlb2dyYXBoaWM/bmV3IFFuKGkpOm5ldyBlbyhpKTtyZXR1cm57aW5zdGFuY2VzOmUsZWxsaXBzb2lkOmkscHJvamVjdGlvbjpzLGVsZW1lbnRJbmRleFVpbnRTdXBwb3J0ZWQ6dC5lbGVtZW50SW5kZXhVaW50U3VwcG9ydGVkLHNjZW5lM0RPbmx5OnQuc2NlbmUzRE9ubHksdmVydGV4Q2FjaGVPcHRpbWl6ZTp0LnZlcnRleENhY2hlT3B0aW1pemUsY29tcHJlc3NWZXJ0aWNlczp0LmNvbXByZXNzVmVydGljZXMsbW9kZWxNYXRyaXg6c3QuY2xvbmUodC5tb2RlbE1hdHJpeCksY3JlYXRlUGlja09mZnNldHM6dC5jcmVhdGVQaWNrT2Zmc2V0c319O05pLnBhY2tDb21iaW5lR2VvbWV0cnlSZXN1bHRzPWZ1bmN0aW9uKHQsZSl7aCh0Lmdlb21ldHJpZXMpJiZ1TSh0Lmdlb21ldHJpZXMsZSk7bGV0IG49WmIodC5ib3VuZGluZ1NwaGVyZXMpLG89WmIodC5ib3VuZGluZ1NwaGVyZXNDVik7cmV0dXJuIGUucHVzaChuLmJ1ZmZlcixvLmJ1ZmZlcikse2dlb21ldHJpZXM6dC5nZW9tZXRyaWVzLGF0dHJpYnV0ZUxvY2F0aW9uczp0LmF0dHJpYnV0ZUxvY2F0aW9ucyxtb2RlbE1hdHJpeDp0Lm1vZGVsTWF0cml4LHBpY2tPZmZzZXRzOnQucGlja09mZnNldHMsb2Zmc2V0SW5zdGFuY2VFeHRlbmQ6dC5vZmZzZXRJbnN0YW5jZUV4dGVuZCxib3VuZGluZ1NwaGVyZXM6bixib3VuZGluZ1NwaGVyZXNDVjpvfX07TmkudW5wYWNrQ29tYmluZUdlb21ldHJ5UmVzdWx0cz1mdW5jdGlvbih0KXtyZXR1cm57Z2VvbWV0cmllczp0Lmdlb21ldHJpZXMsYXR0cmlidXRlTG9jYXRpb25zOnQuYXR0cmlidXRlTG9jYXRpb25zLG1vZGVsTWF0cml4OnQubW9kZWxNYXRyaXgscGlja09mZnNldHM6dC5waWNrT2Zmc2V0cyxvZmZzZXRJbnN0YW5jZUV4dGVuZDp0Lm9mZnNldEluc3RhbmNlRXh0ZW5kLGJvdW5kaW5nU3BoZXJlczpRYih0LmJvdW5kaW5nU3BoZXJlcyksYm91bmRpbmdTcGhlcmVzQ1Y6UWIodC5ib3VuZGluZ1NwaGVyZXNDVil9fTtjYT1OaX0pO2Z1bmN0aW9uIG1NKHQpe2xldCBlLG49dC5uYW1lLG89dC5tZXNzYWdlO2gobikmJmgobyk/ZT1gJHtufTogJHtvfWA6ZT10LnRvU3RyaW5nKCk7bGV0IHI9dC5zdGFjaztyZXR1cm4gaChyKSYmKGUrPWAKJHtyfWApLGV9dmFyIEpiLHR3PVooKCk9PnthdCgpO0piPW1NfSk7dmFyICRoPXt9O21lKCRoLHtkZWZhdWx0OigpPT5RZX0pO2Z1bmN0aW9uIGhNKHQpe2FzeW5jIGZ1bmN0aW9uIGUoe2RhdGE6b30pe2xldCByPVtdLGk9e2lkOm8uaWQscmVzdWx0OnZvaWQgMCxlcnJvcjp2b2lkIDB9O3NlbGYuQ0VTSVVNX0JBU0VfVVJMPW8uYmFzZVVybDt0cnl7bGV0IHM9YXdhaXQgdChvLnBhcmFtZXRlcnMscik7aS5yZXN1bHQ9c31jYXRjaChzKXtzIGluc3RhbmNlb2YgRXJyb3I/aS5lcnJvcj17bmFtZTpzLm5hbWUsbWVzc2FnZTpzLm1lc3NhZ2Usc3RhY2s6cy5zdGFja306aS5lcnJvcj1zfW8uY2FuVHJhbnNmZXJBcnJheUJ1ZmZlcnx8KHIubGVuZ3RoPTApO3RyeXtwb3N0TWVzc2FnZShpLHIpfWNhdGNoKHMpe2kucmVzdWx0PXZvaWQgMCxpLmVycm9yPWBwb3N0TWVzc2FnZSBmYWlsZWQgd2l0aCBlcnJvcjogJHtKYihzKX0KICB3aXRoIHJlc3BvbnNlTWVzc2FnZTogJHtKU09OLnN0cmluZ2lmeShpKX1gLHBvc3RNZXNzYWdlKGkpfX1mdW5jdGlvbiBuKG8pe3Bvc3RNZXNzYWdlKHtpZDpvLmRhdGE/LmlkLGVycm9yOmBwb3N0TWVzc2FnZSBmYWlsZWQgd2l0aCBlcnJvcjogJHtKU09OLnN0cmluZ2lmeShvKX1gfSl9cmV0dXJuIHNlbGYub25tZXNzYWdlPWUsc2VsZi5vbm1lc3NhZ2VlcnJvcj1uLHNlbGZ9dmFyIFFlLHNvPVooKCk9Pnt0dygpO1FlPWhNfSk7dmFyIFpoPXt9O21lKFpoLHtkZWZhdWx0OigpPT55TX0pO2Z1bmN0aW9uIF9NKHQsZSl7bGV0IG49Y2EudW5wYWNrQ29tYmluZUdlb21ldHJ5UGFyYW1ldGVycyh0KSxvPWNhLmNvbWJpbmVHZW9tZXRyeShuKTtyZXR1cm4gY2EucGFja0NvbWJpbmVHZW9tZXRyeVJlc3VsdHMobyxlKX12YXIgeU0sUWg9WigoKT0+e1loKCk7c28oKTt5TT1RZShfTSl9KTt2YXIgZ00sYWUsRm89WigoKT0+e2dNPXtOT05FOjAsVE9QOjEsQUxMOjJ9LGFlPU9iamVjdC5mcmVlemUoZ00pfSk7ZnVuY3Rpb24gR24odCl7dD14KHQseC5FTVBUWV9PQkpFQ1QpLHRoaXMucG9zaXRpb249eCh0LnBvc2l0aW9uLCExKSx0aGlzLm5vcm1hbD14KHQubm9ybWFsLCExKSx0aGlzLnN0PXgodC5zdCwhMSksdGhpcy5iaXRhbmdlbnQ9eCh0LmJpdGFuZ2VudCwhMSksdGhpcy50YW5nZW50PXgodC50YW5nZW50LCExKSx0aGlzLmNvbG9yPXgodC5jb2xvciwhMSl9dmFyIGx0LFJvPVooKCk9PntJdCgpO2F0KCk7SHQoKTtHbi5QT1NJVElPTl9PTkxZPU9iamVjdC5mcmVlemUobmV3IEduKHtwb3NpdGlvbjohMH0pKTtHbi5QT1NJVElPTl9BTkRfTk9STUFMPU9iamVjdC5mcmVlemUobmV3IEduKHtwb3NpdGlvbjohMCxub3JtYWw6ITB9KSk7R24uUE9TSVRJT05fTk9STUFMX0FORF9TVD1PYmplY3QuZnJlZXplKG5ldyBHbih7cG9zaXRpb246ITAsbm9ybWFsOiEwLHN0OiEwfSkpO0duLlBPU0lUSU9OX0FORF9TVD1PYmplY3QuZnJlZXplKG5ldyBHbih7cG9zaXRpb246ITAsc3Q6ITB9KSk7R24uUE9TSVRJT05fQU5EX0NPTE9SPU9iamVjdC5mcmVlemUobmV3IEduKHtwb3NpdGlvbjohMCxjb2xvcjohMH0pKTtHbi5BTEw9T2JqZWN0LmZyZWV6ZShuZXcgR24oe3Bvc2l0aW9uOiEwLG5vcm1hbDohMCxzdDohMCx0YW5nZW50OiEwLGJpdGFuZ2VudDohMH0pKTtHbi5ERUZBVUxUPUduLlBPU0lUSU9OX05PUk1BTF9BTkRfU1Q7R24ucGFja2VkTGVuZ3RoPTY7R24ucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEIoInZhbHVlIGlzIHJlcXVpcmVkIik7aWYoIWgoZSkpdGhyb3cgbmV3IEIoImFycmF5IGlzIHJlcXVpcmVkIik7cmV0dXJuIG49eChuLDApLGVbbisrXT10LnBvc2l0aW9uPzE6MCxlW24rK109dC5ub3JtYWw/MTowLGVbbisrXT10LnN0PzE6MCxlW24rK109dC50YW5nZW50PzE6MCxlW24rK109dC5iaXRhbmdlbnQ/MTowLGVbbl09dC5jb2xvcj8xOjAsZX07R24udW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgQigiYXJyYXkgaXMgcmVxdWlyZWQiKTtyZXR1cm4gZT14KGUsMCksaChuKXx8KG49bmV3IEduKSxuLnBvc2l0aW9uPXRbZSsrXT09PTEsbi5ub3JtYWw9dFtlKytdPT09MSxuLnN0PXRbZSsrXT09PTEsbi50YW5nZW50PXRbZSsrXT09PTEsbi5iaXRhbmdlbnQ9dFtlKytdPT09MSxuLmNvbG9yPXRbZV09PT0xLG59O0duLmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYoaCh0KSlyZXR1cm4gaChlKXx8KGU9bmV3IEduKSxlLnBvc2l0aW9uPXQucG9zaXRpb24sZS5ub3JtYWw9dC5ub3JtYWwsZS5zdD10LnN0LGUudGFuZ2VudD10LnRhbmdlbnQsZS5iaXRhbmdlbnQ9dC5iaXRhbmdlbnQsZS5jb2xvcj10LmNvbG9yLGV9O2x0PUdufSk7ZnVuY3Rpb24gaXIodCl7dD14KHQseC5FTVBUWV9PQkpFQ1QpO2xldCBlPXQubWluaW11bSxuPXQubWF4aW11bTtpZih5LnR5cGVPZi5vYmplY3QoIm1pbiIsZSkseS50eXBlT2Yub2JqZWN0KCJtYXgiLG4pLGgodC5vZmZzZXRBdHRyaWJ1dGUpJiZ0Lm9mZnNldEF0dHJpYnV0ZT09PWFlLlRPUCl0aHJvdyBuZXcgQigiR2VvbWV0cnlPZmZzZXRBdHRyaWJ1dGUuVE9QIGlzIG5vdCBhIHN1cHBvcnRlZCBvcHRpb25zLm9mZnNldEF0dHJpYnV0ZSBmb3IgdGhpcyBnZW9tZXRyeS4iKTtsZXQgbz14KHQudmVydGV4Rm9ybWF0LGx0LkRFRkFVTFQpO3RoaXMuX21pbmltdW09YS5jbG9uZShlKSx0aGlzLl9tYXhpbXVtPWEuY2xvbmUobiksdGhpcy5fdmVydGV4Rm9ybWF0PW8sdGhpcy5fb2Zmc2V0QXR0cmlidXRlPXQub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUJveEdlb21ldHJ5In12YXIgQU0sbncsb3cscncsZXcsSmgsQ2YsdDA9WigoKT0+e1BlKCk7VXQoKTtZdCgpO0RlKCk7SXQoKTthdCgpO0h0KCk7WGUoKTtZZSgpO2FuKCk7Rm8oKTt0bigpO1JvKCk7QU09bmV3IGE7aXIuZnJvbURpbWVuc2lvbnM9ZnVuY3Rpb24odCl7dD14KHQseC5FTVBUWV9PQkpFQ1QpO2xldCBlPXQuZGltZW5zaW9uczt5LnR5cGVPZi5vYmplY3QoImRpbWVuc2lvbnMiLGUpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJkaW1lbnNpb25zLngiLGUueCwwKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiZGltZW5zaW9ucy55IixlLnksMCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImRpbWVuc2lvbnMueiIsZS56LDApO2xldCBuPWEubXVsdGlwbHlCeVNjYWxhcihlLC41LG5ldyBhKTtyZXR1cm4gbmV3IGlyKHttaW5pbXVtOmEubmVnYXRlKG4sbmV3IGEpLG1heGltdW06bix2ZXJ0ZXhGb3JtYXQ6dC52ZXJ0ZXhGb3JtYXQsb2Zmc2V0QXR0cmlidXRlOnQub2Zmc2V0QXR0cmlidXRlfSl9O2lyLmZyb21BeGlzQWxpZ25lZEJvdW5kaW5nQm94PWZ1bmN0aW9uKHQpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImJvdW5kaW5nQm94Iix0KSxuZXcgaXIoe21pbmltdW06dC5taW5pbXVtLG1heGltdW06dC5tYXhpbXVtfSl9O2lyLnBhY2tlZExlbmd0aD0yKmEucGFja2VkTGVuZ3RoK2x0LnBhY2tlZExlbmd0aCsxO2lyLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPXgobiwwKSxhLnBhY2sodC5fbWluaW11bSxlLG4pLGEucGFjayh0Ll9tYXhpbXVtLGUsbithLnBhY2tlZExlbmd0aCksbHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKzIqYS5wYWNrZWRMZW5ndGgpLGVbbisyKmEucGFja2VkTGVuZ3RoK2x0LnBhY2tlZExlbmd0aF09eCh0Ll9vZmZzZXRBdHRyaWJ1dGUsLTEpLGV9O253PW5ldyBhLG93PW5ldyBhLHJ3PW5ldyBsdCxldz17bWluaW11bTpudyxtYXhpbXVtOm93LHZlcnRleEZvcm1hdDpydyxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtpci51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9eChlLDApO2xldCBvPWEudW5wYWNrKHQsZSxudykscj1hLnVucGFjayh0LGUrYS5wYWNrZWRMZW5ndGgsb3cpLGk9bHQudW5wYWNrKHQsZSsyKmEucGFja2VkTGVuZ3RoLHJ3KSxzPXRbZSsyKmEucGFja2VkTGVuZ3RoK2x0LnBhY2tlZExlbmd0aF07cmV0dXJuIGgobik/KG4uX21pbmltdW09YS5jbG9uZShvLG4uX21pbmltdW0pLG4uX21heGltdW09YS5jbG9uZShyLG4uX21heGltdW0pLG4uX3ZlcnRleEZvcm1hdD1sdC5jbG9uZShpLG4uX3ZlcnRleEZvcm1hdCksbi5fb2Zmc2V0QXR0cmlidXRlPXM9PT0tMT92b2lkIDA6cyxuKTooZXcub2Zmc2V0QXR0cmlidXRlPXM9PT0tMT92b2lkIDA6cyxuZXcgaXIoZXcpKX07aXIuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fbWluaW11bSxuPXQuX21heGltdW0sbz10Ll92ZXJ0ZXhGb3JtYXQ7aWYoYS5lcXVhbHMoZSxuKSlyZXR1cm47bGV0IHI9bmV3IHJlLGkscztpZihvLnBvc2l0aW9uJiYoby5zdHx8by5ub3JtYWx8fG8udGFuZ2VudHx8by5iaXRhbmdlbnQpKXtpZihvLnBvc2l0aW9uJiYocz1uZXcgRmxvYXQ2NEFycmF5KDYqNCozKSxzWzBdPWUueCxzWzFdPWUueSxzWzJdPW4ueixzWzNdPW4ueCxzWzRdPWUueSxzWzVdPW4ueixzWzZdPW4ueCxzWzddPW4ueSxzWzhdPW4ueixzWzldPWUueCxzWzEwXT1uLnksc1sxMV09bi56LHNbMTJdPWUueCxzWzEzXT1lLnksc1sxNF09ZS56LHNbMTVdPW4ueCxzWzE2XT1lLnksc1sxN109ZS56LHNbMThdPW4ueCxzWzE5XT1uLnksc1syMF09ZS56LHNbMjFdPWUueCxzWzIyXT1uLnksc1syM109ZS56LHNbMjRdPW4ueCxzWzI1XT1lLnksc1syNl09ZS56LHNbMjddPW4ueCxzWzI4XT1uLnksc1syOV09ZS56LHNbMzBdPW4ueCxzWzMxXT1uLnksc1szMl09bi56LHNbMzNdPW4ueCxzWzM0XT1lLnksc1szNV09bi56LHNbMzZdPWUueCxzWzM3XT1lLnksc1szOF09ZS56LHNbMzldPWUueCxzWzQwXT1uLnksc1s0MV09ZS56LHNbNDJdPWUueCxzWzQzXT1uLnksc1s0NF09bi56LHNbNDVdPWUueCxzWzQ2XT1lLnksc1s0N109bi56LHNbNDhdPWUueCxzWzQ5XT1uLnksc1s1MF09ZS56LHNbNTFdPW4ueCxzWzUyXT1uLnksc1s1M109ZS56LHNbNTRdPW4ueCxzWzU1XT1uLnksc1s1Nl09bi56LHNbNTddPWUueCxzWzU4XT1uLnksc1s1OV09bi56LHNbNjBdPWUueCxzWzYxXT1lLnksc1s2Ml09ZS56LHNbNjNdPW4ueCxzWzY0XT1lLnksc1s2NV09ZS56LHNbNjZdPW4ueCxzWzY3XT1lLnksc1s2OF09bi56LHNbNjldPWUueCxzWzcwXT1lLnksc1s3MV09bi56LHIucG9zaXRpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpzfSkpLG8ubm9ybWFsKXtsZXQgYz1uZXcgRmxvYXQzMkFycmF5KDcyKTtjWzBdPTAsY1sxXT0wLGNbMl09MSxjWzNdPTAsY1s0XT0wLGNbNV09MSxjWzZdPTAsY1s3XT0wLGNbOF09MSxjWzldPTAsY1sxMF09MCxjWzExXT0xLGNbMTJdPTAsY1sxM109MCxjWzE0XT0tMSxjWzE1XT0wLGNbMTZdPTAsY1sxN109LTEsY1sxOF09MCxjWzE5XT0wLGNbMjBdPS0xLGNbMjFdPTAsY1syMl09MCxjWzIzXT0tMSxjWzI0XT0xLGNbMjVdPTAsY1syNl09MCxjWzI3XT0xLGNbMjhdPTAsY1syOV09MCxjWzMwXT0xLGNbMzFdPTAsY1szMl09MCxjWzMzXT0xLGNbMzRdPTAsY1szNV09MCxjWzM2XT0tMSxjWzM3XT0wLGNbMzhdPTAsY1szOV09LTEsY1s0MF09MCxjWzQxXT0wLGNbNDJdPS0xLGNbNDNdPTAsY1s0NF09MCxjWzQ1XT0tMSxjWzQ2XT0wLGNbNDddPTAsY1s0OF09MCxjWzQ5XT0xLGNbNTBdPTAsY1s1MV09MCxjWzUyXT0xLGNbNTNdPTAsY1s1NF09MCxjWzU1XT0xLGNbNTZdPTAsY1s1N109MCxjWzU4XT0xLGNbNTldPTAsY1s2MF09MCxjWzYxXT0tMSxjWzYyXT0wLGNbNjNdPTAsY1s2NF09LTEsY1s2NV09MCxjWzY2XT0wLGNbNjddPS0xLGNbNjhdPTAsY1s2OV09MCxjWzcwXT0tMSxjWzcxXT0wLHIubm9ybWFsPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpjfSl9aWYoby5zdCl7bGV0IGM9bmV3IEZsb2F0MzJBcnJheSg0OCk7Y1swXT0wLGNbMV09MCxjWzJdPTEsY1szXT0wLGNbNF09MSxjWzVdPTEsY1s2XT0wLGNbN109MSxjWzhdPTEsY1s5XT0wLGNbMTBdPTAsY1sxMV09MCxjWzEyXT0wLGNbMTNdPTEsY1sxNF09MSxjWzE1XT0xLGNbMTZdPTAsY1sxN109MCxjWzE4XT0xLGNbMTldPTAsY1syMF09MSxjWzIxXT0xLGNbMjJdPTAsY1syM109MSxjWzI0XT0xLGNbMjVdPTAsY1syNl09MCxjWzI3XT0wLGNbMjhdPTAsY1syOV09MSxjWzMwXT0xLGNbMzFdPTEsY1szMl09MSxjWzMzXT0wLGNbMzRdPTAsY1szNV09MCxjWzM2XT0wLGNbMzddPTEsY1szOF09MSxjWzM5XT0xLGNbNDBdPTAsY1s0MV09MCxjWzQyXT0xLGNbNDNdPTAsY1s0NF09MSxjWzQ1XT0xLGNbNDZdPTAsY1s0N109MSxyLnN0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpjfSl9aWYoby50YW5nZW50KXtsZXQgYz1uZXcgRmxvYXQzMkFycmF5KDcyKTtjWzBdPTEsY1sxXT0wLGNbMl09MCxjWzNdPTEsY1s0XT0wLGNbNV09MCxjWzZdPTEsY1s3XT0wLGNbOF09MCxjWzldPTEsY1sxMF09MCxjWzExXT0wLGNbMTJdPS0xLGNbMTNdPTAsY1sxNF09MCxjWzE1XT0tMSxjWzE2XT0wLGNbMTddPTAsY1sxOF09LTEsY1sxOV09MCxjWzIwXT0wLGNbMjFdPS0xLGNbMjJdPTAsY1syM109MCxjWzI0XT0wLGNbMjVdPTEsY1syNl09MCxjWzI3XT0wLGNbMjhdPTEsY1syOV09MCxjWzMwXT0wLGNbMzFdPTEsY1szMl09MCxjWzMzXT0wLGNbMzRdPTEsY1szNV09MCxjWzM2XT0wLGNbMzddPS0xLGNbMzhdPTAsY1szOV09MCxjWzQwXT0tMSxjWzQxXT0wLGNbNDJdPTAsY1s0M109LTEsY1s0NF09MCxjWzQ1XT0wLGNbNDZdPS0xLGNbNDddPTAsY1s0OF09LTEsY1s0OV09MCxjWzUwXT0wLGNbNTFdPS0xLGNbNTJdPTAsY1s1M109MCxjWzU0XT0tMSxjWzU1XT0wLGNbNTZdPTAsY1s1N109LTEsY1s1OF09MCxjWzU5XT0wLGNbNjBdPTEsY1s2MV09MCxjWzYyXT0wLGNbNjNdPTEsY1s2NF09MCxjWzY1XT0wLGNbNjZdPTEsY1s2N109MCxjWzY4XT0wLGNbNjldPTEsY1s3MF09MCxjWzcxXT0wLHIudGFuZ2VudD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Y30pfWlmKG8uYml0YW5nZW50KXtsZXQgYz1uZXcgRmxvYXQzMkFycmF5KDcyKTtjWzBdPTAsY1sxXT0xLGNbMl09MCxjWzNdPTAsY1s0XT0xLGNbNV09MCxjWzZdPTAsY1s3XT0xLGNbOF09MCxjWzldPTAsY1sxMF09MSxjWzExXT0wLGNbMTJdPTAsY1sxM109MSxjWzE0XT0wLGNbMTVdPTAsY1sxNl09MSxjWzE3XT0wLGNbMThdPTAsY1sxOV09MSxjWzIwXT0wLGNbMjFdPTAsY1syMl09MSxjWzIzXT0wLGNbMjRdPTAsY1syNV09MCxjWzI2XT0xLGNbMjddPTAsY1syOF09MCxjWzI5XT0xLGNbMzBdPTAsY1szMV09MCxjWzMyXT0xLGNbMzNdPTAsY1szNF09MCxjWzM1XT0xLGNbMzZdPTAsY1szN109MCxjWzM4XT0xLGNbMzldPTAsY1s0MF09MCxjWzQxXT0xLGNbNDJdPTAsY1s0M109MCxjWzQ0XT0xLGNbNDVdPTAsY1s0Nl09MCxjWzQ3XT0xLGNbNDhdPTAsY1s0OV09MCxjWzUwXT0xLGNbNTFdPTAsY1s1Ml09MCxjWzUzXT0xLGNbNTRdPTAsY1s1NV09MCxjWzU2XT0xLGNbNTddPTAsY1s1OF09MCxjWzU5XT0xLGNbNjBdPTAsY1s2MV09MCxjWzYyXT0xLGNbNjNdPTAsY1s2NF09MCxjWzY1XT0xLGNbNjZdPTAsY1s2N109MCxjWzY4XT0xLGNbNjldPTAsY1s3MF09MCxjWzcxXT0xLHIuYml0YW5nZW50PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpjfSl9aT1uZXcgVWludDE2QXJyYXkoNioyKjMpLGlbMF09MCxpWzFdPTEsaVsyXT0yLGlbM109MCxpWzRdPTIsaVs1XT0zLGlbNl09NixpWzddPTUsaVs4XT00LGlbOV09NyxpWzEwXT02LGlbMTFdPTQsaVsxMl09OCxpWzEzXT05LGlbMTRdPTEwLGlbMTVdPTgsaVsxNl09MTAsaVsxN109MTEsaVsxOF09MTQsaVsxOV09MTMsaVsyMF09MTIsaVsyMV09MTUsaVsyMl09MTQsaVsyM109MTIsaVsyNF09MTgsaVsyNV09MTcsaVsyNl09MTYsaVsyN109MTksaVsyOF09MTgsaVsyOV09MTYsaVszMF09MjAsaVszMV09MjEsaVszMl09MjIsaVszM109MjAsaVszNF09MjIsaVszNV09MjN9ZWxzZSBzPW5ldyBGbG9hdDY0QXJyYXkoOCozKSxzWzBdPWUueCxzWzFdPWUueSxzWzJdPWUueixzWzNdPW4ueCxzWzRdPWUueSxzWzVdPWUueixzWzZdPW4ueCxzWzddPW4ueSxzWzhdPWUueixzWzldPWUueCxzWzEwXT1uLnksc1sxMV09ZS56LHNbMTJdPWUueCxzWzEzXT1lLnksc1sxNF09bi56LHNbMTVdPW4ueCxzWzE2XT1lLnksc1sxN109bi56LHNbMThdPW4ueCxzWzE5XT1uLnksc1syMF09bi56LHNbMjFdPWUueCxzWzIyXT1uLnksc1syM109bi56LHIucG9zaXRpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpzfSksaT1uZXcgVWludDE2QXJyYXkoNioyKjMpLGlbMF09NCxpWzFdPTUsaVsyXT02LGlbM109NCxpWzRdPTYsaVs1XT03LGlbNl09MSxpWzddPTAsaVs4XT0zLGlbOV09MSxpWzEwXT0zLGlbMTFdPTIsaVsxMl09MSxpWzEzXT02LGlbMTRdPTUsaVsxNV09MSxpWzE2XT0yLGlbMTddPTYsaVsxOF09MixpWzE5XT0zLGlbMjBdPTcsaVsyMV09MixpWzIyXT03LGlbMjNdPTYsaVsyNF09MyxpWzI1XT0wLGlbMjZdPTQsaVsyN109MyxpWzI4XT00LGlbMjldPTcsaVszMF09MCxpWzMxXT0xLGlbMzJdPTUsaVszM109MCxpWzM0XT01LGlbMzVdPTQ7bGV0IGY9YS5zdWJ0cmFjdChuLGUsQU0pLHU9YS5tYWduaXR1ZGUoZikqLjU7aWYoaCh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgYz1zLmxlbmd0aCxsPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxLHA9bmV3IFVpbnQ4QXJyYXkoYy8zKS5maWxsKGwpO3IuYXBwbHlPZmZzZXQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6cH0pfXJldHVybiBuZXcgRnQoe2F0dHJpYnV0ZXM6cixpbmRpY2VzOmkscHJpbWl0aXZlVHlwZTpMdC5UUklBTkdMRVMsYm91bmRpbmdTcGhlcmU6bmV3IHl0KGEuWkVSTyx1KSxvZmZzZXRBdHRyaWJ1dGU6dC5fb2Zmc2V0QXR0cmlidXRlfSl9O2lyLmdldFVuaXRCb3g9ZnVuY3Rpb24oKXtyZXR1cm4gaChKaCl8fChKaD1pci5jcmVhdGVHZW9tZXRyeShpci5mcm9tRGltZW5zaW9ucyh7ZGltZW5zaW9uczpuZXcgYSgxLDEsMSksdmVydGV4Rm9ybWF0Omx0LlBPU0lUSU9OX09OTFl9KSkpLEpofTtDZj1pcn0pO3ZhciBlMD17fTttZShlMCx7ZGVmYXVsdDooKT0+d019KTtmdW5jdGlvbiBiTSh0LGUpe3JldHVybiBoKGUpJiYodD1DZi51bnBhY2sodCxlKSksQ2YuY3JlYXRlR2VvbWV0cnkodCl9dmFyIHdNLG4wPVooKCk9Pnt0MCgpO2F0KCk7d009Yk19KTtmdW5jdGlvbiBjaSh0KXt0PXgodCx4LkVNUFRZX09CSkVDVCk7bGV0IGU9dC5taW5pbXVtLG49dC5tYXhpbXVtO2lmKHkudHlwZU9mLm9iamVjdCgibWluIixlKSx5LnR5cGVPZi5vYmplY3QoIm1heCIsbiksaCh0Lm9mZnNldEF0dHJpYnV0ZSkmJnQub2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QKXRocm93IG5ldyBCKCJHZW9tZXRyeU9mZnNldEF0dHJpYnV0ZS5UT1AgaXMgbm90IGEgc3VwcG9ydGVkIG9wdGlvbnMub2Zmc2V0QXR0cmlidXRlIGZvciB0aGlzIGdlb21ldHJ5LiIpO3RoaXMuX21pbj1hLmNsb25lKGUpLHRoaXMuX21heD1hLmNsb25lKG4pLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVCb3hPdXRsaW5lR2VvbWV0cnkifXZhciBUTSxzdyxjdyxpdyxvMCxhdz1aKCgpPT57UGUoKTtVdCgpO1l0KCk7RGUoKTtJdCgpO2F0KCk7SHQoKTtYZSgpO1llKCk7YW4oKTtGbygpO3RuKCk7VE09bmV3IGE7Y2kuZnJvbURpbWVuc2lvbnM9ZnVuY3Rpb24odCl7dD14KHQseC5FTVBUWV9PQkpFQ1QpO2xldCBlPXQuZGltZW5zaW9uczt5LnR5cGVPZi5vYmplY3QoImRpbWVuc2lvbnMiLGUpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJkaW1lbnNpb25zLngiLGUueCwwKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiZGltZW5zaW9ucy55IixlLnksMCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImRpbWVuc2lvbnMueiIsZS56LDApO2xldCBuPWEubXVsdGlwbHlCeVNjYWxhcihlLC41LG5ldyBhKTtyZXR1cm4gbmV3IGNpKHttaW5pbXVtOmEubmVnYXRlKG4sbmV3IGEpLG1heGltdW06bixvZmZzZXRBdHRyaWJ1dGU6dC5vZmZzZXRBdHRyaWJ1dGV9KX07Y2kuZnJvbUF4aXNBbGlnbmVkQm91bmRpbmdCb3g9ZnVuY3Rpb24odCl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiYm91bmRpbmRCb3giLHQpLG5ldyBjaSh7bWluaW11bTp0Lm1pbmltdW0sbWF4aW11bTp0Lm1heGltdW19KX07Y2kucGFja2VkTGVuZ3RoPTIqYS5wYWNrZWRMZW5ndGgrMTtjaS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj14KG4sMCksYS5wYWNrKHQuX21pbixlLG4pLGEucGFjayh0Ll9tYXgsZSxuK2EucGFja2VkTGVuZ3RoKSxlW24rYS5wYWNrZWRMZW5ndGgqMl09eCh0Ll9vZmZzZXRBdHRyaWJ1dGUsLTEpLGV9O3N3PW5ldyBhLGN3PW5ldyBhLGl3PXttaW5pbXVtOnN3LG1heGltdW06Y3csb2Zmc2V0QXR0cmlidXRlOnZvaWQgMH07Y2kudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSxlPXgoZSwwKTtsZXQgbz1hLnVucGFjayh0LGUsc3cpLHI9YS51bnBhY2sodCxlK2EucGFja2VkTGVuZ3RoLGN3KSxpPXRbZSthLnBhY2tlZExlbmd0aCoyXTtyZXR1cm4gaChuKT8obi5fbWluPWEuY2xvbmUobyxuLl9taW4pLG4uX21heD1hLmNsb25lKHIsbi5fbWF4KSxuLl9vZmZzZXRBdHRyaWJ1dGU9aT09PS0xP3ZvaWQgMDppLG4pOihpdy5vZmZzZXRBdHRyaWJ1dGU9aT09PS0xP3ZvaWQgMDppLG5ldyBjaShpdykpfTtjaS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll9taW4sbj10Ll9tYXg7aWYoYS5lcXVhbHMoZSxuKSlyZXR1cm47bGV0IG89bmV3IHJlLHI9bmV3IFVpbnQxNkFycmF5KDEyKjIpLGk9bmV3IEZsb2F0NjRBcnJheSg4KjMpO2lbMF09ZS54LGlbMV09ZS55LGlbMl09ZS56LGlbM109bi54LGlbNF09ZS55LGlbNV09ZS56LGlbNl09bi54LGlbN109bi55LGlbOF09ZS56LGlbOV09ZS54LGlbMTBdPW4ueSxpWzExXT1lLnosaVsxMl09ZS54LGlbMTNdPWUueSxpWzE0XT1uLnosaVsxNV09bi54LGlbMTZdPWUueSxpWzE3XT1uLnosaVsxOF09bi54LGlbMTldPW4ueSxpWzIwXT1uLnosaVsyMV09ZS54LGlbMjJdPW4ueSxpWzIzXT1uLnosby5wb3NpdGlvbj1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOml9KSxyWzBdPTQsclsxXT01LHJbMl09NSxyWzNdPTYscls0XT02LHJbNV09NyxyWzZdPTcscls3XT00LHJbOF09MCxyWzldPTEsclsxMF09MSxyWzExXT0yLHJbMTJdPTIsclsxM109MyxyWzE0XT0zLHJbMTVdPTAsclsxNl09MCxyWzE3XT00LHJbMThdPTEsclsxOV09NSxyWzIwXT0yLHJbMjFdPTYsclsyMl09MyxyWzIzXT03O2xldCBzPWEuc3VidHJhY3QobixlLFRNKSxmPWEubWFnbml0dWRlKHMpKi41O2lmKGgodC5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IHU9aS5sZW5ndGgsYz10Ll9vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MSxsPW5ldyBVaW50OEFycmF5KHUvMykuZmlsbChjKTtvLmFwcGx5T2Zmc2V0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOmx9KX1yZXR1cm4gbmV3IEZ0KHthdHRyaWJ1dGVzOm8saW5kaWNlczpyLHByaW1pdGl2ZVR5cGU6THQuTElORVMsYm91bmRpbmdTcGhlcmU6bmV3IHl0KGEuWkVSTyxmKSxvZmZzZXRBdHRyaWJ1dGU6dC5fb2Zmc2V0QXR0cmlidXRlfSl9O28wPWNpfSk7dmFyIHIwPXt9O21lKHIwLHtkZWZhdWx0OigpPT5FTX0pO2Z1bmN0aW9uIE9NKHQsZSl7cmV0dXJuIGgoZSkmJih0PW8wLnVucGFjayh0LGUpKSxvMC5jcmVhdGVHZW9tZXRyeSh0KX12YXIgRU0saTA9WigoKT0+e2F3KCk7YXQoKTtFTT1PTX0pO2Z1bmN0aW9uIGFhKHQsZSxuLG8scixpLHMsZix1LGMpe2xldCBsPXQrZTthLm11bHRpcGx5QnlTY2FsYXIobyxNYXRoLmNvcyhsKSxxcCksYS5tdWx0aXBseUJ5U2NhbGFyKG4sTWF0aC5zaW4obCksZncpLGEuYWRkKHFwLGZ3LHFwKTtsZXQgcD1NYXRoLmNvcyh0KTtwPXAqcDtsZXQgZD1NYXRoLnNpbih0KTtkPWQqZDtsZXQgXz1pL01hdGguc3FydChzKnArcipkKS9mO3JldHVybiBuZS5mcm9tQXhpc0FuZ2xlKHFwLF8sdXcpLHR0LmZyb21RdWF0ZXJuaW9uKHV3LGx3KSx0dC5tdWx0aXBseUJ5VmVjdG9yKGx3LHUsYyksYS5ub3JtYWxpemUoYyxjKSxhLm11bHRpcGx5QnlTY2FsYXIoYyxmLGMpLGN9dmFyIGMwLHFwLGZ3LHV3LGx3LHB3LGR3LHMwLFJNLFNNLENNLHhNLGtyLGEwPVooKCk9PntVdCgpO1d0KCk7Rm4oKTskbygpO2MwPXt9LHFwPW5ldyBhLGZ3PW5ldyBhLHV3PW5ldyBuZSxsdz1uZXcgdHQ7cHc9bmV3IGEsZHc9bmV3IGEsczA9bmV3IGEsUk09bmV3IGE7YzAucmFpc2VQb3NpdGlvbnNUb0hlaWdodD1mdW5jdGlvbih0LGUsbil7bGV0IG89ZS5lbGxpcHNvaWQscj1lLmhlaWdodCxpPWUuZXh0cnVkZWRIZWlnaHQscz1uP3QubGVuZ3RoLzMqMjp0Lmxlbmd0aC8zLGY9bmV3IEZsb2F0NjRBcnJheShzKjMpLHU9dC5sZW5ndGgsYz1uP3U6MDtmb3IobGV0IGw9MDtsPHU7bCs9Myl7bGV0IHA9bCsxLGQ9bCsyLG09YS5mcm9tQXJyYXkodCxsLHB3KTtvLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UobSxtKTtsZXQgXz1hLmNsb25lKG0sZHcpLGc9by5nZW9kZXRpY1N1cmZhY2VOb3JtYWwobSxSTSksYj1hLm11bHRpcGx5QnlTY2FsYXIoZyxyLHMwKTthLmFkZChtLGIsbSksbiYmKGEubXVsdGlwbHlCeVNjYWxhcihnLGksYiksYS5hZGQoXyxiLF8pLGZbbCtjXT1fLngsZltwK2NdPV8ueSxmW2QrY109Xy56KSxmW2xdPW0ueCxmW3BdPW0ueSxmW2RdPW0uen1yZXR1cm4gZn07U009bmV3IGEsQ009bmV3IGEseE09bmV3IGE7YzAuY29tcHV0ZUVsbGlwc2VQb3NpdGlvbnM9ZnVuY3Rpb24odCxlLG4pe2xldCBvPXQuc2VtaU1pbm9yQXhpcyxyPXQuc2VtaU1ham9yQXhpcyxpPXQucm90YXRpb24scz10LmNlbnRlcixmPXQuZ3JhbnVsYXJpdHkqOCx1PW8qbyxjPXIqcixsPXIqbyxwPWEubWFnbml0dWRlKHMpLGQ9YS5ub3JtYWxpemUocyxTTSksbT1hLmNyb3NzKGEuVU5JVF9aLHMsQ00pO209YS5ub3JtYWxpemUobSxtKTtsZXQgXz1hLmNyb3NzKGQsbSx4TSksZz0xK01hdGguY2VpbChNLlBJX09WRVJfVFdPL2YpLGI9TS5QSV9PVkVSX1RXTy8oZy0xKSxPPU0uUElfT1ZFUl9UV08tZypiO088MCYmKGctPU1hdGguY2VpbChNYXRoLmFicyhPKS9iKSk7bGV0IFQ9MiooZyooZysyKSksRT1lP25ldyBBcnJheShUKjMpOnZvaWQgMCx3PTAsQz1wdyxOPWR3LEk9Zyo0KjMsTD1JLTEsdj0wLEQ9bj9uZXcgQXJyYXkoSSk6dm9pZCAwLFUsQSxTLFAsRjtmb3IoTz1NLlBJX09WRVJfVFdPLEM9YWEoTyxpLF8sbSx1LGwsYyxwLGQsQyksZSYmKEVbdysrXT1DLngsRVt3KytdPUMueSxFW3crK109Qy56KSxuJiYoRFtMLS1dPUMueixEW0wtLV09Qy55LERbTC0tXT1DLngpLE89TS5QSV9PVkVSX1RXTy1iLFU9MTtVPGcrMTsrK1Upe2lmKEM9YWEoTyxpLF8sbSx1LGwsYyxwLGQsQyksTj1hYShNYXRoLlBJLU8saSxfLG0sdSxsLGMscCxkLE4pLGUpe2ZvcihFW3crK109Qy54LEVbdysrXT1DLnksRVt3KytdPUMueixTPTIqVSsyLEE9MTtBPFMtMTsrK0EpUD1BLyhTLTEpLEY9YS5sZXJwKEMsTixQLHMwKSxFW3crK109Ri54LEVbdysrXT1GLnksRVt3KytdPUYuejtFW3crK109Ti54LEVbdysrXT1OLnksRVt3KytdPU4uen1uJiYoRFtMLS1dPUMueixEW0wtLV09Qy55LERbTC0tXT1DLngsRFt2KytdPU4ueCxEW3YrK109Ti55LERbdisrXT1OLnopLE89TS5QSV9PVkVSX1RXTy0oVSsxKSpifWZvcihVPWc7VT4xOy0tVSl7aWYoTz1NLlBJX09WRVJfVFdPLShVLTEpKmIsQz1hYSgtTyxpLF8sbSx1LGwsYyxwLGQsQyksTj1hYShPK01hdGguUEksaSxfLG0sdSxsLGMscCxkLE4pLGUpe2ZvcihFW3crK109Qy54LEVbdysrXT1DLnksRVt3KytdPUMueixTPTIqKFUtMSkrMixBPTE7QTxTLTE7KytBKVA9QS8oUy0xKSxGPWEubGVycChDLE4sUCxzMCksRVt3KytdPUYueCxFW3crK109Ri55LEVbdysrXT1GLno7RVt3KytdPU4ueCxFW3crK109Ti55LEVbdysrXT1OLnp9biYmKERbTC0tXT1DLnosRFtMLS1dPUMueSxEW0wtLV09Qy54LERbdisrXT1OLngsRFt2KytdPU4ueSxEW3YrK109Ti56KX1PPU0uUElfT1ZFUl9UV08sQz1hYSgtTyxpLF8sbSx1LGwsYyxwLGQsQyk7bGV0IGo9e307cmV0dXJuIGUmJihFW3crK109Qy54LEVbdysrXT1DLnksRVt3KytdPUMueixqLnBvc2l0aW9ucz1FLGoubnVtUHRzPWcpLG4mJihEW0wtLV09Qy56LERbTC0tXT1DLnksRFtMLS1dPUMueCxqLm91dGVyUG9zaXRpb25zPUQpLGp9O2tyPWMwfSk7ZnVuY3Rpb24gUE0odCl7aWYodD14KHQseC5FTVBUWV9PQkpFQ1QpLCFoKHQuZ2VvbWV0cnkpKXRocm93IG5ldyBCKCJvcHRpb25zLmdlb21ldHJ5IGlzIHJlcXVpcmVkLiIpO3RoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzLm1vZGVsTWF0cml4PXN0LmNsb25lKHgodC5tb2RlbE1hdHJpeCxzdC5JREVOVElUWSkpLHRoaXMuaWQ9dC5pZCx0aGlzLnBpY2tQcmltaXRpdmU9dC5waWNrUHJpbWl0aXZlLHRoaXMuYXR0cmlidXRlcz14KHQuYXR0cmlidXRlcyx7fSksdGhpcy53ZXN0SGVtaXNwaGVyZUdlb21ldHJ5PXZvaWQgMCx0aGlzLmVhc3RIZW1pc3BoZXJlR2VvbWV0cnk9dm9pZCAwfXZhciBjbyxzYz1aKCgpPT57SXQoKTthdCgpO0h0KCk7a24oKTtjbz1QTX0pO2Z1bmN0aW9uIFR3KHQsZSxuKXtsZXQgbz1lLnZlcnRleEZvcm1hdCxyPWUuY2VudGVyLGk9ZS5zZW1pTWFqb3JBeGlzLHM9ZS5zZW1pTWlub3JBeGlzLGY9ZS5lbGxpcHNvaWQsdT1lLnN0Um90YXRpb24sYz1uP3QubGVuZ3RoLzMqMjp0Lmxlbmd0aC8zLGw9ZS5zaGFkb3dWb2x1bWUscD1vLnN0P25ldyBGbG9hdDMyQXJyYXkoYyoyKTp2b2lkIDAsZD1vLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KGMqMyk6dm9pZCAwLG09by50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoYyozKTp2b2lkIDAsXz1vLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KGMqMyk6dm9pZCAwLGc9bD9uZXcgRmxvYXQzMkFycmF5KGMqMyk6dm9pZCAwLGI9MCxPPV93LFQ9eXcsRT1ndyx3PW5ldyBRbihmKSxDPXcucHJvamVjdChmLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHIsWHApLEF3KSxOPWYuc2NhbGVUb0dlb2RldGljU3VyZmFjZShyLGZhKTtmLmdlb2RldGljU3VyZmFjZU5vcm1hbChOLE4pO2xldCBJPWh3LEw9TU07aWYodSE9PTApe2xldCBGPW5lLmZyb21BeGlzQW5nbGUoTix1LGwwKTtJPXR0LmZyb21RdWF0ZXJuaW9uKEYsSSksRj1uZS5mcm9tQXhpc0FuZ2xlKE4sLXUsbDApLEw9dHQuZnJvbVF1YXRlcm5pb24oRixMKX1lbHNlIEk9dHQuY2xvbmUodHQuSURFTlRJVFksSSksTD10dC5jbG9uZSh0dC5JREVOVElUWSxMKTtsZXQgdj1udC5mcm9tRWxlbWVudHMoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxidyksRD1udC5mcm9tRWxlbWVudHMoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLE51bWJlci5ORUdBVElWRV9JTkZJTklUWSx3dyksVT10Lmxlbmd0aCxBPW4/VTowLFM9QS8zKjI7Zm9yKGxldCBGPTA7RjxVO0YrPTMpe2xldCBqPUYrMSxIPUYrMixrPWEuZnJvbUFycmF5KHQsRixmYSk7aWYoby5zdCl7bGV0IEs9dHQubXVsdGlwbHlCeVZlY3RvcihJLGssZjApLFg9dy5wcm9qZWN0KGYuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoSyxYcCksdTApO2Euc3VidHJhY3QoWCxDLFgpLFluLng9KFgueCtpKS8oMippKSxZbi55PShYLnkrcykvKDIqcyksdi54PU1hdGgubWluKFluLngsdi54KSx2Lnk9TWF0aC5taW4oWW4ueSx2LnkpLEQueD1NYXRoLm1heChZbi54LEQueCksRC55PU1hdGgubWF4KFluLnksRC55KSxuJiYocFtiK1NdPVluLngscFtiKzErU109WW4ueSkscFtiKytdPVluLngscFtiKytdPVluLnl9KG8ubm9ybWFsfHxvLnRhbmdlbnR8fG8uYml0YW5nZW50fHxsKSYmKE89Zi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoayxPKSxsJiYoZ1tGK0FdPS1PLngsZ1tqK0FdPS1PLnksZ1tIK0FdPS1PLnopLChvLm5vcm1hbHx8by50YW5nZW50fHxvLmJpdGFuZ2VudCkmJigoby50YW5nZW50fHxvLmJpdGFuZ2VudCkmJihUPWEubm9ybWFsaXplKGEuY3Jvc3MoYS5VTklUX1osTyxUKSxUKSx0dC5tdWx0aXBseUJ5VmVjdG9yKEwsVCxUKSksby5ub3JtYWwmJihkW0ZdPU8ueCxkW2pdPU8ueSxkW0hdPU8ueixuJiYoZFtGK0FdPS1PLngsZFtqK0FdPS1PLnksZFtIK0FdPS1PLnopKSxvLnRhbmdlbnQmJihtW0ZdPVQueCxtW2pdPVQueSxtW0hdPVQueixuJiYobVtGK0FdPS1ULngsbVtqK0FdPS1ULnksbVtIK0FdPS1ULnopKSxvLmJpdGFuZ2VudCYmKEU9YS5ub3JtYWxpemUoYS5jcm9zcyhPLFQsRSksRSksX1tGXT1FLngsX1tqXT1FLnksX1tIXT1FLnosbiYmKF9bRitBXT1FLngsX1tqK0FdPUUueSxfW0grQV09RS56KSkpKX1pZihvLnN0KXtVPXAubGVuZ3RoO2ZvcihsZXQgRj0wO0Y8VTtGKz0yKXBbRl09KHBbRl0tdi54KS8oRC54LXYueCkscFtGKzFdPShwW0YrMV0tdi55KS8oRC55LXYueSl9bGV0IFA9bmV3IHJlO2lmKG8ucG9zaXRpb24pe2xldCBGPWtyLnJhaXNlUG9zaXRpb25zVG9IZWlnaHQodCxlLG4pO1AucG9zaXRpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpGfSl9aWYoby5zdCYmKFAuc3Q9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOnB9KSksby5ub3JtYWwmJihQLm5vcm1hbD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6ZH0pKSxvLnRhbmdlbnQmJihQLnRhbmdlbnQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOm19KSksby5iaXRhbmdlbnQmJihQLmJpdGFuZ2VudD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6X30pKSxsJiYoUC5leHRydWRlRGlyZWN0aW9uPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpnfSkpLG4mJmgoZS5vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgRj1uZXcgVWludDhBcnJheShjKTtpZihlLm9mZnNldEF0dHJpYnV0ZT09PWFlLlRPUClGPUYuZmlsbCgxLDAsYy8yKTtlbHNle2xldCBqPWUub2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjE7Rj1GLmZpbGwoail9UC5hcHBseU9mZnNldD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpGfSl9cmV0dXJuIFB9ZnVuY3Rpb24gT3codCl7bGV0IGU9bmV3IEFycmF5KDEyKih0Kih0KzEpKS02KSxuPTAsbyxyLGkscyxmO2ZvcihvPTAsaT0xLHM9MDtzPDM7cysrKWVbbisrXT1pKyssZVtuKytdPW8sZVtuKytdPWk7Zm9yKHM9MjtzPHQrMTsrK3Mpe2ZvcihpPXMqKHMrMSktMSxvPShzLTEpKnMtMSxlW24rK109aSsrLGVbbisrXT1vLGVbbisrXT1pLHI9MipzLGY9MDtmPHItMTsrK2YpZVtuKytdPWksZVtuKytdPW8rKyxlW24rK109byxlW24rK109aSsrLGVbbisrXT1vLGVbbisrXT1pO2VbbisrXT1pKyssZVtuKytdPW8sZVtuKytdPWl9Zm9yKHI9dCoyLCsraSwrK28scz0wO3M8ci0xOysrcyllW24rK109aSxlW24rK109bysrLGVbbisrXT1vLGVbbisrXT1pKyssZVtuKytdPW8sZVtuKytdPWk7Zm9yKGVbbisrXT1pLGVbbisrXT1vKyssZVtuKytdPW8sZVtuKytdPWkrKyxlW24rK109bysrLGVbbisrXT1vLCsrbyxzPXQtMTtzPjE7LS1zKXtmb3IoZVtuKytdPW8rKyxlW24rK109byxlW24rK109aSxyPTIqcyxmPTA7ZjxyLTE7KytmKWVbbisrXT1pLGVbbisrXT1vKyssZVtuKytdPW8sZVtuKytdPWkrKyxlW24rK109byxlW24rK109aTtlW24rK109bysrLGVbbisrXT1vKyssZVtuKytdPWkrK31mb3Iocz0wO3M8MztzKyspZVtuKytdPW8rKyxlW24rK109byxlW24rK109aTtyZXR1cm4gZX1mdW5jdGlvbiBOTSh0KXtsZXQgZT10LmNlbnRlcjtjYz1hLm11bHRpcGx5QnlTY2FsYXIodC5lbGxpcHNvaWQuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGUsY2MpLHQuaGVpZ2h0LGNjKSxjYz1hLmFkZChlLGNjLGNjKTtsZXQgbj1uZXcgeXQoY2MsdC5zZW1pTWFqb3JBeGlzKSxvPWtyLmNvbXB1dGVFbGxpcHNlUG9zaXRpb25zKHQsITAsITEpLHI9by5wb3NpdGlvbnMsaT1vLm51bVB0cyxzPVR3KHIsdCwhMSksZj1PdyhpKTtyZXR1cm4gZj1EdC5jcmVhdGVUeXBlZEFycmF5KHIubGVuZ3RoLzMsZikse2JvdW5kaW5nU3BoZXJlOm4sYXR0cmlidXRlczpzLGluZGljZXM6Zn19ZnVuY3Rpb24gSU0odCxlKXtsZXQgbj1lLnZlcnRleEZvcm1hdCxvPWUuY2VudGVyLHI9ZS5zZW1pTWFqb3JBeGlzLGk9ZS5zZW1pTWlub3JBeGlzLHM9ZS5lbGxpcHNvaWQsZj1lLmhlaWdodCx1PWUuZXh0cnVkZWRIZWlnaHQsYz1lLnN0Um90YXRpb24sbD10Lmxlbmd0aC8zKjIscD1uZXcgRmxvYXQ2NEFycmF5KGwqMyksZD1uLnN0P25ldyBGbG9hdDMyQXJyYXkobCoyKTp2b2lkIDAsbT1uLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KGwqMyk6dm9pZCAwLF89bi50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkobCozKTp2b2lkIDAsZz1uLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KGwqMyk6dm9pZCAwLGI9ZS5zaGFkb3dWb2x1bWUsTz1iP25ldyBGbG9hdDMyQXJyYXkobCozKTp2b2lkIDAsVD0wLEU9X3csdz15dyxDPWd3LE49bmV3IFFuKHMpLEk9Ti5wcm9qZWN0KHMuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobyxYcCksQXcpLEw9cy5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKG8sZmEpO3MuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKEwsTCk7bGV0IHY9bmUuZnJvbUF4aXNBbmdsZShMLGMsbDApLEQ9dHQuZnJvbVF1YXRlcm5pb24odixodyksVT1udC5mcm9tRWxlbWVudHMoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxidyksQT1udC5mcm9tRWxlbWVudHMoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLE51bWJlci5ORUdBVElWRV9JTkZJTklUWSx3dyksUz10Lmxlbmd0aCxQPVMvMyoyO2ZvcihsZXQgaj0wO2o8UztqKz0zKXtsZXQgSD1qKzEsaz1qKzIsSz1hLmZyb21BcnJheSh0LGosZmEpLFg7aWYobi5zdCl7bGV0IFE9dHQubXVsdGlwbHlCeVZlY3RvcihELEssZjApLGZ0PU4ucHJvamVjdChzLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKFEsWHApLHUwKTthLnN1YnRyYWN0KGZ0LEksZnQpLFluLng9KGZ0LngrcikvKDIqciksWW4ueT0oZnQueStpKS8oMippKSxVLng9TWF0aC5taW4oWW4ueCxVLngpLFUueT1NYXRoLm1pbihZbi55LFUueSksQS54PU1hdGgubWF4KFluLngsQS54KSxBLnk9TWF0aC5tYXgoWW4ueSxBLnkpLGRbVCtQXT1Zbi54LGRbVCsxK1BdPVluLnksZFtUKytdPVluLngsZFtUKytdPVluLnl9Sz1zLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoSyxLKSxYPWEuY2xvbmUoSyxmMCksRT1zLmdlb2RldGljU3VyZmFjZU5vcm1hbChLLEUpLGImJihPW2orU109LUUueCxPW0grU109LUUueSxPW2srU109LUUueik7bGV0IFI9YS5tdWx0aXBseUJ5U2NhbGFyKEUsZixtdyk7aWYoSz1hLmFkZChLLFIsSyksUj1hLm11bHRpcGx5QnlTY2FsYXIoRSx1LFIpLFg9YS5hZGQoWCxSLFgpLG4ucG9zaXRpb24mJihwW2orU109WC54LHBbSCtTXT1YLnkscFtrK1NdPVgueixwW2pdPUsueCxwW0hdPUsueSxwW2tdPUsueiksbi5ub3JtYWx8fG4udGFuZ2VudHx8bi5iaXRhbmdlbnQpe0M9YS5jbG9uZShFLEMpO2xldCBRPWEuZnJvbUFycmF5KHQsKGorMyklUyxtdyk7YS5zdWJ0cmFjdChRLEssUSk7bGV0IGZ0PWEuc3VidHJhY3QoWCxLLHUwKTtFPWEubm9ybWFsaXplKGEuY3Jvc3MoZnQsUSxFKSxFKSxuLm5vcm1hbCYmKG1bal09RS54LG1bSF09RS55LG1ba109RS56LG1baitTXT1FLngsbVtIK1NdPUUueSxtW2srU109RS56KSxuLnRhbmdlbnQmJih3PWEubm9ybWFsaXplKGEuY3Jvc3MoQyxFLHcpLHcpLF9bal09dy54LF9bSF09dy55LF9ba109dy56LF9baitTXT13LngsX1tqKzErU109dy55LF9baisyK1NdPXcueiksbi5iaXRhbmdlbnQmJihnW2pdPUMueCxnW0hdPUMueSxnW2tdPUMueixnW2orU109Qy54LGdbSCtTXT1DLnksZ1trK1NdPUMueil9fWlmKG4uc3Qpe1M9ZC5sZW5ndGg7Zm9yKGxldCBqPTA7ajxTO2orPTIpZFtqXT0oZFtqXS1VLngpLyhBLngtVS54KSxkW2orMV09KGRbaisxXS1VLnkpLyhBLnktVS55KX1sZXQgRj1uZXcgcmU7aWYobi5wb3NpdGlvbiYmKEYucG9zaXRpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpwfSkpLG4uc3QmJihGLnN0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpkfSkpLG4ubm9ybWFsJiYoRi5ub3JtYWw9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOm19KSksbi50YW5nZW50JiYoRi50YW5nZW50PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpffSkpLG4uYml0YW5nZW50JiYoRi5iaXRhbmdlbnQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmd9KSksYiYmKEYuZXh0cnVkZURpcmVjdGlvbj1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6T30pKSxoKGUub2Zmc2V0QXR0cmlidXRlKSl7bGV0IGo9bmV3IFVpbnQ4QXJyYXkobCk7aWYoZS5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5UT1Apaj1qLmZpbGwoMSwwLGwvMik7ZWxzZXtsZXQgSD1lLm9mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxO2o9ai5maWxsKEgpfUYuYXBwbHlPZmZzZXQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6an0pfXJldHVybiBGfWZ1bmN0aW9uIHZNKHQpe2xldCBlPXQubGVuZ3RoLzMsbj1EdC5jcmVhdGVUeXBlZEFycmF5KGUsZSo2KSxvPTA7Zm9yKGxldCByPTA7cjxlO3IrKyl7bGV0IGk9cixzPXIrZSxmPShpKzEpJWUsdT1mK2U7bltvKytdPWksbltvKytdPXMsbltvKytdPWYsbltvKytdPWYsbltvKytdPXMsbltvKytdPXV9cmV0dXJuIG59ZnVuY3Rpb24gRE0odCl7bGV0IGU9dC5jZW50ZXIsbj10LmVsbGlwc29pZCxvPXQuc2VtaU1ham9yQXhpcyxyPWEubXVsdGlwbHlCeVNjYWxhcihuLmdlb2RldGljU3VyZmFjZU5vcm1hbChlLGZhKSx0LmhlaWdodCxmYSk7S3AuY2VudGVyPWEuYWRkKGUscixLcC5jZW50ZXIpLEtwLnJhZGl1cz1vLHI9YS5tdWx0aXBseUJ5U2NhbGFyKG4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGUsciksdC5leHRydWRlZEhlaWdodCxyKSxXcC5jZW50ZXI9YS5hZGQoZSxyLFdwLmNlbnRlciksV3AucmFkaXVzPW87bGV0IGk9a3IuY29tcHV0ZUVsbGlwc2VQb3NpdGlvbnModCwhMCwhMCkscz1pLnBvc2l0aW9ucyxmPWkubnVtUHRzLHU9aS5vdXRlclBvc2l0aW9ucyxjPXl0LnVuaW9uKEtwLFdwKSxsPVR3KHMsdCwhMCkscD1PdyhmKSxkPXAubGVuZ3RoO3AubGVuZ3RoPWQqMjtsZXQgbT1zLmxlbmd0aC8zO2ZvcihsZXQgdz0wO3c8ZDt3Kz0zKXBbdytkXT1wW3crMl0rbSxwW3crMStkXT1wW3crMV0rbSxwW3crMitkXT1wW3ddK207bGV0IF89RHQuY3JlYXRlVHlwZWRBcnJheShtKjIvMyxwKSxnPW5ldyBGdCh7YXR0cmlidXRlczpsLGluZGljZXM6XyxwcmltaXRpdmVUeXBlOkx0LlRSSUFOR0xFU30pLGI9SU0odSx0KTtwPXZNKHUpO2xldCBPPUR0LmNyZWF0ZVR5cGVkQXJyYXkodS5sZW5ndGgqMi8zLHApLFQ9bmV3IEZ0KHthdHRyaWJ1dGVzOmIsaW5kaWNlczpPLHByaW1pdGl2ZVR5cGU6THQuVFJJQU5HTEVTfSksRT1CZS5jb21iaW5lSW5zdGFuY2VzKFtuZXcgY28oe2dlb21ldHJ5Omd9KSxuZXcgY28oe2dlb21ldHJ5OlR9KV0pO3JldHVybntib3VuZGluZ1NwaGVyZTpjLGF0dHJpYnV0ZXM6RVswXS5hdHRyaWJ1dGVzLGluZGljZXM6RVswXS5pbmRpY2VzfX1mdW5jdGlvbiBFdyh0LGUsbixvLHIsaSxzKXtsZXQgdT1rci5jb21wdXRlRWxsaXBzZVBvc2l0aW9ucyh7Y2VudGVyOnQsc2VtaU1ham9yQXhpczplLHNlbWlNaW5vckF4aXM6bixyb3RhdGlvbjpvLGdyYW51bGFyaXR5OnJ9LCExLCEwKS5vdXRlclBvc2l0aW9ucyxjPXUubGVuZ3RoLzMsbD1uZXcgQXJyYXkoYyk7Zm9yKGxldCBkPTA7ZDxjOysrZClsW2RdPWEuZnJvbUFycmF5KHUsZCozKTtsZXQgcD1QdC5mcm9tQ2FydGVzaWFuQXJyYXkobCxpLHMpO3JldHVybiBwLndpZHRoPk0uUEkmJihwLm5vcnRoPXAubm9ydGg+MD9NLlBJX09WRVJfVFdPLU0uRVBTSUxPTjc6cC5ub3J0aCxwLnNvdXRoPXAuc291dGg8MD9NLkVQU0lMT043LU0uUElfT1ZFUl9UV086cC5zb3V0aCxwLmVhc3Q9TS5QSSxwLndlc3Q9LU0uUEkpLHB9ZnVuY3Rpb24gZmkodCl7dD14KHQseC5FTVBUWV9PQkpFQ1QpO2xldCBlPXQuY2VudGVyLG49eCh0LmVsbGlwc29pZCwkLldHUzg0KSxvPXQuc2VtaU1ham9yQXhpcyxyPXQuc2VtaU1pbm9yQXhpcyxpPXgodC5ncmFudWxhcml0eSxNLlJBRElBTlNfUEVSX0RFR1JFRSkscz14KHQudmVydGV4Rm9ybWF0LGx0LkRFRkFVTFQpO2lmKHkuZGVmaW5lZCgib3B0aW9ucy5jZW50ZXIiLGUpLHkudHlwZU9mLm51bWJlcigib3B0aW9ucy5zZW1pTWFqb3JBeGlzIixvKSx5LnR5cGVPZi5udW1iZXIoIm9wdGlvbnMuc2VtaU1pbm9yQXhpcyIsciksbzxyKXRocm93IG5ldyBCKCJzZW1pTWFqb3JBeGlzIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzZW1pTWlub3JBeGlzLiIpO2lmKGk8PTApdGhyb3cgbmV3IEIoImdyYW51bGFyaXR5IG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7bGV0IGY9eCh0LmhlaWdodCwwKSx1PXgodC5leHRydWRlZEhlaWdodCxmKTt0aGlzLl9jZW50ZXI9YS5jbG9uZShlKSx0aGlzLl9zZW1pTWFqb3JBeGlzPW8sdGhpcy5fc2VtaU1pbm9yQXhpcz1yLHRoaXMuX2VsbGlwc29pZD0kLmNsb25lKG4pLHRoaXMuX3JvdGF0aW9uPXgodC5yb3RhdGlvbiwwKSx0aGlzLl9zdFJvdGF0aW9uPXgodC5zdFJvdGF0aW9uLDApLHRoaXMuX2hlaWdodD1NYXRoLm1heCh1LGYpLHRoaXMuX2dyYW51bGFyaXR5PWksdGhpcy5fdmVydGV4Rm9ybWF0PWx0LmNsb25lKHMpLHRoaXMuX2V4dHJ1ZGVkSGVpZ2h0PU1hdGgubWluKHUsZiksdGhpcy5fc2hhZG93Vm9sdW1lPXgodC5zaGFkb3dWb2x1bWUsITEpLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUVsbGlwc2VHZW9tZXRyeSIsdGhpcy5fb2Zmc2V0QXR0cmlidXRlPXQub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3JlY3RhbmdsZT12b2lkIDAsdGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cz12b2lkIDB9ZnVuY3Rpb24gTE0odCl7bGV0IGU9LXQuX3N0Um90YXRpb247aWYoZT09PTApcmV0dXJuWzAsMCwwLDEsMSwwXTtsZXQgbz1rci5jb21wdXRlRWxsaXBzZVBvc2l0aW9ucyh7Y2VudGVyOnQuX2NlbnRlcixzZW1pTWFqb3JBeGlzOnQuX3NlbWlNYWpvckF4aXMsc2VtaU1pbm9yQXhpczp0Ll9zZW1pTWlub3JBeGlzLHJvdGF0aW9uOnQuX3JvdGF0aW9uLGdyYW51bGFyaXR5OnQuX2dyYW51bGFyaXR5fSwhMSwhMCkub3V0ZXJQb3NpdGlvbnMscj1vLmxlbmd0aC8zLGk9bmV3IEFycmF5KHIpO2ZvcihsZXQgdT0wO3U8cjsrK3UpaVt1XT1hLmZyb21BcnJheShvLHUqMyk7bGV0IHM9dC5fZWxsaXBzb2lkLGY9dC5yZWN0YW5nbGU7cmV0dXJuIEZ0Ll90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzKGksZSxzLGYpfXZhciBmYSxmMCx1MCxtdyxZbixodyxNTSxsMCxfdyx5dyxndyxYcCxBdyxidyx3dyxjYyxLcCxXcCxSdyxTdyxDdyxhaSxHcixwMD1aKCgpPT57UGUoKTt6ZSgpO1V0KCk7dmUoKTtZdCgpO0RlKCk7SXQoKTthdCgpO0h0KCk7YTAoKTtadCgpO1JpKCk7WGUoKTtZZSgpO2FuKCk7c2MoKTtGbygpO3NpKCk7JGUoKTtXdCgpO0ZuKCk7dG4oKTskbygpO0FuKCk7Um8oKTtmYT1uZXcgYSxmMD1uZXcgYSx1MD1uZXcgYSxtdz1uZXcgYSxZbj1uZXcgbnQsaHc9bmV3IHR0LE1NPW5ldyB0dCxsMD1uZXcgbmUsX3c9bmV3IGEseXc9bmV3IGEsZ3c9bmV3IGEsWHA9bmV3IGN0LEF3PW5ldyBhLGJ3PW5ldyBudCx3dz1uZXcgbnQ7Y2M9bmV3IGE7S3A9bmV3IHl0LFdwPW5ldyB5dDtmaS5wYWNrZWRMZW5ndGg9YS5wYWNrZWRMZW5ndGgrJC5wYWNrZWRMZW5ndGgrbHQucGFja2VkTGVuZ3RoKzk7ZmkucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkuZGVmaW5lZCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49eChuLDApLGEucGFjayh0Ll9jZW50ZXIsZSxuKSxuKz1hLnBhY2tlZExlbmd0aCwkLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9JC5wYWNrZWRMZW5ndGgsbHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxuKz1sdC5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX3NlbWlNYWpvckF4aXMsZVtuKytdPXQuX3NlbWlNaW5vckF4aXMsZVtuKytdPXQuX3JvdGF0aW9uLGVbbisrXT10Ll9zdFJvdGF0aW9uLGVbbisrXT10Ll9oZWlnaHQsZVtuKytdPXQuX2dyYW51bGFyaXR5LGVbbisrXT10Ll9leHRydWRlZEhlaWdodCxlW24rK109dC5fc2hhZG93Vm9sdW1lPzE6MCxlW25dPXgodC5fb2Zmc2V0QXR0cmlidXRlLC0xKSxlfTtSdz1uZXcgYSxTdz1uZXcgJCxDdz1uZXcgbHQsYWk9e2NlbnRlcjpSdyxlbGxpcHNvaWQ6U3csdmVydGV4Rm9ybWF0OkN3LHNlbWlNYWpvckF4aXM6dm9pZCAwLHNlbWlNaW5vckF4aXM6dm9pZCAwLHJvdGF0aW9uOnZvaWQgMCxzdFJvdGF0aW9uOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMCxleHRydWRlZEhlaWdodDp2b2lkIDAsc2hhZG93Vm9sdW1lOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtmaS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9eChlLDApO2xldCBvPWEudW5wYWNrKHQsZSxSdyk7ZSs9YS5wYWNrZWRMZW5ndGg7bGV0IHI9JC51bnBhY2sodCxlLFN3KTtlKz0kLnBhY2tlZExlbmd0aDtsZXQgaT1sdC51bnBhY2sodCxlLEN3KTtlKz1sdC5wYWNrZWRMZW5ndGg7bGV0IHM9dFtlKytdLGY9dFtlKytdLHU9dFtlKytdLGM9dFtlKytdLGw9dFtlKytdLHA9dFtlKytdLGQ9dFtlKytdLG09dFtlKytdPT09MSxfPXRbZV07cmV0dXJuIGgobik/KG4uX2NlbnRlcj1hLmNsb25lKG8sbi5fY2VudGVyKSxuLl9lbGxpcHNvaWQ9JC5jbG9uZShyLG4uX2VsbGlwc29pZCksbi5fdmVydGV4Rm9ybWF0PWx0LmNsb25lKGksbi5fdmVydGV4Rm9ybWF0KSxuLl9zZW1pTWFqb3JBeGlzPXMsbi5fc2VtaU1pbm9yQXhpcz1mLG4uX3JvdGF0aW9uPXUsbi5fc3RSb3RhdGlvbj1jLG4uX2hlaWdodD1sLG4uX2dyYW51bGFyaXR5PXAsbi5fZXh0cnVkZWRIZWlnaHQ9ZCxuLl9zaGFkb3dWb2x1bWU9bSxuLl9vZmZzZXRBdHRyaWJ1dGU9Xz09PS0xP3ZvaWQgMDpfLG4pOihhaS5oZWlnaHQ9bCxhaS5leHRydWRlZEhlaWdodD1kLGFpLmdyYW51bGFyaXR5PXAsYWkuc3RSb3RhdGlvbj1jLGFpLnJvdGF0aW9uPXUsYWkuc2VtaU1ham9yQXhpcz1zLGFpLnNlbWlNaW5vckF4aXM9ZixhaS5zaGFkb3dWb2x1bWU9bSxhaS5vZmZzZXRBdHRyaWJ1dGU9Xz09PS0xP3ZvaWQgMDpfLG5ldyBmaShhaSkpfTtmaS5jb21wdXRlUmVjdGFuZ2xlPWZ1bmN0aW9uKHQsZSl7dD14KHQseC5FTVBUWV9PQkpFQ1QpO2xldCBuPXQuY2VudGVyLG89eCh0LmVsbGlwc29pZCwkLldHUzg0KSxyPXQuc2VtaU1ham9yQXhpcyxpPXQuc2VtaU1pbm9yQXhpcyxzPXgodC5ncmFudWxhcml0eSxNLlJBRElBTlNfUEVSX0RFR1JFRSksZj14KHQucm90YXRpb24sMCk7aWYoeS5kZWZpbmVkKCJvcHRpb25zLmNlbnRlciIsbikseS50eXBlT2YubnVtYmVyKCJvcHRpb25zLnNlbWlNYWpvckF4aXMiLHIpLHkudHlwZU9mLm51bWJlcigib3B0aW9ucy5zZW1pTWlub3JBeGlzIixpKSxyPGkpdGhyb3cgbmV3IEIoInNlbWlNYWpvckF4aXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNlbWlNaW5vckF4aXMuIik7aWYoczw9MCl0aHJvdyBuZXcgQigiZ3JhbnVsYXJpdHkgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTtyZXR1cm4gRXcobixyLGksZixzLG8sZSl9O2ZpLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2lmKHQuX3NlbWlNYWpvckF4aXM8PTB8fHQuX3NlbWlNaW5vckF4aXM8PTApcmV0dXJuO2xldCBlPXQuX2hlaWdodCxuPXQuX2V4dHJ1ZGVkSGVpZ2h0LG89IU0uZXF1YWxzRXBzaWxvbihlLG4sMCxNLkVQU0lMT04yKTt0Ll9jZW50ZXI9dC5fZWxsaXBzb2lkLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UodC5fY2VudGVyLHQuX2NlbnRlcik7bGV0IHI9e2NlbnRlcjp0Ll9jZW50ZXIsc2VtaU1ham9yQXhpczp0Ll9zZW1pTWFqb3JBeGlzLHNlbWlNaW5vckF4aXM6dC5fc2VtaU1pbm9yQXhpcyxlbGxpcHNvaWQ6dC5fZWxsaXBzb2lkLHJvdGF0aW9uOnQuX3JvdGF0aW9uLGhlaWdodDplLGdyYW51bGFyaXR5OnQuX2dyYW51bGFyaXR5LHZlcnRleEZvcm1hdDp0Ll92ZXJ0ZXhGb3JtYXQsc3RSb3RhdGlvbjp0Ll9zdFJvdGF0aW9ufSxpO2lmKG8pci5leHRydWRlZEhlaWdodD1uLHIuc2hhZG93Vm9sdW1lPXQuX3NoYWRvd1ZvbHVtZSxyLm9mZnNldEF0dHJpYnV0ZT10Ll9vZmZzZXRBdHRyaWJ1dGUsaT1ETShyKTtlbHNlIGlmKGk9Tk0ociksaCh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgcz1pLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aCxmPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxLHU9bmV3IFVpbnQ4QXJyYXkocy8zKS5maWxsKGYpO2kuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczp1fSl9cmV0dXJuIG5ldyBGdCh7YXR0cmlidXRlczppLmF0dHJpYnV0ZXMsaW5kaWNlczppLmluZGljZXMscHJpbWl0aXZlVHlwZTpMdC5UUklBTkdMRVMsYm91bmRpbmdTcGhlcmU6aS5ib3VuZGluZ1NwaGVyZSxvZmZzZXRBdHRyaWJ1dGU6dC5fb2Zmc2V0QXR0cmlidXRlfSl9O2ZpLmNyZWF0ZVNoYWRvd1ZvbHVtZT1mdW5jdGlvbih0LGUsbil7bGV0IG89dC5fZ3JhbnVsYXJpdHkscj10Ll9lbGxpcHNvaWQsaT1lKG8scikscz1uKG8scik7cmV0dXJuIG5ldyBmaSh7Y2VudGVyOnQuX2NlbnRlcixzZW1pTWFqb3JBeGlzOnQuX3NlbWlNYWpvckF4aXMsc2VtaU1pbm9yQXhpczp0Ll9zZW1pTWlub3JBeGlzLGVsbGlwc29pZDpyLHJvdGF0aW9uOnQuX3JvdGF0aW9uLHN0Um90YXRpb246dC5fc3RSb3RhdGlvbixncmFudWxhcml0eTpvLGV4dHJ1ZGVkSGVpZ2h0OmksaGVpZ2h0OnMsdmVydGV4Rm9ybWF0Omx0LlBPU0lUSU9OX09OTFksc2hhZG93Vm9sdW1lOiEwfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpLnByb3RvdHlwZSx7cmVjdGFuZ2xlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzLl9yZWN0YW5nbGUpfHwodGhpcy5fcmVjdGFuZ2xlPUV3KHRoaXMuX2NlbnRlcix0aGlzLl9zZW1pTWFqb3JBeGlzLHRoaXMuX3NlbWlNaW5vckF4aXMsdGhpcy5fcm90YXRpb24sdGhpcy5fZ3JhbnVsYXJpdHksdGhpcy5fZWxsaXBzb2lkKSksdGhpcy5fcmVjdGFuZ2xlfX0sdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGgodGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cyl8fCh0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzPUxNKHRoaXMpKSx0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzfX19KTtHcj1maX0pO2Z1bmN0aW9uIElpKHQpe3Q9eCh0LHguRU1QVFlfT0JKRUNUKTtsZXQgZT10LnJhZGl1czt5LnR5cGVPZi5udW1iZXIoInJhZGl1cyIsZSk7bGV0IG49e2NlbnRlcjp0LmNlbnRlcixzZW1pTWFqb3JBeGlzOmUsc2VtaU1pbm9yQXhpczplLGVsbGlwc29pZDp0LmVsbGlwc29pZCxoZWlnaHQ6dC5oZWlnaHQsZXh0cnVkZWRIZWlnaHQ6dC5leHRydWRlZEhlaWdodCxncmFudWxhcml0eTp0LmdyYW51bGFyaXR5LHZlcnRleEZvcm1hdDp0LnZlcnRleEZvcm1hdCxzdFJvdGF0aW9uOnQuc3RSb3RhdGlvbixzaGFkb3dWb2x1bWU6dC5zaGFkb3dWb2x1bWV9O3RoaXMuX2VsbGlwc2VHZW9tZXRyeT1uZXcgR3IobiksdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlQ2lyY2xlR2VvbWV0cnkifXZhciBGTSxTbyxkMCx4dz1aKCgpPT57VXQoKTtZdCgpO0l0KCk7YXQoKTtwMCgpO1p0KCk7Um8oKTtJaS5wYWNrZWRMZW5ndGg9R3IucGFja2VkTGVuZ3RoO0lpLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSxHci5wYWNrKHQuX2VsbGlwc2VHZW9tZXRyeSxlLG4pfTtGTT1uZXcgR3Ioe2NlbnRlcjpuZXcgYSxzZW1pTWFqb3JBeGlzOjEsc2VtaU1pbm9yQXhpczoxfSksU289e2NlbnRlcjpuZXcgYSxyYWRpdXM6dm9pZCAwLGVsbGlwc29pZDokLmNsb25lKCQuVU5JVF9TUEhFUkUpLGhlaWdodDp2b2lkIDAsZXh0cnVkZWRIZWlnaHQ6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMCx2ZXJ0ZXhGb3JtYXQ6bmV3IGx0LHN0Um90YXRpb246dm9pZCAwLHNlbWlNYWpvckF4aXM6dm9pZCAwLHNlbWlNaW5vckF4aXM6dm9pZCAwLHNoYWRvd1ZvbHVtZTp2b2lkIDB9O0lpLnVucGFjaz1mdW5jdGlvbih0LGUsbil7bGV0IG89R3IudW5wYWNrKHQsZSxGTSk7cmV0dXJuIFNvLmNlbnRlcj1hLmNsb25lKG8uX2NlbnRlcixTby5jZW50ZXIpLFNvLmVsbGlwc29pZD0kLmNsb25lKG8uX2VsbGlwc29pZCxTby5lbGxpcHNvaWQpLFNvLmhlaWdodD1vLl9oZWlnaHQsU28uZXh0cnVkZWRIZWlnaHQ9by5fZXh0cnVkZWRIZWlnaHQsU28uZ3JhbnVsYXJpdHk9by5fZ3JhbnVsYXJpdHksU28udmVydGV4Rm9ybWF0PWx0LmNsb25lKG8uX3ZlcnRleEZvcm1hdCxTby52ZXJ0ZXhGb3JtYXQpLFNvLnN0Um90YXRpb249by5fc3RSb3RhdGlvbixTby5zaGFkb3dWb2x1bWU9by5fc2hhZG93Vm9sdW1lLGgobik/KFNvLnNlbWlNYWpvckF4aXM9by5fc2VtaU1ham9yQXhpcyxTby5zZW1pTWlub3JBeGlzPW8uX3NlbWlNaW5vckF4aXMsbi5fZWxsaXBzZUdlb21ldHJ5PW5ldyBHcihTbyksbik6KFNvLnJhZGl1cz1vLl9zZW1pTWFqb3JBeGlzLG5ldyBJaShTbykpfTtJaS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtyZXR1cm4gR3IuY3JlYXRlR2VvbWV0cnkodC5fZWxsaXBzZUdlb21ldHJ5KX07SWkuY3JlYXRlU2hhZG93Vm9sdW1lPWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz10Ll9lbGxpcHNlR2VvbWV0cnkuX2dyYW51bGFyaXR5LHI9dC5fZWxsaXBzZUdlb21ldHJ5Ll9lbGxpcHNvaWQsaT1lKG8scikscz1uKG8scik7cmV0dXJuIG5ldyBJaSh7Y2VudGVyOnQuX2VsbGlwc2VHZW9tZXRyeS5fY2VudGVyLHJhZGl1czp0Ll9lbGxpcHNlR2VvbWV0cnkuX3NlbWlNYWpvckF4aXMsZWxsaXBzb2lkOnIsc3RSb3RhdGlvbjp0Ll9lbGxpcHNlR2VvbWV0cnkuX3N0Um90YXRpb24sZ3JhbnVsYXJpdHk6byxleHRydWRlZEhlaWdodDppLGhlaWdodDpzLHZlcnRleEZvcm1hdDpsdC5QT1NJVElPTl9PTkxZLHNoYWRvd1ZvbHVtZTohMH0pfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhJaS5wcm90b3R5cGUse3JlY3RhbmdsZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsbGlwc2VHZW9tZXRyeS5yZWN0YW5nbGV9fSx0ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxsaXBzZUdlb21ldHJ5LnRleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHN9fX0pO2QwPUlpfSk7dmFyIG0wPXt9O21lKG0wLHtkZWZhdWx0OigpPT5VTX0pO2Z1bmN0aW9uIEJNKHQsZSl7cmV0dXJuIGgoZSkmJih0PWQwLnVucGFjayh0LGUpKSx0Ll9lbGxpcHNlR2VvbWV0cnkuX2NlbnRlcj1hLmNsb25lKHQuX2VsbGlwc2VHZW9tZXRyeS5fY2VudGVyKSx0Ll9lbGxpcHNlR2VvbWV0cnkuX2VsbGlwc29pZD0kLmNsb25lKHQuX2VsbGlwc2VHZW9tZXRyeS5fZWxsaXBzb2lkKSxkMC5jcmVhdGVHZW9tZXRyeSh0KX12YXIgVU0saDA9WigoKT0+e1V0KCk7eHcoKTthdCgpO1p0KCk7VU09Qk19KTtmdW5jdGlvbiBWTSh0KXtsZXQgZT10LmNlbnRlcjthYz1hLm11bHRpcGx5QnlTY2FsYXIodC5lbGxpcHNvaWQuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGUsYWMpLHQuaGVpZ2h0LGFjKSxhYz1hLmFkZChlLGFjLGFjKTtsZXQgbj1uZXcgeXQoYWMsdC5zZW1pTWFqb3JBeGlzKSxvPWtyLmNvbXB1dGVFbGxpcHNlUG9zaXRpb25zKHQsITEsITApLm91dGVyUG9zaXRpb25zLHI9bmV3IHJlKHtwb3NpdGlvbjpuZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmtyLnJhaXNlUG9zaXRpb25zVG9IZWlnaHQobyx0LCExKX0pfSksaT1vLmxlbmd0aC8zLHM9RHQuY3JlYXRlVHlwZWRBcnJheShpLGkqMiksZj0wO2ZvcihsZXQgdT0wO3U8aTsrK3Upc1tmKytdPXUsc1tmKytdPSh1KzEpJWk7cmV0dXJue2JvdW5kaW5nU3BoZXJlOm4sYXR0cmlidXRlczpyLGluZGljZXM6c319ZnVuY3Rpb24ga00odCl7bGV0IGU9dC5jZW50ZXIsbj10LmVsbGlwc29pZCxvPXQuc2VtaU1ham9yQXhpcyxyPWEubXVsdGlwbHlCeVNjYWxhcihuLmdlb2RldGljU3VyZmFjZU5vcm1hbChlLFB3KSx0LmhlaWdodCxQdyk7WXAuY2VudGVyPWEuYWRkKGUscixZcC5jZW50ZXIpLFlwLnJhZGl1cz1vLHI9YS5tdWx0aXBseUJ5U2NhbGFyKG4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGUsciksdC5leHRydWRlZEhlaWdodCxyKSwkcC5jZW50ZXI9YS5hZGQoZSxyLCRwLmNlbnRlciksJHAucmFkaXVzPW87bGV0IGk9a3IuY29tcHV0ZUVsbGlwc2VQb3NpdGlvbnModCwhMSwhMCkub3V0ZXJQb3NpdGlvbnMscz1uZXcgcmUoe3Bvc2l0aW9uOm5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6a3IucmFpc2VQb3NpdGlvbnNUb0hlaWdodChpLHQsITApfSl9KTtpPXMucG9zaXRpb24udmFsdWVzO2xldCBmPXl0LnVuaW9uKFlwLCRwKSx1PWkubGVuZ3RoLzM7aWYoaCh0Lm9mZnNldEF0dHJpYnV0ZSkpe2xldCBfPW5ldyBVaW50OEFycmF5KHUpO2lmKHQub2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QKV89Xy5maWxsKDEsMCx1LzIpO2Vsc2V7bGV0IGc9dC5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MTtfPV8uZmlsbChnKX1zLmFwcGx5T2Zmc2V0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOl99KX1sZXQgYz14KHQubnVtYmVyT2ZWZXJ0aWNhbExpbmVzLDE2KTtjPU0uY2xhbXAoYywwLHUvMik7bGV0IGw9RHQuY3JlYXRlVHlwZWRBcnJheSh1LHUqMitjKjIpO3UvPTI7bGV0IHA9MCxkO2ZvcihkPTA7ZDx1OysrZClsW3ArK109ZCxsW3ArK109KGQrMSkldSxsW3ArK109ZCt1LGxbcCsrXT0oZCsxKSV1K3U7bGV0IG07aWYoYz4wKXtsZXQgXz1NYXRoLm1pbihjLHUpO209TWF0aC5yb3VuZCh1L18pO2xldCBnPU1hdGgubWluKG0qYyx1KTtmb3IoZD0wO2Q8ZztkKz1tKWxbcCsrXT1kLGxbcCsrXT1kK3V9cmV0dXJue2JvdW5kaW5nU3BoZXJlOmYsYXR0cmlidXRlczpzLGluZGljZXM6bH19ZnVuY3Rpb24gdWEodCl7dD14KHQseC5FTVBUWV9PQkpFQ1QpO2xldCBlPXQuY2VudGVyLG49eCh0LmVsbGlwc29pZCwkLldHUzg0KSxvPXQuc2VtaU1ham9yQXhpcyxyPXQuc2VtaU1pbm9yQXhpcyxpPXgodC5ncmFudWxhcml0eSxNLlJBRElBTlNfUEVSX0RFR1JFRSk7aWYoIWgoZSkpdGhyb3cgbmV3IEIoImNlbnRlciBpcyByZXF1aXJlZC4iKTtpZighaChvKSl0aHJvdyBuZXcgQigic2VtaU1ham9yQXhpcyBpcyByZXF1aXJlZC4iKTtpZighaChyKSl0aHJvdyBuZXcgQigic2VtaU1pbm9yQXhpcyBpcyByZXF1aXJlZC4iKTtpZihvPHIpdGhyb3cgbmV3IEIoInNlbWlNYWpvckF4aXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNlbWlNaW5vckF4aXMuIik7aWYoaTw9MCl0aHJvdyBuZXcgQigiZ3JhbnVsYXJpdHkgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTtsZXQgcz14KHQuaGVpZ2h0LDApLGY9eCh0LmV4dHJ1ZGVkSGVpZ2h0LHMpO3RoaXMuX2NlbnRlcj1hLmNsb25lKGUpLHRoaXMuX3NlbWlNYWpvckF4aXM9byx0aGlzLl9zZW1pTWlub3JBeGlzPXIsdGhpcy5fZWxsaXBzb2lkPSQuY2xvbmUobiksdGhpcy5fcm90YXRpb249eCh0LnJvdGF0aW9uLDApLHRoaXMuX2hlaWdodD1NYXRoLm1heChmLHMpLHRoaXMuX2dyYW51bGFyaXR5PWksdGhpcy5fZXh0cnVkZWRIZWlnaHQ9TWF0aC5taW4oZixzKSx0aGlzLl9udW1iZXJPZlZlcnRpY2FsTGluZXM9TWF0aC5tYXgoeCh0Lm51bWJlck9mVmVydGljYWxMaW5lcywxNiksMCksdGhpcy5fb2Zmc2V0QXR0cmlidXRlPXQub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUVsbGlwc2VPdXRsaW5lR2VvbWV0cnkifXZhciBQdyxhYyxZcCwkcCxNdyxOdyx2aSx6cixfMD1aKCgpPT57UGUoKTtVdCgpO0RlKCk7SXQoKTthdCgpO0h0KCk7YTAoKTtadCgpO1hlKCk7WWUoKTthbigpO0ZvKCk7JGUoKTtXdCgpO3RuKCk7UHc9bmV3IGEsYWM9bmV3IGE7WXA9bmV3IHl0LCRwPW5ldyB5dDt1YS5wYWNrZWRMZW5ndGg9YS5wYWNrZWRMZW5ndGgrJC5wYWNrZWRMZW5ndGgrODt1YS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgQigidmFsdWUgaXMgcmVxdWlyZWQiKTtpZighaChlKSl0aHJvdyBuZXcgQigiYXJyYXkgaXMgcmVxdWlyZWQiKTtyZXR1cm4gbj14KG4sMCksYS5wYWNrKHQuX2NlbnRlcixlLG4pLG4rPWEucGFja2VkTGVuZ3RoLCQucGFjayh0Ll9lbGxpcHNvaWQsZSxuKSxuKz0kLnBhY2tlZExlbmd0aCxlW24rK109dC5fc2VtaU1ham9yQXhpcyxlW24rK109dC5fc2VtaU1pbm9yQXhpcyxlW24rK109dC5fcm90YXRpb24sZVtuKytdPXQuX2hlaWdodCxlW24rK109dC5fZ3JhbnVsYXJpdHksZVtuKytdPXQuX2V4dHJ1ZGVkSGVpZ2h0LGVbbisrXT10Ll9udW1iZXJPZlZlcnRpY2FsTGluZXMsZVtuXT14KHQuX29mZnNldEF0dHJpYnV0ZSwtMSksZX07TXc9bmV3IGEsTnc9bmV3ICQsdmk9e2NlbnRlcjpNdyxlbGxpcHNvaWQ6Tncsc2VtaU1ham9yQXhpczp2b2lkIDAsc2VtaU1pbm9yQXhpczp2b2lkIDAscm90YXRpb246dm9pZCAwLGhlaWdodDp2b2lkIDAsZ3JhbnVsYXJpdHk6dm9pZCAwLGV4dHJ1ZGVkSGVpZ2h0OnZvaWQgMCxudW1iZXJPZlZlcnRpY2FsTGluZXM6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O3VhLnVucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEIoImFycmF5IGlzIHJlcXVpcmVkIik7ZT14KGUsMCk7bGV0IG89YS51bnBhY2sodCxlLE13KTtlKz1hLnBhY2tlZExlbmd0aDtsZXQgcj0kLnVucGFjayh0LGUsTncpO2UrPSQucGFja2VkTGVuZ3RoO2xldCBpPXRbZSsrXSxzPXRbZSsrXSxmPXRbZSsrXSx1PXRbZSsrXSxjPXRbZSsrXSxsPXRbZSsrXSxwPXRbZSsrXSxkPXRbZV07cmV0dXJuIGgobik/KG4uX2NlbnRlcj1hLmNsb25lKG8sbi5fY2VudGVyKSxuLl9lbGxpcHNvaWQ9JC5jbG9uZShyLG4uX2VsbGlwc29pZCksbi5fc2VtaU1ham9yQXhpcz1pLG4uX3NlbWlNaW5vckF4aXM9cyxuLl9yb3RhdGlvbj1mLG4uX2hlaWdodD11LG4uX2dyYW51bGFyaXR5PWMsbi5fZXh0cnVkZWRIZWlnaHQ9bCxuLl9udW1iZXJPZlZlcnRpY2FsTGluZXM9cCxuLl9vZmZzZXRBdHRyaWJ1dGU9ZD09PS0xP3ZvaWQgMDpkLG4pOih2aS5oZWlnaHQ9dSx2aS5leHRydWRlZEhlaWdodD1sLHZpLmdyYW51bGFyaXR5PWMsdmkucm90YXRpb249Zix2aS5zZW1pTWFqb3JBeGlzPWksdmkuc2VtaU1pbm9yQXhpcz1zLHZpLm51bWJlck9mVmVydGljYWxMaW5lcz1wLHZpLm9mZnNldEF0dHJpYnV0ZT1kPT09LTE/dm9pZCAwOmQsbmV3IHVhKHZpKSl9O3VhLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2lmKHQuX3NlbWlNYWpvckF4aXM8PTB8fHQuX3NlbWlNaW5vckF4aXM8PTApcmV0dXJuO2xldCBlPXQuX2hlaWdodCxuPXQuX2V4dHJ1ZGVkSGVpZ2h0LG89IU0uZXF1YWxzRXBzaWxvbihlLG4sMCxNLkVQU0lMT04yKTt0Ll9jZW50ZXI9dC5fZWxsaXBzb2lkLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UodC5fY2VudGVyLHQuX2NlbnRlcik7bGV0IHI9e2NlbnRlcjp0Ll9jZW50ZXIsc2VtaU1ham9yQXhpczp0Ll9zZW1pTWFqb3JBeGlzLHNlbWlNaW5vckF4aXM6dC5fc2VtaU1pbm9yQXhpcyxlbGxpcHNvaWQ6dC5fZWxsaXBzb2lkLHJvdGF0aW9uOnQuX3JvdGF0aW9uLGhlaWdodDplLGdyYW51bGFyaXR5OnQuX2dyYW51bGFyaXR5LG51bWJlck9mVmVydGljYWxMaW5lczp0Ll9udW1iZXJPZlZlcnRpY2FsTGluZXN9LGk7aWYobylyLmV4dHJ1ZGVkSGVpZ2h0PW4sci5vZmZzZXRBdHRyaWJ1dGU9dC5fb2Zmc2V0QXR0cmlidXRlLGk9a00ocik7ZWxzZSBpZihpPVZNKHIpLGgodC5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IHM9aS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgsZj10Ll9vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MSx1PW5ldyBVaW50OEFycmF5KHMvMykuZmlsbChmKTtpLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6dX0pfXJldHVybiBuZXcgRnQoe2F0dHJpYnV0ZXM6aS5hdHRyaWJ1dGVzLGluZGljZXM6aS5pbmRpY2VzLHByaW1pdGl2ZVR5cGU6THQuTElORVMsYm91bmRpbmdTcGhlcmU6aS5ib3VuZGluZ1NwaGVyZSxvZmZzZXRBdHRyaWJ1dGU6dC5fb2Zmc2V0QXR0cmlidXRlfSl9O3pyPXVhfSk7ZnVuY3Rpb24gbGEodCl7dD14KHQseC5FTVBUWV9PQkpFQ1QpO2xldCBlPXQucmFkaXVzO3kudHlwZU9mLm51bWJlcigicmFkaXVzIixlKTtsZXQgbj17Y2VudGVyOnQuY2VudGVyLHNlbWlNYWpvckF4aXM6ZSxzZW1pTWlub3JBeGlzOmUsZWxsaXBzb2lkOnQuZWxsaXBzb2lkLGhlaWdodDp0LmhlaWdodCxleHRydWRlZEhlaWdodDp0LmV4dHJ1ZGVkSGVpZ2h0LGdyYW51bGFyaXR5OnQuZ3JhbnVsYXJpdHksbnVtYmVyT2ZWZXJ0aWNhbExpbmVzOnQubnVtYmVyT2ZWZXJ0aWNhbExpbmVzfTt0aGlzLl9lbGxpcHNlR2VvbWV0cnk9bmV3IHpyKG4pLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUNpcmNsZU91dGxpbmVHZW9tZXRyeSJ9dmFyIEdNLHNyLHkwLEl3PVooKCk9PntVdCgpO1l0KCk7SXQoKTthdCgpO18wKCk7WnQoKTtsYS5wYWNrZWRMZW5ndGg9enIucGFja2VkTGVuZ3RoO2xhLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx6ci5wYWNrKHQuX2VsbGlwc2VHZW9tZXRyeSxlLG4pfTtHTT1uZXcgenIoe2NlbnRlcjpuZXcgYSxzZW1pTWFqb3JBeGlzOjEsc2VtaU1pbm9yQXhpczoxfSksc3I9e2NlbnRlcjpuZXcgYSxyYWRpdXM6dm9pZCAwLGVsbGlwc29pZDokLmNsb25lKCQuVU5JVF9TUEhFUkUpLGhlaWdodDp2b2lkIDAsZXh0cnVkZWRIZWlnaHQ6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMCxudW1iZXJPZlZlcnRpY2FsTGluZXM6dm9pZCAwLHNlbWlNYWpvckF4aXM6dm9pZCAwLHNlbWlNaW5vckF4aXM6dm9pZCAwfTtsYS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2xldCBvPXpyLnVucGFjayh0LGUsR00pO3JldHVybiBzci5jZW50ZXI9YS5jbG9uZShvLl9jZW50ZXIsc3IuY2VudGVyKSxzci5lbGxpcHNvaWQ9JC5jbG9uZShvLl9lbGxpcHNvaWQsc3IuZWxsaXBzb2lkKSxzci5oZWlnaHQ9by5faGVpZ2h0LHNyLmV4dHJ1ZGVkSGVpZ2h0PW8uX2V4dHJ1ZGVkSGVpZ2h0LHNyLmdyYW51bGFyaXR5PW8uX2dyYW51bGFyaXR5LHNyLm51bWJlck9mVmVydGljYWxMaW5lcz1vLl9udW1iZXJPZlZlcnRpY2FsTGluZXMsaChuKT8oc3Iuc2VtaU1ham9yQXhpcz1vLl9zZW1pTWFqb3JBeGlzLHNyLnNlbWlNaW5vckF4aXM9by5fc2VtaU1pbm9yQXhpcyxuLl9lbGxpcHNlR2VvbWV0cnk9bmV3IHpyKHNyKSxuKTooc3IucmFkaXVzPW8uX3NlbWlNYWpvckF4aXMsbmV3IGxhKHNyKSl9O2xhLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe3JldHVybiB6ci5jcmVhdGVHZW9tZXRyeSh0Ll9lbGxpcHNlR2VvbWV0cnkpfTt5MD1sYX0pO3ZhciBnMD17fTttZShnMCx7ZGVmYXVsdDooKT0+ak19KTtmdW5jdGlvbiB6TSh0LGUpe3JldHVybiBoKGUpJiYodD15MC51bnBhY2sodCxlKSksdC5fZWxsaXBzZUdlb21ldHJ5Ll9jZW50ZXI9YS5jbG9uZSh0Ll9lbGxpcHNlR2VvbWV0cnkuX2NlbnRlciksdC5fZWxsaXBzZUdlb21ldHJ5Ll9lbGxpcHNvaWQ9JC5jbG9uZSh0Ll9lbGxpcHNlR2VvbWV0cnkuX2VsbGlwc29pZCkseTAuY3JlYXRlR2VvbWV0cnkodCl9dmFyIGpNLEEwPVooKCk9PntVdCgpO0l3KCk7YXQoKTtadCgpO2pNPXpNfSk7ZnVuY3Rpb24gSE0odCxlLG4sbyl7aWYoeS5kZWZpbmVkKCJlcXVhbHNFcHNpbG9uIixlKSwhaCh0KSlyZXR1cm47bj14KG4sITEpO2xldCByPWgobyksaT10Lmxlbmd0aDtpZihpPDIpcmV0dXJuIHQ7bGV0IHMsZj10WzBdLHUsYyxsPTAscD0tMTtmb3Iocz0xO3M8aTsrK3MpdT10W3NdLGUoZix1LHZ3KT8oaChjKXx8KGM9dC5zbGljZSgwLHMpLGw9cy0xLHA9MCksciYmby5wdXNoKHMpKTooaChjKSYmKGMucHVzaCh1KSxsPXMsciYmKHA9by5sZW5ndGgpKSxmPXUpO3JldHVybiBuJiZlKHRbMF0sdFtpLTFdLHZ3KSYmKHImJihoKGMpP28uc3BsaWNlKHAsMCxsKTpvLnB1c2goaS0xKSksaChjKT9jLmxlbmd0aC09MTpjPXQuc2xpY2UoMCwtMSkpLGgoYyk/Yzp0fXZhciB2dyxDbixqcj1aKCgpPT57WXQoKTtJdCgpO2F0KCk7V3QoKTt2dz1NLkVQU0lMT04xMDtDbj1ITX0pO2Z1bmN0aW9uIE5uKHQsZSxuLG8pe3RoaXMueD14KHQsMCksdGhpcy55PXgoZSwwKSx0aGlzLndpZHRoPXgobiwwKSx0aGlzLmhlaWdodD14KG8sMCl9dmFyIHFNLEtNLFdNLEhyLHhmPVooKCk9Pnt6ZSgpO3ZlKCk7WXQoKTtJdCgpO2F0KCk7UmkoKTtWcygpO0FuKCk7Tm4ucGFja2VkTGVuZ3RoPTQ7Tm4ucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49eChuLDApLGVbbisrXT10LngsZVtuKytdPXQueSxlW24rK109dC53aWR0aCxlW25dPXQuaGVpZ2h0LGV9O05uLnVucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkuZGVmaW5lZCgiYXJyYXkiLHQpLGU9eChlLDApLGgobil8fChuPW5ldyBObiksbi54PXRbZSsrXSxuLnk9dFtlKytdLG4ud2lkdGg9dFtlKytdLG4uaGVpZ2h0PXRbZV0sbn07Tm4uZnJvbVBvaW50cz1mdW5jdGlvbih0LGUpe2lmKGgoZSl8fChlPW5ldyBObiksIWgodCl8fHQubGVuZ3RoPT09MClyZXR1cm4gZS54PTAsZS55PTAsZS53aWR0aD0wLGUuaGVpZ2h0PTAsZTtsZXQgbj10Lmxlbmd0aCxvPXRbMF0ueCxyPXRbMF0ueSxpPXRbMF0ueCxzPXRbMF0ueTtmb3IobGV0IGY9MTtmPG47ZisrKXtsZXQgdT10W2ZdLGM9dS54LGw9dS55O289TWF0aC5taW4oYyxvKSxpPU1hdGgubWF4KGMsaSkscj1NYXRoLm1pbihsLHIpLHM9TWF0aC5tYXgobCxzKX1yZXR1cm4gZS54PW8sZS55PXIsZS53aWR0aD1pLW8sZS5oZWlnaHQ9cy1yLGV9O3FNPW5ldyBRbixLTT1uZXcgY3QsV009bmV3IGN0O05uLmZyb21SZWN0YW5nbGU9ZnVuY3Rpb24odCxlLG4pe2lmKGgobil8fChuPW5ldyBObiksIWgodCkpcmV0dXJuIG4ueD0wLG4ueT0wLG4ud2lkdGg9MCxuLmhlaWdodD0wLG47ZT14KGUscU0pO2xldCBvPWUucHJvamVjdChQdC5zb3V0aHdlc3QodCxLTSkpLHI9ZS5wcm9qZWN0KFB0Lm5vcnRoZWFzdCh0LFdNKSk7cmV0dXJuIG50LnN1YnRyYWN0KHIsbyxyKSxuLng9by54LG4ueT1vLnksbi53aWR0aD1yLngsbi5oZWlnaHQ9ci55LG59O05uLmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYoaCh0KSlyZXR1cm4gaChlKT8oZS54PXQueCxlLnk9dC55LGUud2lkdGg9dC53aWR0aCxlLmhlaWdodD10LmhlaWdodCxlKTpuZXcgTm4odC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KX07Tm4udW5pb249ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSksaChuKXx8KG49bmV3IE5uKTtsZXQgbz1NYXRoLm1pbih0LngsZS54KSxyPU1hdGgubWluKHQueSxlLnkpLGk9TWF0aC5tYXgodC54K3Qud2lkdGgsZS54K2Uud2lkdGgpLHM9TWF0aC5tYXgodC55K3QuaGVpZ2h0LGUueStlLmhlaWdodCk7cmV0dXJuIG4ueD1vLG4ueT1yLG4ud2lkdGg9aS1vLG4uaGVpZ2h0PXMtcixufTtObi5leHBhbmQ9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KSx5LnR5cGVPZi5vYmplY3QoInBvaW50IixlKSxuPU5uLmNsb25lKHQsbik7bGV0IG89ZS54LW4ueCxyPWUueS1uLnk7cmV0dXJuIG8+bi53aWR0aD9uLndpZHRoPW86bzwwJiYobi53aWR0aC09byxuLng9ZS54KSxyPm4uaGVpZ2h0P24uaGVpZ2h0PXI6cjwwJiYobi5oZWlnaHQtPXIsbi55PWUueSksbn07Tm4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKTtsZXQgbj10Lngsbz10Lnkscj1lLngsaT1lLnk7cmV0dXJuIG4+citlLndpZHRofHxuK3Qud2lkdGg8cnx8byt0LmhlaWdodDxpfHxvPmkrZS5oZWlnaHQ/RW4uT1VUU0lERTpFbi5JTlRFUlNFQ1RJTkd9O05uLmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8aCh0KSYmaChlKSYmdC54PT09ZS54JiZ0Lnk9PT1lLnkmJnQud2lkdGg9PT1lLndpZHRoJiZ0LmhlaWdodD09PWUuaGVpZ2h0fTtObi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIE5uLmNsb25lKHRoaXMsdCl9O05uLnByb3RvdHlwZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIE5uLmludGVyc2VjdCh0aGlzLHQpfTtObi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBObi5lcXVhbHModGhpcyx0KX07SHI9Tm59KTtmdW5jdGlvbiBCbyh0LGUsbil7dGhpcy5taW5pbXVtPWEuY2xvbmUoeCh0LGEuWkVSTykpLHRoaXMubWF4aW11bT1hLmNsb25lKHgoZSxhLlpFUk8pKSxoKG4pP249YS5jbG9uZShuKTpuPWEubWlkcG9pbnQodGhpcy5taW5pbXVtLHRoaXMubWF4aW11bSxuZXcgYSksdGhpcy5jZW50ZXI9bn12YXIgWnAsRGksUGY9WigoKT0+e1V0KCk7WXQoKTtJdCgpO2F0KCk7VnMoKTtCby5mcm9tQ29ybmVycz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkuZGVmaW5lZCgibWluaW11bSIsdCkseS5kZWZpbmVkKCJtYXhpbXVtIixlKSxoKG4pfHwobj1uZXcgQm8pLG4ubWluaW11bT1hLmNsb25lKHQsbi5taW5pbXVtKSxuLm1heGltdW09YS5jbG9uZShlLG4ubWF4aW11bSksbi5jZW50ZXI9YS5taWRwb2ludCh0LGUsbi5jZW50ZXIpLG59O0JvLmZyb21Qb2ludHM9ZnVuY3Rpb24odCxlKXtpZihoKGUpfHwoZT1uZXcgQm8pLCFoKHQpfHx0Lmxlbmd0aD09PTApcmV0dXJuIGUubWluaW11bT1hLmNsb25lKGEuWkVSTyxlLm1pbmltdW0pLGUubWF4aW11bT1hLmNsb25lKGEuWkVSTyxlLm1heGltdW0pLGUuY2VudGVyPWEuY2xvbmUoYS5aRVJPLGUuY2VudGVyKSxlO2xldCBuPXRbMF0ueCxvPXRbMF0ueSxyPXRbMF0ueixpPXRbMF0ueCxzPXRbMF0ueSxmPXRbMF0ueix1PXQubGVuZ3RoO2ZvcihsZXQgcD0xO3A8dTtwKyspe2xldCBkPXRbcF0sbT1kLngsXz1kLnksZz1kLno7bj1NYXRoLm1pbihtLG4pLGk9TWF0aC5tYXgobSxpKSxvPU1hdGgubWluKF8sbykscz1NYXRoLm1heChfLHMpLHI9TWF0aC5taW4oZyxyKSxmPU1hdGgubWF4KGcsZil9bGV0IGM9ZS5taW5pbXVtO2MueD1uLGMueT1vLGMuej1yO2xldCBsPWUubWF4aW11bTtyZXR1cm4gbC54PWksbC55PXMsbC56PWYsZS5jZW50ZXI9YS5taWRwb2ludChjLGwsZS5jZW50ZXIpLGV9O0JvLmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYoaCh0KSlyZXR1cm4gaChlKT8oZS5taW5pbXVtPWEuY2xvbmUodC5taW5pbXVtLGUubWluaW11bSksZS5tYXhpbXVtPWEuY2xvbmUodC5tYXhpbXVtLGUubWF4aW11bSksZS5jZW50ZXI9YS5jbG9uZSh0LmNlbnRlcixlLmNlbnRlciksZSk6bmV3IEJvKHQubWluaW11bSx0Lm1heGltdW0sdC5jZW50ZXIpfTtCby5lcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fGgodCkmJmgoZSkmJmEuZXF1YWxzKHQuY2VudGVyLGUuY2VudGVyKSYmYS5lcXVhbHModC5taW5pbXVtLGUubWluaW11bSkmJmEuZXF1YWxzKHQubWF4aW11bSxlLm1heGltdW0pfTtacD1uZXcgYTtCby5pbnRlcnNlY3RQbGFuZT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiYm94Iix0KSx5LmRlZmluZWQoInBsYW5lIixlKSxacD1hLnN1YnRyYWN0KHQubWF4aW11bSx0Lm1pbmltdW0sWnApO2xldCBuPWEubXVsdGlwbHlCeVNjYWxhcihacCwuNSxacCksbz1lLm5vcm1hbCxyPW4ueCpNYXRoLmFicyhvLngpK24ueSpNYXRoLmFicyhvLnkpK24ueipNYXRoLmFicyhvLnopLGk9YS5kb3QodC5jZW50ZXIsbykrZS5kaXN0YW5jZTtyZXR1cm4gaS1yPjA/RW4uSU5TSURFOmkrcjwwP0VuLk9VVFNJREU6RW4uSU5URVJTRUNUSU5HfTtCby5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIEJvLmNsb25lKHRoaXMsdCl9O0JvLnByb3RvdHlwZS5pbnRlcnNlY3RQbGFuZT1mdW5jdGlvbih0KXtyZXR1cm4gQm8uaW50ZXJzZWN0UGxhbmUodGhpcyx0KX07Qm8ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gQm8uZXF1YWxzKHRoaXMsdCl9O0RpPUJvfSk7ZnVuY3Rpb24gdWkodCxlKXtpZih5LmRlZmluZWQoIm9yaWdpbiIsdCksZT14KGUsJC5XR1M4NCksdD1lLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UodCksIWgodCkpdGhyb3cgbmV3IEIoIm9yaWdpbiBtdXN0IG5vdCBiZSBhdCB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNvaWQuIik7bGV0IG49Z3IuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUodCxlKTt0aGlzLl9lbGxpcHNvaWQ9ZSx0aGlzLl9vcmlnaW49dCx0aGlzLl94QXhpcz1hLmZyb21DYXJ0ZXNpYW40KHN0LmdldENvbHVtbihuLDAsYjApKSx0aGlzLl95QXhpcz1hLmZyb21DYXJ0ZXNpYW40KHN0LmdldENvbHVtbihuLDEsYjApKTtsZXQgbz1hLmZyb21DYXJ0ZXNpYW40KHN0LmdldENvbHVtbihuLDIsYjApKTt0aGlzLl9wbGFuZT1vbi5mcm9tUG9pbnROb3JtYWwodCxvKX12YXIgYjAsWE0sRHcsUXAsWU0seW8scGE9WigoKT0+e1BmKCk7emUoKTtVdCgpO2hyKCk7WXQoKTtJdCgpO2F0KCk7SHQoKTtadCgpO3RjKCk7a24oKTtjcygpO0ZwKCk7JHMoKTtiMD1uZXcgX2U7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModWkucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fSxvcmlnaW46e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmlnaW59fSxwbGFuZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BsYW5lfX0seEF4aXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94QXhpc319LHlBeGlzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feUF4aXN9fSx6QXhpczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BsYW5lLm5vcm1hbH19fSk7WE09bmV3IERpO3VpLmZyb21Qb2ludHM9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImNhcnRlc2lhbnMiLHQpO2xldCBuPURpLmZyb21Qb2ludHModCxYTSk7cmV0dXJuIG5ldyB1aShuLmNlbnRlcixlKX07RHc9bmV3IFFzLFFwPW5ldyBhO3VpLnByb3RvdHlwZS5wcm9qZWN0UG9pbnRPbnRvUGxhbmU9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImNhcnRlc2lhbiIsdCk7bGV0IG49RHc7bi5vcmlnaW49dCxhLm5vcm1hbGl6ZSh0LG4uZGlyZWN0aW9uKTtsZXQgbz1fby5yYXlQbGFuZShuLHRoaXMuX3BsYW5lLFFwKTtpZihoKG8pfHwoYS5uZWdhdGUobi5kaXJlY3Rpb24sbi5kaXJlY3Rpb24pLG89X28ucmF5UGxhbmUobix0aGlzLl9wbGFuZSxRcCkpLGgobykpe2xldCByPWEuc3VidHJhY3Qobyx0aGlzLl9vcmlnaW4sbyksaT1hLmRvdCh0aGlzLl94QXhpcyxyKSxzPWEuZG90KHRoaXMuX3lBeGlzLHIpO3JldHVybiBoKGUpPyhlLng9aSxlLnk9cyxlKTpuZXcgbnQoaSxzKX19O3VpLnByb3RvdHlwZS5wcm9qZWN0UG9pbnRzT250b1BsYW5lPWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJjYXJ0ZXNpYW5zIix0KSxoKGUpfHwoZT1bXSk7bGV0IG49MCxvPXQubGVuZ3RoO2ZvcihsZXQgcj0wO3I8bztyKyspe2xldCBpPXRoaXMucHJvamVjdFBvaW50T250b1BsYW5lKHRbcl0sZVtuXSk7aChpKSYmKGVbbl09aSxuKyspfXJldHVybiBlLmxlbmd0aD1uLGV9O3VpLnByb3RvdHlwZS5wcm9qZWN0UG9pbnRUb05lYXJlc3RPblBsYW5lPWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJjYXJ0ZXNpYW4iLHQpLGgoZSl8fChlPW5ldyBudCk7bGV0IG49RHc7bi5vcmlnaW49dCxhLmNsb25lKHRoaXMuX3BsYW5lLm5vcm1hbCxuLmRpcmVjdGlvbik7bGV0IG89X28ucmF5UGxhbmUobix0aGlzLl9wbGFuZSxRcCk7aChvKXx8KGEubmVnYXRlKG4uZGlyZWN0aW9uLG4uZGlyZWN0aW9uKSxvPV9vLnJheVBsYW5lKG4sdGhpcy5fcGxhbmUsUXApKTtsZXQgcj1hLnN1YnRyYWN0KG8sdGhpcy5fb3JpZ2luLG8pLGk9YS5kb3QodGhpcy5feEF4aXMscikscz1hLmRvdCh0aGlzLl95QXhpcyxyKTtyZXR1cm4gZS54PWksZS55PXMsZX07dWkucHJvdG90eXBlLnByb2plY3RQb2ludHNUb05lYXJlc3RPblBsYW5lPWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJjYXJ0ZXNpYW5zIix0KSxoKGUpfHwoZT1bXSk7bGV0IG49dC5sZW5ndGg7ZS5sZW5ndGg9bjtmb3IobGV0IG89MDtvPG47bysrKWVbb109dGhpcy5wcm9qZWN0UG9pbnRUb05lYXJlc3RPblBsYW5lKHRbb10sZVtvXSk7cmV0dXJuIGV9O1lNPW5ldyBhO3VpLnByb3RvdHlwZS5wcm9qZWN0UG9pbnRPbnRvRWxsaXBzb2lkPWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJjYXJ0ZXNpYW4iLHQpLGgoZSl8fChlPW5ldyBhKTtsZXQgbj10aGlzLl9lbGxpcHNvaWQsbz10aGlzLl9vcmlnaW4scj10aGlzLl94QXhpcyxpPXRoaXMuX3lBeGlzLHM9WU07cmV0dXJuIGEubXVsdGlwbHlCeVNjYWxhcihyLHQueCxzKSxlPWEuYWRkKG8scyxlKSxhLm11bHRpcGx5QnlTY2FsYXIoaSx0LnkscyksYS5hZGQoZSxzLGUpLG4uc2NhbGVUb0dlb2NlbnRyaWNTdXJmYWNlKGUsZSksZX07dWkucHJvdG90eXBlLnByb2plY3RQb2ludHNPbnRvRWxsaXBzb2lkPWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJjYXJ0ZXNpYW5zIix0KTtsZXQgbj10Lmxlbmd0aDtoKGUpP2UubGVuZ3RoPW46ZT1uZXcgQXJyYXkobik7Zm9yKGxldCBvPTA7bzxuOysrbyllW29dPXRoaXMucHJvamVjdFBvaW50T250b0VsbGlwc29pZCh0W29dLGVbb10pO3JldHVybiBlfTt5bz11aX0pO2Z1bmN0aW9uIExlKHQsZSl7dGhpcy5jZW50ZXI9YS5jbG9uZSh4KHQsYS5aRVJPKSksdGhpcy5oYWxmQXhlcz10dC5jbG9uZSh4KGUsdHQuWkVSTykpfWZ1bmN0aW9uIEx3KHQsZSxuLG8scixpLHMsZix1LGMsbCl7aWYoIWgocil8fCFoKGkpfHwhaChzKXx8IWgoZil8fCFoKHUpfHwhaChjKSl0aHJvdyBuZXcgQigiYWxsIGV4dGVudHMgKG1pbmltdW0vbWF4aW11bSBYL1kvWikgYXJlIHJlcXVpcmVkLiIpO2gobCl8fChsPW5ldyBMZSk7bGV0IHA9bC5oYWxmQXhlczt0dC5zZXRDb2x1bW4ocCwwLGUscCksdHQuc2V0Q29sdW1uKHAsMSxuLHApLHR0LnNldENvbHVtbihwLDIsbyxwKTtsZXQgZD1rdztkLng9KHIraSkvMixkLnk9KHMrZikvMixkLno9KHUrYykvMjtsZXQgbT1yTjttLng9KGktcikvMixtLnk9KGYtcykvMixtLno9KGMtdSkvMjtsZXQgXz1sLmNlbnRlcjtyZXR1cm4gZD10dC5tdWx0aXBseUJ5VmVjdG9yKHAsZCxkKSxhLmFkZCh0LGQsXyksdHQubXVsdGlwbHlCeVNjYWxlKHAsbSxwKSxsfXZhciAkTSxaTSxRTSxKTSx0TixlTixuTixvTixrdyxyTixGdyxpTixzTixjTixhTixmTix1TixsTixCdyxwTixVdyxkTixtTixoTixfTix5TixnTixBTixiTix3TixUTixPTixFTixSTixTTixDTixHdyx6dyxqdyx4TixWdyxQTixNTixOTixJTix2TixETixMTixGTixDbyxkYT1aKCgpPT57UGUoKTt6ZSgpO1V0KCk7dmUoKTtZdCgpO0l0KCk7YXQoKTtIdCgpO1p0KCk7cGEoKTtWcygpO2psKCk7V3QoKTtGbigpO2tuKCk7Y3MoKTtBbigpO0xlLnBhY2tlZExlbmd0aD1hLnBhY2tlZExlbmd0aCt0dC5wYWNrZWRMZW5ndGg7TGUucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49eChuLDApLGEucGFjayh0LmNlbnRlcixlLG4pLHR0LnBhY2sodC5oYWxmQXhlcyxlLG4rYS5wYWNrZWRMZW5ndGgpLGV9O0xlLnVucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkuZGVmaW5lZCgiYXJyYXkiLHQpLGU9eChlLDApLGgobil8fChuPW5ldyBMZSksYS51bnBhY2sodCxlLG4uY2VudGVyKSx0dC51bnBhY2sodCxlK2EucGFja2VkTGVuZ3RoLG4uaGFsZkF4ZXMpLG59OyRNPW5ldyBhLFpNPW5ldyBhLFFNPW5ldyBhLEpNPW5ldyBhLHROPW5ldyBhLGVOPW5ldyBhLG5OPW5ldyB0dCxvTj17dW5pdGFyeTpuZXcgdHQsZGlhZ29uYWw6bmV3IHR0fTtMZS5mcm9tUG9pbnRzPWZ1bmN0aW9uKHQsZSl7aWYoaChlKXx8KGU9bmV3IExlKSwhaCh0KXx8dC5sZW5ndGg9PT0wKXJldHVybiBlLmhhbGZBeGVzPXR0LlpFUk8sZS5jZW50ZXI9YS5aRVJPLGU7bGV0IG4sbz10Lmxlbmd0aCxyPWEuY2xvbmUodFswXSwkTSk7Zm9yKG49MTtuPG87bisrKWEuYWRkKHIsdFtuXSxyKTtsZXQgaT0xL287YS5tdWx0aXBseUJ5U2NhbGFyKHIsaSxyKTtsZXQgcz0wLGY9MCx1PTAsYz0wLGw9MCxwPTAsZDtmb3Iobj0wO248bztuKyspZD1hLnN1YnRyYWN0KHRbbl0scixaTSkscys9ZC54KmQueCxmKz1kLngqZC55LHUrPWQueCpkLnosYys9ZC55KmQueSxsKz1kLnkqZC56LHArPWQueipkLno7cyo9aSxmKj1pLHUqPWksYyo9aSxsKj1pLHAqPWk7bGV0IG09bk47bVswXT1zLG1bMV09ZixtWzJdPXUsbVszXT1mLG1bNF09YyxtWzVdPWwsbVs2XT11LG1bN109bCxtWzhdPXA7bGV0IF89dHQuY29tcHV0ZUVpZ2VuRGVjb21wb3NpdGlvbihtLG9OKSxnPXR0LmNsb25lKF8udW5pdGFyeSxlLmhhbGZBeGVzKSxiPXR0LmdldENvbHVtbihnLDAsSk0pLE89dHQuZ2V0Q29sdW1uKGcsMSx0TiksVD10dC5nZXRDb2x1bW4oZywyLGVOKSxFPS1OdW1iZXIuTUFYX1ZBTFVFLHc9LU51bWJlci5NQVhfVkFMVUUsQz0tTnVtYmVyLk1BWF9WQUxVRSxOPU51bWJlci5NQVhfVkFMVUUsST1OdW1iZXIuTUFYX1ZBTFVFLEw9TnVtYmVyLk1BWF9WQUxVRTtmb3Iobj0wO248bztuKyspZD10W25dLEU9TWF0aC5tYXgoYS5kb3QoYixkKSxFKSx3PU1hdGgubWF4KGEuZG90KE8sZCksdyksQz1NYXRoLm1heChhLmRvdChULGQpLEMpLE49TWF0aC5taW4oYS5kb3QoYixkKSxOKSxJPU1hdGgubWluKGEuZG90KE8sZCksSSksTD1NYXRoLm1pbihhLmRvdChULGQpLEwpO2I9YS5tdWx0aXBseUJ5U2NhbGFyKGIsLjUqKE4rRSksYiksTz1hLm11bHRpcGx5QnlTY2FsYXIoTywuNSooSSt3KSxPKSxUPWEubXVsdGlwbHlCeVNjYWxhcihULC41KihMK0MpLFQpO2xldCB2PWEuYWRkKGIsTyxlLmNlbnRlcik7YS5hZGQodixULHYpO2xldCBEPVFNO3JldHVybiBELng9RS1OLEQueT13LUksRC56PUMtTCxhLm11bHRpcGx5QnlTY2FsYXIoRCwuNSxEKSx0dC5tdWx0aXBseUJ5U2NhbGUoZS5oYWxmQXhlcyxELGUuaGFsZkF4ZXMpLGV9O2t3PW5ldyBhLHJOPW5ldyBhO0Z3PW5ldyBjdCxpTj1uZXcgYSxzTj1uZXcgY3QsY049bmV3IGN0LGFOPW5ldyBjdCxmTj1uZXcgY3QsdU49bmV3IGN0LGxOPW5ldyBhLEJ3PW5ldyBhLHBOPW5ldyBhLFV3PW5ldyBhLGROPW5ldyBhLG1OPW5ldyBudCxoTj1uZXcgbnQsX049bmV3IG50LHlOPW5ldyBudCxnTj1uZXcgbnQsQU49bmV3IGEsYk49bmV3IGEsd049bmV3IGEsVE49bmV3IGEsT049bmV3IG50LEVOPW5ldyBhLFJOPW5ldyBhLFNOPW5ldyBhLENOPW5ldyBvbihhLlVOSVRfWCwwKTtMZS5mcm9tUmVjdGFuZ2xlPWZ1bmN0aW9uKHQsZSxuLG8scil7aWYoIWgodCkpdGhyb3cgbmV3IEIoInJlY3RhbmdsZSBpcyByZXF1aXJlZCIpO2lmKHQud2lkdGg8MHx8dC53aWR0aD5NLlRXT19QSSl0aHJvdyBuZXcgQigiUmVjdGFuZ2xlIHdpZHRoIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyICogcGkiKTtpZih0LmhlaWdodDwwfHx0LmhlaWdodD5NLlBJKXRocm93IG5ldyBCKCJSZWN0YW5nbGUgaGVpZ2h0IG11c3QgYmUgYmV0d2VlbiAwIGFuZCBwaSIpO2lmKGgobykmJiFNLmVxdWFsc0Vwc2lsb24oby5yYWRpaS54LG8ucmFkaWkueSxNLkVQU0lMT04xNSkpdGhyb3cgbmV3IEIoIkVsbGlwc29pZCBtdXN0IGJlIGFuIGVsbGlwc29pZCBvZiByZXZvbHV0aW9uIChyYWRpaS54ID09IHJhZGlpLnkpIik7ZT14KGUsMCksbj14KG4sMCksbz14KG8sJC5XR1M4NCk7bGV0IGkscyxmLHUsYyxsLHA7aWYodC53aWR0aDw9TS5QSSl7bGV0IEk9UHQuY2VudGVyKHQsRncpLEw9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihJLGlOKSx2PW5ldyB5byhMLG8pO3A9di5wbGFuZTtsZXQgRD1JLmxvbmdpdHVkZSxVPXQuc291dGg8MCYmdC5ub3J0aD4wPzA6SS5sYXRpdHVkZSxBPWN0LmZyb21SYWRpYW5zKEQsdC5ub3J0aCxuLHNOKSxTPWN0LmZyb21SYWRpYW5zKHQud2VzdCx0Lm5vcnRoLG4sY04pLFA9Y3QuZnJvbVJhZGlhbnModC53ZXN0LFUsbixhTiksRj1jdC5mcm9tUmFkaWFucyh0Lndlc3QsdC5zb3V0aCxuLGZOKSxqPWN0LmZyb21SYWRpYW5zKEQsdC5zb3V0aCxuLHVOKSxIPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oQSxsTiksaz1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKFMsQncpLEs9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihQLHBOKSxYPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oRixVdyksUj1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGosZE4pLFE9di5wcm9qZWN0UG9pbnRUb05lYXJlc3RPblBsYW5lKEgsbU4pLGZ0PXYucHJvamVjdFBvaW50VG9OZWFyZXN0T25QbGFuZShrLGhOKSxwdD12LnByb2plY3RQb2ludFRvTmVhcmVzdE9uUGxhbmUoSyxfTiksZ3Q9di5wcm9qZWN0UG9pbnRUb05lYXJlc3RPblBsYW5lKFgseU4pLGl0PXYucHJvamVjdFBvaW50VG9OZWFyZXN0T25QbGFuZShSLGdOKTtyZXR1cm4gaT1NYXRoLm1pbihmdC54LHB0LngsZ3QueCkscz0taSx1PU1hdGgubWF4KGZ0LnksUS55KSxmPU1hdGgubWluKGd0LnksaXQueSksUy5oZWlnaHQ9Ri5oZWlnaHQ9ZSxrPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oUyxCdyksWD1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKEYsVXcpLGM9TWF0aC5taW4ob24uZ2V0UG9pbnREaXN0YW5jZShwLGspLG9uLmdldFBvaW50RGlzdGFuY2UocCxYKSksbD1uLEx3KHYub3JpZ2luLHYueEF4aXMsdi55QXhpcyx2LnpBeGlzLGkscyxmLHUsYyxsLHIpfWxldCBkPXQuc291dGg+MCxtPXQubm9ydGg8MCxfPWQ/dC5zb3V0aDptP3Qubm9ydGg6MCxnPVB0LmNlbnRlcih0LEZ3KS5sb25naXR1ZGUsYj1hLmZyb21SYWRpYW5zKGcsXyxuLG8sQU4pO2Iuej0wO2xldCBUPU1hdGguYWJzKGIueCk8TS5FUFNJTE9OMTAmJk1hdGguYWJzKGIueSk8TS5FUFNJTE9OMTA/YS5VTklUX1g6YS5ub3JtYWxpemUoYixiTiksRT1hLlVOSVRfWix3PWEuY3Jvc3MoVCxFLHdOKTtwPW9uLmZyb21Qb2ludE5vcm1hbChiLFQsQ04pO2xldCBDPWEuZnJvbVJhZGlhbnMoZytNLlBJX09WRVJfVFdPLF8sbixvLFROKTtzPWEuZG90KG9uLnByb2plY3RQb2ludE9udG9QbGFuZShwLEMsT04pLHcpLGk9LXMsdT1hLmZyb21SYWRpYW5zKDAsdC5ub3J0aCxtP2U6bixvLEVOKS56LGY9YS5mcm9tUmFkaWFucygwLHQuc291dGgsZD9lOm4sbyxSTikuejtsZXQgTj1hLmZyb21SYWRpYW5zKHQuZWFzdCxfLG4sbyxTTik7cmV0dXJuIGM9b24uZ2V0UG9pbnREaXN0YW5jZShwLE4pLGw9MCxMdyhiLHcsRSxULGkscyxmLHUsYyxsLHIpfTtMZS5mcm9tVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ0cmFuc2Zvcm1hdGlvbiIsdCksaChlKXx8KGU9bmV3IExlKSxlLmNlbnRlcj1zdC5nZXRUcmFuc2xhdGlvbih0LGUuY2VudGVyKSxlLmhhbGZBeGVzPXN0LmdldE1hdHJpeDModCxlLmhhbGZBeGVzKSxlLmhhbGZBeGVzPXR0Lm11bHRpcGx5QnlTY2FsYXIoZS5oYWxmQXhlcywuNSxlLmhhbGZBeGVzKSxlfTtMZS5jbG9uZT1mdW5jdGlvbih0LGUpe2lmKGgodCkpcmV0dXJuIGgoZSk/KGEuY2xvbmUodC5jZW50ZXIsZS5jZW50ZXIpLHR0LmNsb25lKHQuaGFsZkF4ZXMsZS5oYWxmQXhlcyksZSk6bmV3IExlKHQuY2VudGVyLHQuaGFsZkF4ZXMpfTtMZS5pbnRlcnNlY3RQbGFuZT1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJib3ggaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEIoInBsYW5lIGlzIHJlcXVpcmVkLiIpO2xldCBuPXQuY2VudGVyLG89ZS5ub3JtYWwscj10LmhhbGZBeGVzLGk9by54LHM9by55LGY9by56LHU9TWF0aC5hYnMoaSpyW3R0LkNPTFVNTjBST1cwXStzKnJbdHQuQ09MVU1OMFJPVzFdK2Yqclt0dC5DT0xVTU4wUk9XMl0pK01hdGguYWJzKGkqclt0dC5DT0xVTU4xUk9XMF0rcypyW3R0LkNPTFVNTjFST1cxXStmKnJbdHQuQ09MVU1OMVJPVzJdKStNYXRoLmFicyhpKnJbdHQuQ09MVU1OMlJPVzBdK3Mqclt0dC5DT0xVTU4yUk9XMV0rZipyW3R0LkNPTFVNTjJST1cyXSksYz1hLmRvdChvLG4pK2UuZGlzdGFuY2U7cmV0dXJuIGM8PS11P0VuLk9VVFNJREU6Yz49dT9Fbi5JTlNJREU6RW4uSU5URVJTRUNUSU5HfTtHdz1uZXcgYSx6dz1uZXcgYSxqdz1uZXcgYSx4Tj1uZXcgYSxWdz1uZXcgYSxQTj1uZXcgYTtMZS5kaXN0YW5jZVNxdWFyZWRUbz1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJib3ggaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEIoImNhcnRlc2lhbiBpcyByZXF1aXJlZC4iKTtsZXQgbj1hLnN1YnRyYWN0KGUsdC5jZW50ZXIsa3cpLG89dC5oYWxmQXhlcyxyPXR0LmdldENvbHVtbihvLDAsR3cpLGk9dHQuZ2V0Q29sdW1uKG8sMSx6dykscz10dC5nZXRDb2x1bW4obywyLGp3KSxmPWEubWFnbml0dWRlKHIpLHU9YS5tYWduaXR1ZGUoaSksYz1hLm1hZ25pdHVkZShzKSxsPSEwLHA9ITAsZD0hMDtmPjA/YS5kaXZpZGVCeVNjYWxhcihyLGYscik6bD0hMSx1PjA/YS5kaXZpZGVCeVNjYWxhcihpLHUsaSk6cD0hMSxjPjA/YS5kaXZpZGVCeVNjYWxhcihzLGMscyk6ZD0hMTtsZXQgbT0hbCshcCshZCxfLGcsYjtpZihtPT09MSl7bGV0IHc9cjtfPWksZz1zLHA/ZHx8KHc9cyxnPXIpOih3PWksXz1yKSxiPWEuY3Jvc3MoXyxnLFZ3KSx3PT09cj9yPWI6dz09PWk/aT1iOnc9PT1zJiYocz1iKX1lbHNlIGlmKG09PT0yKXtfPXIscD9fPWk6ZCYmKF89cyk7bGV0IHc9YS5VTklUX1k7dy5lcXVhbHNFcHNpbG9uKF8sTS5FUFNJTE9OMykmJih3PWEuVU5JVF9YKSxnPWEuY3Jvc3MoXyx3LHhOKSxhLm5vcm1hbGl6ZShnLGcpLGI9YS5jcm9zcyhfLGcsVncpLGEubm9ybWFsaXplKGIsYiksXz09PXI/KGk9ZyxzPWIpOl89PT1pPyhzPWcscj1iKTpfPT09cyYmKHI9ZyxpPWIpfWVsc2UgbT09PTMmJihyPWEuVU5JVF9YLGk9YS5VTklUX1kscz1hLlVOSVRfWik7bGV0IE89UE47Ty54PWEuZG90KG4sciksTy55PWEuZG90KG4saSksTy56PWEuZG90KG4scyk7bGV0IFQ9MCxFO3JldHVybiBPLng8LWY/KEU9Ty54K2YsVCs9RSpFKTpPLng+ZiYmKEU9Ty54LWYsVCs9RSpFKSxPLnk8LXU/KEU9Ty55K3UsVCs9RSpFKTpPLnk+dSYmKEU9Ty55LXUsVCs9RSpFKSxPLno8LWM/KEU9Ty56K2MsVCs9RSpFKTpPLno+YyYmKEU9Ty56LWMsVCs9RSpFKSxUfTtNTj1uZXcgYSxOTj1uZXcgYTtMZS5jb21wdXRlUGxhbmVEaXN0YW5jZXM9ZnVuY3Rpb24odCxlLG4sbyl7aWYoIWgodCkpdGhyb3cgbmV3IEIoImJveCBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgQigicG9zaXRpb24gaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEIoImRpcmVjdGlvbiBpcyByZXF1aXJlZC4iKTtoKG8pfHwobz1uZXcgUXIpO2xldCByPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxpPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxzPXQuY2VudGVyLGY9dC5oYWxmQXhlcyx1PXR0LmdldENvbHVtbihmLDAsR3cpLGM9dHQuZ2V0Q29sdW1uKGYsMSx6dyksbD10dC5nZXRDb2x1bW4oZiwyLGp3KSxwPWEuYWRkKHUsYyxNTik7YS5hZGQocCxsLHApLGEuYWRkKHAscyxwKTtsZXQgZD1hLnN1YnRyYWN0KHAsZSxOTiksbT1hLmRvdChuLGQpO3JldHVybiByPU1hdGgubWluKG0sciksaT1NYXRoLm1heChtLGkpLGEuYWRkKHMsdSxwKSxhLmFkZChwLGMscCksYS5zdWJ0cmFjdChwLGwscCksYS5zdWJ0cmFjdChwLGUsZCksbT1hLmRvdChuLGQpLHI9TWF0aC5taW4obSxyKSxpPU1hdGgubWF4KG0saSksYS5hZGQocyx1LHApLGEuc3VidHJhY3QocCxjLHApLGEuYWRkKHAsbCxwKSxhLnN1YnRyYWN0KHAsZSxkKSxtPWEuZG90KG4sZCkscj1NYXRoLm1pbihtLHIpLGk9TWF0aC5tYXgobSxpKSxhLmFkZChzLHUscCksYS5zdWJ0cmFjdChwLGMscCksYS5zdWJ0cmFjdChwLGwscCksYS5zdWJ0cmFjdChwLGUsZCksbT1hLmRvdChuLGQpLHI9TWF0aC5taW4obSxyKSxpPU1hdGgubWF4KG0saSksYS5zdWJ0cmFjdChzLHUscCksYS5hZGQocCxjLHApLGEuYWRkKHAsbCxwKSxhLnN1YnRyYWN0KHAsZSxkKSxtPWEuZG90KG4sZCkscj1NYXRoLm1pbihtLHIpLGk9TWF0aC5tYXgobSxpKSxhLnN1YnRyYWN0KHMsdSxwKSxhLmFkZChwLGMscCksYS5zdWJ0cmFjdChwLGwscCksYS5zdWJ0cmFjdChwLGUsZCksbT1hLmRvdChuLGQpLHI9TWF0aC5taW4obSxyKSxpPU1hdGgubWF4KG0saSksYS5zdWJ0cmFjdChzLHUscCksYS5zdWJ0cmFjdChwLGMscCksYS5hZGQocCxsLHApLGEuc3VidHJhY3QocCxlLGQpLG09YS5kb3QobixkKSxyPU1hdGgubWluKG0sciksaT1NYXRoLm1heChtLGkpLGEuc3VidHJhY3Qocyx1LHApLGEuc3VidHJhY3QocCxjLHApLGEuc3VidHJhY3QocCxsLHApLGEuc3VidHJhY3QocCxlLGQpLG09YS5kb3QobixkKSxyPU1hdGgubWluKG0sciksaT1NYXRoLm1heChtLGkpLG8uc3RhcnQ9cixvLnN0b3A9aSxvfTtJTj1uZXcgYSx2Tj1uZXcgYSxETj1uZXcgYTtMZS5jb21wdXRlQ29ybmVycz1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiYm94Iix0KSxoKGUpfHwoZT1bbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGFdKTtsZXQgbj10LmNlbnRlcixvPXQuaGFsZkF4ZXMscj10dC5nZXRDb2x1bW4obywwLElOKSxpPXR0LmdldENvbHVtbihvLDEsdk4pLHM9dHQuZ2V0Q29sdW1uKG8sMixETik7cmV0dXJuIGEuY2xvbmUobixlWzBdKSxhLnN1YnRyYWN0KGVbMF0scixlWzBdKSxhLnN1YnRyYWN0KGVbMF0saSxlWzBdKSxhLnN1YnRyYWN0KGVbMF0scyxlWzBdKSxhLmNsb25lKG4sZVsxXSksYS5zdWJ0cmFjdChlWzFdLHIsZVsxXSksYS5zdWJ0cmFjdChlWzFdLGksZVsxXSksYS5hZGQoZVsxXSxzLGVbMV0pLGEuY2xvbmUobixlWzJdKSxhLnN1YnRyYWN0KGVbMl0scixlWzJdKSxhLmFkZChlWzJdLGksZVsyXSksYS5zdWJ0cmFjdChlWzJdLHMsZVsyXSksYS5jbG9uZShuLGVbM10pLGEuc3VidHJhY3QoZVszXSxyLGVbM10pLGEuYWRkKGVbM10saSxlWzNdKSxhLmFkZChlWzNdLHMsZVszXSksYS5jbG9uZShuLGVbNF0pLGEuYWRkKGVbNF0scixlWzRdKSxhLnN1YnRyYWN0KGVbNF0saSxlWzRdKSxhLnN1YnRyYWN0KGVbNF0scyxlWzRdKSxhLmNsb25lKG4sZVs1XSksYS5hZGQoZVs1XSxyLGVbNV0pLGEuc3VidHJhY3QoZVs1XSxpLGVbNV0pLGEuYWRkKGVbNV0scyxlWzVdKSxhLmNsb25lKG4sZVs2XSksYS5hZGQoZVs2XSxyLGVbNl0pLGEuYWRkKGVbNl0saSxlWzZdKSxhLnN1YnRyYWN0KGVbNl0scyxlWzZdKSxhLmNsb25lKG4sZVs3XSksYS5hZGQoZVs3XSxyLGVbN10pLGEuYWRkKGVbN10saSxlWzddKSxhLmFkZChlWzddLHMsZVs3XSksZX07TE49bmV3IHR0O0xlLmNvbXB1dGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiYm94Iix0KSxoKGUpfHwoZT1uZXcgc3QpO2xldCBuPXQuY2VudGVyLG89dHQubXVsdGlwbHlCeVVuaWZvcm1TY2FsZSh0LmhhbGZBeGVzLDIsTE4pO3JldHVybiBzdC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihvLG4sZSl9O0ZOPW5ldyB5dDtMZS5pc09jY2x1ZGVkPWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEIoImJveCBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgQigib2NjbHVkZXIgaXMgcmVxdWlyZWQuIik7bGV0IG49eXQuZnJvbU9yaWVudGVkQm91bmRpbmdCb3godCxGTik7cmV0dXJuIWUuaXNCb3VuZGluZ1NwaGVyZVZpc2libGUobil9O0xlLnByb3RvdHlwZS5pbnRlcnNlY3RQbGFuZT1mdW5jdGlvbih0KXtyZXR1cm4gTGUuaW50ZXJzZWN0UGxhbmUodGhpcyx0KX07TGUucHJvdG90eXBlLmRpc3RhbmNlU3F1YXJlZFRvPWZ1bmN0aW9uKHQpe3JldHVybiBMZS5kaXN0YW5jZVNxdWFyZWRUbyh0aGlzLHQpfTtMZS5wcm90b3R5cGUuY29tcHV0ZVBsYW5lRGlzdGFuY2VzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTGUuY29tcHV0ZVBsYW5lRGlzdGFuY2VzKHRoaXMsdCxlLG4pfTtMZS5wcm90b3R5cGUuY29tcHV0ZUNvcm5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuIExlLmNvbXB1dGVDb3JuZXJzKHRoaXMsdCl9O0xlLnByb3RvdHlwZS5jb21wdXRlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIExlLmNvbXB1dGVUcmFuc2Zvcm1hdGlvbih0aGlzLHQpfTtMZS5wcm90b3R5cGUuaXNPY2NsdWRlZD1mdW5jdGlvbih0KXtyZXR1cm4gTGUuaXNPY2NsdWRlZCh0aGlzLHQpfTtMZS5lcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fGgodCkmJmgoZSkmJmEuZXF1YWxzKHQuY2VudGVyLGUuY2VudGVyKSYmdHQuZXF1YWxzKHQuaGFsZkF4ZXMsZS5oYWxmQXhlcyl9O0xlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gTGUuY2xvbmUodGhpcyx0KX07TGUucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gTGUuZXF1YWxzKHRoaXMsdCl9O0NvPUxlfSk7ZnVuY3Rpb24gWHcodCxlLG4sbyxyKXtsZXQgaT1hLnN1YnRyYWN0KHQsZSxCTikscz1hLmRvdChuLGkpLGY9YS5kb3QobyxpKTtyZXR1cm4gbnQuZnJvbUVsZW1lbnRzKHMsZixyKX12YXIgTWYsQk4sSHcscXcsS3csV3csbWEsdzA9WigoKT0+e3plKCk7VXQoKTtZdCgpO0ZuKCk7ZGEoKTtNZj17fSxCTj1uZXcgYSxIdz1uZXcgYSxxdz1uZXcgYSxLdz1uZXcgYSxXdz1uZXcgQ287TWYudmFsaWRPdXRsaW5lPWZ1bmN0aW9uKHQpe3kuZGVmaW5lZCgicG9zaXRpb25zIix0KTtsZXQgbj1Dby5mcm9tUG9pbnRzKHQsV3cpLmhhbGZBeGVzLG89dHQuZ2V0Q29sdW1uKG4sMCxIdykscj10dC5nZXRDb2x1bW4obiwxLHF3KSxpPXR0LmdldENvbHVtbihuLDIsS3cpLHM9YS5tYWduaXR1ZGUobyksZj1hLm1hZ25pdHVkZShyKSx1PWEubWFnbml0dWRlKGkpO3JldHVybiEocz09PTAmJihmPT09MHx8dT09PTApfHxmPT09MCYmdT09PTApfTtNZi5jb21wdXRlUHJvamVjdFRvMkRBcmd1bWVudHM9ZnVuY3Rpb24odCxlLG4sbyl7eS5kZWZpbmVkKCJwb3NpdGlvbnMiLHQpLHkuZGVmaW5lZCgiY2VudGVyUmVzdWx0IixlKSx5LmRlZmluZWQoInBsYW5lQXhpczFSZXN1bHQiLG4pLHkuZGVmaW5lZCgicGxhbmVBeGlzMlJlc3VsdCIsbyk7bGV0IHI9Q28uZnJvbVBvaW50cyh0LFd3KSxpPXIuaGFsZkF4ZXMscz10dC5nZXRDb2x1bW4oaSwwLEh3KSxmPXR0LmdldENvbHVtbihpLDEscXcpLHU9dHQuZ2V0Q29sdW1uKGksMixLdyksYz1hLm1hZ25pdHVkZShzKSxsPWEubWFnbml0dWRlKGYpLHA9YS5tYWduaXR1ZGUodSksZD1NYXRoLm1pbihjLGwscCk7aWYoYz09PTAmJihsPT09MHx8cD09PTApfHxsPT09MCYmcD09PTApcmV0dXJuITE7bGV0IG0sXztyZXR1cm4oZD09PWx8fGQ9PT1wKSYmKG09cyksZD09PWM/bT1mOmQ9PT1wJiYoXz1mKSwoZD09PWN8fGQ9PT1sKSYmKF89dSksYS5ub3JtYWxpemUobSxuKSxhLm5vcm1hbGl6ZShfLG8pLGEuY2xvbmUoci5jZW50ZXIsZSksITB9O01mLmNyZWF0ZVByb2plY3RQb2ludHNUbzJERnVuY3Rpb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiBmdW5jdGlvbihvKXtsZXQgcj1uZXcgQXJyYXkoby5sZW5ndGgpO2ZvcihsZXQgaT0wO2k8by5sZW5ndGg7aSsrKXJbaV09WHcob1tpXSx0LGUsbik7cmV0dXJuIHJ9fTtNZi5jcmVhdGVQcm9qZWN0UG9pbnRUbzJERnVuY3Rpb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiBmdW5jdGlvbihvLHIpe3JldHVybiBYdyhvLHQsZSxuLHIpfX07bWE9TWZ9KTt2YXIgVU4sdWUsZmM9WigoKT0+e1VOPXtOT05FOjAsR0VPREVTSUM6MSxSSFVNQjoyfSx1ZT1PYmplY3QuZnJlZXplKFVOKX0pO2Z1bmN0aW9uIE8wKHQsZSxuKXtpZih0PT09MClyZXR1cm4gZSpuO2xldCBvPXQqdCxyPW8qbyxpPXIqbyxzPWkqbyxmPXMqbyx1PWYqbyxjPW4sbD1NYXRoLnNpbigyKmMpLHA9TWF0aC5zaW4oNCpjKSxkPU1hdGguc2luKDYqYyksbT1NYXRoLnNpbig4KmMpLF89TWF0aC5zaW4oMTAqYyksZz1NYXRoLnNpbigxMipjKTtyZXR1cm4gZSooKDEtby80LTMqci82NC01KmkvMjU2LTE3NSpzLzE2Mzg0LTQ0MSpmLzY1NTM2LTQ4NTEqdS8xMDQ4NTc2KSpjLSgzKm8vOCszKnIvMzIrNDUqaS8xMDI0KzEwNSpzLzQwOTYrMjIwNSpmLzEzMTA3Mis2MjM3KnUvNTI0Mjg4KSpsKygxNSpyLzI1Nis0NSppLzEwMjQrNTI1KnMvMTYzODQrMTU3NSpmLzY1NTM2KzE1NTkyNSp1LzgzODg2MDgpKnAtKDM1KmkvMzA3MisxNzUqcy8xMjI4OCszNjc1KmYvMjYyMTQ0KzEzNDc1KnUvMTA0ODU3NikqZCsoMzE1KnMvMTMxMDcyKzIyMDUqZi81MjQyODgrNDM2NTkqdS84Mzg4NjA4KSptLSg2OTMqZi8xMzEwNzIwKzYyMzcqdS81MjQyODgwKSpfKzEwMDEqdS84Mzg4NjA4KmcpfWZ1bmN0aW9uIFZOKHQsZSxuKXtsZXQgbz10L247aWYoZT09PTApcmV0dXJuIG87bGV0IHI9bypvLGk9cipvLHM9aSpvLGY9ZSx1PWYqZixjPXUqdSxsPWMqdSxwPWwqdSxkPXAqdSxtPWQqdSxfPU1hdGguc2luKDIqbyksZz1NYXRoLmNvcygyKm8pLGI9TWF0aC5zaW4oNCpvKSxPPU1hdGguY29zKDQqbyksVD1NYXRoLnNpbig2Km8pLEU9TWF0aC5jb3MoNipvKSx3PU1hdGguc2luKDgqbyksQz1NYXRoLmNvcyg4Km8pLE49TWF0aC5zaW4oMTAqbyksST1NYXRoLmNvcygxMCpvKSxMPU1hdGguc2luKDEyKm8pO3JldHVybiBvK28qdS80KzcqbypjLzY0KzE1Km8qbC8yNTYrNTc5Km8qcC8xNjM4NCsxNTE1Km8qZC82NTUzNisxNjgzNypvKm0vMTA0ODU3NisoMypvKmMvMTYrNDUqbypsLzI1Ni1vKigzMipyLTU2MSkqcC80MDk2LW8qKDIzMipyLTE2NzcpKmQvMTYzODQrbyooMzk5OTg1LTkwNTYwKnIrNTEyKnMpKm0vNTI0Mjg4MCkqZysoMjEqbypsLzI1Nis0ODMqbypwLzQwOTYtbyooMjI0KnItMTk2OSkqZC8xNjM4NC1vKigzMzE1MipyLTExMjU5OSkqbS8xMDQ4NTc2KSpPKygxNTEqbypwLzQwOTYrNDY4MSpvKmQvNjU1MzYrMTQ3OSpvKm0vMTYzODQtNDUzKmkqbS8zMjc2OCkqRSsoMTA5NypvKmQvNjU1MzYrNDI3ODMqbyptLzEwNDg1NzYpKkMrODAxMSpvKm0vMTA0ODU3NipJKygzKnUvOCszKmMvMTYrMjEzKmwvMjA0OC0zKnIqbC82NCsyNTUqcC80MDk2LTMzKnIqcC81MTIrMjA4NjEqZC81MjQyODgtMzMqcipkLzUxMitzKmQvMTAyNCsyODI3MyptLzEwNDg1NzYtNDcxKnIqbS84MTkyKzkqcyptLzQwOTYpKl8rKDIxKmMvMjU2KzIxKmwvMjU2KzUzMypwLzgxOTItMjEqcipwLzUxMisxOTcqZC80MDk2LTMxNSpyKmQvNDA5Nis1ODQwMzkqbS8xNjc3NzIxNi0xMjUxNypyKm0vMTMxMDcyKzcqcyptLzIwNDgpKmIrKDE1MSpsLzYxNDQrMTUxKnAvNDA5Nis1MDE5KmQvMTMxMDcyLTQ1MypyKmQvMTYzODQrMjY5NjUqbS83ODY0MzItODYwNypyKm0vMTMxMDcyKSpUKygxMDk3KnAvMTMxMDcyKzEwOTcqZC82NTUzNisyMjU3OTcqbS8xMDQ4NTc2MC0xMDk3KnIqbS82NTUzNikqdysoODAxMSpkLzI2MjE0NDArODAxMSptLzEwNDg1NzYpKk4rMjkzMzkzKm0vMjUxNjU4MjQwKkx9ZnVuY3Rpb24gaGEodCxlKXtpZih0PT09MClyZXR1cm4gTWF0aC5sb2coTWF0aC50YW4oLjUqKE0uUElfT1ZFUl9UV08rZSkpKTtsZXQgbj10Kk1hdGguc2luKGUpO3JldHVybiBNYXRoLmxvZyhNYXRoLnRhbiguNSooTS5QSV9PVkVSX1RXTytlKSkpLXQvMipNYXRoLmxvZygoMStuKS8oMS1uKSl9ZnVuY3Rpb24ga04odCxlLG4sbyxyKXtsZXQgaT1oYSh0Ll9lbGxpcHRpY2l0eSxuKSxzPWhhKHQuX2VsbGlwdGljaXR5LHIpO3JldHVybiBNYXRoLmF0YW4yKE0ubmVnYXRpdmVQaVRvUGkoby1lKSxzLWkpfWZ1bmN0aW9uIEdOKHQsZSxuLG8scixpLHMpe2xldCBmPXQuX2hlYWRpbmcsdT1pLW8sYz0wO2lmKE0uZXF1YWxzRXBzaWxvbihNYXRoLmFicyhmKSxNLlBJX09WRVJfVFdPLE0uRVBTSUxPTjgpKWlmKGU9PT1uKWM9ZSpNYXRoLmNvcyhyKSpNLm5lZ2F0aXZlUGlUb1BpKHUpO2Vsc2V7bGV0IGw9TWF0aC5zaW4ocik7Yz1lKk1hdGguY29zKHIpKk0ubmVnYXRpdmVQaVRvUGkodSkvTWF0aC5zcXJ0KDEtdC5fZWxsaXB0aWNpdHlTcXVhcmVkKmwqbCl9ZWxzZXtsZXQgbD1PMCh0Ll9lbGxpcHRpY2l0eSxlLHIpO2M9KE8wKHQuX2VsbGlwdGljaXR5LGUscyktbCkvTWF0aC5jb3MoZil9cmV0dXJuIE1hdGguYWJzKGMpfWZ1bmN0aW9uIFl3KHQsZSxuLG8pe2xldCByPWEubm9ybWFsaXplKG8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oZSxUMCksek4pLGk9YS5ub3JtYWxpemUoby5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihuLFQwKSxUMCk7eS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoInZhbHVlIixNYXRoLmFicyhNYXRoLmFicyhhLmFuZ2xlQmV0d2VlbihyLGkpKS1NYXRoLlBJKSwuMDEyNSk7bGV0IHM9by5tYXhpbXVtUmFkaXVzLGY9by5taW5pbXVtUmFkaXVzLHU9cypzLGM9ZipmO3QuX2VsbGlwdGljaXR5U3F1YXJlZD0odS1jKS91LHQuX2VsbGlwdGljaXR5PU1hdGguc3FydCh0Ll9lbGxpcHRpY2l0eVNxdWFyZWQpLHQuX3N0YXJ0PWN0LmNsb25lKGUsdC5fc3RhcnQpLHQuX3N0YXJ0LmhlaWdodD0wLHQuX2VuZD1jdC5jbG9uZShuLHQuX2VuZCksdC5fZW5kLmhlaWdodD0wLHQuX2hlYWRpbmc9a04odCxlLmxvbmdpdHVkZSxlLmxhdGl0dWRlLG4ubG9uZ2l0dWRlLG4ubGF0aXR1ZGUpLHQuX2Rpc3RhbmNlPUdOKHQsby5tYXhpbXVtUmFkaXVzLG8ubWluaW11bVJhZGl1cyxlLmxvbmdpdHVkZSxlLmxhdGl0dWRlLG4ubG9uZ2l0dWRlLG4ubGF0aXR1ZGUpfWZ1bmN0aW9uICR3KHQsZSxuLG8scixpKXtpZihuPT09MClyZXR1cm4gY3QuY2xvbmUodCxpKTtsZXQgcz1yKnIsZix1LGM7aWYoTWF0aC5hYnMoTS5QSV9PVkVSX1RXTy1NYXRoLmFicyhlKSk+TS5FUFNJTE9OOCl7bGV0IGw9TzAocixvLHQubGF0aXR1ZGUpLHA9bipNYXRoLmNvcyhlKSxkPWwrcDtpZih1PVZOKGQscixvKSxNYXRoLmFicyhlKTxNLkVQU0lMT04xMClmPU0ubmVnYXRpdmVQaVRvUGkodC5sb25naXR1ZGUpO2Vsc2V7bGV0IG09aGEocix0LmxhdGl0dWRlKSxfPWhhKHIsdSk7Yz1NYXRoLnRhbihlKSooXy1tKSxmPU0ubmVnYXRpdmVQaVRvUGkodC5sb25naXR1ZGUrYyl9fWVsc2V7dT10LmxhdGl0dWRlO2xldCBsO2lmKHI9PT0wKWw9bypNYXRoLmNvcyh0LmxhdGl0dWRlKTtlbHNle2xldCBwPU1hdGguc2luKHQubGF0aXR1ZGUpO2w9bypNYXRoLmNvcyh0LmxhdGl0dWRlKS9NYXRoLnNxcnQoMS1zKnAqcCl9Yz1uL2wsZT4wP2Y9TS5uZWdhdGl2ZVBpVG9QaSh0LmxvbmdpdHVkZStjKTpmPU0ubmVnYXRpdmVQaVRvUGkodC5sb25naXR1ZGUtYyl9cmV0dXJuIGgoaSk/KGkubG9uZ2l0dWRlPWYsaS5sYXRpdHVkZT11LGkuaGVpZ2h0PTAsaSk6bmV3IGN0KGYsdSwwKX1mdW5jdGlvbiBMaSh0LGUsbil7bGV0IG89eChuLCQuV0dTODQpO3RoaXMuX2VsbGlwc29pZD1vLHRoaXMuX3N0YXJ0PW5ldyBjdCx0aGlzLl9lbmQ9bmV3IGN0LHRoaXMuX2hlYWRpbmc9dm9pZCAwLHRoaXMuX2Rpc3RhbmNlPXZvaWQgMCx0aGlzLl9lbGxpcHRpY2l0eT12b2lkIDAsdGhpcy5fZWxsaXB0aWNpdHlTcXVhcmVkPXZvaWQgMCxoKHQpJiZoKGUpJiZZdyh0aGlzLHQsZSxvKX12YXIgek4sVDAsSm8sTmY9WigoKT0+e1V0KCk7dmUoKTtZdCgpO0l0KCk7YXQoKTtIdCgpO1p0KCk7V3QoKTt6Tj1uZXcgYSxUMD1uZXcgYTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhMaS5wcm90b3R5cGUse2VsbGlwc29pZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsbGlwc29pZH19LHN1cmZhY2VEaXN0YW5jZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHkuZGVmaW5lZCgiZGlzdGFuY2UiLHRoaXMuX2Rpc3RhbmNlKSx0aGlzLl9kaXN0YW5jZX19LHN0YXJ0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnR9fSxlbmQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmR9fSxoZWFkaW5nOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5kZWZpbmVkKCJkaXN0YW5jZSIsdGhpcy5fZGlzdGFuY2UpLHRoaXMuX2hlYWRpbmd9fX0pO0xpLmZyb21TdGFydEhlYWRpbmdEaXN0YW5jZT1mdW5jdGlvbih0LGUsbixvLHIpe3kuZGVmaW5lZCgic3RhcnQiLHQpLHkuZGVmaW5lZCgiaGVhZGluZyIsZSkseS5kZWZpbmVkKCJkaXN0YW5jZSIsbikseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuKCJkaXN0YW5jZSIsbiwwKTtsZXQgaT14KG8sJC5XR1M4NCkscz1pLm1heGltdW1SYWRpdXMsZj1pLm1pbmltdW1SYWRpdXMsdT1zKnMsYz1mKmYsbD1NYXRoLnNxcnQoKHUtYykvdSk7ZT1NLm5lZ2F0aXZlUGlUb1BpKGUpO2xldCBwPSR3KHQsZSxuLGkubWF4aW11bVJhZGl1cyxsKTtyZXR1cm4haChyKXx8aChvKSYmIW8uZXF1YWxzKHIuZWxsaXBzb2lkKT9uZXcgTGkodCxwLGkpOihyLnNldEVuZFBvaW50cyh0LHApLHIpfTtMaS5wcm90b3R5cGUuc2V0RW5kUG9pbnRzPWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJzdGFydCIsdCkseS5kZWZpbmVkKCJlbmQiLGUpLFl3KHRoaXMsdCxlLHRoaXMuX2VsbGlwc29pZCl9O0xpLnByb3RvdHlwZS5pbnRlcnBvbGF0ZVVzaW5nRnJhY3Rpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlKHQqdGhpcy5fZGlzdGFuY2UsZSl9O0xpLnByb3RvdHlwZS5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7aWYoeS50eXBlT2YubnVtYmVyKCJkaXN0YW5jZSIsdCksIWgodGhpcy5fZGlzdGFuY2UpfHx0aGlzLl9kaXN0YW5jZT09PTApdGhyb3cgbmV3IEIoIkVsbGlwc29pZFJodW1iTGluZSBtdXN0IGhhdmUgZGlzdGluY3Qgc3RhcnQgYW5kIGVuZCBzZXQuIik7cmV0dXJuICR3KHRoaXMuX3N0YXJ0LHRoaXMuX2hlYWRpbmcsdCx0aGlzLl9lbGxpcHNvaWQubWF4aW11bVJhZGl1cyx0aGlzLl9lbGxpcHRpY2l0eSxlKX07TGkucHJvdG90eXBlLmZpbmRJbnRlcnNlY3Rpb25XaXRoTG9uZ2l0dWRlPWZ1bmN0aW9uKHQsZSl7aWYoeS50eXBlT2YubnVtYmVyKCJpbnRlcnNlY3Rpb25Mb25naXR1ZGUiLHQpLCFoKHRoaXMuX2Rpc3RhbmNlKXx8dGhpcy5fZGlzdGFuY2U9PT0wKXRocm93IG5ldyBCKCJFbGxpcHNvaWRSaHVtYkxpbmUgbXVzdCBoYXZlIGRpc3RpbmN0IHN0YXJ0IGFuZCBlbmQgc2V0LiIpO2xldCBuPXRoaXMuX2VsbGlwdGljaXR5LG89dGhpcy5faGVhZGluZyxyPU1hdGguYWJzKG8pLGk9dGhpcy5fc3RhcnQ7aWYodD1NLm5lZ2F0aXZlUGlUb1BpKHQpLE0uZXF1YWxzRXBzaWxvbihNYXRoLmFicyh0KSxNYXRoLlBJLE0uRVBTSUxPTjE0KSYmKHQ9TS5zaWduKGkubG9uZ2l0dWRlKSpNYXRoLlBJKSxoKGUpfHwoZT1uZXcgY3QpLE1hdGguYWJzKE0uUElfT1ZFUl9UV08tcik8PU0uRVBTSUxPTjgpcmV0dXJuIGUubG9uZ2l0dWRlPXQsZS5sYXRpdHVkZT1pLmxhdGl0dWRlLGUuaGVpZ2h0PTAsZTtpZihNLmVxdWFsc0Vwc2lsb24oTWF0aC5hYnMoTS5QSV9PVkVSX1RXTy1yKSxNLlBJX09WRVJfVFdPLE0uRVBTSUxPTjgpKXJldHVybiBNLmVxdWFsc0Vwc2lsb24odCxpLmxvbmdpdHVkZSxNLkVQU0lMT04xMik/dm9pZCAwOihlLmxvbmdpdHVkZT10LGUubGF0aXR1ZGU9TS5QSV9PVkVSX1RXTypNLnNpZ24oTS5QSV9PVkVSX1RXTy1vKSxlLmhlaWdodD0wLGUpO2xldCBzPWkubGF0aXR1ZGUsZj1uKk1hdGguc2luKHMpLHU9TWF0aC50YW4oLjUqKE0uUElfT1ZFUl9UV08rcykpKk1hdGguZXhwKCh0LWkubG9uZ2l0dWRlKS9NYXRoLnRhbihvKSksYz0oMStmKS8oMS1mKSxsPWkubGF0aXR1ZGUscDtkb3twPWw7bGV0IGQ9bipNYXRoLnNpbihwKSxtPSgxK2QpLygxLWQpO2w9MipNYXRoLmF0YW4odSpNYXRoLnBvdyhtL2Msbi8yKSktTS5QSV9PVkVSX1RXT313aGlsZSghTS5lcXVhbHNFcHNpbG9uKGwscCxNLkVQU0lMT04xMikpO3JldHVybiBlLmxvbmdpdHVkZT10LGUubGF0aXR1ZGU9bCxlLmhlaWdodD0wLGV9O0xpLnByb3RvdHlwZS5maW5kSW50ZXJzZWN0aW9uV2l0aExhdGl0dWRlPWZ1bmN0aW9uKHQsZSl7aWYoeS50eXBlT2YubnVtYmVyKCJpbnRlcnNlY3Rpb25MYXRpdHVkZSIsdCksIWgodGhpcy5fZGlzdGFuY2UpfHx0aGlzLl9kaXN0YW5jZT09PTApdGhyb3cgbmV3IEIoIkVsbGlwc29pZFJodW1iTGluZSBtdXN0IGhhdmUgZGlzdGluY3Qgc3RhcnQgYW5kIGVuZCBzZXQuIik7bGV0IG49dGhpcy5fZWxsaXB0aWNpdHksbz10aGlzLl9oZWFkaW5nLHI9dGhpcy5fc3RhcnQ7aWYoTS5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKG8pLE0uUElfT1ZFUl9UV08sTS5FUFNJTE9OOCkpcmV0dXJuO2xldCBpPWhhKG4sci5sYXRpdHVkZSkscz1oYShuLHQpLGY9TWF0aC50YW4obykqKHMtaSksdT1NLm5lZ2F0aXZlUGlUb1BpKHIubG9uZ2l0dWRlK2YpO3JldHVybiBoKGUpPyhlLmxvbmdpdHVkZT11LGUubGF0aXR1ZGU9dCxlLmhlaWdodD0wLGUpOm5ldyBjdCh1LHQsMCl9O0pvPUxpfSk7ZnVuY3Rpb24gak4odCxlKXt0aGlzLnBvc2l0aW9ucz1oKHQpP3Q6W10sdGhpcy5ob2xlcz1oKGUpP2U6W119dmFyIFp3LFF3PVooKCk9PnthdCgpO1p3PWpOfSk7dmFyIG9UPVVuKChvWCxDMCk9PnsidXNlIHN0cmljdCI7QzAuZXhwb3J0cz1lZDtDMC5leHBvcnRzLmRlZmF1bHQ9ZWQ7ZnVuY3Rpb24gZWQodCxlLG4pe249bnx8Mjt2YXIgbz1lJiZlLmxlbmd0aCxyPW8/ZVswXSpuOnQubGVuZ3RoLGk9dFQodCwwLHIsbiwhMCkscz1bXTtpZighaXx8aS5uZXh0PT09aS5wcmV2KXJldHVybiBzO3ZhciBmLHUsYyxsLHAsZCxtO2lmKG8mJihpPVhOKHQsZSxpLG4pKSx0Lmxlbmd0aD44MCpuKXtmPWM9dFswXSx1PWw9dFsxXTtmb3IodmFyIF89bjtfPHI7Xys9bilwPXRbX10sZD10W18rMV0scDxmJiYoZj1wKSxkPHUmJih1PWQpLHA+YyYmKGM9cCksZD5sJiYobD1kKTttPU1hdGgubWF4KGMtZixsLXUpLG09bSE9PTA/MzI3NjcvbTowfXJldHVybiBJZihpLHMsbixmLHUsbSwwKSxzfWZ1bmN0aW9uIHRUKHQsZSxuLG8scil7dmFyIGkscztpZihyPT09UzAodCxlLG4sbyk+MClmb3IoaT1lO2k8bjtpKz1vKXM9SncoaSx0W2ldLHRbaSsxXSxzKTtlbHNlIGZvcihpPW4tbztpPj1lO2ktPW8pcz1KdyhpLHRbaV0sdFtpKzFdLHMpO3JldHVybiBzJiZuZChzLHMubmV4dCkmJihEZihzKSxzPXMubmV4dCksc31mdW5jdGlvbiB1Yyh0LGUpe2lmKCF0KXJldHVybiB0O2V8fChlPXQpO3ZhciBuPXQsbztkbyBpZihvPSExLCFuLnN0ZWluZXImJihuZChuLG4ubmV4dCl8fEluKG4ucHJldixuLG4ubmV4dCk9PT0wKSl7aWYoRGYobiksbj1lPW4ucHJldixuPT09bi5uZXh0KWJyZWFrO289ITB9ZWxzZSBuPW4ubmV4dDt3aGlsZShvfHxuIT09ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gSWYodCxlLG4sbyxyLGkscyl7aWYodCl7IXMmJmkmJkpOKHQsbyxyLGkpO2Zvcih2YXIgZj10LHUsYzt0LnByZXYhPT10Lm5leHQ7KXtpZih1PXQucHJldixjPXQubmV4dCxpP3FOKHQsbyxyLGkpOkhOKHQpKXtlLnB1c2godS5pL258MCksZS5wdXNoKHQuaS9ufDApLGUucHVzaChjLmkvbnwwKSxEZih0KSx0PWMubmV4dCxmPWMubmV4dDtjb250aW51ZX1pZih0PWMsdD09PWYpe3M/cz09PTE/KHQ9S04odWModCksZSxuKSxJZih0LGUsbixvLHIsaSwyKSk6cz09PTImJldOKHQsZSxuLG8scixpKTpJZih1Yyh0KSxlLG4sbyxyLGksMSk7YnJlYWt9fX19ZnVuY3Rpb24gSE4odCl7dmFyIGU9dC5wcmV2LG49dCxvPXQubmV4dDtpZihJbihlLG4sbyk+PTApcmV0dXJuITE7Zm9yKHZhciByPWUueCxpPW4ueCxzPW8ueCxmPWUueSx1PW4ueSxjPW8ueSxsPXI8aT9yPHM/cjpzOmk8cz9pOnMscD1mPHU/ZjxjP2Y6Yzp1PGM/dTpjLGQ9cj5pP3I+cz9yOnM6aT5zP2k6cyxtPWY+dT9mPmM/ZjpjOnU+Yz91OmMsXz1vLm5leHQ7XyE9PWU7KXtpZihfLng+PWwmJl8ueDw9ZCYmXy55Pj1wJiZfLnk8PW0mJl9hKHIsZixpLHUscyxjLF8ueCxfLnkpJiZJbihfLnByZXYsXyxfLm5leHQpPj0wKXJldHVybiExO189Xy5uZXh0fXJldHVybiEwfWZ1bmN0aW9uIHFOKHQsZSxuLG8pe3ZhciByPXQucHJldixpPXQscz10Lm5leHQ7aWYoSW4ocixpLHMpPj0wKXJldHVybiExO2Zvcih2YXIgZj1yLngsdT1pLngsYz1zLngsbD1yLnkscD1pLnksZD1zLnksbT1mPHU/ZjxjP2Y6Yzp1PGM/dTpjLF89bDxwP2w8ZD9sOmQ6cDxkP3A6ZCxnPWY+dT9mPmM/ZjpjOnU+Yz91OmMsYj1sPnA/bD5kP2w6ZDpwPmQ/cDpkLE89RTAobSxfLGUsbixvKSxUPUUwKGcsYixlLG4sbyksRT10LnByZXZaLHc9dC5uZXh0WjtFJiZFLno+PU8mJncmJncuejw9VDspe2lmKEUueD49bSYmRS54PD1nJiZFLnk+PV8mJkUueTw9YiYmRSE9PXImJkUhPT1zJiZfYShmLGwsdSxwLGMsZCxFLngsRS55KSYmSW4oRS5wcmV2LEUsRS5uZXh0KT49MHx8KEU9RS5wcmV2Wix3Lng+PW0mJncueDw9ZyYmdy55Pj1fJiZ3Lnk8PWImJnchPT1yJiZ3IT09cyYmX2EoZixsLHUscCxjLGQsdy54LHcueSkmJkluKHcucHJldix3LHcubmV4dCk+PTApKXJldHVybiExO3c9dy5uZXh0Wn1mb3IoO0UmJkUuej49Tzspe2lmKEUueD49bSYmRS54PD1nJiZFLnk+PV8mJkUueTw9YiYmRSE9PXImJkUhPT1zJiZfYShmLGwsdSxwLGMsZCxFLngsRS55KSYmSW4oRS5wcmV2LEUsRS5uZXh0KT49MClyZXR1cm4hMTtFPUUucHJldlp9Zm9yKDt3JiZ3Lno8PVQ7KXtpZih3Lng+PW0mJncueDw9ZyYmdy55Pj1fJiZ3Lnk8PWImJnchPT1yJiZ3IT09cyYmX2EoZixsLHUscCxjLGQsdy54LHcueSkmJkluKHcucHJldix3LHcubmV4dCk+PTApcmV0dXJuITE7dz13Lm5leHRafXJldHVybiEwfWZ1bmN0aW9uIEtOKHQsZSxuKXt2YXIgbz10O2Rve3ZhciByPW8ucHJldixpPW8ubmV4dC5uZXh0OyFuZChyLGkpJiZlVChyLG8sby5uZXh0LGkpJiZ2ZihyLGkpJiZ2ZihpLHIpJiYoZS5wdXNoKHIuaS9ufDApLGUucHVzaChvLmkvbnwwKSxlLnB1c2goaS5pL258MCksRGYobyksRGYoby5uZXh0KSxvPXQ9aSksbz1vLm5leHR9d2hpbGUobyE9PXQpO3JldHVybiB1YyhvKX1mdW5jdGlvbiBXTih0LGUsbixvLHIsaSl7dmFyIHM9dDtkb3tmb3IodmFyIGY9cy5uZXh0Lm5leHQ7ZiE9PXMucHJldjspe2lmKHMuaSE9PWYuaSYmbkkocyxmKSl7dmFyIHU9blQocyxmKTtzPXVjKHMscy5uZXh0KSx1PXVjKHUsdS5uZXh0KSxJZihzLGUsbixvLHIsaSwwKSxJZih1LGUsbixvLHIsaSwwKTtyZXR1cm59Zj1mLm5leHR9cz1zLm5leHR9d2hpbGUocyE9PXQpfWZ1bmN0aW9uIFhOKHQsZSxuLG8pe3ZhciByPVtdLGkscyxmLHUsYztmb3IoaT0wLHM9ZS5sZW5ndGg7aTxzO2krKylmPWVbaV0qbyx1PWk8cy0xP2VbaSsxXSpvOnQubGVuZ3RoLGM9dFQodCxmLHUsbywhMSksYz09PWMubmV4dCYmKGMuc3RlaW5lcj0hMCksci5wdXNoKGVJKGMpKTtmb3Ioci5zb3J0KFlOKSxpPTA7aTxyLmxlbmd0aDtpKyspbj0kTihyW2ldLG4pO3JldHVybiBufWZ1bmN0aW9uIFlOKHQsZSl7cmV0dXJuIHQueC1lLnh9ZnVuY3Rpb24gJE4odCxlKXt2YXIgbj1aTih0LGUpO2lmKCFuKXJldHVybiBlO3ZhciBvPW5UKG4sdCk7cmV0dXJuIHVjKG8sby5uZXh0KSx1YyhuLG4ubmV4dCl9ZnVuY3Rpb24gWk4odCxlKXt2YXIgbj1lLG89dC54LHI9dC55LGk9LTEvMCxzO2Rve2lmKHI8PW4ueSYmcj49bi5uZXh0LnkmJm4ubmV4dC55IT09bi55KXt2YXIgZj1uLngrKHItbi55KSoobi5uZXh0Lngtbi54KS8obi5uZXh0Lnktbi55KTtpZihmPD1vJiZmPmkmJihpPWYscz1uLng8bi5uZXh0Lng/bjpuLm5leHQsZj09PW8pKXJldHVybiBzfW49bi5uZXh0fXdoaWxlKG4hPT1lKTtpZighcylyZXR1cm4gbnVsbDt2YXIgdT1zLGM9cy54LGw9cy55LHA9MS8wLGQ7bj1zO2RvIG8+PW4ueCYmbi54Pj1jJiZvIT09bi54JiZfYShyPGw/bzppLHIsYyxsLHI8bD9pOm8scixuLngsbi55KSYmKGQ9TWF0aC5hYnMoci1uLnkpLyhvLW4ueCksdmYobix0KSYmKGQ8cHx8ZD09PXAmJihuLng+cy54fHxuLng9PT1zLngmJlFOKHMsbikpKSYmKHM9bixwPWQpKSxuPW4ubmV4dDt3aGlsZShuIT09dSk7cmV0dXJuIHN9ZnVuY3Rpb24gUU4odCxlKXtyZXR1cm4gSW4odC5wcmV2LHQsZS5wcmV2KTwwJiZJbihlLm5leHQsdCx0Lm5leHQpPDB9ZnVuY3Rpb24gSk4odCxlLG4sbyl7dmFyIHI9dDtkbyByLno9PT0wJiYoci56PUUwKHIueCxyLnksZSxuLG8pKSxyLnByZXZaPXIucHJldixyLm5leHRaPXIubmV4dCxyPXIubmV4dDt3aGlsZShyIT09dCk7ci5wcmV2Wi5uZXh0Wj1udWxsLHIucHJldlo9bnVsbCx0SShyKX1mdW5jdGlvbiB0SSh0KXt2YXIgZSxuLG8scixpLHMsZix1LGM9MTtkb3tmb3Iobj10LHQ9bnVsbCxpPW51bGwscz0wO247KXtmb3IocysrLG89bixmPTAsZT0wO2U8YyYmKGYrKyxvPW8ubmV4dFosISFvKTtlKyspO2Zvcih1PWM7Zj4wfHx1PjAmJm87KWYhPT0wJiYodT09PTB8fCFvfHxuLno8PW8ueik/KHI9bixuPW4ubmV4dFosZi0tKToocj1vLG89by5uZXh0Wix1LS0pLGk/aS5uZXh0Wj1yOnQ9cixyLnByZXZaPWksaT1yO249b31pLm5leHRaPW51bGwsYyo9Mn13aGlsZShzPjEpO3JldHVybiB0fWZ1bmN0aW9uIEUwKHQsZSxuLG8scil7cmV0dXJuIHQ9KHQtbikqcnwwLGU9KGUtbykqcnwwLHQ9KHR8dDw8OCkmMTY3MTE5MzUsdD0odHx0PDw0KSYyNTI2NDUxMzUsdD0odHx0PDwyKSY4NTg5OTM0NTksdD0odHx0PDwxKSYxNDMxNjU1NzY1LGU9KGV8ZTw8OCkmMTY3MTE5MzUsZT0oZXxlPDw0KSYyNTI2NDUxMzUsZT0oZXxlPDwyKSY4NTg5OTM0NTksZT0oZXxlPDwxKSYxNDMxNjU1NzY1LHR8ZTw8MX1mdW5jdGlvbiBlSSh0KXt2YXIgZT10LG49dDtkbyhlLng8bi54fHxlLng9PT1uLngmJmUueTxuLnkpJiYobj1lKSxlPWUubmV4dDt3aGlsZShlIT09dCk7cmV0dXJuIG59ZnVuY3Rpb24gX2EodCxlLG4sbyxyLGkscyxmKXtyZXR1cm4oci1zKSooZS1mKT49KHQtcykqKGktZikmJih0LXMpKihvLWYpPj0obi1zKSooZS1mKSYmKG4tcykqKGktZik+PShyLXMpKihvLWYpfWZ1bmN0aW9uIG5JKHQsZSl7cmV0dXJuIHQubmV4dC5pIT09ZS5pJiZ0LnByZXYuaSE9PWUuaSYmIW9JKHQsZSkmJih2Zih0LGUpJiZ2ZihlLHQpJiZySSh0LGUpJiYoSW4odC5wcmV2LHQsZS5wcmV2KXx8SW4odCxlLnByZXYsZSkpfHxuZCh0LGUpJiZJbih0LnByZXYsdCx0Lm5leHQpPjAmJkluKGUucHJldixlLGUubmV4dCk+MCl9ZnVuY3Rpb24gSW4odCxlLG4pe3JldHVybihlLnktdC55KSoobi54LWUueCktKGUueC10LngpKihuLnktZS55KX1mdW5jdGlvbiBuZCh0LGUpe3JldHVybiB0Lng9PT1lLngmJnQueT09PWUueX1mdW5jdGlvbiBlVCh0LGUsbixvKXt2YXIgcj10ZChJbih0LGUsbikpLGk9dGQoSW4odCxlLG8pKSxzPXRkKEluKG4sbyx0KSksZj10ZChJbihuLG8sZSkpO3JldHVybiEhKHIhPT1pJiZzIT09Znx8cj09PTAmJkpwKHQsbixlKXx8aT09PTAmJkpwKHQsbyxlKXx8cz09PTAmJkpwKG4sdCxvKXx8Zj09PTAmJkpwKG4sZSxvKSl9ZnVuY3Rpb24gSnAodCxlLG4pe3JldHVybiBlLng8PU1hdGgubWF4KHQueCxuLngpJiZlLng+PU1hdGgubWluKHQueCxuLngpJiZlLnk8PU1hdGgubWF4KHQueSxuLnkpJiZlLnk+PU1hdGgubWluKHQueSxuLnkpfWZ1bmN0aW9uIHRkKHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH1mdW5jdGlvbiBvSSh0LGUpe3ZhciBuPXQ7ZG97aWYobi5pIT09dC5pJiZuLm5leHQuaSE9PXQuaSYmbi5pIT09ZS5pJiZuLm5leHQuaSE9PWUuaSYmZVQobixuLm5leHQsdCxlKSlyZXR1cm4hMDtuPW4ubmV4dH13aGlsZShuIT09dCk7cmV0dXJuITF9ZnVuY3Rpb24gdmYodCxlKXtyZXR1cm4gSW4odC5wcmV2LHQsdC5uZXh0KTwwP0luKHQsZSx0Lm5leHQpPj0wJiZJbih0LHQucHJldixlKT49MDpJbih0LGUsdC5wcmV2KTwwfHxJbih0LHQubmV4dCxlKTwwfWZ1bmN0aW9uIHJJKHQsZSl7dmFyIG49dCxvPSExLHI9KHQueCtlLngpLzIsaT0odC55K2UueSkvMjtkbyBuLnk+aSE9bi5uZXh0Lnk+aSYmbi5uZXh0LnkhPT1uLnkmJnI8KG4ubmV4dC54LW4ueCkqKGktbi55KS8obi5uZXh0Lnktbi55KStuLngmJihvPSFvKSxuPW4ubmV4dDt3aGlsZShuIT09dCk7cmV0dXJuIG99ZnVuY3Rpb24gblQodCxlKXt2YXIgbj1uZXcgUjAodC5pLHQueCx0LnkpLG89bmV3IFIwKGUuaSxlLngsZS55KSxyPXQubmV4dCxpPWUucHJldjtyZXR1cm4gdC5uZXh0PWUsZS5wcmV2PXQsbi5uZXh0PXIsci5wcmV2PW4sby5uZXh0PW4sbi5wcmV2PW8saS5uZXh0PW8sby5wcmV2PWksb31mdW5jdGlvbiBKdyh0LGUsbixvKXt2YXIgcj1uZXcgUjAodCxlLG4pO3JldHVybiBvPyhyLm5leHQ9by5uZXh0LHIucHJldj1vLG8ubmV4dC5wcmV2PXIsby5uZXh0PXIpOihyLnByZXY9cixyLm5leHQ9cikscn1mdW5jdGlvbiBEZih0KXt0Lm5leHQucHJldj10LnByZXYsdC5wcmV2Lm5leHQ9dC5uZXh0LHQucHJldlomJih0LnByZXZaLm5leHRaPXQubmV4dFopLHQubmV4dFomJih0Lm5leHRaLnByZXZaPXQucHJldlopfWZ1bmN0aW9uIFIwKHQsZSxuKXt0aGlzLmk9dCx0aGlzLng9ZSx0aGlzLnk9bix0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLno9MCx0aGlzLnByZXZaPW51bGwsdGhpcy5uZXh0Wj1udWxsLHRoaXMuc3RlaW5lcj0hMX1lZC5kZXZpYXRpb249ZnVuY3Rpb24odCxlLG4sbyl7dmFyIHI9ZSYmZS5sZW5ndGgsaT1yP2VbMF0qbjp0Lmxlbmd0aCxzPU1hdGguYWJzKFMwKHQsMCxpLG4pKTtpZihyKWZvcih2YXIgZj0wLHU9ZS5sZW5ndGg7Zjx1O2YrKyl7dmFyIGM9ZVtmXSpuLGw9Zjx1LTE/ZVtmKzFdKm46dC5sZW5ndGg7cy09TWF0aC5hYnMoUzAodCxjLGwsbikpfXZhciBwPTA7Zm9yKGY9MDtmPG8ubGVuZ3RoO2YrPTMpe3ZhciBkPW9bZl0qbixtPW9bZisxXSpuLF89b1tmKzJdKm47cCs9TWF0aC5hYnMoKHRbZF0tdFtfXSkqKHRbbSsxXS10W2QrMV0pLSh0W2RdLXRbbV0pKih0W18rMV0tdFtkKzFdKSl9cmV0dXJuIHM9PT0wJiZwPT09MD8wOk1hdGguYWJzKChwLXMpL3MpfTtmdW5jdGlvbiBTMCh0LGUsbixvKXtmb3IodmFyIHI9MCxpPWUscz1uLW87aTxuO2krPW8pcis9KHRbc10tdFtpXSkqKHRbaSsxXSt0W3MrMV0pLHM9aTtyZXR1cm4gcn1lZC5mbGF0dGVuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdWzBdLmxlbmd0aCxuPXt2ZXJ0aWNlczpbXSxob2xlczpbXSxkaW1lbnNpb25zOmV9LG89MCxyPTA7cjx0Lmxlbmd0aDtyKyspe2Zvcih2YXIgaT0wO2k8dFtyXS5sZW5ndGg7aSsrKWZvcih2YXIgcz0wO3M8ZTtzKyspbi52ZXJ0aWNlcy5wdXNoKHRbcl1baV1bc10pO3I+MCYmKG8rPXRbci0xXS5sZW5ndGgsbi5ob2xlcy5wdXNoKG8pKX1yZXR1cm4gbn19KTt2YXIgb2QseG8sbGM9WigoKT0+e2tzKCk7b2Q9e0NMT0NLV0lTRTpxdC5DVyxDT1VOVEVSX0NMT0NLV0lTRTpxdC5DQ1d9O29kLnZhbGlkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09b2QuQ0xPQ0tXSVNFfHx0PT09b2QuQ09VTlRFUl9DTE9DS1dJU0V9O3hvPU9iamVjdC5mcmVlemUob2QpfSk7dmFyIGNULGlJLHNJLGZzLGFULGZULHVULHJULGlULHNULEZpLGxULHBULGRULHlhLGNJLGFJLGZJLHgwLFNlLHFyPVooKCk9PntjVD1tbyhvVCgpLDEpO3plKCk7VXQoKTt2ZSgpO1l0KCk7RGUoKTtJdCgpO2F0KCk7WnQoKTtOZigpO1hlKCk7WWUoKTtXdCgpO3RuKCk7bGMoKTtpST1uZXcgYSxzST1uZXcgYSxmcz17fTtmcy5jb21wdXRlQXJlYTJEPWZ1bmN0aW9uKHQpe3kuZGVmaW5lZCgicG9zaXRpb25zIix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygicG9zaXRpb25zLmxlbmd0aCIsdC5sZW5ndGgsMyk7bGV0IGU9dC5sZW5ndGgsbj0wO2ZvcihsZXQgbz1lLTEscj0wO3I8ZTtvPXIrKyl7bGV0IGk9dFtvXSxzPXRbcl07bis9aS54KnMueS1zLngqaS55fXJldHVybiBuKi41fTtmcy5jb21wdXRlV2luZGluZ09yZGVyMkQ9ZnVuY3Rpb24odCl7cmV0dXJuIGZzLmNvbXB1dGVBcmVhMkQodCk+MD94by5DT1VOVEVSX0NMT0NLV0lTRTp4by5DTE9DS1dJU0V9O2ZzLnRyaWFuZ3VsYXRlPWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJwb3NpdGlvbnMiLHQpO2xldCBuPW50LnBhY2tBcnJheSh0KTtyZXR1cm4oMCxjVC5kZWZhdWx0KShuLGUsMil9O2FUPW5ldyBhLGZUPW5ldyBhLHVUPW5ldyBhLHJUPW5ldyBhLGlUPW5ldyBhLHNUPW5ldyBhLEZpPW5ldyBhLGxUPW5ldyBudCxwVD1uZXcgbnQsZFQ9bmV3IG50LHlhPW5ldyBudDtmcy5jb21wdXRlU3ViZGl2aXNpb249ZnVuY3Rpb24odCxlLG4sbyxyKXtyPXgocixNLlJBRElBTlNfUEVSX0RFR1JFRSk7bGV0IGk9aChvKTt5LnR5cGVPZi5vYmplY3QoImVsbGlwc29pZCIsdCkseS5kZWZpbmVkKCJwb3NpdGlvbnMiLGUpLHkuZGVmaW5lZCgiaW5kaWNlcyIsbikseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImluZGljZXMubGVuZ3RoIixuLmxlbmd0aCwzKSx5LnR5cGVPZi5udW1iZXIuZXF1YWxzKCJpbmRpY2VzLmxlbmd0aCAlIDMiLCIwIixuLmxlbmd0aCUzLDApLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbigiZ3JhbnVsYXJpdHkiLHIsMCk7bGV0IHM9bi5zbGljZSgwKSxmLHU9ZS5sZW5ndGgsYz1uZXcgQXJyYXkodSozKSxsPW5ldyBBcnJheSh1KjIpLHA9MCxkPTA7Zm9yKGY9MDtmPHU7ZisrKXtsZXQgRT1lW2ZdO2lmKGNbcCsrXT1FLngsY1twKytdPUUueSxjW3ArK109RS56LGkpe2xldCB3PW9bZl07bFtkKytdPXcueCxsW2QrK109dy55fX1sZXQgbT1bXSxfPXt9LGc9dC5tYXhpbXVtUmFkaXVzLGI9TS5jaG9yZExlbmd0aChyLGcpLE89YipiO2Zvcig7cy5sZW5ndGg+MDspe2xldCBFPXMucG9wKCksdz1zLnBvcCgpLEM9cy5wb3AoKSxOPWEuZnJvbUFycmF5KGMsQyozLGFUKSxJPWEuZnJvbUFycmF5KGMsdyozLGZUKSxMPWEuZnJvbUFycmF5KGMsRSozLHVUKSx2LEQsVTtpJiYodj1udC5mcm9tQXJyYXkobCxDKjIsbFQpLEQ9bnQuZnJvbUFycmF5KGwsdyoyLHBUKSxVPW50LmZyb21BcnJheShsLEUqMixkVCkpO2xldCBBPWEubXVsdGlwbHlCeVNjYWxhcihhLm5vcm1hbGl6ZShOLHJUKSxnLHJUKSxTPWEubXVsdGlwbHlCeVNjYWxhcihhLm5vcm1hbGl6ZShJLGlUKSxnLGlUKSxQPWEubXVsdGlwbHlCeVNjYWxhcihhLm5vcm1hbGl6ZShMLHNUKSxnLHNUKSxGPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KEEsUyxGaSkpLGo9YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QoUyxQLEZpKSksSD1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChQLEEsRmkpKSxrPU1hdGgubWF4KEYsaixIKSxLLFgsUjtrPk8/Rj09PWs/KEs9YCR7TWF0aC5taW4oQyx3KX0gJHtNYXRoLm1heChDLHcpfWAsZj1fW0tdLGgoZil8fChYPWEuYWRkKE4sSSxGaSksYS5tdWx0aXBseUJ5U2NhbGFyKFgsLjUsWCksYy5wdXNoKFgueCxYLnksWC56KSxmPWMubGVuZ3RoLzMtMSxfW0tdPWYsaSYmKFI9bnQuYWRkKHYsRCx5YSksbnQubXVsdGlwbHlCeVNjYWxhcihSLC41LFIpLGwucHVzaChSLngsUi55KSkpLHMucHVzaChDLGYsRSkscy5wdXNoKGYsdyxFKSk6aj09PWs/KEs9YCR7TWF0aC5taW4odyxFKX0gJHtNYXRoLm1heCh3LEUpfWAsZj1fW0tdLGgoZil8fChYPWEuYWRkKEksTCxGaSksYS5tdWx0aXBseUJ5U2NhbGFyKFgsLjUsWCksYy5wdXNoKFgueCxYLnksWC56KSxmPWMubGVuZ3RoLzMtMSxfW0tdPWYsaSYmKFI9bnQuYWRkKEQsVSx5YSksbnQubXVsdGlwbHlCeVNjYWxhcihSLC41LFIpLGwucHVzaChSLngsUi55KSkpLHMucHVzaCh3LGYsQykscy5wdXNoKGYsRSxDKSk6SD09PWsmJihLPWAke01hdGgubWluKEUsQyl9ICR7TWF0aC5tYXgoRSxDKX1gLGY9X1tLXSxoKGYpfHwoWD1hLmFkZChMLE4sRmkpLGEubXVsdGlwbHlCeVNjYWxhcihYLC41LFgpLGMucHVzaChYLngsWC55LFgueiksZj1jLmxlbmd0aC8zLTEsX1tLXT1mLGkmJihSPW50LmFkZChVLHYseWEpLG50Lm11bHRpcGx5QnlTY2FsYXIoUiwuNSxSKSxsLnB1c2goUi54LFIueSkpKSxzLnB1c2goRSxmLHcpLHMucHVzaChmLEMsdykpOihtLnB1c2goQyksbS5wdXNoKHcpLG0ucHVzaChFKSl9bGV0IFQ9e2F0dHJpYnV0ZXM6e3Bvc2l0aW9uOm5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Y30pfSxpbmRpY2VzOm0scHJpbWl0aXZlVHlwZTpMdC5UUklBTkdMRVN9O3JldHVybiBpJiYoVC5hdHRyaWJ1dGVzLnN0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpsfSkpLG5ldyBGdChUKX07Y0k9bmV3IGN0LGFJPW5ldyBjdCxmST1uZXcgY3QseDA9bmV3IGN0O2ZzLmNvbXB1dGVSaHVtYkxpbmVTdWJkaXZpc2lvbj1mdW5jdGlvbih0LGUsbixvLHIpe3I9eChyLE0uUkFESUFOU19QRVJfREVHUkVFKTtsZXQgaT1oKG8pO3kudHlwZU9mLm9iamVjdCgiZWxsaXBzb2lkIix0KSx5LmRlZmluZWQoInBvc2l0aW9ucyIsZSkseS5kZWZpbmVkKCJpbmRpY2VzIixuKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiaW5kaWNlcy5sZW5ndGgiLG4ubGVuZ3RoLDMpLHkudHlwZU9mLm51bWJlci5lcXVhbHMoImluZGljZXMubGVuZ3RoICUgMyIsIjAiLG4ubGVuZ3RoJTMsMCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuKCJncmFudWxhcml0eSIsciwwKTtsZXQgcz1uLnNsaWNlKDApLGYsdT1lLmxlbmd0aCxjPW5ldyBBcnJheSh1KjMpLGw9bmV3IEFycmF5KHUqMikscD0wLGQ9MDtmb3IoZj0wO2Y8dTtmKyspe2xldCBDPWVbZl07aWYoY1twKytdPUMueCxjW3ArK109Qy55LGNbcCsrXT1DLnosaSl7bGV0IE49b1tmXTtsW2QrK109Ti54LGxbZCsrXT1OLnl9fWxldCBtPVtdLF89e30sZz10Lm1heGltdW1SYWRpdXMsYj1NLmNob3JkTGVuZ3RoKHIsZyksTz1uZXcgSm8odm9pZCAwLHZvaWQgMCx0KSxUPW5ldyBKbyh2b2lkIDAsdm9pZCAwLHQpLEU9bmV3IEpvKHZvaWQgMCx2b2lkIDAsdCk7Zm9yKDtzLmxlbmd0aD4wOyl7bGV0IEM9cy5wb3AoKSxOPXMucG9wKCksST1zLnBvcCgpLEw9YS5mcm9tQXJyYXkoYyxJKjMsYVQpLHY9YS5mcm9tQXJyYXkoYyxOKjMsZlQpLEQ9YS5mcm9tQXJyYXkoYyxDKjMsdVQpLFUsQSxTO2kmJihVPW50LmZyb21BcnJheShsLEkqMixsVCksQT1udC5mcm9tQXJyYXkobCxOKjIscFQpLFM9bnQuZnJvbUFycmF5KGwsQyoyLGRUKSk7bGV0IFA9dC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhMLGNJKSxGPXQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModixhSSksaj10LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKEQsZkkpO08uc2V0RW5kUG9pbnRzKFAsRik7bGV0IEg9Ty5zdXJmYWNlRGlzdGFuY2U7VC5zZXRFbmRQb2ludHMoRixqKTtsZXQgaz1ULnN1cmZhY2VEaXN0YW5jZTtFLnNldEVuZFBvaW50cyhqLFApO2xldCBLPUUuc3VyZmFjZURpc3RhbmNlLFg9TWF0aC5tYXgoSCxrLEspLFIsUSxmdCxwdCxndDtYPmI/SD09PVg/KFI9YCR7TWF0aC5taW4oSSxOKX0gJHtNYXRoLm1heChJLE4pfWAsZj1fW1JdLGgoZil8fChRPU8uaW50ZXJwb2xhdGVVc2luZ0ZyYWN0aW9uKC41LHgwKSxmdD0oUC5oZWlnaHQrRi5oZWlnaHQpKi41LHB0PWEuZnJvbVJhZGlhbnMoUS5sb25naXR1ZGUsUS5sYXRpdHVkZSxmdCx0LEZpKSxjLnB1c2gocHQueCxwdC55LHB0LnopLGY9Yy5sZW5ndGgvMy0xLF9bUl09ZixpJiYoZ3Q9bnQuYWRkKFUsQSx5YSksbnQubXVsdGlwbHlCeVNjYWxhcihndCwuNSxndCksbC5wdXNoKGd0LngsZ3QueSkpKSxzLnB1c2goSSxmLEMpLHMucHVzaChmLE4sQykpOms9PT1YPyhSPWAke01hdGgubWluKE4sQyl9ICR7TWF0aC5tYXgoTixDKX1gLGY9X1tSXSxoKGYpfHwoUT1ULmludGVycG9sYXRlVXNpbmdGcmFjdGlvbiguNSx4MCksZnQ9KEYuaGVpZ2h0K2ouaGVpZ2h0KSouNSxwdD1hLmZyb21SYWRpYW5zKFEubG9uZ2l0dWRlLFEubGF0aXR1ZGUsZnQsdCxGaSksYy5wdXNoKHB0LngscHQueSxwdC56KSxmPWMubGVuZ3RoLzMtMSxfW1JdPWYsaSYmKGd0PW50LmFkZChBLFMseWEpLG50Lm11bHRpcGx5QnlTY2FsYXIoZ3QsLjUsZ3QpLGwucHVzaChndC54LGd0LnkpKSkscy5wdXNoKE4sZixJKSxzLnB1c2goZixDLEkpKTpLPT09WCYmKFI9YCR7TWF0aC5taW4oQyxJKX0gJHtNYXRoLm1heChDLEkpfWAsZj1fW1JdLGgoZil8fChRPUUuaW50ZXJwb2xhdGVVc2luZ0ZyYWN0aW9uKC41LHgwKSxmdD0oai5oZWlnaHQrUC5oZWlnaHQpKi41LHB0PWEuZnJvbVJhZGlhbnMoUS5sb25naXR1ZGUsUS5sYXRpdHVkZSxmdCx0LEZpKSxjLnB1c2gocHQueCxwdC55LHB0LnopLGY9Yy5sZW5ndGgvMy0xLF9bUl09ZixpJiYoZ3Q9bnQuYWRkKFMsVSx5YSksbnQubXVsdGlwbHlCeVNjYWxhcihndCwuNSxndCksbC5wdXNoKGd0LngsZ3QueSkpKSxzLnB1c2goQyxmLE4pLHMucHVzaChmLEksTikpOihtLnB1c2goSSksbS5wdXNoKE4pLG0ucHVzaChDKSl9bGV0IHc9e2F0dHJpYnV0ZXM6e3Bvc2l0aW9uOm5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Y30pfSxpbmRpY2VzOm0scHJpbWl0aXZlVHlwZTpMdC5UUklBTkdMRVN9O3JldHVybiBpJiYody5hdHRyaWJ1dGVzLnN0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpsfSkpLG5ldyBGdCh3KX07ZnMuc2NhbGVUb0dlb2RldGljSGVpZ2h0PWZ1bmN0aW9uKHQsZSxuLG8pe249eChuLCQuV0dTODQpO2xldCByPWlJLGk9c0k7aWYoZT14KGUsMCksbz14KG8sITApLGgodCkpe2xldCBzPXQubGVuZ3RoO2ZvcihsZXQgZj0wO2Y8cztmKz0zKWEuZnJvbUFycmF5KHQsZixpKSxvJiYoaT1uLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoaSxpKSksZSE9PTAmJihyPW4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGksciksYS5tdWx0aXBseUJ5U2NhbGFyKHIsZSxyKSxhLmFkZChpLHIsaSkpLHRbZl09aS54LHRbZisxXT1pLnksdFtmKzJdPWkuen1yZXR1cm4gdH07U2U9ZnN9KTtmdW5jdGlvbiB1cygpe3RoaXMuX2FycmF5PVtdLHRoaXMuX29mZnNldD0wLHRoaXMuX2xlbmd0aD0wfXZhciBQMCxtVD1aKCgpPT57T2JqZWN0LmRlZmluZVByb3BlcnRpZXModXMucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sZW5ndGh9fX0pO3VzLnByb3RvdHlwZS5lbnF1ZXVlPWZ1bmN0aW9uKHQpe3RoaXMuX2FycmF5LnB1c2godCksdGhpcy5fbGVuZ3RoKyt9O3VzLnByb3RvdHlwZS5kZXF1ZXVlPWZ1bmN0aW9uKCl7aWYodGhpcy5fbGVuZ3RoPT09MClyZXR1cm47bGV0IHQ9dGhpcy5fYXJyYXksZT10aGlzLl9vZmZzZXQsbj10W2VdO3JldHVybiB0W2VdPXZvaWQgMCxlKyssZT4xMCYmZSoyPnQubGVuZ3RoJiYodGhpcy5fYXJyYXk9dC5zbGljZShlKSxlPTApLHRoaXMuX29mZnNldD1lLHRoaXMuX2xlbmd0aC0tLG59O3VzLnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9uKCl7aWYodGhpcy5fbGVuZ3RoIT09MClyZXR1cm4gdGhpcy5fYXJyYXlbdGhpcy5fb2Zmc2V0XX07dXMucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hcnJheS5pbmRleE9mKHQpIT09LTF9O3VzLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX2FycmF5Lmxlbmd0aD10aGlzLl9vZmZzZXQ9dGhpcy5fbGVuZ3RoPTB9O3VzLnByb3RvdHlwZS5zb3J0PWZ1bmN0aW9uKHQpe3RoaXMuX29mZnNldD4wJiYodGhpcy5fYXJyYXk9dGhpcy5fYXJyYXkuc2xpY2UodGhpcy5fb2Zmc2V0KSx0aGlzLl9vZmZzZXQ9MCksdGhpcy5fYXJyYXkuc29ydCh0KX07UDA9dXN9KTtmdW5jdGlvbiB5VCh0LGUsbixvKXtyZXR1cm4gbnQuc3VidHJhY3QoZSx0LHBjKSxudC5tdWx0aXBseUJ5U2NhbGFyKHBjLG4vbyxwYyksbnQuYWRkKHQscGMscGMpLFtwYy54LHBjLnldfWZ1bmN0aW9uIHVJKHQsZSxuLG8pe3JldHVybiBhLnN1YnRyYWN0KGUsdCxscyksYS5tdWx0aXBseUJ5U2NhbGFyKGxzLG4vbyxscyksYS5hZGQodCxscyxscyksW2xzLngsbHMueSxscy56XX1mdW5jdGlvbiBnSSh0LGUsbil7bGV0IG89bi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyh0LGlkKSxyPW4uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZSxzZCk7aWYoTWF0aC5zaWduKG8ubGF0aXR1ZGUpPT09TWF0aC5zaWduKHIubGF0aXR1ZGUpKXJldHVybjtyZC5zZXRFbmRQb2ludHMobyxyKTtsZXQgaT1yZC5maW5kSW50ZXJzZWN0aW9uV2l0aExhdGl0dWRlKDAseUkpO2lmKCFoKGkpKXJldHVybjtsZXQgcz1NYXRoLm1pbihvLmxvbmdpdHVkZSxyLmxvbmdpdHVkZSksZj1NYXRoLm1heChvLmxvbmdpdHVkZSxyLmxvbmdpdHVkZSk7aWYoTWF0aC5hYnMoZi1zKT5NLlBJKXtsZXQgdT1zO3M9ZixmPXV9aWYoIShpLmxvbmdpdHVkZTxzfHxpLmxvbmdpdHVkZT5mKSlyZXR1cm4gbi5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihpKX1mdW5jdGlvbiBBSSh0LGUsbixvKXtpZihvPT09dWUuUkhVTUIpcmV0dXJuIGdJKHQsZSxuKTtsZXQgcj1fby5saW5lU2VnbWVudFBsYW5lKHQsZSxvbi5PUklHSU5fWFlfUExBTkUpO2lmKGgocikpcmV0dXJuIG4uc2NhbGVUb0dlb2RldGljU3VyZmFjZShyLHIpfWZ1bmN0aW9uIHdJKHQsZSxuKXtsZXQgbz1bXSxyLGkscyxmLHUsYz0wO2Zvcig7Yzx0Lmxlbmd0aDspe3I9dFtjXSxpPXRbKGMrMSkldC5sZW5ndGhdLHM9TS5zaWduKHIueiksZj1NLnNpZ24oaS56KTtsZXQgbD1wPT5lLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHAsYkkpLmxvbmdpdHVkZTtpZihzPT09MClvLnB1c2goe3Bvc2l0aW9uOmMsdHlwZTpzLHZpc2l0ZWQ6ITEsbmV4dDpmLHRoZXRhOmwocil9KTtlbHNlIGlmKGYhPT0wKXtpZih1PUFJKHIsaSxlLG4pLCsrYywhaCh1KSljb250aW51ZTt0LnNwbGljZShjLDAsdSksby5wdXNoKHtwb3NpdGlvbjpjLHR5cGU6cyx2aXNpdGVkOiExLG5leHQ6Zix0aGV0YTpsKHUpfSl9KytjfXJldHVybiBvfWZ1bmN0aW9uIGdUKHQsZSxuLG8scixpLHMpe2xldCBmPVtdLHU9aSxjPXA9PmQ9PmQucG9zaXRpb249PT1wLGw9W107ZG97bGV0IHA9blt1XTtmLnB1c2gocCk7bGV0IGQ9by5maW5kSW5kZXgoYyh1KSksbT1vW2RdO2lmKCFoKG0pKXsrK3U7Y29udGludWV9bGV0e3Zpc2l0ZWQ6Xyx0eXBlOmcsbmV4dDpifT1tO2lmKG0udmlzaXRlZD0hMCxnPT09MCl7aWYoYj09PTApe2xldCB3PW9bZC0ocz8xOi0xKV07aWYodz8ucG9zaXRpb249PT11KzEpdy52aXNpdGVkPSEwO2Vsc2V7Kyt1O2NvbnRpbnVlfX1pZighXyYmcyYmYj4wfHxpPT09dSYmIXMmJmI8MCl7Kyt1O2NvbnRpbnVlfX1pZighKHM/Zz49MDpnPD0wKSl7Kyt1O2NvbnRpbnVlfV98fGwucHVzaCh1KTtsZXQgVD1kKyhzPzE6LTEpLEU9b1tUXTtpZighaChFKSl7Kyt1O2NvbnRpbnVlfXU9RS5wb3NpdGlvbn13aGlsZSh1PG4ubGVuZ3RoJiZ1Pj0wJiZ1IT09aSYmZi5sZW5ndGg8bi5sZW5ndGgpO3Quc3BsaWNlKGUscixmKTtmb3IobGV0IHAgb2YgbCllPWdUKHQsKytlLG4sbywwLHAsIXMpO3JldHVybiBlfXZhciB3bixwYyxscyxpZCxzZCxsSSxwSSxyZCxkSSxtSSxoSSxfSSx5SSxiSSxUSSxPSSxFSSxSSSxoVCxfVCxTSSxDSSx5ZSxMZj1aKCgpPT57ZmMoKTtqcigpO3plKCk7VXQoKTt2ZSgpO0RlKCk7SXQoKTthdCgpO1p0KCk7TmYoKTtYZSgpO1llKCk7YW4oKTtzaSgpOyRlKCk7dGMoKTtXdCgpO0ZuKCk7Y3MoKTtRdygpO3FyKCk7dG4oKTskbygpO21UKCk7bGMoKTt3bj17fTt3bi5jb21wdXRlSGllcmFyY2h5UGFja2VkTGVuZ3RoPWZ1bmN0aW9uKHQsZSl7bGV0IG49MCxvPVt0XTtmb3IoO28ubGVuZ3RoPjA7KXtsZXQgcj1vLnBvcCgpO2lmKCFoKHIpKWNvbnRpbnVlO24rPTI7bGV0IGk9ci5wb3NpdGlvbnMscz1yLmhvbGVzO2lmKGgoaSkmJmkubGVuZ3RoPjAmJihuKz1pLmxlbmd0aCplLnBhY2tlZExlbmd0aCksaChzKSl7bGV0IGY9cy5sZW5ndGg7Zm9yKGxldCB1PTA7dTxmOysrdSlvLnB1c2goc1t1XSl9fXJldHVybiBufTt3bi5wYWNrUG9seWdvbkhpZXJhcmNoeT1mdW5jdGlvbih0LGUsbixvKXtsZXQgcj1bdF07Zm9yKDtyLmxlbmd0aD4wOyl7bGV0IGk9ci5wb3AoKTtpZighaChpKSljb250aW51ZTtsZXQgcz1pLnBvc2l0aW9ucyxmPWkuaG9sZXM7aWYoZVtuKytdPWgocyk/cy5sZW5ndGg6MCxlW24rK109aChmKT9mLmxlbmd0aDowLGgocykpe2xldCB1PXMubGVuZ3RoO2ZvcihsZXQgYz0wO2M8dTsrK2Msbis9by5wYWNrZWRMZW5ndGgpby5wYWNrKHNbY10sZSxuKX1pZihoKGYpKXtsZXQgdT1mLmxlbmd0aDtmb3IobGV0IGM9MDtjPHU7KytjKXIucHVzaChmW2NdKX19cmV0dXJuIG59O3duLnVucGFja1BvbHlnb25IaWVyYXJjaHk9ZnVuY3Rpb24odCxlLG4pe2xldCBvPXRbZSsrXSxyPXRbZSsrXSxpPW5ldyBBcnJheShvKSxzPXI+MD9uZXcgQXJyYXkocik6dm9pZCAwO2ZvcihsZXQgZj0wO2Y8bzsrK2YsZSs9bi5wYWNrZWRMZW5ndGgpaVtmXT1uLnVucGFjayh0LGUpO2ZvcihsZXQgZj0wO2Y8cjsrK2Ypc1tmXT13bi51bnBhY2tQb2x5Z29uSGllcmFyY2h5KHQsZSxuKSxlPXNbZl0uc3RhcnRpbmdJbmRleCxkZWxldGUgc1tmXS5zdGFydGluZ0luZGV4O3JldHVybntwb3NpdGlvbnM6aSxob2xlczpzLHN0YXJ0aW5nSW5kZXg6ZX19O3BjPW5ldyBudDtscz1uZXcgYTt3bi5zdWJkaXZpZGVMaW5lQ291bnQ9ZnVuY3Rpb24odCxlLG4pe2xldCByPWEuZGlzdGFuY2UodCxlKS9uLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoTS5sb2cyKHIpKSk7cmV0dXJuIE1hdGgucG93KDIsaSl9O2lkPW5ldyBjdCxzZD1uZXcgY3QsbEk9bmV3IGN0LHBJPW5ldyBhLHJkPW5ldyBKbzt3bi5zdWJkaXZpZGVSaHVtYkxpbmVDb3VudD1mdW5jdGlvbih0LGUsbixvKXtsZXQgcj10LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGUsaWQpLGk9dC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhuLHNkKSxmPW5ldyBKbyhyLGksdCkuc3VyZmFjZURpc3RhbmNlL28sdT1NYXRoLm1heCgwLE1hdGguY2VpbChNLmxvZzIoZikpKTtyZXR1cm4gTWF0aC5wb3coMix1KX07d24uc3ViZGl2aWRlVGV4Y29vcmRMaW5lPWZ1bmN0aW9uKHQsZSxuLG8scixpKXtsZXQgcz13bi5zdWJkaXZpZGVMaW5lQ291bnQobixvLHIpLGY9bnQuZGlzdGFuY2UodCxlKSx1PWYvcyxjPWk7Yy5sZW5ndGg9cyoyO2xldCBsPTA7Zm9yKGxldCBwPTA7cDxzO3ArKyl7bGV0IGQ9eVQodCxlLHAqdSxmKTtjW2wrK109ZFswXSxjW2wrK109ZFsxXX1yZXR1cm4gY307d24uc3ViZGl2aWRlTGluZT1mdW5jdGlvbih0LGUsbixvKXtsZXQgcj13bi5zdWJkaXZpZGVMaW5lQ291bnQodCxlLG4pLGk9YS5kaXN0YW5jZSh0LGUpLHM9aS9yO2gobyl8fChvPVtdKTtsZXQgZj1vO2YubGVuZ3RoPXIqMztsZXQgdT0wO2ZvcihsZXQgYz0wO2M8cjtjKyspe2xldCBsPXVJKHQsZSxjKnMsaSk7Zlt1KytdPWxbMF0sZlt1KytdPWxbMV0sZlt1KytdPWxbMl19cmV0dXJuIGZ9O3duLnN1YmRpdmlkZVRleGNvb3JkUmh1bWJMaW5lPWZ1bmN0aW9uKHQsZSxuLG8scixpLHMpe2xldCBmPW4uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobyxpZCksdT1uLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHIsc2QpO3JkLnNldEVuZFBvaW50cyhmLHUpO2xldCBjPXJkLnN1cmZhY2VEaXN0YW5jZS9pLGw9TWF0aC5tYXgoMCxNYXRoLmNlaWwoTS5sb2cyKGMpKSkscD1NYXRoLnBvdygyLGwpLGQ9bnQuZGlzdGFuY2UodCxlKSxtPWQvcCxfPXM7Xy5sZW5ndGg9cCoyO2xldCBnPTA7Zm9yKGxldCBiPTA7YjxwO2IrKyl7bGV0IE89eVQodCxlLGIqbSxkKTtfW2crK109T1swXSxfW2crK109T1sxXX1yZXR1cm4gX307d24uc3ViZGl2aWRlUmh1bWJMaW5lPWZ1bmN0aW9uKHQsZSxuLG8scil7bGV0IGk9dC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhlLGlkKSxzPXQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobixzZCksZj1uZXcgSm8oaSxzLHQpLHU9Zi5zdXJmYWNlRGlzdGFuY2UvbyxjPU1hdGgubWF4KDAsTWF0aC5jZWlsKE0ubG9nMih1KSkpLGw9TWF0aC5wb3coMixjKSxwPWYuc3VyZmFjZURpc3RhbmNlL2w7aChyKXx8KHI9W10pO2xldCBkPXI7ZC5sZW5ndGg9bCozO2xldCBtPTA7Zm9yKGxldCBfPTA7XzxsO18rKyl7bGV0IGc9Zi5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlKF8qcCxsSSksYj10LmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGcscEkpO2RbbSsrXT1iLngsZFttKytdPWIueSxkW20rK109Yi56fXJldHVybiBkfTtkST1uZXcgYSxtST1uZXcgYSxoST1uZXcgYSxfST1uZXcgYTt3bi5zY2FsZVRvR2VvZGV0aWNIZWlnaHRFeHRydWRlZD1mdW5jdGlvbih0LGUsbixvLHIpe289eChvLCQuV0dTODQpO2xldCBpPWRJLHM9bUksZj1oSSx1PV9JO2lmKGgodCkmJmgodC5hdHRyaWJ1dGVzKSYmaCh0LmF0dHJpYnV0ZXMucG9zaXRpb24pKXtsZXQgYz10LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLGw9Yy5sZW5ndGgvMjtmb3IobGV0IHA9MDtwPGw7cCs9MylhLmZyb21BcnJheShjLHAsZiksby5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZixpKSx1PW8uc2NhbGVUb0dlb2RldGljU3VyZmFjZShmLHUpLHM9YS5tdWx0aXBseUJ5U2NhbGFyKGksbixzKSxzPWEuYWRkKHUscyxzKSxjW3ArbF09cy54LGNbcCsxK2xdPXMueSxjW3ArMitsXT1zLnosciYmKHU9YS5jbG9uZShmLHUpKSxzPWEubXVsdGlwbHlCeVNjYWxhcihpLGUscykscz1hLmFkZCh1LHMscyksY1twXT1zLngsY1twKzFdPXMueSxjW3ArMl09cy56fXJldHVybiB0fTt3bi5wb2x5Z29uT3V0bGluZXNGcm9tSGllcmFyY2h5PWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz1bXSxyPW5ldyBQMDtyLmVucXVldWUodCk7bGV0IGkscyxmO2Zvcig7ci5sZW5ndGghPT0wOyl7bGV0IHU9ci5kZXF1ZXVlKCksYz11LnBvc2l0aW9ucztpZihlKWZvcihmPWMubGVuZ3RoLGk9MDtpPGY7aSsrKW4uc2NhbGVUb0dlb2RldGljU3VyZmFjZShjW2ldLGNbaV0pO2lmKGM9Q24oYyxhLmVxdWFsc0Vwc2lsb24sITApLGMubGVuZ3RoPDMpY29udGludWU7bGV0IGw9dS5ob2xlcz91LmhvbGVzLmxlbmd0aDowO2ZvcihpPTA7aTxsO2krKyl7bGV0IHA9dS5ob2xlc1tpXSxkPXAucG9zaXRpb25zO2lmKGUpZm9yKGY9ZC5sZW5ndGgscz0wO3M8ZjsrK3Mpbi5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGRbc10sZFtzXSk7aWYoZD1DbihkLGEuZXF1YWxzRXBzaWxvbiwhMCksZC5sZW5ndGg8Myljb250aW51ZTtvLnB1c2goZCk7bGV0IG09MDtmb3IoaChwLmhvbGVzKSYmKG09cC5ob2xlcy5sZW5ndGgpLHM9MDtzPG07cysrKXIuZW5xdWV1ZShwLmhvbGVzW3NdKX1vLnB1c2goYyl9cmV0dXJuIG99O3lJPW5ldyBjdDtiST1uZXcgY3Q7d24uc3BsaXRQb2x5Z29uc09uRXF1YXRvcj1mdW5jdGlvbih0LGUsbixvKXtoKG8pfHwobz1bXSksby5zcGxpY2UoMCwwLC4uLnQpLG8ubGVuZ3RoPXQubGVuZ3RoO2xldCByPTA7Zm9yKDtyPG8ubGVuZ3RoOyl7bGV0IGk9b1tyXSxzPWkuc2xpY2UoKTtpZihpLmxlbmd0aDwzKXtvW3JdPXMsKytyO2NvbnRpbnVlfWxldCBmPXdJKHMsZSxuKTtpZihzLmxlbmd0aD09PWkubGVuZ3RofHxmLmxlbmd0aDw9MSl7b1tyXT1zLCsrcjtjb250aW51ZX1mLnNvcnQoKGMsbCk9PmMudGhldGEtbC50aGV0YSk7bGV0IHU9c1swXS56Pj0wO3I9Z1QobyxyLHMsZiwxLDAsdSl9cmV0dXJuIG99O3duLnBvbHlnb25zRnJvbUhpZXJhcmNoeT1mdW5jdGlvbih0LGUsbixvLHIsaSl7bGV0IHM9W10sZj1bXSx1PW5ldyBQMDt1LmVucXVldWUodCk7bGV0IGM9aChpKTtmb3IoO3UubGVuZ3RoIT09MDspe2xldCBsPXUuZGVxdWV1ZSgpLHA9bC5wb3NpdGlvbnMsZD1sLmhvbGVzLG0sXztpZihvKWZvcihfPXAubGVuZ3RoLG09MDttPF87bSsrKXIuc2NhbGVUb0dlb2RldGljU3VyZmFjZShwW21dLHBbbV0pO2lmKGV8fChwPUNuKHAsYS5lcXVhbHNFcHNpbG9uLCEwKSkscC5sZW5ndGg8Myljb250aW51ZTtsZXQgZz1uKHApO2lmKCFoKGcpKWNvbnRpbnVlO2xldCBiPVtdLE89U2UuY29tcHV0ZVdpbmRpbmdPcmRlcjJEKGcpO2lmKE89PT14by5DTE9DS1dJU0UmJihnLnJldmVyc2UoKSxwPXAuc2xpY2UoKS5yZXZlcnNlKCkpLGMpe2M9ITE7bGV0IE49W3BdO2lmKE49aShOLE4pLE4ubGVuZ3RoPjEpe2ZvcihsZXQgSSBvZiBOKXUuZW5xdWV1ZShuZXcgWncoSSxkKSk7Y29udGludWV9fWxldCBUPXAuc2xpY2UoKSxFPWgoZCk/ZC5sZW5ndGg6MCx3PVtdLEM7Zm9yKG09MDttPEU7bSsrKXtsZXQgTj1kW21dLEk9Ti5wb3NpdGlvbnM7aWYobylmb3IoXz1JLmxlbmd0aCxDPTA7QzxfOysrQylyLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoSVtDXSxJW0NdKTtpZihlfHwoST1DbihJLGEuZXF1YWxzRXBzaWxvbiwhMCkpLEkubGVuZ3RoPDMpY29udGludWU7bGV0IEw9bihJKTtpZighaChMKSljb250aW51ZTtPPVNlLmNvbXB1dGVXaW5kaW5nT3JkZXIyRChMKSxPPT09eG8uQ0xPQ0tXSVNFJiYoTC5yZXZlcnNlKCksST1JLnNsaWNlKCkucmV2ZXJzZSgpKSx3LnB1c2goSSksYi5wdXNoKFQubGVuZ3RoKSxUPVQuY29uY2F0KEkpLGc9Zy5jb25jYXQoTCk7bGV0IHY9MDtmb3IoaChOLmhvbGVzKSYmKHY9Ti5ob2xlcy5sZW5ndGgpLEM9MDtDPHY7QysrKXUuZW5xdWV1ZShOLmhvbGVzW0NdKX1zLnB1c2goe291dGVyUmluZzpwLGhvbGVzOnd9KSxmLnB1c2goe3Bvc2l0aW9uczpULHBvc2l0aW9uczJEOmcsaG9sZXM6Yn0pfXJldHVybntoaWVyYXJjaHk6cyxwb2x5Z29uczpmfX07VEk9bmV3IG50LE9JPW5ldyBhLEVJPW5ldyBuZSxSST1uZXcgdHQ7d24uY29tcHV0ZUJvdW5kaW5nUmVjdGFuZ2xlPWZ1bmN0aW9uKHQsZSxuLG8scil7bGV0IGk9bmUuZnJvbUF4aXNBbmdsZSh0LG8sRUkpLHM9dHQuZnJvbVF1YXRlcm5pb24oaSxSSSksZj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksdT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksYz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksbD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkscD1uLmxlbmd0aDtmb3IobGV0IGQ9MDtkPHA7KytkKXtsZXQgbT1hLmNsb25lKG5bZF0sT0kpO3R0Lm11bHRpcGx5QnlWZWN0b3IocyxtLG0pO2xldCBfPWUobSxUSSk7aChfKSYmKGY9TWF0aC5taW4oZixfLngpLHU9TWF0aC5tYXgodSxfLngpLGM9TWF0aC5taW4oYyxfLnkpLGw9TWF0aC5tYXgobCxfLnkpKX1yZXR1cm4gci54PWYsci55PWMsci53aWR0aD11LWYsci5oZWlnaHQ9bC1jLHJ9O3duLmNyZWF0ZUdlb21ldHJ5RnJvbVBvc2l0aW9ucz1mdW5jdGlvbih0LGUsbixvLHIsaSxzKXtsZXQgZj1TZS50cmlhbmd1bGF0ZShlLnBvc2l0aW9uczJELGUuaG9sZXMpO2YubGVuZ3RoPDMmJihmPVswLDEsMl0pO2xldCB1PWUucG9zaXRpb25zLGM9aChuKSxsPWM/bi5wb3NpdGlvbnM6dm9pZCAwO2lmKHIpe2xldCBwPXUubGVuZ3RoLGQ9bmV3IEFycmF5KHAqMyksbT0wO2ZvcihsZXQgYj0wO2I8cDtiKyspe2xldCBPPXVbYl07ZFttKytdPU8ueCxkW20rK109Ty55LGRbbSsrXT1PLnp9bGV0IF89e2F0dHJpYnV0ZXM6e3Bvc2l0aW9uOm5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6ZH0pfSxpbmRpY2VzOmYscHJpbWl0aXZlVHlwZTpMdC5UUklBTkdMRVN9O2MmJihfLmF0dHJpYnV0ZXMuc3Q9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOm50LnBhY2tBcnJheShsKX0pKTtsZXQgZz1uZXcgRnQoXyk7cmV0dXJuIGkubm9ybWFsP0JlLmNvbXB1dGVOb3JtYWwoZyk6Z31pZihzPT09dWUuR0VPREVTSUMpcmV0dXJuIFNlLmNvbXB1dGVTdWJkaXZpc2lvbih0LHUsZixsLG8pO2lmKHM9PT11ZS5SSFVNQilyZXR1cm4gU2UuY29tcHV0ZVJodW1iTGluZVN1YmRpdmlzaW9uKHQsdSxmLGwsbyl9O2hUPVtdLF9UPVtdLFNJPW5ldyBhLENJPW5ldyBhO3duLmNvbXB1dGVXYWxsR2VvbWV0cnk9ZnVuY3Rpb24odCxlLG4sbyxyLGkpe2xldCBzLGYsdSxjLGwscCxkLG0sXyxnPXQubGVuZ3RoLGI9MCxPPTAsVD1oKGUpLEU9VD9lLnBvc2l0aW9uczp2b2lkIDA7aWYocilmb3IoZj1nKjMqMixzPW5ldyBBcnJheShmKjIpLFQmJihfPWcqMioyLG09bmV3IEFycmF5KF8qMikpLHU9MDt1PGc7dSsrKWM9dFt1XSxsPXRbKHUrMSklZ10sc1tiXT1zW2IrZl09Yy54LCsrYixzW2JdPXNbYitmXT1jLnksKytiLHNbYl09c1tiK2ZdPWMueiwrK2Isc1tiXT1zW2IrZl09bC54LCsrYixzW2JdPXNbYitmXT1sLnksKytiLHNbYl09c1tiK2ZdPWwueiwrK2IsVCYmKHA9RVt1XSxkPUVbKHUrMSklZ10sbVtPXT1tW08rX109cC54LCsrTyxtW09dPW1bTytfXT1wLnksKytPLG1bT109bVtPK19dPWQueCwrK08sbVtPXT1tW08rX109ZC55LCsrTyk7ZWxzZXtsZXQgTD1NLmNob3JkTGVuZ3RoKG8sbi5tYXhpbXVtUmFkaXVzKSx2PTA7aWYoaT09PXVlLkdFT0RFU0lDKWZvcih1PTA7dTxnO3UrKyl2Kz13bi5zdWJkaXZpZGVMaW5lQ291bnQodFt1XSx0Wyh1KzEpJWddLEwpO2Vsc2UgaWYoaT09PXVlLlJIVU1CKWZvcih1PTA7dTxnO3UrKyl2Kz13bi5zdWJkaXZpZGVSaHVtYkxpbmVDb3VudChuLHRbdV0sdFsodSsxKSVnXSxMKTtmb3IoZj0oditnKSozLHM9bmV3IEFycmF5KGYqMiksVCYmKF89KHYrZykqMixtPW5ldyBBcnJheShfKjIpKSx1PTA7dTxnO3UrKyl7Yz10W3VdLGw9dFsodSsxKSVnXTtsZXQgRCxVO1QmJihwPUVbdV0sZD1FWyh1KzEpJWddKSxpPT09dWUuR0VPREVTSUM/KEQ9d24uc3ViZGl2aWRlTGluZShjLGwsTCxfVCksVCYmKFU9d24uc3ViZGl2aWRlVGV4Y29vcmRMaW5lKHAsZCxjLGwsTCxoVCkpKTppPT09dWUuUkhVTUImJihEPXduLnN1YmRpdmlkZVJodW1iTGluZShuLGMsbCxMLF9UKSxUJiYoVT13bi5zdWJkaXZpZGVUZXhjb29yZFJodW1iTGluZShwLGQsbixjLGwsTCxoVCkpKTtsZXQgQT1ELmxlbmd0aDtmb3IobGV0IFM9MDtTPEE7KytTLCsrYilzW2JdPURbU10sc1tiK2ZdPURbU107aWYoc1tiXT1sLngsc1tiK2ZdPWwueCwrK2Isc1tiXT1sLnksc1tiK2ZdPWwueSwrK2Isc1tiXT1sLnosc1tiK2ZdPWwueiwrK2IsVCl7bGV0IFM9VS5sZW5ndGg7Zm9yKGxldCBQPTA7UDxTOysrUCwrK08pbVtPXT1VW1BdLG1bTytfXT1VW1BdO21bT109ZC54LG1bTytfXT1kLngsKytPLG1bT109ZC55LG1bTytfXT1kLnksKytPfX19Zz1zLmxlbmd0aDtsZXQgdz1EdC5jcmVhdGVUeXBlZEFycmF5KGcvMyxnLXQubGVuZ3RoKjYpLEM9MDtmb3IoZy89Nix1PTA7dTxnO3UrKyl7bGV0IEw9dSx2PUwrMSxEPUwrZyxVPUQrMTtjPWEuZnJvbUFycmF5KHMsTCozLFNJKSxsPWEuZnJvbUFycmF5KHMsdiozLENJKSwhYS5lcXVhbHNFcHNpbG9uKGMsbCxNLkVQU0lMT04xMCxNLkVQU0lMT04xMCkmJih3W0MrK109TCx3W0MrK109RCx3W0MrK109dix3W0MrK109dix3W0MrK109RCx3W0MrK109VSl9bGV0IE49e2F0dHJpYnV0ZXM6bmV3IHJlKHtwb3NpdGlvbjpuZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnN9KX0pLGluZGljZXM6dyxwcmltaXRpdmVUeXBlOkx0LlRSSUFOR0xFU307cmV0dXJuIFQmJihOLmF0dHJpYnV0ZXMuc3Q9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOm19KSksbmV3IEZ0KE4pfTt5ZT13bn0pO2Z1bmN0aW9uIGtJKHQsZSxuLG8scixpLHMsZix1KXtsZXQgYz10LnBvc2l0aW9ucyxsPVNlLnRyaWFuZ3VsYXRlKHQucG9zaXRpb25zMkQsdC5ob2xlcyk7bC5sZW5ndGg8MyYmKGw9WzAsMSwyXSk7bGV0IHA9RHQuY3JlYXRlVHlwZWRBcnJheShjLmxlbmd0aCxsLmxlbmd0aCk7cC5zZXQobCk7bGV0IGQ9Qkk7aWYobyE9PTApe2xldCBVPW5lLmZyb21BeGlzQW5nbGUocyxvLEFUKTtpZihkPXR0LmZyb21RdWF0ZXJuaW9uKFUsZCksZS50YW5nZW50fHxlLmJpdGFuZ2VudCl7VT1uZS5mcm9tQXhpc0FuZ2xlKHMsLW8sQVQpO2xldCBBPXR0LmZyb21RdWF0ZXJuaW9uKFUsVUkpO2Y9YS5ub3JtYWxpemUodHQubXVsdGlwbHlCeVZlY3RvcihBLGYsZiksZiksZS5iaXRhbmdlbnQmJih1PWEubm9ybWFsaXplKGEuY3Jvc3MocyxmLHUpLHUpKX19ZWxzZSBkPXR0LmNsb25lKHR0LklERU5USVRZLGQpO2xldCBtPU5JO2Uuc3QmJihtLng9bi54LG0ueT1uLnkpO2xldCBfPWMubGVuZ3RoLGc9XyozLGI9bmV3IEZsb2F0NjRBcnJheShnKSxPPWUubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkoZyk6dm9pZCAwLFQ9ZS50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoZyk6dm9pZCAwLEU9ZS5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShnKTp2b2lkIDAsdz1lLnN0P25ldyBGbG9hdDMyQXJyYXkoXyoyKTp2b2lkIDAsQz0wLE49MCxJPTAsTD0wLHY9MDtmb3IobGV0IFU9MDtVPF87VSsrKXtsZXQgQT1jW1VdO2lmKGJbQysrXT1BLngsYltDKytdPUEueSxiW0MrK109QS56LGUuc3QpaWYoaChyKSYmci5wb3NpdGlvbnMubGVuZ3RoPT09Xyl3W3YrK109ci5wb3NpdGlvbnNbVV0ueCx3W3YrK109ci5wb3NpdGlvbnNbVV0ueTtlbHNle2xldCBTPXR0Lm11bHRpcGx5QnlWZWN0b3IoZCxBLHhJKSxQPWkoUyxNSSk7bnQuc3VidHJhY3QoUCxtLFApO2xldCBGPU0uY2xhbXAoUC54L24ud2lkdGgsMCwxKSxqPU0uY2xhbXAoUC55L24uaGVpZ2h0LDAsMSk7d1t2KytdPUYsd1t2KytdPWp9ZS5ub3JtYWwmJihPW04rK109cy54LE9bTisrXT1zLnksT1tOKytdPXMueiksZS50YW5nZW50JiYoVFtMKytdPWYueCxUW0wrK109Zi55LFRbTCsrXT1mLnopLGUuYml0YW5nZW50JiYoRVtJKytdPXUueCxFW0krK109dS55LEVbSSsrXT11LnopfWxldCBEPW5ldyByZTtyZXR1cm4gZS5wb3NpdGlvbiYmKEQucG9zaXRpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpifSkpLGUubm9ybWFsJiYoRC5ub3JtYWw9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOk99KSksZS50YW5nZW50JiYoRC50YW5nZW50PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpUfSkpLGUuYml0YW5nZW50JiYoRC5iaXRhbmdlbnQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOkV9KSksZS5zdCYmKEQuc3Q9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOnd9KSksbmV3IEZ0KHthdHRyaWJ1dGVzOkQsaW5kaWNlczpwLHByaW1pdGl2ZVR5cGU6THQuVFJJQU5HTEVTfSl9ZnVuY3Rpb24gZGModCl7dD14KHQseC5FTVBUWV9PQkpFQ1QpO2xldCBlPXQucG9seWdvbkhpZXJhcmNoeSxuPXQudGV4dHVyZUNvb3JkaW5hdGVzO3kuZGVmaW5lZCgib3B0aW9ucy5wb2x5Z29uSGllcmFyY2h5IixlKTtsZXQgbz14KHQudmVydGV4Rm9ybWF0LGx0LkRFRkFVTFQpO3RoaXMuX3ZlcnRleEZvcm1hdD1sdC5jbG9uZShvKSx0aGlzLl9wb2x5Z29uSGllcmFyY2h5PWUsdGhpcy5fc3RSb3RhdGlvbj14KHQuc3RSb3RhdGlvbiwwKSx0aGlzLl9lbGxpcHNvaWQ9JC5jbG9uZSh4KHQuZWxsaXBzb2lkLCQuV0dTODQpKSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDb3BsYW5hclBvbHlnb25HZW9tZXRyeSIsdGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVzPW4sdGhpcy5wYWNrZWRMZW5ndGg9eWUuY29tcHV0ZUhpZXJhcmNoeVBhY2tlZExlbmd0aChlLGEpK2x0LnBhY2tlZExlbmd0aCskLnBhY2tlZExlbmd0aCsoaChuKT95ZS5jb21wdXRlSGllcmFyY2h5UGFja2VkTGVuZ3RoKG4sbnQpOjEpKzJ9dmFyIHhJLFBJLE1JLE5JLElJLHZJLERJLEZmLExJLEZJLEFULEJJLFVJLFZJLEdJLHpJLGpJLE0wLGJUPVooKCk9PntqcigpO3hmKCk7UGUoKTt6ZSgpO1V0KCk7WXQoKTtEZSgpO3cwKCk7SXQoKTthdCgpO1p0KCk7WGUoKTtZZSgpO2FuKCk7c2MoKTtzaSgpOyRlKCk7V3QoKTtGbigpO0xmKCk7cXIoKTt0bigpOyRvKCk7Um8oKTt4ST1uZXcgYSxQST1uZXcgSHIsTUk9bmV3IG50LE5JPW5ldyBudCxJST1uZXcgYSx2ST1uZXcgYSxEST1uZXcgYSxGZj1uZXcgYSxMST1uZXcgYSxGST1uZXcgYSxBVD1uZXcgbmUsQkk9bmV3IHR0LFVJPW5ldyB0dCxWST1uZXcgYTtkYy5mcm9tUG9zaXRpb25zPWZ1bmN0aW9uKHQpe3Q9eCh0LHguRU1QVFlfT0JKRUNUKSx5LmRlZmluZWQoIm9wdGlvbnMucG9zaXRpb25zIix0LnBvc2l0aW9ucyk7bGV0IGU9e3BvbHlnb25IaWVyYXJjaHk6e3Bvc2l0aW9uczp0LnBvc2l0aW9uc30sdmVydGV4Rm9ybWF0OnQudmVydGV4Rm9ybWF0LHN0Um90YXRpb246dC5zdFJvdGF0aW9uLGVsbGlwc29pZDp0LmVsbGlwc29pZCx0ZXh0dXJlQ29vcmRpbmF0ZXM6dC50ZXh0dXJlQ29vcmRpbmF0ZXN9O3JldHVybiBuZXcgZGMoZSl9O2RjLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPXgobiwwKSxuPXllLnBhY2tQb2x5Z29uSGllcmFyY2h5KHQuX3BvbHlnb25IaWVyYXJjaHksZSxuLGEpLCQucGFjayh0Ll9lbGxpcHNvaWQsZSxuKSxuKz0kLnBhY2tlZExlbmd0aCxsdC5wYWNrKHQuX3ZlcnRleEZvcm1hdCxlLG4pLG4rPWx0LnBhY2tlZExlbmd0aCxlW24rK109dC5fc3RSb3RhdGlvbixoKHQuX3RleHR1cmVDb29yZGluYXRlcyk/bj15ZS5wYWNrUG9seWdvbkhpZXJhcmNoeSh0Ll90ZXh0dXJlQ29vcmRpbmF0ZXMsZSxuLG50KTplW24rK109LTEsZVtuKytdPXQucGFja2VkTGVuZ3RoLGV9O0dJPSQuY2xvbmUoJC5VTklUX1NQSEVSRSksekk9bmV3IGx0LGpJPXtwb2x5Z29uSGllcmFyY2h5Ont9fTtkYy51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9eChlLDApO2xldCBvPXllLnVucGFja1BvbHlnb25IaWVyYXJjaHkodCxlLGEpO2U9by5zdGFydGluZ0luZGV4LGRlbGV0ZSBvLnN0YXJ0aW5nSW5kZXg7bGV0IHI9JC51bnBhY2sodCxlLEdJKTtlKz0kLnBhY2tlZExlbmd0aDtsZXQgaT1sdC51bnBhY2sodCxlLHpJKTtlKz1sdC5wYWNrZWRMZW5ndGg7bGV0IHM9dFtlKytdLGY9dFtlXT09PS0xP3ZvaWQgMDp5ZS51bnBhY2tQb2x5Z29uSGllcmFyY2h5KHQsZSxudCk7aChmKT8oZT1mLnN0YXJ0aW5nSW5kZXgsZGVsZXRlIGYuc3RhcnRpbmdJbmRleCk6ZSsrO2xldCB1PXRbZSsrXTtyZXR1cm4gaChuKXx8KG49bmV3IGRjKGpJKSksbi5fcG9seWdvbkhpZXJhcmNoeT1vLG4uX2VsbGlwc29pZD0kLmNsb25lKHIsbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9bHQuY2xvbmUoaSxuLl92ZXJ0ZXhGb3JtYXQpLG4uX3N0Um90YXRpb249cyxuLl90ZXh0dXJlQ29vcmRpbmF0ZXM9ZixuLnBhY2tlZExlbmd0aD11LG59O2RjLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3ZlcnRleEZvcm1hdCxuPXQuX3BvbHlnb25IaWVyYXJjaHksbz10Ll9zdFJvdGF0aW9uLHI9dC5fdGV4dHVyZUNvb3JkaW5hdGVzLGk9aChyKSxzPW4ucG9zaXRpb25zO2lmKHM9Q24ocyxhLmVxdWFsc0Vwc2lsb24sITApLHMubGVuZ3RoPDMpcmV0dXJuO2xldCBmPUlJLHU9dkksYz1ESSxsPUxJLHA9Rkk7aWYoIW1hLmNvbXB1dGVQcm9qZWN0VG8yREFyZ3VtZW50cyhzLEZmLGwscCkpcmV0dXJuO2lmKGY9YS5jcm9zcyhsLHAsZiksZj1hLm5vcm1hbGl6ZShmLGYpLCFhLmVxdWFsc0Vwc2lsb24oRmYsYS5aRVJPLE0uRVBTSUxPTjYpKXtsZXQgdj10Ll9lbGxpcHNvaWQuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKEZmLFZJKTthLmRvdChmLHYpPDAmJihmPWEubmVnYXRlKGYsZiksbD1hLm5lZ2F0ZShsLGwpKX1sZXQgbT1tYS5jcmVhdGVQcm9qZWN0UG9pbnRzVG8yREZ1bmN0aW9uKEZmLGwscCksXz1tYS5jcmVhdGVQcm9qZWN0UG9pbnRUbzJERnVuY3Rpb24oRmYsbCxwKTtlLnRhbmdlbnQmJih1PWEuY2xvbmUobCx1KSksZS5iaXRhbmdlbnQmJihjPWEuY2xvbmUocCxjKSk7bGV0IGc9eWUucG9seWdvbnNGcm9tSGllcmFyY2h5KG4saSxtLCExKSxiPWcuaGllcmFyY2h5LE89Zy5wb2x5Z29ucyxUPWZ1bmN0aW9uKHYpe3JldHVybiB2fSxFPWk/eWUucG9seWdvbnNGcm9tSGllcmFyY2h5KHIsITAsVCwhMSkucG9seWdvbnM6dm9pZCAwO2lmKGIubGVuZ3RoPT09MClyZXR1cm47cz1iWzBdLm91dGVyUmluZztsZXQgdz15dC5mcm9tUG9pbnRzKHMpLEM9eWUuY29tcHV0ZUJvdW5kaW5nUmVjdGFuZ2xlKGYsXyxzLG8sUEkpLE49W107Zm9yKGxldCB2PTA7djxPLmxlbmd0aDt2Kyspe2xldCBEPW5ldyBjbyh7Z2VvbWV0cnk6a0koT1t2XSxlLEMsbyxpP0Vbdl06dm9pZCAwLF8sZix1LGMpfSk7Ti5wdXNoKEQpfWxldCBJPUJlLmNvbWJpbmVJbnN0YW5jZXMoTilbMF07SS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1uZXcgRmxvYXQ2NEFycmF5KEkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMpLEkuaW5kaWNlcz1EdC5jcmVhdGVUeXBlZEFycmF5KEkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLzMsSS5pbmRpY2VzKTtsZXQgTD1JLmF0dHJpYnV0ZXM7cmV0dXJuIGUucG9zaXRpb258fGRlbGV0ZSBMLnBvc2l0aW9uLG5ldyBGdCh7YXR0cmlidXRlczpMLGluZGljZXM6SS5pbmRpY2VzLHByaW1pdGl2ZVR5cGU6SS5wcmltaXRpdmVUeXBlLGJvdW5kaW5nU3BoZXJlOnd9KX07TTA9ZGN9KTt2YXIgTjA9e307bWUoTjAse2RlZmF1bHQ6KCk9PnFJfSk7ZnVuY3Rpb24gSEkodCxlKXtyZXR1cm4gaChlKSYmKHQ9TTAudW5wYWNrKHQsZSkpLE0wLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBxSSxJMD1aKCgpPT57YlQoKTthdCgpO3FJPUhJfSk7ZnVuY3Rpb24gS0kodCl7bGV0IGU9dC5sZW5ndGgsbj1uZXcgRmxvYXQ2NEFycmF5KGUqMyksbz1EdC5jcmVhdGVUeXBlZEFycmF5KGUsZSoyKSxyPTAsaT0wO2ZvcihsZXQgZj0wO2Y8ZTtmKyspe2xldCB1PXRbZl07bltyKytdPXUueCxuW3IrK109dS55LG5bcisrXT11Lnosb1tpKytdPWYsb1tpKytdPShmKzEpJWV9bGV0IHM9bmV3IHJlKHtwb3NpdGlvbjpuZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOm59KX0pO3JldHVybiBuZXcgRnQoe2F0dHJpYnV0ZXM6cyxpbmRpY2VzOm8scHJpbWl0aXZlVHlwZTpMdC5MSU5FU30pfWZ1bmN0aW9uIG1jKHQpe3Q9eCh0LHguRU1QVFlfT0JKRUNUKTtsZXQgZT10LnBvbHlnb25IaWVyYXJjaHk7eS5kZWZpbmVkKCJvcHRpb25zLnBvbHlnb25IaWVyYXJjaHkiLGUpLHRoaXMuX3BvbHlnb25IaWVyYXJjaHk9ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDb3BsYW5hclBvbHlnb25PdXRsaW5lR2VvbWV0cnkiLHRoaXMucGFja2VkTGVuZ3RoPXllLmNvbXB1dGVIaWVyYXJjaHlQYWNrZWRMZW5ndGgoZSxhKSsxfXZhciBXSSx2MCx3VD1aKCgpPT57anIoKTtQZSgpO1V0KCk7WXQoKTtEZSgpO3cwKCk7SXQoKTthdCgpO1hlKCk7WWUoKTthbigpO3NjKCk7c2koKTskZSgpO0xmKCk7dG4oKTttYy5mcm9tUG9zaXRpb25zPWZ1bmN0aW9uKHQpe3Q9eCh0LHguRU1QVFlfT0JKRUNUKSx5LmRlZmluZWQoIm9wdGlvbnMucG9zaXRpb25zIix0LnBvc2l0aW9ucyk7bGV0IGU9e3BvbHlnb25IaWVyYXJjaHk6e3Bvc2l0aW9uczp0LnBvc2l0aW9uc319O3JldHVybiBuZXcgbWMoZSl9O21jLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPXgobiwwKSxuPXllLnBhY2tQb2x5Z29uSGllcmFyY2h5KHQuX3BvbHlnb25IaWVyYXJjaHksZSxuLGEpLGVbbl09dC5wYWNrZWRMZW5ndGgsZX07V0k9e3BvbHlnb25IaWVyYXJjaHk6e319O21jLnVucGFjaz1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJhcnJheSIsdCksZT14KGUsMCk7bGV0IG89eWUudW5wYWNrUG9seWdvbkhpZXJhcmNoeSh0LGUsYSk7ZT1vLnN0YXJ0aW5nSW5kZXgsZGVsZXRlIG8uc3RhcnRpbmdJbmRleDtsZXQgcj10W2VdO3JldHVybiBoKG4pfHwobj1uZXcgbWMoV0kpKSxuLl9wb2x5Z29uSGllcmFyY2h5PW8sbi5wYWNrZWRMZW5ndGg9cixufTttYy5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll9wb2x5Z29uSGllcmFyY2h5LG49ZS5wb3NpdGlvbnM7aWYobj1DbihuLGEuZXF1YWxzRXBzaWxvbiwhMCksbi5sZW5ndGg8M3x8IW1hLnZhbGlkT3V0bGluZShuKSlyZXR1cm47bGV0IHI9eWUucG9seWdvbk91dGxpbmVzRnJvbUhpZXJhcmNoeShlLCExKTtpZihyLmxlbmd0aD09PTApcmV0dXJuO2xldCBpPVtdO2ZvcihsZXQgdT0wO3U8ci5sZW5ndGg7dSsrKXtsZXQgYz1uZXcgY28oe2dlb21ldHJ5OktJKHJbdV0pfSk7aS5wdXNoKGMpfWxldCBzPUJlLmNvbWJpbmVJbnN0YW5jZXMoaSlbMF0sZj15dC5mcm9tUG9pbnRzKGUucG9zaXRpb25zKTtyZXR1cm4gbmV3IEZ0KHthdHRyaWJ1dGVzOnMuYXR0cmlidXRlcyxpbmRpY2VzOnMuaW5kaWNlcyxwcmltaXRpdmVUeXBlOnMucHJpbWl0aXZlVHlwZSxib3VuZGluZ1NwaGVyZTpmfSl9O3YwPW1jfSk7dmFyIEQwPXt9O21lKEQwLHtkZWZhdWx0OigpPT5ZSX0pO2Z1bmN0aW9uIFhJKHQsZSl7cmV0dXJuIGgoZSkmJih0PXYwLnVucGFjayh0LGUpKSx0Ll9lbGxpcHNvaWQ9JC5jbG9uZSh0Ll9lbGxpcHNvaWQpLHYwLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBZSSxMMD1aKCgpPT57d1QoKTthdCgpO1p0KCk7WUk9WEl9KTt2YXIgJEksZm4saGM9WigoKT0+eyRJPXtST1VOREVEOjAsTUlURVJFRDoxLEJFVkVMRUQ6Mn0sZm49T2JqZWN0LmZyZWV6ZSgkSSl9KTtmdW5jdGlvbiBaSSh0KXtsZXQgZT10Ll91U3F1YXJlZCxuPXQuX2VsbGlwc29pZC5tYXhpbXVtUmFkaXVzLG89dC5fZWxsaXBzb2lkLm1pbmltdW1SYWRpdXMscj0obi1vKS9uLGk9TWF0aC5jb3ModC5fc3RhcnRIZWFkaW5nKSxzPU1hdGguc2luKHQuX3N0YXJ0SGVhZGluZyksZj0oMS1yKSpNYXRoLnRhbih0Ll9zdGFydC5sYXRpdHVkZSksdT0xL01hdGguc3FydCgxK2YqZiksYz11KmYsbD1NYXRoLmF0YW4yKGYsaSkscD11KnMsZD1wKnAsbT0xLWQsXz1NYXRoLnNxcnQobSksZz1lLzQsYj1nKmcsTz1iKmcsVD1iKmIsRT0xK2ctMypiLzQrNSpPLzQtMTc1KlQvNjQsdz0xLWcrMTUqYi84LTM1Kk8vOCxDPTEtMypnKzM1KmIvNCxOPTEtNSpnLEk9RSpsLXcqTWF0aC5zaW4oMipsKSpnLzItQypNYXRoLnNpbig0KmwpKmIvMTYtTipNYXRoLnNpbig2KmwpKk8vNDgtTWF0aC5zaW4oOCpsKSo1KlQvNTEyLEw9dC5fY29uc3RhbnRzO0wuYT1uLEwuYj1vLEwuZj1yLEwuY29zaW5lSGVhZGluZz1pLEwuc2luZUhlYWRpbmc9cyxMLnRhblU9ZixMLmNvc2luZVU9dSxMLnNpbmVVPWMsTC5zaWdtYT1sLEwuc2luZUFscGhhPXAsTC5zaW5lU3F1YXJlZEFscGhhPWQsTC5jb3NpbmVTcXVhcmVkQWxwaGE9bSxMLmNvc2luZUFscGhhPV8sTC51Mk92ZXI0PWcsTC51NE92ZXIxNj1iLEwudTZPdmVyNjQ9TyxMLnU4T3ZlcjI1Nj1ULEwuYTA9RSxMLmExPXcsTC5hMj1DLEwuYTM9TixMLmRpc3RhbmNlUmF0aW89SX1mdW5jdGlvbiBRSSh0LGUpe3JldHVybiB0KmUqKDQrdCooNC0zKmUpKS8xNn1mdW5jdGlvbiBUVCh0LGUsbixvLHIsaSxzKXtsZXQgZj1RSSh0LG4pO3JldHVybigxLWYpKnQqZSoobytmKnIqKHMrZippKigyKnMqcy0xKSkpfWZ1bmN0aW9uIEpJKHQsZSxuLG8scixpLHMpe2xldCBmPShlLW4pL2UsdT1pLW8sYz1NYXRoLmF0YW4oKDEtZikqTWF0aC50YW4ocikpLGw9TWF0aC5hdGFuKCgxLWYpKk1hdGgudGFuKHMpKSxwPU1hdGguY29zKGMpLGQ9TWF0aC5zaW4oYyksbT1NYXRoLmNvcyhsKSxfPU1hdGguc2luKGwpLGc9cCptLGI9cCpfLE89ZCpfLFQ9ZCptLEU9dSx3PU0uVFdPX1BJLEM9TWF0aC5jb3MoRSksTj1NYXRoLnNpbihFKSxJLEwsdixELFU7ZG97Qz1NYXRoLmNvcyhFKSxOPU1hdGguc2luKEUpO2xldCBYPWItVCpDO3Y9TWF0aC5zcXJ0KG0qbSpOKk4rWCpYKSxMPU8rZypDLEk9TWF0aC5hdGFuMih2LEwpO2xldCBSO3Y9PT0wPyhSPTAsRD0xKTooUj1nKk4vdixEPTEtUipSKSx3PUUsVT1MLTIqTy9ELGlzRmluaXRlKFUpfHwoVT0wKSxFPXUrVFQoZixSLEQsSSx2LEwsVSl9d2hpbGUoTWF0aC5hYnMoRS13KT5NLkVQU0lMT04xMik7bGV0IEE9RCooZSplLW4qbikvKG4qbiksUz0xK0EqKDQwOTYrQSooQSooMzIwLTE3NSpBKS03NjgpKS8xNjM4NCxQPUEqKDI1NitBKihBKig3NC00NypBKS0xMjgpKS8xMDI0LEY9VSpVLGo9UCp2KihVK1AqKEwqKDIqRi0xKS1QKlUqKDQqdip2LTMpKig0KkYtMykvNikvNCksSD1uKlMqKEktaiksaz1NYXRoLmF0YW4yKG0qTixiLVQqQyksSz1NYXRoLmF0YW4yKHAqTixiKkMtVCk7dC5fZGlzdGFuY2U9SCx0Ll9zdGFydEhlYWRpbmc9ayx0Ll9lbmRIZWFkaW5nPUssdC5fdVNxdWFyZWQ9QX1mdW5jdGlvbiBPVCh0LGUsbixvKXtsZXQgcj1hLm5vcm1hbGl6ZShvLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGUsRjApLHR2KSxpPWEubm9ybWFsaXplKG8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4obixGMCksRjApO3kudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJ2YWx1ZSIsTWF0aC5hYnMoTWF0aC5hYnMoYS5hbmdsZUJldHdlZW4ocixpKSktTWF0aC5QSSksLjAxMjUpLEpJKHQsby5tYXhpbXVtUmFkaXVzLG8ubWluaW11bVJhZGl1cyxlLmxvbmdpdHVkZSxlLmxhdGl0dWRlLG4ubG9uZ2l0dWRlLG4ubGF0aXR1ZGUpLHQuX3N0YXJ0PWN0LmNsb25lKGUsdC5fc3RhcnQpLHQuX2VuZD1jdC5jbG9uZShuLHQuX2VuZCksdC5fc3RhcnQuaGVpZ2h0PTAsdC5fZW5kLmhlaWdodD0wLFpJKHQpfWZ1bmN0aW9uIEJmKHQsZSxuKXtsZXQgbz14KG4sJC5XR1M4NCk7dGhpcy5fZWxsaXBzb2lkPW8sdGhpcy5fc3RhcnQ9bmV3IGN0LHRoaXMuX2VuZD1uZXcgY3QsdGhpcy5fY29uc3RhbnRzPXt9LHRoaXMuX3N0YXJ0SGVhZGluZz12b2lkIDAsdGhpcy5fZW5kSGVhZGluZz12b2lkIDAsdGhpcy5fZGlzdGFuY2U9dm9pZCAwLHRoaXMuX3VTcXVhcmVkPXZvaWQgMCxoKHQpJiZoKGUpJiZPVCh0aGlzLHQsZSxvKX12YXIgdHYsRjAsX2MsY2Q9WigoKT0+e1V0KCk7dmUoKTtZdCgpO0l0KCk7YXQoKTtadCgpO1d0KCk7dHY9bmV3IGEsRjA9bmV3IGE7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQmYucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fSxzdXJmYWNlRGlzdGFuY2U6e2dldDpmdW5jdGlvbigpe3JldHVybiB5LmRlZmluZWQoImRpc3RhbmNlIix0aGlzLl9kaXN0YW5jZSksdGhpcy5fZGlzdGFuY2V9fSxzdGFydDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0fX0sZW5kOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5kfX0sc3RhcnRIZWFkaW5nOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5kZWZpbmVkKCJkaXN0YW5jZSIsdGhpcy5fZGlzdGFuY2UpLHRoaXMuX3N0YXJ0SGVhZGluZ319LGVuZEhlYWRpbmc6e2dldDpmdW5jdGlvbigpe3JldHVybiB5LmRlZmluZWQoImRpc3RhbmNlIix0aGlzLl9kaXN0YW5jZSksdGhpcy5fZW5kSGVhZGluZ319fSk7QmYucHJvdG90eXBlLnNldEVuZFBvaW50cz1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgic3RhcnQiLHQpLHkuZGVmaW5lZCgiZW5kIixlKSxPVCh0aGlzLHQsZSx0aGlzLl9lbGxpcHNvaWQpfTtCZi5wcm90b3R5cGUuaW50ZXJwb2xhdGVVc2luZ0ZyYWN0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaW50ZXJwb2xhdGVVc2luZ1N1cmZhY2VEaXN0YW5jZSh0aGlzLl9kaXN0YW5jZSp0LGUpfTtCZi5wcm90b3R5cGUuaW50ZXJwb2xhdGVVc2luZ1N1cmZhY2VEaXN0YW5jZT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiZGlzdGFuY2UiLHRoaXMuX2Rpc3RhbmNlKTtsZXQgbj10aGlzLl9jb25zdGFudHMsbz1uLmRpc3RhbmNlUmF0aW8rdC9uLmIscj1NYXRoLmNvcygyKm8pLGk9TWF0aC5jb3MoNCpvKSxzPU1hdGguY29zKDYqbyksZj1NYXRoLnNpbigyKm8pLHU9TWF0aC5zaW4oNCpvKSxjPU1hdGguc2luKDYqbyksbD1NYXRoLnNpbig4Km8pLHA9bypvLGQ9bypwLG09bi51OE92ZXIyNTYsXz1uLnUyT3ZlcjQsZz1uLnU2T3ZlcjY0LGI9bi51NE92ZXIxNixPPTIqZCptKnIvMytvKigxLV8rNypiLzQtMTUqZy80KzU3OSptLzY0LShiLTE1KmcvNCsxODcqbS8xNikqci0oNSpnLzQtMTE1Km0vMTYpKmktMjkqbSpzLzE2KSsoXy8yLWIrNzEqZy8zMi04NSptLzE2KSpmKyg1KmIvMTYtNSpnLzQrMzgzKm0vOTYpKnUtcCooKGctMTEqbS8yKSpmKzUqbSp1LzIpKygyOSpnLzk2LTI5Km0vMTYpKmMrNTM5Km0qbC8xNTM2LFQ9TWF0aC5hc2luKE1hdGguc2luKE8pKm4uY29zaW5lQWxwaGEpLEU9TWF0aC5hdGFuKG4uYS9uLmIqTWF0aC50YW4oVCkpO089Ty1uLnNpZ21hO2xldCB3PU1hdGguY29zKDIqbi5zaWdtYStPKSxDPU1hdGguc2luKE8pLE49TWF0aC5jb3MoTyksST1uLmNvc2luZVUqTixMPW4uc2luZVUqQyxEPU1hdGguYXRhbjIoQypuLnNpbmVIZWFkaW5nLEktTCpuLmNvc2luZUhlYWRpbmcpLVRUKG4uZixuLnNpbmVBbHBoYSxuLmNvc2luZVNxdWFyZWRBbHBoYSxPLEMsTix3KTtyZXR1cm4gaChlKT8oZS5sb25naXR1ZGU9dGhpcy5fc3RhcnQubG9uZ2l0dWRlK0QsZS5sYXRpdHVkZT1FLGUuaGVpZ2h0PTAsZSk6bmV3IGN0KHRoaXMuX3N0YXJ0LmxvbmdpdHVkZStELEUsMCl9O19jPUJmfSk7ZnVuY3Rpb24gQ1QodCxlLG4pe2xldCBvPVUwO28ubGVuZ3RoPXQ7bGV0IHI7aWYoZT09PW4pe2ZvcihyPTA7cjx0O3IrKylvW3JdPWU7cmV0dXJuIG99bGV0IHM9KG4tZSkvdDtmb3Iocj0wO3I8dDtyKyspe2xldCBmPWUrcipzO29bcl09Zn1yZXR1cm4gb31mdW5jdGlvbiBmdih0LGUsbixvLHIsaSxzLGYpe2xldCB1PW8uc2NhbGVUb0dlb2RldGljU3VyZmFjZSh0LFYwKSxjPW8uc2NhbGVUb0dlb2RldGljU3VyZmFjZShlLGF2KSxsPVVvLm51bWJlck9mUG9pbnRzKHQsZSxuKSxwPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModSxmZCksZD1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGMsYWQpLG09Q1QobCxyLGkpO0IwLnNldEVuZFBvaW50cyhwLGQpO2xldCBfPUIwLnN1cmZhY2VEaXN0YW5jZS9sLGc9ZjtwLmhlaWdodD1yO2xldCBiPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4ocCxwcyk7YS5wYWNrKGIscyxnKSxnKz0zO2ZvcihsZXQgTz0xO088bDtPKyspe2xldCBUPUIwLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2UoTypfLGFkKTtULmhlaWdodD1tW09dLGI9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihULHBzKSxhLnBhY2soYixzLGcpLGcrPTN9cmV0dXJuIGd9ZnVuY3Rpb24gdXYodCxlLG4sbyxyLGkscyxmKXtsZXQgdT1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHQsZmQpLGM9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhlLGFkKSxsPVVvLm51bWJlck9mUG9pbnRzUmh1bWJMaW5lKHUsYyxuKTt1LmhlaWdodD0wLGMuaGVpZ2h0PTA7bGV0IHA9Q1QobCxyLGkpO1VmLmVsbGlwc29pZC5lcXVhbHMobyl8fChVZj1uZXcgSm8odm9pZCAwLHZvaWQgMCxvKSksVWYuc2V0RW5kUG9pbnRzKHUsYyk7bGV0IGQ9VWYuc3VyZmFjZURpc3RhbmNlL2wsbT1mO3UuaGVpZ2h0PXI7bGV0IF89by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbih1LHBzKTthLnBhY2soXyxzLG0pLG0rPTM7Zm9yKGxldCBnPTE7ZzxsO2crKyl7bGV0IGI9VWYuaW50ZXJwb2xhdGVVc2luZ1N1cmZhY2VEaXN0YW5jZShnKmQsYWQpO2IuaGVpZ2h0PXBbZ10sXz1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGIscHMpLGEucGFjayhfLHMsbSksbSs9M31yZXR1cm4gbX12YXIgVW8sZXYsbnYsb3YsRVQscnYsUlQsaXYsc3YsY3YsVTAsZmQsYWQscHMsVjAsYXYsQjAsVWYsU1QsbHYseW4sZ2E9WigoKT0+e1V0KCk7dmUoKTtJdCgpO2F0KCk7SHQoKTtadCgpO2NkKCk7TmYoKTt0YygpO1d0KCk7a24oKTtjcygpO1VvPXt9O1VvLm51bWJlck9mUG9pbnRzPWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz1hLmRpc3RhbmNlKHQsZSk7cmV0dXJuIE1hdGguY2VpbChvL24pfTtVby5udW1iZXJPZlBvaW50c1JodW1iTGluZT1mdW5jdGlvbih0LGUsbil7bGV0IG89TWF0aC5wb3codC5sb25naXR1ZGUtZS5sb25naXR1ZGUsMikrTWF0aC5wb3codC5sYXRpdHVkZS1lLmxhdGl0dWRlLDIpO3JldHVybiBNYXRoLm1heCgxLE1hdGguY2VpbChNYXRoLnNxcnQoby8obipuKSkpKX07ZXY9bmV3IGN0O1VvLmV4dHJhY3RIZWlnaHRzPWZ1bmN0aW9uKHQsZSl7bGV0IG49dC5sZW5ndGgsbz1uZXcgQXJyYXkobik7Zm9yKGxldCByPTA7cjxuO3IrKyl7bGV0IGk9dFtyXTtvW3JdPWUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoaSxldikuaGVpZ2h0fXJldHVybiBvfTtudj1uZXcgc3Qsb3Y9bmV3IGEsRVQ9bmV3IGEscnY9bmV3IG9uKGEuVU5JVF9YLDApLFJUPW5ldyBhLGl2PW5ldyBvbihhLlVOSVRfWCwwKSxzdj1uZXcgYSxjdj1uZXcgYSxVMD1bXTtmZD1uZXcgY3QsYWQ9bmV3IGN0LHBzPW5ldyBhLFYwPW5ldyBhLGF2PW5ldyBhLEIwPW5ldyBfYyxVZj1uZXcgSm87VW8ud3JhcExvbmdpdHVkZT1mdW5jdGlvbih0LGUpe2xldCBuPVtdLG89W107aWYoaCh0KSYmdC5sZW5ndGg+MCl7ZT14KGUsc3QuSURFTlRJVFkpO2xldCByPXN0LmludmVyc2VUcmFuc2Zvcm1hdGlvbihlLG52KSxpPXN0Lm11bHRpcGx5QnlQb2ludChyLGEuWkVSTyxvdikscz1hLm5vcm1hbGl6ZShzdC5tdWx0aXBseUJ5UG9pbnRBc1ZlY3RvcihyLGEuVU5JVF9ZLEVUKSxFVCksZj1vbi5mcm9tUG9pbnROb3JtYWwoaSxzLHJ2KSx1PWEubm9ybWFsaXplKHN0Lm11bHRpcGx5QnlQb2ludEFzVmVjdG9yKHIsYS5VTklUX1gsUlQpLFJUKSxjPW9uLmZyb21Qb2ludE5vcm1hbChpLHUsaXYpLGw9MTtuLnB1c2goYS5jbG9uZSh0WzBdKSk7bGV0IHA9blswXSxkPXQubGVuZ3RoO2ZvcihsZXQgbT0xO208ZDsrK20pe2xldCBfPXRbbV07aWYob24uZ2V0UG9pbnREaXN0YW5jZShjLHApPDB8fG9uLmdldFBvaW50RGlzdGFuY2UoYyxfKTwwKXtsZXQgZz1fby5saW5lU2VnbWVudFBsYW5lKHAsXyxmLHN2KTtpZihoKGcpKXtsZXQgYj1hLm11bHRpcGx5QnlTY2FsYXIocyw1ZS05LGN2KTtvbi5nZXRQb2ludERpc3RhbmNlKGYscCk8MCYmYS5uZWdhdGUoYixiKSxuLnB1c2goYS5hZGQoZyxiLG5ldyBhKSksby5wdXNoKGwrMSksYS5uZWdhdGUoYixiKSxuLnB1c2goYS5hZGQoZyxiLG5ldyBhKSksbD0xfX1uLnB1c2goYS5jbG9uZSh0W21dKSksbCsrLHA9X31vLnB1c2gobCl9cmV0dXJue3Bvc2l0aW9uczpuLGxlbmd0aHM6b319O1VvLmdlbmVyYXRlQXJjPWZ1bmN0aW9uKHQpe2godCl8fCh0PXt9KTtsZXQgZT10LnBvc2l0aW9ucztpZighaChlKSl0aHJvdyBuZXcgQigib3B0aW9ucy5wb3NpdGlvbnMgaXMgcmVxdWlyZWQuIik7bGV0IG49ZS5sZW5ndGgsbz14KHQuZWxsaXBzb2lkLCQuV0dTODQpLHI9eCh0LmhlaWdodCwwKSxpPUFycmF5LmlzQXJyYXkocik7aWYobjwxKXJldHVybltdO2lmKG49PT0xKXtsZXQgZz1vLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoZVswXSxWMCk7aWYocj1pP3JbMF06cixyIT09MCl7bGV0IGI9by5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZyxwcyk7YS5tdWx0aXBseUJ5U2NhbGFyKGIscixiKSxhLmFkZChnLGIsZyl9cmV0dXJuW2cueCxnLnksZy56XX1sZXQgcz10Lm1pbkRpc3RhbmNlO2lmKCFoKHMpKXtsZXQgZz14KHQuZ3JhbnVsYXJpdHksTS5SQURJQU5TX1BFUl9ERUdSRUUpO3M9TS5jaG9yZExlbmd0aChnLG8ubWF4aW11bVJhZGl1cyl9bGV0IGY9MCx1O2Zvcih1PTA7dTxuLTE7dSsrKWYrPVVvLm51bWJlck9mUG9pbnRzKGVbdV0sZVt1KzFdLHMpO2xldCBjPShmKzEpKjMsbD1uZXcgQXJyYXkoYykscD0wO2Zvcih1PTA7dTxuLTE7dSsrKXtsZXQgZz1lW3VdLGI9ZVt1KzFdLE89aT9yW3VdOnIsVD1pP3JbdSsxXTpyO3A9ZnYoZyxiLHMsbyxPLFQsbCxwKX1VMC5sZW5ndGg9MDtsZXQgZD1lW24tMV0sbT1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGQsZmQpO20uaGVpZ2h0PWk/cltuLTFdOnI7bGV0IF89by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihtLHBzKTtyZXR1cm4gYS5wYWNrKF8sbCxjLTMpLGx9O1NUPW5ldyBjdCxsdj1uZXcgY3Q7VW8uZ2VuZXJhdGVSaHVtYkFyYz1mdW5jdGlvbih0KXtoKHQpfHwodD17fSk7bGV0IGU9dC5wb3NpdGlvbnM7aWYoIWgoZSkpdGhyb3cgbmV3IEIoIm9wdGlvbnMucG9zaXRpb25zIGlzIHJlcXVpcmVkLiIpO2xldCBuPWUubGVuZ3RoLG89eCh0LmVsbGlwc29pZCwkLldHUzg0KSxyPXgodC5oZWlnaHQsMCksaT1BcnJheS5pc0FycmF5KHIpO2lmKG48MSlyZXR1cm5bXTtpZihuPT09MSl7bGV0IE89by5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGVbMF0sVjApO2lmKHI9aT9yWzBdOnIsciE9PTApe2xldCBUPW8uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKE8scHMpO2EubXVsdGlwbHlCeVNjYWxhcihULHIsVCksYS5hZGQoTyxULE8pfXJldHVybltPLngsTy55LE8uel19bGV0IHM9eCh0LmdyYW51bGFyaXR5LE0uUkFESUFOU19QRVJfREVHUkVFKSxmPTAsdSxjPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZVswXSxTVCksbDtmb3IodT0wO3U8bi0xO3UrKylsPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZVt1KzFdLGx2KSxmKz1Vby5udW1iZXJPZlBvaW50c1JodW1iTGluZShjLGwscyksYz1jdC5jbG9uZShsLFNUKTtsZXQgcD0oZisxKSozLGQ9bmV3IEFycmF5KHApLG09MDtmb3IodT0wO3U8bi0xO3UrKyl7bGV0IE89ZVt1XSxUPWVbdSsxXSxFPWk/clt1XTpyLHc9aT9yW3UrMV06cjttPXV2KE8sVCxzLG8sRSx3LGQsbSl9VTAubGVuZ3RoPTA7bGV0IF89ZVtuLTFdLGc9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhfLGZkKTtnLmhlaWdodD1pP3Jbbi0xXTpyO2xldCBiPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oZyxwcyk7cmV0dXJuIGEucGFjayhiLGQscC0zKSxkfTtVby5nZW5lcmF0ZUNhcnRlc2lhbkFyYz1mdW5jdGlvbih0KXtsZXQgZT1Vby5nZW5lcmF0ZUFyYyh0KSxuPWUubGVuZ3RoLzMsbz1uZXcgQXJyYXkobik7Zm9yKGxldCByPTA7cjxuO3IrKylvW3JdPWEudW5wYWNrKGUsciozKTtyZXR1cm4gb307VW8uZ2VuZXJhdGVDYXJ0ZXNpYW5SaHVtYkFyYz1mdW5jdGlvbih0KXtsZXQgZT1Vby5nZW5lcmF0ZVJodW1iQXJjKHQpLG49ZS5sZW5ndGgvMyxvPW5ldyBBcnJheShuKTtmb3IobGV0IHI9MDtyPG47cisrKW9bcl09YS51bnBhY2soZSxyKjMpO3JldHVybiBvfTt5bj1Vb30pO2Z1bmN0aW9uIFZmKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEIoImlkZW50aWZpZXIgaXMgcmVxdWlyZWQuIik7aCh4VFt0XSl8fCh4VFt0XT0hMCxjb25zb2xlLndhcm4oeChlLHQpKSl9dmFyIHhULEFhLHVkPVooKCk9PntJdCgpO2F0KCk7SHQoKTt4VD17fTtWZi5nZW9tZXRyeU91dGxpbmVzPSJFbnRpdHkgZ2VvbWV0cnkgb3V0bGluZXMgYXJlIHVuc3VwcG9ydGVkIG9uIHRlcnJhaW4uIE91dGxpbmVzIHdpbGwgYmUgZGlzYWJsZWQuIFRvIGVuYWJsZSBvdXRsaW5lcywgZGlzYWJsZSBnZW9tZXRyeSB0ZXJyYWluIGNsYW1waW5nIGJ5IGV4cGxpY2l0bHkgc2V0dGluZyBoZWlnaHQgdG8gMC4iO1ZmLmdlb21ldHJ5WkluZGV4PSJFbnRpdHkgZ2VvbWV0cnkgd2l0aCB6SW5kZXggYXJlIHVuc3VwcG9ydGVkIHdoZW4gaGVpZ2h0IG9yIGV4dHJ1ZGVkSGVpZ2h0IGFyZSBkZWZpbmVkLiAgekluZGV4IHdpbGwgYmUgaWdub3JlZCI7VmYuZ2VvbWV0cnlIZWlnaHRSZWZlcmVuY2U9IkVudGl0eSBjb3JyaWRvciwgZWxsaXBzZSwgcG9seWdvbiBvciByZWN0YW5nbGUgd2l0aCBoZWlnaHRSZWZlcmVuY2UgbXVzdCBhbHNvIGhhdmUgYSBkZWZpbmVkIGhlaWdodC4gIGhlaWdodFJlZmVyZW5jZSB3aWxsIGJlIGlnbm9yZWQiO1ZmLmdlb21ldHJ5RXh0cnVkZWRIZWlnaHRSZWZlcmVuY2U9IkVudGl0eSBjb3JyaWRvciwgZWxsaXBzZSwgcG9seWdvbiBvciByZWN0YW5nbGUgd2l0aCBleHRydWRlZEhlaWdodFJlZmVyZW5jZSBtdXN0IGFsc28gaGF2ZSBhIGRlZmluZWQgZXh0cnVkZWRIZWlnaHQuICBleHRydWRlZEhlaWdodFJlZmVyZW5jZSB3aWxsIGJlIGlnbm9yZWQiO0FhPVZmfSk7ZnVuY3Rpb24gd3YodCxlKXtsZXQgbj1uZXcgQXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtsZXQgcj10W29dO2swPWUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMocixrMCksbltvXT1rMC5oZWlnaHQsdFtvXT1lLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UocixyKX1yZXR1cm4gbn1mdW5jdGlvbiBHMCh0LGUsbixvKXtsZXQgcj10WzBdLGk9dFsxXSxzPWEuYW5nbGVCZXR3ZWVuKHIsaSksZj1NYXRoLmNlaWwocy9vKSx1PW5ldyBBcnJheShmKSxjO2lmKGU9PT1uKXtmb3IoYz0wO2M8ZjtjKyspdVtjXT1lO3JldHVybiB1LnB1c2gobiksdX1sZXQgcD0obi1lKS9mO2ZvcihjPTE7YzxmO2MrKyl7bGV0IGQ9ZStjKnA7dVtjXT1kfXJldHVybiB1WzBdPWUsdS5wdXNoKG4pLHV9ZnVuY3Rpb24gVHYodCxlLG4sbyl7bGV0IHI9bmV3IHlvKG4sbyksaT1yLnByb2plY3RQb2ludE9udG9QbGFuZShhLmFkZChuLHQscGQpLHBkKSxzPXIucHJvamVjdFBvaW50T250b1BsYW5lKGEuYWRkKG4sZSxkZCksZGQpLGY9bnQuYW5nbGVCZXR3ZWVuKGkscyk7cmV0dXJuIHMueCppLnktcy55KmkueD49MD8tZjpmfWZ1bmN0aW9uIEJpKHQsZSxuLG8scixpLHMsZil7bGV0IHU9U3YsYz1Ddjt5Yz1nci5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZSh0LHIseWMpLHU9c3QubXVsdGlwbHlCeVBvaW50QXNWZWN0b3IoeWMsT3YsdSksdT1hLm5vcm1hbGl6ZSh1LHUpO2xldCBsPVR2KHUsZSx0LHIpO3owPXR0LmZyb21Sb3RhdGlvbloobCx6MCksUFQuej1pLHljPXN0Lm11bHRpcGx5VHJhbnNmb3JtYXRpb24oeWMsc3QuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24oejAsUFQsRXYpLHljKTtsZXQgcD1SdjtwWzBdPXM7Zm9yKGxldCBkPTA7ZDxmO2QrKylmb3IobGV0IG09MDttPG4ubGVuZ3RoO20rPTMpYz1hLmZyb21BcnJheShuLG0sYyksYz10dC5tdWx0aXBseUJ5VmVjdG9yKHAsYyxjKSxjPXN0Lm11bHRpcGx5QnlQb2ludCh5YyxjLGMpLG8ucHVzaChjLngsYy55LGMueik7cmV0dXJuIG99ZnVuY3Rpb24gajAodCxlLG4sbyxyLGkscyl7Zm9yKGxldCBmPTA7Zjx0Lmxlbmd0aDtmKz0zKXtsZXQgdT1hLmZyb21BcnJheSh0LGYseHYpO289QmkodSxlLG4sbyxyLGlbZi8zXSxzLDEpfXJldHVybiBvfWZ1bmN0aW9uIFB2KHQsZSl7bGV0IG49dC5sZW5ndGgsbz1uZXcgQXJyYXkobio2KSxyPTAsaT1lLngrZS53aWR0aC8yLHM9ZS55K2UuaGVpZ2h0LzIsZj10WzBdO29bcisrXT1mLngtaSxvW3IrK109MCxvW3IrK109Zi55LXM7Zm9yKGxldCB1PTE7dTxuO3UrKyl7Zj10W3VdO2xldCBjPWYueC1pLGw9Zi55LXM7b1tyKytdPWMsb1tyKytdPTAsb1tyKytdPWwsb1tyKytdPWMsb1tyKytdPTAsb1tyKytdPWx9cmV0dXJuIGY9dFswXSxvW3IrK109Zi54LWksb1tyKytdPTAsb1tyKytdPWYueS1zLG99ZnVuY3Rpb24gTVQodCxlKXtsZXQgbj10Lmxlbmd0aCxvPW5ldyBBcnJheShuKjMpLHI9MCxpPWUueCtlLndpZHRoLzIscz1lLnkrZS5oZWlnaHQvMjtmb3IobGV0IGY9MDtmPG47ZisrKW9bcisrXT10W2ZdLngtaSxvW3IrK109MCxvW3IrK109dFtmXS55LXM7cmV0dXJuIG99ZnVuY3Rpb24gRFQodCxlLG4sbyxyLGkscyxmLHUsYyl7bGV0IGw9YS5hbmdsZUJldHdlZW4oYS5zdWJ0cmFjdChlLHQsYmEpLGEuc3VidHJhY3Qobix0LGxkKSkscD1vPT09Zm4uQkVWRUxFRD8wOk1hdGguY2VpbChsL00udG9SYWRpYW5zKDUpKSxkO3I/ZD10dC5mcm9tUXVhdGVybmlvbihuZS5mcm9tQXhpc0FuZ2xlKGEubmVnYXRlKHQsYmEpLGwvKHArMSksTlQpLHZUKTpkPXR0LmZyb21RdWF0ZXJuaW9uKG5lLmZyb21BeGlzQW5nbGUodCxsLyhwKzEpLE5UKSx2VCk7bGV0IG0sXztpZihlPWEuY2xvbmUoZSxJVCkscD4wKXtsZXQgZz1jPzI6MTtmb3IobGV0IGI9MDtiPHA7YisrKWU9dHQubXVsdGlwbHlCeVZlY3RvcihkLGUsZSksbT1hLnN1YnRyYWN0KGUsdCxiYSksbT1hLm5vcm1hbGl6ZShtLG0pLHJ8fChtPWEubmVnYXRlKG0sbSkpLF89aS5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGUsbGQpLHM9QmkoXyxtLGYscyxpLHUsMSxnKX1lbHNlIG09YS5zdWJ0cmFjdChlLHQsYmEpLG09YS5ub3JtYWxpemUobSxtKSxyfHwobT1hLm5lZ2F0ZShtLG0pKSxfPWkuc2NhbGVUb0dlb2RldGljU3VyZmFjZShlLGxkKSxzPUJpKF8sbSxmLHMsaSx1LDEsMSksbj1hLmNsb25lKG4sSVQpLG09YS5zdWJ0cmFjdChuLHQsYmEpLG09YS5ub3JtYWxpemUobSxtKSxyfHwobT1hLm5lZ2F0ZShtLG0pKSxfPWkuc2NhbGVUb0dlb2RldGljU3VyZmFjZShuLGxkKSxzPUJpKF8sbSxmLHMsaSx1LDEsMSk7cmV0dXJuIHN9dmFyIGFvLHB2LGR2LG12LGh2LF92LHl2LGd2LEF2LGJ2LGJhLGxkLGtmLGswLHBkLGRkLE92LHljLEV2LHowLFJ2LFN2LEN2LFBULHh2LE5ULElULHZULE12LE52LGRzLG1kPVooKCk9Pnt6ZSgpO1V0KCk7aHIoKTt2ZSgpO2hjKCk7cGEoKTtXdCgpO0ZuKCk7a24oKTtnYSgpOyRvKCk7JHMoKTt1ZCgpO2FvPVtuZXcgYSxuZXcgYV0scHY9bmV3IGEsZHY9bmV3IGEsbXY9bmV3IGEsaHY9bmV3IGEsX3Y9bmV3IGEseXY9bmV3IGEsZ3Y9bmV3IGEsQXY9bmV3IGEsYnY9bmV3IGEsYmE9bmV3IGEsbGQ9bmV3IGEsa2Y9e30sazA9bmV3IGN0O3BkPW5ldyBhLGRkPW5ldyBhO092PW5ldyBhKC0xLDAsMCkseWM9bmV3IHN0LEV2PW5ldyBzdCx6MD1uZXcgdHQsUnY9dHQuSURFTlRJVFkuY2xvbmUoKSxTdj1uZXcgYSxDdj1uZXcgX2UsUFQ9bmV3IGE7eHY9bmV3IGE7TlQ9bmV3IG5lLElUPW5ldyBhLHZUPW5ldyB0dDtrZi5yZW1vdmVEdXBsaWNhdGVzRnJvbVNoYXBlPWZ1bmN0aW9uKHQpe2xldCBlPXQubGVuZ3RoLG49W107Zm9yKGxldCBvPWUtMSxyPTA7cjxlO289cisrKXtsZXQgaT10W29dLHM9dFtyXTtudC5lcXVhbHMoaSxzKXx8bi5wdXNoKHMpfXJldHVybiBufTtrZi5hbmdsZUlzR3JlYXRlclRoYW5QaT1mdW5jdGlvbih0LGUsbixvKXtsZXQgcj1uZXcgeW8obixvKSxpPXIucHJvamVjdFBvaW50T250b1BsYW5lKGEuYWRkKG4sdCxwZCkscGQpLHM9ci5wcm9qZWN0UG9pbnRPbnRvUGxhbmUoYS5hZGQobixlLGRkKSxkZCk7cmV0dXJuIHMueCppLnktcy55KmkueD49MH07TXY9bmV3IGEsTnY9bmV3IGE7a2YuY29tcHV0ZVBvc2l0aW9ucz1mdW5jdGlvbih0LGUsbixvLHIpe2xldCBpPW8uX2VsbGlwc29pZCxzPXd2KHQsaSksZj1vLl9ncmFudWxhcml0eSx1PW8uX2Nvcm5lclR5cGUsYz1yP1B2KGUsbik6TVQoZSxuKSxsPXI/TVQoZSxuKTp2b2lkIDAscD1uLmhlaWdodC8yLGQ9bi53aWR0aC8yLG09dC5sZW5ndGgsXz1bXSxnPXI/W106dm9pZCAwLGI9cHYsTz1kdixUPW12LEU9aHYsdz1fdixDPXl2LE49Z3YsST1BdixMPWJ2LHY9dFswXSxEPXRbMV07RT1pLmdlb2RldGljU3VyZmFjZU5vcm1hbCh2LEUpLGI9YS5zdWJ0cmFjdChELHYsYiksYj1hLm5vcm1hbGl6ZShiLGIpLEk9YS5jcm9zcyhFLGIsSSksST1hLm5vcm1hbGl6ZShJLEkpO2xldCBVPXNbMF0sQT1zWzFdO3ImJihnPUJpKHYsSSxsLGcsaSxVK3AsMSwxKSksTD1hLmNsb25lKHYsTCksdj1ELE89YS5uZWdhdGUoYixPKTtsZXQgUyxQO2ZvcihsZXQgSD0xO0g8bS0xO0grKyl7bGV0IGs9cj8yOjE7aWYoRD10W0grMV0sdi5lcXVhbHMoRCkpe0FhKCJQb3NpdGlvbnMgYXJlIHRvbyBjbG9zZSBhbmQgYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudCB3aXRoIHJvdW5kaW5nIGVycm9yLiIpO2NvbnRpbnVlfWI9YS5zdWJ0cmFjdChELHYsYiksYj1hLm5vcm1hbGl6ZShiLGIpLFQ9YS5hZGQoYixPLFQpLFQ9YS5ub3JtYWxpemUoVCxUKSxFPWkuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHYsRSk7bGV0IEs9YS5tdWx0aXBseUJ5U2NhbGFyKEUsYS5kb3QoYixFKSxNdik7YS5zdWJ0cmFjdChiLEssSyksYS5ub3JtYWxpemUoSyxLKTtsZXQgWD1hLm11bHRpcGx5QnlTY2FsYXIoRSxhLmRvdChPLEUpLE52KTtpZihhLnN1YnRyYWN0KE8sWCxYKSxhLm5vcm1hbGl6ZShYLFgpLCFNLmVxdWFsc0Vwc2lsb24oTWF0aC5hYnMoYS5kb3QoSyxYKSksMSxNLkVQU0lMT043KSl7VD1hLmNyb3NzKFQsRSxUKSxUPWEuY3Jvc3MoRSxULFQpLFQ9YS5ub3JtYWxpemUoVCxUKTtsZXQgUT0xL01hdGgubWF4KC4yNSxhLm1hZ25pdHVkZShhLmNyb3NzKFQsTyxiYSkpKSxmdD1rZi5hbmdsZUlzR3JlYXRlclRoYW5QaShiLE8sdixpKTtmdD8odz1hLmFkZCh2LGEubXVsdGlwbHlCeVNjYWxhcihULFEqZCxUKSx3KSxDPWEuYWRkKHcsYS5tdWx0aXBseUJ5U2NhbGFyKEksZCxDKSxDKSxhb1swXT1hLmNsb25lKEwsYW9bMF0pLGFvWzFdPWEuY2xvbmUoQyxhb1sxXSksUz1HMChhbyxVK3AsQStwLGYpLFA9eW4uZ2VuZXJhdGVBcmMoe3Bvc2l0aW9uczphbyxncmFudWxhcml0eTpmLGVsbGlwc29pZDppfSksXz1qMChQLEksYyxfLGksUywxKSxJPWEuY3Jvc3MoRSxiLEkpLEk9YS5ub3JtYWxpemUoSSxJKSxOPWEuYWRkKHcsYS5tdWx0aXBseUJ5U2NhbGFyKEksZCxOKSxOKSx1PT09Zm4uUk9VTkRFRHx8dT09PWZuLkJFVkVMRUQ/RFQodyxDLE4sdSxmdCxpLF8sYyxBK3Ascik6KFQ9YS5uZWdhdGUoVCxUKSxfPUJpKHYsVCxjLF8saSxBK3AsUSxrKSksTD1hLmNsb25lKE4sTCkpOih3PWEuYWRkKHYsYS5tdWx0aXBseUJ5U2NhbGFyKFQsUSpkLFQpLHcpLEM9YS5hZGQodyxhLm11bHRpcGx5QnlTY2FsYXIoSSwtZCxDKSxDKSxhb1swXT1hLmNsb25lKEwsYW9bMF0pLGFvWzFdPWEuY2xvbmUoQyxhb1sxXSksUz1HMChhbyxVK3AsQStwLGYpLFA9eW4uZ2VuZXJhdGVBcmMoe3Bvc2l0aW9uczphbyxncmFudWxhcml0eTpmLGVsbGlwc29pZDppfSksXz1qMChQLEksYyxfLGksUywxKSxJPWEuY3Jvc3MoRSxiLEkpLEk9YS5ub3JtYWxpemUoSSxJKSxOPWEuYWRkKHcsYS5tdWx0aXBseUJ5U2NhbGFyKEksLWQsTiksTiksdT09PWZuLlJPVU5ERUR8fHU9PT1mbi5CRVZFTEVEP0RUKHcsQyxOLHUsZnQsaSxfLGMsQStwLHIpOl89QmkodixULGMsXyxpLEErcCxRLGspLEw9YS5jbG9uZShOLEwpKSxPPWEubmVnYXRlKGIsTyl9ZWxzZSBfPUJpKEwsSSxjLF8saSxVK3AsMSwxKSxMPXY7VT1BLEE9c1tIKzFdLHY9RH1hb1swXT1hLmNsb25lKEwsYW9bMF0pLGFvWzFdPWEuY2xvbmUodixhb1sxXSksUz1HMChhbyxVK3AsQStwLGYpLFA9eW4uZ2VuZXJhdGVBcmMoe3Bvc2l0aW9uczphbyxncmFudWxhcml0eTpmLGVsbGlwc29pZDppfSksXz1qMChQLEksYyxfLGksUywxKSxyJiYoZz1CaSh2LEksbCxnLGksQStwLDEsMSkpLG09Xy5sZW5ndGg7bGV0IEY9cj9tK2cubGVuZ3RoOm0saj1uZXcgRmxvYXQ2NEFycmF5KEYpO3JldHVybiBqLnNldChfKSxyJiZqLnNldChnLG0pLGp9O2RzPWtmfSk7ZnVuY3Rpb24gaGQodCxlLG4sbyxyKXtsZXQgaT1hLmFuZ2xlQmV0d2VlbihhLnN1YnRyYWN0KGUsdCx3YSksYS5zdWJ0cmFjdChuLHQsVlQpKSxzPW89PT1mbi5CRVZFTEVEPzE6TWF0aC5jZWlsKGkvTS50b1JhZGlhbnMoNSkpKzEsZj1zKjMsdT1uZXcgQXJyYXkoZik7dVtmLTNdPW4ueCx1W2YtMl09bi55LHVbZi0xXT1uLno7bGV0IGM7cj9jPXR0LmZyb21RdWF0ZXJuaW9uKG5lLmZyb21BeGlzQW5nbGUoYS5uZWdhdGUodCx3YSksaS9zLEZUKSxCVCk6Yz10dC5mcm9tUXVhdGVybmlvbihuZS5mcm9tQXhpc0FuZ2xlKHQsaS9zLEZUKSxCVCk7bGV0IGw9MDtlPWEuY2xvbmUoZSx3YSk7Zm9yKGxldCBwPTA7cDxzO3ArKyllPXR0Lm11bHRpcGx5QnlWZWN0b3IoYyxlLGUpLHVbbCsrXT1lLngsdVtsKytdPWUueSx1W2wrK109ZS56O3JldHVybiB1fWZ1bmN0aW9uIGt2KHQpe2xldCBlPWtULG49R1Qsbz16VCxyPXRbMV07bj1hLmZyb21BcnJheSh0WzFdLHIubGVuZ3RoLTMsbiksbz1hLmZyb21BcnJheSh0WzBdLDAsbyksZT1hLm1pZHBvaW50KG4sbyxlKTtsZXQgaT1oZChlLG4sbyxmbi5ST1VOREVELCExKSxzPXQubGVuZ3RoLTEsZj10W3MtMV07cj10W3NdLG49YS5mcm9tQXJyYXkoZixmLmxlbmd0aC0zLG4pLG89YS5mcm9tQXJyYXkociwwLG8pLGU9YS5taWRwb2ludChuLG8sZSk7bGV0IHU9aGQoZSxuLG8sZm4uUk9VTkRFRCwhMSk7cmV0dXJuW2ksdV19ZnVuY3Rpb24gVVQodCxlLG4sbyl7bGV0IHI9d2E7cmV0dXJuIG8/cj1hLmFkZCh0LGUscik6KGU9YS5uZWdhdGUoZSxlKSxyPWEuYWRkKHQsZSxyKSksW3IueCxyLnksci56LG4ueCxuLnksbi56XX1mdW5jdGlvbiBIMCh0LGUsbixvKXtsZXQgcj1uZXcgQXJyYXkodC5sZW5ndGgpLGk9bmV3IEFycmF5KHQubGVuZ3RoKSxzPWEubXVsdGlwbHlCeVNjYWxhcihlLG4sd2EpLGY9YS5uZWdhdGUocyxWVCksdT0wLGM9dC5sZW5ndGgtMTtmb3IobGV0IGw9MDtsPHQubGVuZ3RoO2wrPTMpe2xldCBwPWEuZnJvbUFycmF5KHQsbCxJdiksZD1hLmFkZChwLGYsTFQpO3JbdSsrXT1kLngsclt1KytdPWQueSxyW3UrK109ZC56O2xldCBtPWEuYWRkKHAscyxMVCk7aVtjLS1dPW0ueixpW2MtLV09bS55LGlbYy0tXT1tLnh9cmV0dXJuIG8ucHVzaChyLGkpLG99dmFyIHEwLHdhLFZULEl2LExULFZvLGtULEdULHpULHZ2LER2LEx2LEZ2LEJ2LFV2LFZ2LEZULEJULEd2LHp2LHFlLEswPVooKCk9PntVdCgpO2hjKCk7YXQoKTtXdCgpO0ZuKCk7Z2EoKTttZCgpOyRvKCk7cTA9e30sd2E9bmV3IGEsVlQ9bmV3IGEsSXY9bmV3IGEsTFQ9bmV3IGEsVm89W25ldyBhLG5ldyBhXSxrVD1uZXcgYSxHVD1uZXcgYSx6VD1uZXcgYSx2dj1uZXcgYSxEdj1uZXcgYSxMdj1uZXcgYSxGdj1uZXcgYSxCdj1uZXcgYSxVdj1uZXcgYSxWdj1uZXcgYSxGVD1uZXcgbmUsQlQ9bmV3IHR0O3EwLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbixvKXtsZXQgcj1lLngsaT1lLnkscz1lLno7aChuKSYmKHRbbl09cix0W24rMV09aSx0W24rMl09cyksaChvKSYmKHRbb109cyx0W28tMV09aSx0W28tMl09cil9O0d2PW5ldyBhLHp2PW5ldyBhO3EwLmNvbXB1dGVQb3NpdGlvbnM9ZnVuY3Rpb24odCl7bGV0IGU9dC5ncmFudWxhcml0eSxuPXQucG9zaXRpb25zLG89dC5lbGxpcHNvaWQscj10LndpZHRoLzIsaT10LmNvcm5lclR5cGUscz10LnNhdmVBdHRyaWJ1dGVzLGY9a1QsdT1HVCxjPXpULGw9dnYscD1EdixkPUx2LG09RnYsXz1CdixnPVV2LGI9VnYsTz1bXSxUPXM/W106dm9pZCAwLEU9cz9bXTp2b2lkIDAsdz1uWzBdLEM9blsxXTt1PWEubm9ybWFsaXplKGEuc3VidHJhY3QoQyx3LHUpLHUpLGY9by5nZW9kZXRpY1N1cmZhY2VOb3JtYWwodyxmKSxsPWEubm9ybWFsaXplKGEuY3Jvc3MoZix1LGwpLGwpLHMmJihULnB1c2gobC54LGwueSxsLnopLEUucHVzaChmLngsZi55LGYueikpLG09YS5jbG9uZSh3LG0pLHc9QyxjPWEubmVnYXRlKHUsYyk7bGV0IE4sST1bXSxMLHY9bi5sZW5ndGg7Zm9yKEw9MTtMPHYtMTtMKyspe2Y9by5nZW9kZXRpY1N1cmZhY2VOb3JtYWwodyxmKSxDPW5bTCsxXSx1PWEubm9ybWFsaXplKGEuc3VidHJhY3QoQyx3LHUpLHUpLHA9YS5ub3JtYWxpemUoYS5hZGQodSxjLHApLHApO2xldCBVPWEubXVsdGlwbHlCeVNjYWxhcihmLGEuZG90KHUsZiksR3YpO2Euc3VidHJhY3QodSxVLFUpLGEubm9ybWFsaXplKFUsVSk7bGV0IEE9YS5tdWx0aXBseUJ5U2NhbGFyKGYsYS5kb3QoYyxmKSx6dik7aWYoYS5zdWJ0cmFjdChjLEEsQSksYS5ub3JtYWxpemUoQSxBKSwhTS5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKGEuZG90KFUsQSkpLDEsTS5FUFNJTE9ONykpe3A9YS5jcm9zcyhwLGYscCkscD1hLmNyb3NzKGYscCxwKSxwPWEubm9ybWFsaXplKHAscCk7bGV0IFA9ci9NYXRoLm1heCguMjUsYS5tYWduaXR1ZGUoYS5jcm9zcyhwLGMsd2EpKSksRj1kcy5hbmdsZUlzR3JlYXRlclRoYW5QaSh1LGMsdyxvKTtwPWEubXVsdGlwbHlCeVNjYWxhcihwLFAscCksRj8oXz1hLmFkZCh3LHAsXyksYj1hLmFkZChfLGEubXVsdGlwbHlCeVNjYWxhcihsLHIsYiksYiksZz1hLmFkZChfLGEubXVsdGlwbHlCeVNjYWxhcihsLHIqMixnKSxnKSxWb1swXT1hLmNsb25lKG0sVm9bMF0pLFZvWzFdPWEuY2xvbmUoYixWb1sxXSksTj15bi5nZW5lcmF0ZUFyYyh7cG9zaXRpb25zOlZvLGdyYW51bGFyaXR5OmUsZWxsaXBzb2lkOm99KSxPPUgwKE4sbCxyLE8pLHMmJihULnB1c2gobC54LGwueSxsLnopLEUucHVzaChmLngsZi55LGYueikpLGQ9YS5jbG9uZShnLGQpLGw9YS5ub3JtYWxpemUoYS5jcm9zcyhmLHUsbCksbCksZz1hLmFkZChfLGEubXVsdGlwbHlCeVNjYWxhcihsLHIqMixnKSxnKSxtPWEuYWRkKF8sYS5tdWx0aXBseUJ5U2NhbGFyKGwscixtKSxtKSxpPT09Zm4uUk9VTkRFRHx8aT09PWZuLkJFVkVMRUQ/SS5wdXNoKHtsZWZ0UG9zaXRpb25zOmhkKF8sZCxnLGksRil9KTpJLnB1c2goe2xlZnRQb3NpdGlvbnM6VVQodyxhLm5lZ2F0ZShwLHApLGcsRil9KSk6KGc9YS5hZGQodyxwLGcpLGI9YS5hZGQoZyxhLm5lZ2F0ZShhLm11bHRpcGx5QnlTY2FsYXIobCxyLGIpLGIpLGIpLF89YS5hZGQoZyxhLm5lZ2F0ZShhLm11bHRpcGx5QnlTY2FsYXIobCxyKjIsXyksXyksXyksVm9bMF09YS5jbG9uZShtLFZvWzBdKSxWb1sxXT1hLmNsb25lKGIsVm9bMV0pLE49eW4uZ2VuZXJhdGVBcmMoe3Bvc2l0aW9uczpWbyxncmFudWxhcml0eTplLGVsbGlwc29pZDpvfSksTz1IMChOLGwscixPKSxzJiYoVC5wdXNoKGwueCxsLnksbC56KSxFLnB1c2goZi54LGYueSxmLnopKSxkPWEuY2xvbmUoXyxkKSxsPWEubm9ybWFsaXplKGEuY3Jvc3MoZix1LGwpLGwpLF89YS5hZGQoZyxhLm5lZ2F0ZShhLm11bHRpcGx5QnlTY2FsYXIobCxyKjIsXyksXyksXyksbT1hLmFkZChnLGEubmVnYXRlKGEubXVsdGlwbHlCeVNjYWxhcihsLHIsbSksbSksbSksaT09PWZuLlJPVU5ERUR8fGk9PT1mbi5CRVZFTEVEP0kucHVzaCh7cmlnaHRQb3NpdGlvbnM6aGQoZyxkLF8saSxGKX0pOkkucHVzaCh7cmlnaHRQb3NpdGlvbnM6VVQodyxwLF8sRil9KSksYz1hLm5lZ2F0ZSh1LGMpfXc9Q31mPW8uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHcsZiksVm9bMF09YS5jbG9uZShtLFZvWzBdKSxWb1sxXT1hLmNsb25lKHcsVm9bMV0pLE49eW4uZ2VuZXJhdGVBcmMoe3Bvc2l0aW9uczpWbyxncmFudWxhcml0eTplLGVsbGlwc29pZDpvfSksTz1IMChOLGwscixPKSxzJiYoVC5wdXNoKGwueCxsLnksbC56KSxFLnB1c2goZi54LGYueSxmLnopKTtsZXQgRDtyZXR1cm4gaT09PWZuLlJPVU5ERUQmJihEPWt2KE8pKSx7cG9zaXRpb25zOk8sY29ybmVyczpJLGxlZnRzOlQsbm9ybWFsczpFLGVuZFBvc2l0aW9uczpEfX07cWU9cTB9KTtmdW5jdGlvbiBYVCh0LGUpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXRbbl09ZS5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKHRbbl0sdFtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gS3IodCxlLG4sbyxyLGkpe2xldCBzPXQubm9ybWFscyxmPXQudGFuZ2VudHMsdT10LmJpdGFuZ2VudHMsYz1hLm5vcm1hbGl6ZShhLmNyb3NzKG4sZSxtcyksbXMpO2kubm9ybWFsJiZxZS5hZGRBdHRyaWJ1dGUocyxlLG8sciksaS50YW5nZW50JiZxZS5hZGRBdHRyaWJ1dGUoZixjLG8sciksaS5iaXRhbmdlbnQmJnFlLmFkZEF0dHJpYnV0ZSh1LG4sbyxyKX1mdW5jdGlvbiBZVCh0LGUsbil7bGV0IG89dC5wb3NpdGlvbnMscj10LmNvcm5lcnMsaT10LmVuZFBvc2l0aW9ucyxzPXQubGVmdHMsZj10Lm5vcm1hbHMsdT1uZXcgcmUsYyxsPTAscD0wLGQsbT0wLF87Zm9yKGQ9MDtkPG8ubGVuZ3RoO2QrPTIpXz1vW2RdLmxlbmd0aC0zLGwrPV8sbSs9XyoyLHArPW9bZCsxXS5sZW5ndGgtMztmb3IobCs9MyxwKz0zLGQ9MDtkPHIubGVuZ3RoO2QrKyl7Yz1yW2RdO2xldCBpdD1yW2RdLmxlZnRQb3NpdGlvbnM7aChpdCk/KF89aXQubGVuZ3RoLGwrPV8sbSs9Xyk6KF89cltkXS5yaWdodFBvc2l0aW9ucy5sZW5ndGgscCs9XyxtKz1fKX1sZXQgZz1oKGkpLGI7ZyYmKGI9aVswXS5sZW5ndGgtMyxsKz1iLHArPWIsYi89MyxtKz1iKjYpO2xldCBPPWwrcCxUPW5ldyBGbG9hdDY0QXJyYXkoTyksRT1lLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KE8pOnZvaWQgMCx3PWUudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KE8pOnZvaWQgMCxDPWUuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoTyk6dm9pZCAwLE49e25vcm1hbHM6RSx0YW5nZW50czp3LGJpdGFuZ2VudHM6Q30sST0wLEw9Ty0xLHYsRCxVLEEsUz1xVCxQPUtULEYsaixIPWIvMixrPUR0LmNyZWF0ZVR5cGVkQXJyYXkoTy8zLG0pLEs9MDtpZihnKXtqPV9kLEY9eWQ7bGV0IGl0PWlbMF07Zm9yKFM9YS5mcm9tQXJyYXkoZiwwLFMpLFA9YS5mcm9tQXJyYXkocywwLFApLGQ9MDtkPEg7ZCsrKWo9YS5mcm9tQXJyYXkoaXQsKEgtMS1kKSozLGopLEY9YS5mcm9tQXJyYXkoaXQsKEgrZCkqMyxGKSxxZS5hZGRBdHRyaWJ1dGUoVCxGLEkpLHFlLmFkZEF0dHJpYnV0ZShULGosdm9pZCAwLEwpLEtyKE4sUyxQLEksTCxlKSxEPUkvMyxBPUQrMSx2PShMLTIpLzMsVT12LTEsa1tLKytdPXYsa1tLKytdPUQsa1tLKytdPVUsa1tLKytdPVUsa1tLKytdPUQsa1tLKytdPUEsSSs9MyxMLT0zfWxldCBYPTAsUj0wLFE9b1tYKytdLGZ0PW9bWCsrXTtULnNldChRLEkpLFQuc2V0KGZ0LEwtZnQubGVuZ3RoKzEpLFA9YS5mcm9tQXJyYXkocyxSLFApO2xldCBwdCxndDtmb3IoXz1mdC5sZW5ndGgtMyxkPTA7ZDxfO2QrPTMpcHQ9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoYS5mcm9tQXJyYXkoUSxkLG1zKSxtcyksZ3Q9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoYS5mcm9tQXJyYXkoZnQsXy1kLFRhKSxUYSksUz1hLm5vcm1hbGl6ZShhLmFkZChwdCxndCxTKSxTKSxLcihOLFMsUCxJLEwsZSksRD1JLzMsQT1EKzEsdj0oTC0yKS8zLFU9di0xLGtbSysrXT12LGtbSysrXT1ELGtbSysrXT1VLGtbSysrXT1VLGtbSysrXT1ELGtbSysrXT1BLEkrPTMsTC09Mztmb3IocHQ9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoYS5mcm9tQXJyYXkoUSxfLG1zKSxtcyksZ3Q9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoYS5mcm9tQXJyYXkoZnQsXyxUYSksVGEpLFM9YS5ub3JtYWxpemUoYS5hZGQocHQsZ3QsUyksUyksUis9MyxkPTA7ZDxyLmxlbmd0aDtkKyspe2xldCBpdDtjPXJbZF07bGV0IE50PWMubGVmdFBvc2l0aW9ucyxPdD1jLnJpZ2h0UG9zaXRpb25zLHh0LF90LGR0PVdULFZ0PV9kLHp0PXlkO2lmKFM9YS5mcm9tQXJyYXkoZixSLFMpLGgoTnQpKXtmb3IoS3IoTixTLFAsdm9pZCAwLEwsZSksTC09Myx4dD1BLF90PVUsaXQ9MDtpdDxOdC5sZW5ndGgvMztpdCsrKWR0PWEuZnJvbUFycmF5KE50LGl0KjMsZHQpLGtbSysrXT14dCxrW0srK109X3QtaXQtMSxrW0srK109X3QtaXQscWUuYWRkQXR0cmlidXRlKFQsZHQsdm9pZCAwLEwpLFZ0PWEuZnJvbUFycmF5KFQsKF90LWl0LTEpKjMsVnQpLHp0PWEuZnJvbUFycmF5KFQseHQqMyx6dCksUD1hLm5vcm1hbGl6ZShhLnN1YnRyYWN0KFZ0LHp0LFApLFApLEtyKE4sUyxQLHZvaWQgMCxMLGUpLEwtPTM7ZHQ9YS5mcm9tQXJyYXkoVCx4dCozLGR0KSxWdD1hLnN1YnRyYWN0KGEuZnJvbUFycmF5KFQsX3QqMyxWdCksZHQsVnQpLHp0PWEuc3VidHJhY3QoYS5mcm9tQXJyYXkoVCwoX3QtaXQpKjMsenQpLGR0LHp0KSxQPWEubm9ybWFsaXplKGEuYWRkKFZ0LHp0LFApLFApLEtyKE4sUyxQLEksdm9pZCAwLGUpLEkrPTN9ZWxzZXtmb3IoS3IoTixTLFAsSSx2b2lkIDAsZSksSSs9Myx4dD1VLF90PUEsaXQ9MDtpdDxPdC5sZW5ndGgvMztpdCsrKWR0PWEuZnJvbUFycmF5KE90LGl0KjMsZHQpLGtbSysrXT14dCxrW0srK109X3QraXQsa1tLKytdPV90K2l0KzEscWUuYWRkQXR0cmlidXRlKFQsZHQsSSksVnQ9YS5mcm9tQXJyYXkoVCx4dCozLFZ0KSx6dD1hLmZyb21BcnJheShULChfdCtpdCkqMyx6dCksUD1hLm5vcm1hbGl6ZShhLnN1YnRyYWN0KFZ0LHp0LFApLFApLEtyKE4sUyxQLEksdm9pZCAwLGUpLEkrPTM7ZHQ9YS5mcm9tQXJyYXkoVCx4dCozLGR0KSxWdD1hLnN1YnRyYWN0KGEuZnJvbUFycmF5KFQsKF90K2l0KSozLFZ0KSxkdCxWdCksenQ9YS5zdWJ0cmFjdChhLmZyb21BcnJheShULF90KjMsenQpLGR0LHp0KSxQPWEubm9ybWFsaXplKGEubmVnYXRlKGEuYWRkKHp0LFZ0LFApLFApLFApLEtyKE4sUyxQLHZvaWQgMCxMLGUpLEwtPTN9Zm9yKFE9b1tYKytdLGZ0PW9bWCsrXSxRLnNwbGljZSgwLDMpLGZ0LnNwbGljZShmdC5sZW5ndGgtMywzKSxULnNldChRLEkpLFQuc2V0KGZ0LEwtZnQubGVuZ3RoKzEpLF89ZnQubGVuZ3RoLTMsUis9MyxQPWEuZnJvbUFycmF5KHMsUixQKSxpdD0wO2l0PGZ0Lmxlbmd0aDtpdCs9MylwdD1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChhLmZyb21BcnJheShRLGl0LG1zKSxtcyksZ3Q9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoYS5mcm9tQXJyYXkoZnQsXy1pdCxUYSksVGEpLFM9YS5ub3JtYWxpemUoYS5hZGQocHQsZ3QsUyksUyksS3IoTixTLFAsSSxMLGUpLEE9SS8zLEQ9QS0xLFU9KEwtMikvMyx2PVUrMSxrW0srK109dixrW0srK109RCxrW0srK109VSxrW0srK109VSxrW0srK109RCxrW0srK109QSxJKz0zLEwtPTM7SS09MyxMKz0zfWlmKFM9YS5mcm9tQXJyYXkoZixmLmxlbmd0aC0zLFMpLEtyKE4sUyxQLEksTCxlKSxnKXtJKz0zLEwtPTMsaj1fZCxGPXlkO2xldCBpdD1pWzFdO2ZvcihkPTA7ZDxIO2QrKylqPWEuZnJvbUFycmF5KGl0LChiLWQtMSkqMyxqKSxGPWEuZnJvbUFycmF5KGl0LGQqMyxGKSxxZS5hZGRBdHRyaWJ1dGUoVCxqLHZvaWQgMCxMKSxxZS5hZGRBdHRyaWJ1dGUoVCxGLEkpLEtyKE4sUyxQLEksTCxlKSxBPUkvMyxEPUEtMSxVPShMLTIpLzMsdj1VKzEsa1tLKytdPXYsa1tLKytdPUQsa1tLKytdPVUsa1tLKytdPVUsa1tLKytdPUQsa1tLKytdPUEsSSs9MyxMLT0zfWlmKHUucG9zaXRpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpUfSksZS5zdCl7bGV0IGl0PW5ldyBGbG9hdDMyQXJyYXkoTy8zKjIpLE50LE90LHh0PTA7aWYoZyl7bC89MyxwLz0zO2xldCBfdD1NYXRoLlBJLyhiKzEpO090PTEvKGwtYisxKSxOdD0xLyhwLWIrMSk7bGV0IGR0LFZ0PWIvMjtmb3IoZD1WdCsxO2Q8YisxO2QrKylkdD1NLlBJX09WRVJfVFdPK190KmQsaXRbeHQrK109TnQqKDErTWF0aC5jb3MoZHQpKSxpdFt4dCsrXT0uNSooMStNYXRoLnNpbihkdCkpO2ZvcihkPTE7ZDxwLWIrMTtkKyspaXRbeHQrK109ZCpOdCxpdFt4dCsrXT0wO2ZvcihkPWI7ZD5WdDtkLS0pZHQ9TS5QSV9PVkVSX1RXTy1kKl90LGl0W3h0KytdPTEtTnQqKDErTWF0aC5jb3MoZHQpKSxpdFt4dCsrXT0uNSooMStNYXRoLnNpbihkdCkpO2ZvcihkPVZ0O2Q+MDtkLS0pZHQ9TS5QSV9PVkVSX1RXTy1fdCpkLGl0W3h0KytdPTEtT3QqKDErTWF0aC5jb3MoZHQpKSxpdFt4dCsrXT0uNSooMStNYXRoLnNpbihkdCkpO2ZvcihkPWwtYjtkPjA7ZC0tKWl0W3h0KytdPWQqT3QsaXRbeHQrK109MTtmb3IoZD0xO2Q8VnQrMTtkKyspZHQ9TS5QSV9PVkVSX1RXTytfdCpkLGl0W3h0KytdPU90KigxK01hdGguY29zKGR0KSksaXRbeHQrK109LjUqKDErTWF0aC5zaW4oZHQpKX1lbHNle2ZvcihsLz0zLHAvPTMsT3Q9MS8obC0xKSxOdD0xLyhwLTEpLGQ9MDtkPHA7ZCsrKWl0W3h0KytdPWQqTnQsaXRbeHQrK109MDtmb3IoZD1sO2Q+MDtkLS0paXRbeHQrK109KGQtMSkqT3QsaXRbeHQrK109MX11LnN0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczppdH0pfXJldHVybiBlLm5vcm1hbCYmKHUubm9ybWFsPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpOLm5vcm1hbHN9KSksZS50YW5nZW50JiYodS50YW5nZW50PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpOLnRhbmdlbnRzfSkpLGUuYml0YW5nZW50JiYodS5iaXRhbmdlbnQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOk4uYml0YW5nZW50c30pKSx7YXR0cmlidXRlczp1LGluZGljZXM6a319ZnVuY3Rpb24gSHYodCxlKXtpZighZS5ub3JtYWwmJiFlLnRhbmdlbnQmJiFlLmJpdGFuZ2VudCYmIWUuc3QpcmV0dXJuIHQ7bGV0IG49dC5wb3NpdGlvbi52YWx1ZXMsbyxyOyhlLm5vcm1hbHx8ZS5iaXRhbmdlbnQpJiYobz10Lm5vcm1hbC52YWx1ZXMscj10LmJpdGFuZ2VudC52YWx1ZXMpO2xldCBpPXQucG9zaXRpb24udmFsdWVzLmxlbmd0aC8xOCxzPWkqMyxmPWkqMix1PXMqMixjO2lmKGUubm9ybWFsfHxlLmJpdGFuZ2VudHx8ZS50YW5nZW50KXtsZXQgbD1lLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KHMqNik6dm9pZCAwLHA9ZS50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkocyo2KTp2b2lkIDAsZD1lLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KHMqNik6dm9pZCAwLG09cVQsXz1LVCxnPV9kLGI9eWQsTz1qdixUPVdULEU9dTtmb3IoYz0wO2M8cztjKz0zKXtsZXQgdz1FK3U7bT1hLmZyb21BcnJheShuLGMsbSksXz1hLmZyb21BcnJheShuLGMrcyxfKSxnPWEuZnJvbUFycmF5KG4sKGMrMyklcyxnKSxfPWEuc3VidHJhY3QoXyxtLF8pLGc9YS5zdWJ0cmFjdChnLG0sZyksYj1hLm5vcm1hbGl6ZShhLmNyb3NzKF8sZyxiKSxiKSxlLm5vcm1hbCYmKHFlLmFkZEF0dHJpYnV0ZShsLGIsdykscWUuYWRkQXR0cmlidXRlKGwsYix3KzMpLHFlLmFkZEF0dHJpYnV0ZShsLGIsRSkscWUuYWRkQXR0cmlidXRlKGwsYixFKzMpKSwoZS50YW5nZW50fHxlLmJpdGFuZ2VudCkmJihUPWEuZnJvbUFycmF5KG8sYyxUKSxlLmJpdGFuZ2VudCYmKHFlLmFkZEF0dHJpYnV0ZShkLFQsdykscWUuYWRkQXR0cmlidXRlKGQsVCx3KzMpLHFlLmFkZEF0dHJpYnV0ZShkLFQsRSkscWUuYWRkQXR0cmlidXRlKGQsVCxFKzMpKSxlLnRhbmdlbnQmJihPPWEubm9ybWFsaXplKGEuY3Jvc3MoVCxiLE8pLE8pLHFlLmFkZEF0dHJpYnV0ZShwLE8sdykscWUuYWRkQXR0cmlidXRlKHAsTyx3KzMpLHFlLmFkZEF0dHJpYnV0ZShwLE8sRSkscWUuYWRkQXR0cmlidXRlKHAsTyxFKzMpKSksRSs9Nn1pZihlLm5vcm1hbCl7Zm9yKGwuc2V0KG8pLGM9MDtjPHM7Yys9MylsW2Mrc109LW9bY10sbFtjK3MrMV09LW9bYysxXSxsW2MrcysyXT0tb1tjKzJdO3Qubm9ybWFsLnZhbHVlcz1sfWVsc2UgdC5ub3JtYWw9dm9pZCAwO2lmKGUuYml0YW5nZW50PyhkLnNldChyKSxkLnNldChyLHMpLHQuYml0YW5nZW50LnZhbHVlcz1kKTp0LmJpdGFuZ2VudD12b2lkIDAsZS50YW5nZW50KXtsZXQgdz10LnRhbmdlbnQudmFsdWVzO3Auc2V0KHcpLHAuc2V0KHcscyksdC50YW5nZW50LnZhbHVlcz1wfX1pZihlLnN0KXtsZXQgbD10LnN0LnZhbHVlcyxwPW5ldyBGbG9hdDMyQXJyYXkoZio2KTtwLnNldChsKSxwLnNldChsLGYpO2xldCBkPWYqMjtmb3IobGV0IG09MDttPDI7bSsrKXtmb3IocFtkKytdPWxbMF0scFtkKytdPWxbMV0sYz0yO2M8ZjtjKz0yKXtsZXQgXz1sW2NdLGc9bFtjKzFdO3BbZCsrXT1fLHBbZCsrXT1nLHBbZCsrXT1fLHBbZCsrXT1nfXBbZCsrXT1sWzBdLHBbZCsrXT1sWzFdfXQuc3QudmFsdWVzPXB9cmV0dXJuIHR9ZnVuY3Rpb24gVzAodCxlLG4pe25bZSsrXT10WzBdLG5bZSsrXT10WzFdLG5bZSsrXT10WzJdO2ZvcihsZXQgbz0zO288dC5sZW5ndGg7bys9Myl7bGV0IHI9dFtvXSxpPXRbbysxXSxzPXRbbysyXTtuW2UrK109cixuW2UrK109aSxuW2UrK109cyxuW2UrK109cixuW2UrK109aSxuW2UrK109c31yZXR1cm4gbltlKytdPXRbMF0sbltlKytdPXRbMV0sbltlKytdPXRbMl0sbn1mdW5jdGlvbiBxdih0LGUpe2xldCBuPW5ldyBsdCh7cG9zaXRpb246ZS5wb3NpdGlvbixub3JtYWw6ZS5ub3JtYWx8fGUuYml0YW5nZW50fHx0LnNoYWRvd1ZvbHVtZSx0YW5nZW50OmUudGFuZ2VudCxiaXRhbmdlbnQ6ZS5ub3JtYWx8fGUuYml0YW5nZW50LHN0OmUuc3R9KSxvPXQuZWxsaXBzb2lkLHI9cWUuY29tcHV0ZVBvc2l0aW9ucyh0KSxpPVlUKHIsbixvKSxzPXQuaGVpZ2h0LGY9dC5leHRydWRlZEhlaWdodCx1PWkuYXR0cmlidXRlcyxjPWkuaW5kaWNlcyxsPXUucG9zaXRpb24udmFsdWVzLHA9bC5sZW5ndGgsZD1uZXcgRmxvYXQ2NEFycmF5KHAqNiksbT1uZXcgRmxvYXQ2NEFycmF5KHApO20uc2V0KGwpO2xldCBfPW5ldyBGbG9hdDY0QXJyYXkocCo0KTtsPVNlLnNjYWxlVG9HZW9kZXRpY0hlaWdodChsLHMsbyksXz1XMChsLDAsXyksbT1TZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHQobSxmLG8pLF89VzAobSxwKjIsXyksZC5zZXQobCksZC5zZXQobSxwKSxkLnNldChfLHAqMiksdS5wb3NpdGlvbi52YWx1ZXM9ZCx1PUh2KHUsZSk7bGV0IGcsYj1wLzM7aWYodC5zaGFkb3dWb2x1bWUpe2xldCB2PXUubm9ybWFsLnZhbHVlcztwPXYubGVuZ3RoO2xldCBEPW5ldyBGbG9hdDMyQXJyYXkocCo2KTtmb3IoZz0wO2c8cDtnKyspdltnXT0tdltnXTtELnNldCh2LHApLEQ9VzAodixwKjQsRCksdS5leHRydWRlRGlyZWN0aW9uPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpEfSksZS5ub3JtYWx8fCh1Lm5vcm1hbD12b2lkIDApfWlmKGgodC5vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgdj1uZXcgVWludDhBcnJheShiKjYpO2lmKHQub2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QKXY9di5maWxsKDEsMCxiKS5maWxsKDEsYioyLGIqNCk7ZWxzZXtsZXQgRD10Lm9mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxO3Y9di5maWxsKEQpfXUuYXBwbHlPZmZzZXQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6dn0pfWxldCBPPWMubGVuZ3RoLFQ9YitiLEU9RHQuY3JlYXRlVHlwZWRBcnJheShkLmxlbmd0aC8zLE8qMitUKjMpO0Uuc2V0KGMpO2xldCB3PU87Zm9yKGc9MDtnPE87Zys9Myl7bGV0IHY9Y1tnXSxEPWNbZysxXSxVPWNbZysyXTtFW3crK109VStiLEVbdysrXT1EK2IsRVt3KytdPXYrYn1sZXQgQyxOLEksTDtmb3IoZz0wO2c8VDtnKz0yKUM9ZytULE49QytULEk9QysxLEw9TisxLEVbdysrXT1DLEVbdysrXT1OLEVbdysrXT1JLEVbdysrXT1JLEVbdysrXT1OLEVbdysrXT1MO3JldHVybnthdHRyaWJ1dGVzOnUsaW5kaWNlczpFfX1mdW5jdGlvbiBIVCh0LGUsbixvLHIsaSl7bGV0IHM9YS5zdWJ0cmFjdChlLHQsalQpO2Eubm9ybWFsaXplKHMscyk7bGV0IGY9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwodCxHZiksdT1hLmNyb3NzKHMsZixqVCk7YS5tdWx0aXBseUJ5U2NhbGFyKHUsbyx1KTtsZXQgYz1yLmxhdGl0dWRlLGw9ci5sb25naXR1ZGUscD1pLmxhdGl0dWRlLGQ9aS5sb25naXR1ZGU7YS5hZGQodCx1LEdmKSxuLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKEdmLE9yKTtsZXQgbT1Pci5sYXRpdHVkZSxfPU9yLmxvbmdpdHVkZTtjPU1hdGgubWluKGMsbSksbD1NYXRoLm1pbihsLF8pLHA9TWF0aC5tYXgocCxtKSxkPU1hdGgubWF4KGQsXyksYS5zdWJ0cmFjdCh0LHUsR2YpLG4uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoR2YsT3IpLG09T3IubGF0aXR1ZGUsXz1Pci5sb25naXR1ZGUsYz1NYXRoLm1pbihjLG0pLGw9TWF0aC5taW4obCxfKSxwPU1hdGgubWF4KHAsbSksZD1NYXRoLm1heChkLF8pLHIubGF0aXR1ZGU9YyxyLmxvbmdpdHVkZT1sLGkubGF0aXR1ZGU9cCxpLmxvbmdpdHVkZT1kfWZ1bmN0aW9uICRUKHQsZSxuLG8scil7dD1YVCh0LGUpO2xldCBpPUNuKHQsYS5lcXVhbHNFcHNpbG9uKSxzPWkubGVuZ3RoO2lmKHM8Mnx8bjw9MClyZXR1cm4gbmV3IFB0O2xldCBmPW4qLjU7dHIubGF0aXR1ZGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHRyLmxvbmdpdHVkZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksZXIubGF0aXR1ZGU9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGVyLmxvbmdpdHVkZT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7bGV0IHUsYztpZihvPT09Zm4uUk9VTkRFRCl7bGV0IGQ9aVswXTthLnN1YnRyYWN0KGQsaVsxXSxUciksYS5ub3JtYWxpemUoVHIsVHIpLGEubXVsdGlwbHlCeVNjYWxhcihUcixmLFRyKSxhLmFkZChkLFRyLHpmKSxlLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHpmLE9yKSx1PU9yLmxhdGl0dWRlLGM9T3IubG9uZ2l0dWRlLHRyLmxhdGl0dWRlPU1hdGgubWluKHRyLmxhdGl0dWRlLHUpLHRyLmxvbmdpdHVkZT1NYXRoLm1pbih0ci5sb25naXR1ZGUsYyksZXIubGF0aXR1ZGU9TWF0aC5tYXgoZXIubGF0aXR1ZGUsdSksZXIubG9uZ2l0dWRlPU1hdGgubWF4KGVyLmxvbmdpdHVkZSxjKX1mb3IobGV0IGQ9MDtkPHMtMTsrK2QpSFQoaVtkXSxpW2QrMV0sZSxmLHRyLGVyKTtsZXQgbD1pW3MtMV07YS5zdWJ0cmFjdChsLGlbcy0yXSxUciksYS5ub3JtYWxpemUoVHIsVHIpLGEubXVsdGlwbHlCeVNjYWxhcihUcixmLFRyKSxhLmFkZChsLFRyLHpmKSxIVChsLHpmLGUsZix0cixlciksbz09PWZuLlJPVU5ERUQmJihlLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHpmLE9yKSx1PU9yLmxhdGl0dWRlLGM9T3IubG9uZ2l0dWRlLHRyLmxhdGl0dWRlPU1hdGgubWluKHRyLmxhdGl0dWRlLHUpLHRyLmxvbmdpdHVkZT1NYXRoLm1pbih0ci5sb25naXR1ZGUsYyksZXIubGF0aXR1ZGU9TWF0aC5tYXgoZXIubGF0aXR1ZGUsdSksZXIubG9uZ2l0dWRlPU1hdGgubWF4KGVyLmxvbmdpdHVkZSxjKSk7bGV0IHA9aChyKT9yOm5ldyBQdDtyZXR1cm4gcC5ub3J0aD1lci5sYXRpdHVkZSxwLnNvdXRoPXRyLmxhdGl0dWRlLHAuZWFzdD1lci5sb25naXR1ZGUscC53ZXN0PXRyLmxvbmdpdHVkZSxwfWZ1bmN0aW9uIFZpKHQpe3Q9eCh0LHguRU1QVFlfT0JKRUNUKTtsZXQgZT10LnBvc2l0aW9ucyxuPXQud2lkdGg7eS5kZWZpbmVkKCJvcHRpb25zLnBvc2l0aW9ucyIsZSkseS5kZWZpbmVkKCJvcHRpb25zLndpZHRoIixuKTtsZXQgbz14KHQuaGVpZ2h0LDApLHI9eCh0LmV4dHJ1ZGVkSGVpZ2h0LG8pO3RoaXMuX3Bvc2l0aW9ucz1lLHRoaXMuX2VsbGlwc29pZD0kLmNsb25lKHgodC5lbGxpcHNvaWQsJC5XR1M4NCkpLHRoaXMuX3ZlcnRleEZvcm1hdD1sdC5jbG9uZSh4KHQudmVydGV4Rm9ybWF0LGx0LkRFRkFVTFQpKSx0aGlzLl93aWR0aD1uLHRoaXMuX2hlaWdodD1NYXRoLm1heChvLHIpLHRoaXMuX2V4dHJ1ZGVkSGVpZ2h0PU1hdGgubWluKG8sciksdGhpcy5fY29ybmVyVHlwZT14KHQuY29ybmVyVHlwZSxmbi5ST1VOREVEKSx0aGlzLl9ncmFudWxhcml0eT14KHQuZ3JhbnVsYXJpdHksTS5SQURJQU5TX1BFUl9ERUdSRUUpLHRoaXMuX3NoYWRvd1ZvbHVtZT14KHQuc2hhZG93Vm9sdW1lLCExKSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDb3JyaWRvckdlb21ldHJ5Iix0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9dC5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fcmVjdGFuZ2xlPXZvaWQgMCx0aGlzLnBhY2tlZExlbmd0aD0xK2UubGVuZ3RoKmEucGFja2VkTGVuZ3RoKyQucGFja2VkTGVuZ3RoK2x0LnBhY2tlZExlbmd0aCs3fXZhciBxVCxLVCxfZCx5ZCxqdixXVCxtcyxUYSxqVCxHZixPcixUcix6Zix0cixlcixaVCxRVCxVaSxYMCxKVD1aKCgpPT57anIoKTtQZSgpO1V0KCk7dmUoKTtZdCgpO0RlKCk7aGMoKTtLMCgpO0l0KCk7YXQoKTtadCgpO1hlKCk7WWUoKTthbigpO0ZvKCk7JGUoKTtXdCgpO3FyKCk7dG4oKTtBbigpO1JvKCk7cVQ9bmV3IGEsS1Q9bmV3IGEsX2Q9bmV3IGEseWQ9bmV3IGEsanY9bmV3IGEsV1Q9bmV3IGEsbXM9bmV3IGEsVGE9bmV3IGE7alQ9bmV3IGEsR2Y9bmV3IGEsT3I9bmV3IGN0O1RyPW5ldyBhLHpmPW5ldyBhLHRyPW5ldyBjdCxlcj1uZXcgY3Q7VmkucGFjaz1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj14KG4sMCk7bGV0IG89dC5fcG9zaXRpb25zLHI9by5sZW5ndGg7ZVtuKytdPXI7Zm9yKGxldCBpPTA7aTxyOysraSxuKz1hLnBhY2tlZExlbmd0aClhLnBhY2sob1tpXSxlLG4pO3JldHVybiAkLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9JC5wYWNrZWRMZW5ndGgsbHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxuKz1sdC5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX3dpZHRoLGVbbisrXT10Ll9oZWlnaHQsZVtuKytdPXQuX2V4dHJ1ZGVkSGVpZ2h0LGVbbisrXT10Ll9jb3JuZXJUeXBlLGVbbisrXT10Ll9ncmFudWxhcml0eSxlW24rK109dC5fc2hhZG93Vm9sdW1lPzE6MCxlW25dPXgodC5fb2Zmc2V0QXR0cmlidXRlLC0xKSxlfTtaVD0kLmNsb25lKCQuVU5JVF9TUEhFUkUpLFFUPW5ldyBsdCxVaT17cG9zaXRpb25zOnZvaWQgMCxlbGxpcHNvaWQ6WlQsdmVydGV4Rm9ybWF0OlFULHdpZHRoOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLGV4dHJ1ZGVkSGVpZ2h0OnZvaWQgMCxjb3JuZXJUeXBlOnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDAsc2hhZG93Vm9sdW1lOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtWaS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9eChlLDApO2xldCBvPXRbZSsrXSxyPW5ldyBBcnJheShvKTtmb3IobGV0IF89MDtfPG87KytfLGUrPWEucGFja2VkTGVuZ3RoKXJbX109YS51bnBhY2sodCxlKTtsZXQgaT0kLnVucGFjayh0LGUsWlQpO2UrPSQucGFja2VkTGVuZ3RoO2xldCBzPWx0LnVucGFjayh0LGUsUVQpO2UrPWx0LnBhY2tlZExlbmd0aDtsZXQgZj10W2UrK10sdT10W2UrK10sYz10W2UrK10sbD10W2UrK10scD10W2UrK10sZD10W2UrK109PT0xLG09dFtlXTtyZXR1cm4gaChuKT8obi5fcG9zaXRpb25zPXIsbi5fZWxsaXBzb2lkPSQuY2xvbmUoaSxuLl9lbGxpcHNvaWQpLG4uX3ZlcnRleEZvcm1hdD1sdC5jbG9uZShzLG4uX3ZlcnRleEZvcm1hdCksbi5fd2lkdGg9ZixuLl9oZWlnaHQ9dSxuLl9leHRydWRlZEhlaWdodD1jLG4uX2Nvcm5lclR5cGU9bCxuLl9ncmFudWxhcml0eT1wLG4uX3NoYWRvd1ZvbHVtZT1kLG4uX29mZnNldEF0dHJpYnV0ZT1tPT09LTE/dm9pZCAwOm0sbik6KFVpLnBvc2l0aW9ucz1yLFVpLndpZHRoPWYsVWkuaGVpZ2h0PXUsVWkuZXh0cnVkZWRIZWlnaHQ9YyxVaS5jb3JuZXJUeXBlPWwsVWkuZ3JhbnVsYXJpdHk9cCxVaS5zaGFkb3dWb2x1bWU9ZCxVaS5vZmZzZXRBdHRyaWJ1dGU9bT09PS0xP3ZvaWQgMDptLG5ldyBWaShVaSkpfTtWaS5jb21wdXRlUmVjdGFuZ2xlPWZ1bmN0aW9uKHQsZSl7dD14KHQseC5FTVBUWV9PQkpFQ1QpO2xldCBuPXQucG9zaXRpb25zLG89dC53aWR0aDt5LmRlZmluZWQoIm9wdGlvbnMucG9zaXRpb25zIixuKSx5LmRlZmluZWQoIm9wdGlvbnMud2lkdGgiLG8pO2xldCByPXgodC5lbGxpcHNvaWQsJC5XR1M4NCksaT14KHQuY29ybmVyVHlwZSxmbi5ST1VOREVEKTtyZXR1cm4gJFQobixyLG8saSxlKX07VmkuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fcG9zaXRpb25zLG49dC5fd2lkdGgsbz10Ll9lbGxpcHNvaWQ7ZT1YVChlLG8pO2xldCByPUNuKGUsYS5lcXVhbHNFcHNpbG9uKTtpZihyLmxlbmd0aDwyfHxuPD0wKXJldHVybjtsZXQgaT10Ll9oZWlnaHQscz10Ll9leHRydWRlZEhlaWdodCxmPSFNLmVxdWFsc0Vwc2lsb24oaSxzLDAsTS5FUFNJTE9OMiksdT10Ll92ZXJ0ZXhGb3JtYXQsYz17ZWxsaXBzb2lkOm8scG9zaXRpb25zOnIsd2lkdGg6bixjb3JuZXJUeXBlOnQuX2Nvcm5lclR5cGUsZ3JhbnVsYXJpdHk6dC5fZ3JhbnVsYXJpdHksc2F2ZUF0dHJpYnV0ZXM6ITB9LGw7aWYoZiljLmhlaWdodD1pLGMuZXh0cnVkZWRIZWlnaHQ9cyxjLnNoYWRvd1ZvbHVtZT10Ll9zaGFkb3dWb2x1bWUsYy5vZmZzZXRBdHRyaWJ1dGU9dC5fb2Zmc2V0QXR0cmlidXRlLGw9cXYoYyx1KTtlbHNle2xldCBtPXFlLmNvbXB1dGVQb3NpdGlvbnMoYyk7aWYobD1ZVChtLHUsbyksbC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1TZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHQobC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxpLG8pLGgodC5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IF89dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjEsZz1sLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aCxiPW5ldyBVaW50OEFycmF5KGcvMykuZmlsbChfKTtsLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6Yn0pfX1sZXQgcD1sLmF0dHJpYnV0ZXMsZD15dC5mcm9tVmVydGljZXMocC5wb3NpdGlvbi52YWx1ZXMsdm9pZCAwLDMpO3JldHVybiB1LnBvc2l0aW9ufHwobC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz12b2lkIDApLG5ldyBGdCh7YXR0cmlidXRlczpwLGluZGljZXM6bC5pbmRpY2VzLHByaW1pdGl2ZVR5cGU6THQuVFJJQU5HTEVTLGJvdW5kaW5nU3BoZXJlOmQsb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTtWaS5jcmVhdGVTaGFkb3dWb2x1bWU9ZnVuY3Rpb24odCxlLG4pe2xldCBvPXQuX2dyYW51bGFyaXR5LHI9dC5fZWxsaXBzb2lkLGk9ZShvLHIpLHM9bihvLHIpO3JldHVybiBuZXcgVmkoe3Bvc2l0aW9uczp0Ll9wb3NpdGlvbnMsd2lkdGg6dC5fd2lkdGgsY29ybmVyVHlwZTp0Ll9jb3JuZXJUeXBlLGVsbGlwc29pZDpyLGdyYW51bGFyaXR5Om8sZXh0cnVkZWRIZWlnaHQ6aSxoZWlnaHQ6cyx2ZXJ0ZXhGb3JtYXQ6bHQuUE9TSVRJT05fT05MWSxzaGFkb3dWb2x1bWU6ITB9KX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVmkucHJvdG90eXBlLHtyZWN0YW5nbGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBoKHRoaXMuX3JlY3RhbmdsZSl8fCh0aGlzLl9yZWN0YW5nbGU9JFQodGhpcy5fcG9zaXRpb25zLHRoaXMuX2VsbGlwc29pZCx0aGlzLl93aWR0aCx0aGlzLl9jb3JuZXJUeXBlKSksdGhpcy5fcmVjdGFuZ2xlfX0sdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuWzAsMCwwLDEsMSwwXX19fSk7WDA9Vml9KTt2YXIgWTA9e307bWUoWTAse2RlZmF1bHQ6KCk9Pld2fSk7ZnVuY3Rpb24gS3YodCxlKXtyZXR1cm4gaChlKSYmKHQ9WDAudW5wYWNrKHQsZSkpLHQuX2VsbGlwc29pZD0kLmNsb25lKHQuX2VsbGlwc29pZCksWDAuY3JlYXRlR2VvbWV0cnkodCl9dmFyIFd2LCQwPVooKCk9PntKVCgpO2F0KCk7WnQoKTtXdj1Ldn0pO2Z1bmN0aW9uIFl2KHQsZSl7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXT1lLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UodFtuXSx0W25dKTtyZXR1cm4gdH1mdW5jdGlvbiBuTyh0LGUpe2xldCBuPVtdLG89dC5wb3NpdGlvbnMscj10LmNvcm5lcnMsaT10LmVuZFBvc2l0aW9ucyxzPW5ldyByZSxmLHU9MCxjPTAsbCxwPTAsZDtmb3IobD0wO2w8by5sZW5ndGg7bCs9MilkPW9bbF0ubGVuZ3RoLTMsdSs9ZCxwKz1kLzMqNCxjKz1vW2wrMV0ubGVuZ3RoLTM7Zm9yKHUrPTMsYys9MyxsPTA7bDxyLmxlbmd0aDtsKyspe2Y9cltsXTtsZXQgRj1yW2xdLmxlZnRQb3NpdGlvbnM7aChGKT8oZD1GLmxlbmd0aCx1Kz1kLHArPWQvMyoyKTooZD1yW2xdLnJpZ2h0UG9zaXRpb25zLmxlbmd0aCxjKz1kLHArPWQvMyoyKX1sZXQgbT1oKGkpLF87bSYmKF89aVswXS5sZW5ndGgtMyx1Kz1fLGMrPV8sXy89MyxwKz1fKjQpO2xldCBnPXUrYyxiPW5ldyBGbG9hdDY0QXJyYXkoZyksTz0wLFQ9Zy0xLEUsdyxDLE4sSSxMLHY9Xy8yLEQ9RHQuY3JlYXRlVHlwZWRBcnJheShnLzMscCs0KSxVPTA7aWYoRFtVKytdPU8vMyxEW1UrK109KFQtMikvMyxtKXtuLnB1c2goTy8zKSxMPXRPLEk9ZU87bGV0IEY9aVswXTtmb3IobD0wO2w8djtsKyspTD1hLmZyb21BcnJheShGLCh2LTEtbCkqMyxMKSxJPWEuZnJvbUFycmF5KEYsKHYrbCkqMyxJKSxxZS5hZGRBdHRyaWJ1dGUoYixJLE8pLHFlLmFkZEF0dHJpYnV0ZShiLEwsdm9pZCAwLFQpLHc9Ty8zLE49dysxLEU9KFQtMikvMyxDPUUtMSxEW1UrK109RSxEW1UrK109QyxEW1UrK109dyxEW1UrK109TixPKz0zLFQtPTN9bGV0IEE9MCxTPW9bQSsrXSxQPW9bQSsrXTtmb3IoYi5zZXQoUyxPKSxiLnNldChQLFQtUC5sZW5ndGgrMSksZD1QLmxlbmd0aC0zLG4ucHVzaChPLzMsKFQtMikvMyksbD0wO2w8ZDtsKz0zKXc9Ty8zLE49dysxLEU9KFQtMikvMyxDPUUtMSxEW1UrK109RSxEW1UrK109QyxEW1UrK109dyxEW1UrK109TixPKz0zLFQtPTM7Zm9yKGw9MDtsPHIubGVuZ3RoO2wrKyl7bGV0IEY7Zj1yW2xdO2xldCBqPWYubGVmdFBvc2l0aW9ucyxIPWYucmlnaHRQb3NpdGlvbnMsayxLPVh2O2lmKGgoaikpe2ZvcihULT0zLGs9QyxuLnB1c2goTiksRj0wO0Y8ai5sZW5ndGgvMztGKyspSz1hLmZyb21BcnJheShqLEYqMyxLKSxEW1UrK109ay1GLTEsRFtVKytdPWstRixxZS5hZGRBdHRyaWJ1dGUoYixLLHZvaWQgMCxUKSxULT0zO24ucHVzaChrLU1hdGguZmxvb3Ioai5sZW5ndGgvNikpLGU9PT1mbi5CRVZFTEVEJiZuLnB1c2goKFQtMikvMysxKSxPKz0zfWVsc2V7Zm9yKE8rPTMsaz1OLG4ucHVzaChDKSxGPTA7RjxILmxlbmd0aC8zO0YrKylLPWEuZnJvbUFycmF5KEgsRiozLEspLERbVSsrXT1rK0YsRFtVKytdPWsrRisxLHFlLmFkZEF0dHJpYnV0ZShiLEssTyksTys9MztuLnB1c2goaytNYXRoLmZsb29yKEgubGVuZ3RoLzYpKSxlPT09Zm4uQkVWRUxFRCYmbi5wdXNoKE8vMy0xKSxULT0zfWZvcihTPW9bQSsrXSxQPW9bQSsrXSxTLnNwbGljZSgwLDMpLFAuc3BsaWNlKFAubGVuZ3RoLTMsMyksYi5zZXQoUyxPKSxiLnNldChQLFQtUC5sZW5ndGgrMSksZD1QLmxlbmd0aC0zLEY9MDtGPFAubGVuZ3RoO0YrPTMpTj1PLzMsdz1OLTEsQz0oVC0yKS8zLEU9QysxLERbVSsrXT1FLERbVSsrXT1DLERbVSsrXT13LERbVSsrXT1OLE8rPTMsVC09MztPLT0zLFQrPTMsbi5wdXNoKE8vMywoVC0yKS8zKX1pZihtKXtPKz0zLFQtPTMsTD10TyxJPWVPO2xldCBGPWlbMV07Zm9yKGw9MDtsPHY7bCsrKUw9YS5mcm9tQXJyYXkoRiwoXy1sLTEpKjMsTCksST1hLmZyb21BcnJheShGLGwqMyxJKSxxZS5hZGRBdHRyaWJ1dGUoYixMLHZvaWQgMCxUKSxxZS5hZGRBdHRyaWJ1dGUoYixJLE8pLE49Ty8zLHc9Ti0xLEM9KFQtMikvMyxFPUMrMSxEW1UrK109RSxEW1UrK109QyxEW1UrK109dyxEW1UrK109TixPKz0zLFQtPTM7bi5wdXNoKE8vMyl9ZWxzZSBuLnB1c2goTy8zLChULTIpLzMpO3JldHVybiBEW1UrK109Ty8zLERbVSsrXT0oVC0yKS8zLHMucG9zaXRpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpifSkse2F0dHJpYnV0ZXM6cyxpbmRpY2VzOkQsd2FsbEluZGljZXM6bn19ZnVuY3Rpb24gJHYodCl7bGV0IGU9dC5lbGxpcHNvaWQsbj1xZS5jb21wdXRlUG9zaXRpb25zKHQpLG89bk8obix0LmNvcm5lclR5cGUpLHI9by53YWxsSW5kaWNlcyxpPXQuaGVpZ2h0LHM9dC5leHRydWRlZEhlaWdodCxmPW8uYXR0cmlidXRlcyx1PW8uaW5kaWNlcyxjPWYucG9zaXRpb24udmFsdWVzLGw9Yy5sZW5ndGgscD1uZXcgRmxvYXQ2NEFycmF5KGwpO3Auc2V0KGMpO2xldCBkPW5ldyBGbG9hdDY0QXJyYXkobCoyKTtpZihjPVNlLnNjYWxlVG9HZW9kZXRpY0hlaWdodChjLGksZSkscD1TZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHQocCxzLGUpLGQuc2V0KGMpLGQuc2V0KHAsbCksZi5wb3NpdGlvbi52YWx1ZXM9ZCxsLz0zLGgodC5vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgRT1uZXcgVWludDhBcnJheShsKjIpO2lmKHQub2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QKUU9RS5maWxsKDEsMCxsKTtlbHNle2xldCB3PXQub2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjE7RT1FLmZpbGwodyl9Zi5hcHBseU9mZnNldD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpFfSl9bGV0IG0sXz11Lmxlbmd0aCxnPUR0LmNyZWF0ZVR5cGVkQXJyYXkoZC5sZW5ndGgvMywoXytyLmxlbmd0aCkqMik7Zy5zZXQodSk7bGV0IGI9Xztmb3IobT0wO208XzttKz0yKXtsZXQgRT11W21dLHc9dVttKzFdO2dbYisrXT1FK2wsZ1tiKytdPXcrbH1sZXQgTyxUO2ZvcihtPTA7bTxyLmxlbmd0aDttKyspTz1yW21dLFQ9TytsLGdbYisrXT1PLGdbYisrXT1UO3JldHVybnthdHRyaWJ1dGVzOmYsaW5kaWNlczpnfX1mdW5jdGlvbiBqZih0KXt0PXgodCx4LkVNUFRZX09CSkVDVCk7bGV0IGU9dC5wb3NpdGlvbnMsbj10LndpZHRoO3kudHlwZU9mLm9iamVjdCgib3B0aW9ucy5wb3NpdGlvbnMiLGUpLHkudHlwZU9mLm51bWJlcigib3B0aW9ucy53aWR0aCIsbik7bGV0IG89eCh0LmhlaWdodCwwKSxyPXgodC5leHRydWRlZEhlaWdodCxvKTt0aGlzLl9wb3NpdGlvbnM9ZSx0aGlzLl9lbGxpcHNvaWQ9JC5jbG9uZSh4KHQuZWxsaXBzb2lkLCQuV0dTODQpKSx0aGlzLl93aWR0aD1uLHRoaXMuX2hlaWdodD1NYXRoLm1heChvLHIpLHRoaXMuX2V4dHJ1ZGVkSGVpZ2h0PU1hdGgubWluKG8sciksdGhpcy5fY29ybmVyVHlwZT14KHQuY29ybmVyVHlwZSxmbi5ST1VOREVEKSx0aGlzLl9ncmFudWxhcml0eT14KHQuZ3JhbnVsYXJpdHksTS5SQURJQU5TX1BFUl9ERUdSRUUpLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDb3JyaWRvck91dGxpbmVHZW9tZXRyeSIsdGhpcy5wYWNrZWRMZW5ndGg9MStlLmxlbmd0aCphLnBhY2tlZExlbmd0aCskLnBhY2tlZExlbmd0aCs2fXZhciB0TyxlTyxYdixvTyxocyxaMCxyTz1aKCgpPT57anIoKTtQZSgpO1V0KCk7WXQoKTtEZSgpO2hjKCk7SzAoKTtJdCgpO2F0KCk7WnQoKTtYZSgpO1llKCk7YW4oKTtGbygpOyRlKCk7V3QoKTtxcigpO3RuKCk7dE89bmV3IGEsZU89bmV3IGEsWHY9bmV3IGE7amYucGFjaz1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS50eXBlT2Yub2JqZWN0KCJhcnJheSIsZSksbj14KG4sMCk7bGV0IG89dC5fcG9zaXRpb25zLHI9by5sZW5ndGg7ZVtuKytdPXI7Zm9yKGxldCBpPTA7aTxyOysraSxuKz1hLnBhY2tlZExlbmd0aClhLnBhY2sob1tpXSxlLG4pO3JldHVybiAkLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9JC5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX3dpZHRoLGVbbisrXT10Ll9oZWlnaHQsZVtuKytdPXQuX2V4dHJ1ZGVkSGVpZ2h0LGVbbisrXT10Ll9jb3JuZXJUeXBlLGVbbisrXT10Ll9ncmFudWxhcml0eSxlW25dPXgodC5fb2Zmc2V0QXR0cmlidXRlLC0xKSxlfTtvTz0kLmNsb25lKCQuVU5JVF9TUEhFUkUpLGhzPXtwb3NpdGlvbnM6dm9pZCAwLGVsbGlwc29pZDpvTyx3aWR0aDp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxleHRydWRlZEhlaWdodDp2b2lkIDAsY29ybmVyVHlwZTp2b2lkIDAsZ3JhbnVsYXJpdHk6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O2pmLnVucGFjaz1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJhcnJheSIsdCksZT14KGUsMCk7bGV0IG89dFtlKytdLHI9bmV3IEFycmF5KG8pO2ZvcihsZXQgZD0wO2Q8bzsrK2QsZSs9YS5wYWNrZWRMZW5ndGgpcltkXT1hLnVucGFjayh0LGUpO2xldCBpPSQudW5wYWNrKHQsZSxvTyk7ZSs9JC5wYWNrZWRMZW5ndGg7bGV0IHM9dFtlKytdLGY9dFtlKytdLHU9dFtlKytdLGM9dFtlKytdLGw9dFtlKytdLHA9dFtlXTtyZXR1cm4gaChuKT8obi5fcG9zaXRpb25zPXIsbi5fZWxsaXBzb2lkPSQuY2xvbmUoaSxuLl9lbGxpcHNvaWQpLG4uX3dpZHRoPXMsbi5faGVpZ2h0PWYsbi5fZXh0cnVkZWRIZWlnaHQ9dSxuLl9jb3JuZXJUeXBlPWMsbi5fZ3JhbnVsYXJpdHk9bCxuLl9vZmZzZXRBdHRyaWJ1dGU9cD09PS0xP3ZvaWQgMDpwLG4pOihocy5wb3NpdGlvbnM9cixocy53aWR0aD1zLGhzLmhlaWdodD1mLGhzLmV4dHJ1ZGVkSGVpZ2h0PXUsaHMuY29ybmVyVHlwZT1jLGhzLmdyYW51bGFyaXR5PWwsaHMub2Zmc2V0QXR0cmlidXRlPXA9PT0tMT92b2lkIDA6cCxuZXcgamYoaHMpKX07amYuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fcG9zaXRpb25zLG49dC5fd2lkdGgsbz10Ll9lbGxpcHNvaWQ7ZT1ZdihlLG8pO2xldCByPUNuKGUsYS5lcXVhbHNFcHNpbG9uKTtpZihyLmxlbmd0aDwyfHxuPD0wKXJldHVybjtsZXQgaT10Ll9oZWlnaHQscz10Ll9leHRydWRlZEhlaWdodCxmPSFNLmVxdWFsc0Vwc2lsb24oaSxzLDAsTS5FUFNJTE9OMiksdT17ZWxsaXBzb2lkOm8scG9zaXRpb25zOnIsd2lkdGg6bixjb3JuZXJUeXBlOnQuX2Nvcm5lclR5cGUsZ3JhbnVsYXJpdHk6dC5fZ3JhbnVsYXJpdHksc2F2ZUF0dHJpYnV0ZXM6ITF9LGM7aWYoZil1LmhlaWdodD1pLHUuZXh0cnVkZWRIZWlnaHQ9cyx1Lm9mZnNldEF0dHJpYnV0ZT10Ll9vZmZzZXRBdHRyaWJ1dGUsYz0kdih1KTtlbHNle2xldCBkPXFlLmNvbXB1dGVQb3NpdGlvbnModSk7aWYoYz1uTyhkLHUuY29ybmVyVHlwZSksYy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1TZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHQoYy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxpLG8pLGgodC5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IG09Yy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgsXz10Ll9vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MSxnPW5ldyBVaW50OEFycmF5KG0vMykuZmlsbChfKTtjLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6Z30pfX1sZXQgbD1jLmF0dHJpYnV0ZXMscD15dC5mcm9tVmVydGljZXMobC5wb3NpdGlvbi52YWx1ZXMsdm9pZCAwLDMpO3JldHVybiBuZXcgRnQoe2F0dHJpYnV0ZXM6bCxpbmRpY2VzOmMuaW5kaWNlcyxwcmltaXRpdmVUeXBlOkx0LkxJTkVTLGJvdW5kaW5nU3BoZXJlOnAsb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTtaMD1qZn0pO3ZhciBRMD17fTttZShRMCx7ZGVmYXVsdDooKT0+UXZ9KTtmdW5jdGlvbiBadih0LGUpe3JldHVybiBoKGUpJiYodD1aMC51bnBhY2sodCxlKSksdC5fZWxsaXBzb2lkPSQuY2xvbmUodC5fZWxsaXBzb2lkKSxaMC5jcmVhdGVHZW9tZXRyeSh0KX12YXIgUXYsSjA9WigoKT0+e3JPKCk7YXQoKTtadCgpO1F2PVp2fSk7dmFyIGlPLGdkLHRfPVooKCk9PntXdCgpO2lPPXt9O2lPLmNvbXB1dGVQb3NpdGlvbnM9ZnVuY3Rpb24odCxlLG4sbyxyKXtsZXQgaT10Ki41LHM9LWksZj1vK28sdT1yPzIqZjpmLGM9bmV3IEZsb2F0NjRBcnJheSh1KjMpLGwscD0wLGQ9MCxtPXI/ZiozOjAsXz1yPyhmK28pKjM6byozO2ZvcihsPTA7bDxvO2wrKyl7bGV0IGc9bC9vKk0uVFdPX1BJLGI9TWF0aC5jb3MoZyksTz1NYXRoLnNpbihnKSxUPWIqbixFPU8qbix3PWIqZSxDPU8qZTtjW2QrbV09VCxjW2QrbSsxXT1FLGNbZCttKzJdPXMsY1tkK19dPXcsY1tkK18rMV09QyxjW2QrXysyXT1pLGQrPTMsciYmKGNbcCsrXT1ULGNbcCsrXT1FLGNbcCsrXT1zLGNbcCsrXT13LGNbcCsrXT1DLGNbcCsrXT1pKX1yZXR1cm4gY307Z2Q9aU99KTtmdW5jdGlvbiBraSh0KXt0PXgodCx4LkVNUFRZX09CSkVDVCk7bGV0IGU9dC5sZW5ndGgsbj10LnRvcFJhZGl1cyxvPXQuYm90dG9tUmFkaXVzLHI9eCh0LnZlcnRleEZvcm1hdCxsdC5ERUZBVUxUKSxpPXgodC5zbGljZXMsMTI4KTtpZighaChlKSl0aHJvdyBuZXcgQigib3B0aW9ucy5sZW5ndGggbXVzdCBiZSBkZWZpbmVkLiIpO2lmKCFoKG4pKXRocm93IG5ldyBCKCJvcHRpb25zLnRvcFJhZGl1cyBtdXN0IGJlIGRlZmluZWQuIik7aWYoIWgobykpdGhyb3cgbmV3IEIoIm9wdGlvbnMuYm90dG9tUmFkaXVzIG11c3QgYmUgZGVmaW5lZC4iKTtpZihpPDMpdGhyb3cgbmV3IEIoIm9wdGlvbnMuc2xpY2VzIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDMuIik7aWYoaCh0Lm9mZnNldEF0dHJpYnV0ZSkmJnQub2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QKXRocm93IG5ldyBCKCJHZW9tZXRyeU9mZnNldEF0dHJpYnV0ZS5UT1AgaXMgbm90IGEgc3VwcG9ydGVkIG9wdGlvbnMub2Zmc2V0QXR0cmlidXRlIGZvciB0aGlzIGdlb21ldHJ5LiIpO3RoaXMuX2xlbmd0aD1lLHRoaXMuX3RvcFJhZGl1cz1uLHRoaXMuX2JvdHRvbVJhZGl1cz1vLHRoaXMuX3ZlcnRleEZvcm1hdD1sdC5jbG9uZShyKSx0aGlzLl9zbGljZXM9aSx0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9dC5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlQ3lsaW5kZXJHZW9tZXRyeSJ9dmFyIGVfLEp2LHRELGVELG5ELHNPLE9hLG5fLEhmLG9fPVooKCk9PntQZSgpO3plKCk7VXQoKTtEZSgpO3RfKCk7SXQoKTthdCgpO0h0KCk7WGUoKTtZZSgpO2FuKCk7Rm8oKTskZSgpO1d0KCk7dG4oKTtSbygpO2VfPW5ldyBudCxKdj1uZXcgYSx0RD1uZXcgYSxlRD1uZXcgYSxuRD1uZXcgYTtraS5wYWNrZWRMZW5ndGg9bHQucGFja2VkTGVuZ3RoKzU7a2kucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEIoInZhbHVlIGlzIHJlcXVpcmVkIik7aWYoIWgoZSkpdGhyb3cgbmV3IEIoImFycmF5IGlzIHJlcXVpcmVkIik7cmV0dXJuIG49eChuLDApLGx0LnBhY2sodC5fdmVydGV4Rm9ybWF0LGUsbiksbis9bHQucGFja2VkTGVuZ3RoLGVbbisrXT10Ll9sZW5ndGgsZVtuKytdPXQuX3RvcFJhZGl1cyxlW24rK109dC5fYm90dG9tUmFkaXVzLGVbbisrXT10Ll9zbGljZXMsZVtuXT14KHQuX29mZnNldEF0dHJpYnV0ZSwtMSksZX07c089bmV3IGx0LE9hPXt2ZXJ0ZXhGb3JtYXQ6c08sbGVuZ3RoOnZvaWQgMCx0b3BSYWRpdXM6dm9pZCAwLGJvdHRvbVJhZGl1czp2b2lkIDAsc2xpY2VzOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtraS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBCKCJhcnJheSBpcyByZXF1aXJlZCIpO2U9eChlLDApO2xldCBvPWx0LnVucGFjayh0LGUsc08pO2UrPWx0LnBhY2tlZExlbmd0aDtsZXQgcj10W2UrK10saT10W2UrK10scz10W2UrK10sZj10W2UrK10sdT10W2VdO3JldHVybiBoKG4pPyhuLl92ZXJ0ZXhGb3JtYXQ9bHQuY2xvbmUobyxuLl92ZXJ0ZXhGb3JtYXQpLG4uX2xlbmd0aD1yLG4uX3RvcFJhZGl1cz1pLG4uX2JvdHRvbVJhZGl1cz1zLG4uX3NsaWNlcz1mLG4uX29mZnNldEF0dHJpYnV0ZT11PT09LTE/dm9pZCAwOnUsbik6KE9hLmxlbmd0aD1yLE9hLnRvcFJhZGl1cz1pLE9hLmJvdHRvbVJhZGl1cz1zLE9hLnNsaWNlcz1mLE9hLm9mZnNldEF0dHJpYnV0ZT11PT09LTE/dm9pZCAwOnUsbmV3IGtpKE9hKSl9O2tpLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX2xlbmd0aCxuPXQuX3RvcFJhZGl1cyxvPXQuX2JvdHRvbVJhZGl1cyxyPXQuX3ZlcnRleEZvcm1hdCxpPXQuX3NsaWNlcztpZihlPD0wfHxuPDB8fG88MHx8bj09PTAmJm89PT0wKXJldHVybjtsZXQgcz1pK2ksZj1pK3MsdT1zK3MsYz1nZC5jb21wdXRlUG9zaXRpb25zKGUsbixvLGksITApLGw9ci5zdD9uZXcgRmxvYXQzMkFycmF5KHUqMik6dm9pZCAwLHA9ci5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheSh1KjMpOnZvaWQgMCxkPXIudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KHUqMyk6dm9pZCAwLG09ci5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheSh1KjMpOnZvaWQgMCxfLGc9ci5ub3JtYWx8fHIudGFuZ2VudHx8ci5iaXRhbmdlbnQ7aWYoZyl7bGV0IEk9ci50YW5nZW50fHxyLmJpdGFuZ2VudCxMPTAsdj0wLEQ9MCxVPU1hdGguYXRhbjIoby1uLGUpLEE9SnY7QS56PU1hdGguc2luKFUpO2xldCBTPU1hdGguY29zKFUpLFA9ZUQsRj10RDtmb3IoXz0wO188aTtfKyspe2xldCBqPV8vaSpNLlRXT19QSSxIPVMqTWF0aC5jb3Moaiksaz1TKk1hdGguc2luKGopO2cmJihBLng9SCxBLnk9ayxJJiYoUD1hLm5vcm1hbGl6ZShhLmNyb3NzKGEuVU5JVF9aLEEsUCksUCkpLHIubm9ybWFsJiYocFtMKytdPUEueCxwW0wrK109QS55LHBbTCsrXT1BLnoscFtMKytdPUEueCxwW0wrK109QS55LHBbTCsrXT1BLnopLHIudGFuZ2VudCYmKGRbdisrXT1QLngsZFt2KytdPVAueSxkW3YrK109UC56LGRbdisrXT1QLngsZFt2KytdPVAueSxkW3YrK109UC56KSxyLmJpdGFuZ2VudCYmKEY9YS5ub3JtYWxpemUoYS5jcm9zcyhBLFAsRiksRiksbVtEKytdPUYueCxtW0QrK109Ri55LG1bRCsrXT1GLnosbVtEKytdPUYueCxtW0QrK109Ri55LG1bRCsrXT1GLnopKX1mb3IoXz0wO188aTtfKyspci5ub3JtYWwmJihwW0wrK109MCxwW0wrK109MCxwW0wrK109LTEpLHIudGFuZ2VudCYmKGRbdisrXT0xLGRbdisrXT0wLGRbdisrXT0wKSxyLmJpdGFuZ2VudCYmKG1bRCsrXT0wLG1bRCsrXT0tMSxtW0QrK109MCk7Zm9yKF89MDtfPGk7XysrKXIubm9ybWFsJiYocFtMKytdPTAscFtMKytdPTAscFtMKytdPTEpLHIudGFuZ2VudCYmKGRbdisrXT0xLGRbdisrXT0wLGRbdisrXT0wKSxyLmJpdGFuZ2VudCYmKG1bRCsrXT0wLG1bRCsrXT0xLG1bRCsrXT0wKX1sZXQgYj0xMippLTEyLE89RHQuY3JlYXRlVHlwZWRBcnJheSh1LGIpLFQ9MCxFPTA7Zm9yKF89MDtfPGktMTtfKyspT1tUKytdPUUsT1tUKytdPUUrMixPW1QrK109RSszLE9bVCsrXT1FLE9bVCsrXT1FKzMsT1tUKytdPUUrMSxFKz0yO2ZvcihPW1QrK109cy0yLE9bVCsrXT0wLE9bVCsrXT0xLE9bVCsrXT1zLTIsT1tUKytdPTEsT1tUKytdPXMtMSxfPTE7XzxpLTE7XysrKU9bVCsrXT1zK18rMSxPW1QrK109cytfLE9bVCsrXT1zO2ZvcihfPTE7XzxpLTE7XysrKU9bVCsrXT1mLE9bVCsrXT1mK18sT1tUKytdPWYrXysxO2xldCB3PTA7aWYoci5zdCl7bGV0IEk9TWF0aC5tYXgobixvKTtmb3IoXz0wO188dTtfKyspe2xldCBMPWEuZnJvbUFycmF5KGMsXyozLG5EKTtsW3crK109KEwueCtJKS8oMipJKSxsW3crK109KEwueStJKS8oMipJKX19bGV0IEM9bmV3IHJlO3IucG9zaXRpb24mJihDLnBvc2l0aW9uPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Y30pKSxyLm5vcm1hbCYmKEMubm9ybWFsPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpwfSkpLHIudGFuZ2VudCYmKEMudGFuZ2VudD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6ZH0pKSxyLmJpdGFuZ2VudCYmKEMuYml0YW5nZW50PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczptfSkpLHIuc3QmJihDLnN0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpsfSkpLGVfLng9ZSouNSxlXy55PU1hdGgubWF4KG8sbik7bGV0IE49bmV3IHl0KGEuWkVSTyxudC5tYWduaXR1ZGUoZV8pKTtpZihoKHQuX29mZnNldEF0dHJpYnV0ZSkpe2U9Yy5sZW5ndGg7bGV0IEk9dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjEsTD1uZXcgVWludDhBcnJheShlLzMpLmZpbGwoSSk7Qy5hcHBseU9mZnNldD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpMfSl9cmV0dXJuIG5ldyBGdCh7YXR0cmlidXRlczpDLGluZGljZXM6TyxwcmltaXRpdmVUeXBlOkx0LlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTpOLG9mZnNldEF0dHJpYnV0ZTp0Ll9vZmZzZXRBdHRyaWJ1dGV9KX07a2kuZ2V0VW5pdEN5bGluZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGgobl8pfHwobl89a2kuY3JlYXRlR2VvbWV0cnkobmV3IGtpKHt0b3BSYWRpdXM6MSxib3R0b21SYWRpdXM6MSxsZW5ndGg6MSx2ZXJ0ZXhGb3JtYXQ6bHQuUE9TSVRJT05fT05MWX0pKSksbl99O0hmPWtpfSk7dmFyIHJfPXt9O21lKHJfLHtkZWZhdWx0OigpPT5yRH0pO2Z1bmN0aW9uIG9EKHQsZSl7cmV0dXJuIGgoZSkmJih0PUhmLnVucGFjayh0LGUpKSxIZi5jcmVhdGVHZW9tZXRyeSh0KX12YXIgckQsaV89WigoKT0+e29fKCk7YXQoKTtyRD1vRH0pO2Z1bmN0aW9uIEVhKHQpe3Q9eCh0LHguRU1QVFlfT0JKRUNUKTtsZXQgZT10Lmxlbmd0aCxuPXQudG9wUmFkaXVzLG89dC5ib3R0b21SYWRpdXMscj14KHQuc2xpY2VzLDEyOCksaT1NYXRoLm1heCh4KHQubnVtYmVyT2ZWZXJ0aWNhbExpbmVzLDE2KSwwKTtpZih5LnR5cGVPZi5udW1iZXIoIm9wdGlvbnMucG9zaXRpb25zIixlKSx5LnR5cGVPZi5udW1iZXIoIm9wdGlvbnMudG9wUmFkaXVzIixuKSx5LnR5cGVPZi5udW1iZXIoIm9wdGlvbnMuYm90dG9tUmFkaXVzIixvKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygib3B0aW9ucy5zbGljZXMiLHIsMyksaCh0Lm9mZnNldEF0dHJpYnV0ZSkmJnQub2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QKXRocm93IG5ldyBCKCJHZW9tZXRyeU9mZnNldEF0dHJpYnV0ZS5UT1AgaXMgbm90IGEgc3VwcG9ydGVkIG9wdGlvbnMub2Zmc2V0QXR0cmlidXRlIGZvciB0aGlzIGdlb21ldHJ5LiIpO3RoaXMuX2xlbmd0aD1lLHRoaXMuX3RvcFJhZGl1cz1uLHRoaXMuX2JvdHRvbVJhZGl1cz1vLHRoaXMuX3NsaWNlcz1yLHRoaXMuX251bWJlck9mVmVydGljYWxMaW5lcz1pLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDeWxpbmRlck91dGxpbmVHZW9tZXRyeSJ9dmFyIHNfLGdjLGNfLGNPPVooKCk9PntQZSgpO3plKCk7VXQoKTtZdCgpO0RlKCk7dF8oKTtJdCgpO2F0KCk7SHQoKTtYZSgpO1llKCk7YW4oKTtGbygpOyRlKCk7dG4oKTtzXz1uZXcgbnQ7RWEucGFja2VkTGVuZ3RoPTY7RWEucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49eChuLDApLGVbbisrXT10Ll9sZW5ndGgsZVtuKytdPXQuX3RvcFJhZGl1cyxlW24rK109dC5fYm90dG9tUmFkaXVzLGVbbisrXT10Ll9zbGljZXMsZVtuKytdPXQuX251bWJlck9mVmVydGljYWxMaW5lcyxlW25dPXgodC5fb2Zmc2V0QXR0cmlidXRlLC0xKSxlfTtnYz17bGVuZ3RoOnZvaWQgMCx0b3BSYWRpdXM6dm9pZCAwLGJvdHRvbVJhZGl1czp2b2lkIDAsc2xpY2VzOnZvaWQgMCxudW1iZXJPZlZlcnRpY2FsTGluZXM6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O0VhLnVucGFjaz1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJhcnJheSIsdCksZT14KGUsMCk7bGV0IG89dFtlKytdLHI9dFtlKytdLGk9dFtlKytdLHM9dFtlKytdLGY9dFtlKytdLHU9dFtlXTtyZXR1cm4gaChuKT8obi5fbGVuZ3RoPW8sbi5fdG9wUmFkaXVzPXIsbi5fYm90dG9tUmFkaXVzPWksbi5fc2xpY2VzPXMsbi5fbnVtYmVyT2ZWZXJ0aWNhbExpbmVzPWYsbi5fb2Zmc2V0QXR0cmlidXRlPXU9PT0tMT92b2lkIDA6dSxuKTooZ2MubGVuZ3RoPW8sZ2MudG9wUmFkaXVzPXIsZ2MuYm90dG9tUmFkaXVzPWksZ2Muc2xpY2VzPXMsZ2MubnVtYmVyT2ZWZXJ0aWNhbExpbmVzPWYsZ2Mub2Zmc2V0QXR0cmlidXRlPXU9PT0tMT92b2lkIDA6dSxuZXcgRWEoZ2MpKX07RWEuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fbGVuZ3RoLG49dC5fdG9wUmFkaXVzLG89dC5fYm90dG9tUmFkaXVzLHI9dC5fc2xpY2VzLGk9dC5fbnVtYmVyT2ZWZXJ0aWNhbExpbmVzO2lmKGU8PTB8fG48MHx8bzwwfHxuPT09MCYmbz09PTApcmV0dXJuO2xldCBzPXIqMixmPWdkLmNvbXB1dGVQb3NpdGlvbnMoZSxuLG8sciwhMSksdT1yKjIsYztpZihpPjApe2xldCBnPU1hdGgubWluKGkscik7Yz1NYXRoLnJvdW5kKHIvZyksdSs9Z31sZXQgbD1EdC5jcmVhdGVUeXBlZEFycmF5KHMsdSoyKSxwPTAsZDtmb3IoZD0wO2Q8ci0xO2QrKylsW3ArK109ZCxsW3ArK109ZCsxLGxbcCsrXT1kK3IsbFtwKytdPWQrMStyO2lmKGxbcCsrXT1yLTEsbFtwKytdPTAsbFtwKytdPXIrci0xLGxbcCsrXT1yLGk+MClmb3IoZD0wO2Q8cjtkKz1jKWxbcCsrXT1kLGxbcCsrXT1kK3I7bGV0IG09bmV3IHJlO20ucG9zaXRpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpmfSksc18ueD1lKi41LHNfLnk9TWF0aC5tYXgobyxuKTtsZXQgXz1uZXcgeXQoYS5aRVJPLG50Lm1hZ25pdHVkZShzXykpO2lmKGgodC5fb2Zmc2V0QXR0cmlidXRlKSl7ZT1mLmxlbmd0aDtsZXQgZz10Ll9vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MSxiPW5ldyBVaW50OEFycmF5KGUvMykuZmlsbChnKTttLmFwcGx5T2Zmc2V0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOmJ9KX1yZXR1cm4gbmV3IEZ0KHthdHRyaWJ1dGVzOm0saW5kaWNlczpsLHByaW1pdGl2ZVR5cGU6THQuTElORVMsYm91bmRpbmdTcGhlcmU6XyxvZmZzZXRBdHRyaWJ1dGU6dC5fb2Zmc2V0QXR0cmlidXRlfSl9O2NfPUVhfSk7dmFyIGFfPXt9O21lKGFfLHtkZWZhdWx0OigpPT5zRH0pO2Z1bmN0aW9uIGlEKHQsZSl7cmV0dXJuIGgoZSkmJih0PWNfLnVucGFjayh0LGUpKSxjXy5jcmVhdGVHZW9tZXRyeSh0KX12YXIgc0QsZl89WigoKT0+e2NPKCk7YXQoKTtzRD1pRH0pO3ZhciB1Xz17fTttZSh1Xyx7ZGVmYXVsdDooKT0+YUR9KTtmdW5jdGlvbiBjRCh0LGUpe3JldHVybiBoKGUpJiYodD1Hci51bnBhY2sodCxlKSksdC5fY2VudGVyPWEuY2xvbmUodC5fY2VudGVyKSx0Ll9lbGxpcHNvaWQ9JC5jbG9uZSh0Ll9lbGxpcHNvaWQpLEdyLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBhRCxsXz1aKCgpPT57VXQoKTthdCgpO3AwKCk7WnQoKTthRD1jRH0pO3ZhciBwXz17fTttZShwXyx7ZGVmYXVsdDooKT0+dUR9KTtmdW5jdGlvbiBmRCh0LGUpe3JldHVybiBoKGUpJiYodD16ci51bnBhY2sodCxlKSksdC5fY2VudGVyPWEuY2xvbmUodC5fY2VudGVyKSx0Ll9lbGxpcHNvaWQ9JC5jbG9uZSh0Ll9lbGxpcHNvaWQpLHpyLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciB1RCxkXz1aKCgpPT57VXQoKTthdCgpO18wKCk7WnQoKTt1RD1mRH0pO2Z1bmN0aW9uIEdpKHQpe3Q9eCh0LHguRU1QVFlfT0JKRUNUKTtsZXQgZT14KHQucmFkaWksX0QpLG49eCh0LmlubmVyUmFkaWksZSksbz14KHQubWluaW11bUNsb2NrLDApLHI9eCh0Lm1heGltdW1DbG9jayxNLlRXT19QSSksaT14KHQubWluaW11bUNvbmUsMCkscz14KHQubWF4aW11bUNvbmUsTS5QSSksZj1NYXRoLnJvdW5kKHgodC5zdGFja1BhcnRpdGlvbnMsNjQpKSx1PU1hdGgucm91bmQoeCh0LnNsaWNlUGFydGl0aW9ucyw2NCkpLGM9eCh0LnZlcnRleEZvcm1hdCxsdC5ERUZBVUxUKTtpZih1PDMpdGhyb3cgbmV3IEIoIm9wdGlvbnMuc2xpY2VQYXJ0aXRpb25zIGNhbm5vdCBiZSBsZXNzIHRoYW4gdGhyZWUuIik7aWYoZjwzKXRocm93IG5ldyBCKCJvcHRpb25zLnN0YWNrUGFydGl0aW9ucyBjYW5ub3QgYmUgbGVzcyB0aGFuIHRocmVlLiIpO3RoaXMuX3JhZGlpPWEuY2xvbmUoZSksdGhpcy5faW5uZXJSYWRpaT1hLmNsb25lKG4pLHRoaXMuX21pbmltdW1DbG9jaz1vLHRoaXMuX21heGltdW1DbG9jaz1yLHRoaXMuX21pbmltdW1Db25lPWksdGhpcy5fbWF4aW11bUNvbmU9cyx0aGlzLl9zdGFja1BhcnRpdGlvbnM9Zix0aGlzLl9zbGljZVBhcnRpdGlvbnM9dSx0aGlzLl92ZXJ0ZXhGb3JtYXQ9bHQuY2xvbmUoYyksdGhpcy5fb2Zmc2V0QXR0cmlidXRlPXQub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUVsbGlwc29pZEdlb21ldHJ5In12YXIgbEQscEQsZEQsbUQsaEQsX0QsYU8sZk8sdU8sbE8scE8sX3MsbV8sY3IsQWQ9WigoKT0+e1BlKCk7emUoKTtVdCgpO0RlKCk7SXQoKTthdCgpO0h0KCk7WnQoKTtYZSgpO1llKCk7YW4oKTtGbygpOyRlKCk7V3QoKTt0bigpO1JvKCk7bEQ9bmV3IGEscEQ9bmV3IGEsZEQ9bmV3IGEsbUQ9bmV3IGEsaEQ9bmV3IGEsX0Q9bmV3IGEoMSwxLDEpLGFPPU1hdGguY29zLGZPPU1hdGguc2luO0dpLnBhY2tlZExlbmd0aD0yKmEucGFja2VkTGVuZ3RoK2x0LnBhY2tlZExlbmd0aCs3O0dpLnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBCKCJ2YWx1ZSBpcyByZXF1aXJlZCIpO2lmKCFoKGUpKXRocm93IG5ldyBCKCJhcnJheSBpcyByZXF1aXJlZCIpO3JldHVybiBuPXgobiwwKSxhLnBhY2sodC5fcmFkaWksZSxuKSxuKz1hLnBhY2tlZExlbmd0aCxhLnBhY2sodC5faW5uZXJSYWRpaSxlLG4pLG4rPWEucGFja2VkTGVuZ3RoLGx0LnBhY2sodC5fdmVydGV4Rm9ybWF0LGUsbiksbis9bHQucGFja2VkTGVuZ3RoLGVbbisrXT10Ll9taW5pbXVtQ2xvY2ssZVtuKytdPXQuX21heGltdW1DbG9jayxlW24rK109dC5fbWluaW11bUNvbmUsZVtuKytdPXQuX21heGltdW1Db25lLGVbbisrXT10Ll9zdGFja1BhcnRpdGlvbnMsZVtuKytdPXQuX3NsaWNlUGFydGl0aW9ucyxlW25dPXgodC5fb2Zmc2V0QXR0cmlidXRlLC0xKSxlfTt1Tz1uZXcgYSxsTz1uZXcgYSxwTz1uZXcgbHQsX3M9e3JhZGlpOnVPLGlubmVyUmFkaWk6bE8sdmVydGV4Rm9ybWF0OnBPLG1pbmltdW1DbG9jazp2b2lkIDAsbWF4aW11bUNsb2NrOnZvaWQgMCxtaW5pbXVtQ29uZTp2b2lkIDAsbWF4aW11bUNvbmU6dm9pZCAwLHN0YWNrUGFydGl0aW9uczp2b2lkIDAsc2xpY2VQYXJ0aXRpb25zOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtHaS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBCKCJhcnJheSBpcyByZXF1aXJlZCIpO2U9eChlLDApO2xldCBvPWEudW5wYWNrKHQsZSx1Tyk7ZSs9YS5wYWNrZWRMZW5ndGg7bGV0IHI9YS51bnBhY2sodCxlLGxPKTtlKz1hLnBhY2tlZExlbmd0aDtsZXQgaT1sdC51bnBhY2sodCxlLHBPKTtlKz1sdC5wYWNrZWRMZW5ndGg7bGV0IHM9dFtlKytdLGY9dFtlKytdLHU9dFtlKytdLGM9dFtlKytdLGw9dFtlKytdLHA9dFtlKytdLGQ9dFtlXTtyZXR1cm4gaChuKT8obi5fcmFkaWk9YS5jbG9uZShvLG4uX3JhZGlpKSxuLl9pbm5lclJhZGlpPWEuY2xvbmUocixuLl9pbm5lclJhZGlpKSxuLl92ZXJ0ZXhGb3JtYXQ9bHQuY2xvbmUoaSxuLl92ZXJ0ZXhGb3JtYXQpLG4uX21pbmltdW1DbG9jaz1zLG4uX21heGltdW1DbG9jaz1mLG4uX21pbmltdW1Db25lPXUsbi5fbWF4aW11bUNvbmU9YyxuLl9zdGFja1BhcnRpdGlvbnM9bCxuLl9zbGljZVBhcnRpdGlvbnM9cCxuLl9vZmZzZXRBdHRyaWJ1dGU9ZD09PS0xP3ZvaWQgMDpkLG4pOihfcy5taW5pbXVtQ2xvY2s9cyxfcy5tYXhpbXVtQ2xvY2s9Zixfcy5taW5pbXVtQ29uZT11LF9zLm1heGltdW1Db25lPWMsX3Muc3RhY2tQYXJ0aXRpb25zPWwsX3Muc2xpY2VQYXJ0aXRpb25zPXAsX3Mub2Zmc2V0QXR0cmlidXRlPWQ9PT0tMT92b2lkIDA6ZCxuZXcgR2koX3MpKX07R2kuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fcmFkaWk7aWYoZS54PD0wfHxlLnk8PTB8fGUuejw9MClyZXR1cm47bGV0IG49dC5faW5uZXJSYWRpaTtpZihuLng8PTB8fG4ueTw9MHx8bi56PD0wKXJldHVybjtsZXQgbz10Ll9taW5pbXVtQ2xvY2sscj10Ll9tYXhpbXVtQ2xvY2ssaT10Ll9taW5pbXVtQ29uZSxzPXQuX21heGltdW1Db25lLGY9dC5fdmVydGV4Rm9ybWF0LHU9dC5fc2xpY2VQYXJ0aXRpb25zKzEsYz10Ll9zdGFja1BhcnRpdGlvbnMrMTt1PU1hdGgucm91bmQodSpNYXRoLmFicyhyLW8pL00uVFdPX1BJKSxjPU1hdGgucm91bmQoYypNYXRoLmFicyhzLWkpL00uUEkpLHU8MiYmKHU9MiksYzwyJiYoYz0yKTtsZXQgbCxwLGQ9MCxtPVtpXSxfPVtvXTtmb3IobD0wO2w8YztsKyspbS5wdXNoKGkrbCoocy1pKS8oYy0xKSk7Zm9yKG0ucHVzaChzKSxwPTA7cDx1O3ArKylfLnB1c2gobytwKihyLW8pLyh1LTEpKTtfLnB1c2gocik7bGV0IGc9bS5sZW5ndGgsYj1fLmxlbmd0aCxPPTAsVD0xLEU9bi54IT09ZS54fHxuLnkhPT1lLnl8fG4ueiE9PWUueix3PSExLEM9ITEsTj0hMTtFJiYoVD0yLGk+MCYmKHc9ITAsTys9dS0xKSxzPE1hdGguUEkmJihDPSEwLE8rPXUtMSksKHItbyklTS5UV09fUEk/KE49ITAsTys9KGMtMSkqMisxKTpPKz0xKTtsZXQgST1iKmcqVCxMPW5ldyBGbG9hdDY0QXJyYXkoSSozKSx2PW5ldyBBcnJheShJKS5maWxsKCExKSxEPW5ldyBBcnJheShJKS5maWxsKCExKSxVPXUqYypULEE9NiooVStPKzEtKHUrYykqVCksUz1EdC5jcmVhdGVUeXBlZEFycmF5KFUsQSksUD1mLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KEkqMyk6dm9pZCAwLEY9Zi50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoSSozKTp2b2lkIDAsaj1mLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KEkqMyk6dm9pZCAwLEg9Zi5zdD9uZXcgRmxvYXQzMkFycmF5KEkqMik6dm9pZCAwLGs9bmV3IEFycmF5KGcpLEs9bmV3IEFycmF5KGcpO2ZvcihsPTA7bDxnO2wrKylrW2xdPWZPKG1bbF0pLEtbbF09YU8obVtsXSk7bGV0IFg9bmV3IEFycmF5KGIpLFI9bmV3IEFycmF5KGIpO2ZvcihwPTA7cDxiO3ArKylSW3BdPWFPKF9bcF0pLFhbcF09Zk8oX1twXSk7Zm9yKGw9MDtsPGc7bCsrKWZvcihwPTA7cDxiO3ArKylMW2QrK109ZS54KmtbbF0qUltwXSxMW2QrK109ZS55KmtbbF0qWFtwXSxMW2QrK109ZS56KktbbF07bGV0IFE9SS8yO2lmKEUpZm9yKGw9MDtsPGc7bCsrKWZvcihwPTA7cDxiO3ArKylMW2QrK109bi54KmtbbF0qUltwXSxMW2QrK109bi55KmtbbF0qWFtwXSxMW2QrK109bi56KktbbF0sdltRXT0hMCxsPjAmJmwhPT1nLTEmJnAhPT0wJiZwIT09Yi0xJiYoRFtRXT0hMCksUSsrO2Q9MDtsZXQgZnQscHQ7Zm9yKGw9MTtsPGctMjtsKyspZm9yKGZ0PWwqYixwdD0obCsxKSpiLHA9MTtwPGItMjtwKyspU1tkKytdPXB0K3AsU1tkKytdPXB0K3ArMSxTW2QrK109ZnQrcCsxLFNbZCsrXT1wdCtwLFNbZCsrXT1mdCtwKzEsU1tkKytdPWZ0K3A7aWYoRSl7bGV0IHBlPWcqYjtmb3IobD0xO2w8Zy0yO2wrKylmb3IoZnQ9cGUrbCpiLHB0PXBlKyhsKzEpKmIscD0xO3A8Yi0yO3ArKylTW2QrK109cHQrcCxTW2QrK109ZnQrcCxTW2QrK109ZnQrcCsxLFNbZCsrXT1wdCtwLFNbZCsrXT1mdCtwKzEsU1tkKytdPXB0K3ArMX1sZXQgZ3QsaXQ7aWYoRSl7aWYodylmb3IoaXQ9ZypiLGw9MTtsPGItMjtsKyspU1tkKytdPWwsU1tkKytdPWwrMSxTW2QrK109aXQrbCsxLFNbZCsrXT1sLFNbZCsrXT1pdCtsKzEsU1tkKytdPWl0K2w7aWYoQylmb3IoZ3Q9ZypiLWIsaXQ9ZypiKlQtYixsPTE7bDxiLTI7bCsrKVNbZCsrXT1ndCtsKzEsU1tkKytdPWd0K2wsU1tkKytdPWl0K2wsU1tkKytdPWd0K2wrMSxTW2QrK109aXQrbCxTW2QrK109aXQrbCsxfWlmKE4pe2ZvcihsPTE7bDxnLTI7bCsrKWl0PWIqZytiKmwsZ3Q9YipsLFNbZCsrXT1pdCxTW2QrK109Z3QrYixTW2QrK109Z3QsU1tkKytdPWl0LFNbZCsrXT1pdCtiLFNbZCsrXT1ndCtiO2ZvcihsPTE7bDxnLTI7bCsrKWl0PWIqZytiKihsKzEpLTEsZ3Q9YioobCsxKS0xLFNbZCsrXT1ndCtiLFNbZCsrXT1pdCxTW2QrK109Z3QsU1tkKytdPWd0K2IsU1tkKytdPWl0K2IsU1tkKytdPWl0fWxldCBOdD1uZXcgcmU7Zi5wb3NpdGlvbiYmKE50LnBvc2l0aW9uPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6TH0pKTtsZXQgT3Q9MCx4dD0wLF90PTAsZHQ9MCxWdD1JLzIsenQsaGU9JC5mcm9tQ2FydGVzaWFuMyhlKSxjZT0kLmZyb21DYXJ0ZXNpYW4zKG4pO2lmKGYuc3R8fGYubm9ybWFsfHxmLnRhbmdlbnR8fGYuYml0YW5nZW50KXtmb3IobD0wO2w8STtsKyspe3p0PXZbbF0/Y2U6aGU7bGV0IHBlPWEuZnJvbUFycmF5KEwsbCozLGxEKSxmZT16dC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwocGUscEQpO2lmKERbbF0mJmEubmVnYXRlKGZlLGZlKSxmLnN0KXtsZXQgUXQ9bnQubmVnYXRlKGZlLGhEKTtIW090KytdPU1hdGguYXRhbjIoUXQueSxRdC54KS9NLlRXT19QSSsuNSxIW090KytdPU1hdGguYXNpbihmZS56KS9NYXRoLlBJKy41fWlmKGYubm9ybWFsJiYoUFt4dCsrXT1mZS54LFBbeHQrK109ZmUueSxQW3h0KytdPWZlLnopLGYudGFuZ2VudHx8Zi5iaXRhbmdlbnQpe2xldCBRdD1kRCxKdD0wLHhlO2lmKHZbbF0mJihKdD1WdCksIXcmJmw+PUp0JiZsPEp0K2IqMj94ZT1hLlVOSVRfWDp4ZT1hLlVOSVRfWixhLmNyb3NzKHhlLGZlLFF0KSxhLm5vcm1hbGl6ZShRdCxRdCksZi50YW5nZW50JiYoRltfdCsrXT1RdC54LEZbX3QrK109UXQueSxGW190KytdPVF0LnopLGYuYml0YW5nZW50KXtsZXQgQWU9YS5jcm9zcyhmZSxRdCxtRCk7YS5ub3JtYWxpemUoQWUsQWUpLGpbZHQrK109QWUueCxqW2R0KytdPUFlLnksaltkdCsrXT1BZS56fX19Zi5zdCYmKE50LnN0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpIfSkpLGYubm9ybWFsJiYoTnQubm9ybWFsPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpQfSkpLGYudGFuZ2VudCYmKE50LnRhbmdlbnQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOkZ9KSksZi5iaXRhbmdlbnQmJihOdC5iaXRhbmdlbnQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmp9KSl9aWYoaCh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgcGU9TC5sZW5ndGgsZmU9dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjEsUXQ9bmV3IFVpbnQ4QXJyYXkocGUvMykuZmlsbChmZSk7TnQuYXBwbHlPZmZzZXQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6UXR9KX1yZXR1cm4gbmV3IEZ0KHthdHRyaWJ1dGVzOk50LGluZGljZXM6UyxwcmltaXRpdmVUeXBlOkx0LlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTp5dC5mcm9tRWxsaXBzb2lkKGhlKSxvZmZzZXRBdHRyaWJ1dGU6dC5fb2Zmc2V0QXR0cmlidXRlfSl9O0dpLmdldFVuaXRFbGxpcHNvaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gaChtXyl8fChtXz1HaS5jcmVhdGVHZW9tZXRyeShuZXcgR2koe3JhZGlpOm5ldyBhKDEsMSwxKSx2ZXJ0ZXhGb3JtYXQ6bHQuUE9TSVRJT05fT05MWX0pKSksbV99O2NyPUdpfSk7dmFyIGhfPXt9O21lKGhfLHtkZWZhdWx0OigpPT5nRH0pO2Z1bmN0aW9uIHlEKHQsZSl7cmV0dXJuIGgoZSkmJih0PWNyLnVucGFjayh0LGUpKSxjci5jcmVhdGVHZW9tZXRyeSh0KX12YXIgZ0QsX189WigoKT0+e2F0KCk7QWQoKTtnRD15RH0pO2Z1bmN0aW9uIFJhKHQpe3Q9eCh0LHguRU1QVFlfT0JKRUNUKTtsZXQgZT14KHQucmFkaWksQUQpLG49eCh0LmlubmVyUmFkaWksZSksbz14KHQubWluaW11bUNsb2NrLDApLHI9eCh0Lm1heGltdW1DbG9jayxNLlRXT19QSSksaT14KHQubWluaW11bUNvbmUsMCkscz14KHQubWF4aW11bUNvbmUsTS5QSSksZj1NYXRoLnJvdW5kKHgodC5zdGFja1BhcnRpdGlvbnMsMTApKSx1PU1hdGgucm91bmQoeCh0LnNsaWNlUGFydGl0aW9ucyw4KSksYz1NYXRoLnJvdW5kKHgodC5zdWJkaXZpc2lvbnMsMTI4KSk7aWYoZjwxKXRocm93IG5ldyBCKCJvcHRpb25zLnN0YWNrUGFydGl0aW9ucyBjYW5ub3QgYmUgbGVzcyB0aGFuIDEiKTtpZih1PDApdGhyb3cgbmV3IEIoIm9wdGlvbnMuc2xpY2VQYXJ0aXRpb25zIGNhbm5vdCBiZSBsZXNzIHRoYW4gMCIpO2lmKGM8MCl0aHJvdyBuZXcgQigib3B0aW9ucy5zdWJkaXZpc2lvbnMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4iKTtpZihoKHQub2Zmc2V0QXR0cmlidXRlKSYmdC5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5UT1ApdGhyb3cgbmV3IEIoIkdlb21ldHJ5T2Zmc2V0QXR0cmlidXRlLlRPUCBpcyBub3QgYSBzdXBwb3J0ZWQgb3B0aW9ucy5vZmZzZXRBdHRyaWJ1dGUgZm9yIHRoaXMgZ2VvbWV0cnkuIik7dGhpcy5fcmFkaWk9YS5jbG9uZShlKSx0aGlzLl9pbm5lclJhZGlpPWEuY2xvbmUobiksdGhpcy5fbWluaW11bUNsb2NrPW8sdGhpcy5fbWF4aW11bUNsb2NrPXIsdGhpcy5fbWluaW11bUNvbmU9aSx0aGlzLl9tYXhpbXVtQ29uZT1zLHRoaXMuX3N0YWNrUGFydGl0aW9ucz1mLHRoaXMuX3NsaWNlUGFydGl0aW9ucz11LHRoaXMuX3N1YmRpdmlzaW9ucz1jLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVFbGxpcHNvaWRPdXRsaW5lR2VvbWV0cnkifXZhciBBRCxiZCx3ZCxkTyxtTyx6aSxXcix5Xz1aKCgpPT57UGUoKTtVdCgpO0RlKCk7SXQoKTthdCgpO0h0KCk7WnQoKTtYZSgpO1llKCk7YW4oKTtGbygpOyRlKCk7V3QoKTt0bigpO0FEPW5ldyBhKDEsMSwxKSxiZD1NYXRoLmNvcyx3ZD1NYXRoLnNpbjtSYS5wYWNrZWRMZW5ndGg9MiphLnBhY2tlZExlbmd0aCs4O1JhLnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBCKCJ2YWx1ZSBpcyByZXF1aXJlZCIpO2lmKCFoKGUpKXRocm93IG5ldyBCKCJhcnJheSBpcyByZXF1aXJlZCIpO3JldHVybiBuPXgobiwwKSxhLnBhY2sodC5fcmFkaWksZSxuKSxuKz1hLnBhY2tlZExlbmd0aCxhLnBhY2sodC5faW5uZXJSYWRpaSxlLG4pLG4rPWEucGFja2VkTGVuZ3RoLGVbbisrXT10Ll9taW5pbXVtQ2xvY2ssZVtuKytdPXQuX21heGltdW1DbG9jayxlW24rK109dC5fbWluaW11bUNvbmUsZVtuKytdPXQuX21heGltdW1Db25lLGVbbisrXT10Ll9zdGFja1BhcnRpdGlvbnMsZVtuKytdPXQuX3NsaWNlUGFydGl0aW9ucyxlW24rK109dC5fc3ViZGl2aXNpb25zLGVbbl09eCh0Ll9vZmZzZXRBdHRyaWJ1dGUsLTEpLGV9O2RPPW5ldyBhLG1PPW5ldyBhLHppPXtyYWRpaTpkTyxpbm5lclJhZGlpOm1PLG1pbmltdW1DbG9jazp2b2lkIDAsbWF4aW11bUNsb2NrOnZvaWQgMCxtaW5pbXVtQ29uZTp2b2lkIDAsbWF4aW11bUNvbmU6dm9pZCAwLHN0YWNrUGFydGl0aW9uczp2b2lkIDAsc2xpY2VQYXJ0aXRpb25zOnZvaWQgMCxzdWJkaXZpc2lvbnM6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O1JhLnVucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEIoImFycmF5IGlzIHJlcXVpcmVkIik7ZT14KGUsMCk7bGV0IG89YS51bnBhY2sodCxlLGRPKTtlKz1hLnBhY2tlZExlbmd0aDtsZXQgcj1hLnVucGFjayh0LGUsbU8pO2UrPWEucGFja2VkTGVuZ3RoO2xldCBpPXRbZSsrXSxzPXRbZSsrXSxmPXRbZSsrXSx1PXRbZSsrXSxjPXRbZSsrXSxsPXRbZSsrXSxwPXRbZSsrXSxkPXRbZV07cmV0dXJuIGgobik/KG4uX3JhZGlpPWEuY2xvbmUobyxuLl9yYWRpaSksbi5faW5uZXJSYWRpaT1hLmNsb25lKHIsbi5faW5uZXJSYWRpaSksbi5fbWluaW11bUNsb2NrPWksbi5fbWF4aW11bUNsb2NrPXMsbi5fbWluaW11bUNvbmU9ZixuLl9tYXhpbXVtQ29uZT11LG4uX3N0YWNrUGFydGl0aW9ucz1jLG4uX3NsaWNlUGFydGl0aW9ucz1sLG4uX3N1YmRpdmlzaW9ucz1wLG4uX29mZnNldEF0dHJpYnV0ZT1kPT09LTE/dm9pZCAwOmQsbik6KHppLm1pbmltdW1DbG9jaz1pLHppLm1heGltdW1DbG9jaz1zLHppLm1pbmltdW1Db25lPWYsemkubWF4aW11bUNvbmU9dSx6aS5zdGFja1BhcnRpdGlvbnM9Yyx6aS5zbGljZVBhcnRpdGlvbnM9bCx6aS5zdWJkaXZpc2lvbnM9cCx6aS5vZmZzZXRBdHRyaWJ1dGU9ZD09PS0xP3ZvaWQgMDpkLG5ldyBSYSh6aSkpfTtSYS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll9yYWRpaTtpZihlLng8PTB8fGUueTw9MHx8ZS56PD0wKXJldHVybjtsZXQgbj10Ll9pbm5lclJhZGlpO2lmKG4ueDw9MHx8bi55PD0wfHxuLno8PTApcmV0dXJuO2xldCBvPXQuX21pbmltdW1DbG9jayxyPXQuX21heGltdW1DbG9jayxpPXQuX21pbmltdW1Db25lLHM9dC5fbWF4aW11bUNvbmUsZj10Ll9zdWJkaXZpc2lvbnMsdT0kLmZyb21DYXJ0ZXNpYW4zKGUpLGM9dC5fc2xpY2VQYXJ0aXRpb25zKzEsbD10Ll9zdGFja1BhcnRpdGlvbnMrMTtjPU1hdGgucm91bmQoYypNYXRoLmFicyhyLW8pL00uVFdPX1BJKSxsPU1hdGgucm91bmQobCpNYXRoLmFicyhzLWkpL00uUEkpLGM8MiYmKGM9MiksbDwyJiYobD0yKTtsZXQgcD0wLGQ9MSxtPW4ueCE9PWUueHx8bi55IT09ZS55fHxuLnohPT1lLnosXz0hMSxnPSExO20mJihkPTIsaT4wJiYoXz0hMCxwKz1jKSxzPE1hdGguUEkmJihnPSEwLHArPWMpKTtsZXQgYj1mKmQqKGwrYyksTz1uZXcgRmxvYXQ2NEFycmF5KGIqMyksVD0yKihiK3AtKGMrbCkqZCksRT1EdC5jcmVhdGVUeXBlZEFycmF5KGIsVCksdyxDLE4sSSxMPTAsdj1uZXcgQXJyYXkobCksRD1uZXcgQXJyYXkobCk7Zm9yKHc9MDt3PGw7dysrKUk9aSt3KihzLWkpLyhsLTEpLHZbd109d2QoSSksRFt3XT1iZChJKTtsZXQgVT1uZXcgQXJyYXkoZiksQT1uZXcgQXJyYXkoZik7Zm9yKHc9MDt3PGY7dysrKU49byt3KihyLW8pLyhmLTEpLFVbd109d2QoTiksQVt3XT1iZChOKTtmb3Iodz0wO3c8bDt3KyspZm9yKEM9MDtDPGY7QysrKU9bTCsrXT1lLngqdlt3XSpBW0NdLE9bTCsrXT1lLnkqdlt3XSpVW0NdLE9bTCsrXT1lLnoqRFt3XTtpZihtKWZvcih3PTA7dzxsO3crKylmb3IoQz0wO0M8ZjtDKyspT1tMKytdPW4ueCp2W3ddKkFbQ10sT1tMKytdPW4ueSp2W3ddKlVbQ10sT1tMKytdPW4ueipEW3ddO2Zvcih2Lmxlbmd0aD1mLEQubGVuZ3RoPWYsdz0wO3c8Zjt3KyspST1pK3cqKHMtaSkvKGYtMSksdlt3XT13ZChJKSxEW3ddPWJkKEkpO2ZvcihVLmxlbmd0aD1jLEEubGVuZ3RoPWMsdz0wO3c8Yzt3KyspTj1vK3cqKHItbykvKGMtMSksVVt3XT13ZChOKSxBW3ddPWJkKE4pO2Zvcih3PTA7dzxmO3crKylmb3IoQz0wO0M8YztDKyspT1tMKytdPWUueCp2W3ddKkFbQ10sT1tMKytdPWUueSp2W3ddKlVbQ10sT1tMKytdPWUueipEW3ddO2lmKG0pZm9yKHc9MDt3PGY7dysrKWZvcihDPTA7QzxjO0MrKylPW0wrK109bi54KnZbd10qQVtDXSxPW0wrK109bi55KnZbd10qVVtDXSxPW0wrK109bi56KkRbd107Zm9yKEw9MCx3PTA7dzxsKmQ7dysrKXtsZXQgRj13KmY7Zm9yKEM9MDtDPGYtMTtDKyspRVtMKytdPUYrQyxFW0wrK109RitDKzF9bGV0IFM9bCpmKmQ7Zm9yKHc9MDt3PGM7dysrKWZvcihDPTA7QzxmLTE7QysrKUVbTCsrXT1TK3crQypjLEVbTCsrXT1TK3crKEMrMSkqYztpZihtKWZvcihTPWwqZipkK2MqZix3PTA7dzxjO3crKylmb3IoQz0wO0M8Zi0xO0MrKylFW0wrK109Uyt3K0MqYyxFW0wrK109Uyt3KyhDKzEpKmM7aWYobSl7bGV0IEY9bCpmKmQsaj1GK2YqYztpZihfKWZvcih3PTA7dzxjO3crKylFW0wrK109Rit3LEVbTCsrXT1qK3c7aWYoZylmb3IoRis9ZipjLWMsais9ZipjLWMsdz0wO3c8Yzt3KyspRVtMKytdPUYrdyxFW0wrK109ait3fWxldCBQPW5ldyByZSh7cG9zaXRpb246bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpPfSl9KTtpZihoKHQuX29mZnNldEF0dHJpYnV0ZSkpe2xldCBGPU8ubGVuZ3RoLGo9dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjEsSD1uZXcgVWludDhBcnJheShGLzMpLmZpbGwoaik7UC5hcHBseU9mZnNldD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpIfSl9cmV0dXJuIG5ldyBGdCh7YXR0cmlidXRlczpQLGluZGljZXM6RSxwcmltaXRpdmVUeXBlOkx0LkxJTkVTLGJvdW5kaW5nU3BoZXJlOnl0LmZyb21FbGxpcHNvaWQodSksb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTtXcj1SYX0pO3ZhciBnXz17fTttZShnXyx7ZGVmYXVsdDooKT0+d0R9KTtmdW5jdGlvbiBiRCh0LGUpe3JldHVybiBoKHQuYnVmZmVyLGUpJiYodD1Xci51bnBhY2sodCxlKSksV3IuY3JlYXRlR2VvbWV0cnkodCl9dmFyIHdELEFfPVooKCk9PnthdCgpO3lfKCk7d0Q9YkR9KTtmdW5jdGlvbiBFcih0KXt0aGlzLnBsYW5lcz14KHQsW10pfXZhciBxZix5cyxURCxoTyxUZCxiXz1aKCgpPT57VXQoKTtocigpO0l0KCk7YXQoKTtIdCgpO1ZzKCk7Y3MoKTtxZj1bbmV3IGEsbmV3IGEsbmV3IGFdO2EuY2xvbmUoYS5VTklUX1gscWZbMF0pO2EuY2xvbmUoYS5VTklUX1kscWZbMV0pO2EuY2xvbmUoYS5VTklUX1oscWZbMl0pO3lzPW5ldyBhLFREPW5ldyBhLGhPPW5ldyBvbihuZXcgYSgxLDAsMCksMCk7RXIuZnJvbUJvdW5kaW5nU3BoZXJlPWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEIoImJvdW5kaW5nU3BoZXJlIGlzIHJlcXVpcmVkLiIpO2goZSl8fChlPW5ldyBFcik7bGV0IG49cWYubGVuZ3RoLG89ZS5wbGFuZXM7by5sZW5ndGg9MipuO2xldCByPXQuY2VudGVyLGk9dC5yYWRpdXMscz0wO2ZvcihsZXQgZj0wO2Y8bjsrK2Ype2xldCB1PXFmW2ZdLGM9b1tzXSxsPW9bcysxXTtoKGMpfHwoYz1vW3NdPW5ldyBfZSksaChsKXx8KGw9b1tzKzFdPW5ldyBfZSksYS5tdWx0aXBseUJ5U2NhbGFyKHUsLWkseXMpLGEuYWRkKHIseXMseXMpLGMueD11LngsYy55PXUueSxjLno9dS56LGMudz0tYS5kb3QodSx5cyksYS5tdWx0aXBseUJ5U2NhbGFyKHUsaSx5cyksYS5hZGQocix5cyx5cyksbC54PS11LngsbC55PS11LnksbC56PS11LnosbC53PS1hLmRvdChhLm5lZ2F0ZSh1LFREKSx5cykscys9Mn1yZXR1cm4gZX07RXIucHJvdG90eXBlLmNvbXB1dGVWaXNpYmlsaXR5PWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBCKCJib3VuZGluZ1ZvbHVtZSBpcyByZXF1aXJlZC4iKTtsZXQgZT10aGlzLnBsYW5lcyxuPSExO2ZvcihsZXQgbz0wLHI9ZS5sZW5ndGg7bzxyOysrbyl7bGV0IGk9dC5pbnRlcnNlY3RQbGFuZShvbi5mcm9tQ2FydGVzaWFuNChlW29dLGhPKSk7aWYoaT09PUVuLk9VVFNJREUpcmV0dXJuIEVuLk9VVFNJREU7aT09PUVuLklOVEVSU0VDVElORyYmKG49ITApfXJldHVybiBuP0VuLklOVEVSU0VDVElORzpFbi5JTlNJREV9O0VyLnByb3RvdHlwZS5jb21wdXRlVmlzaWJpbGl0eVdpdGhQbGFuZU1hc2s9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgQigiYm91bmRpbmdWb2x1bWUgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEIoInBhcmVudFBsYW5lTWFzayBpcyByZXF1aXJlZC4iKTtpZihlPT09RXIuTUFTS19PVVRTSURFfHxlPT09RXIuTUFTS19JTlNJREUpcmV0dXJuIGU7bGV0IG49RXIuTUFTS19JTlNJREUsbz10aGlzLnBsYW5lcztmb3IobGV0IHI9MCxpPW8ubGVuZ3RoO3I8aTsrK3Ipe2xldCBzPXI8MzE/MTw8cjowO2lmKHI8MzEmJiEoZSZzKSljb250aW51ZTtsZXQgZj10LmludGVyc2VjdFBsYW5lKG9uLmZyb21DYXJ0ZXNpYW40KG9bcl0saE8pKTtpZihmPT09RW4uT1VUU0lERSlyZXR1cm4gRXIuTUFTS19PVVRTSURFO2Y9PT1Fbi5JTlRFUlNFQ1RJTkcmJihufD1zKX1yZXR1cm4gbn07RXIuTUFTS19PVVRTSURFPTQyOTQ5NjcyOTU7RXIuTUFTS19JTlNJREU9MDtFci5NQVNLX0lOREVURVJNSU5BVEU9MjE0NzQ4MzY0NztUZD1Fcn0pO2Z1bmN0aW9uIGxpKHQpe3Q9eCh0LHguRU1QVFlfT0JKRUNUKSx0aGlzLmxlZnQ9dC5sZWZ0LHRoaXMuX2xlZnQ9dm9pZCAwLHRoaXMucmlnaHQ9dC5yaWdodCx0aGlzLl9yaWdodD12b2lkIDAsdGhpcy50b3A9dC50b3AsdGhpcy5fdG9wPXZvaWQgMCx0aGlzLmJvdHRvbT10LmJvdHRvbSx0aGlzLl9ib3R0b209dm9pZCAwLHRoaXMubmVhcj14KHQubmVhciwxKSx0aGlzLl9uZWFyPXRoaXMubmVhcix0aGlzLmZhcj14KHQuZmFyLDVlOCksdGhpcy5fZmFyPXRoaXMuZmFyLHRoaXMuX2N1bGxpbmdWb2x1bWU9bmV3IFRkLHRoaXMuX29ydGhvZ3JhcGhpY01hdHJpeD1uZXcgc3R9ZnVuY3Rpb24gX08odCl7aWYoIWgodC5yaWdodCl8fCFoKHQubGVmdCl8fCFoKHQudG9wKXx8IWgodC5ib3R0b20pfHwhaCh0Lm5lYXIpfHwhaCh0LmZhcikpdGhyb3cgbmV3IEIoInJpZ2h0LCBsZWZ0LCB0b3AsIGJvdHRvbSwgbmVhciwgb3IgZmFyIHBhcmFtZXRlcnMgYXJlIG5vdCBzZXQuIik7aWYodC50b3AhPT10Ll90b3B8fHQuYm90dG9tIT09dC5fYm90dG9tfHx0LmxlZnQhPT10Ll9sZWZ0fHx0LnJpZ2h0IT09dC5fcmlnaHR8fHQubmVhciE9PXQuX25lYXJ8fHQuZmFyIT09dC5fZmFyKXtpZih0LmxlZnQ+dC5yaWdodCl0aHJvdyBuZXcgQigicmlnaHQgbXVzdCBiZSBncmVhdGVyIHRoYW4gbGVmdC4iKTtpZih0LmJvdHRvbT50LnRvcCl0aHJvdyBuZXcgQigidG9wIG11c3QgYmUgZ3JlYXRlciB0aGFuIGJvdHRvbS4iKTtpZih0Lm5lYXI8PTB8fHQubmVhcj50LmZhcil0aHJvdyBuZXcgQigibmVhciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBsZXNzIHRoYW4gZmFyLiIpO3QuX2xlZnQ9dC5sZWZ0LHQuX3JpZ2h0PXQucmlnaHQsdC5fdG9wPXQudG9wLHQuX2JvdHRvbT10LmJvdHRvbSx0Ll9uZWFyPXQubmVhcix0Ll9mYXI9dC5mYXIsdC5fb3J0aG9ncmFwaGljTWF0cml4PXN0LmNvbXB1dGVPcnRob2dyYXBoaWNPZmZDZW50ZXIodC5sZWZ0LHQucmlnaHQsdC5ib3R0b20sdC50b3AsdC5uZWFyLHQuZmFyLHQuX29ydGhvZ3JhcGhpY01hdHJpeCl9fXZhciBPRCxFRCxSRCx3Xyx5TyxnTz1aKCgpPT57VXQoKTtocigpO2JfKCk7SXQoKTthdCgpO0h0KCk7V3QoKTtrbigpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGxpLnByb3RvdHlwZSx7cHJvamVjdGlvbk1hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF9PKHRoaXMpLHRoaXMuX29ydGhvZ3JhcGhpY01hdHJpeH19fSk7T0Q9bmV3IGEsRUQ9bmV3IGEsUkQ9bmV3IGEsd189bmV3IGE7bGkucHJvdG90eXBlLmNvbXB1dGVDdWxsaW5nVm9sdW1lPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgQigicG9zaXRpb24gaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEIoImRpcmVjdGlvbiBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgQigidXAgaXMgcmVxdWlyZWQuIik7bGV0IG89dGhpcy5fY3VsbGluZ1ZvbHVtZS5wbGFuZXMscj10aGlzLnRvcCxpPXRoaXMuYm90dG9tLHM9dGhpcy5yaWdodCxmPXRoaXMubGVmdCx1PXRoaXMubmVhcixjPXRoaXMuZmFyLGw9YS5jcm9zcyhlLG4sT0QpO2Eubm9ybWFsaXplKGwsbCk7bGV0IHA9RUQ7YS5tdWx0aXBseUJ5U2NhbGFyKGUsdSxwKSxhLmFkZCh0LHAscCk7bGV0IGQ9UkQ7YS5tdWx0aXBseUJ5U2NhbGFyKGwsZixkKSxhLmFkZChwLGQsZCk7bGV0IG09b1swXTtyZXR1cm4gaChtKXx8KG09b1swXT1uZXcgX2UpLG0ueD1sLngsbS55PWwueSxtLno9bC56LG0udz0tYS5kb3QobCxkKSxhLm11bHRpcGx5QnlTY2FsYXIobCxzLGQpLGEuYWRkKHAsZCxkKSxtPW9bMV0saChtKXx8KG09b1sxXT1uZXcgX2UpLG0ueD0tbC54LG0ueT0tbC55LG0uej0tbC56LG0udz0tYS5kb3QoYS5uZWdhdGUobCx3XyksZCksYS5tdWx0aXBseUJ5U2NhbGFyKG4saSxkKSxhLmFkZChwLGQsZCksbT1vWzJdLGgobSl8fChtPW9bMl09bmV3IF9lKSxtLng9bi54LG0ueT1uLnksbS56PW4ueixtLnc9LWEuZG90KG4sZCksYS5tdWx0aXBseUJ5U2NhbGFyKG4scixkKSxhLmFkZChwLGQsZCksbT1vWzNdLGgobSl8fChtPW9bM109bmV3IF9lKSxtLng9LW4ueCxtLnk9LW4ueSxtLno9LW4ueixtLnc9LWEuZG90KGEubmVnYXRlKG4sd18pLGQpLG09b1s0XSxoKG0pfHwobT1vWzRdPW5ldyBfZSksbS54PWUueCxtLnk9ZS55LG0uej1lLnosbS53PS1hLmRvdChlLHApLGEubXVsdGlwbHlCeVNjYWxhcihlLGMsZCksYS5hZGQodCxkLGQpLG09b1s1XSxoKG0pfHwobT1vWzVdPW5ldyBfZSksbS54PS1lLngsbS55PS1lLnksbS56PS1lLnosbS53PS1hLmRvdChhLm5lZ2F0ZShlLHdfKSxkKSx0aGlzLl9jdWxsaW5nVm9sdW1lfTtsaS5wcm90b3R5cGUuZ2V0UGl4ZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHQsZSxuLG8scil7aWYoX08odGhpcyksIWgodCl8fCFoKGUpKXRocm93IG5ldyBCKCJCb3RoIGRyYXdpbmdCdWZmZXJXaWR0aCBhbmQgZHJhd2luZ0J1ZmZlckhlaWdodCBhcmUgcmVxdWlyZWQuIik7aWYodDw9MCl0aHJvdyBuZXcgQigiZHJhd2luZ0J1ZmZlcldpZHRoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7aWYoZTw9MCl0aHJvdyBuZXcgQigiZHJhd2luZ0J1ZmZlckhlaWdodCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiIpO2lmKCFoKG4pKXRocm93IG5ldyBCKCJkaXN0YW5jZSBpcyByZXF1aXJlZC4iKTtpZighaChvKSl0aHJvdyBuZXcgQigicGl4ZWxSYXRpbyBpcyByZXF1aXJlZC4iKTtpZihvPD0wKXRocm93IG5ldyBCKCJwaXhlbFJhdGlvIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7aWYoIWgocikpdGhyb3cgbmV3IEIoIkEgcmVzdWx0IG9iamVjdCBpcyByZXF1aXJlZC4iKTtsZXQgaT10aGlzLnJpZ2h0LXRoaXMubGVmdCxzPXRoaXMudG9wLXRoaXMuYm90dG9tLGY9byppL3QsdT1vKnMvZTtyZXR1cm4gci54PWYsci55PXUscn07bGkucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBoKHQpfHwodD1uZXcgbGkpLHQubGVmdD10aGlzLmxlZnQsdC5yaWdodD10aGlzLnJpZ2h0LHQudG9wPXRoaXMudG9wLHQuYm90dG9tPXRoaXMuYm90dG9tLHQubmVhcj10aGlzLm5lYXIsdC5mYXI9dGhpcy5mYXIsdC5fbGVmdD12b2lkIDAsdC5fcmlnaHQ9dm9pZCAwLHQuX3RvcD12b2lkIDAsdC5fYm90dG9tPXZvaWQgMCx0Ll9uZWFyPXZvaWQgMCx0Ll9mYXI9dm9pZCAwLHR9O2xpLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGgodCkmJnQgaW5zdGFuY2VvZiBsaSYmdGhpcy5yaWdodD09PXQucmlnaHQmJnRoaXMubGVmdD09PXQubGVmdCYmdGhpcy50b3A9PT10LnRvcCYmdGhpcy5ib3R0b209PT10LmJvdHRvbSYmdGhpcy5uZWFyPT09dC5uZWFyJiZ0aGlzLmZhcj09PXQuZmFyfTtsaS5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQ9PT10aGlzfHxoKHQpJiZ0IGluc3RhbmNlb2YgbGkmJk0uZXF1YWxzRXBzaWxvbih0aGlzLnJpZ2h0LHQucmlnaHQsZSxuKSYmTS5lcXVhbHNFcHNpbG9uKHRoaXMubGVmdCx0LmxlZnQsZSxuKSYmTS5lcXVhbHNFcHNpbG9uKHRoaXMudG9wLHQudG9wLGUsbikmJk0uZXF1YWxzRXBzaWxvbih0aGlzLmJvdHRvbSx0LmJvdHRvbSxlLG4pJiZNLmVxdWFsc0Vwc2lsb24odGhpcy5uZWFyLHQubmVhcixlLG4pJiZNLmVxdWFsc0Vwc2lsb24odGhpcy5mYXIsdC5mYXIsZSxuKX07eU89bGl9KTtmdW5jdGlvbiBucih0KXt0PXgodCx4LkVNUFRZX09CSkVDVCksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bT1uZXcgeU8sdGhpcy53aWR0aD10LndpZHRoLHRoaXMuX3dpZHRoPXZvaWQgMCx0aGlzLmFzcGVjdFJhdGlvPXQuYXNwZWN0UmF0aW8sdGhpcy5fYXNwZWN0UmF0aW89dm9pZCAwLHRoaXMubmVhcj14KHQubmVhciwxKSx0aGlzLl9uZWFyPXRoaXMubmVhcix0aGlzLmZhcj14KHQuZmFyLDVlOCksdGhpcy5fZmFyPXRoaXMuZmFyfWZ1bmN0aW9uIGdzKHQpe2lmKCFoKHQud2lkdGgpfHwhaCh0LmFzcGVjdFJhdGlvKXx8IWgodC5uZWFyKXx8IWgodC5mYXIpKXRocm93IG5ldyBCKCJ3aWR0aCwgYXNwZWN0UmF0aW8sIG5lYXIsIG9yIGZhciBwYXJhbWV0ZXJzIGFyZSBub3Qgc2V0LiIpO2xldCBlPXQuX29mZkNlbnRlckZydXN0dW07aWYodC53aWR0aCE9PXQuX3dpZHRofHx0LmFzcGVjdFJhdGlvIT09dC5fYXNwZWN0UmF0aW98fHQubmVhciE9PXQuX25lYXJ8fHQuZmFyIT09dC5fZmFyKXtpZih0LmFzcGVjdFJhdGlvPDApdGhyb3cgbmV3IEIoImFzcGVjdFJhdGlvIG11c3QgYmUgcG9zaXRpdmUuIik7aWYodC5uZWFyPDB8fHQubmVhcj50LmZhcil0aHJvdyBuZXcgQigibmVhciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBsZXNzIHRoYW4gZmFyLiIpO3QuX2FzcGVjdFJhdGlvPXQuYXNwZWN0UmF0aW8sdC5fd2lkdGg9dC53aWR0aCx0Ll9uZWFyPXQubmVhcix0Ll9mYXI9dC5mYXI7bGV0IG49MS90LmFzcGVjdFJhdGlvO2UucmlnaHQ9dC53aWR0aCouNSxlLmxlZnQ9LWUucmlnaHQsZS50b3A9biplLnJpZ2h0LGUuYm90dG9tPS1lLnRvcCxlLm5lYXI9dC5uZWFyLGUuZmFyPXQuZmFyfX12YXIgUG8sVF89WigoKT0+e1l0KCk7SXQoKTthdCgpO0h0KCk7V3QoKTtnTygpO25yLnBhY2tlZExlbmd0aD00O25yLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPXgobiwwKSxlW24rK109dC53aWR0aCxlW24rK109dC5hc3BlY3RSYXRpbyxlW24rK109dC5uZWFyLGVbbl09dC5mYXIsZX07bnIudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJhcnJheSIsdCksZT14KGUsMCksaChuKXx8KG49bmV3IG5yKSxuLndpZHRoPXRbZSsrXSxuLmFzcGVjdFJhdGlvPXRbZSsrXSxuLm5lYXI9dFtlKytdLG4uZmFyPXRbZV0sbn07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobnIucHJvdG90eXBlLHtwcm9qZWN0aW9uTWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ3ModGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5wcm9qZWN0aW9uTWF0cml4fX0sb2ZmQ2VudGVyRnJ1c3R1bTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGdzKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW19fX0pO25yLnByb3RvdHlwZS5jb21wdXRlQ3VsbGluZ1ZvbHVtZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGdzKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW0uY29tcHV0ZUN1bGxpbmdWb2x1bWUodCxlLG4pfTtuci5wcm90b3R5cGUuZ2V0UGl4ZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHQsZSxuLG8scil7cmV0dXJuIGdzKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW0uZ2V0UGl4ZWxEaW1lbnNpb25zKHQsZSxuLG8scil9O25yLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gaCh0KXx8KHQ9bmV3IG5yKSx0LmFzcGVjdFJhdGlvPXRoaXMuYXNwZWN0UmF0aW8sdC53aWR0aD10aGlzLndpZHRoLHQubmVhcj10aGlzLm5lYXIsdC5mYXI9dGhpcy5mYXIsdC5fYXNwZWN0UmF0aW89dm9pZCAwLHQuX3dpZHRoPXZvaWQgMCx0Ll9uZWFyPXZvaWQgMCx0Ll9mYXI9dm9pZCAwLHRoaXMuX29mZkNlbnRlckZydXN0dW0uY2xvbmUodC5fb2ZmQ2VudGVyRnJ1c3R1bSksdH07bnIucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4haCh0KXx8ISh0IGluc3RhbmNlb2YgbnIpPyExOihncyh0aGlzKSxncyh0KSx0aGlzLndpZHRoPT09dC53aWR0aCYmdGhpcy5hc3BlY3RSYXRpbz09PXQuYXNwZWN0UmF0aW8mJnRoaXMuX29mZkNlbnRlckZydXN0dW0uZXF1YWxzKHQuX29mZkNlbnRlckZydXN0dW0pKX07bnIucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiFoKHQpfHwhKHQgaW5zdGFuY2VvZiBucik/ITE6KGdzKHRoaXMpLGdzKHQpLE0uZXF1YWxzRXBzaWxvbih0aGlzLndpZHRoLHQud2lkdGgsZSxuKSYmTS5lcXVhbHNFcHNpbG9uKHRoaXMuYXNwZWN0UmF0aW8sdC5hc3BlY3RSYXRpbyxlLG4pJiZ0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLmVxdWFsc0Vwc2lsb24odC5fb2ZmQ2VudGVyRnJ1c3R1bSxlLG4pKX07UG89bnJ9KTtmdW5jdGlvbiBwaSh0KXt0PXgodCx4LkVNUFRZX09CSkVDVCksdGhpcy5sZWZ0PXQubGVmdCx0aGlzLl9sZWZ0PXZvaWQgMCx0aGlzLnJpZ2h0PXQucmlnaHQsdGhpcy5fcmlnaHQ9dm9pZCAwLHRoaXMudG9wPXQudG9wLHRoaXMuX3RvcD12b2lkIDAsdGhpcy5ib3R0b209dC5ib3R0b20sdGhpcy5fYm90dG9tPXZvaWQgMCx0aGlzLm5lYXI9eCh0Lm5lYXIsMSksdGhpcy5fbmVhcj10aGlzLm5lYXIsdGhpcy5mYXI9eCh0LmZhciw1ZTgpLHRoaXMuX2Zhcj10aGlzLmZhcix0aGlzLl9jdWxsaW5nVm9sdW1lPW5ldyBUZCx0aGlzLl9wZXJzcGVjdGl2ZU1hdHJpeD1uZXcgc3QsdGhpcy5faW5maW5pdGVQZXJzcGVjdGl2ZT1uZXcgc3R9ZnVuY3Rpb24gT18odCl7aWYoIWgodC5yaWdodCl8fCFoKHQubGVmdCl8fCFoKHQudG9wKXx8IWgodC5ib3R0b20pfHwhaCh0Lm5lYXIpfHwhaCh0LmZhcikpdGhyb3cgbmV3IEIoInJpZ2h0LCBsZWZ0LCB0b3AsIGJvdHRvbSwgbmVhciwgb3IgZmFyIHBhcmFtZXRlcnMgYXJlIG5vdCBzZXQuIik7bGV0IGU9dC50b3Asbj10LmJvdHRvbSxvPXQucmlnaHQscj10LmxlZnQsaT10Lm5lYXIscz10LmZhcjtpZihlIT09dC5fdG9wfHxuIT09dC5fYm90dG9tfHxyIT09dC5fbGVmdHx8byE9PXQuX3JpZ2h0fHxpIT09dC5fbmVhcnx8cyE9PXQuX2Zhcil7aWYodC5uZWFyPD0wfHx0Lm5lYXI+dC5mYXIpdGhyb3cgbmV3IEIoIm5lYXIgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyBhbmQgbGVzcyB0aGFuIGZhci4iKTt0Ll9sZWZ0PXIsdC5fcmlnaHQ9byx0Ll90b3A9ZSx0Ll9ib3R0b209bix0Ll9uZWFyPWksdC5fZmFyPXMsdC5fcGVyc3BlY3RpdmVNYXRyaXg9c3QuY29tcHV0ZVBlcnNwZWN0aXZlT2ZmQ2VudGVyKHIsbyxuLGUsaSxzLHQuX3BlcnNwZWN0aXZlTWF0cml4KSx0Ll9pbmZpbml0ZVBlcnNwZWN0aXZlPXN0LmNvbXB1dGVJbmZpbml0ZVBlcnNwZWN0aXZlT2ZmQ2VudGVyKHIsbyxuLGUsaSx0Ll9pbmZpbml0ZVBlcnNwZWN0aXZlKX19dmFyIFNELENELHhELFBELEFPLGJPPVooKCk9PntVdCgpO2hyKCk7Yl8oKTtJdCgpO2F0KCk7SHQoKTtXdCgpO2tuKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocGkucHJvdG90eXBlLHtwcm9qZWN0aW9uTWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gT18odGhpcyksdGhpcy5fcGVyc3BlY3RpdmVNYXRyaXh9fSxpbmZpbml0ZVByb2plY3Rpb25NYXRyaXg6e2dldDpmdW5jdGlvbigpe3JldHVybiBPXyh0aGlzKSx0aGlzLl9pbmZpbml0ZVBlcnNwZWN0aXZlfX19KTtTRD1uZXcgYSxDRD1uZXcgYSx4RD1uZXcgYSxQRD1uZXcgYTtwaS5wcm90b3R5cGUuY29tcHV0ZUN1bGxpbmdWb2x1bWU9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBCKCJwb3NpdGlvbiBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgQigiZGlyZWN0aW9uIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG4pKXRocm93IG5ldyBCKCJ1cCBpcyByZXF1aXJlZC4iKTtsZXQgbz10aGlzLl9jdWxsaW5nVm9sdW1lLnBsYW5lcyxyPXRoaXMudG9wLGk9dGhpcy5ib3R0b20scz10aGlzLnJpZ2h0LGY9dGhpcy5sZWZ0LHU9dGhpcy5uZWFyLGM9dGhpcy5mYXIsbD1hLmNyb3NzKGUsbixTRCkscD1DRDthLm11bHRpcGx5QnlTY2FsYXIoZSx1LHApLGEuYWRkKHQscCxwKTtsZXQgZD14RDthLm11bHRpcGx5QnlTY2FsYXIoZSxjLGQpLGEuYWRkKHQsZCxkKTtsZXQgbT1QRDthLm11bHRpcGx5QnlTY2FsYXIobCxmLG0pLGEuYWRkKHAsbSxtKSxhLnN1YnRyYWN0KG0sdCxtKSxhLm5vcm1hbGl6ZShtLG0pLGEuY3Jvc3MobSxuLG0pLGEubm9ybWFsaXplKG0sbSk7bGV0IF89b1swXTtyZXR1cm4gaChfKXx8KF89b1swXT1uZXcgX2UpLF8ueD1tLngsXy55PW0ueSxfLno9bS56LF8udz0tYS5kb3QobSx0KSxhLm11bHRpcGx5QnlTY2FsYXIobCxzLG0pLGEuYWRkKHAsbSxtKSxhLnN1YnRyYWN0KG0sdCxtKSxhLmNyb3NzKG4sbSxtKSxhLm5vcm1hbGl6ZShtLG0pLF89b1sxXSxoKF8pfHwoXz1vWzFdPW5ldyBfZSksXy54PW0ueCxfLnk9bS55LF8uej1tLnosXy53PS1hLmRvdChtLHQpLGEubXVsdGlwbHlCeVNjYWxhcihuLGksbSksYS5hZGQocCxtLG0pLGEuc3VidHJhY3QobSx0LG0pLGEuY3Jvc3MobCxtLG0pLGEubm9ybWFsaXplKG0sbSksXz1vWzJdLGgoXyl8fChfPW9bMl09bmV3IF9lKSxfLng9bS54LF8ueT1tLnksXy56PW0ueixfLnc9LWEuZG90KG0sdCksYS5tdWx0aXBseUJ5U2NhbGFyKG4scixtKSxhLmFkZChwLG0sbSksYS5zdWJ0cmFjdChtLHQsbSksYS5jcm9zcyhtLGwsbSksYS5ub3JtYWxpemUobSxtKSxfPW9bM10saChfKXx8KF89b1szXT1uZXcgX2UpLF8ueD1tLngsXy55PW0ueSxfLno9bS56LF8udz0tYS5kb3QobSx0KSxfPW9bNF0saChfKXx8KF89b1s0XT1uZXcgX2UpLF8ueD1lLngsXy55PWUueSxfLno9ZS56LF8udz0tYS5kb3QoZSxwKSxhLm5lZ2F0ZShlLG0pLF89b1s1XSxoKF8pfHwoXz1vWzVdPW5ldyBfZSksXy54PW0ueCxfLnk9bS55LF8uej1tLnosXy53PS1hLmRvdChtLGQpLHRoaXMuX2N1bGxpbmdWb2x1bWV9O3BpLnByb3RvdHlwZS5nZXRQaXhlbERpbWVuc2lvbnM9ZnVuY3Rpb24odCxlLG4sbyxyKXtpZihPXyh0aGlzKSwhaCh0KXx8IWgoZSkpdGhyb3cgbmV3IEIoIkJvdGggZHJhd2luZ0J1ZmZlcldpZHRoIGFuZCBkcmF3aW5nQnVmZmVySGVpZ2h0IGFyZSByZXF1aXJlZC4iKTtpZih0PD0wKXRocm93IG5ldyBCKCJkcmF3aW5nQnVmZmVyV2lkdGggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTtpZihlPD0wKXRocm93IG5ldyBCKCJkcmF3aW5nQnVmZmVySGVpZ2h0IG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7aWYoIWgobikpdGhyb3cgbmV3IEIoImRpc3RhbmNlIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG8pKXRocm93IG5ldyBCKCJwaXhlbFJhdGlvIGlzIHJlcXVpcmVkIik7aWYobzw9MCl0aHJvdyBuZXcgQigicGl4ZWxSYXRpbyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiIpO2lmKCFoKHIpKXRocm93IG5ldyBCKCJBIHJlc3VsdCBvYmplY3QgaXMgcmVxdWlyZWQuIik7bGV0IGk9MS90aGlzLm5lYXIscz10aGlzLnRvcCppLGY9MipvKm4qcy9lO3M9dGhpcy5yaWdodCppO2xldCB1PTIqbypuKnMvdDtyZXR1cm4gci54PXUsci55PWYscn07cGkucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBoKHQpfHwodD1uZXcgcGkpLHQucmlnaHQ9dGhpcy5yaWdodCx0LmxlZnQ9dGhpcy5sZWZ0LHQudG9wPXRoaXMudG9wLHQuYm90dG9tPXRoaXMuYm90dG9tLHQubmVhcj10aGlzLm5lYXIsdC5mYXI9dGhpcy5mYXIsdC5fbGVmdD12b2lkIDAsdC5fcmlnaHQ9dm9pZCAwLHQuX3RvcD12b2lkIDAsdC5fYm90dG9tPXZvaWQgMCx0Ll9uZWFyPXZvaWQgMCx0Ll9mYXI9dm9pZCAwLHR9O3BpLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGgodCkmJnQgaW5zdGFuY2VvZiBwaSYmdGhpcy5yaWdodD09PXQucmlnaHQmJnRoaXMubGVmdD09PXQubGVmdCYmdGhpcy50b3A9PT10LnRvcCYmdGhpcy5ib3R0b209PT10LmJvdHRvbSYmdGhpcy5uZWFyPT09dC5uZWFyJiZ0aGlzLmZhcj09PXQuZmFyfTtwaS5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQ9PT10aGlzfHxoKHQpJiZ0IGluc3RhbmNlb2YgcGkmJk0uZXF1YWxzRXBzaWxvbih0aGlzLnJpZ2h0LHQucmlnaHQsZSxuKSYmTS5lcXVhbHNFcHNpbG9uKHRoaXMubGVmdCx0LmxlZnQsZSxuKSYmTS5lcXVhbHNFcHNpbG9uKHRoaXMudG9wLHQudG9wLGUsbikmJk0uZXF1YWxzRXBzaWxvbih0aGlzLmJvdHRvbSx0LmJvdHRvbSxlLG4pJiZNLmVxdWFsc0Vwc2lsb24odGhpcy5uZWFyLHQubmVhcixlLG4pJiZNLmVxdWFsc0Vwc2lsb24odGhpcy5mYXIsdC5mYXIsZSxuKX07QU89cGl9KTtmdW5jdGlvbiBvcih0KXt0PXgodCx4LkVNUFRZX09CSkVDVCksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bT1uZXcgQU8sdGhpcy5mb3Y9dC5mb3YsdGhpcy5fZm92PXZvaWQgMCx0aGlzLl9mb3Z5PXZvaWQgMCx0aGlzLl9zc2VEZW5vbWluYXRvcj12b2lkIDAsdGhpcy5hc3BlY3RSYXRpbz10LmFzcGVjdFJhdGlvLHRoaXMuX2FzcGVjdFJhdGlvPXZvaWQgMCx0aGlzLm5lYXI9eCh0Lm5lYXIsMSksdGhpcy5fbmVhcj10aGlzLm5lYXIsdGhpcy5mYXI9eCh0LmZhciw1ZTgpLHRoaXMuX2Zhcj10aGlzLmZhcix0aGlzLnhPZmZzZXQ9eCh0LnhPZmZzZXQsMCksdGhpcy5feE9mZnNldD10aGlzLnhPZmZzZXQsdGhpcy55T2Zmc2V0PXgodC55T2Zmc2V0LDApLHRoaXMuX3lPZmZzZXQ9dGhpcy55T2Zmc2V0fWZ1bmN0aW9uIFhyKHQpe2lmKCFoKHQuZm92KXx8IWgodC5hc3BlY3RSYXRpbyl8fCFoKHQubmVhcil8fCFoKHQuZmFyKSl0aHJvdyBuZXcgQigiZm92LCBhc3BlY3RSYXRpbywgbmVhciwgb3IgZmFyIHBhcmFtZXRlcnMgYXJlIG5vdCBzZXQuIik7bGV0IGU9dC5fb2ZmQ2VudGVyRnJ1c3R1bTtpZih0LmZvdiE9PXQuX2Zvdnx8dC5hc3BlY3RSYXRpbyE9PXQuX2FzcGVjdFJhdGlvfHx0Lm5lYXIhPT10Ll9uZWFyfHx0LmZhciE9PXQuX2Zhcnx8dC54T2Zmc2V0IT09dC5feE9mZnNldHx8dC55T2Zmc2V0IT09dC5feU9mZnNldCl7aWYodC5mb3Y8MHx8dC5mb3Y+PU1hdGguUEkpdGhyb3cgbmV3IEIoImZvdiBtdXN0IGJlIGluIHRoZSByYW5nZSBbMCwgUEkpLiIpO2lmKHQuYXNwZWN0UmF0aW88MCl0aHJvdyBuZXcgQigiYXNwZWN0UmF0aW8gbXVzdCBiZSBwb3NpdGl2ZS4iKTtpZih0Lm5lYXI8MHx8dC5uZWFyPnQuZmFyKXRocm93IG5ldyBCKCJuZWFyIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8gYW5kIGxlc3MgdGhhbiBmYXIuIik7dC5fYXNwZWN0UmF0aW89dC5hc3BlY3RSYXRpbyx0Ll9mb3Y9dC5mb3YsdC5fZm92eT10LmFzcGVjdFJhdGlvPD0xP3QuZm92Ok1hdGguYXRhbihNYXRoLnRhbih0LmZvdiouNSkvdC5hc3BlY3RSYXRpbykqMix0Ll9uZWFyPXQubmVhcix0Ll9mYXI9dC5mYXIsdC5fc3NlRGVub21pbmF0b3I9MipNYXRoLnRhbiguNSp0Ll9mb3Z5KSx0Ll94T2Zmc2V0PXQueE9mZnNldCx0Ll95T2Zmc2V0PXQueU9mZnNldCxlLnRvcD10Lm5lYXIqTWF0aC50YW4oLjUqdC5fZm92eSksZS5ib3R0b209LWUudG9wLGUucmlnaHQ9dC5hc3BlY3RSYXRpbyplLnRvcCxlLmxlZnQ9LWUucmlnaHQsZS5uZWFyPXQubmVhcixlLmZhcj10LmZhcixlLnJpZ2h0Kz10LnhPZmZzZXQsZS5sZWZ0Kz10LnhPZmZzZXQsZS50b3ArPXQueU9mZnNldCxlLmJvdHRvbSs9dC55T2Zmc2V0fX12YXIgTW8sRV89WigoKT0+e1l0KCk7SXQoKTthdCgpO0h0KCk7V3QoKTtiTygpO29yLnBhY2tlZExlbmd0aD02O29yLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPXgobiwwKSxlW24rK109dC5mb3YsZVtuKytdPXQuYXNwZWN0UmF0aW8sZVtuKytdPXQubmVhcixlW24rK109dC5mYXIsZVtuKytdPXQueE9mZnNldCxlW25dPXQueU9mZnNldCxlfTtvci51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImFycmF5Iix0KSxlPXgoZSwwKSxoKG4pfHwobj1uZXcgb3IpLG4uZm92PXRbZSsrXSxuLmFzcGVjdFJhdGlvPXRbZSsrXSxuLm5lYXI9dFtlKytdLG4uZmFyPXRbZSsrXSxuLnhPZmZzZXQ9dFtlKytdLG4ueU9mZnNldD10W2VdLG59O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9yLnByb3RvdHlwZSx7cHJvamVjdGlvbk1hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFhyKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW0ucHJvamVjdGlvbk1hdHJpeH19LGluZmluaXRlUHJvamVjdGlvbk1hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFhyKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW0uaW5maW5pdGVQcm9qZWN0aW9uTWF0cml4fX0sZm92eTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFhyKHRoaXMpLHRoaXMuX2Zvdnl9fSxzc2VEZW5vbWluYXRvcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFhyKHRoaXMpLHRoaXMuX3NzZURlbm9taW5hdG9yfX0sb2ZmQ2VudGVyRnJ1c3R1bTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFhyKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW19fX0pO29yLnByb3RvdHlwZS5jb21wdXRlQ3VsbGluZ1ZvbHVtZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIFhyKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW0uY29tcHV0ZUN1bGxpbmdWb2x1bWUodCxlLG4pfTtvci5wcm90b3R5cGUuZ2V0UGl4ZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHQsZSxuLG8scil7cmV0dXJuIFhyKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW0uZ2V0UGl4ZWxEaW1lbnNpb25zKHQsZSxuLG8scil9O29yLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gaCh0KXx8KHQ9bmV3IG9yKSx0LmFzcGVjdFJhdGlvPXRoaXMuYXNwZWN0UmF0aW8sdC5mb3Y9dGhpcy5mb3YsdC5uZWFyPXRoaXMubmVhcix0LmZhcj10aGlzLmZhcix0Ll9hc3BlY3RSYXRpbz12b2lkIDAsdC5fZm92PXZvaWQgMCx0Ll9uZWFyPXZvaWQgMCx0Ll9mYXI9dm9pZCAwLHRoaXMuX29mZkNlbnRlckZydXN0dW0uY2xvbmUodC5fb2ZmQ2VudGVyRnJ1c3R1bSksdH07b3IucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4haCh0KXx8ISh0IGluc3RhbmNlb2Ygb3IpPyExOihYcih0aGlzKSxYcih0KSx0aGlzLmZvdj09PXQuZm92JiZ0aGlzLmFzcGVjdFJhdGlvPT09dC5hc3BlY3RSYXRpbyYmdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5lcXVhbHModC5fb2ZmQ2VudGVyRnJ1c3R1bSkpfTtvci5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIWgodCl8fCEodCBpbnN0YW5jZW9mIG9yKT8hMTooWHIodGhpcyksWHIodCksTS5lcXVhbHNFcHNpbG9uKHRoaXMuZm92LHQuZm92LGUsbikmJk0uZXF1YWxzRXBzaWxvbih0aGlzLmFzcGVjdFJhdGlvLHQuYXNwZWN0UmF0aW8sZSxuKSYmdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5lcXVhbHNFcHNpbG9uKHQuX29mZkNlbnRlckZydXN0dW0sZSxuKSl9O01vPW9yfSk7ZnVuY3Rpb24gQWModCl7eS50eXBlT2Yub2JqZWN0KCJvcHRpb25zIix0KSx5LnR5cGVPZi5vYmplY3QoIm9wdGlvbnMuZnJ1c3R1bSIsdC5mcnVzdHVtKSx5LnR5cGVPZi5vYmplY3QoIm9wdGlvbnMub3JpZ2luIix0Lm9yaWdpbikseS50eXBlT2Yub2JqZWN0KCJvcHRpb25zLm9yaWVudGF0aW9uIix0Lm9yaWVudGF0aW9uKTtsZXQgZT10LmZydXN0dW0sbj10Lm9yaWVudGF0aW9uLG89dC5vcmlnaW4scj14KHQudmVydGV4Rm9ybWF0LGx0LkRFRkFVTFQpLGk9eCh0Ll9kcmF3TmVhclBsYW5lLCEwKSxzLGY7ZSBpbnN0YW5jZW9mIE1vPyhzPU9kLGY9TW8ucGFja2VkTGVuZ3RoKTplIGluc3RhbmNlb2YgUG8mJihzPU1ELGY9UG8ucGFja2VkTGVuZ3RoKSx0aGlzLl9mcnVzdHVtVHlwZT1zLHRoaXMuX2ZydXN0dW09ZS5jbG9uZSgpLHRoaXMuX29yaWdpbj1hLmNsb25lKG8pLHRoaXMuX29yaWVudGF0aW9uPW5lLmNsb25lKG4pLHRoaXMuX2RyYXdOZWFyUGxhbmU9aSx0aGlzLl92ZXJ0ZXhGb3JtYXQ9cix0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVGcnVzdHVtR2VvbWV0cnkiLHRoaXMucGFja2VkTGVuZ3RoPTIrZithLnBhY2tlZExlbmd0aCtuZS5wYWNrZWRMZW5ndGgrbHQucGFja2VkTGVuZ3RofWZ1bmN0aW9uIFNhKHQsZSxuLG8scixpLHMsZil7bGV0IHU9dC8zKjI7Zm9yKGxldCBjPTA7Yzw0OysrYyloKGUpJiYoZVt0XT1pLngsZVt0KzFdPWkueSxlW3QrMl09aS56KSxoKG4pJiYoblt0XT1zLngsblt0KzFdPXMueSxuW3QrMl09cy56KSxoKG8pJiYob1t0XT1mLngsb1t0KzFdPWYueSxvW3QrMl09Zi56KSx0Kz0zO3JbdV09MCxyW3UrMV09MCxyW3UrMl09MSxyW3UrM109MCxyW3UrNF09MSxyW3UrNV09MSxyW3UrNl09MCxyW3UrN109MX12YXIgT2QsTUQsTkQsSUQsdkQsREQsTEQsRkQsQkQsUl8sd08sVE8sT08sVUQsVkQsa0QsQXMsS2YsRU8sV2YsU189WigoKT0+e1BlKCk7VXQoKTtocigpO1l0KCk7RGUoKTtJdCgpO2F0KCk7WGUoKTtZZSgpO2FuKCk7Rm4oKTtrbigpO1RfKCk7RV8oKTt0bigpOyRvKCk7Um8oKTtPZD0wLE1EPTE7QWMucGFjaz1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj14KG4sMCk7bGV0IG89dC5fZnJ1c3R1bVR5cGUscj10Ll9mcnVzdHVtO3JldHVybiBlW24rK109byxvPT09T2Q/KE1vLnBhY2socixlLG4pLG4rPU1vLnBhY2tlZExlbmd0aCk6KFBvLnBhY2socixlLG4pLG4rPVBvLnBhY2tlZExlbmd0aCksYS5wYWNrKHQuX29yaWdpbixlLG4pLG4rPWEucGFja2VkTGVuZ3RoLG5lLnBhY2sodC5fb3JpZW50YXRpb24sZSxuKSxuKz1uZS5wYWNrZWRMZW5ndGgsbHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxuKz1sdC5wYWNrZWRMZW5ndGgsZVtuXT10Ll9kcmF3TmVhclBsYW5lPzE6MCxlfTtORD1uZXcgTW8sSUQ9bmV3IFBvLHZEPW5ldyBuZSxERD1uZXcgYSxMRD1uZXcgbHQ7QWMudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSxlPXgoZSwwKTtsZXQgbz10W2UrK10scjtvPT09T2Q/KHI9TW8udW5wYWNrKHQsZSxORCksZSs9TW8ucGFja2VkTGVuZ3RoKToocj1Qby51bnBhY2sodCxlLElEKSxlKz1Qby5wYWNrZWRMZW5ndGgpO2xldCBpPWEudW5wYWNrKHQsZSxERCk7ZSs9YS5wYWNrZWRMZW5ndGg7bGV0IHM9bmUudW5wYWNrKHQsZSx2RCk7ZSs9bmUucGFja2VkTGVuZ3RoO2xldCBmPWx0LnVucGFjayh0LGUsTEQpO2UrPWx0LnBhY2tlZExlbmd0aDtsZXQgdT10W2VdPT09MTtpZighaChuKSlyZXR1cm4gbmV3IEFjKHtmcnVzdHVtOnIsb3JpZ2luOmksb3JpZW50YXRpb246cyx2ZXJ0ZXhGb3JtYXQ6ZixfZHJhd05lYXJQbGFuZTp1fSk7bGV0IGM9bz09PW4uX2ZydXN0dW1UeXBlP24uX2ZydXN0dW06dm9pZCAwO3JldHVybiBuLl9mcnVzdHVtPXIuY2xvbmUoYyksbi5fZnJ1c3R1bVR5cGU9byxuLl9vcmlnaW49YS5jbG9uZShpLG4uX29yaWdpbiksbi5fb3JpZW50YXRpb249bmUuY2xvbmUocyxuLl9vcmllbnRhdGlvbiksbi5fdmVydGV4Rm9ybWF0PWx0LmNsb25lKGYsbi5fdmVydGV4Rm9ybWF0KSxuLl9kcmF3TmVhclBsYW5lPXUsbn07RkQ9bmV3IHR0LEJEPW5ldyBzdCxSXz1uZXcgc3Qsd089bmV3IGEsVE89bmV3IGEsT089bmV3IGEsVUQ9bmV3IGEsVkQ9bmV3IGEsa0Q9bmV3IGEsQXM9bmV3IEFycmF5KDMpLEtmPW5ldyBBcnJheSg0KTtLZlswXT1uZXcgX2UoLTEsLTEsMSwxKTtLZlsxXT1uZXcgX2UoMSwtMSwxLDEpO0tmWzJdPW5ldyBfZSgxLDEsMSwxKTtLZlszXT1uZXcgX2UoLTEsMSwxLDEpO0VPPW5ldyBBcnJheSg0KTtmb3IobGV0IHQ9MDt0PDQ7Kyt0KUVPW3RdPW5ldyBfZTtBYy5fY29tcHV0ZU5lYXJGYXJQbGFuZXM9ZnVuY3Rpb24odCxlLG4sbyxyLGkscyxmKXtsZXQgdT10dC5mcm9tUXVhdGVybmlvbihlLEZEKSxjPXgoaSx3TyksbD14KHMsVE8pLHA9eChmLE9PKTtjPXR0LmdldENvbHVtbih1LDAsYyksbD10dC5nZXRDb2x1bW4odSwxLGwpLHA9dHQuZ2V0Q29sdW1uKHUsMixwKSxhLm5vcm1hbGl6ZShjLGMpLGEubm9ybWFsaXplKGwsbCksYS5ub3JtYWxpemUocCxwKSxhLm5lZ2F0ZShjLGMpO2xldCBkPXN0LmNvbXB1dGVWaWV3KHQscCxsLGMsQkQpLG0sXyxnPW8ucHJvamVjdGlvbk1hdHJpeDtpZihuPT09T2Qpe2xldCBiPXN0Lm11bHRpcGx5KGcsZCxSXyk7Xz1zdC5pbnZlcnNlKGIsUl8pfWVsc2UgbT1zdC5pbnZlcnNlVHJhbnNmb3JtYXRpb24oZCxSXyk7aChfKT8oQXNbMF09by5uZWFyLEFzWzFdPW8uZmFyKTooQXNbMF09MCxBc1sxXT1vLm5lYXIsQXNbMl09by5mYXIpO2ZvcihsZXQgYj0wO2I8MjsrK2IpZm9yKGxldCBPPTA7Tzw0OysrTyl7bGV0IFQ9X2UuY2xvbmUoS2ZbT10sRU9bT10pO2lmKGgoXykpe1Q9c3QubXVsdGlwbHlCeVZlY3RvcihfLFQsVCk7bGV0IEU9MS9ULnc7YS5tdWx0aXBseUJ5U2NhbGFyKFQsRSxUKSxhLnN1YnRyYWN0KFQsdCxUKSxhLm5vcm1hbGl6ZShULFQpO2xldCB3PWEuZG90KHAsVCk7YS5tdWx0aXBseUJ5U2NhbGFyKFQsQXNbYl0vdyxUKSxhLmFkZChULHQsVCl9ZWxzZXtsZXQgRT1vLm9mZkNlbnRlckZydXN0dW07aChFKSYmKG89RSk7bGV0IHc9QXNbYl0sQz1Bc1tiKzFdO1QueD0oVC54KihvLnJpZ2h0LW8ubGVmdCkrby5sZWZ0K28ucmlnaHQpKi41LFQueT0oVC55KihvLnRvcC1vLmJvdHRvbSkrby5ib3R0b20rby50b3ApKi41LFQuej0oVC56Kih3LUMpLXctQykqLjUsVC53PTEsc3QubXVsdGlwbHlCeVZlY3RvcihtLFQsVCl9clsxMipiK08qM109VC54LHJbMTIqYitPKjMrMV09VC55LHJbMTIqYitPKjMrMl09VC56fX07QWMuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fZnJ1c3R1bVR5cGUsbj10Ll9mcnVzdHVtLG89dC5fb3JpZ2luLHI9dC5fb3JpZW50YXRpb24saT10Ll9kcmF3TmVhclBsYW5lLHM9dC5fdmVydGV4Rm9ybWF0LGY9aT82OjUsdT1uZXcgRmxvYXQ2NEFycmF5KDMqNCo2KTtBYy5fY29tcHV0ZU5lYXJGYXJQbGFuZXMobyxyLGUsbix1KTtsZXQgYz0zKjQqMjt1W2NdPXVbMyo0XSx1W2MrMV09dVszKjQrMV0sdVtjKzJdPXVbMyo0KzJdLHVbYyszXT11WzBdLHVbYys0XT11WzFdLHVbYys1XT11WzJdLHVbYys2XT11WzMqM10sdVtjKzddPXVbMyozKzFdLHVbYys4XT11WzMqMysyXSx1W2MrOV09dVszKjddLHVbYysxMF09dVszKjcrMV0sdVtjKzExXT11WzMqNysyXSxjKz0zKjQsdVtjXT11WzMqNV0sdVtjKzFdPXVbMyo1KzFdLHVbYysyXT11WzMqNSsyXSx1W2MrM109dVszXSx1W2MrNF09dVs0XSx1W2MrNV09dVs1XSx1W2MrNl09dVswXSx1W2MrN109dVsxXSx1W2MrOF09dVsyXSx1W2MrOV09dVszKjRdLHVbYysxMF09dVszKjQrMV0sdVtjKzExXT11WzMqNCsyXSxjKz0zKjQsdVtjXT11WzNdLHVbYysxXT11WzRdLHVbYysyXT11WzVdLHVbYyszXT11WzMqNV0sdVtjKzRdPXVbMyo1KzFdLHVbYys1XT11WzMqNSsyXSx1W2MrNl09dVszKjZdLHVbYys3XT11WzMqNisxXSx1W2MrOF09dVszKjYrMl0sdVtjKzldPXVbMyoyXSx1W2MrMTBdPXVbMyoyKzFdLHVbYysxMV09dVszKjIrMl0sYys9Myo0LHVbY109dVszKjJdLHVbYysxXT11WzMqMisxXSx1W2MrMl09dVszKjIrMl0sdVtjKzNdPXVbMyo2XSx1W2MrNF09dVszKjYrMV0sdVtjKzVdPXVbMyo2KzJdLHVbYys2XT11WzMqN10sdVtjKzddPXVbMyo3KzFdLHVbYys4XT11WzMqNysyXSx1W2MrOV09dVszKjNdLHVbYysxMF09dVszKjMrMV0sdVtjKzExXT11WzMqMysyXSxpfHwodT11LnN1YmFycmF5KDMqNCkpO2xldCBsPW5ldyByZSh7cG9zaXRpb246bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp1fSl9KTtpZihoKHMubm9ybWFsKXx8aChzLnRhbmdlbnQpfHxoKHMuYml0YW5nZW50KXx8aChzLnN0KSl7bGV0IGQ9aChzLm5vcm1hbCk/bmV3IEZsb2F0MzJBcnJheSgxMipmKTp2b2lkIDAsbT1oKHMudGFuZ2VudCk/bmV3IEZsb2F0MzJBcnJheSgzKjQqZik6dm9pZCAwLF89aChzLmJpdGFuZ2VudCk/bmV3IEZsb2F0MzJBcnJheSgzKjQqZik6dm9pZCAwLGc9aChzLnN0KT9uZXcgRmxvYXQzMkFycmF5KDIqNCpmKTp2b2lkIDAsYj13TyxPPVRPLFQ9T08sRT1hLm5lZ2F0ZShiLFVEKSx3PWEubmVnYXRlKE8sVkQpLEM9YS5uZWdhdGUoVCxrRCk7Yz0wLGkmJihTYShjLGQsbSxfLGcsQyxiLE8pLGMrPTMqNCksU2EoYyxkLG0sXyxnLFQsRSxPKSxjKz0zKjQsU2EoYyxkLG0sXyxnLEUsQyxPKSxjKz0zKjQsU2EoYyxkLG0sXyxnLHcsQyxFKSxjKz0zKjQsU2EoYyxkLG0sXyxnLGIsVCxPKSxjKz0zKjQsU2EoYyxkLG0sXyxnLE8sVCxFKSxoKGQpJiYobC5ub3JtYWw9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmR9KSksaChtKSYmKGwudGFuZ2VudD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bX0pKSxoKF8pJiYobC5iaXRhbmdlbnQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOl99KSksaChnKSYmKGwuc3Q9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOmd9KSl9bGV0IHA9bmV3IFVpbnQxNkFycmF5KDYqZik7Zm9yKGxldCBkPTA7ZDxmOysrZCl7bGV0IG09ZCo2LF89ZCo0O3BbbV09XyxwW20rMV09XysxLHBbbSsyXT1fKzIscFttKzNdPV8scFttKzRdPV8rMixwW20rNV09XyszfXJldHVybiBuZXcgRnQoe2F0dHJpYnV0ZXM6bCxpbmRpY2VzOnAscHJpbWl0aXZlVHlwZTpMdC5UUklBTkdMRVMsYm91bmRpbmdTcGhlcmU6eXQuZnJvbVZlcnRpY2VzKHUpfSl9O1dmPUFjfSk7dmFyIENfPXt9O21lKENfLHtkZWZhdWx0OigpPT56RH0pO2Z1bmN0aW9uIEdEKHQsZSl7cmV0dXJuIGgoZSkmJih0PVdmLnVucGFjayh0LGUpKSxXZi5jcmVhdGVHZW9tZXRyeSh0KX12YXIgekQseF89WigoKT0+e2F0KCk7U18oKTt6RD1HRH0pO2Z1bmN0aW9uIFhmKHQpe3kudHlwZU9mLm9iamVjdCgib3B0aW9ucyIsdCkseS50eXBlT2Yub2JqZWN0KCJvcHRpb25zLmZydXN0dW0iLHQuZnJ1c3R1bSkseS50eXBlT2Yub2JqZWN0KCJvcHRpb25zLm9yaWdpbiIsdC5vcmlnaW4pLHkudHlwZU9mLm9iamVjdCgib3B0aW9ucy5vcmllbnRhdGlvbiIsdC5vcmllbnRhdGlvbik7bGV0IGU9dC5mcnVzdHVtLG49dC5vcmllbnRhdGlvbixvPXQub3JpZ2luLHI9eCh0Ll9kcmF3TmVhclBsYW5lLCEwKSxpLHM7ZSBpbnN0YW5jZW9mIE1vPyhpPVBfLHM9TW8ucGFja2VkTGVuZ3RoKTplIGluc3RhbmNlb2YgUG8mJihpPWpELHM9UG8ucGFja2VkTGVuZ3RoKSx0aGlzLl9mcnVzdHVtVHlwZT1pLHRoaXMuX2ZydXN0dW09ZS5jbG9uZSgpLHRoaXMuX29yaWdpbj1hLmNsb25lKG8pLHRoaXMuX29yaWVudGF0aW9uPW5lLmNsb25lKG4pLHRoaXMuX2RyYXdOZWFyUGxhbmU9cix0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVGcnVzdHVtT3V0bGluZUdlb21ldHJ5Iix0aGlzLnBhY2tlZExlbmd0aD0yK3MrYS5wYWNrZWRMZW5ndGgrbmUucGFja2VkTGVuZ3RofXZhciBQXyxqRCxIRCxxRCxLRCxXRCxNXyxSTz1aKCgpPT57UGUoKTtVdCgpO1l0KCk7RGUoKTtJdCgpO2F0KCk7U18oKTtYZSgpO1llKCk7YW4oKTtUXygpO0VfKCk7dG4oKTskbygpO1BfPTAsakQ9MTtYZi5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPXgobiwwKTtsZXQgbz10Ll9mcnVzdHVtVHlwZSxyPXQuX2ZydXN0dW07cmV0dXJuIGVbbisrXT1vLG89PT1QXz8oTW8ucGFjayhyLGUsbiksbis9TW8ucGFja2VkTGVuZ3RoKTooUG8ucGFjayhyLGUsbiksbis9UG8ucGFja2VkTGVuZ3RoKSxhLnBhY2sodC5fb3JpZ2luLGUsbiksbis9YS5wYWNrZWRMZW5ndGgsbmUucGFjayh0Ll9vcmllbnRhdGlvbixlLG4pLG4rPW5lLnBhY2tlZExlbmd0aCxlW25dPXQuX2RyYXdOZWFyUGxhbmU/MTowLGV9O0hEPW5ldyBNbyxxRD1uZXcgUG8sS0Q9bmV3IG5lLFdEPW5ldyBhO1hmLnVucGFjaz1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJhcnJheSIsdCksZT14KGUsMCk7bGV0IG89dFtlKytdLHI7bz09PVBfPyhyPU1vLnVucGFjayh0LGUsSEQpLGUrPU1vLnBhY2tlZExlbmd0aCk6KHI9UG8udW5wYWNrKHQsZSxxRCksZSs9UG8ucGFja2VkTGVuZ3RoKTtsZXQgaT1hLnVucGFjayh0LGUsV0QpO2UrPWEucGFja2VkTGVuZ3RoO2xldCBzPW5lLnVucGFjayh0LGUsS0QpO2UrPW5lLnBhY2tlZExlbmd0aDtsZXQgZj10W2VdPT09MTtpZighaChuKSlyZXR1cm4gbmV3IFhmKHtmcnVzdHVtOnIsb3JpZ2luOmksb3JpZW50YXRpb246cyxfZHJhd05lYXJQbGFuZTpmfSk7bGV0IHU9bz09PW4uX2ZydXN0dW1UeXBlP24uX2ZydXN0dW06dm9pZCAwO3JldHVybiBuLl9mcnVzdHVtPXIuY2xvbmUodSksbi5fZnJ1c3R1bVR5cGU9byxuLl9vcmlnaW49YS5jbG9uZShpLG4uX29yaWdpbiksbi5fb3JpZW50YXRpb249bmUuY2xvbmUocyxuLl9vcmllbnRhdGlvbiksbi5fZHJhd05lYXJQbGFuZT1mLG59O1hmLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX2ZydXN0dW1UeXBlLG49dC5fZnJ1c3R1bSxvPXQuX29yaWdpbixyPXQuX29yaWVudGF0aW9uLGk9dC5fZHJhd05lYXJQbGFuZSxzPW5ldyBGbG9hdDY0QXJyYXkoMyo0KjIpO1dmLl9jb21wdXRlTmVhckZhclBsYW5lcyhvLHIsZSxuLHMpO2xldCBmPW5ldyByZSh7cG9zaXRpb246bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpzfSl9KSx1LGMsbD1pPzI6MSxwPW5ldyBVaW50MTZBcnJheSg4KihsKzEpKSxkPWk/MDoxO2Zvcig7ZDwyOysrZCl1PWk/ZCo4OjAsYz1kKjQscFt1XT1jLHBbdSsxXT1jKzEscFt1KzJdPWMrMSxwW3UrM109YysyLHBbdSs0XT1jKzIscFt1KzVdPWMrMyxwW3UrNl09YyszLHBbdSs3XT1jO2ZvcihkPTA7ZDwyOysrZCl1PShsK2QpKjgsYz1kKjQscFt1XT1jLHBbdSsxXT1jKzQscFt1KzJdPWMrMSxwW3UrM109Yys1LHBbdSs0XT1jKzIscFt1KzVdPWMrNixwW3UrNl09YyszLHBbdSs3XT1jKzc7cmV0dXJuIG5ldyBGdCh7YXR0cmlidXRlczpmLGluZGljZXM6cCxwcmltaXRpdmVUeXBlOkx0LkxJTkVTLGJvdW5kaW5nU3BoZXJlOnl0LmZyb21WZXJ0aWNlcyhzKX0pfTtNXz1YZn0pO3ZhciBOXz17fTttZShOXyx7ZGVmYXVsdDooKT0+WUR9KTtmdW5jdGlvbiBYRCh0LGUpe3JldHVybiBoKGUpJiYodD1NXy51bnBhY2sodCxlKSksTV8uY3JlYXRlR2VvbWV0cnkodCl9dmFyIFlELElfPVooKCk9PnthdCgpO1JPKCk7WUQ9WER9KTtmdW5jdGlvbiBicyh0KXt0PXgodCx4LkVNUFRZX09CSkVDVCksdGhpcy5fZWxsaXBzb2lkPXgodC5lbGxpcHNvaWQsJC5XR1M4NCksdGhpcy5fcmVjdGFuZ2xlPXgodC5yZWN0YW5nbGUsUHQuTUFYX1ZBTFVFKSx0aGlzLl9wcm9qZWN0aW9uPW5ldyBRbih0aGlzLl9lbGxpcHNvaWQpLHRoaXMuX251bWJlck9mTGV2ZWxaZXJvVGlsZXNYPXgodC5udW1iZXJPZkxldmVsWmVyb1RpbGVzWCwyKSx0aGlzLl9udW1iZXJPZkxldmVsWmVyb1RpbGVzWT14KHQubnVtYmVyT2ZMZXZlbFplcm9UaWxlc1ksMSl9dmFyIFNPLENPPVooKCk9Pnt6ZSgpO1l0KCk7SXQoKTthdCgpO1p0KCk7UmkoKTtXdCgpO0FuKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYnMucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fSxyZWN0YW5nbGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWN0YW5nbGV9fSxwcm9qZWN0aW9uOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJvamVjdGlvbn19fSk7YnMucHJvdG90eXBlLmdldE51bWJlck9mWFRpbGVzQXRMZXZlbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbnVtYmVyT2ZMZXZlbFplcm9UaWxlc1g8PHR9O2JzLnByb3RvdHlwZS5nZXROdW1iZXJPZllUaWxlc0F0TGV2ZWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX251bWJlck9mTGV2ZWxaZXJvVGlsZXNZPDx0fTticy5wcm90b3R5cGUucmVjdGFuZ2xlVG9OYXRpdmVSZWN0YW5nbGU9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoInJlY3RhbmdsZSIsdCk7bGV0IG49TS50b0RlZ3JlZXModC53ZXN0KSxvPU0udG9EZWdyZWVzKHQuc291dGgpLHI9TS50b0RlZ3JlZXModC5lYXN0KSxpPU0udG9EZWdyZWVzKHQubm9ydGgpO3JldHVybiBoKGUpPyhlLndlc3Q9bixlLnNvdXRoPW8sZS5lYXN0PXIsZS5ub3J0aD1pLGUpOm5ldyBQdChuLG8scixpKX07YnMucHJvdG90eXBlLnRpbGVYWVRvTmF0aXZlUmVjdGFuZ2xlPWZ1bmN0aW9uKHQsZSxuLG8pe2xldCByPXRoaXMudGlsZVhZVG9SZWN0YW5nbGUodCxlLG4sbyk7cmV0dXJuIHIud2VzdD1NLnRvRGVncmVlcyhyLndlc3QpLHIuc291dGg9TS50b0RlZ3JlZXMoci5zb3V0aCksci5lYXN0PU0udG9EZWdyZWVzKHIuZWFzdCksci5ub3J0aD1NLnRvRGVncmVlcyhyLm5vcnRoKSxyfTticy5wcm90b3R5cGUudGlsZVhZVG9SZWN0YW5nbGU9ZnVuY3Rpb24odCxlLG4sbyl7bGV0IHI9dGhpcy5fcmVjdGFuZ2xlLGk9dGhpcy5nZXROdW1iZXJPZlhUaWxlc0F0TGV2ZWwobikscz10aGlzLmdldE51bWJlck9mWVRpbGVzQXRMZXZlbChuKSxmPXIud2lkdGgvaSx1PXQqZityLndlc3QsYz0odCsxKSpmK3Iud2VzdCxsPXIuaGVpZ2h0L3MscD1yLm5vcnRoLWUqbCxkPXIubm9ydGgtKGUrMSkqbDtyZXR1cm4gaChvKXx8KG89bmV3IFB0KHUsZCxjLHApKSxvLndlc3Q9dSxvLnNvdXRoPWQsby5lYXN0PWMsby5ub3J0aD1wLG99O2JzLnByb3RvdHlwZS5wb3NpdGlvblRvVGlsZVhZPWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz10aGlzLl9yZWN0YW5nbGU7aWYoIVB0LmNvbnRhaW5zKG8sdCkpcmV0dXJuO2xldCByPXRoaXMuZ2V0TnVtYmVyT2ZYVGlsZXNBdExldmVsKGUpLGk9dGhpcy5nZXROdW1iZXJPZllUaWxlc0F0TGV2ZWwoZSkscz1vLndpZHRoL3IsZj1vLmhlaWdodC9pLHU9dC5sb25naXR1ZGU7by5lYXN0PG8ud2VzdCYmKHUrPU0uVFdPX1BJKTtsZXQgYz0odS1vLndlc3QpL3N8MDtjPj1yJiYoYz1yLTEpO2xldCBsPShvLm5vcnRoLXQubGF0aXR1ZGUpL2Z8MDtyZXR1cm4gbD49aSYmKGw9aS0xKSxoKG4pPyhuLng9YyxuLnk9bCxuKTpuZXcgbnQoYyxsKX07U089YnN9KTtmdW5jdGlvbiBJTyh0KXtjdC5mcm9tUmFkaWFucyh0LmVhc3QsdC5ub3J0aCwwLFlmWzBdKSxjdC5mcm9tUmFkaWFucyh0Lndlc3QsdC5ub3J0aCwwLFlmWzFdKSxjdC5mcm9tUmFkaWFucyh0LmVhc3QsdC5zb3V0aCwwLFlmWzJdKSxjdC5mcm9tUmFkaWFucyh0Lndlc3QsdC5zb3V0aCwwLFlmWzNdKTtsZXQgZT0wLG49MCxvPTAscj0wLGk9eG4uX3RlcnJhaW5IZWlnaHRzTWF4TGV2ZWwscztmb3Iocz0wO3M8PWk7KytzKXtsZXQgZj0hMTtmb3IobGV0IHU9MDt1PDQ7Kyt1KXtsZXQgYz1ZZlt1XTtpZihaRC5wb3NpdGlvblRvVGlsZVhZKGMscywkZiksdT09PTApbz0kZi54LHI9JGYueTtlbHNlIGlmKG8hPT0kZi54fHxyIT09JGYueSl7Zj0hMDticmVha319aWYoZilicmVhaztlPW8sbj1yfWlmKHMhPT0wKXJldHVybnt4OmUseTpuLGxldmVsOnM+aT9pOnMtMX19dmFyIHhPLFBPLE1PLHZfLCRELE5PLFpELFlmLCRmLHhuLEVkLERfPVooKCk9PntQZSgpO2hoKCk7emUoKTtVdCgpO3ZlKCk7WXQoKTtJdCgpO2F0KCk7SHQoKTtadCgpO0NPKCk7QW4oKTtnZigpO3hPPW5ldyBhLFBPPW5ldyBhLE1PPW5ldyBjdCx2Xz1uZXcgYSwkRD1uZXcgYSxOTz1uZXcgeXQsWkQ9bmV3IFNPLFlmPVtuZXcgY3QsbmV3IGN0LG5ldyBjdCxuZXcgY3RdLCRmPW5ldyBudCx4bj17fTt4bi5pbml0aWFsaXplPWZ1bmN0aW9uKCl7bGV0IHQ9eG4uX2luaXRQcm9taXNlO3JldHVybiBoKHQpfHwodD1vaS5mZXRjaEpzb24oUHAoIkFzc2V0cy9hcHByb3hpbWF0ZVRlcnJhaW5IZWlnaHRzLmpzb24iKSkudGhlbihmdW5jdGlvbihlKXt4bi5fdGVycmFpbkhlaWdodHM9ZX0pLHhuLl9pbml0UHJvbWlzZT10KSx0fTt4bi5nZXRNaW5pbXVtTWF4aW11bUhlaWdodHM9ZnVuY3Rpb24odCxlKXtpZih5LmRlZmluZWQoInJlY3RhbmdsZSIsdCksIWgoeG4uX3RlcnJhaW5IZWlnaHRzKSl0aHJvdyBuZXcgQigiWW91IG11c3QgY2FsbCBBcHByb3hpbWF0ZVRlcnJhaW5IZWlnaHRzLmluaXRpYWxpemUgYW5kIHdhaXQgZm9yIHRoZSBwcm9taXNlIHRvIHJlc29sdmUgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24iKTtlPXgoZSwkLldHUzg0KTtsZXQgbj1JTyh0KSxvPXhuLl9kZWZhdWx0TWluVGVycmFpbkhlaWdodCxyPXhuLl9kZWZhdWx0TWF4VGVycmFpbkhlaWdodDtpZihoKG4pKXtsZXQgaT1gJHtuLmxldmVsfS0ke24ueH0tJHtuLnl9YCxzPXhuLl90ZXJyYWluSGVpZ2h0c1tpXTtoKHMpJiYobz1zWzBdLHI9c1sxXSksZS5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihQdC5ub3J0aGVhc3QodCxNTykseE8pLGUuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oUHQuc291dGh3ZXN0KHQsTU8pLFBPKSxhLm1pZHBvaW50KFBPLHhPLHZfKTtsZXQgZj1lLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2Uodl8sJEQpO2lmKGgoZikpe2xldCB1PWEuZGlzdGFuY2Uodl8sZik7bz1NYXRoLm1pbihvLC11KX1lbHNlIG89eG4uX2RlZmF1bHRNaW5UZXJyYWluSGVpZ2h0fXJldHVybiBvPU1hdGgubWF4KHhuLl9kZWZhdWx0TWluVGVycmFpbkhlaWdodCxvKSx7bWluaW11bVRlcnJhaW5IZWlnaHQ6byxtYXhpbXVtVGVycmFpbkhlaWdodDpyfX07eG4uZ2V0Qm91bmRpbmdTcGhlcmU9ZnVuY3Rpb24odCxlKXtpZih5LmRlZmluZWQoInJlY3RhbmdsZSIsdCksIWgoeG4uX3RlcnJhaW5IZWlnaHRzKSl0aHJvdyBuZXcgQigiWW91IG11c3QgY2FsbCBBcHByb3hpbWF0ZVRlcnJhaW5IZWlnaHRzLmluaXRpYWxpemUgYW5kIHdhaXQgZm9yIHRoZSBwcm9taXNlIHRvIHJlc29sdmUgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24iKTtlPXgoZSwkLldHUzg0KTtsZXQgbj1JTyh0KSxvPXhuLl9kZWZhdWx0TWF4VGVycmFpbkhlaWdodDtpZihoKG4pKXtsZXQgaT1gJHtuLmxldmVsfS0ke24ueH0tJHtuLnl9YCxzPXhuLl90ZXJyYWluSGVpZ2h0c1tpXTtoKHMpJiYobz1zWzFdKX1sZXQgcj15dC5mcm9tUmVjdGFuZ2xlM0QodCxlLDApO3JldHVybiB5dC5mcm9tUmVjdGFuZ2xlM0QodCxlLG8sTk8pLHl0LnVuaW9uKHIsTk8scil9O3huLl90ZXJyYWluSGVpZ2h0c01heExldmVsPTY7eG4uX2RlZmF1bHRNYXhUZXJyYWluSGVpZ2h0PTllMzt4bi5fZGVmYXVsdE1pblRlcnJhaW5IZWlnaHQ9LTFlNTt4bi5fdGVycmFpbkhlaWdodHM9dm9pZCAwO3huLl9pbml0UHJvbWlzZT12b2lkIDA7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoeG4se2luaXRpYWxpemVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaCh4bi5fdGVycmFpbkhlaWdodHMpfX19KTtFZD14bn0pO2Z1bmN0aW9uIFRzKHQpe3Q9eCh0LHguRU1QVFlfT0JKRUNUKTtsZXQgZT10LnBvc2l0aW9ucztpZighaChlKXx8ZS5sZW5ndGg8Mil0aHJvdyBuZXcgQigiQXQgbGVhc3QgdHdvIHBvc2l0aW9ucyBhcmUgcmVxdWlyZWQuIik7aWYoaCh0LmFyY1R5cGUpJiZ0LmFyY1R5cGUhPT11ZS5HRU9ERVNJQyYmdC5hcmNUeXBlIT09dWUuUkhVTUIpdGhyb3cgbmV3IEIoIlZhbGlkIG9wdGlvbnMgZm9yIGFyY1R5cGUgYXJlIEFyY1R5cGUuR0VPREVTSUMgYW5kIEFyY1R5cGUuUkhVTUIuIik7dGhpcy53aWR0aD14KHQud2lkdGgsMSksdGhpcy5fcG9zaXRpb25zPWUsdGhpcy5ncmFudWxhcml0eT14KHQuZ3JhbnVsYXJpdHksOTk5OSksdGhpcy5sb29wPXgodC5sb29wLCExKSx0aGlzLmFyY1R5cGU9eCh0LmFyY1R5cGUsdWUuR0VPREVTSUMpLHRoaXMuX2VsbGlwc29pZD0kLldHUzg0LHRoaXMuX3Byb2plY3Rpb25JbmRleD0wLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUdyb3VuZFBvbHlsaW5lR2VvbWV0cnkiLHRoaXMuX3NjZW5lM0RPbmx5PSExfWZ1bmN0aW9uIEdfKHQsZSxuLG8scil7bGV0IGk9a28obyx0LDAsSkQpLHM9a28obyx0LG4sRE8pLGY9a28obyxlLDAsTE8pLHU9amkocyxpLERPKSxjPWppKGYsaSxMTyk7cmV0dXJuIGEuY3Jvc3MoYyx1LHIpLGEubm9ybWFsaXplKHIscil9ZnVuY3Rpb24gTF8odCxlLG4sbyxyLGkscyxmLHUsYyxsKXtpZihyPT09MClyZXR1cm47bGV0IHA7aT09PXVlLkdFT0RFU0lDP3A9bmV3IF9jKHQsZSxzKTppPT09dWUuUkhVTUImJihwPW5ldyBKbyh0LGUscykpO2xldCBkPXAuc3VyZmFjZURpc3RhbmNlO2lmKGQ8cilyZXR1cm47bGV0IG09R18odCxlLG8scyxvTCksXz1NYXRoLmNlaWwoZC9yKSxnPWQvXyxiPWcsTz1fLTEsVD1mLmxlbmd0aDtmb3IobGV0IEU9MDtFPE87RSsrKXtsZXQgdz1wLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2UoYix0TCksQz1rbyhzLHcsbixlTCksTj1rbyhzLHcsbyxuTCk7YS5wYWNrKG0sZixUKSxhLnBhY2soQyx1LFQpLGEucGFjayhOLGMsVCksbC5wdXNoKHcubGF0aXR1ZGUpLGwucHVzaCh3LmxvbmdpdHVkZSksVCs9MyxiKz1nfX1mdW5jdGlvbiBrbyh0LGUsbixvKXtyZXR1cm4gY3QuY2xvbmUoZSxGXyksRl8uaGVpZ2h0PW4sY3QudG9DYXJ0ZXNpYW4oRl8sdCxvKX1mdW5jdGlvbiBqaSh0LGUsbil7cmV0dXJuIGEuc3VidHJhY3QodCxlLG4pLGEubm9ybWFsaXplKG4sbiksbn1mdW5jdGlvbiBGTyh0LGUsbixvKXtyZXR1cm4gbz1qaSh0LGUsbyksbz1hLmNyb3NzKG8sbixvKSxvPWEubm9ybWFsaXplKG8sbyksbz1hLmNyb3NzKG4sbyxvKSxvfWZ1bmN0aW9uIEJfKHQsZSxuLG8scil7bGV0IGk9amkobixlLGVFKSxzPUZPKHQsZSxpLHJMKSxmPUZPKG8sZSxpLGlMKTtpZihNLmVxdWFsc0Vwc2lsb24oYS5kb3QocyxmKSxhTCxNLkVQU0lMT041KSlyZXR1cm4gcj1hLmNyb3NzKGkscyxyKSxyPWEubm9ybWFsaXplKHIscikscjtyPWEuYWRkKGYscyxyKSxyPWEubm9ybWFsaXplKHIscik7bGV0IHU9YS5jcm9zcyhpLHIsc0wpO3JldHVybiBhLmRvdChmLHUpPGNMJiYocj1hLm5lZ2F0ZShyLHIpKSxyfWZ1bmN0aW9uIFZPKHQsZSxuLG8pe2xldCByPWppKG4sZSxtTCksaT1hLmRvdChyLHQpO2lmKGk+UU98fGk8dk8pe2xldCBzPWppKG8sbixlRSksZj1pPHZPP00uUElfT1ZFUl9UV086LU0uUElfT1ZFUl9UV08sdT1uZS5mcm9tQXhpc0FuZ2xlKHMsZixfTCksYz10dC5mcm9tUXVhdGVybmlvbih1LGhMKTtyZXR1cm4gdHQubXVsdGlwbHlCeVZlY3RvcihjLHQsdCksITB9cmV0dXJuITF9ZnVuY3Rpb24gWmYodCxlLG4sbyxyKXtsZXQgaT1jdC50b0NhcnRlc2lhbihlLHQuX2VsbGlwc29pZCx5TCkscz1hLmFkZChpLG4sR08pLGY9ITEsdT10Ll9lbGxpcHNvaWQsYz11LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHMsa08pO01hdGguYWJzKGUubG9uZ2l0dWRlLWMubG9uZ2l0dWRlKT5NLlBJX09WRVJfVFdPJiYoZj0hMCxzPWEuc3VidHJhY3QoaSxuLEdPKSxjPXUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMocyxrTykpLGMuaGVpZ2h0PTA7bGV0IGw9dC5wcm9qZWN0KGMscik7cmV0dXJuIHI9YS5zdWJ0cmFjdChsLG8sciksci56PTAscj1hLm5vcm1hbGl6ZShyLHIpLGYmJmEubmVnYXRlKHIscikscn1mdW5jdGlvbiBqTyh0LGUsbixvLHIsaSl7bGV0IHM9YS5zdWJ0cmFjdChlLHQsZ0wpO2Eubm9ybWFsaXplKHMscyk7bGV0IGY9bi1KTyx1PWEubXVsdGlwbHlCeVNjYWxhcihzLGYsek8pO2EuYWRkKHQsdSxyKTtsZXQgYz1vLXRFO3U9YS5tdWx0aXBseUJ5U2NhbGFyKHMsYyx6TyksYS5hZGQoZSx1LGkpfWZ1bmN0aW9uIENkKHQsZSl7bGV0IG49b24uZ2V0UG9pbnREaXN0YW5jZSh4ZCx0KSxvPW9uLmdldFBvaW50RGlzdGFuY2UoeGQsZSkscj1BTDtNLmVxdWFsc0Vwc2lsb24obiwwLE0uRVBTSUxPTjIpPyhyPWppKGUsdCxyKSxhLm11bHRpcGx5QnlTY2FsYXIocixNLkVQU0lMT04yLHIpLGEuYWRkKHQscix0KSk6TS5lcXVhbHNFcHNpbG9uKG8sMCxNLkVQU0lMT04yKSYmKHI9amkodCxlLHIpLGEubXVsdGlwbHlCeVNjYWxhcihyLE0uRVBTSUxPTjIsciksYS5hZGQoZSxyLGUpKX1mdW5jdGlvbiBiTCh0LGUpe2xldCBuPU1hdGguYWJzKHQubG9uZ2l0dWRlKSxvPU1hdGguYWJzKGUubG9uZ2l0dWRlKTtpZihNLmVxdWFsc0Vwc2lsb24obixNLlBJLE0uRVBTSUxPTjExKSl7bGV0IHI9TS5zaWduKGUubG9uZ2l0dWRlKTtyZXR1cm4gdC5sb25naXR1ZGU9cioobi1NLkVQU0lMT04xMSksMX1lbHNlIGlmKE0uZXF1YWxzRXBzaWxvbihvLE0uUEksTS5FUFNJTE9OMTEpKXtsZXQgcj1NLnNpZ24odC5sb25naXR1ZGUpO3JldHVybiBlLmxvbmdpdHVkZT1yKihvLU0uRVBTSUxPTjExKSwyfXJldHVybiAwfWZ1bmN0aW9uIFZMKHQsZSxuLG8scixpLHMpe2xldCBmLHUsYz1lLl9lbGxpcHNvaWQsbD1uLmxlbmd0aC8zLTEscD1sKjgsZD1wKjQsbT1sKjM2LF89cD42NTUzNT9uZXcgVWludDMyQXJyYXkobSk6bmV3IFVpbnQxNkFycmF5KG0pLGc9bmV3IEZsb2F0NjRBcnJheShwKjMpLGI9bmV3IEZsb2F0MzJBcnJheShkKSxPPW5ldyBGbG9hdDMyQXJyYXkoZCksVD1uZXcgRmxvYXQzMkFycmF5KGQpLEU9bmV3IEZsb2F0MzJBcnJheShkKSx3PW5ldyBGbG9hdDMyQXJyYXkoZCksQyxOLEksTDtzJiYoQz1uZXcgRmxvYXQzMkFycmF5KGQpLE49bmV3IEZsb2F0MzJBcnJheShkKSxJPW5ldyBGbG9hdDMyQXJyYXkoZCksTD1uZXcgRmxvYXQzMkFycmF5KHAqMikpO2xldCB2PWkubGVuZ3RoLzIsRD0wLFU9bkU7VS5oZWlnaHQ9MDtsZXQgQT1vRTtBLmhlaWdodD0wO2xldCBTPUhPLFA9VV87aWYocylmb3IodT0wLGY9MTtmPHY7ZisrKVUubGF0aXR1ZGU9aVt1XSxVLmxvbmdpdHVkZT1pW3UrMV0sQS5sYXRpdHVkZT1pW3UrMl0sQS5sb25naXR1ZGU9aVt1KzNdLFM9ZS5wcm9qZWN0KFUsUyksUD1lLnByb2plY3QoQSxQKSxEKz1hLmRpc3RhbmNlKFMsUCksdSs9MjtsZXQgRj1vLmxlbmd0aC8zO1A9YS51bnBhY2sobywwLFApO2xldCBqPTA7Zm9yKHU9MyxmPTE7ZjxGO2YrKylTPWEuY2xvbmUoUCxTKSxQPWEudW5wYWNrKG8sdSxQKSxqKz1hLmRpc3RhbmNlKFMsUCksdSs9MztsZXQgSDt1PTM7bGV0IGs9MCxLPTAsWD0wLFI9MCxRPSExLGZ0PWEudW5wYWNrKG4sMCxLTykscHQ9YS51bnBhY2sobywwLFVfKSxndD1hLnVucGFjayhyLDAsV08pO2lmKHQpe2xldCB6dD1hLnVucGFjayhuLG4ubGVuZ3RoLTYscU8pO1ZPKGd0LHp0LGZ0LHB0KSYmKGd0PWEubmVnYXRlKGd0LGd0KSl9bGV0IGl0PTAsTnQ9MCxPdD0wO2ZvcihmPTA7ZjxsO2YrKyl7bGV0IHp0PWEuY2xvbmUoZnQscU8pLGhlPWEuY2xvbmUocHQsSE8pLGNlPWEuY2xvbmUoZ3Qsd0wpO1EmJihjZT1hLm5lZ2F0ZShjZSxjZSkpLGZ0PWEudW5wYWNrKG4sdSxLTykscHQ9YS51bnBhY2sobyx1LFVfKSxndD1hLnVucGFjayhyLHUsV08pLFE9Vk8oZ3QsenQsZnQscHQpLFUubGF0aXR1ZGU9aVtrXSxVLmxvbmdpdHVkZT1pW2srMV0sQS5sYXRpdHVkZT1pW2srMl0sQS5sb25naXR1ZGU9aVtrKzNdO2xldCBwZSxmZSxRdCxKdDtpZihzKXtsZXQgTmU9YkwoVSxBKTtwZT1lLnByb2plY3QoVSx4TCksZmU9ZS5wcm9qZWN0KEEsUEwpO2xldCBEbj1qaShmZSxwZSxZTyk7RG4ueT1NYXRoLmFicyhEbi55KSxRdD1WXyxKdD1rXyxOZT09PTB8fGEuZG90KERuLGEuVU5JVF9ZKT5RTz8oUXQ9WmYoZSxVLGNlLHBlLFZfKSxKdD1aZihlLEEsZ3QsZmUsa18pKTpOZT09PTE/KEp0PVpmKGUsQSxndCxmZSxrXyksUXQueD0wLFF0Lnk9TS5zaWduKFUubG9uZ2l0dWRlLU1hdGguYWJzKEEubG9uZ2l0dWRlKSksUXQuej0wKTooUXQ9WmYoZSxVLGNlLHBlLFZfKSxKdC54PTAsSnQueT1NLnNpZ24oVS5sb25naXR1ZGUtQS5sb25naXR1ZGUpLEp0Lno9MCl9bGV0IHhlPWEuZGlzdGFuY2UoaGUscHQpLEFlPVpzLmZyb21DYXJ0ZXNpYW4oenQsTEwpLEVlPWEuc3VidHJhY3QoZnQsenQsTUwpLHVuPWEubm9ybWFsaXplKEVlLFhPKSxVZT1hLnN1YnRyYWN0KGhlLHp0LE5MKTtVZT1hLm5vcm1hbGl6ZShVZSxVZSk7bGV0IGJlPWEuY3Jvc3ModW4sVWUsWE8pO2JlPWEubm9ybWFsaXplKGJlLGJlKTtsZXQgbG49YS5jcm9zcyhVZSxjZSx2TCk7bG49YS5ub3JtYWxpemUobG4sbG4pO2xldCBwbj1hLnN1YnRyYWN0KHB0LGZ0LElMKTtwbj1hLm5vcm1hbGl6ZShwbixwbik7bGV0IFRuPWEuY3Jvc3MoZ3QscG4sREwpO1RuPWEubm9ybWFsaXplKFRuLFRuKTtsZXQgb2U9eGUvaiwkdD1pdC9qLFZlPTAsZG4sc24sbW4sZm89MCxIbj0wO2lmKHMpe1ZlPWEuZGlzdGFuY2UocGUsZmUpLGRuPVpzLmZyb21DYXJ0ZXNpYW4ocGUsRkwpLHNuPWEuc3VidHJhY3QoZmUscGUsWU8pLG1uPWEubm9ybWFsaXplKHNuLEJMKTtsZXQgTmU9bW4ueDttbi54PW1uLnksbW4ueT0tTmUsZm89VmUvRCxIbj1OdC9EfWZvcihIPTA7SDw4O0grKyl7bGV0IE5lPVIrSCo0LERuPUsrSCoyLFduPU5lKzMscW89SDw0PzE6LTEscm49SD09PTJ8fEg9PT0zfHxIPT09Nnx8SD09PTc/MTotMTthLnBhY2soQWUuaGlnaCxiLE5lKSxiW1duXT1FZS54LGEucGFjayhBZS5sb3csTyxOZSksT1tXbl09RWUueSxhLnBhY2sobG4sVCxOZSksVFtXbl09RWUueixhLnBhY2soVG4sRSxOZSksRVtXbl09b2UqcW8sYS5wYWNrKGJlLHcsTmUpO2xldCBPbj0kdCpybjtPbj09PTAmJnJuPDAmJihPbj05KSx3W1duXT1PbixzJiYoQ1tOZV09ZG4uaGlnaC54LENbTmUrMV09ZG4uaGlnaC55LENbTmUrMl09ZG4ubG93LngsQ1tOZSszXT1kbi5sb3cueSxJW05lXT0tUXQueSxJW05lKzFdPVF0LngsSVtOZSsyXT1KdC55LElbTmUrM109LUp0LngsTltOZV09c24ueCxOW05lKzFdPXNuLnksTltOZSsyXT1tbi54LE5bTmUrM109bW4ueSxMW0RuXT1mbypxbyxPbj1IbipybixPbj09PTAmJnJuPDAmJihPbj05KSxMW0RuKzFdPU9uKX1sZXQgWmU9U0wsY249Q0wsS2U9RUwsaG49UkwsdW89UHQuZnJvbUNhcnRvZ3JhcGhpY0FycmF5KFRMLE9MKSxxbj1FZC5nZXRNaW5pbXVtTWF4aW11bUhlaWdodHModW8sYyksS249cW4ubWluaW11bVRlcnJhaW5IZWlnaHQsbG89cW4ubWF4aW11bVRlcnJhaW5IZWlnaHQ7T3QrPU1hdGguYWJzKEtuKSxPdCs9TWF0aC5hYnMobG8pLGpPKHp0LGhlLEtuLGxvLFplLEtlKSxqTyhmdCxwdCxLbixsbyxjbixobik7bGV0IGtlPWEubXVsdGlwbHlCeVNjYWxhcihiZSxNLkVQU0lMT041LCRPKTthLmFkZChaZSxrZSxaZSksYS5hZGQoY24sa2UsY24pLGEuYWRkKEtlLGtlLEtlKSxhLmFkZChobixrZSxobiksQ2QoWmUsY24pLENkKEtlLGhuKSxhLnBhY2soWmUsZyxYKSxhLnBhY2soY24sZyxYKzMpLGEucGFjayhobixnLFgrNiksYS5wYWNrKEtlLGcsWCs5KSxrZT1hLm11bHRpcGx5QnlTY2FsYXIoYmUsLTIqTS5FUFNJTE9ONSwkTyksYS5hZGQoWmUsa2UsWmUpLGEuYWRkKGNuLGtlLGNuKSxhLmFkZChLZSxrZSxLZSksYS5hZGQoaG4sa2UsaG4pLENkKFplLGNuKSxDZChLZSxobiksYS5wYWNrKFplLGcsWCsxMiksYS5wYWNrKGNuLGcsWCsxNSksYS5wYWNrKGhuLGcsWCsxOCksYS5wYWNrKEtlLGcsWCsyMSksays9Mix1Kz0zLEsrPTE2LFgrPTI0LFIrPTMyLGl0Kz14ZSxOdCs9VmV9dT0wO2xldCB4dD0wO2ZvcihmPTA7ZjxsO2YrKyl7Zm9yKEg9MDtIPFpPO0grKylfW3UrSF09ckVbSF0reHQ7eHQrPTgsdSs9Wk99bGV0IF90PVVMO3l0LmZyb21WZXJ0aWNlcyhuLGEuWkVSTywzLF90WzBdKSx5dC5mcm9tVmVydGljZXMobyxhLlpFUk8sMyxfdFsxXSk7bGV0IGR0PXl0LmZyb21Cb3VuZGluZ1NwaGVyZXMoX3QpO2R0LnJhZGl1cys9T3QvKGwqMik7bGV0IFZ0PXtwb3NpdGlvbjpuZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsbm9ybWFsaXplOiExLHZhbHVlczpnfSksc3RhcnRIaUFuZEZvcndhcmRPZmZzZXRYOndzKGIpLHN0YXJ0TG9BbmRGb3J3YXJkT2Zmc2V0WTp3cyhPKSxzdGFydE5vcm1hbEFuZEZvcndhcmRPZmZzZXRaOndzKFQpLGVuZE5vcm1hbEFuZFRleHR1cmVDb29yZGluYXRlTm9ybWFsaXphdGlvblg6d3MoRSkscmlnaHROb3JtYWxBbmRUZXh0dXJlQ29vcmRpbmF0ZU5vcm1hbGl6YXRpb25ZOndzKHcpfTtyZXR1cm4gcyYmKFZ0LnN0YXJ0SGlMbzJEPXdzKEMpLFZ0Lm9mZnNldEFuZFJpZ2h0MkQ9d3MoTiksVnQuc3RhcnRFbmROb3JtYWxzMkQ9d3MoSSksVnQudGV4Y29vcmROb3JtYWxpemF0aW9uMkQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsbm9ybWFsaXplOiExLHZhbHVlczpMfSkpLG5ldyBGdCh7YXR0cmlidXRlczpWdCxpbmRpY2VzOl8sYm91bmRpbmdTcGhlcmU6ZHR9KX1mdW5jdGlvbiB3cyh0KXtyZXR1cm4gbmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjQsbm9ybWFsaXplOiExLHZhbHVlczp0fSl9dmFyIHpfLFFELFFPLHZPLEpPLHRFLEpELERPLExPLHRMLGVMLG5MLG9MLEZfLHJMLGlMLHNMLGVFLGNMLGFMLHhkLGZMLHVMLGxMLHBMLGRMLFJkLFNkLEJPLFVPLG1MLGhMLF9MLGtPLHlMLEdPLGdMLHpPLEFMLG5FLG9FLEhPLFVfLHFPLEtPLHdMLFdPLFRMLE9MLEVMLFJMLFNMLENMLHhMLFBMLFZfLGtfLE1MLE5MLElMLFhPLHZMLERMLExMLEZMLFlPLEJMLCRPLFVMLHJFLFpPLGpfLGlFPVooKCk9PntEXygpO2ZjKCk7anIoKTtQZSgpO1V0KCk7dmUoKTtZdCgpO0RlKCk7SXQoKTthdCgpO0h0KCk7WnQoKTtjZCgpO05mKCk7TWgoKTtSaSgpO1hlKCk7WWUoKTt0YygpO1d0KCk7Rm4oKTtjcygpOyRvKCk7QW4oKTtpYygpO3pfPVtRbixlb10sUUQ9el8ubGVuZ3RoLFFPPU1hdGguY29zKE0udG9SYWRpYW5zKDMwKSksdk89TWF0aC5jb3MoTS50b1JhZGlhbnMoMTUwKSksSk89MCx0RT0xZTM7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVHMucHJvdG90eXBlLHtwYWNrZWRMZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiAxK3RoaXMuX3Bvc2l0aW9ucy5sZW5ndGgqMysxKzErMSskLnBhY2tlZExlbmd0aCsxKzF9fX0pO1RzLnNldFByb2plY3Rpb25BbmRFbGxpcHNvaWQ9ZnVuY3Rpb24odCxlKXtsZXQgbj0wO2ZvcihsZXQgbz0wO288UUQ7bysrKWlmKGUgaW5zdGFuY2VvZiB6X1tvXSl7bj1vO2JyZWFrfXQuX3Byb2plY3Rpb25JbmRleD1uLHQuX2VsbGlwc29pZD1lLmVsbGlwc29pZH07SkQ9bmV3IGEsRE89bmV3IGEsTE89bmV3IGE7dEw9bmV3IGN0LGVMPW5ldyBhLG5MPW5ldyBhLG9MPW5ldyBhO0ZfPW5ldyBjdDtUcy5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKTtsZXQgbz14KG4sMCkscj10Ll9wb3NpdGlvbnMsaT1yLmxlbmd0aDtlW28rK109aTtmb3IobGV0IHM9MDtzPGk7KytzKXtsZXQgZj1yW3NdO2EucGFjayhmLGUsbyksbys9M31yZXR1cm4gZVtvKytdPXQuZ3JhbnVsYXJpdHksZVtvKytdPXQubG9vcD8xOjAsZVtvKytdPXQuYXJjVHlwZSwkLnBhY2sodC5fZWxsaXBzb2lkLGUsbyksbys9JC5wYWNrZWRMZW5ndGgsZVtvKytdPXQuX3Byb2plY3Rpb25JbmRleCxlW28rK109dC5fc2NlbmUzRE9ubHk/MTowLGV9O1RzLnVucGFjaz1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJhcnJheSIsdCk7bGV0IG89eChlLDApLHI9dFtvKytdLGk9bmV3IEFycmF5KHIpO2ZvcihsZXQgZD0wO2Q8cjtkKyspaVtkXT1hLnVucGFjayh0LG8pLG8rPTM7bGV0IHM9dFtvKytdLGY9dFtvKytdPT09MSx1PXRbbysrXSxjPSQudW5wYWNrKHQsbyk7bys9JC5wYWNrZWRMZW5ndGg7bGV0IGw9dFtvKytdLHA9dFtvKytdPT09MTtyZXR1cm4gaChuKXx8KG49bmV3IFRzKHtwb3NpdGlvbnM6aX0pKSxuLl9wb3NpdGlvbnM9aSxuLmdyYW51bGFyaXR5PXMsbi5sb29wPWYsbi5hcmNUeXBlPXUsbi5fZWxsaXBzb2lkPWMsbi5fcHJvamVjdGlvbkluZGV4PWwsbi5fc2NlbmUzRE9ubHk9cCxufTtyTD1uZXcgYSxpTD1uZXcgYSxzTD1uZXcgYSxlRT1uZXcgYSxjTD0wLGFMPS0xO3hkPW9uLmZyb21Qb2ludE5vcm1hbChhLlpFUk8sYS5VTklUX1kpLGZMPW5ldyBhLHVMPW5ldyBhLGxMPW5ldyBhLHBMPW5ldyBhLGRMPW5ldyBhLFJkPW5ldyBhLFNkPW5ldyBjdCxCTz1uZXcgY3QsVU89bmV3IGN0O1RzLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPSF0Ll9zY2VuZTNET25seSxuPXQubG9vcCxvPXQuX2VsbGlwc29pZCxyPXQuZ3JhbnVsYXJpdHksaT10LmFyY1R5cGUscz1uZXcgel9bdC5fcHJvamVjdGlvbkluZGV4XShvKSxmPUpPLHU9dEUsYyxsLHA9dC5fcG9zaXRpb25zLGQ9cC5sZW5ndGg7ZD09PTImJihuPSExKTtsZXQgbSxfLGcsYixPPW5ldyBKbyh2b2lkIDAsdm9pZCAwLG8pLFQsRSx3LEM9W3BbMF1dO2ZvcihsPTA7bDxkLTE7bCsrKW09cFtsXSxfPXBbbCsxXSxUPV9vLmxpbmVTZWdtZW50UGxhbmUobSxfLHhkLFJkKSxoKFQpJiYhYS5lcXVhbHNFcHNpbG9uKFQsbSxNLkVQU0lMT043KSYmIWEuZXF1YWxzRXBzaWxvbihULF8sTS5FUFNJTE9ONykmJih0LmFyY1R5cGU9PT11ZS5HRU9ERVNJQz9DLnB1c2goYS5jbG9uZShUKSk6dC5hcmNUeXBlPT09dWUuUkhVTUImJih3PW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoVCxTZCkubG9uZ2l0dWRlLGc9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhtLFNkKSxiPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoXyxCTyksTy5zZXRFbmRQb2ludHMoZyxiKSxFPU8uZmluZEludGVyc2VjdGlvbldpdGhMb25naXR1ZGUodyxVTyksVD1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKEUsUmQpLGgoVCkmJiFhLmVxdWFsc0Vwc2lsb24oVCxtLE0uRVBTSUxPTjcpJiYhYS5lcXVhbHNFcHNpbG9uKFQsXyxNLkVQU0lMT043KSYmQy5wdXNoKGEuY2xvbmUoVCkpKSksQy5wdXNoKF8pO24mJihtPXBbZC0xXSxfPXBbMF0sVD1fby5saW5lU2VnbWVudFBsYW5lKG0sXyx4ZCxSZCksaChUKSYmIWEuZXF1YWxzRXBzaWxvbihULG0sTS5FUFNJTE9ONykmJiFhLmVxdWFsc0Vwc2lsb24oVCxfLE0uRVBTSUxPTjcpJiYodC5hcmNUeXBlPT09dWUuR0VPREVTSUM/Qy5wdXNoKGEuY2xvbmUoVCkpOnQuYXJjVHlwZT09PXVlLlJIVU1CJiYodz1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKFQsU2QpLmxvbmdpdHVkZSxnPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobSxTZCksYj1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKF8sQk8pLE8uc2V0RW5kUG9pbnRzKGcsYiksRT1PLmZpbmRJbnRlcnNlY3Rpb25XaXRoTG9uZ2l0dWRlKHcsVU8pLFQ9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihFLFJkKSxoKFQpJiYhYS5lcXVhbHNFcHNpbG9uKFQsbSxNLkVQU0lMT043KSYmIWEuZXF1YWxzRXBzaWxvbihULF8sTS5FUFNJTE9ONykmJkMucHVzaChhLmNsb25lKFQpKSkpKTtsZXQgTj1DLmxlbmd0aCxJPW5ldyBBcnJheShOKTtmb3IobD0wO2w8TjtsKyspe2xldCBRPWN0LmZyb21DYXJ0ZXNpYW4oQ1tsXSxvKTtRLmhlaWdodD0wLElbbF09UX1pZihJPUNuKEksY3QuZXF1YWxzRXBzaWxvbiksTj1JLmxlbmd0aCxOPDIpcmV0dXJuO2xldCBMPVtdLHY9W10sRD1bXSxVPVtdLEE9ZkwsUz11TCxQPWxMLEY9cEwsaj1kTCxIPUlbMF0saz1JWzFdLEs9SVtOLTFdO2ZvcihBPWtvKG8sSyxmLEEpLEY9a28obyxrLGYsRiksUz1rbyhvLEgsZixTKSxQPWtvKG8sSCx1LFApLG4/aj1CXyhBLFMsUCxGLGopOmo9R18oSCxrLHUsbyxqKSxhLnBhY2soaix2LDApLGEucGFjayhTLEQsMCksYS5wYWNrKFAsVSwwKSxMLnB1c2goSC5sYXRpdHVkZSksTC5wdXNoKEgubG9uZ2l0dWRlKSxMXyhILGssZix1LHIsaSxvLHYsRCxVLEwpLGw9MTtsPE4tMTsrK2wpe0E9YS5jbG9uZShTLEEpLFM9YS5jbG9uZShGLFMpO2xldCBRPUlbbF07a28obyxRLHUsUCksa28obyxJW2wrMV0sZixGKSxCXyhBLFMsUCxGLGopLGM9di5sZW5ndGgsYS5wYWNrKGosdixjKSxhLnBhY2soUyxELGMpLGEucGFjayhQLFUsYyksTC5wdXNoKFEubGF0aXR1ZGUpLEwucHVzaChRLmxvbmdpdHVkZSksTF8oSVtsXSxJW2wrMV0sZix1LHIsaSxvLHYsRCxVLEwpfWxldCBYPUlbTi0xXSxSPUlbTi0yXTtpZihTPWtvKG8sWCxmLFMpLFA9a28obyxYLHUsUCksbil7bGV0IFE9SVswXTtBPWtvKG8sUixmLEEpLEY9a28obyxRLGYsRiksaj1CXyhBLFMsUCxGLGopfWVsc2Ugaj1HXyhSLFgsdSxvLGopO2lmKGM9di5sZW5ndGgsYS5wYWNrKGosdixjKSxhLnBhY2soUyxELGMpLGEucGFjayhQLFUsYyksTC5wdXNoKFgubGF0aXR1ZGUpLEwucHVzaChYLmxvbmdpdHVkZSksbil7Zm9yKExfKFgsSCxmLHUscixpLG8sdixELFUsTCksYz12Lmxlbmd0aCxsPTA7bDwzOysrbCl2W2MrbF09dltsXSxEW2MrbF09RFtsXSxVW2MrbF09VVtsXTtMLnB1c2goSC5sYXRpdHVkZSksTC5wdXNoKEgubG9uZ2l0dWRlKX1yZXR1cm4gVkwobixzLEQsVSx2LEwsZSl9O21MPW5ldyBhLGhMPW5ldyB0dCxfTD1uZXcgbmU7a089bmV3IGN0LHlMPW5ldyBhLEdPPW5ldyBhO2dMPW5ldyBhLHpPPW5ldyBhO0FMPW5ldyBhO25FPW5ldyBjdCxvRT1uZXcgY3QsSE89bmV3IGEsVV89bmV3IGEscU89bmV3IGEsS089bmV3IGEsd0w9bmV3IGEsV089bmV3IGEsVEw9W25FLG9FXSxPTD1uZXcgUHQsRUw9bmV3IGEsUkw9bmV3IGEsU0w9bmV3IGEsQ0w9bmV3IGEseEw9bmV3IGEsUEw9bmV3IGEsVl89bmV3IGEsa189bmV3IGEsTUw9bmV3IGEsTkw9bmV3IGEsSUw9bmV3IGEsWE89bmV3IGEsdkw9bmV3IGEsREw9bmV3IGEsTEw9bmV3IFpzLEZMPW5ldyBacyxZTz1uZXcgYSxCTD1uZXcgYSwkTz1uZXcgYSxVTD1bbmV3IHl0LG5ldyB5dF0sckU9WzAsMiwxLDAsMywyLDAsNywzLDAsNCw3LDAsNSw0LDAsMSw1LDUsNyw0LDUsNiw3LDUsMiw2LDUsMSwyLDMsNiwyLDMsNyw2XSxaTz1yRS5sZW5ndGg7VHMuX3Byb2plY3ROb3JtYWw9WmY7al89VHN9KTt2YXIgSF89e307bWUoSF8se2RlZmF1bHQ6KCk9PkdMfSk7ZnVuY3Rpb24ga0wodCxlKXtyZXR1cm4gRWQuaW5pdGlhbGl6ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gaChlKSYmKHQ9al8udW5wYWNrKHQsZSkpLGpfLmNyZWF0ZUdlb21ldHJ5KHQpfSl9dmFyIEdMLHFfPVooKCk9PntEXygpO2F0KCk7aUUoKTtHTD1rTH0pO2Z1bmN0aW9uIENhKHQpe3Q9eCh0LHguRU1QVFlfT0JKRUNUKTtsZXQgZT14KHQudmVydGV4Rm9ybWF0LGx0LkRFRkFVTFQpO3RoaXMuX3ZlcnRleEZvcm1hdD1lLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVBsYW5lR2VvbWV0cnkifXZhciBzRSx6TCxQZCxNZCxLXyxjRT1aKCgpPT57UGUoKTtVdCgpO1l0KCk7RGUoKTtJdCgpO2F0KCk7WGUoKTtZZSgpO2FuKCk7dG4oKTtSbygpO0NhLnBhY2tlZExlbmd0aD1sdC5wYWNrZWRMZW5ndGg7Q2EucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49eChuLDApLGx0LnBhY2sodC5fdmVydGV4Rm9ybWF0LGUsbiksZX07c0U9bmV3IGx0LHpMPXt2ZXJ0ZXhGb3JtYXQ6c0V9O0NhLnVucGFjaz1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJhcnJheSIsdCksZT14KGUsMCk7bGV0IG89bHQudW5wYWNrKHQsZSxzRSk7cmV0dXJuIGgobik/KG4uX3ZlcnRleEZvcm1hdD1sdC5jbG9uZShvLG4uX3ZlcnRleEZvcm1hdCksbik6bmV3IENhKHpMKX07UGQ9bmV3IGEoLS41LC0uNSwwKSxNZD1uZXcgYSguNSwuNSwwKTtDYS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll92ZXJ0ZXhGb3JtYXQsbj1uZXcgcmUsbyxyO2lmKGUucG9zaXRpb24pe2lmKHI9bmV3IEZsb2F0NjRBcnJheSg0KjMpLHJbMF09UGQueCxyWzFdPVBkLnksclsyXT0wLHJbM109TWQueCxyWzRdPVBkLnkscls1XT0wLHJbNl09TWQueCxyWzddPU1kLnkscls4XT0wLHJbOV09UGQueCxyWzEwXT1NZC55LHJbMTFdPTAsbi5wb3NpdGlvbj1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnJ9KSxlLm5vcm1hbCl7bGV0IGk9bmV3IEZsb2F0MzJBcnJheSgxMik7aVswXT0wLGlbMV09MCxpWzJdPTEsaVszXT0wLGlbNF09MCxpWzVdPTEsaVs2XT0wLGlbN109MCxpWzhdPTEsaVs5XT0wLGlbMTBdPTAsaVsxMV09MSxuLm5vcm1hbD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6aX0pfWlmKGUuc3Qpe2xldCBpPW5ldyBGbG9hdDMyQXJyYXkoOCk7aVswXT0wLGlbMV09MCxpWzJdPTEsaVszXT0wLGlbNF09MSxpWzVdPTEsaVs2XT0wLGlbN109MSxuLnN0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczppfSl9aWYoZS50YW5nZW50KXtsZXQgaT1uZXcgRmxvYXQzMkFycmF5KDEyKTtpWzBdPTEsaVsxXT0wLGlbMl09MCxpWzNdPTEsaVs0XT0wLGlbNV09MCxpWzZdPTEsaVs3XT0wLGlbOF09MCxpWzldPTEsaVsxMF09MCxpWzExXT0wLG4udGFuZ2VudD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6aX0pfWlmKGUuYml0YW5nZW50KXtsZXQgaT1uZXcgRmxvYXQzMkFycmF5KDEyKTtpWzBdPTAsaVsxXT0xLGlbMl09MCxpWzNdPTAsaVs0XT0xLGlbNV09MCxpWzZdPTAsaVs3XT0xLGlbOF09MCxpWzldPTAsaVsxMF09MSxpWzExXT0wLG4uYml0YW5nZW50PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczppfSl9bz1uZXcgVWludDE2QXJyYXkoMiozKSxvWzBdPTAsb1sxXT0xLG9bMl09MixvWzNdPTAsb1s0XT0yLG9bNV09M31yZXR1cm4gbmV3IEZ0KHthdHRyaWJ1dGVzOm4saW5kaWNlczpvLHByaW1pdGl2ZVR5cGU6THQuVFJJQU5HTEVTLGJvdW5kaW5nU3BoZXJlOm5ldyB5dChhLlpFUk8sTWF0aC5zcXJ0KDIpKX0pfTtLXz1DYX0pO3ZhciBXXz17fTttZShXXyx7ZGVmYXVsdDooKT0+SEx9KTtmdW5jdGlvbiBqTCh0LGUpe3JldHVybiBoKGUpJiYodD1LXy51bnBhY2sodCxlKSksS18uY3JlYXRlR2VvbWV0cnkodCl9dmFyIEhMLFhfPVooKCk9PnthdCgpO2NFKCk7SEw9akx9KTtmdW5jdGlvbiB4YSgpe3RoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVBsYW5lT3V0bGluZUdlb21ldHJ5In12YXIgT3MsTmQsWV8sYUU9WigoKT0+e1BlKCk7VXQoKTtZdCgpO0RlKCk7YXQoKTtYZSgpO1llKCk7YW4oKTt0bigpO3hhLnBhY2tlZExlbmd0aD0wO3hhLnBhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5kZWZpbmVkKCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksZX07eGEudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJhcnJheSIsdCksaChuKT9uOm5ldyB4YX07T3M9bmV3IGEoLS41LC0uNSwwKSxOZD1uZXcgYSguNSwuNSwwKTt4YS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbigpe2xldCB0PW5ldyByZSxlPW5ldyBVaW50MTZBcnJheSg0KjIpLG49bmV3IEZsb2F0NjRBcnJheSg0KjMpO3JldHVybiBuWzBdPU9zLngsblsxXT1Pcy55LG5bMl09T3MueixuWzNdPU5kLngsbls0XT1Pcy55LG5bNV09T3MueixuWzZdPU5kLngsbls3XT1OZC55LG5bOF09T3MueixuWzldPU9zLngsblsxMF09TmQueSxuWzExXT1Pcy56LHQucG9zaXRpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpufSksZVswXT0wLGVbMV09MSxlWzJdPTEsZVszXT0yLGVbNF09MixlWzVdPTMsZVs2XT0zLGVbN109MCxuZXcgRnQoe2F0dHJpYnV0ZXM6dCxpbmRpY2VzOmUscHJpbWl0aXZlVHlwZTpMdC5MSU5FUyxib3VuZGluZ1NwaGVyZTpuZXcgeXQoYS5aRVJPLE1hdGguc3FydCgyKSl9KX07WV89eGF9KTt2YXIgJF89e307bWUoJF8se2RlZmF1bHQ6KCk9PktMfSk7ZnVuY3Rpb24gcUwodCxlKXtyZXR1cm4gaChlKSYmKHQ9WV8udW5wYWNrKHQsZSkpLFlfLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBLTCxaXz1aKCgpPT57YXQoKTthRSgpO0tMPXFMfSk7ZnVuY3Rpb24gV0wodCxlKXtpZighaCh0KXx8IWgoZSkpdGhyb3cgbmV3IEIoImlkZW50aWZpZXIgYW5kIG1lc3NhZ2UgYXJlIHJlcXVpcmVkLiIpO0FhKHQsZSl9dmFyIGZFLHVFPVooKCk9PnthdCgpO0h0KCk7dWQoKTtmRT1XTH0pO2Z1bmN0aW9uIHZuKHQsZSl7dGhpcy5wb3NpdGlvbj10LGgodGhpcy5wb3NpdGlvbil8fCh0aGlzLnBvc2l0aW9uPW5ldyBudCksdGhpcy50YW5nZW50UGxhbmU9ZSxoKHRoaXMudGFuZ2VudFBsYW5lKXx8KHRoaXMudGFuZ2VudFBsYW5lPXZuLk5PUlRIX1BPTEVfVEFOR0VOVF9QTEFORSl9dmFyIFBhLFhMLFlMLCRMLFpMLGFyLGxFPVooKCk9Pnt6ZSgpO1V0KCk7dmUoKTtZdCgpO2F0KCk7WnQoKTtwYSgpO3RjKCk7V3QoKTtGcCgpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHZuLnByb3RvdHlwZSx7ZWxsaXBzb2lkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YW5nZW50UGxhbmUuZWxsaXBzb2lkfX0seDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zaXRpb24ueH19LHk6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvc2l0aW9uLnl9fSxjb25mb3JtYWxMYXRpdHVkZTp7Z2V0OmZ1bmN0aW9uKCl7bGV0IHQ9bnQubWFnbml0dWRlKHRoaXMucG9zaXRpb24pLGU9Mip0aGlzLmVsbGlwc29pZC5tYXhpbXVtUmFkaXVzO3JldHVybiB0aGlzLnRhbmdlbnRQbGFuZS5wbGFuZS5ub3JtYWwueiooTS5QSV9PVkVSX1RXTy0yKk1hdGguYXRhbjIodCxlKSl9fSxsb25naXR1ZGU6e2dldDpmdW5jdGlvbigpe2xldCB0PU0uUElfT1ZFUl9UV08rTWF0aC5hdGFuMih0aGlzLnksdGhpcy54KTtyZXR1cm4gdD5NYXRoLlBJJiYodC09TS5UV09fUEkpLHR9fX0pO1BhPW5ldyBjdCxYTD1uZXcgYTt2bi5wcm90b3R5cGUuZ2V0TGF0aXR1ZGU9ZnVuY3Rpb24odCl7aCh0KXx8KHQ9JC5XR1M4NCksUGEubGF0aXR1ZGU9dGhpcy5jb25mb3JtYWxMYXRpdHVkZSxQYS5sb25naXR1ZGU9dGhpcy5sb25naXR1ZGUsUGEuaGVpZ2h0PTA7bGV0IGU9dGhpcy5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oUGEsWEwpO3JldHVybiB0LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGUsUGEpLFBhLmxhdGl0dWRlfTtZTD1uZXcgUXMsJEw9bmV3IGEsWkw9bmV3IGE7dm4uZnJvbUNhcnRlc2lhbj1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiY2FydGVzaWFuIix0KTtsZXQgbj1NLnNpZ25Ob3RaZXJvKHQueiksbz12bi5OT1JUSF9QT0xFX1RBTkdFTlRfUExBTkUscj12bi5TT1VUSF9QT0xFO248MCYmKG89dm4uU09VVEhfUE9MRV9UQU5HRU5UX1BMQU5FLHI9dm4uTk9SVEhfUE9MRSk7bGV0IGk9WUw7aS5vcmlnaW49by5lbGxpcHNvaWQuc2NhbGVUb0dlb2NlbnRyaWNTdXJmYWNlKHQsaS5vcmlnaW4pLGkuZGlyZWN0aW9uPWEuc3VidHJhY3QoaS5vcmlnaW4sciwkTCksYS5ub3JtYWxpemUoaS5kaXJlY3Rpb24saS5kaXJlY3Rpb24pO2xldCBzPV9vLnJheVBsYW5lKGksby5wbGFuZSxaTCksZj1hLnN1YnRyYWN0KHMscixzKSx1PWEuZG90KG8ueEF4aXMsZiksYz1uKmEuZG90KG8ueUF4aXMsZik7cmV0dXJuIGgoZSk/KGUucG9zaXRpb249bmV3IG50KHUsYyksZS50YW5nZW50UGxhbmU9byxlKTpuZXcgdm4obmV3IG50KHUsYyksbyl9O3ZuLmZyb21DYXJ0ZXNpYW5BcnJheT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiY2FydGVzaWFucyIsdCk7bGV0IG49dC5sZW5ndGg7aChlKT9lLmxlbmd0aD1uOmU9bmV3IEFycmF5KG4pO2ZvcihsZXQgbz0wO288bjtvKyspZVtvXT12bi5mcm9tQ2FydGVzaWFuKHRbb10sZVtvXSk7cmV0dXJuIGV9O3ZuLmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYoaCh0KSlyZXR1cm4gaChlKT8oZS5wb3NpdGlvbj10LnBvc2l0aW9uLGUudGFuZ2VudFBsYW5lPXQudGFuZ2VudFBsYW5lLGUpOm5ldyB2bih0LnBvc2l0aW9uLHQudGFuZ2VudFBsYW5lKX07dm4uSEFMRl9VTklUX1NQSEVSRT1PYmplY3QuZnJlZXplKG5ldyAkKC41LC41LC41KSk7dm4uTk9SVEhfUE9MRT1PYmplY3QuZnJlZXplKG5ldyBhKDAsMCwuNSkpO3ZuLlNPVVRIX1BPTEU9T2JqZWN0LmZyZWV6ZShuZXcgYSgwLDAsLS41KSk7dm4uTk9SVEhfUE9MRV9UQU5HRU5UX1BMQU5FPU9iamVjdC5mcmVlemUobmV3IHlvKHZuLk5PUlRIX1BPTEUsdm4uSEFMRl9VTklUX1NQSEVSRSkpO3ZuLlNPVVRIX1BPTEVfVEFOR0VOVF9QTEFORT1PYmplY3QuZnJlZXplKG5ldyB5byh2bi5TT1VUSF9QT0xFLHZuLkhBTEZfVU5JVF9TUEhFUkUpKTthcj12bn0pO2Z1bmN0aW9uIEpMKHQsZSxuLG8pe2xldCBpPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModCxRTCkuaGVpZ2h0LHM9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhlLHBFKTtzLmhlaWdodD1pLG8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4ocyxlKTtsZXQgZj1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKG4scEUpO2YuaGVpZ2h0PWktMTAwLG8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oZixuKX1mdW5jdGlvbiBRXyh0KXtsZXQgZT10LnZlcnRleEZvcm1hdCxuPXQuZ2VvbWV0cnksbz10LnNoYWRvd1ZvbHVtZSxyPW4uYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsaT1oKG4uYXR0cmlidXRlcy5zdCk/bi5hdHRyaWJ1dGVzLnN0LnZhbHVlczp2b2lkIDAscz1yLmxlbmd0aCxmPXQud2FsbCx1PXQudG9wfHxmLGM9dC5ib3R0b218fGY7aWYoZS5zdHx8ZS5ub3JtYWx8fGUudGFuZ2VudHx8ZS5iaXRhbmdlbnR8fG8pe2xldCBsPXQuYm91bmRpbmdSZWN0YW5nbGUscD10LnJvdGF0aW9uQXhpcyxkPXQucHJvamVjdFRvMmQsbT10LmVsbGlwc29pZCxfPXQuc3RSb3RhdGlvbixnPXQucGVyUG9zaXRpb25IZWlnaHQsYj1zRjtiLng9bC54LGIueT1sLnk7bGV0IE89ZS5zdD9uZXcgRmxvYXQzMkFycmF5KDIqKHMvMykpOnZvaWQgMCxUO2Uubm9ybWFsJiYoZyYmdSYmIWY/VD1uLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlczpUPW5ldyBGbG9hdDMyQXJyYXkocykpO2xldCBFPWUudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KHMpOnZvaWQgMCx3PWUuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkocyk6dm9pZCAwLEM9bz9uZXcgRmxvYXQzMkFycmF5KHMpOnZvaWQgMCxOPTAsST0wLEw9ZUYsdj1uRixEPW9GLFU9ITAsQT1mRixTPXVGO2lmKF8hPT0wKXtsZXQgaj1uZS5mcm9tQXhpc0FuZ2xlKHAsXyxtRSk7QT10dC5mcm9tUXVhdGVybmlvbihqLEEpLGo9bmUuZnJvbUF4aXNBbmdsZShwLC1fLG1FKSxTPXR0LmZyb21RdWF0ZXJuaW9uKGosUyl9ZWxzZSBBPXR0LmNsb25lKHR0LklERU5USVRZLEEpLFM9dHQuY2xvbmUodHQuSURFTlRJVFksUyk7bGV0IFA9MCxGPTA7dSYmYyYmKFA9cy8yLEY9cy8zLHMvPTIpO2ZvcihsZXQgaj0wO2o8cztqKz0zKXtsZXQgSD1hLmZyb21BcnJheShyLGosYUYpO2lmKGUuc3QmJiFoKGkpKXtsZXQgaz10dC5tdWx0aXBseUJ5VmVjdG9yKEEsSCx0Rik7az1tLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoayxrKTtsZXQgSz1kKGssY0YpO250LnN1YnRyYWN0KEssYixLKTtsZXQgWD1NLmNsYW1wKEsueC9sLndpZHRoLDAsMSksUj1NLmNsYW1wKEsueS9sLmhlaWdodCwwLDEpO2MmJihPW04rRl09WCxPW04rMStGXT1SKSx1JiYoT1tOXT1YLE9bTisxXT1SKSxOKz0yfWlmKGUubm9ybWFsfHxlLnRhbmdlbnR8fGUuYml0YW5nZW50fHxvKXtsZXQgaz1JKzEsSz1JKzI7aWYoZil7aWYoaiszPHMpe2xldCBYPWEuZnJvbUFycmF5KHIsaiszLHJGKTtpZihVKXtsZXQgUj1hLmZyb21BcnJheShyLGorcyxpRik7ZyYmSkwoSCxYLFIsbSksYS5zdWJ0cmFjdChYLEgsWCksYS5zdWJ0cmFjdChSLEgsUiksTD1hLm5vcm1hbGl6ZShhLmNyb3NzKFIsWCxMKSxMKSxVPSExfWEuZXF1YWxzRXBzaWxvbihYLEgsTS5FUFNJTE9OMTApJiYoVT0hMCl9KGUudGFuZ2VudHx8ZS5iaXRhbmdlbnQpJiYoRD1tLmdlb2RldGljU3VyZmFjZU5vcm1hbChILEQpLGUudGFuZ2VudCYmKHY9YS5ub3JtYWxpemUoYS5jcm9zcyhELEwsdiksdikpKX1lbHNlIEw9bS5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoSCxMKSwoZS50YW5nZW50fHxlLmJpdGFuZ2VudCkmJihnJiYoSWQ9YS5mcm9tQXJyYXkoVCxJLElkKSxkaT1hLmNyb3NzKGEuVU5JVF9aLElkLGRpKSxkaT1hLm5vcm1hbGl6ZSh0dC5tdWx0aXBseUJ5VmVjdG9yKFMsZGksZGkpLGRpKSxlLmJpdGFuZ2VudCYmKE1hPWEubm9ybWFsaXplKGEuY3Jvc3MoSWQsZGksTWEpLE1hKSkpLHY9YS5jcm9zcyhhLlVOSVRfWixMLHYpLHY9YS5ub3JtYWxpemUodHQubXVsdGlwbHlCeVZlY3RvcihTLHYsdiksdiksZS5iaXRhbmdlbnQmJihEPWEubm9ybWFsaXplKGEuY3Jvc3MoTCx2LEQpLEQpKSk7ZS5ub3JtYWwmJih0LndhbGw/KFRbSStQXT1MLngsVFtrK1BdPUwueSxUW0srUF09TC56KTpjJiYoVFtJK1BdPS1MLngsVFtrK1BdPS1MLnksVFtLK1BdPS1MLnopLCh1JiYhZ3x8ZikmJihUW0ldPUwueCxUW2tdPUwueSxUW0tdPUwueikpLG8mJihmJiYoTD1tLmdlb2RldGljU3VyZmFjZU5vcm1hbChILEwpKSxDW0krUF09LUwueCxDW2srUF09LUwueSxDW0srUF09LUwueiksZS50YW5nZW50JiYodC53YWxsPyhFW0krUF09di54LEVbaytQXT12LnksRVtLK1BdPXYueik6YyYmKEVbSStQXT0tdi54LEVbaytQXT0tdi55LEVbSytQXT0tdi56KSx1JiYoZz8oRVtJXT1kaS54LEVba109ZGkueSxFW0tdPWRpLnopOihFW0ldPXYueCxFW2tdPXYueSxFW0tdPXYueikpKSxlLmJpdGFuZ2VudCYmKGMmJih3W0krUF09RC54LHdbaytQXT1ELnksd1tLK1BdPUQueiksdSYmKGc/KHdbSV09TWEueCx3W2tdPU1hLnksd1tLXT1NYS56KTood1tJXT1ELngsd1trXT1ELnksd1tLXT1ELnopKSksSSs9M319ZS5zdCYmIWgoaSkmJihuLmF0dHJpYnV0ZXMuc3Q9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOk99KSksZS5ub3JtYWwmJihuLmF0dHJpYnV0ZXMubm9ybWFsPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpUfSkpLGUudGFuZ2VudCYmKG4uYXR0cmlidXRlcy50YW5nZW50PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpFfSkpLGUuYml0YW5nZW50JiYobi5hdHRyaWJ1dGVzLmJpdGFuZ2VudD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6d30pKSxvJiYobi5hdHRyaWJ1dGVzLmV4dHJ1ZGVEaXJlY3Rpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOkN9KSl9aWYodC5leHRydWRlJiZoKHQub2Zmc2V0QXR0cmlidXRlKSl7bGV0IGw9ci5sZW5ndGgvMyxwPW5ldyBVaW50OEFycmF5KGwpO2lmKHQub2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QKXUmJmN8fGY/cD1wLmZpbGwoMSwwLGwvMik6dSYmKHA9cC5maWxsKDEpKTtlbHNle2xldCBkPXQub2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjE7cD1wLmZpbGwoZCl9bi5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOnB9KX1yZXR1cm4gbn1mdW5jdGlvbiBkRih0LGUsbixvLHIpe2lmKHI9eChyLG5ldyBQdCksIWgodCl8fHQubGVuZ3RoPDMpcmV0dXJuIHIud2VzdD0wLHIubm9ydGg9MCxyLnNvdXRoPTAsci5lYXN0PTAscjtpZihuPT09dWUuUkhVTUIpcmV0dXJuIFB0LmZyb21DYXJ0ZXNpYW5BcnJheSh0LGUscik7TmEuZWxsaXBzb2lkLmVxdWFscyhlKXx8KE5hPW5ldyBfYyh2b2lkIDAsdm9pZCAwLGUpKSxyLndlc3Q9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHIuZWFzdD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksci5zb3V0aD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksci5ub3J0aD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksRXMud2VzdE92ZXJJREw9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEVzLmVhc3RPdmVySURMPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtsZXQgaT0xL00uY2hvcmRMZW5ndGgobyxlLm1heGltdW1SYWRpdXMpLHM9dC5sZW5ndGgsZj1lLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHRbMF0scEYpLHU9bEYsYztmb3IobGV0IGw9MTtsPHM7bCsrKWM9dSx1PWYsZj1lLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHRbbF0sYyksTmEuc2V0RW5kUG9pbnRzKHUsZiksaEUoTmEsaSxyLEVzKTtyZXR1cm4gYz11LHU9ZixmPWUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModFswXSxjKSxOYS5zZXRFbmRQb2ludHModSxmKSxoRShOYSxpLHIsRXMpLHIuZWFzdC1yLndlc3Q+RXMuZWFzdE92ZXJJREwtRXMud2VzdE92ZXJJREwmJihyLndlc3Q9RXMud2VzdE92ZXJJREwsci5lYXN0PUVzLmVhc3RPdmVySURMLHIuZWFzdD5NLlBJJiYoci5lYXN0PXIuZWFzdC1NLlRXT19QSSksci53ZXN0Pk0uUEkmJihyLndlc3Q9ci53ZXN0LU0uVFdPX1BJKSkscn1mdW5jdGlvbiBoRSh0LGUsbixvKXtsZXQgcj10LnN1cmZhY2VEaXN0YW5jZSxpPU1hdGguY2VpbChyKmUpLHM9aT4wP3IvKGktMSk6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGY9MDtmb3IobGV0IHU9MDt1PGk7dSsrKXtsZXQgYz10LmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2UoZixtRik7Zis9cztsZXQgbD1jLmxvbmdpdHVkZSxwPWMubGF0aXR1ZGU7bi53ZXN0PU1hdGgubWluKG4ud2VzdCxsKSxuLmVhc3Q9TWF0aC5tYXgobi5lYXN0LGwpLG4uc291dGg9TWF0aC5taW4obi5zb3V0aCxwKSxuLm5vcnRoPU1hdGgubWF4KG4ubm9ydGgscCk7bGV0IGQ9bD49MD9sOmwrTS5UV09fUEk7by53ZXN0T3ZlcklETD1NYXRoLm1pbihvLndlc3RPdmVySURMLGQpLG8uZWFzdE92ZXJJREw9TWF0aC5tYXgoby5lYXN0T3ZlcklETCxkKX19ZnVuY3Rpb24gaEYodCxlLG4sbyxyLGkscyxmLHUsYyl7bGV0IGw9e3dhbGxzOltdfSxwO2lmKHN8fGYpe2xldCBUPXllLmNyZWF0ZUdlb21ldHJ5RnJvbVBvc2l0aW9ucyh0LGUsbixvLGksdSxjKSxFPVQuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsdz1ULmluZGljZXMsQyxOO2lmKHMmJmYpe2xldCBJPUUuY29uY2F0KEUpO0M9SS5sZW5ndGgvMyxOPUR0LmNyZWF0ZVR5cGVkQXJyYXkoQyx3Lmxlbmd0aCoyKSxOLnNldCh3KTtsZXQgTD13Lmxlbmd0aCx2PUMvMjtmb3IocD0wO3A8TDtwKz0zKXtsZXQgRD1OW3BdK3YsVT1OW3ArMV0rdixBPU5bcCsyXSt2O05bcCtMXT1BLE5bcCsxK0xdPVUsTltwKzIrTF09RH1pZihULmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPUksaSYmdS5ub3JtYWwpe2xldCBEPVQuYXR0cmlidXRlcy5ub3JtYWwudmFsdWVzO1QuYXR0cmlidXRlcy5ub3JtYWwudmFsdWVzPW5ldyBGbG9hdDMyQXJyYXkoSS5sZW5ndGgpLFQuYXR0cmlidXRlcy5ub3JtYWwudmFsdWVzLnNldChEKX1pZih1LnN0JiZoKG4pKXtsZXQgRD1ULmF0dHJpYnV0ZXMuc3QudmFsdWVzO1QuYXR0cmlidXRlcy5zdC52YWx1ZXM9bmV3IEZsb2F0MzJBcnJheShDKjIpLFQuYXR0cmlidXRlcy5zdC52YWx1ZXM9RC5jb25jYXQoRCl9VC5pbmRpY2VzPU59ZWxzZSBpZihmKXtmb3IoQz1FLmxlbmd0aC8zLE49RHQuY3JlYXRlVHlwZWRBcnJheShDLHcubGVuZ3RoKSxwPTA7cDx3Lmxlbmd0aDtwKz0zKU5bcF09d1twKzJdLE5bcCsxXT13W3ArMV0sTltwKzJdPXdbcF07VC5pbmRpY2VzPU59bC50b3BBbmRCb3R0b209bmV3IGNvKHtnZW9tZXRyeTpUfSl9bGV0IGQ9ci5vdXRlclJpbmcsbT15by5mcm9tUG9pbnRzKGQsdCksXz1tLnByb2plY3RQb2ludHNPbnRvUGxhbmUoZCxfRSksZz1TZS5jb21wdXRlV2luZGluZ09yZGVyMkQoXyk7Zz09PXhvLkNMT0NLV0lTRSYmKGQ9ZC5zbGljZSgpLnJldmVyc2UoKSk7bGV0IGI9eWUuY29tcHV0ZVdhbGxHZW9tZXRyeShkLG4sdCxvLGksYyk7bC53YWxscy5wdXNoKG5ldyBjbyh7Z2VvbWV0cnk6Yn0pKTtsZXQgTz1yLmhvbGVzO2ZvcihwPTA7cDxPLmxlbmd0aDtwKyspe2xldCBUPU9bcF07Xz1tLnByb2plY3RQb2ludHNPbnRvUGxhbmUoVCxfRSksZz1TZS5jb21wdXRlV2luZGluZ09yZGVyMkQoXyksZz09PXhvLkNPVU5URVJfQ0xPQ0tXSVNFJiYoVD1ULnNsaWNlKCkucmV2ZXJzZSgpKSxiPXllLmNvbXB1dGVXYWxsR2VvbWV0cnkoVCxuLHQsbyxpLGMpLGwud2FsbHMucHVzaChuZXcgY28oe2dlb21ldHJ5OmJ9KSl9cmV0dXJuIGx9ZnVuY3Rpb24gZnIodCl7aWYoeS50eXBlT2Yub2JqZWN0KCJvcHRpb25zIix0KSx5LnR5cGVPZi5vYmplY3QoIm9wdGlvbnMucG9seWdvbkhpZXJhcmNoeSIsdC5wb2x5Z29uSGllcmFyY2h5KSxoKHQucGVyUG9zaXRpb25IZWlnaHQpJiZ0LnBlclBvc2l0aW9uSGVpZ2h0JiZoKHQuaGVpZ2h0KSl0aHJvdyBuZXcgQigiQ2Fubm90IHVzZSBib3RoIG9wdGlvbnMucGVyUG9zaXRpb25IZWlnaHQgYW5kIG9wdGlvbnMuaGVpZ2h0Iik7aWYoaCh0LmFyY1R5cGUpJiZ0LmFyY1R5cGUhPT11ZS5HRU9ERVNJQyYmdC5hcmNUeXBlIT09dWUuUkhVTUIpdGhyb3cgbmV3IEIoIkludmFsaWQgYXJjVHlwZS4gVmFsaWQgb3B0aW9ucyBhcmUgQXJjVHlwZS5HRU9ERVNJQyBhbmQgQXJjVHlwZS5SSFVNQi4iKTtsZXQgZT10LnBvbHlnb25IaWVyYXJjaHksbj14KHQudmVydGV4Rm9ybWF0LGx0LkRFRkFVTFQpLG89eCh0LmVsbGlwc29pZCwkLldHUzg0KSxyPXgodC5ncmFudWxhcml0eSxNLlJBRElBTlNfUEVSX0RFR1JFRSksaT14KHQuc3RSb3RhdGlvbiwwKSxzPXQudGV4dHVyZUNvb3JkaW5hdGVzLGY9eCh0LnBlclBvc2l0aW9uSGVpZ2h0LCExKSx1PWYmJmgodC5leHRydWRlZEhlaWdodCksYz14KHQuaGVpZ2h0LDApLGw9eCh0LmV4dHJ1ZGVkSGVpZ2h0LGMpO2lmKCF1KXtsZXQgcD1NYXRoLm1heChjLGwpO2w9TWF0aC5taW4oYyxsKSxjPXB9dGhpcy5fdmVydGV4Rm9ybWF0PWx0LmNsb25lKG4pLHRoaXMuX2VsbGlwc29pZD0kLmNsb25lKG8pLHRoaXMuX2dyYW51bGFyaXR5PXIsdGhpcy5fc3RSb3RhdGlvbj1pLHRoaXMuX2hlaWdodD1jLHRoaXMuX2V4dHJ1ZGVkSGVpZ2h0PWwsdGhpcy5fY2xvc2VUb3A9eCh0LmNsb3NlVG9wLCEwKSx0aGlzLl9jbG9zZUJvdHRvbT14KHQuY2xvc2VCb3R0b20sITApLHRoaXMuX3BvbHlnb25IaWVyYXJjaHk9ZSx0aGlzLl9wZXJQb3NpdGlvbkhlaWdodD1mLHRoaXMuX3BlclBvc2l0aW9uSGVpZ2h0RXh0cnVkZT11LHRoaXMuX3NoYWRvd1ZvbHVtZT14KHQuc2hhZG93Vm9sdW1lLCExKSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVQb2x5Z29uR2VvbWV0cnkiLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl9hcmNUeXBlPXgodC5hcmNUeXBlLHVlLkdFT0RFU0lDKSx0aGlzLl9yZWN0YW5nbGU9dm9pZCAwLHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM9dm9pZCAwLHRoaXMuX3RleHR1cmVDb29yZGluYXRlcz1zLHRoaXMucGFja2VkTGVuZ3RoPXllLmNvbXB1dGVIaWVyYXJjaHlQYWNrZWRMZW5ndGgoZSxhKSskLnBhY2tlZExlbmd0aCtsdC5wYWNrZWRMZW5ndGgrKHM/eWUuY29tcHV0ZUhpZXJhcmNoeVBhY2tlZExlbmd0aChzLG50KToxKSsxMn1mdW5jdGlvbiB5RSh0LGUsbixvLHIsaSl7bGV0IHM9dC5sb25naXR1ZGUsZj1zPj0wP3M6cytNLlRXT19QSTtyLndlc3RPdmVySWRsPU1hdGgubWluKHIud2VzdE92ZXJJZGwsZiksci5lYXN0T3ZlcklkbD1NYXRoLm1heChyLmVhc3RPdmVySWRsLGYpLGkud2VzdD1NYXRoLm1pbihpLndlc3QscyksaS5lYXN0PU1hdGgubWF4KGkuZWFzdCxzKTtsZXQgdT10LmdldExhdGl0dWRlKG4pLGM9dTtpZihpLnNvdXRoPU1hdGgubWluKGkuc291dGgsdSksaS5ub3J0aD1NYXRoLm1heChpLm5vcnRoLHUpLG8hPT11ZS5SSFVNQil7bGV0IGQ9bnQuc3VidHJhY3QoZS5wb3NpdGlvbix0LnBvc2l0aW9uLEFGKSxtPW50LmRvdChlLnBvc2l0aW9uLGQpL250LmRvdChkLGQpO2lmKG0+MCYmbTwxKXtsZXQgXz1udC5hZGQoZS5wb3NpdGlvbixudC5tdWx0aXBseUJ5U2NhbGFyKGQsLW0sZCksYkYpLGc9YXIuY2xvbmUoZSx3Rik7Zy5wb3NpdGlvbj1fO2xldCBiPWcuZ2V0TGF0aXR1ZGUobik7aS5zb3V0aD1NYXRoLm1pbihpLnNvdXRoLGIpLGkubm9ydGg9TWF0aC5tYXgoaS5ub3J0aCxiKSxNYXRoLmFicyh1KT5NYXRoLmFicyhiKSYmKGM9Yil9fWxldCBsPWUueCp0LnktdC54KmUueSxwPU1hdGguc2lnbihsKTtwIT09MCYmKHAqPW50LmFuZ2xlQmV0d2VlbihlLnBvc2l0aW9uLHQucG9zaXRpb24pKSxjPj0wJiYoci5ub3J0aEFuZ2xlKz1wKSxjPD0wJiYoci5zb3V0aEFuZ2xlKz1wKX1mdW5jdGlvbiBFRih0LGUsbil7cmV0dXJuIHQuaGVpZ2h0Pj1NLlBJfHx0LndpZHRoPj1NLlBJP2FyLmZyb21DYXJ0ZXNpYW4oZVswXSxPRikudGFuZ2VudFBsYW5lOnlvLmZyb21Qb2ludHMoZSxuKX1mdW5jdGlvbiBSRih0LGUsbil7cmV0dXJuKG8scik9PntpZih0LmhlaWdodD49TS5QSXx8dC53aWR0aD49TS5QSSl7aWYodC5zb3V0aDwwJiZ0Lm5vcnRoPjApe2gocil8fChyPVtdKTtmb3IobGV0IHM9MDtzPG8ubGVuZ3RoOysrcyl7bGV0IGY9bi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhvW3NdLEFFKTtyW3NdPW5ldyBudChmLmxvbmdpdHVkZS9NLlBJLGYubGF0aXR1ZGUvTS5QSV9PVkVSX1RXTyl9cmV0dXJuIHIubGVuZ3RoPW8ubGVuZ3RoLHJ9cmV0dXJuIGFyLmZyb21DYXJ0ZXNpYW5BcnJheShvLHIpfXJldHVybiB5by5mcm9tUG9pbnRzKGUsbikucHJvamVjdFBvaW50c09udG9QbGFuZShvLHIpfX1mdW5jdGlvbiBTRih0LGUsbil7aWYodC5oZWlnaHQ+PU0uUEl8fHQud2lkdGg+PU0uUEkpcmV0dXJuKHIsaSk9PntpZih0LnNvdXRoPDAmJnQubm9ydGg+MCl7bGV0IHM9bi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhyLEFFKTtyZXR1cm4gaChpKXx8KGk9bmV3IG50KSxpLng9cy5sb25naXR1ZGUvTS5QSSxpLnk9cy5sYXRpdHVkZS9NLlBJX09WRVJfVFdPLGl9cmV0dXJuIGFyLmZyb21DYXJ0ZXNpYW4ocixpKX07bGV0IG89eW8uZnJvbVBvaW50cyhlLG4pO3JldHVybihyLGkpPT5vLnByb2plY3RQb2ludHNPbnRvUGxhbmUocixpKX1mdW5jdGlvbiBDRih0LGUsbixvKXtyZXR1cm4ocixpKT0+IW8mJih0LmhlaWdodD49TS5QSV9PVkVSX1RXT3x8dC53aWR0aD49MipNLlBJX09WRVJfVEhSRUUpP3llLnNwbGl0UG9seWdvbnNPbkVxdWF0b3IocixlLG4saSk6cn1mdW5jdGlvbiB4Rih0LGUsbixvKXtpZihlLmhlaWdodD49TS5QSXx8ZS53aWR0aD49TS5QSSlyZXR1cm4gSHIuZnJvbVJlY3RhbmdsZShlLHZvaWQgMCxkRSk7bGV0IHI9dCxpPXlvLmZyb21Qb2ludHMocixuKTtyZXR1cm4geWUuY29tcHV0ZUJvdW5kaW5nUmVjdGFuZ2xlKGkucGxhbmUubm9ybWFsLGkucHJvamVjdFBvaW50T250b1BsYW5lLmJpbmQoaSkscixvLGRFKX1mdW5jdGlvbiBQRih0KXtsZXQgZT0tdC5fc3RSb3RhdGlvbjtpZihlPT09MClyZXR1cm5bMCwwLDAsMSwxLDBdO2xldCBuPXQuX2VsbGlwc29pZCxvPXQuX3BvbHlnb25IaWVyYXJjaHkucG9zaXRpb25zLHI9dC5yZWN0YW5nbGU7cmV0dXJuIEZ0Ll90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzKG8sZSxuLHIpfXZhciBRTCxwRSxkRSx0RixlRixuRixvRixyRixpRixJZCxkaSxNYSxzRixjRixhRixtRSxmRix1RixsRixwRixFcyxOYSxtRixfRSxfRix5RixnRixBRixiRix3RixnRSxURixScixPRixBRSxKXyxiRT1aKCgpPT57ZmMoKTt4ZigpO1BlKCk7emUoKTtVdCgpO3ZlKCk7WXQoKTtEZSgpO0l0KCk7YXQoKTt1RSgpO0h0KCk7WnQoKTtjZCgpO3BhKCk7WGUoKTtZZSgpO3NjKCk7Rm8oKTtzaSgpOyRlKCk7V3QoKTtGbigpO0xmKCk7cXIoKTskbygpO0FuKCk7bEUoKTtSbygpO2xjKCk7UUw9bmV3IGN0LHBFPW5ldyBjdDtkRT1uZXcgSHIsdEY9bmV3IGEsZUY9bmV3IGEsbkY9bmV3IGEsb0Y9bmV3IGEsckY9bmV3IGEsaUY9bmV3IGEsSWQ9bmV3IGEsZGk9bmV3IGEsTWE9bmV3IGEsc0Y9bmV3IG50LGNGPW5ldyBudCxhRj1uZXcgYSxtRT1uZXcgbmUsZkY9bmV3IHR0LHVGPW5ldyB0dDtsRj1uZXcgY3QscEY9bmV3IGN0LEVzPXt3ZXN0T3ZlcklETDowLGVhc3RPdmVySURMOjB9LE5hPW5ldyBfYzttRj1uZXcgY3Q7X0U9W107ZnIuZnJvbVBvc2l0aW9ucz1mdW5jdGlvbih0KXt0PXgodCx4LkVNUFRZX09CSkVDVCkseS5kZWZpbmVkKCJvcHRpb25zLnBvc2l0aW9ucyIsdC5wb3NpdGlvbnMpO2xldCBlPXtwb2x5Z29uSGllcmFyY2h5Ontwb3NpdGlvbnM6dC5wb3NpdGlvbnN9LGhlaWdodDp0LmhlaWdodCxleHRydWRlZEhlaWdodDp0LmV4dHJ1ZGVkSGVpZ2h0LHZlcnRleEZvcm1hdDp0LnZlcnRleEZvcm1hdCxzdFJvdGF0aW9uOnQuc3RSb3RhdGlvbixlbGxpcHNvaWQ6dC5lbGxpcHNvaWQsZ3JhbnVsYXJpdHk6dC5ncmFudWxhcml0eSxwZXJQb3NpdGlvbkhlaWdodDp0LnBlclBvc2l0aW9uSGVpZ2h0LGNsb3NlVG9wOnQuY2xvc2VUb3AsY2xvc2VCb3R0b206dC5jbG9zZUJvdHRvbSxvZmZzZXRBdHRyaWJ1dGU6dC5vZmZzZXRBdHRyaWJ1dGUsYXJjVHlwZTp0LmFyY1R5cGUsdGV4dHVyZUNvb3JkaW5hdGVzOnQudGV4dHVyZUNvb3JkaW5hdGVzfTtyZXR1cm4gbmV3IGZyKGUpfTtmci5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj14KG4sMCksbj15ZS5wYWNrUG9seWdvbkhpZXJhcmNoeSh0Ll9wb2x5Z29uSGllcmFyY2h5LGUsbixhKSwkLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9JC5wYWNrZWRMZW5ndGgsbHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxuKz1sdC5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX2hlaWdodCxlW24rK109dC5fZXh0cnVkZWRIZWlnaHQsZVtuKytdPXQuX2dyYW51bGFyaXR5LGVbbisrXT10Ll9zdFJvdGF0aW9uLGVbbisrXT10Ll9wZXJQb3NpdGlvbkhlaWdodEV4dHJ1ZGU/MTowLGVbbisrXT10Ll9wZXJQb3NpdGlvbkhlaWdodD8xOjAsZVtuKytdPXQuX2Nsb3NlVG9wPzE6MCxlW24rK109dC5fY2xvc2VCb3R0b20/MTowLGVbbisrXT10Ll9zaGFkb3dWb2x1bWU/MTowLGVbbisrXT14KHQuX29mZnNldEF0dHJpYnV0ZSwtMSksZVtuKytdPXQuX2FyY1R5cGUsaCh0Ll90ZXh0dXJlQ29vcmRpbmF0ZXMpP249eWUucGFja1BvbHlnb25IaWVyYXJjaHkodC5fdGV4dHVyZUNvb3JkaW5hdGVzLGUsbixudCk6ZVtuKytdPS0xLGVbbisrXT10LnBhY2tlZExlbmd0aCxlfTtfRj0kLmNsb25lKCQuVU5JVF9TUEhFUkUpLHlGPW5ldyBsdCxnRj17cG9seWdvbkhpZXJhcmNoeTp7fX07ZnIudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSxlPXgoZSwwKTtsZXQgbz15ZS51bnBhY2tQb2x5Z29uSGllcmFyY2h5KHQsZSxhKTtlPW8uc3RhcnRpbmdJbmRleCxkZWxldGUgby5zdGFydGluZ0luZGV4O2xldCByPSQudW5wYWNrKHQsZSxfRik7ZSs9JC5wYWNrZWRMZW5ndGg7bGV0IGk9bHQudW5wYWNrKHQsZSx5Rik7ZSs9bHQucGFja2VkTGVuZ3RoO2xldCBzPXRbZSsrXSxmPXRbZSsrXSx1PXRbZSsrXSxjPXRbZSsrXSxsPXRbZSsrXT09PTEscD10W2UrK109PT0xLGQ9dFtlKytdPT09MSxtPXRbZSsrXT09PTEsXz10W2UrK109PT0xLGc9dFtlKytdLGI9dFtlKytdLE89dFtlXT09PS0xP3ZvaWQgMDp5ZS51bnBhY2tQb2x5Z29uSGllcmFyY2h5KHQsZSxudCk7aChPKT8oZT1PLnN0YXJ0aW5nSW5kZXgsZGVsZXRlIE8uc3RhcnRpbmdJbmRleCk6ZSsrO2xldCBUPXRbZSsrXTtyZXR1cm4gaChuKXx8KG49bmV3IGZyKGdGKSksbi5fcG9seWdvbkhpZXJhcmNoeT1vLG4uX2VsbGlwc29pZD0kLmNsb25lKHIsbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9bHQuY2xvbmUoaSxuLl92ZXJ0ZXhGb3JtYXQpLG4uX2hlaWdodD1zLG4uX2V4dHJ1ZGVkSGVpZ2h0PWYsbi5fZ3JhbnVsYXJpdHk9dSxuLl9zdFJvdGF0aW9uPWMsbi5fcGVyUG9zaXRpb25IZWlnaHRFeHRydWRlPWwsbi5fcGVyUG9zaXRpb25IZWlnaHQ9cCxuLl9jbG9zZVRvcD1kLG4uX2Nsb3NlQm90dG9tPW0sbi5fc2hhZG93Vm9sdW1lPV8sbi5fb2Zmc2V0QXR0cmlidXRlPWc9PT0tMT92b2lkIDA6ZyxuLl9hcmNUeXBlPWIsbi5fdGV4dHVyZUNvb3JkaW5hdGVzPU8sbi5wYWNrZWRMZW5ndGg9VCxufTtBRj1uZXcgbnQsYkY9bmV3IG50LHdGPW5ldyBhcjtnRT1uZXcgYXIsVEY9bmV3IGFyLFJyPXtub3J0aEFuZ2xlOjAsc291dGhBbmdsZTowLHdlc3RPdmVySWRsOjAsZWFzdE92ZXJJZGw6MH07ZnIuY29tcHV0ZVJlY3RhbmdsZUZyb21Qb3NpdGlvbnM9ZnVuY3Rpb24odCxlLG4sbyl7aWYoeS5kZWZpbmVkKCJwb3NpdGlvbnMiLHQpLGgobyl8fChvPW5ldyBQdCksdC5sZW5ndGg8MylyZXR1cm4gbztvLndlc3Q9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG8uZWFzdD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksby5zb3V0aD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksby5ub3J0aD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksUnIubm9ydGhBbmdsZT0wLFJyLnNvdXRoQW5nbGU9MCxSci53ZXN0T3ZlcklkbD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksUnIuZWFzdE92ZXJJZGw9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO2xldCByPXQubGVuZ3RoLGk9YXIuZnJvbUNhcnRlc2lhbih0WzBdLFRGKTtmb3IobGV0IHM9MTtzPHI7cysrKXtsZXQgZj1hci5mcm9tQ2FydGVzaWFuKHRbc10sZ0UpO3lFKGYsaSxlLG4sUnIsbyksaT1hci5jbG9uZShmLGkpfXJldHVybiB5RShhci5mcm9tQ2FydGVzaWFuKHRbMF0sZ0UpLGksZSxuLFJyLG8pLG8uZWFzdC1vLndlc3Q+UnIuZWFzdE92ZXJJZGwtUnIud2VzdE92ZXJJZGwmJihvLndlc3Q9UnIud2VzdE92ZXJJZGwsby5lYXN0PVJyLmVhc3RPdmVySWRsLG8uZWFzdD5NLlBJJiYoby5lYXN0PW8uZWFzdC1NLlRXT19QSSksby53ZXN0Pk0uUEkmJihvLndlc3Q9by53ZXN0LU0uVFdPX1BJKSksTS5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKFJyLm5vcnRoQW5nbGUpLE0uVFdPX1BJLE0uRVBTSUxPTjEwKSYmKG8ubm9ydGg9TS5QSV9PVkVSX1RXTyxvLmVhc3Q9TS5QSSxvLndlc3Q9LU0uUEkpLE0uZXF1YWxzRXBzaWxvbihNYXRoLmFicyhSci5zb3V0aEFuZ2xlKSxNLlRXT19QSSxNLkVQU0lMT04xMCkmJihvLnNvdXRoPS1NLlBJX09WRVJfVFdPLG8uZWFzdD1NLlBJLG8ud2VzdD0tTS5QSSksb307ZnIuY29tcHV0ZVJlY3RhbmdsZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgib3B0aW9ucyIsdCkseS50eXBlT2Yub2JqZWN0KCJvcHRpb25zLnBvbHlnb25IaWVyYXJjaHkiLHQucG9seWdvbkhpZXJhcmNoeSksZkUoIlBvbHlnb25HZW9tZXRyeS5jb21wdXRlUmVjdGFuZ2xlIiwiUG9seWdvbkdlb21ldHJ5LmNvbXB1dGVSZWN0YW5nbGUgd2FzIGRlcHJlY2F0ZWQgaW4gQ2VzaXVtSlMgMS4xMTAuICBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gQ2VzaXVtSlMgMS4xMTIuIFVzZSBQb2x5Z29uR2VvbWV0cnkuY29tcHV0ZVJlY3RhbmdsZUZyb21Qb3NpdGlvbnMgaW5zdGVhZC4iKTtsZXQgbj14KHQuZ3JhbnVsYXJpdHksTS5SQURJQU5TX1BFUl9ERUdSRUUpLG89eCh0LmFyY1R5cGUsdWUuR0VPREVTSUMpO2lmKG8hPT11ZS5HRU9ERVNJQyYmbyE9PXVlLlJIVU1CKXRocm93IG5ldyBCKCJJbnZhbGlkIGFyY1R5cGUuIFZhbGlkIG9wdGlvbnMgYXJlIEFyY1R5cGUuR0VPREVTSUMgYW5kIEFyY1R5cGUuUkhVTUIuIik7bGV0IHI9dC5wb2x5Z29uSGllcmFyY2h5LGk9eCh0LmVsbGlwc29pZCwkLldHUzg0KTtyZXR1cm4gZEYoci5wb3NpdGlvbnMsaSxvLG4sZSl9O09GPW5ldyBhcjtBRT1uZXcgY3Q7ZnIuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fdmVydGV4Rm9ybWF0LG49dC5fZWxsaXBzb2lkLG89dC5fZ3JhbnVsYXJpdHkscj10Ll9zdFJvdGF0aW9uLGk9dC5fcG9seWdvbkhpZXJhcmNoeSxzPXQuX3BlclBvc2l0aW9uSGVpZ2h0LGY9dC5fY2xvc2VUb3AsdT10Ll9jbG9zZUJvdHRvbSxjPXQuX2FyY1R5cGUsbD10Ll90ZXh0dXJlQ29vcmRpbmF0ZXMscD1oKGwpLGQ9aS5wb3NpdGlvbnM7aWYoZC5sZW5ndGg8MylyZXR1cm47bGV0IG09dC5yZWN0YW5nbGUsXz15ZS5wb2x5Z29uc0Zyb21IaWVyYXJjaHkoaSxwLFJGKG0sZCxuKSwhcyxuLENGKG0sbixjLHMpKSxnPV8uaGllcmFyY2h5LGI9Xy5wb2x5Z29ucyxPPWZ1bmN0aW9uKFApe3JldHVybiBQfSxUPXA/eWUucG9seWdvbnNGcm9tSGllcmFyY2h5KGwsITAsTywhMSxuKS5wb2x5Z29uczp2b2lkIDA7aWYoZy5sZW5ndGg9PT0wKXJldHVybjtsZXQgRT1nWzBdLm91dGVyUmluZyx3PXhGKEUsbSxuLHIpLEM9W10sTj10Ll9oZWlnaHQsST10Ll9leHRydWRlZEhlaWdodCxMPXQuX3BlclBvc2l0aW9uSGVpZ2h0RXh0cnVkZXx8IU0uZXF1YWxzRXBzaWxvbihOLEksMCxNLkVQU0lMT04yKSx2PXtwZXJQb3NpdGlvbkhlaWdodDpzLHZlcnRleEZvcm1hdDplLGdlb21ldHJ5OnZvaWQgMCxyb3RhdGlvbkF4aXM6RUYobSxFLG4pLnBsYW5lLm5vcm1hbCxwcm9qZWN0VG8yZDpTRihtLEUsbiksYm91bmRpbmdSZWN0YW5nbGU6dyxlbGxpcHNvaWQ6bixzdFJvdGF0aW9uOnIsdGV4dHVyZUNvb3JkaW5hdGVzOnZvaWQgMCxib3R0b206ITEsdG9wOiEwLHdhbGw6ITEsZXh0cnVkZTohMSxhcmNUeXBlOmN9LEQ7aWYoTClmb3Iodi5leHRydWRlPSEwLHYudG9wPWYsdi5ib3R0b209dSx2LnNoYWRvd1ZvbHVtZT10Ll9zaGFkb3dWb2x1bWUsdi5vZmZzZXRBdHRyaWJ1dGU9dC5fb2Zmc2V0QXR0cmlidXRlLEQ9MDtEPGIubGVuZ3RoO0QrKyl7bGV0IFA9aEYobixiW0RdLHA/VFtEXTp2b2lkIDAsbyxnW0RdLHMsZix1LGUsYyksRjtmJiZ1PyhGPVAudG9wQW5kQm90dG9tLHYuZ2VvbWV0cnk9eWUuc2NhbGVUb0dlb2RldGljSGVpZ2h0RXh0cnVkZWQoRi5nZW9tZXRyeSxOLEksbixzKSk6Zj8oRj1QLnRvcEFuZEJvdHRvbSxGLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPVNlLnNjYWxlVG9HZW9kZXRpY0hlaWdodChGLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLE4sbiwhcyksdi5nZW9tZXRyeT1GLmdlb21ldHJ5KTp1JiYoRj1QLnRvcEFuZEJvdHRvbSxGLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPVNlLnNjYWxlVG9HZW9kZXRpY0hlaWdodChGLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLEksbiwhMCksdi5nZW9tZXRyeT1GLmdlb21ldHJ5KSwoZnx8dSkmJih2LndhbGw9ITEsRi5nZW9tZXRyeT1RXyh2KSxDLnB1c2goRikpO2xldCBqPVAud2FsbHM7di53YWxsPSEwO2ZvcihsZXQgSD0wO0g8ai5sZW5ndGg7SCsrKXtsZXQgaz1qW0hdO3YuZ2VvbWV0cnk9eWUuc2NhbGVUb0dlb2RldGljSGVpZ2h0RXh0cnVkZWQoay5nZW9tZXRyeSxOLEksbixzKSxrLmdlb21ldHJ5PVFfKHYpLEMucHVzaChrKX19ZWxzZSBmb3IoRD0wO0Q8Yi5sZW5ndGg7RCsrKXtsZXQgUD1uZXcgY28oe2dlb21ldHJ5OnllLmNyZWF0ZUdlb21ldHJ5RnJvbVBvc2l0aW9ucyhuLGJbRF0scD9UW0RdOnZvaWQgMCxvLHMsZSxjKX0pO2lmKFAuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9U2Uuc2NhbGVUb0dlb2RldGljSGVpZ2h0KFAuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsTixuLCFzKSx2Lmdlb21ldHJ5PVAuZ2VvbWV0cnksUC5nZW9tZXRyeT1RXyh2KSxoKHQuX29mZnNldEF0dHJpYnV0ZSkpe2xldCBGPVAuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLGo9dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjEsSD1uZXcgVWludDhBcnJheShGLzMpLmZpbGwoaik7UC5nZW9tZXRyeS5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOkh9KX1DLnB1c2goUCl9bGV0IFU9QmUuY29tYmluZUluc3RhbmNlcyhDKVswXTtVLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPW5ldyBGbG9hdDY0QXJyYXkoVS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyksVS5pbmRpY2VzPUR0LmNyZWF0ZVR5cGVkQXJyYXkoVS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMyxVLmluZGljZXMpO2xldCBBPVUuYXR0cmlidXRlcyxTPXl0LmZyb21WZXJ0aWNlcyhBLnBvc2l0aW9uLnZhbHVlcyk7cmV0dXJuIGUucG9zaXRpb258fGRlbGV0ZSBBLnBvc2l0aW9uLG5ldyBGdCh7YXR0cmlidXRlczpBLGluZGljZXM6VS5pbmRpY2VzLHByaW1pdGl2ZVR5cGU6VS5wcmltaXRpdmVUeXBlLGJvdW5kaW5nU3BoZXJlOlMsb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTtmci5jcmVhdGVTaGFkb3dWb2x1bWU9ZnVuY3Rpb24odCxlLG4pe2xldCBvPXQuX2dyYW51bGFyaXR5LHI9dC5fZWxsaXBzb2lkLGk9ZShvLHIpLHM9bihvLHIpO3JldHVybiBuZXcgZnIoe3BvbHlnb25IaWVyYXJjaHk6dC5fcG9seWdvbkhpZXJhcmNoeSxlbGxpcHNvaWQ6cixzdFJvdGF0aW9uOnQuX3N0Um90YXRpb24sZ3JhbnVsYXJpdHk6byxwZXJQb3NpdGlvbkhlaWdodDohMSxleHRydWRlZEhlaWdodDppLGhlaWdodDpzLHZlcnRleEZvcm1hdDpsdC5QT1NJVElPTl9PTkxZLHNoYWRvd1ZvbHVtZTohMCxhcmNUeXBlOnQuX2FyY1R5cGV9KX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZnIucHJvdG90eXBlLHtyZWN0YW5nbGU6e2dldDpmdW5jdGlvbigpe2lmKCFoKHRoaXMuX3JlY3RhbmdsZSkpe2xldCB0PXRoaXMuX3BvbHlnb25IaWVyYXJjaHkucG9zaXRpb25zO3RoaXMuX3JlY3RhbmdsZT1mci5jb21wdXRlUmVjdGFuZ2xlRnJvbVBvc2l0aW9ucyh0LHRoaXMuX2VsbGlwc29pZCx0aGlzLl9hcmNUeXBlKX1yZXR1cm4gdGhpcy5fcmVjdGFuZ2xlfX0sdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGgodGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cyl8fCh0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzPVBGKHRoaXMpKSx0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzfX19KTtKXz1mcn0pO3ZhciB0eT17fTttZSh0eSx7ZGVmYXVsdDooKT0+TkZ9KTtmdW5jdGlvbiBNRih0LGUpe3JldHVybiBoKGUpJiYodD1KXy51bnBhY2sodCxlKSksdC5fZWxsaXBzb2lkPSQuY2xvbmUodC5fZWxsaXBzb2lkKSxKXy5jcmVhdGVHZW9tZXRyeSh0KX12YXIgTkYsZXk9WigoKT0+e2F0KCk7WnQoKTtiRSgpO05GPU1GfSk7ZnVuY3Rpb24gSUYodCxlLG4sbyxyKXtsZXQgcz15by5mcm9tUG9pbnRzKGUsdCkucHJvamVjdFBvaW50c09udG9QbGFuZShlLHdFKTtTZS5jb21wdXRlV2luZGluZ09yZGVyMkQocyk9PT14by5DTE9DS1dJU0UmJihzLnJldmVyc2UoKSxlPWUuc2xpY2UoKS5yZXZlcnNlKCkpO2xldCB1LGMsbD1lLmxlbmd0aCxwPTA7aWYobylmb3IodT1uZXcgRmxvYXQ2NEFycmF5KGwqMiozKSxjPTA7YzxsO2MrKyl7bGV0IF89ZVtjXSxnPWVbKGMrMSklbF07dVtwKytdPV8ueCx1W3ArK109Xy55LHVbcCsrXT1fLnosdVtwKytdPWcueCx1W3ArK109Zy55LHVbcCsrXT1nLnp9ZWxzZXtsZXQgXz0wO2lmKHI9PT11ZS5HRU9ERVNJQylmb3IoYz0wO2M8bDtjKyspXys9eWUuc3ViZGl2aWRlTGluZUNvdW50KGVbY10sZVsoYysxKSVsXSxuKTtlbHNlIGlmKHI9PT11ZS5SSFVNQilmb3IoYz0wO2M8bDtjKyspXys9eWUuc3ViZGl2aWRlUmh1bWJMaW5lQ291bnQodCxlW2NdLGVbKGMrMSklbF0sbik7Zm9yKHU9bmV3IEZsb2F0NjRBcnJheShfKjMpLGM9MDtjPGw7YysrKXtsZXQgZztyPT09dWUuR0VPREVTSUM/Zz15ZS5zdWJkaXZpZGVMaW5lKGVbY10sZVsoYysxKSVsXSxuLHZkKTpyPT09dWUuUkhVTUImJihnPXllLnN1YmRpdmlkZVJodW1iTGluZSh0LGVbY10sZVsoYysxKSVsXSxuLHZkKSk7bGV0IGI9Zy5sZW5ndGg7Zm9yKGxldCBPPTA7TzxiOysrTyl1W3ArK109Z1tPXX19bD11Lmxlbmd0aC8zO2xldCBkPWwqMixtPUR0LmNyZWF0ZVR5cGVkQXJyYXkobCxkKTtmb3IocD0wLGM9MDtjPGwtMTtjKyspbVtwKytdPWMsbVtwKytdPWMrMTtyZXR1cm4gbVtwKytdPWwtMSxtW3ArK109MCxuZXcgY28oe2dlb21ldHJ5Om5ldyBGdCh7YXR0cmlidXRlczpuZXcgcmUoe3Bvc2l0aW9uOm5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6dX0pfSksaW5kaWNlczptLHByaW1pdGl2ZVR5cGU6THQuTElORVN9KX0pfWZ1bmN0aW9uIHZGKHQsZSxuLG8scil7bGV0IHM9eW8uZnJvbVBvaW50cyhlLHQpLnByb2plY3RQb2ludHNPbnRvUGxhbmUoZSx3RSk7U2UuY29tcHV0ZVdpbmRpbmdPcmRlcjJEKHMpPT09eG8uQ0xPQ0tXSVNFJiYocy5yZXZlcnNlKCksZT1lLnNsaWNlKCkucmV2ZXJzZSgpKTtsZXQgdSxjLGw9ZS5sZW5ndGgscD1uZXcgQXJyYXkobCksZD0wO2lmKG8pZm9yKHU9bmV3IEZsb2F0NjRBcnJheShsKjIqMyoyKSxjPTA7YzxsOysrYyl7cFtjXT1kLzM7bGV0IGI9ZVtjXSxPPWVbKGMrMSklbF07dVtkKytdPWIueCx1W2QrK109Yi55LHVbZCsrXT1iLnosdVtkKytdPU8ueCx1W2QrK109Ty55LHVbZCsrXT1PLnp9ZWxzZXtsZXQgYj0wO2lmKHI9PT11ZS5HRU9ERVNJQylmb3IoYz0wO2M8bDtjKyspYis9eWUuc3ViZGl2aWRlTGluZUNvdW50KGVbY10sZVsoYysxKSVsXSxuKTtlbHNlIGlmKHI9PT11ZS5SSFVNQilmb3IoYz0wO2M8bDtjKyspYis9eWUuc3ViZGl2aWRlUmh1bWJMaW5lQ291bnQodCxlW2NdLGVbKGMrMSklbF0sbik7Zm9yKHU9bmV3IEZsb2F0NjRBcnJheShiKjMqMiksYz0wO2M8bDsrK2Mpe3BbY109ZC8zO2xldCBPO3I9PT11ZS5HRU9ERVNJQz9PPXllLnN1YmRpdmlkZUxpbmUoZVtjXSxlWyhjKzEpJWxdLG4sdmQpOnI9PT11ZS5SSFVNQiYmKE89eWUuc3ViZGl2aWRlUmh1bWJMaW5lKHQsZVtjXSxlWyhjKzEpJWxdLG4sdmQpKTtsZXQgVD1PLmxlbmd0aDtmb3IobGV0IEU9MDtFPFQ7KytFKXVbZCsrXT1PW0VdfX1sPXUubGVuZ3RoLygzKjIpO2xldCBtPXAubGVuZ3RoLF89KGwqMittKSoyLGc9RHQuY3JlYXRlVHlwZWRBcnJheShsK20sXyk7Zm9yKGQ9MCxjPTA7YzxsOysrYylnW2QrK109YyxnW2QrK109KGMrMSklbCxnW2QrK109YytsLGdbZCsrXT0oYysxKSVsK2w7Zm9yKGM9MDtjPG07YysrKXtsZXQgYj1wW2NdO2dbZCsrXT1iLGdbZCsrXT1iK2x9cmV0dXJuIG5ldyBjbyh7Z2VvbWV0cnk6bmV3IEZ0KHthdHRyaWJ1dGVzOm5ldyByZSh7cG9zaXRpb246bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp1fSl9KSxpbmRpY2VzOmcscHJpbWl0aXZlVHlwZTpMdC5MSU5FU30pfSl9ZnVuY3Rpb24gYmModCl7aWYoeS50eXBlT2Yub2JqZWN0KCJvcHRpb25zIix0KSx5LnR5cGVPZi5vYmplY3QoIm9wdGlvbnMucG9seWdvbkhpZXJhcmNoeSIsdC5wb2x5Z29uSGllcmFyY2h5KSx0LnBlclBvc2l0aW9uSGVpZ2h0JiZoKHQuaGVpZ2h0KSl0aHJvdyBuZXcgQigiQ2Fubm90IHVzZSBib3RoIG9wdGlvbnMucGVyUG9zaXRpb25IZWlnaHQgYW5kIG9wdGlvbnMuaGVpZ2h0Iik7aWYoaCh0LmFyY1R5cGUpJiZ0LmFyY1R5cGUhPT11ZS5HRU9ERVNJQyYmdC5hcmNUeXBlIT09dWUuUkhVTUIpdGhyb3cgbmV3IEIoIkludmFsaWQgYXJjVHlwZS4gVmFsaWQgb3B0aW9ucyBhcmUgQXJjVHlwZS5HRU9ERVNJQyBhbmQgQXJjVHlwZS5SSFVNQi4iKTtsZXQgZT10LnBvbHlnb25IaWVyYXJjaHksbj14KHQuZWxsaXBzb2lkLCQuV0dTODQpLG89eCh0LmdyYW51bGFyaXR5LE0uUkFESUFOU19QRVJfREVHUkVFKSxyPXgodC5wZXJQb3NpdGlvbkhlaWdodCwhMSksaT1yJiZoKHQuZXh0cnVkZWRIZWlnaHQpLHM9eCh0LmFyY1R5cGUsdWUuR0VPREVTSUMpLGY9eCh0LmhlaWdodCwwKSx1PXgodC5leHRydWRlZEhlaWdodCxmKTtpZighaSl7bGV0IGM9TWF0aC5tYXgoZix1KTt1PU1hdGgubWluKGYsdSksZj1jfXRoaXMuX2VsbGlwc29pZD0kLmNsb25lKG4pLHRoaXMuX2dyYW51bGFyaXR5PW8sdGhpcy5faGVpZ2h0PWYsdGhpcy5fZXh0cnVkZWRIZWlnaHQ9dSx0aGlzLl9hcmNUeXBlPXMsdGhpcy5fcG9seWdvbkhpZXJhcmNoeT1lLHRoaXMuX3BlclBvc2l0aW9uSGVpZ2h0PXIsdGhpcy5fcGVyUG9zaXRpb25IZWlnaHRFeHRydWRlPWksdGhpcy5fb2Zmc2V0QXR0cmlidXRlPXQub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVBvbHlnb25PdXRsaW5lR2VvbWV0cnkiLHRoaXMucGFja2VkTGVuZ3RoPXllLmNvbXB1dGVIaWVyYXJjaHlQYWNrZWRMZW5ndGgoZSxhKSskLnBhY2tlZExlbmd0aCs4fXZhciB3RSx2ZCxERixMRixueSxURT1aKCgpPT57ZmMoKTtQZSgpO1V0KCk7WXQoKTtEZSgpO0l0KCk7YXQoKTtIdCgpO1p0KCk7cGEoKTtYZSgpO1llKCk7YW4oKTtzYygpO0ZvKCk7c2koKTskZSgpO1d0KCk7TGYoKTtxcigpO3RuKCk7bGMoKTt3RT1bXSx2ZD1bXTtiYy5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj14KG4sMCksbj15ZS5wYWNrUG9seWdvbkhpZXJhcmNoeSh0Ll9wb2x5Z29uSGllcmFyY2h5LGUsbixhKSwkLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9JC5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX2hlaWdodCxlW24rK109dC5fZXh0cnVkZWRIZWlnaHQsZVtuKytdPXQuX2dyYW51bGFyaXR5LGVbbisrXT10Ll9wZXJQb3NpdGlvbkhlaWdodEV4dHJ1ZGU/MTowLGVbbisrXT10Ll9wZXJQb3NpdGlvbkhlaWdodD8xOjAsZVtuKytdPXQuX2FyY1R5cGUsZVtuKytdPXgodC5fb2Zmc2V0QXR0cmlidXRlLC0xKSxlW25dPXQucGFja2VkTGVuZ3RoLGV9O0RGPSQuY2xvbmUoJC5VTklUX1NQSEVSRSksTEY9e3BvbHlnb25IaWVyYXJjaHk6e319O2JjLnVucGFjaz1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJhcnJheSIsdCksZT14KGUsMCk7bGV0IG89eWUudW5wYWNrUG9seWdvbkhpZXJhcmNoeSh0LGUsYSk7ZT1vLnN0YXJ0aW5nSW5kZXgsZGVsZXRlIG8uc3RhcnRpbmdJbmRleDtsZXQgcj0kLnVucGFjayh0LGUsREYpO2UrPSQucGFja2VkTGVuZ3RoO2xldCBpPXRbZSsrXSxzPXRbZSsrXSxmPXRbZSsrXSx1PXRbZSsrXT09PTEsYz10W2UrK109PT0xLGw9dFtlKytdLHA9dFtlKytdLGQ9dFtlXTtyZXR1cm4gaChuKXx8KG49bmV3IGJjKExGKSksbi5fcG9seWdvbkhpZXJhcmNoeT1vLG4uX2VsbGlwc29pZD0kLmNsb25lKHIsbi5fZWxsaXBzb2lkKSxuLl9oZWlnaHQ9aSxuLl9leHRydWRlZEhlaWdodD1zLG4uX2dyYW51bGFyaXR5PWYsbi5fcGVyUG9zaXRpb25IZWlnaHQ9YyxuLl9wZXJQb3NpdGlvbkhlaWdodEV4dHJ1ZGU9dSxuLl9hcmNUeXBlPWwsbi5fb2Zmc2V0QXR0cmlidXRlPXA9PT0tMT92b2lkIDA6cCxuLnBhY2tlZExlbmd0aD1kLG59O2JjLmZyb21Qb3NpdGlvbnM9ZnVuY3Rpb24odCl7dD14KHQseC5FTVBUWV9PQkpFQ1QpLHkuZGVmaW5lZCgib3B0aW9ucy5wb3NpdGlvbnMiLHQucG9zaXRpb25zKTtsZXQgZT17cG9seWdvbkhpZXJhcmNoeTp7cG9zaXRpb25zOnQucG9zaXRpb25zfSxoZWlnaHQ6dC5oZWlnaHQsZXh0cnVkZWRIZWlnaHQ6dC5leHRydWRlZEhlaWdodCxlbGxpcHNvaWQ6dC5lbGxpcHNvaWQsZ3JhbnVsYXJpdHk6dC5ncmFudWxhcml0eSxwZXJQb3NpdGlvbkhlaWdodDp0LnBlclBvc2l0aW9uSGVpZ2h0LGFyY1R5cGU6dC5hcmNUeXBlLG9mZnNldEF0dHJpYnV0ZTp0Lm9mZnNldEF0dHJpYnV0ZX07cmV0dXJuIG5ldyBiYyhlKX07YmMuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fZWxsaXBzb2lkLG49dC5fZ3JhbnVsYXJpdHksbz10Ll9wb2x5Z29uSGllcmFyY2h5LHI9dC5fcGVyUG9zaXRpb25IZWlnaHQsaT10Ll9hcmNUeXBlLHM9eWUucG9seWdvbk91dGxpbmVzRnJvbUhpZXJhcmNoeShvLCFyLGUpO2lmKHMubGVuZ3RoPT09MClyZXR1cm47bGV0IGYsdT1bXSxjPU0uY2hvcmRMZW5ndGgobixlLm1heGltdW1SYWRpdXMpLGw9dC5faGVpZ2h0LHA9dC5fZXh0cnVkZWRIZWlnaHQsZD10Ll9wZXJQb3NpdGlvbkhlaWdodEV4dHJ1ZGV8fCFNLmVxdWFsc0Vwc2lsb24obCxwLDAsTS5FUFNJTE9OMiksbSxfO2lmKGQpZm9yKF89MDtfPHMubGVuZ3RoO18rKyl7aWYoZj12RihlLHNbX10sYyxyLGkpLGYuZ2VvbWV0cnk9eWUuc2NhbGVUb0dlb2RldGljSGVpZ2h0RXh0cnVkZWQoZi5nZW9tZXRyeSxsLHAsZSxyKSxoKHQuX29mZnNldEF0dHJpYnV0ZSkpe2xldCBPPWYuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLzMsVD1uZXcgVWludDhBcnJheShPKTt0Ll9vZmZzZXRBdHRyaWJ1dGU9PT1hZS5UT1A/VD1ULmZpbGwoMSwwLE8vMik6KG09dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjEsVD1ULmZpbGwobSkpLGYuZ2VvbWV0cnkuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpUfSl9dS5wdXNoKGYpfWVsc2UgZm9yKF89MDtfPHMubGVuZ3RoO18rKyl7aWYoZj1JRihlLHNbX10sYyxyLGkpLGYuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9U2Uuc2NhbGVUb0dlb2RldGljSGVpZ2h0KGYuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsbCxlLCFyKSxoKHQuX29mZnNldEF0dHJpYnV0ZSkpe2xldCBPPWYuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoO209dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjE7bGV0IFQ9bmV3IFVpbnQ4QXJyYXkoTy8zKS5maWxsKG0pO2YuZ2VvbWV0cnkuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpUfSl9dS5wdXNoKGYpfWxldCBnPUJlLmNvbWJpbmVJbnN0YW5jZXModSlbMF0sYj15dC5mcm9tVmVydGljZXMoZy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyk7cmV0dXJuIG5ldyBGdCh7YXR0cmlidXRlczpnLmF0dHJpYnV0ZXMsaW5kaWNlczpnLmluZGljZXMscHJpbWl0aXZlVHlwZTpnLnByaW1pdGl2ZVR5cGUsYm91bmRpbmdTcGhlcmU6YixvZmZzZXRBdHRyaWJ1dGU6dC5fb2Zmc2V0QXR0cmlidXRlfSl9O255PWJjfSk7dmFyIG95PXt9O21lKG95LHtkZWZhdWx0OigpPT5CRn0pO2Z1bmN0aW9uIEZGKHQsZSl7cmV0dXJuIGgoZSkmJih0PW55LnVucGFjayh0LGUpKSx0Ll9lbGxpcHNvaWQ9JC5jbG9uZSh0Ll9lbGxpcHNvaWQpLG55LmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBCRixyeT1aKCgpPT57YXQoKTtadCgpO1RFKCk7QkY9RkZ9KTtmdW5jdGlvbiBpeSh0LGUsbil7cmV0dXJuIG48MCYmKG4rPTEpLG4+MSYmKG4tPTEpLG4qNjwxP3QrKGUtdCkqNipuOm4qMjwxP2U6biozPDI/dCsoZS10KSooMi8zLW4pKjY6dH1mdW5jdGlvbiBxKHQsZSxuLG8pe3RoaXMucmVkPXgodCwxKSx0aGlzLmdyZWVuPXgoZSwxKSx0aGlzLmJsdWU9eChuLDEpLHRoaXMuYWxwaGE9eChvLDEpfXZhciBzeSxjeSxIaSxVRixWRixrRixHRixzZSxRZj1aKCgpPT57WXQoKTtJdCgpO2F0KCk7cW0oKTtXdCgpO3EuZnJvbUNhcnRlc2lhbjQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLGgoZSk/KGUucmVkPXQueCxlLmdyZWVuPXQueSxlLmJsdWU9dC56LGUuYWxwaGE9dC53LGUpOm5ldyBxKHQueCx0LnksdC56LHQudyl9O3EuZnJvbUJ5dGVzPWZ1bmN0aW9uKHQsZSxuLG8scil7cmV0dXJuIHQ9cS5ieXRlVG9GbG9hdCh4KHQsMjU1KSksZT1xLmJ5dGVUb0Zsb2F0KHgoZSwyNTUpKSxuPXEuYnl0ZVRvRmxvYXQoeChuLDI1NSkpLG89cS5ieXRlVG9GbG9hdCh4KG8sMjU1KSksaChyKT8oci5yZWQ9dCxyLmdyZWVuPWUsci5ibHVlPW4sci5hbHBoYT1vLHIpOm5ldyBxKHQsZSxuLG8pfTtxLmZyb21BbHBoYT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY29sb3IiLHQpLHkudHlwZU9mLm51bWJlcigiYWxwaGEiLGUpLGgobik/KG4ucmVkPXQucmVkLG4uZ3JlZW49dC5ncmVlbixuLmJsdWU9dC5ibHVlLG4uYWxwaGE9ZSxuKTpuZXcgcSh0LnJlZCx0LmdyZWVuLHQuYmx1ZSxlKX07enMuc3VwcG9ydHNUeXBlZEFycmF5cygpJiYoc3k9bmV3IEFycmF5QnVmZmVyKDQpLGN5PW5ldyBVaW50MzJBcnJheShzeSksSGk9bmV3IFVpbnQ4QXJyYXkoc3kpKTtxLmZyb21SZ2JhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGN5WzBdPXQscS5mcm9tQnl0ZXMoSGlbMF0sSGlbMV0sSGlbMl0sSGlbM10sZSl9O3EuZnJvbUhzbD1mdW5jdGlvbih0LGUsbixvLHIpe3Q9eCh0LDApJTEsZT14KGUsMCksbj14KG4sMCksbz14KG8sMSk7bGV0IGk9bixzPW4sZj1uO2lmKGUhPT0wKXtsZXQgdTtuPC41P3U9biooMStlKTp1PW4rZS1uKmU7bGV0IGM9MipuLXU7aT1peShjLHUsdCsxLzMpLHM9aXkoYyx1LHQpLGY9aXkoYyx1LHQtMS8zKX1yZXR1cm4gaChyKT8oci5yZWQ9aSxyLmdyZWVuPXMsci5ibHVlPWYsci5hbHBoYT1vLHIpOm5ldyBxKGkscyxmLG8pfTtxLmZyb21SYW5kb209ZnVuY3Rpb24odCxlKXt0PXgodCx4LkVNUFRZX09CSkVDVCk7bGV0IG49dC5yZWQ7aWYoIWgobikpe2xldCBzPXgodC5taW5pbXVtUmVkLDApLGY9eCh0Lm1heGltdW1SZWQsMSk7eS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIm1pbmltdW1SZWQiLHMsZiksbj1zK00ubmV4dFJhbmRvbU51bWJlcigpKihmLXMpfWxldCBvPXQuZ3JlZW47aWYoIWgobykpe2xldCBzPXgodC5taW5pbXVtR3JlZW4sMCksZj14KHQubWF4aW11bUdyZWVuLDEpO3kudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJtaW5pbXVtR3JlZW4iLHMsZiksbz1zK00ubmV4dFJhbmRvbU51bWJlcigpKihmLXMpfWxldCByPXQuYmx1ZTtpZighaChyKSl7bGV0IHM9eCh0Lm1pbmltdW1CbHVlLDApLGY9eCh0Lm1heGltdW1CbHVlLDEpO3kudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJtaW5pbXVtQmx1ZSIscyxmKSxyPXMrTS5uZXh0UmFuZG9tTnVtYmVyKCkqKGYtcyl9bGV0IGk9dC5hbHBoYTtpZighaChpKSl7bGV0IHM9eCh0Lm1pbmltdW1BbHBoYSwwKSxmPXgodC5tYXhpbXVtQWxwaGEsMSk7eS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIm1pbnVtdW1BbHBoYSIscyxmKSxpPXMrTS5uZXh0UmFuZG9tTnVtYmVyKCkqKGYtcyl9cmV0dXJuIGgoZSk/KGUucmVkPW4sZS5ncmVlbj1vLGUuYmx1ZT1yLGUuYWxwaGE9aSxlKTpuZXcgcShuLG8scixpKX07VUY9L14jKFswLTlhLWZdKShbMC05YS1mXSkoWzAtOWEtZl0pKFswLTlhLWZdKT8kL2ksVkY9L14jKFswLTlhLWZdezJ9KShbMC05YS1mXXsyfSkoWzAtOWEtZl17Mn0pKFswLTlhLWZdezJ9KT8kL2ksa0Y9L15yZ2JhP1xzKlwoXHMqKFswLTkuXSslPylccypbLFxzXStccyooWzAtOS5dKyU/KVxzKlssXHNdK1xzKihbMC05Ll0rJT8pKD86XHMqWyxccy9dK1xzKihbMC05Ll0rKSk/XHMqXCkkL2ksR0Y9L15oc2xhP1xzKlwoXHMqKFswLTkuXSspXHMqWyxcc10rXHMqKFswLTkuXSslKVxzKlssXHNdK1xzKihbMC05Ll0rJSkoPzpccypbLFxzL10rXHMqKFswLTkuXSspKT9ccypcKSQvaTtxLmZyb21Dc3NDb2xvclN0cmluZz1mdW5jdGlvbih0LGUpe3kudHlwZU9mLnN0cmluZygiY29sb3IiLHQpLGgoZSl8fChlPW5ldyBxKSx0PXQudHJpbSgpO2xldCBuPXFbdC50b1VwcGVyQ2FzZSgpXTtpZihoKG4pKXJldHVybiBxLmNsb25lKG4sZSksZTtsZXQgbz1VRi5leGVjKHQpO3JldHVybiBvIT09bnVsbD8oZS5yZWQ9cGFyc2VJbnQob1sxXSwxNikvMTUsZS5ncmVlbj1wYXJzZUludChvWzJdLDE2KS8xNSxlLmJsdWU9cGFyc2VJbnQob1szXSwxNikvMTUsZS5hbHBoYT1wYXJzZUludCh4KG9bNF0sImYiKSwxNikvMTUsZSk6KG89VkYuZXhlYyh0KSxvIT09bnVsbD8oZS5yZWQ9cGFyc2VJbnQob1sxXSwxNikvMjU1LGUuZ3JlZW49cGFyc2VJbnQob1syXSwxNikvMjU1LGUuYmx1ZT1wYXJzZUludChvWzNdLDE2KS8yNTUsZS5hbHBoYT1wYXJzZUludCh4KG9bNF0sImZmIiksMTYpLzI1NSxlKToobz1rRi5leGVjKHQpLG8hPT1udWxsPyhlLnJlZD1wYXJzZUZsb2F0KG9bMV0pLyhvWzFdLnN1YnN0cigtMSk9PT0iJSI/MTAwOjI1NSksZS5ncmVlbj1wYXJzZUZsb2F0KG9bMl0pLyhvWzJdLnN1YnN0cigtMSk9PT0iJSI/MTAwOjI1NSksZS5ibHVlPXBhcnNlRmxvYXQob1szXSkvKG9bM10uc3Vic3RyKC0xKT09PSIlIj8xMDA6MjU1KSxlLmFscGhhPXBhcnNlRmxvYXQoeChvWzRdLCIxLjAiKSksZSk6KG89R0YuZXhlYyh0KSxvIT09bnVsbD9xLmZyb21Ic2wocGFyc2VGbG9hdChvWzFdKS8zNjAscGFyc2VGbG9hdChvWzJdKS8xMDAscGFyc2VGbG9hdChvWzNdKS8xMDAscGFyc2VGbG9hdCh4KG9bNF0sIjEuMCIpKSxlKTooZT12b2lkIDAsZSkpKSl9O3EucGFja2VkTGVuZ3RoPTQ7cS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj14KG4sMCksZVtuKytdPXQucmVkLGVbbisrXT10LmdyZWVuLGVbbisrXT10LmJsdWUsZVtuXT10LmFscGhhLGV9O3EudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJhcnJheSIsdCksZT14KGUsMCksaChuKXx8KG49bmV3IHEpLG4ucmVkPXRbZSsrXSxuLmdyZWVuPXRbZSsrXSxuLmJsdWU9dFtlKytdLG4uYWxwaGE9dFtlXSxufTtxLmJ5dGVUb0Zsb2F0PWZ1bmN0aW9uKHQpe3JldHVybiB0LzI1NX07cS5mbG9hdFRvQnl0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdD09PTE/MjU1OnQqMjU2fDB9O3EuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlLnJlZD10LnJlZCxlLmdyZWVuPXQuZ3JlZW4sZS5ibHVlPXQuYmx1ZSxlLmFscGhhPXQuYWxwaGEsZSk6bmV3IHEodC5yZWQsdC5ncmVlbix0LmJsdWUsdC5hbHBoYSl9O3EuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZ0LnJlZD09PWUucmVkJiZ0LmdyZWVuPT09ZS5ncmVlbiYmdC5ibHVlPT09ZS5ibHVlJiZ0LmFscGhhPT09ZS5hbHBoYX07cS5lcXVhbHNBcnJheT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQucmVkPT09ZVtuXSYmdC5ncmVlbj09PWVbbisxXSYmdC5ibHVlPT09ZVtuKzJdJiZ0LmFscGhhPT09ZVtuKzNdfTtxLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gcS5jbG9uZSh0aGlzLHQpfTtxLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIHEuZXF1YWxzKHRoaXMsdCl9O3EucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcz09PXR8fGgodCkmJk1hdGguYWJzKHRoaXMucmVkLXQucmVkKTw9ZSYmTWF0aC5hYnModGhpcy5ncmVlbi10LmdyZWVuKTw9ZSYmTWF0aC5hYnModGhpcy5ibHVlLXQuYmx1ZSk8PWUmJk1hdGguYWJzKHRoaXMuYWxwaGEtdC5hbHBoYSk8PWV9O3EucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXMucmVkfSwgJHt0aGlzLmdyZWVufSwgJHt0aGlzLmJsdWV9LCAke3RoaXMuYWxwaGF9KWB9O3EucHJvdG90eXBlLnRvQ3NzQ29sb3JTdHJpbmc9ZnVuY3Rpb24oKXtsZXQgdD1xLmZsb2F0VG9CeXRlKHRoaXMucmVkKSxlPXEuZmxvYXRUb0J5dGUodGhpcy5ncmVlbiksbj1xLmZsb2F0VG9CeXRlKHRoaXMuYmx1ZSk7cmV0dXJuIHRoaXMuYWxwaGE9PT0xP2ByZ2IoJHt0fSwke2V9LCR7bn0pYDpgcmdiYSgke3R9LCR7ZX0sJHtufSwke3RoaXMuYWxwaGF9KWB9O3EucHJvdG90eXBlLnRvQ3NzSGV4U3RyaW5nPWZ1bmN0aW9uKCl7bGV0IHQ9cS5mbG9hdFRvQnl0ZSh0aGlzLnJlZCkudG9TdHJpbmcoMTYpO3QubGVuZ3RoPDImJih0PWAwJHt0fWApO2xldCBlPXEuZmxvYXRUb0J5dGUodGhpcy5ncmVlbikudG9TdHJpbmcoMTYpO2UubGVuZ3RoPDImJihlPWAwJHtlfWApO2xldCBuPXEuZmxvYXRUb0J5dGUodGhpcy5ibHVlKS50b1N0cmluZygxNik7aWYobi5sZW5ndGg8MiYmKG49YDAke259YCksdGhpcy5hbHBoYTwxKXtsZXQgbz1xLmZsb2F0VG9CeXRlKHRoaXMuYWxwaGEpLnRvU3RyaW5nKDE2KTtyZXR1cm4gby5sZW5ndGg8MiYmKG89YDAke299YCksYCMke3R9JHtlfSR7bn0ke299YH1yZXR1cm5gIyR7dH0ke2V9JHtufWB9O3EucHJvdG90eXBlLnRvQnl0ZXM9ZnVuY3Rpb24odCl7bGV0IGU9cS5mbG9hdFRvQnl0ZSh0aGlzLnJlZCksbj1xLmZsb2F0VG9CeXRlKHRoaXMuZ3JlZW4pLG89cS5mbG9hdFRvQnl0ZSh0aGlzLmJsdWUpLHI9cS5mbG9hdFRvQnl0ZSh0aGlzLmFscGhhKTtyZXR1cm4gaCh0KT8odFswXT1lLHRbMV09bix0WzJdPW8sdFszXT1yLHQpOltlLG4sbyxyXX07cS5wcm90b3R5cGUudG9SZ2JhPWZ1bmN0aW9uKCl7cmV0dXJuIEhpWzBdPXEuZmxvYXRUb0J5dGUodGhpcy5yZWQpLEhpWzFdPXEuZmxvYXRUb0J5dGUodGhpcy5ncmVlbiksSGlbMl09cS5mbG9hdFRvQnl0ZSh0aGlzLmJsdWUpLEhpWzNdPXEuZmxvYXRUb0J5dGUodGhpcy5hbHBoYSksY3lbMF19O3EucHJvdG90eXBlLmJyaWdodGVuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm51bWJlcigibWFnbml0dWRlIix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygibWFnbml0dWRlIix0LDApLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSx0PTEtdCxlLnJlZD0xLSgxLXRoaXMucmVkKSp0LGUuZ3JlZW49MS0oMS10aGlzLmdyZWVuKSp0LGUuYmx1ZT0xLSgxLXRoaXMuYmx1ZSkqdCxlLmFscGhhPXRoaXMuYWxwaGEsZX07cS5wcm90b3R5cGUuZGFya2VuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm51bWJlcigibWFnbml0dWRlIix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygibWFnbml0dWRlIix0LDApLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSx0PTEtdCxlLnJlZD10aGlzLnJlZCp0LGUuZ3JlZW49dGhpcy5ncmVlbip0LGUuYmx1ZT10aGlzLmJsdWUqdCxlLmFscGhhPXRoaXMuYWxwaGEsZX07cS5wcm90b3R5cGUud2l0aEFscGhhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHEuZnJvbUFscGhhKHRoaXMsdCxlKX07cS5hZGQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLnJlZD10LnJlZCtlLnJlZCxuLmdyZWVuPXQuZ3JlZW4rZS5ncmVlbixuLmJsdWU9dC5ibHVlK2UuYmx1ZSxuLmFscGhhPXQuYWxwaGErZS5hbHBoYSxufTtxLnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi5yZWQ9dC5yZWQtZS5yZWQsbi5ncmVlbj10LmdyZWVuLWUuZ3JlZW4sbi5ibHVlPXQuYmx1ZS1lLmJsdWUsbi5hbHBoYT10LmFscGhhLWUuYWxwaGEsbn07cS5tdWx0aXBseT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ucmVkPXQucmVkKmUucmVkLG4uZ3JlZW49dC5ncmVlbiplLmdyZWVuLG4uYmx1ZT10LmJsdWUqZS5ibHVlLG4uYWxwaGE9dC5hbHBoYSplLmFscGhhLG59O3EuZGl2aWRlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi5yZWQ9dC5yZWQvZS5yZWQsbi5ncmVlbj10LmdyZWVuL2UuZ3JlZW4sbi5ibHVlPXQuYmx1ZS9lLmJsdWUsbi5hbHBoYT10LmFscGhhL2UuYWxwaGEsbn07cS5tb2Q9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLnJlZD10LnJlZCVlLnJlZCxuLmdyZWVuPXQuZ3JlZW4lZS5ncmVlbixuLmJsdWU9dC5ibHVlJWUuYmx1ZSxuLmFscGhhPXQuYWxwaGElZS5hbHBoYSxufTtxLmxlcnA9ZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgic3RhcnQiLHQpLHkudHlwZU9mLm9iamVjdCgiZW5kIixlKSx5LnR5cGVPZi5udW1iZXIoInQiLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKSxvLnJlZD1NLmxlcnAodC5yZWQsZS5yZWQsbiksby5ncmVlbj1NLmxlcnAodC5ncmVlbixlLmdyZWVuLG4pLG8uYmx1ZT1NLmxlcnAodC5ibHVlLGUuYmx1ZSxuKSxvLmFscGhhPU0ubGVycCh0LmFscGhhLGUuYWxwaGEsbiksb307cS5tdWx0aXBseUJ5U2NhbGFyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjb2xvciIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLnJlZD10LnJlZCplLG4uZ3JlZW49dC5ncmVlbiplLG4uYmx1ZT10LmJsdWUqZSxuLmFscGhhPXQuYWxwaGEqZSxufTtxLmRpdmlkZUJ5U2NhbGFyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjb2xvciIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLnJlZD10LnJlZC9lLG4uZ3JlZW49dC5ncmVlbi9lLG4uYmx1ZT10LmJsdWUvZSxuLmFscGhhPXQuYWxwaGEvZSxufTtxLkFMSUNFQkxVRT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjBGOEZGIikpO3EuQU5USVFVRVdISVRFPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGQUVCRDciKSk7cS5BUVVBPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMEZGRkYiKSk7cS5BUVVBTUFSSU5FPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM3RkZGRDQiKSk7cS5BWlVSRT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjBGRkZGIikpO3EuQkVJR0U9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0Y1RjVEQyIpKTtxLkJJU1FVRT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZFNEM0IikpO3EuQkxBQ0s9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiIzAwMDAwMCIpKTtxLkJMQU5DSEVEQUxNT05EPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkVCQ0QiKSk7cS5CTFVFPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDAwRkYiKSk7cS5CTFVFVklPTEVUPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4QTJCRTIiKSk7cS5CUk9XTj1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQTUyQTJBIikpO3EuQlVSTFlXT09EPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNERUI4ODciKSk7cS5DQURFVEJMVUU9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiIzVGOUVBMCIpKTtxLkNIQVJUUkVVU0U9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiIzdGRkYwMCIpKTtxLkNIT0NPTEFURT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRDI2OTFFIikpO3EuQ09SQUw9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGN0Y1MCIpKTtxLkNPUk5GTE9XRVJCTFVFPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM2NDk1RUQiKSk7cS5DT1JOU0lMSz1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGOERDIikpO3EuQ1JJTVNPTj1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjREMxNDNDIikpO3EuQ1lBTj1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDBGRkZGIikpO3EuREFSS0JMVUU9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiIzAwMDA4QiIpKTtxLkRBUktDWUFOPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDhCOEIiKSk7cS5EQVJLR09MREVOUk9EPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNCODg2MEIiKSk7cS5EQVJLR1JBWT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQTlBOUE5IikpO3EuREFSS0dSRUVOPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDY0MDAiKSk7cS5EQVJLR1JFWT1xLkRBUktHUkFZO3EuREFSS0tIQUtJPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNCREI3NkIiKSk7cS5EQVJLTUFHRU5UQT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjOEIwMDhCIikpO3EuREFSS09MSVZFR1JFRU49T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiIzU1NkIyRiIpKTtxLkRBUktPUkFOR0U9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGOEMwMCIpKTtxLkRBUktPUkNISUQ9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiIzk5MzJDQyIpKTtxLkRBUktSRUQ9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiIzhCMDAwMCIpKTtxLkRBUktTQUxNT049T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0U5OTY3QSIpKTtxLkRBUktTRUFHUkVFTj1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjOEZCQzhGIikpO3EuREFSS1NMQVRFQkxVRT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjNDgzRDhCIikpO3EuREFSS1NMQVRFR1JBWT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMkY0RjRGIikpO3EuREFSS1NMQVRFR1JFWT1xLkRBUktTTEFURUdSQVk7cS5EQVJLVFVSUVVPSVNFPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMENFRDEiKSk7cS5EQVJLVklPTEVUPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM5NDAwRDMiKSk7cS5ERUVQUElOSz1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkYxNDkzIikpO3EuREVFUFNLWUJMVUU9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiIzAwQkZGRiIpKTtxLkRJTUdSQVk9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiIzY5Njk2OSIpKTtxLkRJTUdSRVk9cS5ESU1HUkFZO3EuRE9ER0VSQkxVRT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMUU5MEZGIikpO3EuRklSRUJSSUNLPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNCMjIyMjIiKSk7cS5GTE9SQUxXSElURT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGQUYwIikpO3EuRk9SRVNUR1JFRU49T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiIzIyOEIyMiIpKTtxLkZVQ0hTSUE9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGMDBGRiIpKTtxLkdBSU5TQk9STz1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRENEQ0RDIikpO3EuR0hPU1RXSElURT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjhGOEZGIikpO3EuR09MRD1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZENzAwIikpO3EuR09MREVOUk9EPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEQUE1MjAiKSk7cS5HUkFZPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4MDgwODAiKSk7cS5HUkVFTj1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDA4MDAwIikpO3EuR1JFRU5ZRUxMT1c9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0FERkYyRiIpKTtxLkdSRVk9cS5HUkFZO3EuSE9ORVlERVc9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0YwRkZGMCIpKTtxLkhPVFBJTks9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGNjlCNCIpKTtxLklORElBTlJFRD1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQ0Q1QzVDIikpO3EuSU5ESUdPPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM0QjAwODIiKSk7cS5JVk9SWT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGRkYwIikpO3EuS0hBS0k9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0YwRTY4QyIpKTtxLkxBVkVOREVSPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNFNkU2RkEiKSk7cS5MQVZFTkRBUl9CTFVTSD1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGMEY1IikpO3EuTEFXTkdSRUVOPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM3Q0ZDMDAiKSk7cS5MRU1PTkNISUZGT049T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRkFDRCIpKTtxLkxJR0hUQkxVRT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQUREOEU2IikpO3EuTElHSFRDT1JBTD1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjA4MDgwIikpO3EuTElHSFRDWUFOPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNFMEZGRkYiKSk7cS5MSUdIVEdPTERFTlJPRFlFTExPVz1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkFGQUQyIikpO3EuTElHSFRHUkFZPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEM0QzRDMiKSk7cS5MSUdIVEdSRUVOPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM5MEVFOTAiKSk7cS5MSUdIVEdSRVk9cS5MSUdIVEdSQVk7cS5MSUdIVFBJTks9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGQjZDMSIpKTtxLkxJR0hUU0VBR1JFRU49T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiIzIwQjJBQSIpKTtxLkxJR0hUU0tZQkxVRT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjODdDRUZBIikpO3EuTElHSFRTTEFURUdSQVk9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiIzc3ODg5OSIpKTtxLkxJR0hUU0xBVEVHUkVZPXEuTElHSFRTTEFURUdSQVk7cS5MSUdIVFNURUVMQkxVRT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQjBDNERFIikpO3EuTElHSFRZRUxMT1c9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRkZFMCIpKTtxLkxJTUU9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiIzAwRkYwMCIpKTtxLkxJTUVHUkVFTj1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMzJDRDMyIikpO3EuTElORU49T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0ZBRjBFNiIpKTtxLk1BR0VOVEE9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGMDBGRiIpKTtxLk1BUk9PTj1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjODAwMDAwIikpO3EuTUVESVVNQVFVQU1BUklORT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjNjZDREFBIikpO3EuTUVESVVNQkxVRT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDAwMENEIikpO3EuTUVESVVNT1JDSElEPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNCQTU1RDMiKSk7cS5NRURJVU1QVVJQTEU9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiIzkzNzBEQiIpKTtxLk1FRElVTVNFQUdSRUVOPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMzQ0IzNzEiKSk7cS5NRURJVU1TTEFURUJMVUU9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiIzdCNjhFRSIpKTtxLk1FRElVTVNQUklOR0dSRUVOPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMEZBOUEiKSk7cS5NRURJVU1UVVJRVU9JU0U9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiIzQ4RDFDQyIpKTtxLk1FRElVTVZJT0xFVFJFRD1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQzcxNTg1IikpO3EuTUlETklHSFRCTFVFPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMxOTE5NzAiKSk7cS5NSU5UQ1JFQU09T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0Y1RkZGQSIpKTtxLk1JU1RZUk9TRT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZFNEUxIikpO3EuTU9DQ0FTSU49T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRTRCNSIpKTtxLk5BVkFKT1dISVRFPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkRFQUQiKSk7cS5OQVZZPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDAwODAiKSk7cS5PTERMQUNFPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGREY1RTYiKSk7cS5PTElWRT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjODA4MDAwIikpO3EuT0xJVkVEUkFCPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM2QjhFMjMiKSk7cS5PUkFOR0U9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGQTUwMCIpKTtxLk9SQU5HRVJFRD1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkY0NTAwIikpO3EuT1JDSElEPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEQTcwRDYiKSk7cS5QQUxFR09MREVOUk9EPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNFRUU4QUEiKSk7cS5QQUxFR1JFRU49T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiIzk4RkI5OCIpKTtxLlBBTEVUVVJRVU9JU0U9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0FGRUVFRSIpKTtxLlBBTEVWSU9MRVRSRUQ9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0RCNzA5MyIpKTtxLlBBUEFZQVdISVA9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRUZENSIpKTtxLlBFQUNIUFVGRj1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZEQUI5IikpO3EuUEVSVT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQ0Q4NTNGIikpO3EuUElOSz1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZDMENCIikpO3EuUExVTT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRERBMEREIikpO3EuUE9XREVSQkxVRT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQjBFMEU2IikpO3EuUFVSUExFPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4MDAwODAiKSk7cS5SRUQ9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGMDAwMCIpKTtxLlJPU1lCUk9XTj1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQkM4RjhGIikpO3EuUk9ZQUxCTFVFPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM0MTY5RTEiKSk7cS5TQURETEVCUk9XTj1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjOEI0NTEzIikpO3EuU0FMTU9OPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGQTgwNzIiKSk7cS5TQU5EWUJST1dOPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGNEE0NjAiKSk7cS5TRUFHUkVFTj1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjMkU4QjU3IikpO3EuU0VBU0hFTEw9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRjVFRSIpKTtxLlNJRU5OQT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjQTA1MjJEIikpO3EuU0lMVkVSPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNDMEMwQzAiKSk7cS5TS1lCTFVFPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4N0NFRUIiKSk7cS5TTEFURUJMVUU9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiIzZBNUFDRCIpKTtxLlNMQVRFR1JBWT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjNzA4MDkwIikpO3EuU0xBVEVHUkVZPXEuU0xBVEVHUkFZO3EuU05PVz1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGQUZBIikpO3EuU1BSSU5HR1JFRU49T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiIzAwRkY3RiIpKTtxLlNURUVMQkxVRT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjNDY4MkI0IikpO3EuVEFOPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEMkI0OEMiKSk7cS5URUFMPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDgwODAiKSk7cS5USElTVExFPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEOEJGRDgiKSk7cS5UT01BVE89T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGNjM0NyIpKTtxLlRVUlFVT0lTRT1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjNDBFMEQwIikpO3EuVklPTEVUPU9iamVjdC5mcmVlemUocS5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNFRTgyRUUiKSk7cS5XSEVBVD1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjVERUIzIikpO3EuV0hJVEU9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRkZGRiIpKTtxLldISVRFU01PS0U9T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiI0Y1RjVGNSIpKTtxLllFTExPVz1PYmplY3QuZnJlZXplKHEuZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGRjAwIikpO3EuWUVMTE9XR1JFRU49T2JqZWN0LmZyZWV6ZShxLmZyb21Dc3NDb2xvclN0cmluZygiIzlBQ0QzMiIpKTtxLlRSQU5TUEFSRU5UPU9iamVjdC5mcmVlemUobmV3IHEoMCwwLDAsMCkpO3NlPXF9KTtmdW5jdGlvbiB6Rih0LGUsbixvLHIpe2xldCBpPUNFO2kubGVuZ3RoPXI7bGV0IHMsZj1uLnJlZCx1PW4uZ3JlZW4sYz1uLmJsdWUsbD1uLmFscGhhLHA9by5yZWQsZD1vLmdyZWVuLG09by5ibHVlLF89by5hbHBoYTtpZihzZS5lcXVhbHMobixvKSl7Zm9yKHM9MDtzPHI7cysrKWlbc109c2UuY2xvbmUobik7cmV0dXJuIGl9bGV0IGc9KHAtZikvcixiPShkLXUpL3IsTz0obS1jKS9yLFQ9KF8tbCkvcjtmb3Iocz0wO3M8cjtzKyspaVtzXT1uZXcgc2UoZitzKmcsdStzKmIsYytzKk8sbCtzKlQpO3JldHVybiBpfWZ1bmN0aW9uIEpmKHQpe3Q9eCh0LHguRU1QVFlfT0JKRUNUKTtsZXQgZT10LnBvc2l0aW9ucyxuPXQuY29sb3JzLG89eCh0LndpZHRoLDEpLHI9eCh0LmNvbG9yc1BlclZlcnRleCwhMSk7aWYoIWgoZSl8fGUubGVuZ3RoPDIpdGhyb3cgbmV3IEIoIkF0IGxlYXN0IHR3byBwb3NpdGlvbnMgYXJlIHJlcXVpcmVkLiIpO2lmKHR5cGVvZiBvIT0ibnVtYmVyIil0aHJvdyBuZXcgQigid2lkdGggbXVzdCBiZSBhIG51bWJlciIpO2lmKGgobikmJihyJiZuLmxlbmd0aDxlLmxlbmd0aHx8IXImJm4ubGVuZ3RoPGUubGVuZ3RoLTEpKXRocm93IG5ldyBCKCJjb2xvcnMgaGFzIGFuIGludmFsaWQgbGVuZ3RoLiIpO3RoaXMuX3Bvc2l0aW9ucz1lLHRoaXMuX2NvbG9ycz1uLHRoaXMuX3dpZHRoPW8sdGhpcy5fY29sb3JzUGVyVmVydGV4PXIsdGhpcy5fdmVydGV4Rm9ybWF0PWx0LmNsb25lKHgodC52ZXJ0ZXhGb3JtYXQsbHQuREVGQVVMVCkpLHRoaXMuX2FyY1R5cGU9eCh0LmFyY1R5cGUsdWUuR0VPREVTSUMpLHRoaXMuX2dyYW51bGFyaXR5PXgodC5ncmFudWxhcml0eSxNLlJBRElBTlNfUEVSX0RFR1JFRSksdGhpcy5fZWxsaXBzb2lkPSQuY2xvbmUoeCh0LmVsbGlwc29pZCwkLldHUzg0KSksdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlUG9seWxpbmVHZW9tZXRyeSI7bGV0IGk9MStlLmxlbmd0aCphLnBhY2tlZExlbmd0aDtpKz1oKG4pPzErbi5sZW5ndGgqc2UucGFja2VkTGVuZ3RoOjEsdGhpcy5wYWNrZWRMZW5ndGg9aSskLnBhY2tlZExlbmd0aCtsdC5wYWNrZWRMZW5ndGgrNH12YXIgQ0UseEUsUEUsd2MsT0UsRUUsUkUsU0UsYXksTUU9WigoKT0+e2ZjKCk7anIoKTtQZSgpO1V0KCk7UWYoKTtEZSgpO0l0KCk7YXQoKTtIdCgpO1p0KCk7WGUoKTtZZSgpO2FuKCk7V2woKTskZSgpO1d0KCk7Z2EoKTt0bigpO1JvKCk7Q0U9W107SmYucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEIoInZhbHVlIGlzIHJlcXVpcmVkIik7aWYoIWgoZSkpdGhyb3cgbmV3IEIoImFycmF5IGlzIHJlcXVpcmVkIik7bj14KG4sMCk7bGV0IG8scj10Ll9wb3NpdGlvbnMsaT1yLmxlbmd0aDtmb3IoZVtuKytdPWksbz0wO288aTsrK28sbis9YS5wYWNrZWRMZW5ndGgpYS5wYWNrKHJbb10sZSxuKTtsZXQgcz10Ll9jb2xvcnM7Zm9yKGk9aChzKT9zLmxlbmd0aDowLGVbbisrXT1pLG89MDtvPGk7KytvLG4rPXNlLnBhY2tlZExlbmd0aClzZS5wYWNrKHNbb10sZSxuKTtyZXR1cm4gJC5wYWNrKHQuX2VsbGlwc29pZCxlLG4pLG4rPSQucGFja2VkTGVuZ3RoLGx0LnBhY2sodC5fdmVydGV4Rm9ybWF0LGUsbiksbis9bHQucGFja2VkTGVuZ3RoLGVbbisrXT10Ll93aWR0aCxlW24rK109dC5fY29sb3JzUGVyVmVydGV4PzE6MCxlW24rK109dC5fYXJjVHlwZSxlW25dPXQuX2dyYW51bGFyaXR5LGV9O3hFPSQuY2xvbmUoJC5VTklUX1NQSEVSRSksUEU9bmV3IGx0LHdjPXtwb3NpdGlvbnM6dm9pZCAwLGNvbG9yczp2b2lkIDAsZWxsaXBzb2lkOnhFLHZlcnRleEZvcm1hdDpQRSx3aWR0aDp2b2lkIDAsY29sb3JzUGVyVmVydGV4OnZvaWQgMCxhcmNUeXBlOnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDB9O0pmLnVucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEIoImFycmF5IGlzIHJlcXVpcmVkIik7ZT14KGUsMCk7bGV0IG8scj10W2UrK10saT1uZXcgQXJyYXkocik7Zm9yKG89MDtvPHI7KytvLGUrPWEucGFja2VkTGVuZ3RoKWlbb109YS51bnBhY2sodCxlKTtyPXRbZSsrXTtsZXQgcz1yPjA/bmV3IEFycmF5KHIpOnZvaWQgMDtmb3Iobz0wO288cjsrK28sZSs9c2UucGFja2VkTGVuZ3RoKXNbb109c2UudW5wYWNrKHQsZSk7bGV0IGY9JC51bnBhY2sodCxlLHhFKTtlKz0kLnBhY2tlZExlbmd0aDtsZXQgdT1sdC51bnBhY2sodCxlLFBFKTtlKz1sdC5wYWNrZWRMZW5ndGg7bGV0IGM9dFtlKytdLGw9dFtlKytdPT09MSxwPXRbZSsrXSxkPXRbZV07cmV0dXJuIGgobik/KG4uX3Bvc2l0aW9ucz1pLG4uX2NvbG9ycz1zLG4uX2VsbGlwc29pZD0kLmNsb25lKGYsbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9bHQuY2xvbmUodSxuLl92ZXJ0ZXhGb3JtYXQpLG4uX3dpZHRoPWMsbi5fY29sb3JzUGVyVmVydGV4PWwsbi5fYXJjVHlwZT1wLG4uX2dyYW51bGFyaXR5PWQsbik6KHdjLnBvc2l0aW9ucz1pLHdjLmNvbG9ycz1zLHdjLndpZHRoPWMsd2MuY29sb3JzUGVyVmVydGV4PWwsd2MuYXJjVHlwZT1wLHdjLmdyYW51bGFyaXR5PWQsbmV3IEpmKHdjKSl9O09FPW5ldyBhLEVFPW5ldyBhLFJFPW5ldyBhLFNFPW5ldyBhO0pmLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3dpZHRoLG49dC5fdmVydGV4Rm9ybWF0LG89dC5fY29sb3JzLHI9dC5fY29sb3JzUGVyVmVydGV4LGk9dC5fYXJjVHlwZSxzPXQuX2dyYW51bGFyaXR5LGY9dC5fZWxsaXBzb2lkLHUsYyxsLHA9W10sZD1Dbih0Ll9wb3NpdGlvbnMsYS5lcXVhbHNFcHNpbG9uLCExLHApO2lmKGgobykmJnAubGVuZ3RoPjApe2xldCBGPTAsaj1wWzBdO289by5maWx0ZXIoZnVuY3Rpb24oSCxrKXtsZXQgSz0hMTtyZXR1cm4gcj9LPWs9PT1qfHxrPT09MCYmaj09PTE6Sz1rKzE9PT1qLEs/KEYrKyxqPXBbRl0sITEpOiEwfSl9bGV0IG09ZC5sZW5ndGg7aWYobTwyfHxlPD0wKXJldHVybjtpZihpPT09dWUuR0VPREVTSUN8fGk9PT11ZS5SSFVNQil7bGV0IEYsajtpPT09dWUuR0VPREVTSUM/KEY9TS5jaG9yZExlbmd0aChzLGYubWF4aW11bVJhZGl1cyksaj15bi5udW1iZXJPZlBvaW50cyk6KEY9cyxqPXluLm51bWJlck9mUG9pbnRzUmh1bWJMaW5lKTtsZXQgSD15bi5leHRyYWN0SGVpZ2h0cyhkLGYpO2lmKGgobykpe2xldCBrPTE7Zm9yKHU9MDt1PG0tMTsrK3Upays9aihkW3VdLGRbdSsxXSxGKTtsZXQgSz1uZXcgQXJyYXkoayksWD0wO2Zvcih1PTA7dTxtLTE7Kyt1KXtsZXQgUj1kW3VdLFE9ZFt1KzFdLGZ0PW9bdV0scHQ9aihSLFEsRik7aWYociYmdTxrKXtsZXQgZ3Q9b1t1KzFdLGl0PXpGKFIsUSxmdCxndCxwdCksTnQ9aXQubGVuZ3RoO2ZvcihjPTA7YzxOdDsrK2MpS1tYKytdPWl0W2NdfWVsc2UgZm9yKGM9MDtjPHB0OysrYylLW1grK109c2UuY2xvbmUoZnQpfUtbWF09c2UuY2xvbmUob1tvLmxlbmd0aC0xXSksbz1LLENFLmxlbmd0aD0wfWk9PT11ZS5HRU9ERVNJQz9kPXluLmdlbmVyYXRlQ2FydGVzaWFuQXJjKHtwb3NpdGlvbnM6ZCxtaW5EaXN0YW5jZTpGLGVsbGlwc29pZDpmLGhlaWdodDpIfSk6ZD15bi5nZW5lcmF0ZUNhcnRlc2lhblJodW1iQXJjKHtwb3NpdGlvbnM6ZCxncmFudWxhcml0eTpGLGVsbGlwc29pZDpmLGhlaWdodDpIfSl9bT1kLmxlbmd0aDtsZXQgXz1tKjQtNCxnPW5ldyBGbG9hdDY0QXJyYXkoXyozKSxiPW5ldyBGbG9hdDY0QXJyYXkoXyozKSxPPW5ldyBGbG9hdDY0QXJyYXkoXyozKSxUPW5ldyBGbG9hdDMyQXJyYXkoXyoyKSxFPW4uc3Q/bmV3IEZsb2F0MzJBcnJheShfKjIpOnZvaWQgMCx3PWgobyk/bmV3IFVpbnQ4QXJyYXkoXyo0KTp2b2lkIDAsQz0wLE49MCxJPTAsTD0wLHY7Zm9yKGM9MDtjPG07KytjKXtjPT09MD8odj1PRSxhLnN1YnRyYWN0KGRbMF0sZFsxXSx2KSxhLmFkZChkWzBdLHYsdikpOnY9ZFtjLTFdLGEuY2xvbmUodixSRSksYS5jbG9uZShkW2NdLEVFKSxjPT09bS0xPyh2PU9FLGEuc3VidHJhY3QoZFttLTFdLGRbbS0yXSx2KSxhLmFkZChkW20tMV0sdix2KSk6dj1kW2MrMV0sYS5jbG9uZSh2LFNFKTtsZXQgRixqO2godykmJihjIT09MCYmIXI/Rj1vW2MtMV06Rj1vW2NdLGMhPT1tLTEmJihqPW9bY10pKTtsZXQgSD1jPT09MD8yOjAsaz1jPT09bS0xPzI6NDtmb3IobD1IO2w8azsrK2wpe2EucGFjayhFRSxnLEMpLGEucGFjayhSRSxiLEMpLGEucGFjayhTRSxPLEMpLEMrPTM7bGV0IEs9bC0yPDA/LTE6MTtpZihUW04rK109MioobCUyKS0xLFRbTisrXT1LKmUsbi5zdCYmKEVbSSsrXT1jLyhtLTEpLEVbSSsrXT1NYXRoLm1heChUW04tMl0sMCkpLGgodykpe2xldCBYPWw8Mj9GOmo7d1tMKytdPXNlLmZsb2F0VG9CeXRlKFgucmVkKSx3W0wrK109c2UuZmxvYXRUb0J5dGUoWC5ncmVlbiksd1tMKytdPXNlLmZsb2F0VG9CeXRlKFguYmx1ZSksd1tMKytdPXNlLmZsb2F0VG9CeXRlKFguYWxwaGEpfX19bGV0IEQ9bmV3IHJlO0QucG9zaXRpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpnfSksRC5wcmV2UG9zaXRpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpifSksRC5uZXh0UG9zaXRpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpPfSksRC5leHBhbmRBbmRXaWR0aD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6VH0pLG4uc3QmJihELnN0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpFfSkpLGgodykmJihELmNvbG9yPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjQsdmFsdWVzOncsbm9ybWFsaXplOiEwfSkpO2xldCBVPUR0LmNyZWF0ZVR5cGVkQXJyYXkoXyxtKjYtNiksQT0wLFM9MCxQPW0tMTtmb3IoYz0wO2M8UDsrK2MpVVtTKytdPUEsVVtTKytdPUErMixVW1MrK109QSsxLFVbUysrXT1BKzEsVVtTKytdPUErMixVW1MrK109QSszLEErPTQ7cmV0dXJuIG5ldyBGdCh7YXR0cmlidXRlczpELGluZGljZXM6VSxwcmltaXRpdmVUeXBlOkx0LlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTp5dC5mcm9tUG9pbnRzKGQpLGdlb21ldHJ5VHlwZTpTaS5QT0xZTElORVN9KX07YXk9SmZ9KTt2YXIgZnk9e307bWUoZnkse2RlZmF1bHQ6KCk9PkhGfSk7ZnVuY3Rpb24gakYodCxlKXtyZXR1cm4gaChlKSYmKHQ9YXkudW5wYWNrKHQsZSkpLHQuX2VsbGlwc29pZD0kLmNsb25lKHQuX2VsbGlwc29pZCksYXkuY3JlYXRlR2VvbWV0cnkodCl9dmFyIEhGLHV5PVooKCk9PnthdCgpO1p0KCk7TUUoKTtIRj1qRn0pO2Z1bmN0aW9uIHFGKHQsZSxuLG8pe2xldCByPW5ldyByZTtvLnBvc2l0aW9uJiYoci5wb3NpdGlvbj1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnR9KSk7bGV0IGk9ZS5sZW5ndGgscz10Lmxlbmd0aC8zLGY9KHMtaSoyKS8oaSoyKSx1PVNlLnRyaWFuZ3VsYXRlKGUpLGM9KGYtMSkqaSo2K3UubGVuZ3RoKjIsbD1EdC5jcmVhdGVUeXBlZEFycmF5KHMsYykscCxkLG0sXyxnLGIsTz1pKjIsVD0wO2ZvcihwPTA7cDxmLTE7cCsrKXtmb3IoZD0wO2Q8aS0xO2QrKyltPWQqMitwKmkqMixiPW0rTyxfPW0rMSxnPV8rTyxsW1QrK109XyxsW1QrK109bSxsW1QrK109ZyxsW1QrK109ZyxsW1QrK109bSxsW1QrK109YjttPWkqMi0yK3AqaSoyLF89bSsxLGc9XytPLGI9bStPLGxbVCsrXT1fLGxbVCsrXT1tLGxbVCsrXT1nLGxbVCsrXT1nLGxbVCsrXT1tLGxbVCsrXT1ifWlmKG8uc3R8fG8udGFuZ2VudHx8by5iaXRhbmdlbnQpe2xldCBDPW5ldyBGbG9hdDMyQXJyYXkocyoyKSxOPTEvKGYtMSksST0xL24uaGVpZ2h0LEw9bi5oZWlnaHQvMix2LEQsVT0wO2ZvcihwPTA7cDxmO3ArKyl7Zm9yKHY9cCpOLEQ9SSooZVswXS55K0wpLENbVSsrXT12LENbVSsrXT1ELGQ9MTtkPGk7ZCsrKUQ9SSooZVtkXS55K0wpLENbVSsrXT12LENbVSsrXT1ELENbVSsrXT12LENbVSsrXT1EO0Q9SSooZVswXS55K0wpLENbVSsrXT12LENbVSsrXT1EfWZvcihkPTA7ZDxpO2QrKyl2PTAsRD1JKihlW2RdLnkrTCksQ1tVKytdPXYsQ1tVKytdPUQ7Zm9yKGQ9MDtkPGk7ZCsrKXY9KGYtMSkqTixEPUkqKGVbZF0ueStMKSxDW1UrK109dixDW1UrK109RDtyLnN0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpuZXcgRmxvYXQzMkFycmF5KEMpfSl9bGV0IEU9cy1pKjI7Zm9yKHA9MDtwPHUubGVuZ3RoO3ArPTMpe2xldCBDPXVbcF0rRSxOPXVbcCsxXStFLEk9dVtwKzJdK0U7bFtUKytdPUMsbFtUKytdPU4sbFtUKytdPUksbFtUKytdPUkraSxsW1QrK109TitpLGxbVCsrXT1DK2l9bGV0IHc9bmV3IEZ0KHthdHRyaWJ1dGVzOnIsaW5kaWNlczpsLGJvdW5kaW5nU3BoZXJlOnl0LmZyb21WZXJ0aWNlcyh0KSxwcmltaXRpdmVUeXBlOkx0LlRSSUFOR0xFU30pO2lmKG8ubm9ybWFsJiYodz1CZS5jb21wdXRlTm9ybWFsKHcpKSxvLnRhbmdlbnR8fG8uYml0YW5nZW50KXt0cnl7dz1CZS5jb21wdXRlVGFuZ2VudEFuZEJpdGFuZ2VudCh3KX1jYXRjaHtBYSgicG9seWxpbmUtdm9sdW1lLXRhbmdlbnQtYml0YW5nZW50IiwiVW5hYmxlIHRvIGNvbXB1dGUgdGFuZ2VudHMgYW5kIGJpdGFuZ2VudHMgZm9yIHBvbHlsaW5lIHZvbHVtZSBnZW9tZXRyeSIpfW8udGFuZ2VudHx8KHcuYXR0cmlidXRlcy50YW5nZW50PXZvaWQgMCksby5iaXRhbmdlbnR8fCh3LmF0dHJpYnV0ZXMuYml0YW5nZW50PXZvaWQgMCksby5zdHx8KHcuYXR0cmlidXRlcy5zdD12b2lkIDApfXJldHVybiB3fWZ1bmN0aW9uIGV1KHQpe3Q9eCh0LHguRU1QVFlfT0JKRUNUKTtsZXQgZT10LnBvbHlsaW5lUG9zaXRpb25zLG49dC5zaGFwZVBvc2l0aW9ucztpZighaChlKSl0aHJvdyBuZXcgQigib3B0aW9ucy5wb2x5bGluZVBvc2l0aW9ucyBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgQigib3B0aW9ucy5zaGFwZVBvc2l0aW9ucyBpcyByZXF1aXJlZC4iKTt0aGlzLl9wb3NpdGlvbnM9ZSx0aGlzLl9zaGFwZT1uLHRoaXMuX2VsbGlwc29pZD0kLmNsb25lKHgodC5lbGxpcHNvaWQsJC5XR1M4NCkpLHRoaXMuX2Nvcm5lclR5cGU9eCh0LmNvcm5lclR5cGUsZm4uUk9VTkRFRCksdGhpcy5fdmVydGV4Rm9ybWF0PWx0LmNsb25lKHgodC52ZXJ0ZXhGb3JtYXQsbHQuREVGQVVMVCkpLHRoaXMuX2dyYW51bGFyaXR5PXgodC5ncmFudWxhcml0eSxNLlJBRElBTlNfUEVSX0RFR1JFRSksdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlUG9seWxpbmVWb2x1bWVHZW9tZXRyeSI7bGV0IG89MStlLmxlbmd0aCphLnBhY2tlZExlbmd0aDtvKz0xK24ubGVuZ3RoKm50LnBhY2tlZExlbmd0aCx0aGlzLnBhY2tlZExlbmd0aD1vKyQucGFja2VkTGVuZ3RoK2x0LnBhY2tlZExlbmd0aCsyfXZhciBORSxJRSx0dSxLRixseSx2RT1aKCgpPT57anIoKTt4ZigpO1BlKCk7emUoKTtVdCgpO0RlKCk7aGMoKTtJdCgpO2F0KCk7SHQoKTtadCgpO1hlKCk7WWUoKTthbigpO3NpKCk7JGUoKTtXdCgpO3VkKCk7cXIoKTttZCgpO3RuKCk7Um8oKTtsYygpO2V1LnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBCKCJ2YWx1ZSBpcyByZXF1aXJlZCIpO2lmKCFoKGUpKXRocm93IG5ldyBCKCJhcnJheSBpcyByZXF1aXJlZCIpO249eChuLDApO2xldCBvLHI9dC5fcG9zaXRpb25zLGk9ci5sZW5ndGg7Zm9yKGVbbisrXT1pLG89MDtvPGk7KytvLG4rPWEucGFja2VkTGVuZ3RoKWEucGFjayhyW29dLGUsbik7bGV0IHM9dC5fc2hhcGU7Zm9yKGk9cy5sZW5ndGgsZVtuKytdPWksbz0wO288aTsrK28sbis9bnQucGFja2VkTGVuZ3RoKW50LnBhY2soc1tvXSxlLG4pO3JldHVybiAkLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9JC5wYWNrZWRMZW5ndGgsbHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxuKz1sdC5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX2Nvcm5lclR5cGUsZVtuXT10Ll9ncmFudWxhcml0eSxlfTtORT0kLmNsb25lKCQuVU5JVF9TUEhFUkUpLElFPW5ldyBsdCx0dT17cG9seWxpbmVQb3NpdGlvbnM6dm9pZCAwLHNoYXBlUG9zaXRpb25zOnZvaWQgMCxlbGxpcHNvaWQ6TkUsdmVydGV4Rm9ybWF0OklFLGNvcm5lclR5cGU6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMH07ZXUudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgQigiYXJyYXkgaXMgcmVxdWlyZWQiKTtlPXgoZSwwKTtsZXQgbyxyPXRbZSsrXSxpPW5ldyBBcnJheShyKTtmb3Iobz0wO288cjsrK28sZSs9YS5wYWNrZWRMZW5ndGgpaVtvXT1hLnVucGFjayh0LGUpO3I9dFtlKytdO2xldCBzPW5ldyBBcnJheShyKTtmb3Iobz0wO288cjsrK28sZSs9bnQucGFja2VkTGVuZ3RoKXNbb109bnQudW5wYWNrKHQsZSk7bGV0IGY9JC51bnBhY2sodCxlLE5FKTtlKz0kLnBhY2tlZExlbmd0aDtsZXQgdT1sdC51bnBhY2sodCxlLElFKTtlKz1sdC5wYWNrZWRMZW5ndGg7bGV0IGM9dFtlKytdLGw9dFtlXTtyZXR1cm4gaChuKT8obi5fcG9zaXRpb25zPWksbi5fc2hhcGU9cyxuLl9lbGxpcHNvaWQ9JC5jbG9uZShmLG4uX2VsbGlwc29pZCksbi5fdmVydGV4Rm9ybWF0PWx0LmNsb25lKHUsbi5fdmVydGV4Rm9ybWF0KSxuLl9jb3JuZXJUeXBlPWMsbi5fZ3JhbnVsYXJpdHk9bCxuKToodHUucG9seWxpbmVQb3NpdGlvbnM9aSx0dS5zaGFwZVBvc2l0aW9ucz1zLHR1LmNvcm5lclR5cGU9Yyx0dS5ncmFudWxhcml0eT1sLG5ldyBldSh0dSkpfTtLRj1uZXcgSHI7ZXUuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fcG9zaXRpb25zLG49Q24oZSxhLmVxdWFsc0Vwc2lsb24pLG89dC5fc2hhcGU7aWYobz1kcy5yZW1vdmVEdXBsaWNhdGVzRnJvbVNoYXBlKG8pLG4ubGVuZ3RoPDJ8fG8ubGVuZ3RoPDMpcmV0dXJuO1NlLmNvbXB1dGVXaW5kaW5nT3JkZXIyRChvKT09PXhvLkNMT0NLV0lTRSYmby5yZXZlcnNlKCk7bGV0IHI9SHIuZnJvbVBvaW50cyhvLEtGKSxpPWRzLmNvbXB1dGVQb3NpdGlvbnMobixvLHIsdCwhMCk7cmV0dXJuIHFGKGksbyxyLHQuX3ZlcnRleEZvcm1hdCl9O2x5PWV1fSk7dmFyIHB5PXt9O21lKHB5LHtkZWZhdWx0OigpPT5YRn0pO2Z1bmN0aW9uIFdGKHQsZSl7cmV0dXJuIGgoZSkmJih0PWx5LnVucGFjayh0LGUpKSx0Ll9lbGxpcHNvaWQ9JC5jbG9uZSh0Ll9lbGxpcHNvaWQpLGx5LmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBYRixkeT1aKCgpPT57YXQoKTtadCgpO3ZFKCk7WEY9V0Z9KTtmdW5jdGlvbiBZRih0LGUpe2xldCBuPW5ldyByZTtuLnBvc2l0aW9uPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6dH0pO2xldCBvPWUubGVuZ3RoLHI9bi5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLzMscz10Lmxlbmd0aC8zL28sZj1EdC5jcmVhdGVUeXBlZEFycmF5KHIsMipvKihzKzEpKSx1LGMsbD0wO3U9MDtsZXQgcD11Km87Zm9yKGM9MDtjPG8tMTtjKyspZltsKytdPWMrcCxmW2wrK109YytwKzE7Zm9yKGZbbCsrXT1vLTErcCxmW2wrK109cCx1PXMtMSxwPXUqbyxjPTA7YzxvLTE7YysrKWZbbCsrXT1jK3AsZltsKytdPWMrcCsxO2ZvcihmW2wrK109by0xK3AsZltsKytdPXAsdT0wO3U8cy0xO3UrKyl7bGV0IG09byp1LF89bStvO2ZvcihjPTA7YzxvO2MrKylmW2wrK109YyttLGZbbCsrXT1jK199cmV0dXJuIG5ldyBGdCh7YXR0cmlidXRlczpuLGluZGljZXM6RHQuY3JlYXRlVHlwZWRBcnJheShyLGYpLGJvdW5kaW5nU3BoZXJlOnl0LmZyb21WZXJ0aWNlcyh0KSxwcmltaXRpdmVUeXBlOkx0LkxJTkVTfSl9ZnVuY3Rpb24gb3UodCl7dD14KHQseC5FTVBUWV9PQkpFQ1QpO2xldCBlPXQucG9seWxpbmVQb3NpdGlvbnMsbj10LnNoYXBlUG9zaXRpb25zO2lmKCFoKGUpKXRocm93IG5ldyBCKCJvcHRpb25zLnBvbHlsaW5lUG9zaXRpb25zIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG4pKXRocm93IG5ldyBCKCJvcHRpb25zLnNoYXBlUG9zaXRpb25zIGlzIHJlcXVpcmVkLiIpO3RoaXMuX3Bvc2l0aW9ucz1lLHRoaXMuX3NoYXBlPW4sdGhpcy5fZWxsaXBzb2lkPSQuY2xvbmUoeCh0LmVsbGlwc29pZCwkLldHUzg0KSksdGhpcy5fY29ybmVyVHlwZT14KHQuY29ybmVyVHlwZSxmbi5ST1VOREVEKSx0aGlzLl9ncmFudWxhcml0eT14KHQuZ3JhbnVsYXJpdHksTS5SQURJQU5TX1BFUl9ERUdSRUUpLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVBvbHlsaW5lVm9sdW1lT3V0bGluZUdlb21ldHJ5IjtsZXQgbz0xK2UubGVuZ3RoKmEucGFja2VkTGVuZ3RoO28rPTErbi5sZW5ndGgqbnQucGFja2VkTGVuZ3RoLHRoaXMucGFja2VkTGVuZ3RoPW8rJC5wYWNrZWRMZW5ndGgrMn12YXIgREUsbnUsJEYsbXksTEU9WigoKT0+e2pyKCk7eGYoKTtQZSgpO3plKCk7VXQoKTtEZSgpO2hjKCk7SXQoKTthdCgpO0h0KCk7WnQoKTtYZSgpO1llKCk7YW4oKTskZSgpO1d0KCk7cXIoKTttZCgpO3RuKCk7bGMoKTtvdS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgQigidmFsdWUgaXMgcmVxdWlyZWQiKTtpZighaChlKSl0aHJvdyBuZXcgQigiYXJyYXkgaXMgcmVxdWlyZWQiKTtuPXgobiwwKTtsZXQgbyxyPXQuX3Bvc2l0aW9ucyxpPXIubGVuZ3RoO2ZvcihlW24rK109aSxvPTA7bzxpOysrbyxuKz1hLnBhY2tlZExlbmd0aClhLnBhY2socltvXSxlLG4pO2xldCBzPXQuX3NoYXBlO2ZvcihpPXMubGVuZ3RoLGVbbisrXT1pLG89MDtvPGk7KytvLG4rPW50LnBhY2tlZExlbmd0aCludC5wYWNrKHNbb10sZSxuKTtyZXR1cm4gJC5wYWNrKHQuX2VsbGlwc29pZCxlLG4pLG4rPSQucGFja2VkTGVuZ3RoLGVbbisrXT10Ll9jb3JuZXJUeXBlLGVbbl09dC5fZ3JhbnVsYXJpdHksZX07REU9JC5jbG9uZSgkLlVOSVRfU1BIRVJFKSxudT17cG9seWxpbmVQb3NpdGlvbnM6dm9pZCAwLHNoYXBlUG9zaXRpb25zOnZvaWQgMCxlbGxpcHNvaWQ6REUsaGVpZ2h0OnZvaWQgMCxjb3JuZXJUeXBlOnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDB9O291LnVucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEIoImFycmF5IGlzIHJlcXVpcmVkIik7ZT14KGUsMCk7bGV0IG8scj10W2UrK10saT1uZXcgQXJyYXkocik7Zm9yKG89MDtvPHI7KytvLGUrPWEucGFja2VkTGVuZ3RoKWlbb109YS51bnBhY2sodCxlKTtyPXRbZSsrXTtsZXQgcz1uZXcgQXJyYXkocik7Zm9yKG89MDtvPHI7KytvLGUrPW50LnBhY2tlZExlbmd0aClzW29dPW50LnVucGFjayh0LGUpO2xldCBmPSQudW5wYWNrKHQsZSxERSk7ZSs9JC5wYWNrZWRMZW5ndGg7bGV0IHU9dFtlKytdLGM9dFtlXTtyZXR1cm4gaChuKT8obi5fcG9zaXRpb25zPWksbi5fc2hhcGU9cyxuLl9lbGxpcHNvaWQ9JC5jbG9uZShmLG4uX2VsbGlwc29pZCksbi5fY29ybmVyVHlwZT11LG4uX2dyYW51bGFyaXR5PWMsbik6KG51LnBvbHlsaW5lUG9zaXRpb25zPWksbnUuc2hhcGVQb3NpdGlvbnM9cyxudS5jb3JuZXJUeXBlPXUsbnUuZ3JhbnVsYXJpdHk9YyxuZXcgb3UobnUpKX07JEY9bmV3IEhyO291LmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3Bvc2l0aW9ucyxuPUNuKGUsYS5lcXVhbHNFcHNpbG9uKSxvPXQuX3NoYXBlO2lmKG89ZHMucmVtb3ZlRHVwbGljYXRlc0Zyb21TaGFwZShvKSxuLmxlbmd0aDwyfHxvLmxlbmd0aDwzKXJldHVybjtTZS5jb21wdXRlV2luZGluZ09yZGVyMkQobyk9PT14by5DTE9DS1dJU0UmJm8ucmV2ZXJzZSgpO2xldCByPUhyLmZyb21Qb2ludHMobywkRiksaT1kcy5jb21wdXRlUG9zaXRpb25zKG4sbyxyLHQsITEpO3JldHVybiBZRihpLG8pfTtteT1vdX0pO3ZhciBoeT17fTttZShoeSx7ZGVmYXVsdDooKT0+UUZ9KTtmdW5jdGlvbiBaRih0LGUpe3JldHVybiBoKGUpJiYodD1teS51bnBhY2sodCxlKSksdC5fZWxsaXBzb2lkPSQuY2xvbmUodC5fZWxsaXBzb2lkKSxteS5jcmVhdGVHZW9tZXRyeSh0KX12YXIgUUYsX3k9WigoKT0+e2F0KCk7WnQoKTtMRSgpO1FGPVpGfSk7ZnVuY3Rpb24gVUUodCxlLG4sbyxyLGkscyl7bGV0IGY9TWF0aC5jb3MoZSksdT1vKmYsYz1uKmYsbD1NYXRoLnNpbihlKSxwPW8qbCxkPW4qbDtTcj15eS5wcm9qZWN0KHQsU3IpLFNyPWEuc3VidHJhY3QoU3IsRGQsU3IpO2xldCBtPVhvLmZyb21Sb3RhdGlvbihlLHRCKTtTcj1Yby5tdWx0aXBseUJ5VmVjdG9yKG0sU3IsU3IpLFNyPWEuYWRkKFNyLERkLFNyKSx0PXl5LnVucHJvamVjdChTcix0KSxpLT0xLHMtPTE7bGV0IF89dC5sYXRpdHVkZSxnPV8raSpkLGI9Xy11KnMsTz1fLXUqcytpKmQsVD1NYXRoLm1heChfLGcsYixPKSxFPU1hdGgubWluKF8sZyxiLE8pLHc9dC5sb25naXR1ZGUsQz13K2kqYyxOPXcrcypwLEk9dytzKnAraSpjLEw9TWF0aC5tYXgodyxDLE4sSSksdj1NYXRoLm1pbih3LEMsTixJKTtyZXR1cm57bm9ydGg6VCxzb3V0aDpFLGVhc3Q6TCx3ZXN0OnYsZ3JhbllDb3M6dSxncmFuWVNpbjpwLGdyYW5YQ29zOmMsZ3JhblhTaW46ZCxud0Nvcm5lcjp0fX12YXIgRkUsQkUsSkYsZ3ksdEIsU3IsZUIsRGQseXksZ28sQXk9WigoKT0+e1V0KCk7dmUoKTthdCgpO0h0KCk7UmkoKTtXdCgpO2ZmKCk7QW4oKTtGRT1NYXRoLmNvcyxCRT1NYXRoLnNpbixKRj1NYXRoLnNxcnQsZ3k9e307Z3kuY29tcHV0ZVBvc2l0aW9uPWZ1bmN0aW9uKHQsZSxuLG8scixpLHMpe2xldCBmPWUucmFkaWlTcXVhcmVkLHU9dC5ud0Nvcm5lcixjPXQuYm91bmRpbmdSZWN0YW5nbGUsbD11LmxhdGl0dWRlLXQuZ3JhbllDb3MqbytyKnQuZ3JhblhTaW4scD1GRShsKSxkPUJFKGwpLG09Zi56KmQsXz11LmxvbmdpdHVkZStvKnQuZ3JhbllTaW4rcip0LmdyYW5YQ29zLGc9cCpGRShfKSxiPXAqQkUoXyksTz1mLngqZyxUPWYueSpiLEU9SkYoTypnK1QqYittKmQpO2lmKGkueD1PL0UsaS55PVQvRSxpLno9bS9FLG4pe2xldCB3PXQuc3ROd0Nvcm5lcjtoKHcpPyhsPXcubGF0aXR1ZGUtdC5zdEdyYW5ZQ29zKm8rcip0LnN0R3JhblhTaW4sXz13LmxvbmdpdHVkZStvKnQuc3RHcmFuWVNpbityKnQuc3RHcmFuWENvcyxzLng9KF8tdC5zdFdlc3QpKnQubG9uU2NhbGFyLHMueT0obC10LnN0U291dGgpKnQubGF0U2NhbGFyKToocy54PShfLWMud2VzdCkqdC5sb25TY2FsYXIscy55PShsLWMuc291dGgpKnQubGF0U2NhbGFyKX19O3RCPW5ldyBYbyxTcj1uZXcgYSxlQj1uZXcgY3QsRGQ9bmV3IGEseXk9bmV3IFFuO2d5LmNvbXB1dGVPcHRpb25zPWZ1bmN0aW9uKHQsZSxuLG8scixpLHMpe2xldCBmPXQuZWFzdCx1PXQud2VzdCxjPXQubm9ydGgsbD10LnNvdXRoLHA9ITEsZD0hMTtjPT09TS5QSV9PVkVSX1RXTyYmKHA9ITApLGw9PT0tTS5QSV9PVkVSX1RXTyYmKGQ9ITApO2xldCBtLF89Yy1sO3U+Zj9tPU0uVFdPX1BJLXUrZjptPWYtdTtsZXQgZz1NYXRoLmNlaWwobS9lKSsxLGI9TWF0aC5jZWlsKF8vZSkrMSxPPW0vKGctMSksVD1fLyhiLTEpLEU9UHQubm9ydGh3ZXN0KHQsaSksdz1QdC5jZW50ZXIodCxlQik7KG4hPT0wfHxvIT09MCkmJih3LmxvbmdpdHVkZTxFLmxvbmdpdHVkZSYmKHcubG9uZ2l0dWRlKz1NLlRXT19QSSksRGQ9eXkucHJvamVjdCh3LERkKSk7bGV0IEM9VCxOPU8sST0wLEw9MCx2PVB0LmNsb25lKHQsciksRD17Z3JhbllDb3M6QyxncmFuWVNpbjpJLGdyYW5YQ29zOk4sZ3JhblhTaW46TCxud0Nvcm5lcjpFLGJvdW5kaW5nUmVjdGFuZ2xlOnYsd2lkdGg6ZyxoZWlnaHQ6Yixub3J0aENhcDpwLHNvdXRoQ2FwOmR9O2lmKG4hPT0wKXtsZXQgVT1VRShFLG4sTyxULHcsZyxiKTtpZihjPVUubm9ydGgsbD1VLnNvdXRoLGY9VS5lYXN0LHU9VS53ZXN0LGM8LU0uUElfT1ZFUl9UV098fGM+TS5QSV9PVkVSX1RXT3x8bDwtTS5QSV9PVkVSX1RXT3x8bD5NLlBJX09WRVJfVFdPKXRocm93IG5ldyBCKCJSb3RhdGVkIHJlY3RhbmdsZSBpcyBpbnZhbGlkLiAgSXQgY3Jvc3NlcyBvdmVyIGVpdGhlciB0aGUgbm9ydGggb3Igc291dGggcG9sZS4iKTtELmdyYW5ZQ29zPVUuZ3JhbllDb3MsRC5ncmFuWVNpbj1VLmdyYW5ZU2luLEQuZ3JhblhDb3M9VS5ncmFuWENvcyxELmdyYW5YU2luPVUuZ3JhblhTaW4sdi5ub3J0aD1jLHYuc291dGg9bCx2LmVhc3Q9Zix2Lndlc3Q9dX1pZihvIT09MCl7bj1uLW87bGV0IFU9UHQubm9ydGh3ZXN0KHYscyksQT1VRShVLG4sTyxULHcsZyxiKTtELnN0R3JhbllDb3M9QS5ncmFuWUNvcyxELnN0R3JhblhDb3M9QS5ncmFuWENvcyxELnN0R3JhbllTaW49QS5ncmFuWVNpbixELnN0R3JhblhTaW49QS5ncmFuWFNpbixELnN0TndDb3JuZXI9VSxELnN0V2VzdD1BLndlc3QsRC5zdFNvdXRoPUEuc291dGh9cmV0dXJuIER9O2dvPWd5fSk7ZnVuY3Rpb24gcUUodCxlKXtsZXQgbj1uZXcgRnQoe2F0dHJpYnV0ZXM6bmV3IHJlLHByaW1pdGl2ZVR5cGU6THQuVFJJQU5HTEVTfSk7cmV0dXJuIG4uYXR0cmlidXRlcy5wb3NpdGlvbj1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmUucG9zaXRpb25zfSksdC5ub3JtYWwmJihuLmF0dHJpYnV0ZXMubm9ybWFsPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczplLm5vcm1hbHN9KSksdC50YW5nZW50JiYobi5hdHRyaWJ1dGVzLnRhbmdlbnQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmUudGFuZ2VudHN9KSksdC5iaXRhbmdlbnQmJihuLmF0dHJpYnV0ZXMuYml0YW5nZW50PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczplLmJpdGFuZ2VudHN9KSksbn1mdW5jdGlvbiBpQih0LGUsbixvKXtsZXQgcj10Lmxlbmd0aCxpPWUubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkocik6dm9pZCAwLHM9ZS50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkocik6dm9pZCAwLGY9ZS5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShyKTp2b2lkIDAsdT0wLGM9akUsbD16RSxwPUdFO2lmKGUubm9ybWFsfHxlLnRhbmdlbnR8fGUuYml0YW5nZW50KWZvcihsZXQgZD0wO2Q8cjtkKz0zKXtsZXQgbT1hLmZyb21BcnJheSh0LGQsYnkpLF89dSsxLGc9dSsyO3A9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwobSxwKSwoZS50YW5nZW50fHxlLmJpdGFuZ2VudCkmJihhLmNyb3NzKGEuVU5JVF9aLHAsbCksdHQubXVsdGlwbHlCeVZlY3RvcihvLGwsbCksYS5ub3JtYWxpemUobCxsKSxlLmJpdGFuZ2VudCYmYS5ub3JtYWxpemUoYS5jcm9zcyhwLGwsYyksYykpLGUubm9ybWFsJiYoaVt1XT1wLngsaVtfXT1wLnksaVtnXT1wLnopLGUudGFuZ2VudCYmKHNbdV09bC54LHNbX109bC55LHNbZ109bC56KSxlLmJpdGFuZ2VudCYmKGZbdV09Yy54LGZbX109Yy55LGZbZ109Yy56KSx1Kz0zfXJldHVybiBxRShlLHtwb3NpdGlvbnM6dCxub3JtYWxzOmksdGFuZ2VudHM6cyxiaXRhbmdlbnRzOmZ9KX1mdW5jdGlvbiBzQih0LGUsbil7bGV0IG89dC5sZW5ndGgscj1lLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KG8pOnZvaWQgMCxpPWUudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KG8pOnZvaWQgMCxzPWUuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkobyk6dm9pZCAwLGY9MCx1PTAsYz0wLGw9ITAscD1qRSxkPXpFLG09R0U7aWYoZS5ub3JtYWx8fGUudGFuZ2VudHx8ZS5iaXRhbmdlbnQpZm9yKGxldCBfPTA7XzxvO18rPTYpe2xldCBnPWEuZnJvbUFycmF5KHQsXyxieSksYj1hLmZyb21BcnJheSh0LChfKzYpJW8sd3kpO2lmKGwpe2xldCBPPWEuZnJvbUFycmF5KHQsKF8rMyklbyxLRSk7YS5zdWJ0cmFjdChiLGcsYiksYS5zdWJ0cmFjdChPLGcsTyksbT1hLm5vcm1hbGl6ZShhLmNyb3NzKE8sYixtKSxtKSxsPSExfWEuZXF1YWxzRXBzaWxvbihiLGcsTS5FUFNJTE9OMTApJiYobD0hMCksKGUudGFuZ2VudHx8ZS5iaXRhbmdlbnQpJiYocD1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChnLHApLGUudGFuZ2VudCYmKGQ9YS5ub3JtYWxpemUoYS5jcm9zcyhwLG0sZCksZCkpKSxlLm5vcm1hbCYmKHJbZisrXT1tLngscltmKytdPW0ueSxyW2YrK109bS56LHJbZisrXT1tLngscltmKytdPW0ueSxyW2YrK109bS56KSxlLnRhbmdlbnQmJihpW3UrK109ZC54LGlbdSsrXT1kLnksaVt1KytdPWQueixpW3UrK109ZC54LGlbdSsrXT1kLnksaVt1KytdPWQueiksZS5iaXRhbmdlbnQmJihzW2MrK109cC54LHNbYysrXT1wLnksc1tjKytdPXAueixzW2MrK109cC54LHNbYysrXT1wLnksc1tjKytdPXAueil9cmV0dXJuIHFFKGUse3Bvc2l0aW9uczp0LG5vcm1hbHM6cix0YW5nZW50czppLGJpdGFuZ2VudHM6c30pfWZ1bmN0aW9uIFdFKHQsZSl7bGV0IG49dC5fdmVydGV4Rm9ybWF0LG89dC5fZWxsaXBzb2lkLHI9ZS5oZWlnaHQsaT1lLndpZHRoLHM9ZS5ub3J0aENhcCxmPWUuc291dGhDYXAsdT0wLGM9cixsPXIscD0wO3MmJih1PTEsbC09MSxwKz0xKSxmJiYoYy09MSxsLT0xLHArPTEpLHArPWkqbDtsZXQgZD1uLnBvc2l0aW9uP25ldyBGbG9hdDY0QXJyYXkocCozKTp2b2lkIDAsbT1uLnN0P25ldyBGbG9hdDMyQXJyYXkocCoyKTp2b2lkIDAsXz0wLGc9MCxiPWJ5LE89bkIsVD1OdW1iZXIuTUFYX1ZBTFVFLEU9TnVtYmVyLk1BWF9WQUxVRSx3PS1OdW1iZXIuTUFYX1ZBTFVFLEM9LU51bWJlci5NQVhfVkFMVUU7Zm9yKGxldCBBPXU7QTxjOysrQSlmb3IobGV0IFM9MDtTPGk7KytTKWdvLmNvbXB1dGVQb3NpdGlvbihlLG8sbi5zdCxBLFMsYixPKSxkW18rK109Yi54LGRbXysrXT1iLnksZFtfKytdPWIueixuLnN0JiYobVtnKytdPU8ueCxtW2crK109Ty55LFQ9TWF0aC5taW4oVCxPLngpLEU9TWF0aC5taW4oRSxPLnkpLHc9TWF0aC5tYXgodyxPLngpLEM9TWF0aC5tYXgoQyxPLnkpKTtpZihzJiYoZ28uY29tcHV0ZVBvc2l0aW9uKGUsbyxuLnN0LDAsMCxiLE8pLGRbXysrXT1iLngsZFtfKytdPWIueSxkW18rK109Yi56LG4uc3QmJihtW2crK109Ty54LG1bZysrXT1PLnksVD1PLngsRT1PLnksdz1PLngsQz1PLnkpKSxmJiYoZ28uY29tcHV0ZVBvc2l0aW9uKGUsbyxuLnN0LHItMSwwLGIsTyksZFtfKytdPWIueCxkW18rK109Yi55LGRbX109Yi56LG4uc3QmJihtW2crK109Ty54LG1bZ109Ty55LFQ9TWF0aC5taW4oVCxPLngpLEU9TWF0aC5taW4oRSxPLnkpLHc9TWF0aC5tYXgodyxPLngpLEM9TWF0aC5tYXgoQyxPLnkpKSksbi5zdCYmKFQ8MHx8RTwwfHx3PjF8fEM+MSkpZm9yKGxldCBBPTA7QTxtLmxlbmd0aDtBKz0yKW1bQV09KG1bQV0tVCkvKHctVCksbVtBKzFdPShtW0ErMV0tRSkvKEMtRSk7bGV0IE49aUIoZCxuLG8sZS50YW5nZW50Um90YXRpb25NYXRyaXgpLEk9NiooaS0xKSoobC0xKTtzJiYoSSs9MyooaS0xKSksZiYmKEkrPTMqKGktMSkpO2xldCBMPUR0LmNyZWF0ZVR5cGVkQXJyYXkocCxJKSx2PTAsRD0wLFU7Zm9yKFU9MDtVPGwtMTsrK1Upe2ZvcihsZXQgQT0wO0E8aS0xOysrQSl7bGV0IFM9dixQPVMraSxGPVArMSxqPVMrMTtMW0QrK109UyxMW0QrK109UCxMW0QrK109aixMW0QrK109aixMW0QrK109UCxMW0QrK109RiwrK3Z9Kyt2fWlmKHN8fGYpe2xldCBBPXAtMSxTPXAtMTtzJiZmJiYoQT1wLTIpO2xldCBQLEY7aWYodj0wLHMpZm9yKFU9MDtVPGktMTtVKyspUD12LEY9UCsxLExbRCsrXT1BLExbRCsrXT1QLExbRCsrXT1GLCsrdjtpZihmKWZvcih2PShsLTEpKmksVT0wO1U8aS0xO1UrKylQPXYsRj1QKzEsTFtEKytdPVAsTFtEKytdPVMsTFtEKytdPUYsKyt2fXJldHVybiBOLmluZGljZXM9TCxuLnN0JiYoTi5hdHRyaWJ1dGVzLnN0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczptfSkpLE59ZnVuY3Rpb24gSWEodCxlLG4sbyxyKXtyZXR1cm4gdFtlKytdPW9bbl0sdFtlKytdPW9bbisxXSx0W2UrK109b1tuKzJdLHRbZSsrXT1yW25dLHRbZSsrXT1yW24rMV0sdFtlXT1yW24rMl0sdH1mdW5jdGlvbiB2YSh0LGUsbixvKXtyZXR1cm4gdFtlKytdPW9bbl0sdFtlKytdPW9bbisxXSx0W2UrK109b1tuXSx0W2VdPW9bbisxXSx0fWZ1bmN0aW9uIGNCKHQsZSl7bGV0IG49dC5fc2hhZG93Vm9sdW1lLG89dC5fb2Zmc2V0QXR0cmlidXRlLHI9dC5fdmVydGV4Rm9ybWF0LGk9dC5fZXh0cnVkZWRIZWlnaHQscz10Ll9zdXJmYWNlSGVpZ2h0LGY9dC5fZWxsaXBzb2lkLHU9ZS5oZWlnaHQsYz1lLndpZHRoLGw7aWYobil7bGV0IEp0PWx0LmNsb25lKHIsVHkpO0p0Lm5vcm1hbD0hMCx0Ll92ZXJ0ZXhGb3JtYXQ9SnR9bGV0IHA9V0UodCxlKTtuJiYodC5fdmVydGV4Rm9ybWF0PXIpO2xldCBkPVNlLnNjYWxlVG9HZW9kZXRpY0hlaWdodChwLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLHMsZiwhMSk7ZD1uZXcgRmxvYXQ2NEFycmF5KGQpO2xldCBtPWQubGVuZ3RoLF89bSoyLGc9bmV3IEZsb2F0NjRBcnJheShfKTtnLnNldChkKTtsZXQgYj1TZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHQocC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxpLGYpO2cuc2V0KGIsbSkscC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1nO2xldCBPPXIubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkoXyk6dm9pZCAwLFQ9ci50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoXyk6dm9pZCAwLEU9ci5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShfKTp2b2lkIDAsdz1yLnN0P25ldyBGbG9hdDMyQXJyYXkoXy8zKjIpOnZvaWQgMCxDLE47aWYoci5ub3JtYWwpe2ZvcihOPXAuYXR0cmlidXRlcy5ub3JtYWwudmFsdWVzLE8uc2V0KE4pLGw9MDtsPG07bCsrKU5bbF09LU5bbF07Ty5zZXQoTixtKSxwLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlcz1PfWlmKG4pe049cC5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZXMsci5ub3JtYWx8fChwLmF0dHJpYnV0ZXMubm9ybWFsPXZvaWQgMCk7bGV0IEp0PW5ldyBGbG9hdDMyQXJyYXkoXyk7Zm9yKGw9MDtsPG07bCsrKU5bbF09LU5bbF07SnQuc2V0KE4sbSkscC5hdHRyaWJ1dGVzLmV4dHJ1ZGVEaXJlY3Rpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOkp0fSl9bGV0IEksTD1oKG8pO2lmKEwpe2xldCBKdD1tLzMqMix4ZT1uZXcgVWludDhBcnJheShKdCk7bz09PWFlLlRPUD94ZT14ZS5maWxsKDEsMCxKdC8yKTooST1vPT09YWUuTk9ORT8wOjEseGU9eGUuZmlsbChJKSkscC5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOnhlfSl9aWYoci50YW5nZW50KXtsZXQgSnQ9cC5hdHRyaWJ1dGVzLnRhbmdlbnQudmFsdWVzO2ZvcihULnNldChKdCksbD0wO2w8bTtsKyspSnRbbF09LUp0W2xdO1Quc2V0KEp0LG0pLHAuYXR0cmlidXRlcy50YW5nZW50LnZhbHVlcz1UfWlmKHIuYml0YW5nZW50KXtsZXQgSnQ9cC5hdHRyaWJ1dGVzLmJpdGFuZ2VudC52YWx1ZXM7RS5zZXQoSnQpLEUuc2V0KEp0LG0pLHAuYXR0cmlidXRlcy5iaXRhbmdlbnQudmFsdWVzPUV9ci5zdCYmKEM9cC5hdHRyaWJ1dGVzLnN0LnZhbHVlcyx3LnNldChDKSx3LnNldChDLG0vMyoyKSxwLmF0dHJpYnV0ZXMuc3QudmFsdWVzPXcpO2xldCB2PXAuaW5kaWNlcyxEPXYubGVuZ3RoLFU9bS8zLEE9RHQuY3JlYXRlVHlwZWRBcnJheShfLzMsRCoyKTtmb3IoQS5zZXQodiksbD0wO2w8RDtsKz0zKUFbbCtEXT12W2wrMl0rVSxBW2wrMStEXT12W2wrMV0rVSxBW2wrMitEXT12W2xdK1U7cC5pbmRpY2VzPUE7bGV0IFM9ZS5ub3J0aENhcCxQPWUuc291dGhDYXAsRj11LGo9MixIPTAsaz00LEs9NDtTJiYoai09MSxGLT0xLEgrPTEsay09MixLLT0xKSxQJiYoai09MSxGLT0xLEgrPTEsay09MixLLT0xKSxIKz1qKmMrMipGLWs7bGV0IFg9KEgrSykqMixSPW5ldyBGbG9hdDY0QXJyYXkoWCozKSxRPW4/bmV3IEZsb2F0MzJBcnJheShYKjMpOnZvaWQgMCxmdD1MP25ldyBVaW50OEFycmF5KFgpOnZvaWQgMCxwdD1yLnN0P25ldyBGbG9hdDMyQXJyYXkoWCoyKTp2b2lkIDAsZ3Q9bz09PWFlLlRPUDtMJiYhZ3QmJihJPW89PT1hZS5BTEw/MTowLGZ0PWZ0LmZpbGwoSSkpO2xldCBpdD0wLE50PTAsT3Q9MCx4dD0wLF90PWMqRixkdDtmb3IobD0wO2w8X3Q7bCs9YylkdD1sKjMsUj1JYShSLGl0LGR0LGQsYiksaXQrPTYsci5zdCYmKHB0PXZhKHB0LE50LGwqMixDKSxOdCs9NCksbiYmKE90Kz0zLFFbT3QrK109TltkdF0sUVtPdCsrXT1OW2R0KzFdLFFbT3QrK109TltkdCsyXSksZ3QmJihmdFt4dCsrXT0xLHh0Kz0xKTtpZihQKXtsZXQgSnQ9Uz9fdCsxOl90O2ZvcihkdD1KdCozLGw9MDtsPDI7bCsrKVI9SWEoUixpdCxkdCxkLGIpLGl0Kz02LHIuc3QmJihwdD12YShwdCxOdCxKdCoyLEMpLE50Kz00KSxuJiYoT3QrPTMsUVtPdCsrXT1OW2R0XSxRW090KytdPU5bZHQrMV0sUVtPdCsrXT1OW2R0KzJdKSxndCYmKGZ0W3h0KytdPTEseHQrPTEpfWVsc2UgZm9yKGw9X3QtYztsPF90O2wrKylkdD1sKjMsUj1JYShSLGl0LGR0LGQsYiksaXQrPTYsci5zdCYmKHB0PXZhKHB0LE50LGwqMixDKSxOdCs9NCksbiYmKE90Kz0zLFFbT3QrK109TltkdF0sUVtPdCsrXT1OW2R0KzFdLFFbT3QrK109TltkdCsyXSksZ3QmJihmdFt4dCsrXT0xLHh0Kz0xKTtmb3IobD1fdC0xO2w+MDtsLT1jKWR0PWwqMyxSPUlhKFIsaXQsZHQsZCxiKSxpdCs9NixyLnN0JiYocHQ9dmEocHQsTnQsbCoyLEMpLE50Kz00KSxuJiYoT3QrPTMsUVtPdCsrXT1OW2R0XSxRW090KytdPU5bZHQrMV0sUVtPdCsrXT1OW2R0KzJdKSxndCYmKGZ0W3h0KytdPTEseHQrPTEpO2lmKFMpe2xldCBKdD1fdDtmb3IoZHQ9SnQqMyxsPTA7bDwyO2wrKylSPUlhKFIsaXQsZHQsZCxiKSxpdCs9NixyLnN0JiYocHQ9dmEocHQsTnQsSnQqMixDKSxOdCs9NCksbiYmKE90Kz0zLFFbT3QrK109TltkdF0sUVtPdCsrXT1OW2R0KzFdLFFbT3QrK109TltkdCsyXSksZ3QmJihmdFt4dCsrXT0xLHh0Kz0xKX1lbHNlIGZvcihsPWMtMTtsPj0wO2wtLSlkdD1sKjMsUj1JYShSLGl0LGR0LGQsYiksaXQrPTYsci5zdCYmKHB0PXZhKHB0LE50LGwqMixDKSxOdCs9NCksbiYmKE90Kz0zLFFbT3QrK109TltkdF0sUVtPdCsrXT1OW2R0KzFdLFFbT3QrK109TltkdCsyXSksZ3QmJihmdFt4dCsrXT0xLHh0Kz0xKTtsZXQgVnQ9c0IoUixyLGYpO3Iuc3QmJihWdC5hdHRyaWJ1dGVzLnN0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpwdH0pKSxuJiYoVnQuYXR0cmlidXRlcy5leHRydWRlRGlyZWN0aW9uPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpRfSkpLEwmJihWdC5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOmZ0fSkpO2xldCB6dD1EdC5jcmVhdGVUeXBlZEFycmF5KFgsSCo2KSxoZSxjZSxwZSxmZTttPVIubGVuZ3RoLzM7bGV0IFF0PTA7Zm9yKGw9MDtsPG0tMTtsKz0yKXtoZT1sLGZlPShoZSsyKSVtO2xldCBKdD1hLmZyb21BcnJheShSLGhlKjMsd3kpLHhlPWEuZnJvbUFycmF5KFIsZmUqMyxLRSk7YS5lcXVhbHNFcHNpbG9uKEp0LHhlLE0uRVBTSUxPTjEwKXx8KGNlPShoZSsxKSVtLHBlPShjZSsyKSVtLHp0W1F0KytdPWhlLHp0W1F0KytdPWNlLHp0W1F0KytdPWZlLHp0W1F0KytdPWZlLHp0W1F0KytdPWNlLHp0W1F0KytdPXBlKX1yZXR1cm4gVnQuaW5kaWNlcz16dCxWdD1CZS5jb21iaW5lSW5zdGFuY2VzKFtuZXcgY28oe2dlb21ldHJ5OnB9KSxuZXcgY28oe2dlb21ldHJ5OlZ0fSldKSxWdFswXX1mdW5jdGlvbiBPeSh0LGUsbixvLHIpe2lmKG49PT0wKXJldHVybiBQdC5jbG9uZSh0LHIpO2xldCBpPWdvLmNvbXB1dGVPcHRpb25zKHQsZSxuLDAsSEUsWEUpLHM9aS5oZWlnaHQsZj1pLndpZHRoLHU9YUI7cmV0dXJuIGdvLmNvbXB1dGVQb3NpdGlvbihpLG8sITEsMCwwLHVbMF0pLGdvLmNvbXB1dGVQb3NpdGlvbihpLG8sITEsMCxmLTEsdVsxXSksZ28uY29tcHV0ZVBvc2l0aW9uKGksbywhMSxzLTEsMCx1WzJdKSxnby5jb21wdXRlUG9zaXRpb24oaSxvLCExLHMtMSxmLTEsdVszXSksUHQuZnJvbUNhcnRlc2lhbkFycmF5KHUsbyxyKX1mdW5jdGlvbiBtaSh0KXt0PXgodCx4LkVNUFRZX09CSkVDVCk7bGV0IGU9dC5yZWN0YW5nbGU7aWYoeS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLGUpLFB0LnZhbGlkYXRlKGUpLGUubm9ydGg8ZS5zb3V0aCl0aHJvdyBuZXcgQigib3B0aW9ucy5yZWN0YW5nbGUubm9ydGggbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gb3B0aW9ucy5yZWN0YW5nbGUuc291dGgiKTtsZXQgbj14KHQuaGVpZ2h0LDApLG89eCh0LmV4dHJ1ZGVkSGVpZ2h0LG4pO3RoaXMuX3JlY3RhbmdsZT1QdC5jbG9uZShlKSx0aGlzLl9ncmFudWxhcml0eT14KHQuZ3JhbnVsYXJpdHksTS5SQURJQU5TX1BFUl9ERUdSRUUpLHRoaXMuX2VsbGlwc29pZD0kLmNsb25lKHgodC5lbGxpcHNvaWQsJC5XR1M4NCkpLHRoaXMuX3N1cmZhY2VIZWlnaHQ9TWF0aC5tYXgobixvKSx0aGlzLl9yb3RhdGlvbj14KHQucm90YXRpb24sMCksdGhpcy5fc3RSb3RhdGlvbj14KHQuc3RSb3RhdGlvbiwwKSx0aGlzLl92ZXJ0ZXhGb3JtYXQ9bHQuY2xvbmUoeCh0LnZlcnRleEZvcm1hdCxsdC5ERUZBVUxUKSksdGhpcy5fZXh0cnVkZWRIZWlnaHQ9TWF0aC5taW4obixvKSx0aGlzLl9zaGFkb3dWb2x1bWU9eCh0LnNoYWRvd1ZvbHVtZSwhMSksdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlUmVjdGFuZ2xlR2VvbWV0cnkiLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl9yb3RhdGVkUmVjdGFuZ2xlPXZvaWQgMCx0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzPXZvaWQgMH1mdW5jdGlvbiBoQih0KXtpZih0Ll9zdFJvdGF0aW9uPT09MClyZXR1cm5bMCwwLDAsMSwxLDBdO2xldCBlPVB0LmNsb25lKHQuX3JlY3RhbmdsZSxrRSksbj10Ll9ncmFudWxhcml0eSxvPXQuX2VsbGlwc29pZCxyPXQuX3JvdGF0aW9uLXQuX3N0Um90YXRpb24saT1PeShlLG4scixvLGtFKSxzPXBCO3NbMF0ueD1pLndlc3Qsc1swXS55PWkuc291dGgsc1sxXS54PWkud2VzdCxzWzFdLnk9aS5ub3J0aCxzWzJdLng9aS5lYXN0LHNbMl0ueT1pLnNvdXRoO2xldCBmPXQucmVjdGFuZ2xlLHU9WG8uZnJvbVJvdGF0aW9uKHQuX3N0Um90YXRpb24sZEIpLGM9UHQuY2VudGVyKGYsbUIpO2ZvcihsZXQgXz0wO188MzsrK18pe2xldCBnPXNbX107Zy54LT1jLmxvbmdpdHVkZSxnLnktPWMubGF0aXR1ZGUsWG8ubXVsdGlwbHlCeVZlY3Rvcih1LGcsZyksZy54Kz1jLmxvbmdpdHVkZSxnLnkrPWMubGF0aXR1ZGUsZy54PShnLngtZi53ZXN0KS9mLndpZHRoLGcueT0oZy55LWYuc291dGgpL2YuaGVpZ2h0fWxldCBsPXNbMF0scD1zWzFdLGQ9c1syXSxtPW5ldyBBcnJheSg2KTtyZXR1cm4gbnQucGFjayhsLG0pLG50LnBhY2socCxtLDIpLG50LnBhY2soZCxtLDQpLG19dmFyIGJ5LEdFLHpFLGpFLEhFLG5CLG9CLHJCLHd5LEtFLFR5LGFCLFhFLGZCLFlFLCRFLFJzLHVCLFZFLGxCLGtFLHBCLGRCLG1CLEV5LFpFPVooKCk9PntQZSgpO3plKCk7VXQoKTt2ZSgpO1l0KCk7RGUoKTtJdCgpO2F0KCk7SHQoKTtadCgpO1hlKCk7WWUoKTthbigpO3NjKCk7Rm8oKTtzaSgpOyRlKCk7V3QoKTtmZigpO0ZuKCk7cXIoKTt0bigpOyRvKCk7QW4oKTtBeSgpO1JvKCk7Ynk9bmV3IGEsR0U9bmV3IGEsekU9bmV3IGEsakU9bmV3IGEsSEU9bmV3IFB0LG5CPW5ldyBudCxvQj1uZXcgeXQsckI9bmV3IHl0O3d5PW5ldyBhLEtFPW5ldyBhO1R5PW5ldyBsdDthQj1bbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGFdLFhFPW5ldyBjdCxmQj1uZXcgY3Q7bWkucGFja2VkTGVuZ3RoPVB0LnBhY2tlZExlbmd0aCskLnBhY2tlZExlbmd0aCtsdC5wYWNrZWRMZW5ndGgrNzttaS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj14KG4sMCksUHQucGFjayh0Ll9yZWN0YW5nbGUsZSxuKSxuKz1QdC5wYWNrZWRMZW5ndGgsJC5wYWNrKHQuX2VsbGlwc29pZCxlLG4pLG4rPSQucGFja2VkTGVuZ3RoLGx0LnBhY2sodC5fdmVydGV4Rm9ybWF0LGUsbiksbis9bHQucGFja2VkTGVuZ3RoLGVbbisrXT10Ll9ncmFudWxhcml0eSxlW24rK109dC5fc3VyZmFjZUhlaWdodCxlW24rK109dC5fcm90YXRpb24sZVtuKytdPXQuX3N0Um90YXRpb24sZVtuKytdPXQuX2V4dHJ1ZGVkSGVpZ2h0LGVbbisrXT10Ll9zaGFkb3dWb2x1bWU/MTowLGVbbl09eCh0Ll9vZmZzZXRBdHRyaWJ1dGUsLTEpLGV9O1lFPW5ldyBQdCwkRT0kLmNsb25lKCQuVU5JVF9TUEhFUkUpLFJzPXtyZWN0YW5nbGU6WUUsZWxsaXBzb2lkOiRFLHZlcnRleEZvcm1hdDpUeSxncmFudWxhcml0eTp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxyb3RhdGlvbjp2b2lkIDAsc3RSb3RhdGlvbjp2b2lkIDAsZXh0cnVkZWRIZWlnaHQ6dm9pZCAwLHNoYWRvd1ZvbHVtZTp2b2lkIDAsb2Zmc2V0QXR0cmlidXRlOnZvaWQgMH07bWkudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSxlPXgoZSwwKTtsZXQgbz1QdC51bnBhY2sodCxlLFlFKTtlKz1QdC5wYWNrZWRMZW5ndGg7bGV0IHI9JC51bnBhY2sodCxlLCRFKTtlKz0kLnBhY2tlZExlbmd0aDtsZXQgaT1sdC51bnBhY2sodCxlLFR5KTtlKz1sdC5wYWNrZWRMZW5ndGg7bGV0IHM9dFtlKytdLGY9dFtlKytdLHU9dFtlKytdLGM9dFtlKytdLGw9dFtlKytdLHA9dFtlKytdPT09MSxkPXRbZV07cmV0dXJuIGgobik/KG4uX3JlY3RhbmdsZT1QdC5jbG9uZShvLG4uX3JlY3RhbmdsZSksbi5fZWxsaXBzb2lkPSQuY2xvbmUocixuLl9lbGxpcHNvaWQpLG4uX3ZlcnRleEZvcm1hdD1sdC5jbG9uZShpLG4uX3ZlcnRleEZvcm1hdCksbi5fZ3JhbnVsYXJpdHk9cyxuLl9zdXJmYWNlSGVpZ2h0PWYsbi5fcm90YXRpb249dSxuLl9zdFJvdGF0aW9uPWMsbi5fZXh0cnVkZWRIZWlnaHQ9bCxuLl9zaGFkb3dWb2x1bWU9cCxuLl9vZmZzZXRBdHRyaWJ1dGU9ZD09PS0xP3ZvaWQgMDpkLG4pOihScy5ncmFudWxhcml0eT1zLFJzLmhlaWdodD1mLFJzLnJvdGF0aW9uPXUsUnMuc3RSb3RhdGlvbj1jLFJzLmV4dHJ1ZGVkSGVpZ2h0PWwsUnMuc2hhZG93Vm9sdW1lPXAsUnMub2Zmc2V0QXR0cmlidXRlPWQ9PT0tMT92b2lkIDA6ZCxuZXcgbWkoUnMpKX07bWkuY29tcHV0ZVJlY3RhbmdsZT1mdW5jdGlvbih0LGUpe3Q9eCh0LHguRU1QVFlfT0JKRUNUKTtsZXQgbj10LnJlY3RhbmdsZTtpZih5LnR5cGVPZi5vYmplY3QoInJlY3RhbmdsZSIsbiksUHQudmFsaWRhdGUobiksbi5ub3J0aDxuLnNvdXRoKXRocm93IG5ldyBCKCJvcHRpb25zLnJlY3RhbmdsZS5ub3J0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBvcHRpb25zLnJlY3RhbmdsZS5zb3V0aCIpO2xldCBvPXgodC5ncmFudWxhcml0eSxNLlJBRElBTlNfUEVSX0RFR1JFRSkscj14KHQuZWxsaXBzb2lkLCQuV0dTODQpLGk9eCh0LnJvdGF0aW9uLDApO3JldHVybiBPeShuLG8saSxyLGUpfTt1Qj1uZXcgdHQsVkU9bmV3IG5lLGxCPW5ldyBjdDttaS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtpZihNLmVxdWFsc0Vwc2lsb24odC5fcmVjdGFuZ2xlLm5vcnRoLHQuX3JlY3RhbmdsZS5zb3V0aCxNLkVQU0lMT04xMCl8fE0uZXF1YWxzRXBzaWxvbih0Ll9yZWN0YW5nbGUuZWFzdCx0Ll9yZWN0YW5nbGUud2VzdCxNLkVQU0lMT04xMCkpcmV0dXJuO2xldCBlPXQuX3JlY3RhbmdsZSxuPXQuX2VsbGlwc29pZCxvPXQuX3JvdGF0aW9uLHI9dC5fc3RSb3RhdGlvbixpPXQuX3ZlcnRleEZvcm1hdCxzPWdvLmNvbXB1dGVPcHRpb25zKGUsdC5fZ3JhbnVsYXJpdHksbyxyLEhFLFhFLGZCKSxmPXVCO2lmKHIhPT0wfHxvIT09MCl7bGV0IG09UHQuY2VudGVyKGUsbEIpLF89bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWxDYXJ0b2dyYXBoaWMobSx3eSk7bmUuZnJvbUF4aXNBbmdsZShfLC1yLFZFKSx0dC5mcm9tUXVhdGVybmlvbihWRSxmKX1lbHNlIHR0LmNsb25lKHR0LklERU5USVRZLGYpO2xldCB1PXQuX3N1cmZhY2VIZWlnaHQsYz10Ll9leHRydWRlZEhlaWdodCxsPSFNLmVxdWFsc0Vwc2lsb24odSxjLDAsTS5FUFNJTE9OMik7cy5sb25TY2FsYXI9MS90Ll9yZWN0YW5nbGUud2lkdGgscy5sYXRTY2FsYXI9MS90Ll9yZWN0YW5nbGUuaGVpZ2h0LHMudGFuZ2VudFJvdGF0aW9uTWF0cml4PWY7bGV0IHAsZDtpZihlPXQuX3JlY3RhbmdsZSxsKXtwPWNCKHQscyk7bGV0IG09eXQuZnJvbVJlY3RhbmdsZTNEKGUsbix1LHJCKSxfPXl0LmZyb21SZWN0YW5nbGUzRChlLG4sYyxvQik7ZD15dC51bmlvbihtLF8pfWVsc2V7aWYocD1XRSh0LHMpLHAuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9U2Uuc2NhbGVUb0dlb2RldGljSGVpZ2h0KHAuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsdSxuLCExKSxoKHQuX29mZnNldEF0dHJpYnV0ZSkpe2xldCBtPXAuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLF89dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjEsZz1uZXcgVWludDhBcnJheShtLzMpLmZpbGwoXyk7cC5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOmd9KX1kPXl0LmZyb21SZWN0YW5nbGUzRChlLG4sdSl9cmV0dXJuIGkucG9zaXRpb258fGRlbGV0ZSBwLmF0dHJpYnV0ZXMucG9zaXRpb24sbmV3IEZ0KHthdHRyaWJ1dGVzOnAuYXR0cmlidXRlcyxpbmRpY2VzOnAuaW5kaWNlcyxwcmltaXRpdmVUeXBlOnAucHJpbWl0aXZlVHlwZSxib3VuZGluZ1NwaGVyZTpkLG9mZnNldEF0dHJpYnV0ZTp0Ll9vZmZzZXRBdHRyaWJ1dGV9KX07bWkuY3JlYXRlU2hhZG93Vm9sdW1lPWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz10Ll9ncmFudWxhcml0eSxyPXQuX2VsbGlwc29pZCxpPWUobyxyKSxzPW4obyxyKTtyZXR1cm4gbmV3IG1pKHtyZWN0YW5nbGU6dC5fcmVjdGFuZ2xlLHJvdGF0aW9uOnQuX3JvdGF0aW9uLGVsbGlwc29pZDpyLHN0Um90YXRpb246dC5fc3RSb3RhdGlvbixncmFudWxhcml0eTpvLGV4dHJ1ZGVkSGVpZ2h0OnMsaGVpZ2h0OmksdmVydGV4Rm9ybWF0Omx0LlBPU0lUSU9OX09OTFksc2hhZG93Vm9sdW1lOiEwfSl9O2tFPW5ldyBQdCxwQj1bbmV3IG50LG5ldyBudCxuZXcgbnRdLGRCPW5ldyBYbyxtQj1uZXcgY3Q7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobWkucHJvdG90eXBlLHtyZWN0YW5nbGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBoKHRoaXMuX3JvdGF0ZWRSZWN0YW5nbGUpfHwodGhpcy5fcm90YXRlZFJlY3RhbmdsZT1PeSh0aGlzLl9yZWN0YW5nbGUsdGhpcy5fZ3JhbnVsYXJpdHksdGhpcy5fcm90YXRpb24sdGhpcy5fZWxsaXBzb2lkKSksdGhpcy5fcm90YXRlZFJlY3RhbmdsZX19LHRleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBoKHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHMpfHwodGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cz1oQih0aGlzKSksdGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50c319fSk7RXk9bWl9KTt2YXIgUnk9e307bWUoUnkse2RlZmF1bHQ6KCk9PnlCfSk7ZnVuY3Rpb24gX0IodCxlKXtyZXR1cm4gaChlKSYmKHQ9RXkudW5wYWNrKHQsZSkpLHQuX2VsbGlwc29pZD0kLmNsb25lKHQuX2VsbGlwc29pZCksdC5fcmVjdGFuZ2xlPVB0LmNsb25lKHQuX3JlY3RhbmdsZSksRXkuY3JlYXRlR2VvbWV0cnkodCl9dmFyIHlCLFN5PVooKCk9PnthdCgpO1p0KCk7QW4oKTtaRSgpO3lCPV9CfSk7ZnVuY3Rpb24gUUUodCxlKXtsZXQgbj10Ll9lbGxpcHNvaWQsbz1lLmhlaWdodCxyPWUud2lkdGgsaT1lLm5vcnRoQ2FwLHM9ZS5zb3V0aENhcCxmPW8sdT0yLGM9MCxsPTQ7aSYmKHUtPTEsZi09MSxjKz0xLGwtPTIpLHMmJih1LT0xLGYtPTEsYys9MSxsLT0yKSxjKz11KnIrMipmLWw7bGV0IHA9bmV3IEZsb2F0NjRBcnJheShjKjMpLGQ9MCxtPTAsXyxnPWJCO2lmKGkpZ28uY29tcHV0ZVBvc2l0aW9uKGUsbiwhMSxtLDAsZykscFtkKytdPWcueCxwW2QrK109Zy55LHBbZCsrXT1nLno7ZWxzZSBmb3IoXz0wO188cjtfKyspZ28uY29tcHV0ZVBvc2l0aW9uKGUsbiwhMSxtLF8sZykscFtkKytdPWcueCxwW2QrK109Zy55LHBbZCsrXT1nLno7Zm9yKF89ci0xLG09MTttPG87bSsrKWdvLmNvbXB1dGVQb3NpdGlvbihlLG4sITEsbSxfLGcpLHBbZCsrXT1nLngscFtkKytdPWcueSxwW2QrK109Zy56O2lmKG09by0xLCFzKWZvcihfPXItMjtfPj0wO18tLSlnby5jb21wdXRlUG9zaXRpb24oZSxuLCExLG0sXyxnKSxwW2QrK109Zy54LHBbZCsrXT1nLnkscFtkKytdPWcuejtmb3IoXz0wLG09by0yO20+MDttLS0pZ28uY29tcHV0ZVBvc2l0aW9uKGUsbiwhMSxtLF8sZykscFtkKytdPWcueCxwW2QrK109Zy55LHBbZCsrXT1nLno7bGV0IGI9cC5sZW5ndGgvMyoyLE89RHQuY3JlYXRlVHlwZWRBcnJheShwLmxlbmd0aC8zLGIpLFQ9MDtmb3IobGV0IHc9MDt3PHAubGVuZ3RoLzMtMTt3KyspT1tUKytdPXcsT1tUKytdPXcrMTtPW1QrK109cC5sZW5ndGgvMy0xLE9bVCsrXT0wO2xldCBFPW5ldyBGdCh7YXR0cmlidXRlczpuZXcgcmUscHJpbWl0aXZlVHlwZTpMdC5MSU5FU30pO3JldHVybiBFLmF0dHJpYnV0ZXMucG9zaXRpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpwfSksRS5pbmRpY2VzPU8sRX1mdW5jdGlvbiBUQih0LGUpe2xldCBuPXQuX3N1cmZhY2VIZWlnaHQsbz10Ll9leHRydWRlZEhlaWdodCxyPXQuX2VsbGlwc29pZCxpPW8scz1uLGY9UUUodCxlKSx1PWUuaGVpZ2h0LGM9ZS53aWR0aCxsPVNlLnNjYWxlVG9HZW9kZXRpY0hlaWdodChmLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLHMsciwhMSkscD1sLmxlbmd0aCxkPW5ldyBGbG9hdDY0QXJyYXkocCoyKTtkLnNldChsKTtsZXQgbT1TZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHQoZi5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxpLHIpO2Quc2V0KG0scCksZi5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1kO2xldCBfPWUubm9ydGhDYXAsZz1lLnNvdXRoQ2FwLGI9NDtfJiYoYi09MSksZyYmKGItPTEpO2xldCBPPShkLmxlbmd0aC8zK2IpKjIsVD1EdC5jcmVhdGVUeXBlZEFycmF5KGQubGVuZ3RoLzMsTyk7cD1kLmxlbmd0aC82O2xldCBFPTA7Zm9yKGxldCBDPTA7QzxwLTE7QysrKVRbRSsrXT1DLFRbRSsrXT1DKzEsVFtFKytdPUMrcCxUW0UrK109QytwKzE7VFtFKytdPXAtMSxUW0UrK109MCxUW0UrK109cCtwLTEsVFtFKytdPXAsVFtFKytdPTAsVFtFKytdPXA7bGV0IHc7aWYoXyl3PXUtMTtlbHNle2xldCBDPWMtMTtUW0UrK109QyxUW0UrK109QytwLHc9Yyt1LTJ9aWYoVFtFKytdPXcsVFtFKytdPXcrcCwhZyl7bGV0IEM9Yyt3LTE7VFtFKytdPUMsVFtFXT1DK3B9cmV0dXJuIGYuaW5kaWNlcz1ULGZ9ZnVuY3Rpb24gTGEodCl7dD14KHQseC5FTVBUWV9PQkpFQ1QpO2xldCBlPXQucmVjdGFuZ2xlLG49eCh0LmdyYW51bGFyaXR5LE0uUkFESUFOU19QRVJfREVHUkVFKSxvPXgodC5lbGxpcHNvaWQsJC5XR1M4NCkscj14KHQucm90YXRpb24sMCk7aWYoIWgoZSkpdGhyb3cgbmV3IEIoInJlY3RhbmdsZSBpcyByZXF1aXJlZC4iKTtpZihQdC52YWxpZGF0ZShlKSxlLm5vcnRoPGUuc291dGgpdGhyb3cgbmV3IEIoIm9wdGlvbnMucmVjdGFuZ2xlLm5vcnRoIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9wdGlvbnMucmVjdGFuZ2xlLnNvdXRoIik7bGV0IGk9eCh0LmhlaWdodCwwKSxzPXgodC5leHRydWRlZEhlaWdodCxpKTt0aGlzLl9yZWN0YW5nbGU9UHQuY2xvbmUoZSksdGhpcy5fZ3JhbnVsYXJpdHk9bix0aGlzLl9lbGxpcHNvaWQ9byx0aGlzLl9zdXJmYWNlSGVpZ2h0PU1hdGgubWF4KGkscyksdGhpcy5fcm90YXRpb249cix0aGlzLl9leHRydWRlZEhlaWdodD1NYXRoLm1pbihpLHMpLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVSZWN0YW5nbGVPdXRsaW5lR2VvbWV0cnkifXZhciBnQixBQixiQix3QixKRSx0UixEYSxPQixDeSxlUj1aKCgpPT57UGUoKTtVdCgpO3ZlKCk7RGUoKTtJdCgpO2F0KCk7SHQoKTtadCgpO1hlKCk7WWUoKTthbigpO0ZvKCk7JGUoKTtXdCgpO3FyKCk7dG4oKTtBbigpO0F5KCk7Z0I9bmV3IHl0LEFCPW5ldyB5dCxiQj1uZXcgYSx3Qj1uZXcgUHQ7TGEucGFja2VkTGVuZ3RoPVB0LnBhY2tlZExlbmd0aCskLnBhY2tlZExlbmd0aCs1O0xhLnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBCKCJ2YWx1ZSBpcyByZXF1aXJlZCIpO2lmKCFoKGUpKXRocm93IG5ldyBCKCJhcnJheSBpcyByZXF1aXJlZCIpO3JldHVybiBuPXgobiwwKSxQdC5wYWNrKHQuX3JlY3RhbmdsZSxlLG4pLG4rPVB0LnBhY2tlZExlbmd0aCwkLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9JC5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX2dyYW51bGFyaXR5LGVbbisrXT10Ll9zdXJmYWNlSGVpZ2h0LGVbbisrXT10Ll9yb3RhdGlvbixlW24rK109dC5fZXh0cnVkZWRIZWlnaHQsZVtuXT14KHQuX29mZnNldEF0dHJpYnV0ZSwtMSksZX07SkU9bmV3IFB0LHRSPSQuY2xvbmUoJC5VTklUX1NQSEVSRSksRGE9e3JlY3RhbmdsZTpKRSxlbGxpcHNvaWQ6dFIsZ3JhbnVsYXJpdHk6dm9pZCAwLGhlaWdodDp2b2lkIDAscm90YXRpb246dm9pZCAwLGV4dHJ1ZGVkSGVpZ2h0OnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtMYS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBCKCJhcnJheSBpcyByZXF1aXJlZCIpO2U9eChlLDApO2xldCBvPVB0LnVucGFjayh0LGUsSkUpO2UrPVB0LnBhY2tlZExlbmd0aDtsZXQgcj0kLnVucGFjayh0LGUsdFIpO2UrPSQucGFja2VkTGVuZ3RoO2xldCBpPXRbZSsrXSxzPXRbZSsrXSxmPXRbZSsrXSx1PXRbZSsrXSxjPXRbZV07cmV0dXJuIGgobik/KG4uX3JlY3RhbmdsZT1QdC5jbG9uZShvLG4uX3JlY3RhbmdsZSksbi5fZWxsaXBzb2lkPSQuY2xvbmUocixuLl9lbGxpcHNvaWQpLG4uX3N1cmZhY2VIZWlnaHQ9cyxuLl9yb3RhdGlvbj1mLG4uX2V4dHJ1ZGVkSGVpZ2h0PXUsbi5fb2Zmc2V0QXR0cmlidXRlPWM9PT0tMT92b2lkIDA6YyxuKTooRGEuZ3JhbnVsYXJpdHk9aSxEYS5oZWlnaHQ9cyxEYS5yb3RhdGlvbj1mLERhLmV4dHJ1ZGVkSGVpZ2h0PXUsRGEub2Zmc2V0QXR0cmlidXRlPWM9PT0tMT92b2lkIDA6YyxuZXcgTGEoRGEpKX07T0I9bmV3IGN0O0xhLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3JlY3RhbmdsZSxuPXQuX2VsbGlwc29pZCxvPWdvLmNvbXB1dGVPcHRpb25zKGUsdC5fZ3JhbnVsYXJpdHksdC5fcm90YXRpb24sMCx3QixPQikscixpO2lmKE0uZXF1YWxzRXBzaWxvbihlLm5vcnRoLGUuc291dGgsTS5FUFNJTE9OMTApfHxNLmVxdWFsc0Vwc2lsb24oZS5lYXN0LGUud2VzdCxNLkVQU0lMT04xMCkpcmV0dXJuO2xldCBzPXQuX3N1cmZhY2VIZWlnaHQsZj10Ll9leHRydWRlZEhlaWdodCx1PSFNLmVxdWFsc0Vwc2lsb24ocyxmLDAsTS5FUFNJTE9OMiksYztpZih1KXtpZihyPVRCKHQsbyksaCh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgZD1yLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLG09bmV3IFVpbnQ4QXJyYXkoZCk7dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QP209bS5maWxsKDEsMCxkLzIpOihjPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxLG09bS5maWxsKGMpKSxyLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6bX0pfWxldCBsPXl0LmZyb21SZWN0YW5nbGUzRChlLG4scyxBQikscD15dC5mcm9tUmVjdGFuZ2xlM0QoZSxuLGYsZ0IpO2k9eXQudW5pb24obCxwKX1lbHNle2lmKHI9UUUodCxvKSxyLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPVNlLnNjYWxlVG9HZW9kZXRpY0hlaWdodChyLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLHMsbiwhMSksaCh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgbD1yLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aDtjPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxO2xldCBwPW5ldyBVaW50OEFycmF5KGwvMykuZmlsbChjKTtyLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6cH0pfWk9eXQuZnJvbVJlY3RhbmdsZTNEKGUsbixzKX1yZXR1cm4gbmV3IEZ0KHthdHRyaWJ1dGVzOnIuYXR0cmlidXRlcyxpbmRpY2VzOnIuaW5kaWNlcyxwcmltaXRpdmVUeXBlOkx0LkxJTkVTLGJvdW5kaW5nU3BoZXJlOmksb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTtDeT1MYX0pO3ZhciB4eT17fTttZSh4eSx7ZGVmYXVsdDooKT0+UkJ9KTtmdW5jdGlvbiBFQih0LGUpe3JldHVybiBoKGUpJiYodD1DeS51bnBhY2sodCxlKSksdC5fZWxsaXBzb2lkPSQuY2xvbmUodC5fZWxsaXBzb2lkKSx0Ll9yZWN0YW5nbGU9UHQuY2xvbmUodC5fcmVjdGFuZ2xlKSxDeS5jcmVhdGVHZW9tZXRyeSh0KX12YXIgUkIsUHk9WigoKT0+e2F0KCk7WnQoKTtBbigpO2VSKCk7UkI9RUJ9KTtmdW5jdGlvbiBTQih0LGUsbixvLHIsaSxzKXtsZXQgZj15bi5udW1iZXJPZlBvaW50cyh0LGUsciksdSxjPW4ucmVkLGw9bi5ncmVlbixwPW4uYmx1ZSxkPW4uYWxwaGEsbT1vLnJlZCxfPW8uZ3JlZW4sZz1vLmJsdWUsYj1vLmFscGhhO2lmKHNlLmVxdWFscyhuLG8pKXtmb3IodT0wO3U8Zjt1KyspaVtzKytdPXNlLmZsb2F0VG9CeXRlKGMpLGlbcysrXT1zZS5mbG9hdFRvQnl0ZShsKSxpW3MrK109c2UuZmxvYXRUb0J5dGUocCksaVtzKytdPXNlLmZsb2F0VG9CeXRlKGQpO3JldHVybiBzfWxldCBPPShtLWMpL2YsVD0oXy1sKS9mLEU9KGctcCkvZix3PShiLWQpL2YsQz1zO2Zvcih1PTA7dTxmO3UrKylpW0MrK109c2UuZmxvYXRUb0J5dGUoYyt1Kk8pLGlbQysrXT1zZS5mbG9hdFRvQnl0ZShsK3UqVCksaVtDKytdPXNlLmZsb2F0VG9CeXRlKHArdSpFKSxpW0MrK109c2UuZmxvYXRUb0J5dGUoZCt1KncpO3JldHVybiBDfWZ1bmN0aW9uIHJ1KHQpe3Q9eCh0LHguRU1QVFlfT0JKRUNUKTtsZXQgZT10LnBvc2l0aW9ucyxuPXQuY29sb3JzLG89eCh0LmNvbG9yc1BlclZlcnRleCwhMSk7aWYoIWgoZSl8fGUubGVuZ3RoPDIpdGhyb3cgbmV3IEIoIkF0IGxlYXN0IHR3byBwb3NpdGlvbnMgYXJlIHJlcXVpcmVkLiIpO2lmKGgobikmJihvJiZuLmxlbmd0aDxlLmxlbmd0aHx8IW8mJm4ubGVuZ3RoPGUubGVuZ3RoLTEpKXRocm93IG5ldyBCKCJjb2xvcnMgaGFzIGFuIGludmFsaWQgbGVuZ3RoLiIpO3RoaXMuX3Bvc2l0aW9ucz1lLHRoaXMuX2NvbG9ycz1uLHRoaXMuX2NvbG9yc1BlclZlcnRleD1vLHRoaXMuX2FyY1R5cGU9eCh0LmFyY1R5cGUsdWUuR0VPREVTSUMpLHRoaXMuX2dyYW51bGFyaXR5PXgodC5ncmFudWxhcml0eSxNLlJBRElBTlNfUEVSX0RFR1JFRSksdGhpcy5fZWxsaXBzb2lkPXgodC5lbGxpcHNvaWQsJC5XR1M4NCksdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlU2ltcGxlUG9seWxpbmVHZW9tZXRyeSI7bGV0IHI9MStlLmxlbmd0aCphLnBhY2tlZExlbmd0aDtyKz1oKG4pPzErbi5sZW5ndGgqc2UucGFja2VkTGVuZ3RoOjEsdGhpcy5wYWNrZWRMZW5ndGg9ciskLnBhY2tlZExlbmd0aCszfXZhciBMZCxGZCxDQixNeSxuUj1aKCgpPT57ZmMoKTtQZSgpO1V0KCk7UWYoKTtEZSgpO0l0KCk7YXQoKTtIdCgpO1p0KCk7WGUoKTtZZSgpO2FuKCk7JGUoKTtXdCgpO2dhKCk7dG4oKTtydS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgQigidmFsdWUgaXMgcmVxdWlyZWQiKTtpZighaChlKSl0aHJvdyBuZXcgQigiYXJyYXkgaXMgcmVxdWlyZWQiKTtuPXgobiwwKTtsZXQgbyxyPXQuX3Bvc2l0aW9ucyxpPXIubGVuZ3RoO2ZvcihlW24rK109aSxvPTA7bzxpOysrbyxuKz1hLnBhY2tlZExlbmd0aClhLnBhY2socltvXSxlLG4pO2xldCBzPXQuX2NvbG9ycztmb3IoaT1oKHMpP3MubGVuZ3RoOjAsZVtuKytdPWksbz0wO288aTsrK28sbis9c2UucGFja2VkTGVuZ3RoKXNlLnBhY2soc1tvXSxlLG4pO3JldHVybiAkLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9JC5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX2NvbG9yc1BlclZlcnRleD8xOjAsZVtuKytdPXQuX2FyY1R5cGUsZVtuXT10Ll9ncmFudWxhcml0eSxlfTtydS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBCKCJhcnJheSBpcyByZXF1aXJlZCIpO2U9eChlLDApO2xldCBvLHI9dFtlKytdLGk9bmV3IEFycmF5KHIpO2ZvcihvPTA7bzxyOysrbyxlKz1hLnBhY2tlZExlbmd0aClpW29dPWEudW5wYWNrKHQsZSk7cj10W2UrK107bGV0IHM9cj4wP25ldyBBcnJheShyKTp2b2lkIDA7Zm9yKG89MDtvPHI7KytvLGUrPXNlLnBhY2tlZExlbmd0aClzW29dPXNlLnVucGFjayh0LGUpO2xldCBmPSQudW5wYWNrKHQsZSk7ZSs9JC5wYWNrZWRMZW5ndGg7bGV0IHU9dFtlKytdPT09MSxjPXRbZSsrXSxsPXRbZV07cmV0dXJuIGgobik/KG4uX3Bvc2l0aW9ucz1pLG4uX2NvbG9ycz1zLG4uX2VsbGlwc29pZD1mLG4uX2NvbG9yc1BlclZlcnRleD11LG4uX2FyY1R5cGU9YyxuLl9ncmFudWxhcml0eT1sLG4pOm5ldyBydSh7cG9zaXRpb25zOmksY29sb3JzOnMsZWxsaXBzb2lkOmYsY29sb3JzUGVyVmVydGV4OnUsYXJjVHlwZTpjLGdyYW51bGFyaXR5Omx9KX07TGQ9bmV3IEFycmF5KDIpLEZkPW5ldyBBcnJheSgyKSxDQj17cG9zaXRpb25zOkxkLGhlaWdodDpGZCxlbGxpcHNvaWQ6dm9pZCAwLG1pbkRpc3RhbmNlOnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDB9O3J1LmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3Bvc2l0aW9ucyxuPXQuX2NvbG9ycyxvPXQuX2NvbG9yc1BlclZlcnRleCxyPXQuX2FyY1R5cGUsaT10Ll9ncmFudWxhcml0eSxzPXQuX2VsbGlwc29pZCxmPU0uY2hvcmRMZW5ndGgoaSxzLm1heGltdW1SYWRpdXMpLHU9aChuKSYmIW8sYyxsPWUubGVuZ3RoLHAsZCxtLF8sZz0wO2lmKHI9PT11ZS5HRU9ERVNJQ3x8cj09PXVlLlJIVU1CKXtsZXQgdyxDLE47cj09PXVlLkdFT0RFU0lDPyh3PU0uY2hvcmRMZW5ndGgoaSxzLm1heGltdW1SYWRpdXMpLEM9eW4ubnVtYmVyT2ZQb2ludHMsTj15bi5nZW5lcmF0ZUFyYyk6KHc9aSxDPXluLm51bWJlck9mUG9pbnRzUmh1bWJMaW5lLE49eW4uZ2VuZXJhdGVSaHVtYkFyYyk7bGV0IEk9eW4uZXh0cmFjdEhlaWdodHMoZSxzKSxMPUNCO2lmKHI9PT11ZS5HRU9ERVNJQz9MLm1pbkRpc3RhbmNlPWY6TC5ncmFudWxhcml0eT1pLEwuZWxsaXBzb2lkPXMsdSl7bGV0IHY9MDtmb3IoYz0wO2M8bC0xO2MrKyl2Kz1DKGVbY10sZVtjKzFdLHcpKzE7cD1uZXcgRmxvYXQ2NEFycmF5KHYqMyksbT1uZXcgVWludDhBcnJheSh2KjQpLEwucG9zaXRpb25zPUxkLEwuaGVpZ2h0PUZkO2xldCBEPTA7Zm9yKGM9MDtjPGwtMTsrK2Mpe0xkWzBdPWVbY10sTGRbMV09ZVtjKzFdLEZkWzBdPUlbY10sRmRbMV09SVtjKzFdO2xldCBVPU4oTCk7aWYoaChuKSl7bGV0IEE9VS5sZW5ndGgvMztfPW5bY107Zm9yKGxldCBTPTA7UzxBOysrUyltW0QrK109c2UuZmxvYXRUb0J5dGUoXy5yZWQpLG1bRCsrXT1zZS5mbG9hdFRvQnl0ZShfLmdyZWVuKSxtW0QrK109c2UuZmxvYXRUb0J5dGUoXy5ibHVlKSxtW0QrK109c2UuZmxvYXRUb0J5dGUoXy5hbHBoYSl9cC5zZXQoVSxnKSxnKz1VLmxlbmd0aH19ZWxzZSBpZihMLnBvc2l0aW9ucz1lLEwuaGVpZ2h0PUkscD1uZXcgRmxvYXQ2NEFycmF5KE4oTCkpLGgobikpe2ZvcihtPW5ldyBVaW50OEFycmF5KHAubGVuZ3RoLzMqNCksYz0wO2M8bC0xOysrYyl7bGV0IEQ9ZVtjXSxVPWVbYysxXSxBPW5bY10sUz1uW2MrMV07Zz1TQihELFUsQSxTLGYsbSxnKX1sZXQgdj1uW2wtMV07bVtnKytdPXNlLmZsb2F0VG9CeXRlKHYucmVkKSxtW2crK109c2UuZmxvYXRUb0J5dGUodi5ncmVlbiksbVtnKytdPXNlLmZsb2F0VG9CeXRlKHYuYmx1ZSksbVtnKytdPXNlLmZsb2F0VG9CeXRlKHYuYWxwaGEpfX1lbHNle2Q9dT9sKjItMjpsLHA9bmV3IEZsb2F0NjRBcnJheShkKjMpLG09aChuKT9uZXcgVWludDhBcnJheShkKjQpOnZvaWQgMDtsZXQgdz0wLEM9MDtmb3IoYz0wO2M8bDsrK2Mpe2xldCBOPWVbY107aWYodSYmYz4wJiYoYS5wYWNrKE4scCx3KSx3Kz0zLF89bltjLTFdLG1bQysrXT1zZS5mbG9hdFRvQnl0ZShfLnJlZCksbVtDKytdPXNlLmZsb2F0VG9CeXRlKF8uZ3JlZW4pLG1bQysrXT1zZS5mbG9hdFRvQnl0ZShfLmJsdWUpLG1bQysrXT1zZS5mbG9hdFRvQnl0ZShfLmFscGhhKSksdSYmYz09PWwtMSlicmVhazthLnBhY2soTixwLHcpLHcrPTMsaChuKSYmKF89bltjXSxtW0MrK109c2UuZmxvYXRUb0J5dGUoXy5yZWQpLG1bQysrXT1zZS5mbG9hdFRvQnl0ZShfLmdyZWVuKSxtW0MrK109c2UuZmxvYXRUb0J5dGUoXy5ibHVlKSxtW0MrK109c2UuZmxvYXRUb0J5dGUoXy5hbHBoYSkpfX1sZXQgYj1uZXcgcmU7Yi5wb3NpdGlvbj1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnB9KSxoKG4pJiYoYi5jb2xvcj1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTo0LHZhbHVlczptLG5vcm1hbGl6ZTohMH0pKSxkPXAubGVuZ3RoLzM7bGV0IE89KGQtMSkqMixUPUR0LmNyZWF0ZVR5cGVkQXJyYXkoZCxPKSxFPTA7Zm9yKGM9MDtjPGQtMTsrK2MpVFtFKytdPWMsVFtFKytdPWMrMTtyZXR1cm4gbmV3IEZ0KHthdHRyaWJ1dGVzOmIsaW5kaWNlczpULHByaW1pdGl2ZVR5cGU6THQuTElORVMsYm91bmRpbmdTcGhlcmU6eXQuZnJvbVBvaW50cyhlKX0pfTtNeT1ydX0pO3ZhciBOeT17fTttZShOeSx7ZGVmYXVsdDooKT0+UEJ9KTtmdW5jdGlvbiB4Qih0LGUpe3JldHVybiBoKGUpJiYodD1NeS51bnBhY2sodCxlKSksdC5fZWxsaXBzb2lkPSQuY2xvbmUodC5fZWxsaXBzb2lkKSxNeS5jcmVhdGVHZW9tZXRyeSh0KX12YXIgUEIsSXk9WigoKT0+e2F0KCk7WnQoKTtuUigpO1BCPXhCfSk7ZnVuY3Rpb24gRmEodCl7bGV0IGU9eCh0LnJhZGl1cywxKSxvPXtyYWRpaTpuZXcgYShlLGUsZSksc3RhY2tQYXJ0aXRpb25zOnQuc3RhY2tQYXJ0aXRpb25zLHNsaWNlUGFydGl0aW9uczp0LnNsaWNlUGFydGl0aW9ucyx2ZXJ0ZXhGb3JtYXQ6dC52ZXJ0ZXhGb3JtYXR9O3RoaXMuX2VsbGlwc29pZEdlb21ldHJ5PW5ldyBjcihvKSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVTcGhlcmVHZW9tZXRyeSJ9dmFyIE1CLFNzLHZ5LG9SPVooKCk9PntVdCgpO1l0KCk7SXQoKTthdCgpO0FkKCk7Um8oKTtGYS5wYWNrZWRMZW5ndGg9Y3IucGFja2VkTGVuZ3RoO0ZhLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSxjci5wYWNrKHQuX2VsbGlwc29pZEdlb21ldHJ5LGUsbil9O01CPW5ldyBjcixTcz17cmFkaXVzOnZvaWQgMCxyYWRpaTpuZXcgYSx2ZXJ0ZXhGb3JtYXQ6bmV3IGx0LHN0YWNrUGFydGl0aW9uczp2b2lkIDAsc2xpY2VQYXJ0aXRpb25zOnZvaWQgMH07RmEudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz1jci51bnBhY2sodCxlLE1CKTtyZXR1cm4gU3MudmVydGV4Rm9ybWF0PWx0LmNsb25lKG8uX3ZlcnRleEZvcm1hdCxTcy52ZXJ0ZXhGb3JtYXQpLFNzLnN0YWNrUGFydGl0aW9ucz1vLl9zdGFja1BhcnRpdGlvbnMsU3Muc2xpY2VQYXJ0aXRpb25zPW8uX3NsaWNlUGFydGl0aW9ucyxoKG4pPyhhLmNsb25lKG8uX3JhZGlpLFNzLnJhZGlpKSxuLl9lbGxpcHNvaWRHZW9tZXRyeT1uZXcgY3IoU3MpLG4pOihTcy5yYWRpdXM9by5fcmFkaWkueCxuZXcgRmEoU3MpKX07RmEuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7cmV0dXJuIGNyLmNyZWF0ZUdlb21ldHJ5KHQuX2VsbGlwc29pZEdlb21ldHJ5KX07dnk9RmF9KTt2YXIgRHk9e307bWUoRHkse2RlZmF1bHQ6KCk9PklCfSk7ZnVuY3Rpb24gTkIodCxlKXtyZXR1cm4gaChlKSYmKHQ9dnkudW5wYWNrKHQsZSkpLHZ5LmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBJQixMeT1aKCgpPT57YXQoKTtvUigpO0lCPU5CfSk7ZnVuY3Rpb24gQmEodCl7bGV0IGU9eCh0LnJhZGl1cywxKSxvPXtyYWRpaTpuZXcgYShlLGUsZSksc3RhY2tQYXJ0aXRpb25zOnQuc3RhY2tQYXJ0aXRpb25zLHNsaWNlUGFydGl0aW9uczp0LnNsaWNlUGFydGl0aW9ucyxzdWJkaXZpc2lvbnM6dC5zdWJkaXZpc2lvbnN9O3RoaXMuX2VsbGlwc29pZEdlb21ldHJ5PW5ldyBXcihvKSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVTcGhlcmVPdXRsaW5lR2VvbWV0cnkifXZhciB2QixUYyxGeSxyUj1aKCgpPT57VXQoKTtZdCgpO0l0KCk7YXQoKTt5XygpO0JhLnBhY2tlZExlbmd0aD1Xci5wYWNrZWRMZW5ndGg7QmEucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLFdyLnBhY2sodC5fZWxsaXBzb2lkR2VvbWV0cnksZSxuKX07dkI9bmV3IFdyLFRjPXtyYWRpdXM6dm9pZCAwLHJhZGlpOm5ldyBhLHN0YWNrUGFydGl0aW9uczp2b2lkIDAsc2xpY2VQYXJ0aXRpb25zOnZvaWQgMCxzdWJkaXZpc2lvbnM6dm9pZCAwfTtCYS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2xldCBvPVdyLnVucGFjayh0LGUsdkIpO3JldHVybiBUYy5zdGFja1BhcnRpdGlvbnM9by5fc3RhY2tQYXJ0aXRpb25zLFRjLnNsaWNlUGFydGl0aW9ucz1vLl9zbGljZVBhcnRpdGlvbnMsVGMuc3ViZGl2aXNpb25zPW8uX3N1YmRpdmlzaW9ucyxoKG4pPyhhLmNsb25lKG8uX3JhZGlpLFRjLnJhZGlpKSxuLl9lbGxpcHNvaWRHZW9tZXRyeT1uZXcgV3IoVGMpLG4pOihUYy5yYWRpdXM9by5fcmFkaWkueCxuZXcgQmEoVGMpKX07QmEuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7cmV0dXJuIFdyLmNyZWF0ZUdlb21ldHJ5KHQuX2VsbGlwc29pZEdlb21ldHJ5KX07Rnk9QmF9KTt2YXIgQnk9e307bWUoQnkse2RlZmF1bHQ6KCk9PkxCfSk7ZnVuY3Rpb24gREIodCxlKXtyZXR1cm4gaChlKSYmKHQ9RnkudW5wYWNrKHQsZSkpLEZ5LmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBMQixVeT1aKCgpPT57YXQoKTtyUigpO0xCPURCfSk7dmFyIFZ5PXt9O21lKFZ5LHtkZWZhdWx0OigpPT5lNH0pO2Z1bmN0aW9uIFZCKHQsZSxuLG8scixpLHMpe2xldCBmPXQubGVuZ3RoLHU9bmV3IEZsb2F0NjRBcnJheShmKjMpO2ZvcihsZXQgYz0wO2M8ZjsrK2Mpe2xldCBsPXRbY10scD1lW2NdLGQ9bltjXSxtPU0ubGVycChvLndlc3Qsby5lYXN0LGwvaXUpLF89TS5sZXJwKG8uc291dGgsby5ub3J0aCxwL2l1KSxnPU0ubGVycChyLGksZC9pdSksYj1jdC5mcm9tUmFkaWFucyhtLF8sZyxCQiksTz1zLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGIsVUIpO2EucGFjayhPLHUsYyozKX1yZXR1cm4gdX1mdW5jdGlvbiBrQih0KXtsZXQgZT10Lmxlbmd0aCxuPW5ldyBVaW50MzJBcnJheShlKzEpLG89MDtmb3IobGV0IHI9MDtyPGU7KytyKW5bcl09byxvKz10W3JdO3JldHVybiBuW2VdPW8sbn1mdW5jdGlvbiBqQih0LGUsbixvKXtsZXQgcj1vLmxlbmd0aCxpPXQubGVuZ3RoLHM9bmV3IFVpbnQ4QXJyYXkoaSksZj1HQix1PXpCLGM9MDtmb3IobGV0IHA9MDtwPHI7cCsrKXtsZXQgZD1vW3BdLG09ZDtmb3IobGV0IF89MTtfPGQ7XysrKXtsZXQgZz1jK18sYj1nLTE7dS5sb25naXR1ZGU9dFtnXSx1LmxhdGl0dWRlPWVbZ10sZi5sb25naXR1ZGU9dFtiXSxmLmxhdGl0dWRlPWVbYl0sY3QuZXF1YWxzKHUsZikmJihtLS0sc1tiXT0xKX1vW3BdPW0sYys9ZH1sZXQgbD0wO2ZvcihsZXQgcD0wO3A8aTtwKyspc1twXSE9PTEmJih0W2xdPXRbcF0sZVtsXT1lW3BdLG5bbF09bltwXSxsKyspfWZ1bmN0aW9uIGZSKHQpe2xldCBlPXQqOCxuPWUqMyxvPWUqNDt0aGlzLnN0YXJ0RWxsaXBzb2lkTm9ybWFscz1uZXcgRmxvYXQzMkFycmF5KG4pLHRoaXMuZW5kRWxsaXBzb2lkTm9ybWFscz1uZXcgRmxvYXQzMkFycmF5KG4pLHRoaXMuc3RhcnRQb3NpdGlvbkFuZEhlaWdodHM9bmV3IEZsb2F0MzJBcnJheShvKSx0aGlzLnN0YXJ0RmFjZU5vcm1hbEFuZFZlcnRleENvcm5lcklkcz1uZXcgRmxvYXQzMkFycmF5KG8pLHRoaXMuZW5kUG9zaXRpb25BbmRIZWlnaHRzPW5ldyBGbG9hdDMyQXJyYXkobyksdGhpcy5lbmRGYWNlTm9ybWFsQW5kSGFsZldpZHRocz1uZXcgRmxvYXQzMkFycmF5KG8pLHRoaXMudmVydGV4QmF0Y2hJZHM9bmV3IFVpbnQxNkFycmF5KGUpLHRoaXMuaW5kaWNlcz1EdC5jcmVhdGVUeXBlZEFycmF5KGUsMzYqdCksdGhpcy52ZWMzT2Zmc2V0PTAsdGhpcy52ZWM0T2Zmc2V0PTAsdGhpcy5iYXRjaElkT2Zmc2V0PTAsdGhpcy5pbmRleE9mZnNldD0wLHRoaXMudm9sdW1lU3RhcnRJbmRleD0wfWZ1bmN0aW9uIHNSKHQsZSxuLG8scil7bGV0IGk9YS5zdWJ0cmFjdChuLGUsSEIpLHM9YS5zdWJ0cmFjdChlLHQsaVIpO3JldHVybiBhLm5vcm1hbGl6ZShpLGkpLGEubm9ybWFsaXplKHMscyksYS5kb3QoaSxzKTxGQiYmKHM9YS5tdWx0aXBseUJ5U2NhbGFyKHMsLTEsaVIpKSxhLmFkZChpLHMsciksYS5lcXVhbHMocixhLlpFUk8pJiYocj1hLnN1YnRyYWN0KHQsZSkpLGEuY3Jvc3MocixvLHIpLGEuY3Jvc3MobyxyLHIpLGEubm9ybWFsaXplKHIscikscn1mdW5jdGlvbiB0NCh0LGUpe2xldCBuPW5ldyBVaW50MTZBcnJheSh0LnBvc2l0aW9ucyksbz1uZXcgVWludDE2QXJyYXkodC53aWR0aHMpLHI9bmV3IFVpbnQzMkFycmF5KHQuY291bnRzKSxpPW5ldyBVaW50MTZBcnJheSh0LmJhdGNoSWRzKSxzPVlCLGY9JEIsdT1aQixjPW5ldyBGbG9hdDY0QXJyYXkodC5wYWNrZWRCdWZmZXIpLGw9MCxwPWNbbCsrXSxkPWNbbCsrXTtQdC51bnBhY2soYyxsLHMpLGwrPVB0LnBhY2tlZExlbmd0aCwkLnVucGFjayhjLGwsZiksbCs9JC5wYWNrZWRMZW5ndGgsYS51bnBhY2soYyxsLHUpO2xldCBtLF89bi5sZW5ndGgvMyxnPW4uc3ViYXJyYXkoMCxfKSxiPW4uc3ViYXJyYXkoXywyKl8pLE89bi5zdWJhcnJheSgyKl8sMypfKTtubi56aWdaYWdEZWx0YURlY29kZShnLGIsTyksakIoZyxiLE8scik7bGV0IFQ9ci5sZW5ndGgsRT0wO2ZvcihtPTA7bTxUO20rKyl7bGV0IFU9clttXTtFKz1VLTF9bGV0IHc9bmV3IGZSKEUpLEM9VkIoZyxiLE8scyxwLGQsZix1KTtfPWcubGVuZ3RoO2xldCBOPW5ldyBGbG9hdDMyQXJyYXkoXyozKTtmb3IobT0wO208XzsrK20pTlttKjNdPUNbbSozXS11LngsTlttKjMrMV09Q1ttKjMrMV0tdS55LE5bbSozKzJdPUNbbSozKzJdLXUuejtsZXQgST0wLEw9MDtmb3IobT0wO208VDttKyspe2xldCBVPXJbbV0tMSxBPW9bbV0qLjUsUz1pW21dLFA9STtmb3IobGV0IEY9MDtGPFU7RisrKXtsZXQgaj1hLnVucGFjayhOLEksUUIpLEg9YS51bnBhY2soTixJKzMsSkIpLGs9T1tMXSxLPU9bTCsxXTtrPU0ubGVycChwLGQsay9pdSksSz1NLmxlcnAocCxkLEsvaXUpLEwrKztsZXQgWD1CZCxSPVVkO2lmKEY9PT0wKXtsZXQgUT1QK1UqMyxmdD1hLnVucGFjayhOLFEsQmQpO2lmKGEuZXF1YWxzKGZ0LGopKWEudW5wYWNrKE4sUS0zLFgpO2Vsc2V7bGV0IHB0PWEuc3VidHJhY3QoaixILEJkKTtYPWEuYWRkKHB0LGosQmQpfX1lbHNlIGEudW5wYWNrKE4sSS0zLFgpO2lmKEY9PT1VLTEpe2xldCBRPWEudW5wYWNrKE4sUCxVZCk7aWYoYS5lcXVhbHMoUSxIKSlhLnVucGFjayhOLFArMyxSKTtlbHNle2xldCBmdD1hLnN1YnRyYWN0KEgsaixVZCk7Uj1hLmFkZChmdCxILFVkKX19ZWxzZSBhLnVucGFjayhOLEkrNixSKTt3LmFkZFZvbHVtZShYLGosSCxSLGssSyxBLFMsdSxmKSxJKz0zfUkrPTMsTCsrfWxldCB2PXcuaW5kaWNlcztlLnB1c2gody5zdGFydEVsbGlwc29pZE5vcm1hbHMuYnVmZmVyKSxlLnB1c2gody5lbmRFbGxpcHNvaWROb3JtYWxzLmJ1ZmZlciksZS5wdXNoKHcuc3RhcnRQb3NpdGlvbkFuZEhlaWdodHMuYnVmZmVyKSxlLnB1c2gody5zdGFydEZhY2VOb3JtYWxBbmRWZXJ0ZXhDb3JuZXJJZHMuYnVmZmVyKSxlLnB1c2gody5lbmRQb3NpdGlvbkFuZEhlaWdodHMuYnVmZmVyKSxlLnB1c2gody5lbmRGYWNlTm9ybWFsQW5kSGFsZldpZHRocy5idWZmZXIpLGUucHVzaCh3LnZlcnRleEJhdGNoSWRzLmJ1ZmZlciksZS5wdXNoKHYuYnVmZmVyKTtsZXQgRD17aW5kZXhEYXRhdHlwZTp2LkJZVEVTX1BFUl9FTEVNRU5UPT09Mj9EdC5VTlNJR05FRF9TSE9SVDpEdC5VTlNJR05FRF9JTlQsc3RhcnRFbGxpcHNvaWROb3JtYWxzOncuc3RhcnRFbGxpcHNvaWROb3JtYWxzLmJ1ZmZlcixlbmRFbGxpcHNvaWROb3JtYWxzOncuZW5kRWxsaXBzb2lkTm9ybWFscy5idWZmZXIsc3RhcnRQb3NpdGlvbkFuZEhlaWdodHM6dy5zdGFydFBvc2l0aW9uQW5kSGVpZ2h0cy5idWZmZXIsc3RhcnRGYWNlTm9ybWFsQW5kVmVydGV4Q29ybmVySWRzOncuc3RhcnRGYWNlTm9ybWFsQW5kVmVydGV4Q29ybmVySWRzLmJ1ZmZlcixlbmRQb3NpdGlvbkFuZEhlaWdodHM6dy5lbmRQb3NpdGlvbkFuZEhlaWdodHMuYnVmZmVyLGVuZEZhY2VOb3JtYWxBbmRIYWxmV2lkdGhzOncuZW5kRmFjZU5vcm1hbEFuZEhhbGZXaWR0aHMuYnVmZmVyLHZlcnRleEJhdGNoSWRzOncudmVydGV4QmF0Y2hJZHMuYnVmZmVyLGluZGljZXM6di5idWZmZXJ9O2lmKHQua2VlcERlY29kZWRQb3NpdGlvbnMpe2xldCBVPWtCKHIpO2UucHVzaChDLmJ1ZmZlcixVLmJ1ZmZlciksRD15cihELHtkZWNvZGVkUG9zaXRpb25zOkMuYnVmZmVyLGRlY29kZWRQb3NpdGlvbk9mZnNldHM6VS5idWZmZXJ9KX1yZXR1cm4gRH12YXIgaXUsRkIsQkIsVUIsR0IsekIsaVIsSEIsdVIsY1IsYVIscUIsS0IsV0IsWEIsWUIsJEIsWkIsQmQsUUIsSkIsVWQsZTQsa3k9WigoKT0+e3NzKCk7VXQoKTt2ZSgpO3lwKCk7WnQoKTskZSgpO1d0KCk7QW4oKTtzbygpO2l1PTMyNzY3LEZCPU1hdGguY29zKE0udG9SYWRpYW5zKDE1MCkpLEJCPW5ldyBjdCxVQj1uZXcgYTtHQj1uZXcgY3QsekI9bmV3IGN0O2lSPW5ldyBhLEhCPW5ldyBhO3VSPVswLDIsNiwwLDYsNCwwLDEsMywwLDMsMiwwLDQsNSwwLDUsMSw1LDMsMSw1LDcsMyw3LDUsNCw3LDQsNiw3LDYsMiw3LDIsM10sY1I9dVIubGVuZ3RoLGFSPW5ldyBhLHFCPW5ldyBhLEtCPW5ldyBhLFdCPW5ldyBhLFhCPW5ldyBhO2ZSLnByb3RvdHlwZS5hZGRWb2x1bWU9ZnVuY3Rpb24odCxlLG4sbyxyLGkscyxmLHUsYyl7bGV0IGw9YS5hZGQoZSx1LGFSKSxwPWMuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGwscUIpO2w9YS5hZGQobix1LGFSKTtsZXQgZD1jLmdlb2RldGljU3VyZmFjZU5vcm1hbChsLFdCKSxtPXNSKHQsZSxuLHAsS0IpLF89c1IobyxuLGUsZCxYQiksZz10aGlzLnN0YXJ0RWxsaXBzb2lkTm9ybWFscyxiPXRoaXMuZW5kRWxsaXBzb2lkTm9ybWFscyxPPXRoaXMuc3RhcnRQb3NpdGlvbkFuZEhlaWdodHMsVD10aGlzLnN0YXJ0RmFjZU5vcm1hbEFuZFZlcnRleENvcm5lcklkcyxFPXRoaXMuZW5kUG9zaXRpb25BbmRIZWlnaHRzLHc9dGhpcy5lbmRGYWNlTm9ybWFsQW5kSGFsZldpZHRocyxDPXRoaXMudmVydGV4QmF0Y2hJZHMsTj10aGlzLmJhdGNoSWRPZmZzZXQsST10aGlzLnZlYzNPZmZzZXQsTD10aGlzLnZlYzRPZmZzZXQsdjtmb3Iodj0wO3Y8ODt2KyspYS5wYWNrKHAsZyxJKSxhLnBhY2soZCxiLEkpLGEucGFjayhlLE8sTCksT1tMKzNdPXIsYS5wYWNrKG4sRSxMKSxFW0wrM109aSxhLnBhY2sobSxULEwpLFRbTCszXT12LGEucGFjayhfLHcsTCksd1tMKzNdPXMsQ1tOKytdPWYsSSs9MyxMKz00O3RoaXMuYmF0Y2hJZE9mZnNldD1OLHRoaXMudmVjM09mZnNldD1JLHRoaXMudmVjNE9mZnNldD1MO2xldCBEPXRoaXMuaW5kaWNlcyxVPXRoaXMudm9sdW1lU3RhcnRJbmRleCxBPXRoaXMuaW5kZXhPZmZzZXQ7Zm9yKHY9MDt2PGNSO3YrKylEW0Erdl09dVJbdl0rVTt0aGlzLnZvbHVtZVN0YXJ0SW5kZXgrPTgsdGhpcy5pbmRleE9mZnNldCs9Y1J9O1lCPW5ldyBQdCwkQj1uZXcgJCxaQj1uZXcgYSxCZD1uZXcgYSxRQj1uZXcgYSxKQj1uZXcgYSxVZD1uZXcgYTtlND1RZSh0NCl9KTtmdW5jdGlvbiBuNCh0KXt0aGlzLm9mZnNldD10Lm9mZnNldCx0aGlzLmNvdW50PXQuY291bnQsdGhpcy5jb2xvcj10LmNvbG9yLHRoaXMuYmF0Y2hJZHM9dC5iYXRjaElkc312YXIgbFIscFI9WigoKT0+e2xSPW40fSk7dmFyIEd5PXt9O21lKEd5LHtkZWZhdWx0OigpPT5fNH0pO2Z1bmN0aW9uIGM0KHQsZSl7bGV0IG49ZSpvNCxvPWEudW5wYWNrKHQsbixrZCk7bis9YS5wYWNrZWRMZW5ndGg7bGV0IHI9c3QudW5wYWNrKHQsbixDci5tb2RlbE1hdHJpeCk7c3QubXVsdGlwbHlCeVNjYWxlKHIsbyxyKTtsZXQgaT1Dci5ib3VuZGluZ1ZvbHVtZTtyZXR1cm4gYS5jbG9uZShhLlpFUk8saS5jZW50ZXIpLGkucmFkaXVzPU1hdGguc3FydCgzKSxDcn1mdW5jdGlvbiBhNCh0LGUpe2xldCBuPWUqcjQsbz10W24rK10scj10W24rK10saT1hLmZyb21FbGVtZW50cyhvLG8scixrZCkscz1zdC51bnBhY2sodCxuLENyLm1vZGVsTWF0cml4KTtzdC5tdWx0aXBseUJ5U2NhbGUocyxpLHMpO2xldCBmPUNyLmJvdW5kaW5nVm9sdW1lO3JldHVybiBhLmNsb25lKGEuWkVSTyxmLmNlbnRlciksZi5yYWRpdXM9TWF0aC5zcXJ0KDIpLENyfWZ1bmN0aW9uIGY0KHQsZSl7bGV0IG49ZSppNCxvPWEudW5wYWNrKHQsbixrZCk7bis9YS5wYWNrZWRMZW5ndGg7bGV0IHI9c3QudW5wYWNrKHQsbixDci5tb2RlbE1hdHJpeCk7c3QubXVsdGlwbHlCeVNjYWxlKHIsbyxyKTtsZXQgaT1Dci5ib3VuZGluZ1ZvbHVtZTtyZXR1cm4gYS5jbG9uZShhLlpFUk8saS5jZW50ZXIpLGkucmFkaXVzPTEsQ3J9ZnVuY3Rpb24gdTQodCxlKXtsZXQgbj1lKnM0LG89dFtuKytdLHI9YS51bnBhY2sodCxuLGtkKSxpPXN0LmZyb21UcmFuc2xhdGlvbihyLENyLm1vZGVsTWF0cml4KTtzdC5tdWx0aXBseUJ5VW5pZm9ybVNjYWxlKGksbyxpKTtsZXQgcz1Dci5ib3VuZGluZ1ZvbHVtZTtyZXR1cm4gYS5jbG9uZShhLlpFUk8scy5jZW50ZXIpLHMucmFkaXVzPTEsQ3J9ZnVuY3Rpb24gVmQodCxlLG4sbyxyKXtpZighaChlKSlyZXR1cm47bGV0IGk9bi5sZW5ndGgscz1vLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLGY9by5pbmRpY2VzLHU9dC5wb3NpdGlvbnMsYz10LnZlcnRleEJhdGNoSWRzLGw9dC5pbmRpY2VzLHA9dC5iYXRjaElkcyxkPXQuYmF0Y2hUYWJsZUNvbG9ycyxtPXQuYmF0Y2hlZEluZGljZXMsXz10LmluZGV4T2Zmc2V0cyxnPXQuaW5kZXhDb3VudHMsYj10LmJvdW5kaW5nVm9sdW1lcyxPPXQubW9kZWxNYXRyaXgsVD10LmNlbnRlcixFPXQucG9zaXRpb25PZmZzZXQsdz10LmJhdGNoSWRJbmRleCxDPXQuaW5kZXhPZmZzZXQsTj10LmJhdGNoZWRJbmRpY2VzT2Zmc2V0O2ZvcihsZXQgST0wO0k8aTsrK0kpe2xldCBMPXIoZSxJKSx2PUwubW9kZWxNYXRyaXg7c3QubXVsdGlwbHkoTyx2LHYpO2xldCBEPW5bSV0sVT1zLmxlbmd0aDtmb3IobGV0IFA9MDtQPFU7UCs9Myl7bGV0IEY9YS51bnBhY2socyxQLGw0KTtzdC5tdWx0aXBseUJ5UG9pbnQodixGLEYpLGEuc3VidHJhY3QoRixULEYpLGEucGFjayhGLHUsRSozK1ApLGNbdysrXT1EfWxldCBBPWYubGVuZ3RoO2ZvcihsZXQgUD0wO1A8QTsrK1ApbFtDK1BdPWZbUF0rRTtsZXQgUz1JK047bVtTXT1uZXcgbFIoe29mZnNldDpDLGNvdW50OkEsY29sb3I6c2UuZnJvbVJnYmEoZFtEXSksYmF0Y2hJZHM6W0RdfSkscFtTXT1ELF9bU109QyxnW1NdPUEsYltTXT15dC50cmFuc2Zvcm0oTC5ib3VuZGluZ1ZvbHVtZSx2KSxFKz1VLzMsQys9QX10LnBvc2l0aW9uT2Zmc2V0PUUsdC5iYXRjaElkSW5kZXg9dyx0LmluZGV4T2Zmc2V0PUMsdC5iYXRjaGVkSW5kaWNlc09mZnNldCs9aX1mdW5jdGlvbiBwNCh0KXtsZXQgZT1uZXcgRmxvYXQ2NEFycmF5KHQpLG49MDthLnVucGFjayhlLG4sZFIpLG4rPWEucGFja2VkTGVuZ3RoLHN0LnVucGFjayhlLG4sbVIpfWZ1bmN0aW9uIGQ0KHQpe2xldCBlPXQubGVuZ3RoLG49MDtmb3IobGV0IG89MDtvPGU7KytvKW4rPXNlLnBhY2tlZExlbmd0aCszK3Rbb10uYmF0Y2hJZHMubGVuZ3RoO3JldHVybiBufWZ1bmN0aW9uIG00KHQsZSxuKXtsZXQgbz1uLmxlbmd0aCxyPTIrbyp5dC5wYWNrZWRMZW5ndGgrMStkNChlKSxpPW5ldyBGbG9hdDY0QXJyYXkocikscz0wO2lbcysrXT10LGlbcysrXT1vO2ZvcihsZXQgdT0wO3U8bzsrK3UpeXQucGFjayhuW3VdLGkscykscys9eXQucGFja2VkTGVuZ3RoO2xldCBmPWUubGVuZ3RoO2lbcysrXT1mO2ZvcihsZXQgdT0wO3U8ZjsrK3Upe2xldCBjPWVbdV07c2UucGFjayhjLmNvbG9yLGkscykscys9c2UucGFja2VkTGVuZ3RoLGlbcysrXT1jLm9mZnNldCxpW3MrK109Yy5jb3VudDtsZXQgbD1jLmJhdGNoSWRzLHA9bC5sZW5ndGg7aVtzKytdPXA7Zm9yKGxldCBkPTA7ZDxwOysrZClpW3MrK109bFtkXX1yZXR1cm4gaX1mdW5jdGlvbiBoNCh0LGUpe2xldCBuPWgodC5ib3hlcyk/bmV3IEZsb2F0MzJBcnJheSh0LmJveGVzKTp2b2lkIDAsbz1oKHQuYm94QmF0Y2hJZHMpP25ldyBVaW50MTZBcnJheSh0LmJveEJhdGNoSWRzKTp2b2lkIDAscj1oKHQuY3lsaW5kZXJzKT9uZXcgRmxvYXQzMkFycmF5KHQuY3lsaW5kZXJzKTp2b2lkIDAsaT1oKHQuY3lsaW5kZXJCYXRjaElkcyk/bmV3IFVpbnQxNkFycmF5KHQuY3lsaW5kZXJCYXRjaElkcyk6dm9pZCAwLHM9aCh0LmVsbGlwc29pZHMpP25ldyBGbG9hdDMyQXJyYXkodC5lbGxpcHNvaWRzKTp2b2lkIDAsZj1oKHQuZWxsaXBzb2lkQmF0Y2hJZHMpP25ldyBVaW50MTZBcnJheSh0LmVsbGlwc29pZEJhdGNoSWRzKTp2b2lkIDAsdT1oKHQuc3BoZXJlcyk/bmV3IEZsb2F0MzJBcnJheSh0LnNwaGVyZXMpOnZvaWQgMCxjPWgodC5zcGhlcmVCYXRjaElkcyk/bmV3IFVpbnQxNkFycmF5KHQuc3BoZXJlQmF0Y2hJZHMpOnZvaWQgMCxsPWgobik/by5sZW5ndGg6MCxwPWgocik/aS5sZW5ndGg6MCxkPWgocyk/Zi5sZW5ndGg6MCxtPWgodSk/Yy5sZW5ndGg6MCxfPUNmLmdldFVuaXRCb3goKSxnPUhmLmdldFVuaXRDeWxpbmRlcigpLGI9Y3IuZ2V0VW5pdEVsbGlwc29pZCgpLE89Xy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxUPWcuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsRT1iLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLHc9Ty5sZW5ndGgqbDt3Kz1ULmxlbmd0aCpwLHcrPUUubGVuZ3RoKihkK20pO2xldCBDPV8uaW5kaWNlcyxOPWcuaW5kaWNlcyxJPWIuaW5kaWNlcyxMPUMubGVuZ3RoKmw7TCs9Ti5sZW5ndGgqcCxMKz1JLmxlbmd0aCooZCttKTtsZXQgdj1uZXcgRmxvYXQzMkFycmF5KHcpLEQ9bmV3IFVpbnQxNkFycmF5KHcvMyksVT1EdC5jcmVhdGVUeXBlZEFycmF5KHcvMyxMKSxBPWwrcCtkK20sUz1uZXcgVWludDE2QXJyYXkoQSksUD1uZXcgQXJyYXkoQSksRj1uZXcgVWludDMyQXJyYXkoQSksaj1uZXcgVWludDMyQXJyYXkoQSksSD1uZXcgQXJyYXkoQSk7cDQodC5wYWNrZWRCdWZmZXIpO2xldCBrPXtiYXRjaFRhYmxlQ29sb3JzOm5ldyBVaW50MzJBcnJheSh0LmJhdGNoVGFibGVDb2xvcnMpLHBvc2l0aW9uczp2LHZlcnRleEJhdGNoSWRzOkQsaW5kaWNlczpVLGJhdGNoSWRzOlMsYmF0Y2hlZEluZGljZXM6UCxpbmRleE9mZnNldHM6RixpbmRleENvdW50czpqLGJvdW5kaW5nVm9sdW1lczpILHBvc2l0aW9uT2Zmc2V0OjAsYmF0Y2hJZEluZGV4OjAsaW5kZXhPZmZzZXQ6MCxiYXRjaGVkSW5kaWNlc09mZnNldDowLG1vZGVsTWF0cml4Om1SLGNlbnRlcjpkUn07VmQoayxuLG8sXyxjNCksVmQoayxyLGksZyxhNCksVmQoayxzLGYsYixmNCksVmQoayx1LGMsYix1NCk7bGV0IEs9bTQoVS5CWVRFU19QRVJfRUxFTUVOVCxQLEgpO3JldHVybiBlLnB1c2godi5idWZmZXIsRC5idWZmZXIsVS5idWZmZXIpLGUucHVzaChTLmJ1ZmZlcixGLmJ1ZmZlcixqLmJ1ZmZlciksZS5wdXNoKEsuYnVmZmVyKSx7cG9zaXRpb25zOnYuYnVmZmVyLHZlcnRleEJhdGNoSWRzOkQuYnVmZmVyLGluZGljZXM6VS5idWZmZXIsaW5kZXhPZmZzZXRzOkYuYnVmZmVyLGluZGV4Q291bnRzOmouYnVmZmVyLGJhdGNoSWRzOlMuYnVmZmVyLHBhY2tlZEJ1ZmZlcjpLLmJ1ZmZlcn19dmFyIGtkLG80LHI0LGk0LHM0LENyLGw0LGRSLG1SLF80LHp5PVooKCk9PntQZSgpO3QwKCk7VXQoKTtRZigpO29fKCk7YXQoKTtBZCgpOyRlKCk7a24oKTtwUigpO3NvKCk7a2Q9bmV3IGEsbzQ9c3QucGFja2VkTGVuZ3RoK2EucGFja2VkTGVuZ3RoLHI0PXN0LnBhY2tlZExlbmd0aCsyLGk0PXN0LnBhY2tlZExlbmd0aCthLnBhY2tlZExlbmd0aCxzND1hLnBhY2tlZExlbmd0aCsxLENyPXttb2RlbE1hdHJpeDpuZXcgc3QsYm91bmRpbmdWb2x1bWU6bmV3IHl0fTtsND1uZXcgYTtkUj1uZXcgYSxtUj1uZXcgc3Q7XzQ9UWUoaDQpfSk7dmFyIEh5PXt9O21lKEh5LHtkZWZhdWx0OigpPT53NH0pO2Z1bmN0aW9uIEE0KHQpe3Q9bmV3IEZsb2F0NjRBcnJheSh0KTtsZXQgZT0wO0dkLm1pbj10W2UrK10sR2QubWF4PXRbZSsrXSxQdC51bnBhY2sodCxlLGhSKSxlKz1QdC5wYWNrZWRMZW5ndGgsJC51bnBhY2sodCxlLF9SKX1mdW5jdGlvbiBiNCh0LGUpe2xldCBuPW5ldyBVaW50MTZBcnJheSh0LnBvc2l0aW9ucyk7QTQodC5wYWNrZWRCdWZmZXIpO2xldCBvPWhSLHI9X1IsaT1HZC5taW4scz1HZC5tYXgsZj1uLmxlbmd0aC8zLHU9bi5zdWJhcnJheSgwLGYpLGM9bi5zdWJhcnJheShmLDIqZiksbD1uLnN1YmFycmF5KDIqZiwzKmYpO25uLnppZ1phZ0RlbHRhRGVjb2RlKHUsYyxsKTtsZXQgcD1uZXcgRmxvYXQ2NEFycmF5KG4ubGVuZ3RoKTtmb3IobGV0IGQ9MDtkPGY7KytkKXtsZXQgbT11W2RdLF89Y1tkXSxnPWxbZF0sYj1NLmxlcnAoby53ZXN0LG8uZWFzdCxtL2p5KSxPPU0ubGVycChvLnNvdXRoLG8ubm9ydGgsXy9qeSksVD1NLmxlcnAoaSxzLGcvankpLEU9Y3QuZnJvbVJhZGlhbnMoYixPLFQseTQpLHc9ci5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihFLGc0KTthLnBhY2sodyxwLGQqMyl9cmV0dXJuIGUucHVzaChwLmJ1ZmZlcikse3Bvc2l0aW9uczpwLmJ1ZmZlcn19dmFyIGp5LHk0LGc0LGhSLF9SLEdkLHc0LHF5PVooKCk9PntzcygpO1V0KCk7dmUoKTtadCgpO1d0KCk7QW4oKTtzbygpO2p5PTMyNzY3LHk0PW5ldyBjdCxnND1uZXcgYSxoUj1uZXcgUHQsX1I9bmV3ICQsR2Q9e21pbjp2b2lkIDAsbWF4OnZvaWQgMH07dzQ9UWUoYjQpfSk7dmFyIEt5PXt9O21lKEt5LHtkZWZhdWx0OigpPT5ONH0pO2Z1bmN0aW9uIFQ0KHQpe2xldCBlPW5ldyBGbG9hdDY0QXJyYXkodCksbj0wO1VhLmluZGV4Qnl0ZXNQZXJFbGVtZW50PWVbbisrXSxVYS5taW49ZVtuKytdLFVhLm1heD1lW24rK10sYS51bnBhY2soZSxuLGJSKSxuKz1hLnBhY2tlZExlbmd0aCwkLnVucGFjayhlLG4sd1IpLG4rPSQucGFja2VkTGVuZ3RoLFB0LnVucGFjayhlLG4sVFIpfWZ1bmN0aW9uIE80KHQpe2xldCBlPXQubGVuZ3RoLG49MDtmb3IobGV0IG89MDtvPGU7KytvKW4rPXNlLnBhY2tlZExlbmd0aCszK3Rbb10uYmF0Y2hJZHMubGVuZ3RoO3JldHVybiBufWZ1bmN0aW9uIEU0KHQsZSxuKXtsZXQgbz1lLmxlbmd0aCxyPTIrbypDby5wYWNrZWRMZW5ndGgrMStPNChuKSxpPW5ldyBGbG9hdDY0QXJyYXkocikscz0wO2lbcysrXT10LGlbcysrXT1vO2ZvcihsZXQgdT0wO3U8bzsrK3UpQ28ucGFjayhlW3VdLGkscykscys9Q28ucGFja2VkTGVuZ3RoO2xldCBmPW4ubGVuZ3RoO2lbcysrXT1mO2ZvcihsZXQgdT0wO3U8ZjsrK3Upe2xldCBjPW5bdV07c2UucGFjayhjLmNvbG9yLGkscykscys9c2UucGFja2VkTGVuZ3RoLGlbcysrXT1jLm9mZnNldCxpW3MrK109Yy5jb3VudDtsZXQgbD1jLmJhdGNoSWRzLHA9bC5sZW5ndGg7aVtzKytdPXA7Zm9yKGxldCBkPTA7ZDxwOysrZClpW3MrK109bFtkXX1yZXR1cm4gaX1mdW5jdGlvbiBNNCh0LGUpe1Q0KHQucGFja2VkQnVmZmVyKTtsZXQgbjtVYS5pbmRleEJ5dGVzUGVyRWxlbWVudD09PTI/bj1uZXcgVWludDE2QXJyYXkodC5pbmRpY2VzKTpuPW5ldyBVaW50MzJBcnJheSh0LmluZGljZXMpO2xldCByPW5ldyBVaW50MTZBcnJheSh0LnBvc2l0aW9ucyksaT1uZXcgVWludDMyQXJyYXkodC5jb3VudHMpLHM9bmV3IFVpbnQzMkFycmF5KHQuaW5kZXhDb3VudHMpLGY9bmV3IFVpbnQzMkFycmF5KHQuYmF0Y2hJZHMpLHU9bmV3IFVpbnQzMkFycmF5KHQuYmF0Y2hUYWJsZUNvbG9ycyksYz1uZXcgQXJyYXkoaS5sZW5ndGgpLGw9YlIscD13UixkPVRSLG09VWEubWluLF89VWEubWF4LGc9dC5taW5pbXVtSGVpZ2h0cyxiPXQubWF4aW11bUhlaWdodHM7aChnKSYmaChiKSYmKGc9bmV3IEZsb2F0MzJBcnJheShnKSxiPW5ldyBGbG9hdDMyQXJyYXkoYikpO2xldCBPLFQsRSx3PXIubGVuZ3RoLzIsQz1yLnN1YmFycmF5KDAsdyksTj1yLnN1YmFycmF5KHcsMip3KTtubi56aWdaYWdEZWx0YURlY29kZShDLE4pO2xldCBJPW5ldyBGbG9hdDY0QXJyYXkodyozKTtmb3IoTz0wO088dzsrK08pe2xldCBpdD1DW09dLE50PU5bT10sT3Q9TS5sZXJwKGQud2VzdCxkLmVhc3QsaXQveVIpLHh0PU0ubGVycChkLnNvdXRoLGQubm9ydGgsTnQveVIpLF90PWN0LmZyb21SYWRpYW5zKE90LHh0LDAsQVIpLGR0PXAuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oX3QsZ1IpO2EucGFjayhkdCxJLE8qMyl9bGV0IEw9aS5sZW5ndGgsdj1uZXcgQXJyYXkoTCksRD1uZXcgQXJyYXkoTCksVT0wLEE9MDtmb3IoTz0wO088TDsrK08pdltPXT1VLERbT109QSxVKz1pW09dLEErPXNbT107bGV0IFM9bmV3IEZsb2F0MzJBcnJheSh3KjMqMiksUD1uZXcgVWludDE2QXJyYXkodyoyKSxGPW5ldyBVaW50MzJBcnJheShELmxlbmd0aCksaj1uZXcgVWludDMyQXJyYXkocy5sZW5ndGgpLEg9W10saz17fTtmb3IoTz0wO088TDsrK08pRT11W09dLGgoa1tFXSk/KGtbRV0ucG9zaXRpb25MZW5ndGgrPWlbT10sa1tFXS5pbmRleExlbmd0aCs9c1tPXSxrW0VdLmJhdGNoSWRzLnB1c2goTykpOmtbRV09e3Bvc2l0aW9uTGVuZ3RoOmlbT10saW5kZXhMZW5ndGg6c1tPXSxvZmZzZXQ6MCxpbmRleE9mZnNldDowLGJhdGNoSWRzOltPXX07bGV0IEssWD0wLFI9MDtmb3IoRSBpbiBrKWlmKGsuaGFzT3duUHJvcGVydHkoRSkpe0s9a1tFXSxLLm9mZnNldD1YLEsuaW5kZXhPZmZzZXQ9UjtsZXQgaXQ9Sy5wb3NpdGlvbkxlbmd0aCoyLE50PUsuaW5kZXhMZW5ndGgqMitLLnBvc2l0aW9uTGVuZ3RoKjY7WCs9aXQsUis9TnQsSy5pbmRleExlbmd0aD1OdH1sZXQgUT1bXTtmb3IoRSBpbiBrKWsuaGFzT3duUHJvcGVydHkoRSkmJihLPWtbRV0sUS5wdXNoKHtjb2xvcjpzZS5mcm9tUmdiYShwYXJzZUludChFKSksb2Zmc2V0OksuaW5kZXhPZmZzZXQsY291bnQ6Sy5pbmRleExlbmd0aCxiYXRjaElkczpLLmJhdGNoSWRzfSkpO2ZvcihPPTA7TzxMOysrTyl7RT11W09dLEs9a1tFXTtsZXQgaXQ9Sy5vZmZzZXQsTnQ9aXQqMyxPdD1pdCx4dD12W09dLF90PWlbT10sZHQ9ZltPXSxWdD1tLHp0PV87aChnKSYmaChiKSYmKFZ0PWdbT10senQ9YltPXSk7bGV0IGhlPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxjZT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkscGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGZlPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtmb3IoVD0wO1Q8X3Q7KytUKXtsZXQgQWU9YS51bnBhY2soSSx4dCozK1QqMyxnUik7cC5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKEFlLEFlKTtsZXQgRWU9cC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhBZSxBUiksdW49RWUubGF0aXR1ZGUsVWU9RWUubG9uZ2l0dWRlO2hlPU1hdGgubWluKHVuLGhlKSxjZT1NYXRoLm1heCh1bixjZSkscGU9TWF0aC5taW4oVWUscGUpLGZlPU1hdGgubWF4KFVlLGZlKTtsZXQgYmU9cC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoQWUsUjQpLGxuPWEubXVsdGlwbHlCeVNjYWxhcihiZSxWdCxTNCkscG49YS5hZGQoQWUsbG4sQzQpO2xuPWEubXVsdGlwbHlCeVNjYWxhcihiZSx6dCxsbik7bGV0IFRuPWEuYWRkKEFlLGxuLHg0KTthLnN1YnRyYWN0KFRuLGwsVG4pLGEuc3VidHJhY3QocG4sbCxwbiksYS5wYWNrKFRuLFMsTnQpLGEucGFjayhwbixTLE50KzMpLFBbT3RdPWR0LFBbT3QrMV09ZHQsTnQrPTYsT3QrPTJ9ZD1QNCxkLndlc3Q9cGUsZC5lYXN0PWZlLGQuc291dGg9aGUsZC5ub3J0aD1jZSxjW09dPUNvLmZyb21SZWN0YW5nbGUoZCxtLF8scCk7bGV0IFF0PUsuaW5kZXhPZmZzZXQsSnQ9RFtPXSx4ZT1zW09dO2ZvcihGW09dPVF0LFQ9MDtUPHhlO1QrPTMpe2xldCBBZT1uW0p0K1RdLXh0LEVlPW5bSnQrVCsxXS14dCx1bj1uW0p0K1QrMl0teHQ7SFtRdCsrXT1BZSoyK2l0LEhbUXQrK109RWUqMitpdCxIW1F0KytdPXVuKjIraXQsSFtRdCsrXT11bioyKzEraXQsSFtRdCsrXT1FZSoyKzEraXQsSFtRdCsrXT1BZSoyKzEraXR9Zm9yKFQ9MDtUPF90OysrVCl7bGV0IEFlPVQsRWU9KFQrMSklX3Q7SFtRdCsrXT1BZSoyKzEraXQsSFtRdCsrXT1FZSoyK2l0LEhbUXQrK109QWUqMitpdCxIW1F0KytdPUFlKjIrMStpdCxIW1F0KytdPUVlKjIrMStpdCxIW1F0KytdPUVlKjIraXR9Sy5vZmZzZXQrPV90KjIsSy5pbmRleE9mZnNldD1RdCxqW09dPVF0LUZbT119SD1EdC5jcmVhdGVUeXBlZEFycmF5KFMubGVuZ3RoLzMsSCk7bGV0IGZ0PVEubGVuZ3RoO2ZvcihsZXQgaXQ9MDtpdDxmdDsrK2l0KXtsZXQgTnQ9UVtpdF0uYmF0Y2hJZHMsT3Q9MCx4dD1OdC5sZW5ndGg7Zm9yKGxldCBfdD0wO190PHh0OysrX3QpT3QrPWpbTnRbX3RdXTtRW2l0XS5jb3VudD1PdH1sZXQgcHQ9SC5CWVRFU19QRVJfRUxFTUVOVD09PTI/RHQuVU5TSUdORURfU0hPUlQ6RHQuVU5TSUdORURfSU5ULGd0PUU0KHB0LGMsUSk7cmV0dXJuIGUucHVzaChTLmJ1ZmZlcixILmJ1ZmZlcixGLmJ1ZmZlcixqLmJ1ZmZlcixQLmJ1ZmZlcixndC5idWZmZXIpLHtwb3NpdGlvbnM6Uy5idWZmZXIsaW5kaWNlczpILmJ1ZmZlcixpbmRleE9mZnNldHM6Ri5idWZmZXIsaW5kZXhDb3VudHM6ai5idWZmZXIsYmF0Y2hJZHM6UC5idWZmZXIscGFja2VkQnVmZmVyOmd0LmJ1ZmZlcn19dmFyIGJSLHdSLFRSLFVhLHlSLGdSLFI0LFM0LEM0LHg0LEFSLFA0LE40LFd5PVooKCk9PntzcygpO1V0KCk7dmUoKTtRZigpO2F0KCk7WnQoKTskZSgpO1d0KCk7ZGEoKTtBbigpO3NvKCk7YlI9bmV3IGEsd1I9bmV3ICQsVFI9bmV3IFB0LFVhPXttaW46dm9pZCAwLG1heDp2b2lkIDAsaW5kZXhCeXRlc1BlckVsZW1lbnQ6dm9pZCAwfTt5Uj0zMjc2NyxnUj1uZXcgYSxSND1uZXcgYSxTND1uZXcgYSxDND1uZXcgYSx4ND1uZXcgYSxBUj1uZXcgY3QsUDQ9bmV3IFB0O040PVFlKE00KX0pO2Z1bmN0aW9uIEQ0KHQsZSxuLG8scil7bGV0IGk9dC5sZW5ndGgvMyxzPXQuc3ViYXJyYXkoMCxpKSxmPXQuc3ViYXJyYXkoaSwyKmkpLHU9dC5zdWJhcnJheSgyKmksMyppKTtubi56aWdaYWdEZWx0YURlY29kZShzLGYsdSk7bGV0IGM9bmV3IEZsb2F0NjRBcnJheSh0Lmxlbmd0aCk7Zm9yKGxldCBsPTA7bDxpOysrbCl7bGV0IHA9c1tsXSxkPWZbbF0sbT11W2xdLF89TS5sZXJwKGUud2VzdCxlLmVhc3QscC9YeSksZz1NLmxlcnAoZS5zb3V0aCxlLm5vcnRoLGQvWHkpLGI9TS5sZXJwKG4sbyxtL1h5KSxPPWN0LmZyb21SYWRpYW5zKF8sZyxiLEk0KSxUPXIuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oTyx2NCk7YS5wYWNrKFQsYyxsKjMpfXJldHVybiBjfXZhciBYeSxJNCx2NCxPUixFUj1aKCgpPT57c3MoKTtVdCgpO3ZlKCk7V3QoKTtYeT0zMjc2NyxJND1uZXcgY3QsdjQ9bmV3IGE7T1I9RDR9KTt2YXIgWXk9e307bWUoWXkse2RlZmF1bHQ6KCk9PlY0fSk7ZnVuY3Rpb24gTDQodCl7dD1uZXcgRmxvYXQ2NEFycmF5KHQpO2xldCBlPTA7emQubWluPXRbZSsrXSx6ZC5tYXg9dFtlKytdLFB0LnVucGFjayh0LGUsUFIpLGUrPVB0LnBhY2tlZExlbmd0aCwkLnVucGFjayh0LGUsTVIpLGUrPSQucGFja2VkTGVuZ3RoLGEudW5wYWNrKHQsZSxOUil9ZnVuY3Rpb24gRjQodCl7bGV0IGU9dC5sZW5ndGgsbj1uZXcgVWludDMyQXJyYXkoZSsxKSxvPTA7Zm9yKGxldCByPTA7cjxlOysrciluW3JdPW8sbys9dFtyXTtyZXR1cm4gbltlXT1vLG59ZnVuY3Rpb24gVTQodCxlKXtsZXQgbj1uZXcgVWludDE2QXJyYXkodC5wb3NpdGlvbnMpLG89bmV3IFVpbnQxNkFycmF5KHQud2lkdGhzKSxyPW5ldyBVaW50MzJBcnJheSh0LmNvdW50cyksaT1uZXcgVWludDE2QXJyYXkodC5iYXRjaElkcyk7TDQodC5wYWNrZWRCdWZmZXIpO2xldCBzPVBSLGY9TVIsdT1OUixjPXpkLm1pbixsPXpkLm1heCxwPU9SKG4scyxjLGwsZiksZD1wLmxlbmd0aC8zLG09ZCo0LTQsXz1uZXcgRmxvYXQzMkFycmF5KG0qMyksZz1uZXcgRmxvYXQzMkFycmF5KG0qMyksYj1uZXcgRmxvYXQzMkFycmF5KG0qMyksTz1uZXcgRmxvYXQzMkFycmF5KG0qMiksVD1uZXcgVWludDE2QXJyYXkobSksRT0wLHc9MCxDPTAsTixJPTAsTD1yLmxlbmd0aDtmb3IoTj0wO048TDsrK04pe2xldCBTPXJbTl0sUD1vW05dLEY9aVtOXTtmb3IobGV0IGo9MDtqPFM7KytqKXtsZXQgSDtpZihqPT09MCl7bGV0IFE9YS51bnBhY2socCxJKjMsUlIpLGZ0PWEudW5wYWNrKHAsKEkrMSkqMyxTUik7SD1hLnN1YnRyYWN0KFEsZnQsQ1IpLGEuYWRkKFEsSCxIKX1lbHNlIEg9YS51bnBhY2socCwoSStqLTEpKjMsQ1IpO2xldCBrPWEudW5wYWNrKHAsKEkraikqMyxCNCksSztpZihqPT09Uy0xKXtsZXQgUT1hLnVucGFjayhwLChJK1MtMSkqMyxSUiksZnQ9YS51bnBhY2socCwoSStTLTIpKjMsU1IpO0s9YS5zdWJ0cmFjdChRLGZ0LHhSKSxhLmFkZChRLEssSyl9ZWxzZSBLPWEudW5wYWNrKHAsKEkraisxKSozLHhSKTthLnN1YnRyYWN0KEgsdSxIKSxhLnN1YnRyYWN0KGssdSxrKSxhLnN1YnRyYWN0KEssdSxLKTtsZXQgWD1qPT09MD8yOjAsUj1qPT09Uy0xPzI6NDtmb3IobGV0IFE9WDtRPFI7KytRKXthLnBhY2soayxfLEUpLGEucGFjayhILGcsRSksYS5wYWNrKEssYixFKSxFKz0zO2xldCBmdD1RLTI8MD8tMToxO09bdysrXT0yKihRJTIpLTEsT1t3KytdPWZ0KlAsVFtDKytdPUZ9fUkrPVN9bGV0IHY9RHQuY3JlYXRlVHlwZWRBcnJheShtLGQqNi02KSxEPTAsVT0wO2ZvcihMPWQtMSxOPTA7TjxMOysrTil2W1UrK109RCx2W1UrK109RCsyLHZbVSsrXT1EKzEsdltVKytdPUQrMSx2W1UrK109RCsyLHZbVSsrXT1EKzMsRCs9NDtlLnB1c2goXy5idWZmZXIsZy5idWZmZXIsYi5idWZmZXIpLGUucHVzaChPLmJ1ZmZlcixULmJ1ZmZlcix2LmJ1ZmZlcik7bGV0IEE9e2luZGV4RGF0YXR5cGU6di5CWVRFU19QRVJfRUxFTUVOVD09PTI/RHQuVU5TSUdORURfU0hPUlQ6RHQuVU5TSUdORURfSU5ULGN1cnJlbnRQb3NpdGlvbnM6Xy5idWZmZXIscHJldmlvdXNQb3NpdGlvbnM6Zy5idWZmZXIsbmV4dFBvc2l0aW9uczpiLmJ1ZmZlcixleHBhbmRBbmRXaWR0aDpPLmJ1ZmZlcixiYXRjaElkczpULmJ1ZmZlcixpbmRpY2VzOnYuYnVmZmVyfTtpZih0LmtlZXBEZWNvZGVkUG9zaXRpb25zKXtsZXQgUz1GNChyKTtlLnB1c2gocC5idWZmZXIsUy5idWZmZXIpLEE9eXIoQSx7ZGVjb2RlZFBvc2l0aW9uczpwLmJ1ZmZlcixkZWNvZGVkUG9zaXRpb25PZmZzZXRzOlMuYnVmZmVyfSl9cmV0dXJuIEF9dmFyIFBSLE1SLE5SLHpkLFJSLFNSLENSLEI0LHhSLFY0LCR5PVooKCk9PntVdCgpO3lwKCk7RVIoKTtadCgpOyRlKCk7QW4oKTtzbygpO1BSPW5ldyBQdCxNUj1uZXcgJCxOUj1uZXcgYSx6ZD17bWluOnZvaWQgMCxtYXg6dm9pZCAwfTtSUj1uZXcgYSxTUj1uZXcgYSxDUj1uZXcgYSxCND1uZXcgYSx4Uj1uZXcgYTtWND1RZShVNCl9KTtmdW5jdGlvbiBoaSh0LGUpe3kudHlwZU9mLm9iamVjdCgiZWxsaXBzb2lkIix0KSx0aGlzLl9lbGxpcHNvaWQ9dCx0aGlzLl9jYW1lcmFQb3NpdGlvbj1uZXcgYSx0aGlzLl9jYW1lcmFQb3NpdGlvbkluU2NhbGVkU3BhY2U9bmV3IGEsdGhpcy5fZGlzdGFuY2VUb0xpbWJJblNjYWxlZFNwYWNlU3F1YXJlZD0wLGgoZSkmJih0aGlzLmNhbWVyYVBvc2l0aW9uPWUpfWZ1bmN0aW9uIERSKHQsZSxuKXtpZihoKGUpJiZlPDAmJnQubWluaW11bVJhZGl1cz4tZSl7bGV0IG89YS5mcm9tRWxlbWVudHModC5yYWRpaS54K2UsdC5yYWRpaS55K2UsdC5yYWRpaS56K2UsejQpO3Q9JC5mcm9tQ2FydGVzaWFuMyhvLG4pfXJldHVybiB0fWZ1bmN0aW9uIExSKHQsZSxuLG8pe3kudHlwZU9mLm9iamVjdCgiZGlyZWN0aW9uVG9Qb2ludCIsZSkseS5kZWZpbmVkKCJwb3NpdGlvbnMiLG4pLGgobyl8fChvPW5ldyBhKTtsZXQgcj1WUih0LGUpLGk9MDtmb3IobGV0IHM9MCxmPW4ubGVuZ3RoO3M8ZjsrK3Mpe2xldCB1PW5bc10sYz1CUih0LHUscik7aWYoYzwwKXJldHVybjtpPU1hdGgubWF4KGksYyl9cmV0dXJuIFVSKHIsaSxvKX1mdW5jdGlvbiBGUih0LGUsbixvLHIsaSl7eS50eXBlT2Yub2JqZWN0KCJkaXJlY3Rpb25Ub1BvaW50IixlKSx5LmRlZmluZWQoInZlcnRpY2VzIixuKSx5LnR5cGVPZi5udW1iZXIoInN0cmlkZSIsbyksaChpKXx8KGk9bmV3IGEpLG89eChvLDMpLHI9eChyLGEuWkVSTyk7bGV0IHM9VlIodCxlKSxmPTA7Zm9yKGxldCB1PTAsYz1uLmxlbmd0aDt1PGM7dSs9byl7amQueD1uW3VdK3IueCxqZC55PW5bdSsxXStyLnksamQuej1uW3UrMl0rci56O2xldCBsPUJSKHQsamQscyk7aWYobDwwKXJldHVybjtmPU1hdGgubWF4KGYsbCl9cmV0dXJuIFVSKHMsZixpKX1mdW5jdGlvbiBReSh0LGUsbil7bGV0IG89ZSxyPW4saT1hLnN1YnRyYWN0KHQsbyxJUikscz0tYS5kb3QoaSxvKTtyZXR1cm4hKHI8MD9zPjA6cz5yJiZzKnMvYS5tYWduaXR1ZGVTcXVhcmVkKGkpPnIpfWZ1bmN0aW9uIEJSKHQsZSxuKXtsZXQgbz10LnRyYW5zZm9ybVBvc2l0aW9uVG9TY2FsZWRTcGFjZShlLGo0KSxyPWEubWFnbml0dWRlU3F1YXJlZChvKSxpPU1hdGguc3FydChyKSxzPWEuZGl2aWRlQnlTY2FsYXIobyxpLEg0KTtyPU1hdGgubWF4KDEsciksaT1NYXRoLm1heCgxLGkpO2xldCBmPWEuZG90KHMsbiksdT1hLm1hZ25pdHVkZShhLmNyb3NzKHMsbixzKSksYz0xL2ksbD1NYXRoLnNxcnQoci0xKSpjO3JldHVybiAxLyhmKmMtdSpsKX1mdW5jdGlvbiBVUih0LGUsbil7aWYoIShlPD0wfHxlPT09MS8wfHxlIT09ZSkpcmV0dXJuIGEubXVsdGlwbHlCeVNjYWxhcih0LGUsbil9ZnVuY3Rpb24gVlIodCxlKXtyZXR1cm4gYS5lcXVhbHMoZSxhLlpFUk8pP2U6KHQudHJhbnNmb3JtUG9zaXRpb25Ub1NjYWxlZFNwYWNlKGUsWnkpLGEubm9ybWFsaXplKFp5LFp5KSl9dmFyIElSLGs0LHZSLEc0LHo0LGpkLGo0LEg0LFp5LENzLHN1PVooKCk9PntQZSgpO1V0KCk7WXQoKTtJdCgpO2F0KCk7WnQoKTtBbigpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGhpLnByb3RvdHlwZSx7ZWxsaXBzb2lkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxsaXBzb2lkfX0sY2FtZXJhUG9zaXRpb246e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYW1lcmFQb3NpdGlvbn0sc2V0OmZ1bmN0aW9uKHQpe2xldCBuPXRoaXMuX2VsbGlwc29pZC50cmFuc2Zvcm1Qb3NpdGlvblRvU2NhbGVkU3BhY2UodCx0aGlzLl9jYW1lcmFQb3NpdGlvbkluU2NhbGVkU3BhY2UpLG89YS5tYWduaXR1ZGVTcXVhcmVkKG4pLTE7YS5jbG9uZSh0LHRoaXMuX2NhbWVyYVBvc2l0aW9uKSx0aGlzLl9jYW1lcmFQb3NpdGlvbkluU2NhbGVkU3BhY2U9bix0aGlzLl9kaXN0YW5jZVRvTGltYkluU2NhbGVkU3BhY2VTcXVhcmVkPW99fX0pO0lSPW5ldyBhO2hpLnByb3RvdHlwZS5pc1BvaW50VmlzaWJsZT1mdW5jdGlvbih0KXtsZXQgbj10aGlzLl9lbGxpcHNvaWQudHJhbnNmb3JtUG9zaXRpb25Ub1NjYWxlZFNwYWNlKHQsSVIpO3JldHVybiBReShuLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5TY2FsZWRTcGFjZSx0aGlzLl9kaXN0YW5jZVRvTGltYkluU2NhbGVkU3BhY2VTcXVhcmVkKX07aGkucHJvdG90eXBlLmlzU2NhbGVkU3BhY2VQb2ludFZpc2libGU9ZnVuY3Rpb24odCl7cmV0dXJuIFF5KHQsdGhpcy5fY2FtZXJhUG9zaXRpb25JblNjYWxlZFNwYWNlLHRoaXMuX2Rpc3RhbmNlVG9MaW1iSW5TY2FsZWRTcGFjZVNxdWFyZWQpfTtrND1uZXcgYTtoaS5wcm90b3R5cGUuaXNTY2FsZWRTcGFjZVBvaW50VmlzaWJsZVBvc3NpYmx5VW5kZXJFbGxpcHNvaWQ9ZnVuY3Rpb24odCxlKXtsZXQgbj10aGlzLl9lbGxpcHNvaWQsbyxyO3JldHVybiBoKGUpJiZlPDAmJm4ubWluaW11bVJhZGl1cz4tZT8ocj1rNCxyLng9dGhpcy5fY2FtZXJhUG9zaXRpb24ueC8obi5yYWRpaS54K2UpLHIueT10aGlzLl9jYW1lcmFQb3NpdGlvbi55LyhuLnJhZGlpLnkrZSksci56PXRoaXMuX2NhbWVyYVBvc2l0aW9uLnovKG4ucmFkaWkueitlKSxvPXIueCpyLngrci55KnIueStyLnoqci56LTEpOihyPXRoaXMuX2NhbWVyYVBvc2l0aW9uSW5TY2FsZWRTcGFjZSxvPXRoaXMuX2Rpc3RhbmNlVG9MaW1iSW5TY2FsZWRTcGFjZVNxdWFyZWQpLFF5KHQscixvKX07aGkucHJvdG90eXBlLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTFIodGhpcy5fZWxsaXBzb2lkLHQsZSxuKX07dlI9JC5jbG9uZSgkLlVOSVRfU1BIRVJFKTtoaS5wcm90b3R5cGUuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnRQb3NzaWJseVVuZGVyRWxsaXBzb2lkPWZ1bmN0aW9uKHQsZSxuLG8pe2xldCByPURSKHRoaXMuX2VsbGlwc29pZCxuLHZSKTtyZXR1cm4gTFIocix0LGUsbyl9O2hpLnByb3RvdHlwZS5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludEZyb21WZXJ0aWNlcz1mdW5jdGlvbih0LGUsbixvLHIpe3JldHVybiBGUih0aGlzLl9lbGxpcHNvaWQsdCxlLG4sbyxyKX07aGkucHJvdG90eXBlLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50RnJvbVZlcnRpY2VzUG9zc2libHlVbmRlckVsbGlwc29pZD1mdW5jdGlvbih0LGUsbixvLHIsaSl7bGV0IHM9RFIodGhpcy5fZWxsaXBzb2lkLHIsdlIpO3JldHVybiBGUihzLHQsZSxuLG8saSl9O0c0PVtdO2hpLnByb3RvdHlwZS5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludEZyb21SZWN0YW5nbGU9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KTtsZXQgbz1QdC5zdWJzYW1wbGUodCxlLDAsRzQpLHI9eXQuZnJvbVBvaW50cyhvKTtpZighKGEubWFnbml0dWRlKHIuY2VudGVyKTwuMSplLm1pbmltdW1SYWRpdXMpKXJldHVybiB0aGlzLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50KHIuY2VudGVyLG8sbil9O3o0PW5ldyBhO2pkPW5ldyBhO2o0PW5ldyBhLEg0PW5ldyBhO1p5PW5ldyBhO0NzPWhpfSk7dmFyIEhkLHE0LGtSLEdSPVooKCk9PntVdCgpO0hkPXt9O0hkLmdldEhlaWdodD1mdW5jdGlvbih0LGUsbil7cmV0dXJuKHQtbikqZStufTtxND1uZXcgYTtIZC5nZXRQb3NpdGlvbj1mdW5jdGlvbih0LGUsbixvLHIpe2xldCBpPWUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModCxxNCkscz1IZC5nZXRIZWlnaHQoaS5oZWlnaHQsbixvKTtyZXR1cm4gYS5mcm9tUmFkaWFucyhpLmxvbmdpdHVkZSxpLmxhdGl0dWRlLHMsZSxyKX07a1I9SGR9KTt2YXIgSzQseHIselI9WigoKT0+e0s0PXtOT05FOjAsQklUUzEyOjF9LHhyPU9iamVjdC5mcmVlemUoSzQpfSk7ZnVuY3Rpb24gTm8odCxlLG4sbyxyLGkscyxmLHUsYyl7bGV0IGw9eHIuTk9ORSxwLGQ7aWYoaChlKSYmaChuKSYmaChvKSYmaChyKSl7bGV0IG09ZS5taW5pbXVtLF89ZS5tYXhpbXVtLGc9YS5zdWJ0cmFjdChfLG0sVzQpLGI9by1uO01hdGgubWF4KGEubWF4aW11bUNvbXBvbmVudChnKSxiKTxZNC0xP2w9eHIuQklUUzEyOmw9eHIuTk9ORSxwPXN0LmludmVyc2VUcmFuc2Zvcm1hdGlvbihyLG5ldyBzdCk7bGV0IFQ9YS5uZWdhdGUobSxPYyk7c3QubXVsdGlwbHkoc3QuZnJvbVRyYW5zbGF0aW9uKFQscWQpLHAscCk7bGV0IEU9T2M7RS54PTEvZy54LEUueT0xL2cueSxFLno9MS9nLnosc3QubXVsdGlwbHkoc3QuZnJvbVNjYWxlKEUscWQpLHAscCksZD1zdC5jbG9uZShyKSxzdC5zZXRUcmFuc2xhdGlvbihkLGEuWkVSTyxkKSxyPXN0LmNsb25lKHIsbmV3IHN0KTtsZXQgdz1zdC5mcm9tVHJhbnNsYXRpb24obSxxZCksQz1zdC5mcm9tU2NhbGUoZyxYNCksTj1zdC5tdWx0aXBseSh3LEMscWQpO3N0Lm11bHRpcGx5KHIsTixyKSxzdC5tdWx0aXBseShkLE4sZCl9dGhpcy5xdWFudGl6YXRpb249bCx0aGlzLm1pbmltdW1IZWlnaHQ9bix0aGlzLm1heGltdW1IZWlnaHQ9byx0aGlzLmNlbnRlcj1hLmNsb25lKHQpLHRoaXMudG9TY2FsZWRFTlU9cCx0aGlzLmZyb21TY2FsZWRFTlU9cix0aGlzLm1hdHJpeD1kLHRoaXMuaGFzVmVydGV4Tm9ybWFscz1pLHRoaXMuaGFzV2ViTWVyY2F0b3JUPXgocywhMSksdGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzPXgoZiwhMSksdGhpcy5leGFnZ2VyYXRpb249eCh1LDEpLHRoaXMuZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQ9eChjLDApLHRoaXMuc3RyaWRlPTAsdGhpcy5fb2Zmc2V0R2VvZGV0aWNTdXJmYWNlTm9ybWFsPTAsdGhpcy5fb2Zmc2V0VmVydGV4Tm9ybWFsPTAsdGhpcy5fY2FsY3VsYXRlU3RyaWRlQW5kT2Zmc2V0cygpfXZhciBPYyxXNCxQcixxZCxYNCxZNCwkNCxqUixLZCxXZCx4cyxjdT1aKCgpPT57c3MoKTt6ZSgpO1V0KCk7RGUoKTtJdCgpO2F0KCk7V3QoKTtrbigpO0dSKCk7elIoKTtPYz1uZXcgYSxXND1uZXcgYSxQcj1uZXcgbnQscWQ9bmV3IHN0LFg0PW5ldyBzdCxZND1NYXRoLnBvdygyLDEyKTtOby5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHQsZSxuLG8scixpLHMsZil7bGV0IHU9by54LGM9by55O2lmKHRoaXMucXVhbnRpemF0aW9uPT09eHIuQklUUzEyKXtuPXN0Lm11bHRpcGx5QnlQb2ludCh0aGlzLnRvU2NhbGVkRU5VLG4sT2MpLG4ueD1NLmNsYW1wKG4ueCwwLDEpLG4ueT1NLmNsYW1wKG4ueSwwLDEpLG4uej1NLmNsYW1wKG4ueiwwLDEpO2xldCBsPXRoaXMubWF4aW11bUhlaWdodC10aGlzLm1pbmltdW1IZWlnaHQscD1NLmNsYW1wKChyLXRoaXMubWluaW11bUhlaWdodCkvbCwwLDEpO250LmZyb21FbGVtZW50cyhuLngsbi55LFByKTtsZXQgZD1ubi5jb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyhQcik7bnQuZnJvbUVsZW1lbnRzKG4ueixwLFByKTtsZXQgbT1ubi5jb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyhQcik7bnQuZnJvbUVsZW1lbnRzKHUsYyxQcik7bGV0IF89bm4uY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXMoUHIpO2lmKHRbZSsrXT1kLHRbZSsrXT1tLHRbZSsrXT1fLHRoaXMuaGFzV2ViTWVyY2F0b3JUKXtudC5mcm9tRWxlbWVudHMocywwLFByKTtsZXQgZz1ubi5jb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyhQcik7dFtlKytdPWd9fWVsc2UgYS5zdWJ0cmFjdChuLHRoaXMuY2VudGVyLE9jKSx0W2UrK109T2MueCx0W2UrK109T2MueSx0W2UrK109T2Mueix0W2UrK109cix0W2UrK109dSx0W2UrK109Yyx0aGlzLmhhc1dlYk1lcmNhdG9yVCYmKHRbZSsrXT1zKTtyZXR1cm4gdGhpcy5oYXNWZXJ0ZXhOb3JtYWxzJiYodFtlKytdPW5uLm9jdFBhY2tGbG9hdChpKSksdGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzJiYodFtlKytdPWYueCx0W2UrK109Zi55LHRbZSsrXT1mLnopLGV9OyQ0PW5ldyBhLGpSPW5ldyBhO05vLnByb3RvdHlwZS5hZGRHZW9kZXRpY1N1cmZhY2VOb3JtYWxzPWZ1bmN0aW9uKHQsZSxuKXtpZih0aGlzLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHMpcmV0dXJuO2xldCBvPXRoaXMuc3RyaWRlLHI9dC5sZW5ndGgvbzt0aGlzLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHM9ITAsdGhpcy5fY2FsY3VsYXRlU3RyaWRlQW5kT2Zmc2V0cygpO2xldCBpPXRoaXMuc3RyaWRlO2ZvcihsZXQgcz0wO3M8cjtzKyspe2ZvcihsZXQgbD0wO2w8bztsKyspe2xldCBwPXMqbytsLGQ9cyppK2w7ZVtkXT10W3BdfWxldCBmPXRoaXMuZGVjb2RlUG9zaXRpb24oZSxzLCQ0KSx1PW4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGYsalIpLGM9cyppK3RoaXMuX29mZnNldEdlb2RldGljU3VyZmFjZU5vcm1hbDtlW2NdPXUueCxlW2MrMV09dS55LGVbYysyXT11Lnp9fTtOby5wcm90b3R5cGUucmVtb3ZlR2VvZGV0aWNTdXJmYWNlTm9ybWFscz1mdW5jdGlvbih0LGUpe2lmKCF0aGlzLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHMpcmV0dXJuO2xldCBuPXRoaXMuc3RyaWRlLG89dC5sZW5ndGgvbjt0aGlzLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHM9ITEsdGhpcy5fY2FsY3VsYXRlU3RyaWRlQW5kT2Zmc2V0cygpO2xldCByPXRoaXMuc3RyaWRlO2ZvcihsZXQgaT0wO2k8bztpKyspZm9yKGxldCBzPTA7czxyO3MrKyl7bGV0IGY9aSpuK3MsdT1pKnIrcztlW3VdPXRbZl19fTtOby5wcm90b3R5cGUuZGVjb2RlUG9zaXRpb249ZnVuY3Rpb24odCxlLG4pe2lmKGgobil8fChuPW5ldyBhKSxlKj10aGlzLnN0cmlkZSx0aGlzLnF1YW50aXphdGlvbj09PXhyLkJJVFMxMil7bGV0IG89bm4uZGVjb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyh0W2VdLFByKTtuLng9by54LG4ueT1vLnk7bGV0IHI9bm4uZGVjb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyh0W2UrMV0sUHIpO3JldHVybiBuLno9ci54LHN0Lm11bHRpcGx5QnlQb2ludCh0aGlzLmZyb21TY2FsZWRFTlUsbixuKX1yZXR1cm4gbi54PXRbZV0sbi55PXRbZSsxXSxuLno9dFtlKzJdLGEuYWRkKG4sdGhpcy5jZW50ZXIsbil9O05vLnByb3RvdHlwZS5nZXRFeGFnZ2VyYXRlZFBvc2l0aW9uPWZ1bmN0aW9uKHQsZSxuKXtuPXRoaXMuZGVjb2RlUG9zaXRpb24odCxlLG4pO2xldCBvPXRoaXMuZXhhZ2dlcmF0aW9uLHI9dGhpcy5leGFnZ2VyYXRpb25SZWxhdGl2ZUhlaWdodDtpZihvIT09MSYmdGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzKXtsZXQgcz10aGlzLmRlY29kZUdlb2RldGljU3VyZmFjZU5vcm1hbCh0LGUsalIpLGY9dGhpcy5kZWNvZGVIZWlnaHQodCxlKSx1PWtSLmdldEhlaWdodChmLG8sciktZjtuLngrPXMueCp1LG4ueSs9cy55KnUsbi56Kz1zLnoqdX1yZXR1cm4gbn07Tm8ucHJvdG90eXBlLmRlY29kZVRleHR1cmVDb29yZGluYXRlcz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGgobil8fChuPW5ldyBudCksZSo9dGhpcy5zdHJpZGUsdGhpcy5xdWFudGl6YXRpb249PT14ci5CSVRTMTI/bm4uZGVjb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyh0W2UrMl0sbik6bnQuZnJvbUVsZW1lbnRzKHRbZSs0XSx0W2UrNV0sbil9O05vLnByb3RvdHlwZS5kZWNvZGVIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSo9dGhpcy5zdHJpZGUsdGhpcy5xdWFudGl6YXRpb249PT14ci5CSVRTMTI/bm4uZGVjb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyh0W2UrMV0sUHIpLnkqKHRoaXMubWF4aW11bUhlaWdodC10aGlzLm1pbmltdW1IZWlnaHQpK3RoaXMubWluaW11bUhlaWdodDp0W2UrM119O05vLnByb3RvdHlwZS5kZWNvZGVXZWJNZXJjYXRvclQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSo9dGhpcy5zdHJpZGUsdGhpcy5xdWFudGl6YXRpb249PT14ci5CSVRTMTI/bm4uZGVjb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyh0W2UrM10sUHIpLng6dFtlKzZdfTtOby5wcm90b3R5cGUuZ2V0T2N0RW5jb2RlZE5vcm1hbD1mdW5jdGlvbih0LGUsbil7ZT1lKnRoaXMuc3RyaWRlK3RoaXMuX29mZnNldFZlcnRleE5vcm1hbDtsZXQgbz10W2VdLzI1NixyPU1hdGguZmxvb3IobyksaT0oby1yKSoyNTY7cmV0dXJuIG50LmZyb21FbGVtZW50cyhyLGksbil9O05vLnByb3RvdHlwZS5kZWNvZGVHZW9kZXRpY1N1cmZhY2VOb3JtYWw9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlPWUqdGhpcy5zdHJpZGUrdGhpcy5fb2Zmc2V0R2VvZGV0aWNTdXJmYWNlTm9ybWFsLG4ueD10W2VdLG4ueT10W2UrMV0sbi56PXRbZSsyXSxufTtOby5wcm90b3R5cGUuX2NhbGN1bGF0ZVN0cmlkZUFuZE9mZnNldHM9ZnVuY3Rpb24oKXtsZXQgdD0wO3N3aXRjaCh0aGlzLnF1YW50aXphdGlvbil7Y2FzZSB4ci5CSVRTMTI6dCs9MzticmVhaztkZWZhdWx0OnQrPTZ9dGhpcy5oYXNXZWJNZXJjYXRvclQmJih0Kz0xKSx0aGlzLmhhc1ZlcnRleE5vcm1hbHMmJih0aGlzLl9vZmZzZXRWZXJ0ZXhOb3JtYWw9dCx0Kz0xKSx0aGlzLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHMmJih0aGlzLl9vZmZzZXRHZW9kZXRpY1N1cmZhY2VOb3JtYWw9dCx0Kz0zKSx0aGlzLnN0cmlkZT10fTtLZD17cG9zaXRpb24zREFuZEhlaWdodDowLHRleHR1cmVDb29yZEFuZEVuY29kZWROb3JtYWxzOjEsZ2VvZGV0aWNTdXJmYWNlTm9ybWFsOjJ9LFdkPXtjb21wcmVzc2VkMDowLGNvbXByZXNzZWQxOjEsZ2VvZGV0aWNTdXJmYWNlTm9ybWFsOjJ9O05vLnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe2xldCBlPW90LkZMT0FULG49b3QuZ2V0U2l6ZUluQnl0ZXMoZSksbz10aGlzLnN0cmlkZSpuLHI9MCxpPVtdO2Z1bmN0aW9uIHMoZix1KXtpLnB1c2goe2luZGV4OmYsdmVydGV4QnVmZmVyOnQsY29tcG9uZW50RGF0YXR5cGU6ZSxjb21wb25lbnRzUGVyQXR0cmlidXRlOnUsb2Zmc2V0SW5CeXRlczpyLHN0cmlkZUluQnl0ZXM6b30pLHIrPXUqbn1pZih0aGlzLnF1YW50aXphdGlvbj09PXhyLk5PTkUpe3MoS2QucG9zaXRpb24zREFuZEhlaWdodCw0KTtsZXQgZj0yO2YrPXRoaXMuaGFzV2ViTWVyY2F0b3JUPzE6MCxmKz10aGlzLmhhc1ZlcnRleE5vcm1hbHM/MTowLHMoS2QudGV4dHVyZUNvb3JkQW5kRW5jb2RlZE5vcm1hbHMsZiksdGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzJiZzKEtkLmdlb2RldGljU3VyZmFjZU5vcm1hbCwzKX1lbHNle2xldCBmPXRoaXMuaGFzV2ViTWVyY2F0b3JUfHx0aGlzLmhhc1ZlcnRleE5vcm1hbHMsdT10aGlzLmhhc1dlYk1lcmNhdG9yVCYmdGhpcy5oYXNWZXJ0ZXhOb3JtYWxzO3MoV2QuY29tcHJlc3NlZDAsZj80OjMpLHUmJnMoV2QuY29tcHJlc3NlZDEsMSksdGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzJiZzKFdkLmdlb2RldGljU3VyZmFjZU5vcm1hbCwzKX1yZXR1cm4gaX07Tm8ucHJvdG90eXBlLmdldEF0dHJpYnV0ZUxvY2F0aW9ucz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnF1YW50aXphdGlvbj09PXhyLk5PTkU/S2Q6V2R9O05vLmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYoaCh0KSlyZXR1cm4gaChlKXx8KGU9bmV3IE5vKSxlLnF1YW50aXphdGlvbj10LnF1YW50aXphdGlvbixlLm1pbmltdW1IZWlnaHQ9dC5taW5pbXVtSGVpZ2h0LGUubWF4aW11bUhlaWdodD10Lm1heGltdW1IZWlnaHQsZS5jZW50ZXI9YS5jbG9uZSh0LmNlbnRlciksZS50b1NjYWxlZEVOVT1zdC5jbG9uZSh0LnRvU2NhbGVkRU5VKSxlLmZyb21TY2FsZWRFTlU9c3QuY2xvbmUodC5mcm9tU2NhbGVkRU5VKSxlLm1hdHJpeD1zdC5jbG9uZSh0Lm1hdHJpeCksZS5oYXNWZXJ0ZXhOb3JtYWxzPXQuaGFzVmVydGV4Tm9ybWFscyxlLmhhc1dlYk1lcmNhdG9yVD10Lmhhc1dlYk1lcmNhdG9yVCxlLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHM9dC5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzLGUuZXhhZ2dlcmF0aW9uPXQuZXhhZ2dlcmF0aW9uLGUuZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQ9dC5leGFnZ2VyYXRpb25SZWxhdGl2ZUhlaWdodCxlLl9jYWxjdWxhdGVTdHJpZGVBbmRPZmZzZXRzKCksZX07eHM9Tm99KTt2YXIgdGc9e307bWUodGcse2RlZmF1bHQ6KCk9PnJVfSk7ZnVuY3Rpb24gYXUodCxlLG4pe249eChuLE0pO2xldCBvPXQubGVuZ3RoO2ZvcihsZXQgcj0wO3I8bzsrK3IpaWYobi5lcXVhbHNFcHNpbG9uKHRbcl0sZSxNLkVQU0lMT04xMikpcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gSjQodCxlKXt0LmVsbGlwc29pZD0kLmNsb25lKHQuZWxsaXBzb2lkKSx0LnJlY3RhbmdsZT1QdC5jbG9uZSh0LnJlY3RhbmdsZSk7bGV0IG49b1UodC5idWZmZXIsdC5yZWxhdGl2ZVRvQ2VudGVyLHQuZWxsaXBzb2lkLHQucmVjdGFuZ2xlLHQubmF0aXZlUmVjdGFuZ2xlLHQuZXhhZ2dlcmF0aW9uLHQuZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQsdC5za2lydEhlaWdodCx0LmluY2x1ZGVXZWJNZXJjYXRvclQsdC5uZWdhdGl2ZUFsdGl0dWRlRXhwb25lbnRCaWFzLHQubmVnYXRpdmVFbGV2YXRpb25UaHJlc2hvbGQpLG89bi52ZXJ0aWNlcztlLnB1c2goby5idWZmZXIpO2xldCByPW4uaW5kaWNlcztyZXR1cm4gZS5wdXNoKHIuYnVmZmVyKSx7dmVydGljZXM6by5idWZmZXIsaW5kaWNlczpyLmJ1ZmZlcixudW1iZXJPZkF0dHJpYnV0ZXM6bi5lbmNvZGluZy5zdHJpZGUsbWluaW11bUhlaWdodDpuLm1pbmltdW1IZWlnaHQsbWF4aW11bUhlaWdodDpuLm1heGltdW1IZWlnaHQsYm91bmRpbmdTcGhlcmUzRDpuLmJvdW5kaW5nU3BoZXJlM0Qsb3JpZW50ZWRCb3VuZGluZ0JveDpuLm9yaWVudGVkQm91bmRpbmdCb3gsb2NjbHVkZWVQb2ludEluU2NhbGVkU3BhY2U6bi5vY2NsdWRlZVBvaW50SW5TY2FsZWRTcGFjZSxlbmNvZGluZzpuLmVuY29kaW5nLHZlcnRleENvdW50V2l0aG91dFNraXJ0czpuLnZlcnRleENvdW50V2l0aG91dFNraXJ0cyxpbmRleENvdW50V2l0aG91dFNraXJ0czpuLmluZGV4Q291bnRXaXRob3V0U2tpcnRzLHdlc3RJbmRpY2VzU291dGhUb05vcnRoOm4ud2VzdEluZGljZXNTb3V0aFRvTm9ydGgsc291dGhJbmRpY2VzRWFzdFRvV2VzdDpuLnNvdXRoSW5kaWNlc0Vhc3RUb1dlc3QsZWFzdEluZGljZXNOb3J0aFRvU291dGg6bi5lYXN0SW5kaWNlc05vcnRoVG9Tb3V0aCxub3J0aEluZGljZXNXZXN0VG9FYXN0Om4ubm9ydGhJbmRpY2VzV2VzdFRvRWFzdH19ZnVuY3Rpb24gb1UodCxlLG4sbyxyLGkscyxmLHUsYyxsKXtsZXQgcCxkLG0sXyxnLGI7aChvKT8ocD1vLndlc3QsZD1vLnNvdXRoLG09by5lYXN0LF89by5ub3J0aCxnPW8ud2lkdGgsYj1vLmhlaWdodCk6KHA9TS50b1JhZGlhbnMoci53ZXN0KSxkPU0udG9SYWRpYW5zKHIuc291dGgpLG09TS50b1JhZGlhbnMoci5lYXN0KSxfPU0udG9SYWRpYW5zKHIubm9ydGgpLGc9TS50b1JhZGlhbnMoby53aWR0aCksYj1NLnRvUmFkaWFucyhvLmhlaWdodCkpO2xldCBPPVtkLF9dLFQ9W3AsbV0sRT1nci5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShlLG4pLHc9c3QuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKEUsblUpLEMsTjt1JiYoQz1lby5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKGQpLE49MS8oZW8uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShfKS1DKSk7bGV0IEw9aSE9PTEsdj1uZXcgRGF0YVZpZXcodCksRD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksVT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksQT10VTtBLng9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEEueT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksQS56PU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtsZXQgUz1lVTtTLng9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLFMueT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksUy56PU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtsZXQgUD0wLEY9MCxqPTAsSCxrO2ZvcihrPTA7azw0Oysrayl7bGV0IG9lPVA7SD12LmdldFVpbnQzMihvZSwhMCksb2UrPUp5O2xldCAkdD1NLnRvUmFkaWFucyh2LmdldEZsb2F0NjQob2UsITApKjE4MCk7b2UrPUVjLGF1KFQsJHQpPT09LTEmJlQucHVzaCgkdCk7bGV0IFZlPU0udG9SYWRpYW5zKHYuZ2V0RmxvYXQ2NChvZSwhMCkqMTgwKTtvZSs9RWMsYXUoTyxWZSk9PT0tMSYmTy5wdXNoKFZlKSxvZSs9MipFYztsZXQgZG49di5nZXRJbnQzMihvZSwhMCk7b2UrPVhkLEYrPWRuLGRuPXYuZ2V0SW50MzIob2UsITApLGorPWRuKjMsUCs9SCtKeX1sZXQgSz1bXSxYPVtdLFI9bmV3IEFycmF5KEYpLFE9bmV3IEFycmF5KEYpLGZ0PW5ldyBBcnJheShGKSxwdD11P25ldyBBcnJheShGKTpbXSxndD1MP25ldyBBcnJheShGKTpbXSxpdD1uZXcgQXJyYXkoaiksTnQ9W10sT3Q9W10seHQ9W10sX3Q9W10sZHQ9MCxWdD0wO2ZvcihQPTAsaz0wO2s8NDsrK2spe0g9di5nZXRVaW50MzIoUCwhMCksUCs9Snk7bGV0IG9lPVAsJHQ9TS50b1JhZGlhbnModi5nZXRGbG9hdDY0KFAsITApKjE4MCk7UCs9RWM7bGV0IFZlPU0udG9SYWRpYW5zKHYuZ2V0RmxvYXQ2NChQLCEwKSoxODApO1ArPUVjO2xldCBkbj1NLnRvUmFkaWFucyh2LmdldEZsb2F0NjQoUCwhMCkqMTgwKSxzbj1kbiouNTtQKz1FYztsZXQgbW49TS50b1JhZGlhbnModi5nZXRGbG9hdDY0KFAsITApKjE4MCksZm89bW4qLjU7UCs9RWM7bGV0IEhuPXYuZ2V0SW50MzIoUCwhMCk7UCs9WGQ7bGV0IFplPXYuZ2V0SW50MzIoUCwhMCk7UCs9WGQsUCs9WGQ7bGV0IGNuPW5ldyBBcnJheShIbik7Zm9yKGxldCBobj0wO2huPEhuOysraG4pe2xldCB1bz0kdCt2LmdldFVpbnQ4KFArKykqZG47SW8ubG9uZ2l0dWRlPXVvO2xldCBxbj1WZSt2LmdldFVpbnQ4KFArKykqbW47SW8ubGF0aXR1ZGU9cW47bGV0IEtuPXYuZ2V0RmxvYXQzMihQLCEwKTtpZihQKz1RNCxLbiE9PTAmJktuPGwmJihLbio9LU1hdGgucG93KDIsYykpLEtuKj02MzcxMDEwLElvLmhlaWdodD1LbixhdShULHVvKSE9PS0xfHxhdShPLHFuKSE9PS0xKXtsZXQgRG49YXUoSyxJbyxjdCk7aWYoRG49PT0tMSlLLnB1c2goY3QuY2xvbmUoSW8pKSxYLnB1c2goZHQpO2Vsc2V7Y25baG5dPVhbRG5dO2NvbnRpbnVlfX1jbltobl09ZHQsTWF0aC5hYnModW8tcCk8c24/TnQucHVzaCh7aW5kZXg6ZHQsY2FydG9ncmFwaGljOmN0LmNsb25lKElvKX0pOk1hdGguYWJzKHVvLW0pPHNuP3h0LnB1c2goe2luZGV4OmR0LGNhcnRvZ3JhcGhpYzpjdC5jbG9uZShJbyl9KTpNYXRoLmFicyhxbi1kKTxmbz9PdC5wdXNoKHtpbmRleDpkdCxjYXJ0b2dyYXBoaWM6Y3QuY2xvbmUoSW8pfSk6TWF0aC5hYnMocW4tXyk8Zm8mJl90LnB1c2goe2luZGV4OmR0LGNhcnRvZ3JhcGhpYzpjdC5jbG9uZShJbyl9KSxEPU1hdGgubWluKEtuLEQpLFU9TWF0aC5tYXgoS24sVSksZnRbZHRdPUtuO2xldCBsbz1uLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKElvKTtpZihSW2R0XT1sbyx1JiYocHRbZHRdPShlby5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKHFuKS1DKSpOKSxMKXtsZXQgRG49bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwobG8pO2d0W2R0XT1Ebn1zdC5tdWx0aXBseUJ5UG9pbnQodyxsbyxWYSksYS5taW5pbXVtQnlDb21wb25lbnQoVmEsQSxBKSxhLm1heGltdW1CeUNvbXBvbmVudChWYSxTLFMpO2xldCBrZT0odW8tcCkvKG0tcCk7a2U9TS5jbGFtcChrZSwwLDEpO2xldCBOZT0ocW4tZCkvKF8tZCk7TmU9TS5jbGFtcChOZSwwLDEpLFFbZHRdPW5ldyBudChrZSxOZSksKytkdH1sZXQgS2U9WmUqMztmb3IobGV0IGhuPTA7aG48S2U7KytobiwrK1Z0KWl0W1Z0XT1jblt2LmdldFVpbnQxNihQLCEwKV0sUCs9WjQ7aWYoSCE9PVAtb2UpdGhyb3cgbmV3IGdlKCJJbnZhbGlkIHRlcnJhaW4gdGlsZS4iKX1SLmxlbmd0aD1kdCxRLmxlbmd0aD1kdCxmdC5sZW5ndGg9ZHQsdSYmKHB0Lmxlbmd0aD1kdCksTCYmKGd0Lmxlbmd0aD1kdCk7bGV0IHp0PWR0LGhlPVZ0LGNlPXtoTWluOkQsbGFzdEJvcmRlclBvaW50OnZvaWQgMCxza2lydEhlaWdodDpmLHRvRU5VOncsZWxsaXBzb2lkOm4sbWluaW11bTpBLG1heGltdW06U307TnQuc29ydChmdW5jdGlvbihvZSwkdCl7cmV0dXJuICR0LmNhcnRvZ3JhcGhpYy5sYXRpdHVkZS1vZS5jYXJ0b2dyYXBoaWMubGF0aXR1ZGV9KSxPdC5zb3J0KGZ1bmN0aW9uKG9lLCR0KXtyZXR1cm4gb2UuY2FydG9ncmFwaGljLmxvbmdpdHVkZS0kdC5jYXJ0b2dyYXBoaWMubG9uZ2l0dWRlfSkseHQuc29ydChmdW5jdGlvbihvZSwkdCl7cmV0dXJuIG9lLmNhcnRvZ3JhcGhpYy5sYXRpdHVkZS0kdC5jYXJ0b2dyYXBoaWMubGF0aXR1ZGV9KSxfdC5zb3J0KGZ1bmN0aW9uKG9lLCR0KXtyZXR1cm4gJHQuY2FydG9ncmFwaGljLmxvbmdpdHVkZS1vZS5jYXJ0b2dyYXBoaWMubG9uZ2l0dWRlfSk7bGV0IHBlPTFlLTU7aWYoWWQoUixmdCxRLHB0LGd0LGl0LGNlLE50LC1wZSpnLCEwLC1wZSpiKSxZZChSLGZ0LFEscHQsZ3QsaXQsY2UsT3QsLXBlKmIsITEpLFlkKFIsZnQsUSxwdCxndCxpdCxjZSx4dCxwZSpnLCEwLHBlKmIpLFlkKFIsZnQsUSxwdCxndCxpdCxjZSxfdCxwZSpiLCExKSxOdC5sZW5ndGg+MCYmX3QubGVuZ3RoPjApe2xldCBvZT1OdFswXS5pbmRleCwkdD16dCxWZT1fdFtfdC5sZW5ndGgtMV0uaW5kZXgsZG49Ui5sZW5ndGgtMTtpdC5wdXNoKFZlLGRuLCR0LCR0LG9lLFZlKX1GPVIubGVuZ3RoO2xldCBmZT15dC5mcm9tUG9pbnRzKFIpLFF0O2gobykmJihRdD1Dby5mcm9tUmVjdGFuZ2xlKG8sRCxVLG4pKTtsZXQgeGU9bmV3IENzKG4pLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50UG9zc2libHlVbmRlckVsbGlwc29pZChlLFIsRCksQWU9bmV3IERpKEEsUyxlKSxFZT1uZXcgeHMoZSxBZSxjZS5oTWluLFUsRSwhMSx1LEwsaSxzKSx1bj1uZXcgRmxvYXQzMkFycmF5KEYqRWUuc3RyaWRlKSxVZT0wO2ZvcihsZXQgb2U9MDtvZTxGOysrb2UpVWU9RWUuZW5jb2RlKHVuLFVlLFJbb2VdLFFbb2VdLGZ0W29lXSx2b2lkIDAscHRbb2VdLGd0W29lXSk7bGV0IGJlPU50Lm1hcChmdW5jdGlvbihvZSl7cmV0dXJuIG9lLmluZGV4fSkucmV2ZXJzZSgpLGxuPU90Lm1hcChmdW5jdGlvbihvZSl7cmV0dXJuIG9lLmluZGV4fSkucmV2ZXJzZSgpLHBuPXh0Lm1hcChmdW5jdGlvbihvZSl7cmV0dXJuIG9lLmluZGV4fSkucmV2ZXJzZSgpLFRuPV90Lm1hcChmdW5jdGlvbihvZSl7cmV0dXJuIG9lLmluZGV4fSkucmV2ZXJzZSgpO3JldHVybiBsbi51bnNoaWZ0KHBuW3BuLmxlbmd0aC0xXSksbG4ucHVzaChiZVswXSksVG4udW5zaGlmdChiZVtiZS5sZW5ndGgtMV0pLFRuLnB1c2gocG5bMF0pLHt2ZXJ0aWNlczp1bixpbmRpY2VzOm5ldyBVaW50MTZBcnJheShpdCksbWF4aW11bUhlaWdodDpVLG1pbmltdW1IZWlnaHQ6RCxlbmNvZGluZzpFZSxib3VuZGluZ1NwaGVyZTNEOmZlLG9yaWVudGVkQm91bmRpbmdCb3g6UXQsb2NjbHVkZWVQb2ludEluU2NhbGVkU3BhY2U6eGUsdmVydGV4Q291bnRXaXRob3V0U2tpcnRzOnp0LGluZGV4Q291bnRXaXRob3V0U2tpcnRzOmhlLHdlc3RJbmRpY2VzU291dGhUb05vcnRoOmJlLHNvdXRoSW5kaWNlc0Vhc3RUb1dlc3Q6bG4sZWFzdEluZGljZXNOb3J0aFRvU291dGg6cG4sbm9ydGhJbmRpY2VzV2VzdFRvRWFzdDpUbn19ZnVuY3Rpb24gWWQodCxlLG4sbyxyLGkscyxmLHUsYyxsKXtsZXQgcD1mLmxlbmd0aDtmb3IobGV0IGQ9MDtkPHA7KytkKXtsZXQgbT1mW2RdLF89bS5jYXJ0b2dyYXBoaWMsZz1tLmluZGV4LGI9dC5sZW5ndGgsTz1fLmxvbmdpdHVkZSxUPV8ubGF0aXR1ZGU7VD1NLmNsYW1wKFQsLU0uUElfT1ZFUl9UV08sTS5QSV9PVkVSX1RXTyk7bGV0IEU9Xy5oZWlnaHQtcy5za2lydEhlaWdodDtzLmhNaW49TWF0aC5taW4ocy5oTWluLEUpLGN0LmZyb21SYWRpYW5zKE8sVCxFLElvKSxjJiYoSW8ubG9uZ2l0dWRlKz11KSxjP2Q9PT1wLTE/SW8ubGF0aXR1ZGUrPWw6ZD09PTAmJihJby5sYXRpdHVkZS09bCk6SW8ubGF0aXR1ZGUrPXU7bGV0IHc9cy5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oSW8pO3QucHVzaCh3KSxlLnB1c2goRSksbi5wdXNoKG50LmNsb25lKG5bZ10pKSxvLmxlbmd0aD4wJiZvLnB1c2gob1tnXSksci5sZW5ndGg+MCYmci5wdXNoKHJbZ10pLHN0Lm11bHRpcGx5QnlQb2ludChzLnRvRU5VLHcsVmEpO2xldCBDPXMubWluaW11bSxOPXMubWF4aW11bTthLm1pbmltdW1CeUNvbXBvbmVudChWYSxDLEMpLGEubWF4aW11bUJ5Q29tcG9uZW50KFZhLE4sTik7bGV0IEk9cy5sYXN0Qm9yZGVyUG9pbnQ7aWYoaChJKSl7bGV0IEw9SS5pbmRleDtpLnB1c2goTCxiLTEsYixiLGcsTCl9cy5sYXN0Qm9yZGVyUG9pbnQ9bX19dmFyIFo0LFhkLEp5LFE0LEVjLElvLFZhLHRVLGVVLG5VLHJVLGVnPVooKCk9PntQZigpO1BlKCk7emUoKTtVdCgpO3ZlKCk7SXQoKTthdCgpO1p0KCk7c3UoKTtXdCgpO2tuKCk7ZGEoKTtBbigpO0pyKCk7Y3UoKTskcygpO2ljKCk7c28oKTtaND1VaW50MTZBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxYZD1JbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULEp5PVVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULFE0PUZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxFYz1GbG9hdDY0QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7SW89bmV3IGN0LFZhPW5ldyBhLHRVPW5ldyBhLGVVPW5ldyBhLG5VPW5ldyBzdDtyVT1RZShKNCl9KTt2YXIgaVUsSFIscVI9WigoKT0+e2lVPXtOT05FOjAsTEVSQzoxfSxIUj1PYmplY3QuZnJlZXplKGlVKX0pO3ZhciBfaSxuZyxzVSxjVSxhVSxLUixXUj1aKCgpPT57UGYoKTtQZSgpO3plKCk7VXQoKTtJdCgpO2F0KCk7SHQoKTtadCgpO3N1KCk7V3QoKTtrbigpO2RhKCk7QW4oKTtjdSgpOyRzKCk7aWMoKTtfaT17fTtfaS5ERUZBVUxUX1NUUlVDVFVSRT1PYmplY3QuZnJlZXplKHtoZWlnaHRTY2FsZToxLGhlaWdodE9mZnNldDowLGVsZW1lbnRzUGVySGVpZ2h0OjEsc3RyaWRlOjEsZWxlbWVudE11bHRpcGxpZXI6MjU2LGlzQmlnRW5kaWFuOiExfSk7bmc9bmV3IGEsc1U9bmV3IHN0LGNVPW5ldyBhLGFVPW5ldyBhO19pLmNvbXB1dGVWZXJ0aWNlcz1mdW5jdGlvbih0KXtpZighaCh0KXx8IWgodC5oZWlnaHRtYXApKXRocm93IG5ldyBCKCJvcHRpb25zLmhlaWdodG1hcCBpcyByZXF1aXJlZC4iKTtpZighaCh0LndpZHRoKXx8IWgodC5oZWlnaHQpKXRocm93IG5ldyBCKCJvcHRpb25zLndpZHRoIGFuZCBvcHRpb25zLmhlaWdodCBhcmUgcmVxdWlyZWQuIik7aWYoIWgodC5uYXRpdmVSZWN0YW5nbGUpKXRocm93IG5ldyBCKCJvcHRpb25zLm5hdGl2ZVJlY3RhbmdsZSBpcyByZXF1aXJlZC4iKTtpZighaCh0LnNraXJ0SGVpZ2h0KSl0aHJvdyBuZXcgQigib3B0aW9ucy5za2lydEhlaWdodCBpcyByZXF1aXJlZC4iKTtsZXQgZT1NYXRoLmNvcyxuPU1hdGguc2luLG89TWF0aC5zcXJ0LHI9TWF0aC5hdGFuLGk9TWF0aC5leHAscz1NLlBJX09WRVJfVFdPLGY9TS50b1JhZGlhbnMsdT10LmhlaWdodG1hcCxjPXQud2lkdGgsbD10LmhlaWdodCxwPXQuc2tpcnRIZWlnaHQsZD1wPjAsbT14KHQuaXNHZW9ncmFwaGljLCEwKSxfPXgodC5lbGxpcHNvaWQsJC5XR1M4NCksZz0xL18ubWF4aW11bVJhZGl1cyxiPVB0LmNsb25lKHQubmF0aXZlUmVjdGFuZ2xlKSxPPVB0LmNsb25lKHQucmVjdGFuZ2xlKSxULEUsdyxDO2goTyk/KFQ9Ty53ZXN0LEU9Ty5zb3V0aCx3PU8uZWFzdCxDPU8ubm9ydGgpOm0/KFQ9ZihiLndlc3QpLEU9ZihiLnNvdXRoKSx3PWYoYi5lYXN0KSxDPWYoYi5ub3J0aCkpOihUPWIud2VzdCpnLEU9cy0yKnIoaSgtYi5zb3V0aCpnKSksdz1iLmVhc3QqZyxDPXMtMipyKGkoLWIubm9ydGgqZykpKTtsZXQgTj10LnJlbGF0aXZlVG9DZW50ZXIsST1oKE4pO049ST9OOmEuWkVSTztsZXQgTD14KHQuaW5jbHVkZVdlYk1lcmNhdG9yVCwhMSksdj14KHQuZXhhZ2dlcmF0aW9uLDEpLEQ9eCh0LmV4YWdnZXJhdGlvblJlbGF0aXZlSGVpZ2h0LDApLEE9diE9PTEsUz14KHQuc3RydWN0dXJlLF9pLkRFRkFVTFRfU1RSVUNUVVJFKSxQPXgoUy5oZWlnaHRTY2FsZSxfaS5ERUZBVUxUX1NUUlVDVFVSRS5oZWlnaHRTY2FsZSksRj14KFMuaGVpZ2h0T2Zmc2V0LF9pLkRFRkFVTFRfU1RSVUNUVVJFLmhlaWdodE9mZnNldCksaj14KFMuZWxlbWVudHNQZXJIZWlnaHQsX2kuREVGQVVMVF9TVFJVQ1RVUkUuZWxlbWVudHNQZXJIZWlnaHQpLEg9eChTLnN0cmlkZSxfaS5ERUZBVUxUX1NUUlVDVFVSRS5zdHJpZGUpLGs9eChTLmVsZW1lbnRNdWx0aXBsaWVyLF9pLkRFRkFVTFRfU1RSVUNUVVJFLmVsZW1lbnRNdWx0aXBsaWVyKSxLPXgoUy5pc0JpZ0VuZGlhbixfaS5ERUZBVUxUX1NUUlVDVFVSRS5pc0JpZ0VuZGlhbiksWD1QdC5jb21wdXRlV2lkdGgoYiksUj1QdC5jb21wdXRlSGVpZ2h0KGIpLFE9WC8oYy0xKSxmdD1SLyhsLTEpO218fChYKj1nLFIqPWcpO2xldCBwdD1fLnJhZGlpU3F1YXJlZCxndD1wdC54LGl0PXB0LnksTnQ9cHQueixPdD02NTUzNix4dD0tNjU1MzYsX3Q9Z3IuZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUoTixfKSxkdD1zdC5pbnZlcnNlVHJhbnNmb3JtYXRpb24oX3Qsc1UpLFZ0LHp0O0wmJihWdD1lby5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKEUpLHp0PTEvKGVvLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGUoQyktVnQpKTtsZXQgaGU9Y1U7aGUueD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksaGUueT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksaGUuej1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7bGV0IGNlPWFVO2NlLng9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGNlLnk9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGNlLno9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO2xldCBwZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksZmU9YypsLFF0PXA+MD9jKjIrbCoyOjAsSnQ9ZmUrUXQseGU9bmV3IEFycmF5KEp0KSxBZT1uZXcgQXJyYXkoSnQpLEVlPW5ldyBBcnJheShKdCksdW49TD9uZXcgQXJyYXkoSnQpOltdLFVlPUE/bmV3IEFycmF5KEp0KTpbXSxiZT0wLGxuPWwscG49MCxUbj1jO2QmJigtLWJlLCsrbG4sLS1wbiwrK1RuKTtsZXQgb2U9MWUtNTtmb3IobGV0IFplPWJlO1plPGxuOysrWmUpe2xldCBjbj1aZTtjbjwwJiYoY249MCksY24+PWwmJihjbj1sLTEpO2xldCBLZT1iLm5vcnRoLWZ0KmNuO20/S2U9ZihLZSk6S2U9cy0yKnIoaSgtS2UqZykpO2xldCBobj0oS2UtRSkvKEMtRSk7aG49TS5jbGFtcChobiwwLDEpO2xldCB1bz1aZT09PWJlLHFuPVplPT09bG4tMTtwPjAmJih1bz9LZSs9b2UqUjpxbiYmKEtlLT1vZSpSKSk7bGV0IEtuPWUoS2UpLGxvPW4oS2UpLGtlPU50KmxvLE5lO0wmJihOZT0oZW8uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShLZSktVnQpKnp0KTtmb3IobGV0IERuPXBuO0RuPFRuOysrRG4pe2xldCBXbj1EbjtXbjwwJiYoV249MCksV24+PWMmJihXbj1jLTEpO2xldCBxbz1jbiooYypIKStXbipILHJuO2lmKGo9PT0xKXJuPXVbcW9dO2Vsc2V7cm49MDtsZXQgcG87aWYoSylmb3IocG89MDtwbzxqOysrcG8pcm49cm4qayt1W3FvK3BvXTtlbHNlIGZvcihwbz1qLTE7cG8+PTA7LS1wbylybj1ybiprK3VbcW8rcG9dfXJuPXJuKlArRix4dD1NYXRoLm1heCh4dCxybiksT3Q9TWF0aC5taW4oT3Qscm4pO2xldCBPbj1iLndlc3QrUSpXbjttP09uPWYoT24pOk9uPU9uKmc7bGV0IHVyPShPbi1UKS8ody1UKTt1cj1NLmNsYW1wKHVyLDAsMSk7bGV0IFpuPWNuKmMrV247aWYocD4wKXtsZXQgcG89RG49PT1wbix2cj1Ebj09PVRuLTEsTmM9dW98fHFufHxwb3x8dnI7aWYoKHVvfHxxbikmJihwb3x8dnIpKWNvbnRpbnVlO05jJiYocm4tPXAscG8/KFpuPWZlKyhsLWNuLTEpLE9uLT1vZSpYKTpxbj9abj1mZStsKyhjLVduLTEpOnZyPyhabj1mZStsK2MrY24sT24rPW9lKlgpOnVvJiYoWm49ZmUrbCtjK2wrV24pKX1sZXQgS289S24qZShPbiksTnI9S24qbihPbiksTXM9Z3QqS28sTnM9aXQqTnIsSXI9MS9vKE1zKktvK05zKk5yK2tlKmxvKSxZaT1NcypJcixJcz1OcypJcixBaT1rZSpJcixubz1uZXcgYTtuby54PVlpK0tvKnJuLG5vLnk9SXMrTnIqcm4sbm8uej1BaStsbypybixzdC5tdWx0aXBseUJ5UG9pbnQoZHQsbm8sbmcpLGEubWluaW11bUJ5Q29tcG9uZW50KG5nLGhlLGhlKSxhLm1heGltdW1CeUNvbXBvbmVudChuZyxjZSxjZSkscGU9TWF0aC5taW4ocGUscm4pLHhlW1puXT1ubyxFZVtabl09bmV3IG50KHVyLGhuKSxBZVtabl09cm4sTCYmKHVuW1puXT1OZSksQSYmKFVlW1puXT1fLmdlb2RldGljU3VyZmFjZU5vcm1hbChubykpfX1sZXQgJHQ9eXQuZnJvbVBvaW50cyh4ZSksVmU7aChPKSYmKFZlPUNvLmZyb21SZWN0YW5nbGUoTyxPdCx4dCxfKSk7bGV0IGRuO0kmJihkbj1uZXcgQ3MoXykuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnRQb3NzaWJseVVuZGVyRWxsaXBzb2lkKE4seGUsT3QpKTtsZXQgc249bmV3IERpKGhlLGNlLE4pLG1uPW5ldyB4cyhOLHNuLHBlLHh0LF90LCExLEwsQSx2LEQpLGZvPW5ldyBGbG9hdDMyQXJyYXkoSnQqbW4uc3RyaWRlKSxIbj0wO2ZvcihsZXQgWmU9MDtaZTxKdDsrK1plKUhuPW1uLmVuY29kZShmbyxIbix4ZVtaZV0sRWVbWmVdLEFlW1plXSx2b2lkIDAsdW5bWmVdLFVlW1plXSk7cmV0dXJue3ZlcnRpY2VzOmZvLG1heGltdW1IZWlnaHQ6eHQsbWluaW11bUhlaWdodDpPdCxlbmNvZGluZzptbixib3VuZGluZ1NwaGVyZTNEOiR0LG9yaWVudGVkQm91bmRpbmdCb3g6VmUsb2NjbHVkZWVQb2ludEluU2NhbGVkU3BhY2U6ZG59fTtLUj1faX0pO3ZhciBYUj1VbigoVWF0LCRkKT0+ey8qIENvcHlyaWdodCAyMDE1LTIwMTggRXNyaS4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCBAcHJlc2VydmUgKi8oZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe3ZhciByPXt9O3IuZGVmYXVsdE5vRGF0YVZhbHVlPS0zNDAyNzk5OTM4NzkwMTQ4NGUyMixyLmRlY29kZT1mdW5jdGlvbihsLHApe3A9cHx8e307dmFyIGQ9cC5lbmNvZGVkTWFza0RhdGF8fHAuZW5jb2RlZE1hc2tEYXRhPT09bnVsbCxtPXUobCxwLmlucHV0T2Zmc2V0fHwwLGQpLF89cC5ub0RhdGFWYWx1ZSE9PW51bGw/cC5ub0RhdGFWYWx1ZTpyLmRlZmF1bHROb0RhdGFWYWx1ZSxnPWkobSxwLnBpeGVsVHlwZXx8RmxvYXQzMkFycmF5LHAuZW5jb2RlZE1hc2tEYXRhLF8scC5yZXR1cm5NYXNrKSxiPXt3aWR0aDptLndpZHRoLGhlaWdodDptLmhlaWdodCxwaXhlbERhdGE6Zy5yZXN1bHRQaXhlbHMsbWluVmFsdWU6Zy5taW5WYWx1ZSxtYXhWYWx1ZTptLnBpeGVscy5tYXhWYWx1ZSxub0RhdGFWYWx1ZTpffTtyZXR1cm4gZy5yZXN1bHRNYXNrJiYoYi5tYXNrRGF0YT1nLnJlc3VsdE1hc2spLHAucmV0dXJuRW5jb2RlZE1hc2smJm0ubWFzayYmKGIuZW5jb2RlZE1hc2tEYXRhPW0ubWFzay5iaXRzZXQ/bS5tYXNrLmJpdHNldDpudWxsKSxwLnJldHVybkZpbGVJbmZvJiYoYi5maWxlSW5mbz1zKG0pLHAuY29tcHV0ZVVzZWRCaXREZXB0aHMmJihiLmZpbGVJbmZvLmJpdERlcHRocz1mKG0pKSksYn07dmFyIGk9ZnVuY3Rpb24obCxwLGQsbSxfKXt2YXIgZz0wLGI9bC5waXhlbHMubnVtQmxvY2tzWCxPPWwucGl4ZWxzLm51bUJsb2Nrc1ksVD1NYXRoLmZsb29yKGwud2lkdGgvYiksRT1NYXRoLmZsb29yKGwuaGVpZ2h0L08pLHc9MipsLm1heFpFcnJvcixDPU51bWJlci5NQVhfVkFMVUUsTjtkPWR8fChsLm1hc2s/bC5tYXNrLmJpdHNldDpudWxsKTt2YXIgSSxMO0k9bmV3IHAobC53aWR0aCpsLmhlaWdodCksXyYmZCYmKEw9bmV3IFVpbnQ4QXJyYXkobC53aWR0aCpsLmhlaWdodCkpO2Zvcih2YXIgdj1uZXcgRmxvYXQzMkFycmF5KFQqRSksRCxVLEE9MDtBPD1PO0ErKyl7dmFyIFM9QSE9PU8/RTpsLmhlaWdodCVPO2lmKFMhPT0wKWZvcih2YXIgUD0wO1A8PWI7UCsrKXt2YXIgRj1QIT09Yj9UOmwud2lkdGglYjtpZihGIT09MCl7dmFyIGo9QSpsLndpZHRoKkUrUCpULEg9bC53aWR0aC1GLGs9bC5waXhlbHMuYmxvY2tzW2ddLEssWCxSO2suZW5jb2Rpbmc8Mj8oay5lbmNvZGluZz09PTA/Sz1rLnJhd0RhdGE6KGMoay5zdHVmZmVkRGF0YSxrLmJpdHNQZXJQaXhlbCxrLm51bVZhbGlkUGl4ZWxzLGsub2Zmc2V0LHcsdixsLnBpeGVscy5tYXhWYWx1ZSksSz12KSxYPTApOmsuZW5jb2Rpbmc9PT0yP1I9MDpSPWsub2Zmc2V0O3ZhciBRO2lmKGQpZm9yKFU9MDtVPFM7VSsrKXtmb3IoaiY3JiYoUT1kW2o+PjNdLFE8PD1qJjcpLEQ9MDtEPEY7RCsrKWomN3x8KFE9ZFtqPj4zXSksUSYxMjg/KEwmJihMW2pdPTEpLE49ay5lbmNvZGluZzwyP0tbWCsrXTpSLEM9Qz5OP046QyxJW2orK109Tik6KEwmJihMW2pdPTApLElbaisrXT1tKSxRPDw9MTtqKz1IfWVsc2UgaWYoay5lbmNvZGluZzwyKWZvcihVPTA7VTxTO1UrKyl7Zm9yKEQ9MDtEPEY7RCsrKU49S1tYKytdLEM9Qz5OP046QyxJW2orK109TjtqKz1IfWVsc2UgZm9yKEM9Qz5SP1I6QyxVPTA7VTxTO1UrKyl7Zm9yKEQ9MDtEPEY7RCsrKUlbaisrXT1SO2orPUh9aWYoay5lbmNvZGluZz09PTEmJlghPT1rLm51bVZhbGlkUGl4ZWxzKXRocm93IkJsb2NrIGFuZCBNYXNrIGRvIG5vdCBtYXRjaCI7ZysrfX19cmV0dXJue3Jlc3VsdFBpeGVsczpJLHJlc3VsdE1hc2s6TCxtaW5WYWx1ZTpDfX0scz1mdW5jdGlvbihsKXtyZXR1cm57ZmlsZUlkZW50aWZpZXJTdHJpbmc6bC5maWxlSWRlbnRpZmllclN0cmluZyxmaWxlVmVyc2lvbjpsLmZpbGVWZXJzaW9uLGltYWdlVHlwZTpsLmltYWdlVHlwZSxoZWlnaHQ6bC5oZWlnaHQsd2lkdGg6bC53aWR0aCxtYXhaRXJyb3I6bC5tYXhaRXJyb3IsZW9mT2Zmc2V0OmwuZW9mT2Zmc2V0LG1hc2s6bC5tYXNrP3tudW1CbG9ja3NYOmwubWFzay5udW1CbG9ja3NYLG51bUJsb2Nrc1k6bC5tYXNrLm51bUJsb2Nrc1ksbnVtQnl0ZXM6bC5tYXNrLm51bUJ5dGVzLG1heFZhbHVlOmwubWFzay5tYXhWYWx1ZX06bnVsbCxwaXhlbHM6e251bUJsb2Nrc1g6bC5waXhlbHMubnVtQmxvY2tzWCxudW1CbG9ja3NZOmwucGl4ZWxzLm51bUJsb2Nrc1ksbnVtQnl0ZXM6bC5waXhlbHMubnVtQnl0ZXMsbWF4VmFsdWU6bC5waXhlbHMubWF4VmFsdWUsbm9EYXRhVmFsdWU6bC5ub0RhdGFWYWx1ZX19fSxmPWZ1bmN0aW9uKGwpe2Zvcih2YXIgcD1sLnBpeGVscy5udW1CbG9ja3NYKmwucGl4ZWxzLm51bUJsb2Nrc1ksZD17fSxtPTA7bTxwO20rKyl7dmFyIF89bC5waXhlbHMuYmxvY2tzW21dO18uZW5jb2Rpbmc9PT0wP2QuZmxvYXQzMj0hMDpfLmVuY29kaW5nPT09MT9kW18uYml0c1BlclBpeGVsXT0hMDpkWzBdPSEwfXJldHVybiBPYmplY3Qua2V5cyhkKX0sdT1mdW5jdGlvbihsLHAsZCl7dmFyIG09e30sXz1uZXcgVWludDhBcnJheShsLHAsMTApO2lmKG0uZmlsZUlkZW50aWZpZXJTdHJpbmc9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLF8pLG0uZmlsZUlkZW50aWZpZXJTdHJpbmcudHJpbSgpIT09IkNudFpJbWFnZSIpdGhyb3ciVW5leHBlY3RlZCBmaWxlIGlkZW50aWZpZXIgc3RyaW5nOiAiK20uZmlsZUlkZW50aWZpZXJTdHJpbmc7cCs9MTA7dmFyIGc9bmV3IERhdGFWaWV3KGwscCwyNCk7aWYobS5maWxlVmVyc2lvbj1nLmdldEludDMyKDAsITApLG0uaW1hZ2VUeXBlPWcuZ2V0SW50MzIoNCwhMCksbS5oZWlnaHQ9Zy5nZXRVaW50MzIoOCwhMCksbS53aWR0aD1nLmdldFVpbnQzMigxMiwhMCksbS5tYXhaRXJyb3I9Zy5nZXRGbG9hdDY0KDE2LCEwKSxwKz0yNCwhZClpZihnPW5ldyBEYXRhVmlldyhsLHAsMTYpLG0ubWFzaz17fSxtLm1hc2subnVtQmxvY2tzWT1nLmdldFVpbnQzMigwLCEwKSxtLm1hc2subnVtQmxvY2tzWD1nLmdldFVpbnQzMig0LCEwKSxtLm1hc2subnVtQnl0ZXM9Zy5nZXRVaW50MzIoOCwhMCksbS5tYXNrLm1heFZhbHVlPWcuZ2V0RmxvYXQzMigxMiwhMCkscCs9MTYsbS5tYXNrLm51bUJ5dGVzPjApe3ZhciBiPW5ldyBVaW50OEFycmF5KE1hdGguY2VpbChtLndpZHRoKm0uaGVpZ2h0LzgpKTtnPW5ldyBEYXRhVmlldyhsLHAsbS5tYXNrLm51bUJ5dGVzKTt2YXIgTz1nLmdldEludDE2KDAsITApLFQ9MixFPTA7ZG97aWYoTz4wKWZvcig7Ty0tOyliW0UrK109Zy5nZXRVaW50OChUKyspO2Vsc2V7dmFyIHc9Zy5nZXRVaW50OChUKyspO2ZvcihPPS1PO08tLTspYltFKytdPXd9Tz1nLmdldEludDE2KFQsITApLFQrPTJ9d2hpbGUoVDxtLm1hc2subnVtQnl0ZXMpO2lmKE8hPT0tMzI3Njh8fEU8Yi5sZW5ndGgpdGhyb3ciVW5leHBlY3RlZCBlbmQgb2YgbWFzayBSTEUgZW5jb2RpbmciO20ubWFzay5iaXRzZXQ9YixwKz1tLm1hc2subnVtQnl0ZXN9ZWxzZSBtLm1hc2subnVtQnl0ZXN8bS5tYXNrLm51bUJsb2Nrc1l8bS5tYXNrLm1heFZhbHVlfHwobS5tYXNrLmJpdHNldD1uZXcgVWludDhBcnJheShNYXRoLmNlaWwobS53aWR0aCptLmhlaWdodC84KSkpO2c9bmV3IERhdGFWaWV3KGwscCwxNiksbS5waXhlbHM9e30sbS5waXhlbHMubnVtQmxvY2tzWT1nLmdldFVpbnQzMigwLCEwKSxtLnBpeGVscy5udW1CbG9ja3NYPWcuZ2V0VWludDMyKDQsITApLG0ucGl4ZWxzLm51bUJ5dGVzPWcuZ2V0VWludDMyKDgsITApLG0ucGl4ZWxzLm1heFZhbHVlPWcuZ2V0RmxvYXQzMigxMiwhMCkscCs9MTY7dmFyIEM9bS5waXhlbHMubnVtQmxvY2tzWCxOPW0ucGl4ZWxzLm51bUJsb2Nrc1ksST1DKyhtLndpZHRoJUM+MD8xOjApLEw9TisobS5oZWlnaHQlTj4wPzE6MCk7bS5waXhlbHMuYmxvY2tzPW5ldyBBcnJheShJKkwpO2Zvcih2YXIgdj0wLEQ9MDtEPEw7RCsrKWZvcih2YXIgVT0wO1U8STtVKyspe3ZhciBBPTAsUz1sLmJ5dGVMZW5ndGgtcDtnPW5ldyBEYXRhVmlldyhsLHAsTWF0aC5taW4oMTAsUykpO3ZhciBQPXt9O20ucGl4ZWxzLmJsb2Nrc1t2KytdPVA7dmFyIEY9Zy5nZXRVaW50OCgwKTtpZihBKyssUC5lbmNvZGluZz1GJjYzLFAuZW5jb2Rpbmc+Myl0aHJvdyJJbnZhbGlkIGJsb2NrIGVuY29kaW5nICgiK1AuZW5jb2RpbmcrIikiO2lmKFAuZW5jb2Rpbmc9PT0yKXtwKys7Y29udGludWV9aWYoRiE9PTAmJkYhPT0yKXtpZihGPj49NixQLm9mZnNldFR5cGU9RixGPT09MilQLm9mZnNldD1nLmdldEludDgoMSksQSsrO2Vsc2UgaWYoRj09PTEpUC5vZmZzZXQ9Zy5nZXRJbnQxNigxLCEwKSxBKz0yO2Vsc2UgaWYoRj09PTApUC5vZmZzZXQ9Zy5nZXRGbG9hdDMyKDEsITApLEErPTQ7ZWxzZSB0aHJvdyJJbnZhbGlkIGJsb2NrIG9mZnNldCB0eXBlIjtpZihQLmVuY29kaW5nPT09MSlpZihGPWcuZ2V0VWludDgoQSksQSsrLFAuYml0c1BlclBpeGVsPUYmNjMsRj4+PTYsUC5udW1WYWxpZFBpeGVsc1R5cGU9RixGPT09MilQLm51bVZhbGlkUGl4ZWxzPWcuZ2V0VWludDgoQSksQSsrO2Vsc2UgaWYoRj09PTEpUC5udW1WYWxpZFBpeGVscz1nLmdldFVpbnQxNihBLCEwKSxBKz0yO2Vsc2UgaWYoRj09PTApUC5udW1WYWxpZFBpeGVscz1nLmdldFVpbnQzMihBLCEwKSxBKz00O2Vsc2UgdGhyb3ciSW52YWxpZCB2YWxpZCBwaXhlbCBjb3VudCB0eXBlIn1pZihwKz1BLFAuZW5jb2RpbmchPT0zKXt2YXIgaixIO2lmKFAuZW5jb2Rpbmc9PT0wKXt2YXIgaz0obS5waXhlbHMubnVtQnl0ZXMtMSkvNDtpZihrIT09TWF0aC5mbG9vcihrKSl0aHJvdyJ1bmNvbXByZXNzZWQgYmxvY2sgaGFzIGludmFsaWQgbGVuZ3RoIjtqPW5ldyBBcnJheUJ1ZmZlcihrKjQpLEg9bmV3IFVpbnQ4QXJyYXkoaiksSC5zZXQobmV3IFVpbnQ4QXJyYXkobCxwLGsqNCkpO3ZhciBLPW5ldyBGbG9hdDMyQXJyYXkoaik7UC5yYXdEYXRhPUsscCs9ayo0fWVsc2UgaWYoUC5lbmNvZGluZz09PTEpe3ZhciBYPU1hdGguY2VpbChQLm51bVZhbGlkUGl4ZWxzKlAuYml0c1BlclBpeGVsLzgpLFI9TWF0aC5jZWlsKFgvNCk7aj1uZXcgQXJyYXlCdWZmZXIoUio0KSxIPW5ldyBVaW50OEFycmF5KGopLEguc2V0KG5ldyBVaW50OEFycmF5KGwscCxYKSksUC5zdHVmZmVkRGF0YT1uZXcgVWludDMyQXJyYXkoaikscCs9WH19fXJldHVybiBtLmVvZk9mZnNldD1wLG19LGM9ZnVuY3Rpb24obCxwLGQsbSxfLGcsYil7dmFyIE89KDE8PHApLTEsVD0wLEUsdz0wLEMsTixJPU1hdGguY2VpbCgoYi1tKS9fKSxMPWwubGVuZ3RoKjQtTWF0aC5jZWlsKHAqZC84KTtmb3IobFtsLmxlbmd0aC0xXTw8PTgqTCxFPTA7RTxkO0UrKyl7aWYodz09PTAmJihOPWxbVCsrXSx3PTMyKSx3Pj1wKUM9Tj4+PnctcCZPLHctPXA7ZWxzZXt2YXIgdj1wLXc7Qz0oTiZPKTw8diZPLE49bFtUKytdLHc9MzItdixDKz1OPj4+d31nW0VdPUM8ST9tK0MqXzpifXJldHVybiBnfTtyZXR1cm4gcn0oKSxlPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciByPXt1bnN0dWZmOmZ1bmN0aW9uKHUsYyxsLHAsZCxtLF8sZyl7dmFyIGI9KDE8PGwpLTEsTz0wLFQsRT0wLHcsQyxOLEksTD11Lmxlbmd0aCo0LU1hdGguY2VpbChsKnAvOCk7aWYodVt1Lmxlbmd0aC0xXTw8PTgqTCxkKWZvcihUPTA7VDxwO1QrKylFPT09MCYmKEM9dVtPKytdLEU9MzIpLEU+PWw/KHc9Qz4+PkUtbCZiLEUtPWwpOihOPWwtRSx3PShDJmIpPDxOJmIsQz11W08rK10sRT0zMi1OLHcrPUM+Pj5FKSxjW1RdPWRbd107ZWxzZSBmb3IoST1NYXRoLmNlaWwoKGctbSkvXyksVD0wO1Q8cDtUKyspRT09PTAmJihDPXVbTysrXSxFPTMyKSxFPj1sPyh3PUM+Pj5FLWwmYixFLT1sKTooTj1sLUUsdz0oQyZiKTw8TiZiLEM9dVtPKytdLEU9MzItTix3Kz1DPj4+RSksY1tUXT13PEk/bSt3Kl86Z30sdW5zdHVmZkxVVDpmdW5jdGlvbih1LGMsbCxwLGQsbSl7dmFyIF89KDE8PGMpLTEsZz0wLGI9MCxPPTAsVD0wLEU9MCx3LEM9W10sTj11Lmxlbmd0aCo0LU1hdGguY2VpbChjKmwvOCk7dVt1Lmxlbmd0aC0xXTw8PTgqTjt2YXIgST1NYXRoLmNlaWwoKG0tcCkvZCk7Zm9yKGI9MDtiPGw7YisrKVQ9PT0wJiYodz11W2crK10sVD0zMiksVD49Yz8oRT13Pj4+VC1jJl8sVC09Yyk6KE89Yy1ULEU9KHcmXyk8PE8mXyx3PXVbZysrXSxUPTMyLU8sRSs9dz4+PlQpLENbYl09RTxJP3ArRSpkOm07cmV0dXJuIEMudW5zaGlmdChwKSxDfSx1bnN0dWZmMjpmdW5jdGlvbih1LGMsbCxwLGQsbSxfLGcpe3ZhciBiPSgxPDxsKS0xLE89MCxULEU9MCx3PTAsQyxOLEk7aWYoZClmb3IoVD0wO1Q8cDtUKyspRT09PTAmJihOPXVbTysrXSxFPTMyLHc9MCksRT49bD8oQz1OPj4+dyZiLEUtPWwsdys9bCk6KEk9bC1FLEM9Tj4+PncmYixOPXVbTysrXSxFPTMyLUksQ3w9KE4mKDE8PEkpLTEpPDxsLUksdz1JKSxjW1RdPWRbQ107ZWxzZXt2YXIgTD1NYXRoLmNlaWwoKGctbSkvXyk7Zm9yKFQ9MDtUPHA7VCsrKUU9PT0wJiYoTj11W08rK10sRT0zMix3PTApLEU+PWw/KEM9Tj4+PncmYixFLT1sLHcrPWwpOihJPWwtRSxDPU4+Pj53JmIsTj11W08rK10sRT0zMi1JLEN8PShOJigxPDxJKS0xKTw8bC1JLHc9SSksY1tUXT1DPEw/bStDKl86Z31yZXR1cm4gY30sdW5zdHVmZkxVVDI6ZnVuY3Rpb24odSxjLGwscCxkLG0pe3ZhciBfPSgxPDxjKS0xLGc9MCxiPTAsTz0wLFQ9MCxFPTAsdz0wLEMsTj1bXSxJPU1hdGguY2VpbCgobS1wKS9kKTtmb3IoYj0wO2I8bDtiKyspVD09PTAmJihDPXVbZysrXSxUPTMyLHc9MCksVD49Yz8oRT1DPj4+dyZfLFQtPWMsdys9Yyk6KE89Yy1ULEU9Qz4+PncmXyxDPXVbZysrXSxUPTMyLU8sRXw9KEMmKDE8PE8pLTEpPDxjLU8sdz1PKSxOW2JdPUU8ST9wK0UqZDptO3JldHVybiBOLnVuc2hpZnQocCksTn0sb3JpZ2luYWxVbnN0dWZmOmZ1bmN0aW9uKHUsYyxsLHApe3ZhciBkPSgxPDxsKS0xLG09MCxfLGc9MCxiLE8sVCxFPXUubGVuZ3RoKjQtTWF0aC5jZWlsKGwqcC84KTtmb3IodVt1Lmxlbmd0aC0xXTw8PTgqRSxfPTA7XzxwO18rKylnPT09MCYmKE89dVttKytdLGc9MzIpLGc+PWw/KGI9Tz4+PmctbCZkLGctPWwpOihUPWwtZyxiPShPJmQpPDxUJmQsTz11W20rK10sZz0zMi1ULGIrPU8+Pj5nKSxjW19dPWI7cmV0dXJuIGN9LG9yaWdpbmFsVW5zdHVmZjI6ZnVuY3Rpb24odSxjLGwscCl7dmFyIGQ9KDE8PGwpLTEsbT0wLF8sZz0wLGI9MCxPLFQsRTtmb3IoXz0wO188cDtfKyspZz09PTAmJihUPXVbbSsrXSxnPTMyLGI9MCksZz49bD8oTz1UPj4+YiZkLGctPWwsYis9bCk6KEU9bC1nLE89VD4+PmImZCxUPXVbbSsrXSxnPTMyLUUsT3w9KFQmKDE8PEUpLTEpPDxsLUUsYj1FKSxjW19dPU87cmV0dXJuIGN9fSxpPXtIVUZGTUFOX0xVVF9CSVRTX01BWDoxMixjb21wdXRlQ2hlY2tzdW1GbGV0Y2hlcjMyOmZ1bmN0aW9uKHUpe2Zvcih2YXIgYz02NTUzNSxsPTY1NTM1LHA9dS5sZW5ndGgsZD1NYXRoLmZsb29yKHAvMiksbT0wO2Q7KXt2YXIgXz1kPj0zNTk/MzU5OmQ7ZC09XztkbyBjKz11W20rK108PDgsbCs9Yys9dVttKytdO3doaWxlKC0tXyk7Yz0oYyY2NTUzNSkrKGM+Pj4xNiksbD0obCY2NTUzNSkrKGw+Pj4xNil9cmV0dXJuIHAmMSYmKGwrPWMrPXVbbV08PDgpLGM9KGMmNjU1MzUpKyhjPj4+MTYpLGw9KGwmNjU1MzUpKyhsPj4+MTYpLChsPDwxNnxjKT4+PjB9LHJlYWRIZWFkZXJJbmZvOmZ1bmN0aW9uKHUsYyl7dmFyIGw9Yy5wdHIscD1uZXcgVWludDhBcnJheSh1LGwsNiksZD17fTtpZihkLmZpbGVJZGVudGlmaWVyU3RyaW5nPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxwKSxkLmZpbGVJZGVudGlmaWVyU3RyaW5nLmxhc3RJbmRleE9mKCJMZXJjMiIsMCkhPT0wKXRocm93IlVuZXhwZWN0ZWQgZmlsZSBpZGVudGlmaWVyIHN0cmluZyAoZXhwZWN0IExlcmMyICk6ICIrZC5maWxlSWRlbnRpZmllclN0cmluZztsKz02O3ZhciBtPW5ldyBEYXRhVmlldyh1LGwsOCksXz1tLmdldEludDMyKDAsITApO2QuZmlsZVZlcnNpb249XyxsKz00LF8+PTMmJihkLmNoZWNrc3VtPW0uZ2V0VWludDMyKDQsITApLGwrPTQpLG09bmV3IERhdGFWaWV3KHUsbCwxMiksZC5oZWlnaHQ9bS5nZXRVaW50MzIoMCwhMCksZC53aWR0aD1tLmdldFVpbnQzMig0LCEwKSxsKz04LF8+PTQ/KGQubnVtRGltcz1tLmdldFVpbnQzMig4LCEwKSxsKz00KTpkLm51bURpbXM9MSxtPW5ldyBEYXRhVmlldyh1LGwsNDApLGQubnVtVmFsaWRQaXhlbD1tLmdldFVpbnQzMigwLCEwKSxkLm1pY3JvQmxvY2tTaXplPW0uZ2V0SW50MzIoNCwhMCksZC5ibG9iU2l6ZT1tLmdldEludDMyKDgsITApLGQuaW1hZ2VUeXBlPW0uZ2V0SW50MzIoMTIsITApLGQubWF4WkVycm9yPW0uZ2V0RmxvYXQ2NCgxNiwhMCksZC56TWluPW0uZ2V0RmxvYXQ2NCgyNCwhMCksZC56TWF4PW0uZ2V0RmxvYXQ2NCgzMiwhMCksbCs9NDAsYy5oZWFkZXJJbmZvPWQsYy5wdHI9bDt2YXIgZyxiO2lmKF8+PTMmJihiPV8+PTQ/NTI6NDgsZz10aGlzLmNvbXB1dGVDaGVja3N1bUZsZXRjaGVyMzIobmV3IFVpbnQ4QXJyYXkodSxsLWIsZC5ibG9iU2l6ZS0xNCkpLGchPT1kLmNoZWNrc3VtKSl0aHJvdyJDaGVja3N1bSBmYWlsZWQuIjtyZXR1cm4hMH0sY2hlY2tNaW5NYXhSYW5nZXM6ZnVuY3Rpb24odSxjKXt2YXIgbD1jLmhlYWRlckluZm8scD10aGlzLmdldERhdGFUeXBlQXJyYXkobC5pbWFnZVR5cGUpLGQ9bC5udW1EaW1zKnRoaXMuZ2V0RGF0YVR5cGVTaXplKGwuaW1hZ2VUeXBlKSxtPXRoaXMucmVhZFN1YkFycmF5KHUsYy5wdHIscCxkKSxfPXRoaXMucmVhZFN1YkFycmF5KHUsYy5wdHIrZCxwLGQpO2MucHRyKz0yKmQ7dmFyIGcsYj0hMDtmb3IoZz0wO2c8bC5udW1EaW1zO2crKylpZihtW2ddIT09X1tnXSl7Yj0hMTticmVha31yZXR1cm4gbC5taW5WYWx1ZXM9bSxsLm1heFZhbHVlcz1fLGJ9LHJlYWRTdWJBcnJheTpmdW5jdGlvbih1LGMsbCxwKXt2YXIgZDtpZihsPT09VWludDhBcnJheSlkPW5ldyBVaW50OEFycmF5KHUsYyxwKTtlbHNle3ZhciBtPW5ldyBBcnJheUJ1ZmZlcihwKSxfPW5ldyBVaW50OEFycmF5KG0pO18uc2V0KG5ldyBVaW50OEFycmF5KHUsYyxwKSksZD1uZXcgbChtKX1yZXR1cm4gZH0scmVhZE1hc2s6ZnVuY3Rpb24odSxjKXt2YXIgbD1jLnB0cixwPWMuaGVhZGVySW5mbyxkPXAud2lkdGgqcC5oZWlnaHQsbT1wLm51bVZhbGlkUGl4ZWwsXz1uZXcgRGF0YVZpZXcodSxsLDQpLGc9e307aWYoZy5udW1CeXRlcz1fLmdldFVpbnQzMigwLCEwKSxsKz00LChtPT09MHx8ZD09PW0pJiZnLm51bUJ5dGVzIT09MCl0aHJvdyJpbnZhbGlkIG1hc2siO3ZhciBiLE87aWYobT09PTApYj1uZXcgVWludDhBcnJheShNYXRoLmNlaWwoZC84KSksZy5iaXRzZXQ9YixPPW5ldyBVaW50OEFycmF5KGQpLGMucGl4ZWxzLnJlc3VsdE1hc2s9TyxsKz1nLm51bUJ5dGVzO2Vsc2UgaWYoZy5udW1CeXRlcz4wKXtiPW5ldyBVaW50OEFycmF5KE1hdGguY2VpbChkLzgpKSxfPW5ldyBEYXRhVmlldyh1LGwsZy5udW1CeXRlcyk7dmFyIFQ9Xy5nZXRJbnQxNigwLCEwKSxFPTIsdz0wLEM9MDtkb3tpZihUPjApZm9yKDtULS07KWJbdysrXT1fLmdldFVpbnQ4KEUrKyk7ZWxzZSBmb3IoQz1fLmdldFVpbnQ4KEUrKyksVD0tVDtULS07KWJbdysrXT1DO1Q9Xy5nZXRJbnQxNihFLCEwKSxFKz0yfXdoaWxlKEU8Zy5udW1CeXRlcyk7aWYoVCE9PS0zMjc2OHx8dzxiLmxlbmd0aCl0aHJvdyJVbmV4cGVjdGVkIGVuZCBvZiBtYXNrIFJMRSBlbmNvZGluZyI7Tz1uZXcgVWludDhBcnJheShkKTt2YXIgTj0wLEk9MDtmb3IoST0wO0k8ZDtJKyspSSY3PyhOPWJbST4+M10sTjw8PUkmNyk6Tj1iW0k+PjNdLE4mMTI4JiYoT1tJXT0xKTtjLnBpeGVscy5yZXN1bHRNYXNrPU8sZy5iaXRzZXQ9YixsKz1nLm51bUJ5dGVzfXJldHVybiBjLnB0cj1sLGMubWFzaz1nLCEwfSxyZWFkRGF0YU9uZVN3ZWVwOmZ1bmN0aW9uKHUsYyxsKXt2YXIgcD1jLnB0cixkPWMuaGVhZGVySW5mbyxtPWQubnVtRGltcyxfPWQud2lkdGgqZC5oZWlnaHQsZz1kLmltYWdlVHlwZSxiPWQubnVtVmFsaWRQaXhlbCppLmdldERhdGFUeXBlU2l6ZShnKSptLE8sVD1jLnBpeGVscy5yZXN1bHRNYXNrO2lmKGw9PT1VaW50OEFycmF5KU89bmV3IFVpbnQ4QXJyYXkodSxwLGIpO2Vsc2V7dmFyIEU9bmV3IEFycmF5QnVmZmVyKGIpLHc9bmV3IFVpbnQ4QXJyYXkoRSk7dy5zZXQobmV3IFVpbnQ4QXJyYXkodSxwLGIpKSxPPW5ldyBsKEUpfWlmKE8ubGVuZ3RoPT09XyptKWMucGl4ZWxzLnJlc3VsdFBpeGVscz1PO2Vsc2V7Yy5waXhlbHMucmVzdWx0UGl4ZWxzPW5ldyBsKF8qbSk7dmFyIEM9MCxOPTAsST0wLEw9MDtpZihtPjEpZm9yKEk9MDtJPG07SSsrKWZvcihMPUkqXyxOPTA7TjxfO04rKylUW05dJiYoYy5waXhlbHMucmVzdWx0UGl4ZWxzW0wrTl09T1tDKytdKTtlbHNlIGZvcihOPTA7TjxfO04rKylUW05dJiYoYy5waXhlbHMucmVzdWx0UGl4ZWxzW05dPU9bQysrXSl9cmV0dXJuIHArPWIsYy5wdHI9cCwhMH0scmVhZEh1ZmZtYW5UcmVlOmZ1bmN0aW9uKHUsYyl7dmFyIGw9dGhpcy5IVUZGTUFOX0xVVF9CSVRTX01BWCxwPW5ldyBEYXRhVmlldyh1LGMucHRyLDE2KTtjLnB0cis9MTY7dmFyIGQ9cC5nZXRJbnQzMigwLCEwKTtpZihkPDIpdGhyb3cidW5zdXBwb3J0ZWQgSHVmZm1hbiB2ZXJzaW9uIjt2YXIgbT1wLmdldEludDMyKDQsITApLF89cC5nZXRJbnQzMig4LCEwKSxnPXAuZ2V0SW50MzIoMTIsITApO2lmKF8+PWcpcmV0dXJuITE7dmFyIGI9bmV3IFVpbnQzMkFycmF5KGctXyk7aS5kZWNvZGVCaXRzKHUsYyxiKTt2YXIgTz1bXSxULEUsdyxDO2ZvcihUPV87VDxnO1QrKylFPVQtKFQ8bT8wOm0pLE9bRV09e2ZpcnN0OmJbVC1fXSxzZWNvbmQ6bnVsbH07dmFyIE49dS5ieXRlTGVuZ3RoLWMucHRyLEk9TWF0aC5jZWlsKE4vNCksTD1uZXcgQXJyYXlCdWZmZXIoSSo0KSx2PW5ldyBVaW50OEFycmF5KEwpO3Yuc2V0KG5ldyBVaW50OEFycmF5KHUsYy5wdHIsTikpO3ZhciBEPW5ldyBVaW50MzJBcnJheShMKSxVPTAsQSxTPTA7Zm9yKEE9RFswXSxUPV87VDxnO1QrKylFPVQtKFQ8bT8wOm0pLEM9T1tFXS5maXJzdCxDPjAmJihPW0VdLnNlY29uZD1BPDxVPj4+MzItQywzMi1VPj1DPyhVKz1DLFU9PT0zMiYmKFU9MCxTKyssQT1EW1NdKSk6KFUrPUMtMzIsUysrLEE9RFtTXSxPW0VdLnNlY29uZHw9QT4+PjMyLVUpKTt2YXIgUD0wLEY9MCxqPW5ldyBzO2ZvcihUPTA7VDxPLmxlbmd0aDtUKyspT1tUXSE9PXZvaWQgMCYmKFA9TWF0aC5tYXgoUCxPW1RdLmZpcnN0KSk7UD49bD9GPWw6Rj1QLFA+PTMwJiZjb25zb2xlLmxvZygiV0FSbmluZywgbGFyZ2UgTlVNIExVVCBCSVRTIElTICIrUCk7dmFyIEg9W10sayxLLFgsUixRLGZ0O2ZvcihUPV87VDxnO1QrKylpZihFPVQtKFQ8bT8wOm0pLEM9T1tFXS5maXJzdCxDPjApaWYoaz1bQyxFXSxDPD1GKWZvcihLPU9bRV0uc2Vjb25kPDxGLUMsWD0xPDxGLUMsdz0wO3c8WDt3KyspSFtLfHddPWs7ZWxzZSBmb3IoSz1PW0VdLnNlY29uZCxmdD1qLFI9Qy0xO1I+PTA7Ui0tKVE9Sz4+PlImMSxRPyhmdC5yaWdodHx8KGZ0LnJpZ2h0PW5ldyBzKSxmdD1mdC5yaWdodCk6KGZ0LmxlZnR8fChmdC5sZWZ0PW5ldyBzKSxmdD1mdC5sZWZ0KSxSPT09MCYmIWZ0LnZhbCYmKGZ0LnZhbD1rWzFdKTtyZXR1cm57ZGVjb2RlTHV0OkgsbnVtQml0c0xVVFFpY2s6RixudW1CaXRzTFVUOlAsdHJlZTpqLHN0dWZmZWREYXRhOkQsc3JjUHRyOlMsYml0UG9zOlV9fSxyZWFkSHVmZm1hbjpmdW5jdGlvbih1LGMsbCl7dmFyIHA9Yy5oZWFkZXJJbmZvLGQ9cC5udW1EaW1zLG09Yy5oZWFkZXJJbmZvLmhlaWdodCxfPWMuaGVhZGVySW5mby53aWR0aCxnPV8qbSxiPXRoaXMucmVhZEh1ZmZtYW5UcmVlKHUsYyksTz1iLmRlY29kZUx1dCxUPWIudHJlZSxFPWIuc3R1ZmZlZERhdGEsdz1iLnNyY1B0cixDPWIuYml0UG9zLE49Yi5udW1CaXRzTFVUUWljayxJPWIubnVtQml0c0xVVCxMPWMuaGVhZGVySW5mby5pbWFnZVR5cGU9PT0wPzEyODowLHYsRCxVLEE9Yy5waXhlbHMucmVzdWx0TWFzayxTLFAsRixqLEgsayxLLFg9MDtDPjAmJih3KyssQz0wKTt2YXIgUj1FW3ddLFE9Yy5lbmNvZGVNb2RlPT09MSxmdD1uZXcgbChnKmQpLHB0PWZ0LGd0O2ZvcihndD0wO2d0PHAubnVtRGltcztndCsrKXtpZihkPjEmJihwdD1uZXcgbChmdC5idWZmZXIsZypndCxnKSxYPTApLGMuaGVhZGVySW5mby5udW1WYWxpZFBpeGVsPT09XyptKWZvcihrPTAsaj0wO2o8bTtqKyspZm9yKEg9MDtIPF87SCsrLGsrKyl7aWYoRD0wLFM9Ujw8Qz4+PjMyLU4sUD1TLDMyLUM8TiYmKFN8PUVbdysxXT4+PjY0LUMtTixQPVMpLE9bUF0pRD1PW1BdWzFdLEMrPU9bUF1bMF07ZWxzZSBmb3IoUz1SPDxDPj4+MzItSSxQPVMsMzItQzxJJiYoU3w9RVt3KzFdPj4+NjQtQy1JLFA9Uyksdj1ULEs9MDtLPEk7SysrKWlmKEY9Uz4+PkktSy0xJjEsdj1GP3YucmlnaHQ6di5sZWZ0LCEodi5sZWZ0fHx2LnJpZ2h0KSl7RD12LnZhbCxDPUMrSysxO2JyZWFrfUM+PTMyJiYoQy09MzIsdysrLFI9RVt3XSksVT1ELUwsUT8oSD4wP1UrPVg6aj4wP1UrPXB0W2stX106VSs9WCxVJj0yNTUscHRba109VSxYPVUpOnB0W2tdPVV9ZWxzZSBmb3Ioaz0wLGo9MDtqPG07aisrKWZvcihIPTA7SDxfO0grKyxrKyspaWYoQVtrXSl7aWYoRD0wLFM9Ujw8Qz4+PjMyLU4sUD1TLDMyLUM8TiYmKFN8PUVbdysxXT4+PjY0LUMtTixQPVMpLE9bUF0pRD1PW1BdWzFdLEMrPU9bUF1bMF07ZWxzZSBmb3IoUz1SPDxDPj4+MzItSSxQPVMsMzItQzxJJiYoU3w9RVt3KzFdPj4+NjQtQy1JLFA9Uyksdj1ULEs9MDtLPEk7SysrKWlmKEY9Uz4+PkktSy0xJjEsdj1GP3YucmlnaHQ6di5sZWZ0LCEodi5sZWZ0fHx2LnJpZ2h0KSl7RD12LnZhbCxDPUMrSysxO2JyZWFrfUM+PTMyJiYoQy09MzIsdysrLFI9RVt3XSksVT1ELUwsUT8oSD4wJiZBW2stMV0/VSs9WDpqPjAmJkFbay1fXT9VKz1wdFtrLV9dOlUrPVgsVSY9MjU1LHB0W2tdPVUsWD1VKTpwdFtrXT1VfWMucHRyPWMucHRyKyh3KzEpKjQrKEM+MD80OjApfWMucGl4ZWxzLnJlc3VsdFBpeGVscz1mdH0sZGVjb2RlQml0czpmdW5jdGlvbih1LGMsbCxwLGQpe3t2YXIgbT1jLmhlYWRlckluZm8sXz1tLmZpbGVWZXJzaW9uLGc9MCxiPW5ldyBEYXRhVmlldyh1LGMucHRyLDUpLE89Yi5nZXRVaW50OCgwKTtnKys7dmFyIFQ9Tz4+NixFPVQ9PT0wPzQ6My1ULHc9KE8mMzIpPjAsQz1PJjMxLE49MDtpZihFPT09MSlOPWIuZ2V0VWludDgoZyksZysrO2Vsc2UgaWYoRT09PTIpTj1iLmdldFVpbnQxNihnLCEwKSxnKz0yO2Vsc2UgaWYoRT09PTQpTj1iLmdldFVpbnQzMihnLCEwKSxnKz00O2Vsc2UgdGhyb3ciSW52YWxpZCB2YWxpZCBwaXhlbCBjb3VudCB0eXBlIjt2YXIgST0yKm0ubWF4WkVycm9yLEwsdixELFUsQSxTLFAsRixqLEgsaz1tLm51bURpbXM+MT9tLm1heFZhbHVlc1tkXTptLnpNYXg7aWYodyl7Zm9yKGMuY291bnRlci5sdXQrKyxGPWIuZ2V0VWludDgoZyksaj1DLGcrKyxVPU1hdGguY2VpbCgoRi0xKSpDLzgpLEE9TWF0aC5jZWlsKFUvNCksdj1uZXcgQXJyYXlCdWZmZXIoQSo0KSxEPW5ldyBVaW50OEFycmF5KHYpLGMucHRyKz1nLEQuc2V0KG5ldyBVaW50OEFycmF5KHUsYy5wdHIsVSkpLFA9bmV3IFVpbnQzMkFycmF5KHYpLGMucHRyKz1VLEg9MDtGLTE+Pj5IOylIKys7VT1NYXRoLmNlaWwoTipILzgpLEE9TWF0aC5jZWlsKFUvNCksdj1uZXcgQXJyYXlCdWZmZXIoQSo0KSxEPW5ldyBVaW50OEFycmF5KHYpLEQuc2V0KG5ldyBVaW50OEFycmF5KHUsYy5wdHIsVSkpLEw9bmV3IFVpbnQzMkFycmF5KHYpLGMucHRyKz1VLF8+PTM/Uz1yLnVuc3R1ZmZMVVQyKFAsQyxGLTEscCxJLGspOlM9ci51bnN0dWZmTFVUKFAsQyxGLTEscCxJLGspLF8+PTM/ci51bnN0dWZmMihMLGwsSCxOLFMpOnIudW5zdHVmZihMLGwsSCxOLFMpfWVsc2UgYy5jb3VudGVyLmJpdHN0dWZmZXIrKyxIPUMsYy5wdHIrPWcsSD4wJiYoVT1NYXRoLmNlaWwoTipILzgpLEE9TWF0aC5jZWlsKFUvNCksdj1uZXcgQXJyYXlCdWZmZXIoQSo0KSxEPW5ldyBVaW50OEFycmF5KHYpLEQuc2V0KG5ldyBVaW50OEFycmF5KHUsYy5wdHIsVSkpLEw9bmV3IFVpbnQzMkFycmF5KHYpLGMucHRyKz1VLF8+PTM/cD09bnVsbD9yLm9yaWdpbmFsVW5zdHVmZjIoTCxsLEgsTik6ci51bnN0dWZmMihMLGwsSCxOLCExLHAsSSxrKTpwPT1udWxsP3Iub3JpZ2luYWxVbnN0dWZmKEwsbCxILE4pOnIudW5zdHVmZihMLGwsSCxOLCExLHAsSSxrKSl9fSxyZWFkVGlsZXM6ZnVuY3Rpb24odSxjLGwpe3ZhciBwPWMuaGVhZGVySW5mbyxkPXAud2lkdGgsbT1wLmhlaWdodCxfPXAubWljcm9CbG9ja1NpemUsZz1wLmltYWdlVHlwZSxiPWkuZ2V0RGF0YVR5cGVTaXplKGcpLE89TWF0aC5jZWlsKGQvXyksVD1NYXRoLmNlaWwobS9fKTtjLnBpeGVscy5udW1CbG9ja3NZPVQsYy5waXhlbHMubnVtQmxvY2tzWD1PLGMucGl4ZWxzLnB0cj0wO3ZhciBFPTAsdz0wLEM9MCxOPTAsST0wLEw9MCx2PTAsRD0wLFU9MCxBPTAsUz0wLFA9MCxGPTAsaj0wLEg9MCxrPTAsSyxYLFIsUSxmdCxwdCxndD1uZXcgbChfKl8pLGl0PW0lX3x8XyxOdD1kJV98fF8sT3QseHQsX3Q9cC5udW1EaW1zLGR0LFZ0PWMucGl4ZWxzLnJlc3VsdE1hc2ssenQ9Yy5waXhlbHMucmVzdWx0UGl4ZWxzO2ZvcihDPTA7QzxUO0MrKylmb3IoST1DIT09VC0xP186aXQsTj0wO048TztOKyspZm9yKEw9TiE9PU8tMT9fOk50LFM9QypkKl8rTipfLFA9ZC1MLGR0PTA7ZHQ8X3Q7ZHQrKyl7aWYoX3Q+MSYmKHp0PW5ldyBsKGMucGl4ZWxzLnJlc3VsdFBpeGVscy5idWZmZXIsZCptKmR0KmIsZCptKSksdj11LmJ5dGVMZW5ndGgtYy5wdHIsSz1uZXcgRGF0YVZpZXcodSxjLnB0cixNYXRoLm1pbigxMCx2KSksWD17fSxrPTAsRD1LLmdldFVpbnQ4KDApLGsrKyxVPUQ+PjYmMjU1LEE9RD4+MiYxNSxBIT09KE4qXz4+MyYxNSkpdGhyb3ciaW50ZWdyaXR5IGlzc3VlIjtpZihwdD1EJjMscHQ+Myl0aHJvdyBjLnB0cis9aywiSW52YWxpZCBibG9jayBlbmNvZGluZyAoIitwdCsiKSI7aWYocHQ9PT0yKXtjLmNvdW50ZXIuY29uc3RhbnQrKyxjLnB0cis9aztjb250aW51ZX1lbHNlIGlmKHB0PT09MCl7aWYoYy5jb3VudGVyLnVuY29tcHJlc3NlZCsrLGMucHRyKz1rLEY9SSpMKmIsaj11LmJ5dGVMZW5ndGgtYy5wdHIsRj1GPGo/RjpqLFI9bmV3IEFycmF5QnVmZmVyKEYlYj09PTA/RjpGK2ItRiViKSxRPW5ldyBVaW50OEFycmF5KFIpLFEuc2V0KG5ldyBVaW50OEFycmF5KHUsYy5wdHIsRikpLGZ0PW5ldyBsKFIpLEg9MCxWdClmb3IoRT0wO0U8STtFKyspe2Zvcih3PTA7dzxMO3crKylWdFtTXSYmKHp0W1NdPWZ0W0grK10pLFMrKztTKz1QfWVsc2UgZm9yKEU9MDtFPEk7RSsrKXtmb3Iodz0wO3c8TDt3KyspenRbUysrXT1mdFtIKytdO1MrPVB9Yy5wdHIrPUgqYn1lbHNlIGlmKE90PWkuZ2V0RGF0YVR5cGVVc2VkKGcsVSkseHQ9aS5nZXRPbmVQaXhlbChYLGssT3QsSyksays9aS5nZXREYXRhVHlwZVNpemUoT3QpLHB0PT09MylpZihjLnB0cis9ayxjLmNvdW50ZXIuY29uc3RhbnRvZmZzZXQrKyxWdClmb3IoRT0wO0U8STtFKyspe2Zvcih3PTA7dzxMO3crKylWdFtTXSYmKHp0W1NdPXh0KSxTKys7Uys9UH1lbHNlIGZvcihFPTA7RTxJO0UrKyl7Zm9yKHc9MDt3PEw7dysrKXp0W1MrK109eHQ7Uys9UH1lbHNlIGlmKGMucHRyKz1rLGkuZGVjb2RlQml0cyh1LGMsZ3QseHQsZHQpLGs9MCxWdClmb3IoRT0wO0U8STtFKyspe2Zvcih3PTA7dzxMO3crKylWdFtTXSYmKHp0W1NdPWd0W2srK10pLFMrKztTKz1QfWVsc2UgZm9yKEU9MDtFPEk7RSsrKXtmb3Iodz0wO3c8TDt3KyspenRbUysrXT1ndFtrKytdO1MrPVB9fX0sZm9ybWF0RmlsZUluZm86ZnVuY3Rpb24odSl7cmV0dXJue2ZpbGVJZGVudGlmaWVyU3RyaW5nOnUuaGVhZGVySW5mby5maWxlSWRlbnRpZmllclN0cmluZyxmaWxlVmVyc2lvbjp1LmhlYWRlckluZm8uZmlsZVZlcnNpb24saW1hZ2VUeXBlOnUuaGVhZGVySW5mby5pbWFnZVR5cGUsaGVpZ2h0OnUuaGVhZGVySW5mby5oZWlnaHQsd2lkdGg6dS5oZWFkZXJJbmZvLndpZHRoLG51bVZhbGlkUGl4ZWw6dS5oZWFkZXJJbmZvLm51bVZhbGlkUGl4ZWwsbWljcm9CbG9ja1NpemU6dS5oZWFkZXJJbmZvLm1pY3JvQmxvY2tTaXplLGJsb2JTaXplOnUuaGVhZGVySW5mby5ibG9iU2l6ZSxtYXhaRXJyb3I6dS5oZWFkZXJJbmZvLm1heFpFcnJvcixwaXhlbFR5cGU6aS5nZXRQaXhlbFR5cGUodS5oZWFkZXJJbmZvLmltYWdlVHlwZSksZW9mT2Zmc2V0OnUuZW9mT2Zmc2V0LG1hc2s6dS5tYXNrP3tudW1CeXRlczp1Lm1hc2subnVtQnl0ZXN9Om51bGwscGl4ZWxzOntudW1CbG9ja3NYOnUucGl4ZWxzLm51bUJsb2Nrc1gsbnVtQmxvY2tzWTp1LnBpeGVscy5udW1CbG9ja3NZLG1heFZhbHVlOnUuaGVhZGVySW5mby56TWF4LG1pblZhbHVlOnUuaGVhZGVySW5mby56TWluLG5vRGF0YVZhbHVlOnUubm9EYXRhVmFsdWV9fX0sY29uc3RydWN0Q29uc3RhbnRTdXJmYWNlOmZ1bmN0aW9uKHUpe3ZhciBjPXUuaGVhZGVySW5mby56TWF4LGw9dS5oZWFkZXJJbmZvLm51bURpbXMscD11LmhlYWRlckluZm8uaGVpZ2h0KnUuaGVhZGVySW5mby53aWR0aCxkPXAqbCxtPTAsXz0wLGc9MCxiPXUucGl4ZWxzLnJlc3VsdE1hc2s7aWYoYilpZihsPjEpZm9yKG09MDttPGw7bSsrKWZvcihnPW0qcCxfPTA7XzxwO18rKyliW19dJiYodS5waXhlbHMucmVzdWx0UGl4ZWxzW2crX109Yyk7ZWxzZSBmb3IoXz0wO188cDtfKyspYltfXSYmKHUucGl4ZWxzLnJlc3VsdFBpeGVsc1tfXT1jKTtlbHNlIGlmKHUucGl4ZWxzLnJlc3VsdFBpeGVscy5maWxsKXUucGl4ZWxzLnJlc3VsdFBpeGVscy5maWxsKGMpO2Vsc2UgZm9yKF89MDtfPGQ7XysrKXUucGl4ZWxzLnJlc3VsdFBpeGVsc1tfXT1jfSxnZXREYXRhVHlwZUFycmF5OmZ1bmN0aW9uKHUpe3ZhciBjO3N3aXRjaCh1KXtjYXNlIDA6Yz1JbnQ4QXJyYXk7YnJlYWs7Y2FzZSAxOmM9VWludDhBcnJheTticmVhaztjYXNlIDI6Yz1JbnQxNkFycmF5O2JyZWFrO2Nhc2UgMzpjPVVpbnQxNkFycmF5O2JyZWFrO2Nhc2UgNDpjPUludDMyQXJyYXk7YnJlYWs7Y2FzZSA1OmM9VWludDMyQXJyYXk7YnJlYWs7Y2FzZSA2OmM9RmxvYXQzMkFycmF5O2JyZWFrO2Nhc2UgNzpjPUZsb2F0NjRBcnJheTticmVhaztkZWZhdWx0OmM9RmxvYXQzMkFycmF5fXJldHVybiBjfSxnZXRQaXhlbFR5cGU6ZnVuY3Rpb24odSl7dmFyIGM7c3dpdGNoKHUpe2Nhc2UgMDpjPSJTOCI7YnJlYWs7Y2FzZSAxOmM9IlU4IjticmVhaztjYXNlIDI6Yz0iUzE2IjticmVhaztjYXNlIDM6Yz0iVTE2IjticmVhaztjYXNlIDQ6Yz0iUzMyIjticmVhaztjYXNlIDU6Yz0iVTMyIjticmVhaztjYXNlIDY6Yz0iRjMyIjticmVhaztjYXNlIDc6Yz0iRjY0IjticmVhaztkZWZhdWx0OmM9IkYzMiJ9cmV0dXJuIGN9LGlzVmFsaWRQaXhlbFZhbHVlOmZ1bmN0aW9uKHUsYyl7aWYoYz09bnVsbClyZXR1cm4hMTt2YXIgbDtzd2l0Y2godSl7Y2FzZSAwOmw9Yz49LTEyOCYmYzw9MTI3O2JyZWFrO2Nhc2UgMTpsPWM+PTAmJmM8PTI1NTticmVhaztjYXNlIDI6bD1jPj0tMzI3NjgmJmM8PTMyNzY3O2JyZWFrO2Nhc2UgMzpsPWM+PTAmJmM8PTY1NTM2O2JyZWFrO2Nhc2UgNDpsPWM+PS0yMTQ3NDgzNjQ4JiZjPD0yMTQ3NDgzNjQ3O2JyZWFrO2Nhc2UgNTpsPWM+PTAmJmM8PTQyOTQ5NjcyOTY7YnJlYWs7Y2FzZSA2Omw9Yz49LTM0MDI3OTk5Mzg3OTAxNDg0ZTIyJiZjPD0zNDAyNzk5OTM4NzkwMTQ4NGUyMjticmVhaztjYXNlIDc6bD1jPj01ZS0zMjQmJmM8PTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MjticmVhaztkZWZhdWx0Omw9ITF9cmV0dXJuIGx9LGdldERhdGFUeXBlU2l6ZTpmdW5jdGlvbih1KXt2YXIgYz0wO3N3aXRjaCh1KXtjYXNlIDA6Y2FzZSAxOmM9MTticmVhaztjYXNlIDI6Y2FzZSAzOmM9MjticmVhaztjYXNlIDQ6Y2FzZSA1OmNhc2UgNjpjPTQ7YnJlYWs7Y2FzZSA3OmM9ODticmVhaztkZWZhdWx0OmM9dX1yZXR1cm4gY30sZ2V0RGF0YVR5cGVVc2VkOmZ1bmN0aW9uKHUsYyl7dmFyIGw9dTtzd2l0Y2godSl7Y2FzZSAyOmNhc2UgNDpsPXUtYzticmVhaztjYXNlIDM6Y2FzZSA1Omw9dS0yKmM7YnJlYWs7Y2FzZSA2OmM9PT0wP2w9dTpjPT09MT9sPTI6bD0xO2JyZWFrO2Nhc2UgNzpjPT09MD9sPXU6bD11LTIqYysxO2JyZWFrO2RlZmF1bHQ6bD11O2JyZWFrfXJldHVybiBsfSxnZXRPbmVQaXhlbDpmdW5jdGlvbih1LGMsbCxwKXt2YXIgZD0wO3N3aXRjaChsKXtjYXNlIDA6ZD1wLmdldEludDgoYyk7YnJlYWs7Y2FzZSAxOmQ9cC5nZXRVaW50OChjKTticmVhaztjYXNlIDI6ZD1wLmdldEludDE2KGMsITApO2JyZWFrO2Nhc2UgMzpkPXAuZ2V0VWludDE2KGMsITApO2JyZWFrO2Nhc2UgNDpkPXAuZ2V0SW50MzIoYywhMCk7YnJlYWs7Y2FzZSA1OmQ9cC5nZXRVSW50MzIoYywhMCk7YnJlYWs7Y2FzZSA2OmQ9cC5nZXRGbG9hdDMyKGMsITApO2JyZWFrO2Nhc2UgNzpkPXAuZ2V0RmxvYXQ2NChjLCEwKTticmVhaztkZWZhdWx0OnRocm93InRoZSBkZWNvZGVyIGRvZXMgbm90IHVuZGVyc3RhbmQgdGhpcyBwaXhlbCB0eXBlIn1yZXR1cm4gZH19LHM9ZnVuY3Rpb24odSxjLGwpe3RoaXMudmFsPXUsdGhpcy5sZWZ0PWMsdGhpcy5yaWdodD1sfSxmPXtkZWNvZGU6ZnVuY3Rpb24odSxjKXtjPWN8fHt9O3ZhciBsPWMubm9EYXRhVmFsdWUscD0wLGQ9e307aWYoZC5wdHI9Yy5pbnB1dE9mZnNldHx8MCxkLnBpeGVscz17fSwhIWkucmVhZEhlYWRlckluZm8odSxkKSl7dmFyIG09ZC5oZWFkZXJJbmZvLF89bS5maWxlVmVyc2lvbixnPWkuZ2V0RGF0YVR5cGVBcnJheShtLmltYWdlVHlwZSk7aS5yZWFkTWFzayh1LGQpLG0ubnVtVmFsaWRQaXhlbCE9PW0ud2lkdGgqbS5oZWlnaHQmJiFkLnBpeGVscy5yZXN1bHRNYXNrJiYoZC5waXhlbHMucmVzdWx0TWFzaz1jLm1hc2tEYXRhKTt2YXIgYj1tLndpZHRoKm0uaGVpZ2h0O2lmKGQucGl4ZWxzLnJlc3VsdFBpeGVscz1uZXcgZyhiKm0ubnVtRGltcyksZC5jb3VudGVyPXtvbmVzd2VlcDowLHVuY29tcHJlc3NlZDowLGx1dDowLGJpdHN0dWZmZXI6MCxjb25zdGFudDowLGNvbnN0YW50b2Zmc2V0OjB9LG0ubnVtVmFsaWRQaXhlbCE9PTApaWYobS56TWF4PT09bS56TWluKWkuY29uc3RydWN0Q29uc3RhbnRTdXJmYWNlKGQpO2Vsc2UgaWYoXz49NCYmaS5jaGVja01pbk1heFJhbmdlcyh1LGQpKWkuY29uc3RydWN0Q29uc3RhbnRTdXJmYWNlKGQpO2Vsc2V7dmFyIE89bmV3IERhdGFWaWV3KHUsZC5wdHIsMiksVD1PLmdldFVpbnQ4KDApO2lmKGQucHRyKyssVClpLnJlYWREYXRhT25lU3dlZXAodSxkLGcpO2Vsc2UgaWYoXz4xJiZtLmltYWdlVHlwZTw9MSYmTWF0aC5hYnMobS5tYXhaRXJyb3ItLjUpPDFlLTUpe3ZhciBFPU8uZ2V0VWludDgoMSk7aWYoZC5wdHIrKyxkLmVuY29kZU1vZGU9RSxFPjJ8fF88NCYmRT4xKXRocm93IkludmFsaWQgSHVmZm1hbiBmbGFnICIrRTtFP2kucmVhZEh1ZmZtYW4odSxkLGcpOmkucmVhZFRpbGVzKHUsZCxnKX1lbHNlIGkucmVhZFRpbGVzKHUsZCxnKX1kLmVvZk9mZnNldD1kLnB0cjt2YXIgdztjLmlucHV0T2Zmc2V0Pyh3PWQuaGVhZGVySW5mby5ibG9iU2l6ZStjLmlucHV0T2Zmc2V0LWQucHRyLE1hdGguYWJzKHcpPj0xJiYoZC5lb2ZPZmZzZXQ9Yy5pbnB1dE9mZnNldCtkLmhlYWRlckluZm8uYmxvYlNpemUpKToodz1kLmhlYWRlckluZm8uYmxvYlNpemUtZC5wdHIsTWF0aC5hYnModyk+PTEmJihkLmVvZk9mZnNldD1kLmhlYWRlckluZm8uYmxvYlNpemUpKTt2YXIgQz17d2lkdGg6bS53aWR0aCxoZWlnaHQ6bS5oZWlnaHQscGl4ZWxEYXRhOmQucGl4ZWxzLnJlc3VsdFBpeGVscyxtaW5WYWx1ZTptLnpNaW4sbWF4VmFsdWU6bS56TWF4LHZhbGlkUGl4ZWxDb3VudDptLm51bVZhbGlkUGl4ZWwsZGltQ291bnQ6bS5udW1EaW1zLGRpbVN0YXRzOnttaW5WYWx1ZXM6bS5taW5WYWx1ZXMsbWF4VmFsdWVzOm0ubWF4VmFsdWVzfSxtYXNrRGF0YTpkLnBpeGVscy5yZXN1bHRNYXNrfTtpZihkLnBpeGVscy5yZXN1bHRNYXNrJiZpLmlzVmFsaWRQaXhlbFZhbHVlKG0uaW1hZ2VUeXBlLGwpKXt2YXIgTj1kLnBpeGVscy5yZXN1bHRNYXNrO2ZvcihwPTA7cDxiO3ArKylOW3BdfHwoQy5waXhlbERhdGFbcF09bCk7Qy5ub0RhdGFWYWx1ZT1sfXJldHVybiBkLm5vRGF0YVZhbHVlPWwsYy5yZXR1cm5GaWxlSW5mbyYmKEMuZmlsZUluZm89aS5mb3JtYXRGaWxlSW5mbyhkKSksQ319LGdldEJhbmRDb3VudDpmdW5jdGlvbih1KXt2YXIgYz0wLGw9MCxwPXt9O2ZvcihwLnB0cj0wLHAucGl4ZWxzPXt9O2w8dS5ieXRlTGVuZ3RoLTU4OylpLnJlYWRIZWFkZXJJbmZvKHUscCksbCs9cC5oZWFkZXJJbmZvLmJsb2JTaXplLGMrKyxwLnB0cj1sO3JldHVybiBjfX07cmV0dXJuIGZ9KCksbj1mdW5jdGlvbigpe3ZhciByPW5ldyBBcnJheUJ1ZmZlcig0KSxpPW5ldyBVaW50OEFycmF5KHIpLHM9bmV3IFVpbnQzMkFycmF5KHIpO3JldHVybiBzWzBdPTEsaVswXT09PTF9KCksbz17ZGVjb2RlOmZ1bmN0aW9uKHIsaSl7aWYoIW4pdGhyb3ciQmlnIGVuZGlhbiBzeXN0ZW0gaXMgbm90IHN1cHBvcnRlZC4iO2k9aXx8e307dmFyIHM9aS5pbnB1dE9mZnNldHx8MCxmPW5ldyBVaW50OEFycmF5KHIscywxMCksdT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZiksYyxsO2lmKHUudHJpbSgpPT09IkNudFpJbWFnZSIpYz10LGw9MTtlbHNlIGlmKHUuc3Vic3RyaW5nKDAsNSk9PT0iTGVyYzIiKWM9ZSxsPTI7ZWxzZSB0aHJvdyJVbmV4cGVjdGVkIGZpbGUgaWRlbnRpZmllciBzdHJpbmc6ICIrdTtmb3IodmFyIHA9MCxkPXIuYnl0ZUxlbmd0aC0xMCxtLF89W10sZyxiLE89e3dpZHRoOjAsaGVpZ2h0OjAscGl4ZWxzOltdLHBpeGVsVHlwZTppLnBpeGVsVHlwZSxtYXNrOm51bGwsc3RhdGlzdGljczpbXX07czxkOyl7dmFyIFQ9Yy5kZWNvZGUocix7aW5wdXRPZmZzZXQ6cyxlbmNvZGVkTWFza0RhdGE6bSxtYXNrRGF0YTpiLHJldHVybk1hc2s6cD09PTAscmV0dXJuRW5jb2RlZE1hc2s6cD09PTAscmV0dXJuRmlsZUluZm86ITAscGl4ZWxUeXBlOmkucGl4ZWxUeXBlfHxudWxsLG5vRGF0YVZhbHVlOmkubm9EYXRhVmFsdWV8fG51bGx9KTtzPVQuZmlsZUluZm8uZW9mT2Zmc2V0LHA9PT0wJiYobT1ULmVuY29kZWRNYXNrRGF0YSxiPVQubWFza0RhdGEsTy53aWR0aD1ULndpZHRoLE8uaGVpZ2h0PVQuaGVpZ2h0LE8uZGltQ291bnQ9VC5kaW1Db3VudHx8MSxPLnBpeGVsVHlwZT1ULnBpeGVsVHlwZXx8VC5maWxlSW5mby5waXhlbFR5cGUsTy5tYXNrPVQubWFza0RhdGEpLGw+MSYmVC5maWxlSW5mby5tYXNrJiZULmZpbGVJbmZvLm1hc2subnVtQnl0ZXM+MCYmXy5wdXNoKFQubWFza0RhdGEpLHArKyxPLnBpeGVscy5wdXNoKFQucGl4ZWxEYXRhKSxPLnN0YXRpc3RpY3MucHVzaCh7bWluVmFsdWU6VC5taW5WYWx1ZSxtYXhWYWx1ZTpULm1heFZhbHVlLG5vRGF0YVZhbHVlOlQubm9EYXRhVmFsdWUsZGltU3RhdHM6VC5kaW1TdGF0c30pfXZhciBFLHcsQztpZihsPjEmJl8ubGVuZ3RoPjEpe2ZvcihDPU8ud2lkdGgqTy5oZWlnaHQsTy5iYW5kTWFza3M9XyxiPW5ldyBVaW50OEFycmF5KEMpLGIuc2V0KF9bMF0pLEU9MTtFPF8ubGVuZ3RoO0UrKylmb3IoZz1fW0VdLHc9MDt3PEM7dysrKWJbd109Ylt3XSZnW3ddO08ubWFza0RhdGE9Yn1yZXR1cm4gT319O3R5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTp0eXBlb2YgJGQ8InUiJiYkZC5leHBvcnRzPyRkLmV4cG9ydHM9bzp0aGlzLkxlcmM9b30pKCl9KTt2YXIgb2c9e307bWUob2cse2RlZmF1bHQ6KCk9PnVVfSk7ZnVuY3Rpb24gZlUodCxlKXtpZih0LmVuY29kaW5nPT09SFIuTEVSQyl7bGV0IHI7dHJ5e3I9WVIuZGVmYXVsdC5kZWNvZGUodC5oZWlnaHRtYXApfWNhdGNoKHMpe3Rocm93IG5ldyBnZShzKX1pZihyLnN0YXRpc3RpY3NbMF0ubWluVmFsdWU9PT1OdW1iZXIuTUFYX1ZBTFVFKXRocm93IG5ldyBnZSgiSW52YWxpZCB0aWxlIGRhdGEiKTt0LmhlaWdodG1hcD1yLnBpeGVsc1swXSx0LndpZHRoPXIud2lkdGgsdC5oZWlnaHQ9ci5oZWlnaHR9dC5lbGxpcHNvaWQ9JC5jbG9uZSh0LmVsbGlwc29pZCksdC5yZWN0YW5nbGU9UHQuY2xvbmUodC5yZWN0YW5nbGUpO2xldCBuPUtSLmNvbXB1dGVWZXJ0aWNlcyh0KSxvPW4udmVydGljZXM7cmV0dXJuIGUucHVzaChvLmJ1ZmZlcikse3ZlcnRpY2VzOm8uYnVmZmVyLG51bWJlck9mQXR0cmlidXRlczpuLmVuY29kaW5nLnN0cmlkZSxtaW5pbXVtSGVpZ2h0Om4ubWluaW11bUhlaWdodCxtYXhpbXVtSGVpZ2h0Om4ubWF4aW11bUhlaWdodCxncmlkV2lkdGg6dC53aWR0aCxncmlkSGVpZ2h0OnQuaGVpZ2h0LGJvdW5kaW5nU3BoZXJlM0Q6bi5ib3VuZGluZ1NwaGVyZTNELG9yaWVudGVkQm91bmRpbmdCb3g6bi5vcmllbnRlZEJvdW5kaW5nQm94LG9jY2x1ZGVlUG9pbnRJblNjYWxlZFNwYWNlOm4ub2NjbHVkZWVQb2ludEluU2NhbGVkU3BhY2UsZW5jb2Rpbmc6bi5lbmNvZGluZyx3ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aDpuLndlc3RJbmRpY2VzU291dGhUb05vcnRoLHNvdXRoSW5kaWNlc0Vhc3RUb1dlc3Q6bi5zb3V0aEluZGljZXNFYXN0VG9XZXN0LGVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoOm4uZWFzdEluZGljZXNOb3J0aFRvU291dGgsbm9ydGhJbmRpY2VzV2VzdFRvRWFzdDpuLm5vcnRoSW5kaWNlc1dlc3RUb0Vhc3R9fXZhciBZUix1VSxyZz1aKCgpPT57WnQoKTtxUigpO1dSKCk7QW4oKTtKcigpO1lSPW1vKFhSKCksMSk7c28oKTt1VT1RZShmVSl9KTtmdW5jdGlvbiBHbygpe0IudGhyb3dJbnN0YW50aWF0aW9uRXJyb3IoKX1mdW5jdGlvbiBKUih0LGUpe2xldCBuPW5ldyBBcnJheShlKSxvPW5ldyBBcnJheSh0KSxyPW5ldyBBcnJheShlKSxpPW5ldyBBcnJheSh0KSxzO2ZvcihzPTA7czx0OysrcylpW3NdPXMsb1tzXT10KmUtMS1zO2ZvcihzPTA7czxlOysrcylyW3NdPShzKzEpKnQtMSxuW3NdPShlLXMtMSkqdDtyZXR1cm57d2VzdEluZGljZXNTb3V0aFRvTm9ydGg6bixzb3V0aEluZGljZXNFYXN0VG9XZXN0Om8sZWFzdEluZGljZXNOb3J0aFRvU291dGg6cixub3J0aEluZGljZXNXZXN0VG9FYXN0Oml9fWZ1bmN0aW9uIHQyKHQsZSxuLG8pe2xldCByPTA7Zm9yKGxldCBpPTA7aTxlLTE7KytpKXtmb3IobGV0IHM9MDtzPHQtMTsrK3Mpe2xldCBmPXIsdT1mK3QsYz11KzEsbD1mKzE7bltvKytdPWYsbltvKytdPXUsbltvKytdPWwsbltvKytdPWwsbltvKytdPXUsbltvKytdPWMsKytyfSsrcn19ZnVuY3Rpb24gWmQodCxlLG4sbyl7bGV0IHI9dFswXSxpPXQubGVuZ3RoO2ZvcihsZXQgcz0xO3M8aTsrK3Mpe2xldCBmPXRbc107bltvKytdPXIsbltvKytdPWYsbltvKytdPWUsbltvKytdPWUsbltvKytdPWYsbltvKytdPWUrMSxyPWYsKytlfXJldHVybiBvfXZhciAkUixaUixRUixlMixuMj1aKCgpPT57YXQoKTtIdCgpOyRlKCk7V3QoKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhHby5wcm90b3R5cGUse2Vycm9yRXZlbnQ6e2dldDpCLnRocm93SW5zdGFudGlhdGlvbkVycm9yfSxjcmVkaXQ6e2dldDpCLnRocm93SW5zdGFudGlhdGlvbkVycm9yfSx0aWxpbmdTY2hlbWU6e2dldDpCLnRocm93SW5zdGFudGlhdGlvbkVycm9yfSxoYXNXYXRlck1hc2s6e2dldDpCLnRocm93SW5zdGFudGlhdGlvbkVycm9yfSxoYXNWZXJ0ZXhOb3JtYWxzOntnZXQ6Qi50aHJvd0luc3RhbnRpYXRpb25FcnJvcn0sYXZhaWxhYmlsaXR5OntnZXQ6Qi50aHJvd0luc3RhbnRpYXRpb25FcnJvcn19KTskUj1bXTtHby5nZXRSZWd1bGFyR3JpZEluZGljZXM9ZnVuY3Rpb24odCxlKXtpZih0KmU+PU0uRk9VUl9HSUdBQllURVMpdGhyb3cgbmV3IEIoIlRoZSB0b3RhbCBudW1iZXIgb2YgdmVydGljZXMgKHdpZHRoICogaGVpZ2h0KSBtdXN0IGJlIGxlc3MgdGhhbiA0LDI5NCw5NjcsMjk2LiIpO2xldCBuPSRSW3RdO2gobil8fCgkUlt0XT1uPVtdKTtsZXQgbz1uW2VdO3JldHVybiBoKG8pfHwodCplPE0uU0lYVFlfRk9VUl9LSUxPQllURVM/bz1uW2VdPW5ldyBVaW50MTZBcnJheSgodC0xKSooZS0xKSo2KTpvPW5bZV09bmV3IFVpbnQzMkFycmF5KCh0LTEpKihlLTEpKjYpLHQyKHQsZSxvLDApKSxvfTtaUj1bXTtHby5nZXRSZWd1bGFyR3JpZEluZGljZXNBbmRFZGdlSW5kaWNlcz1mdW5jdGlvbih0LGUpe2lmKHQqZT49TS5GT1VSX0dJR0FCWVRFUyl0aHJvdyBuZXcgQigiVGhlIHRvdGFsIG51bWJlciBvZiB2ZXJ0aWNlcyAod2lkdGggKiBoZWlnaHQpIG11c3QgYmUgbGVzcyB0aGFuIDQsMjk0LDk2NywyOTYuIik7bGV0IG49WlJbdF07aChuKXx8KFpSW3RdPW49W10pO2xldCBvPW5bZV07aWYoIWgobykpe2xldCByPUdvLmdldFJlZ3VsYXJHcmlkSW5kaWNlcyh0LGUpLGk9SlIodCxlKSxzPWkud2VzdEluZGljZXNTb3V0aFRvTm9ydGgsZj1pLnNvdXRoSW5kaWNlc0Vhc3RUb1dlc3QsdT1pLmVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoLGM9aS5ub3J0aEluZGljZXNXZXN0VG9FYXN0O289bltlXT17aW5kaWNlczpyLHdlc3RJbmRpY2VzU291dGhUb05vcnRoOnMsc291dGhJbmRpY2VzRWFzdFRvV2VzdDpmLGVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoOnUsbm9ydGhJbmRpY2VzV2VzdFRvRWFzdDpjfX1yZXR1cm4gb307UVI9W107R28uZ2V0UmVndWxhckdyaWRBbmRTa2lydEluZGljZXNBbmRFZGdlSW5kaWNlcz1mdW5jdGlvbih0LGUpe2lmKHQqZT49TS5GT1VSX0dJR0FCWVRFUyl0aHJvdyBuZXcgQigiVGhlIHRvdGFsIG51bWJlciBvZiB2ZXJ0aWNlcyAod2lkdGggKiBoZWlnaHQpIG11c3QgYmUgbGVzcyB0aGFuIDQsMjk0LDk2NywyOTYuIik7bGV0IG49UVJbdF07aChuKXx8KFFSW3RdPW49W10pO2xldCBvPW5bZV07aWYoIWgobykpe2xldCByPXQqZSxpPSh0LTEpKihlLTEpKjYscz10KjIrZSoyLGY9TWF0aC5tYXgoMCxzLTQpKjYsdT1yK3MsYz1pK2YsbD1KUih0LGUpLHA9bC53ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aCxkPWwuc291dGhJbmRpY2VzRWFzdFRvV2VzdCxtPWwuZWFzdEluZGljZXNOb3J0aFRvU291dGgsXz1sLm5vcnRoSW5kaWNlc1dlc3RUb0Vhc3QsZz1EdC5jcmVhdGVUeXBlZEFycmF5KHUsYyk7dDIodCxlLGcsMCksR28uYWRkU2tpcnRJbmRpY2VzKHAsZCxtLF8scixnLGkpLG89bltlXT17aW5kaWNlczpnLHdlc3RJbmRpY2VzU291dGhUb05vcnRoOnAsc291dGhJbmRpY2VzRWFzdFRvV2VzdDpkLGVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoOm0sbm9ydGhJbmRpY2VzV2VzdFRvRWFzdDpfLGluZGV4Q291bnRXaXRob3V0U2tpcnRzOml9fXJldHVybiBvfTtHby5hZGRTa2lydEluZGljZXM9ZnVuY3Rpb24odCxlLG4sbyxyLGkscyl7bGV0IGY9cjtzPVpkKHQsZixpLHMpLGYrPXQubGVuZ3RoLHM9WmQoZSxmLGkscyksZis9ZS5sZW5ndGgscz1aZChuLGYsaSxzKSxmKz1uLmxlbmd0aCxaZChvLGYsaSxzKX07R28uaGVpZ2h0bWFwVGVycmFpblF1YWxpdHk9LjI1O0dvLmdldEVzdGltYXRlZExldmVsWmVyb0dlb21ldHJpY0Vycm9yRm9yQUhlaWdodG1hcD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQubWF4aW11bVJhZGl1cyoyKk1hdGguUEkqR28uaGVpZ2h0bWFwVGVycmFpblF1YWxpdHkvKGUqbil9O0dvLnByb3RvdHlwZS5yZXF1ZXN0VGlsZUdlb21ldHJ5PUIudGhyb3dJbnN0YW50aWF0aW9uRXJyb3I7R28ucHJvdG90eXBlLmdldExldmVsTWF4aW11bUdlb21ldHJpY0Vycm9yPUIudGhyb3dJbnN0YW50aWF0aW9uRXJyb3I7R28ucHJvdG90eXBlLmdldFRpbGVEYXRhQXZhaWxhYmxlPUIudGhyb3dJbnN0YW50aWF0aW9uRXJyb3I7R28ucHJvdG90eXBlLmxvYWRUaWxlRGF0YUF2YWlsYWJpbGl0eT1CLnRocm93SW5zdGFudGlhdGlvbkVycm9yO2UyPUdvfSk7dmFyIHNnPXt9O21lKHNnLHtkZWZhdWx0OigpPT5tVX0pO2Z1bmN0aW9uIGRVKHQsZSl7bGV0IG49dC5xdWFudGl6ZWRWZXJ0aWNlcyxvPW4ubGVuZ3RoLzMscj10Lm9jdEVuY29kZWROb3JtYWxzLGk9dC53ZXN0SW5kaWNlcy5sZW5ndGgrdC5lYXN0SW5kaWNlcy5sZW5ndGgrdC5zb3V0aEluZGljZXMubGVuZ3RoK3Qubm9ydGhJbmRpY2VzLmxlbmd0aCxzPXQuaW5jbHVkZVdlYk1lcmNhdG9yVCxmPXQuZXhhZ2dlcmF0aW9uLHU9dC5leGFnZ2VyYXRpb25SZWxhdGl2ZUhlaWdodCxsPWYhPT0xLHA9UHQuY2xvbmUodC5yZWN0YW5nbGUpLGQ9cC53ZXN0LG09cC5zb3V0aCxfPXAuZWFzdCxnPXAubm9ydGgsYj0kLmNsb25lKHQuZWxsaXBzb2lkKSxPPXQubWluaW11bUhlaWdodCxUPXQubWF4aW11bUhlaWdodCxFPXQucmVsYXRpdmVUb0NlbnRlcix3PWdyLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKEUsYiksQz1zdC5pbnZlcnNlVHJhbnNmb3JtYXRpb24odyxuZXcgc3QpLE4sSTtzJiYoTj1lby5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKG0pLEk9MS8oZW8uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShnKS1OKSk7bGV0IEw9bi5zdWJhcnJheSgwLG8pLHY9bi5zdWJhcnJheShvLDIqbyksRD1uLnN1YmFycmF5KG8qMiwzKm8pLFU9aChyKSxBPW5ldyBBcnJheShvKSxTPW5ldyBBcnJheShvKSxQPW5ldyBBcnJheShvKSxGPXM/bmV3IEFycmF5KG8pOltdLGo9bD9uZXcgQXJyYXkobyk6W10sSD1sVTtILng9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLEgueT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksSC56PU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtsZXQgaz1wVTtrLng9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGsueT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksay56PU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtsZXQgSz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksWD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksUj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksUT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7Zm9yKGxldCAkdD0wOyR0PG87KyskdCl7bGV0IFZlPUxbJHRdLGRuPXZbJHRdLHNuPVZlL2lnLG1uPWRuL2lnLGZvPU0ubGVycChPLFQsRFskdF0vaWcpOyRuLmxvbmdpdHVkZT1NLmxlcnAoZCxfLHNuKSwkbi5sYXRpdHVkZT1NLmxlcnAobSxnLG1uKSwkbi5oZWlnaHQ9Zm8sSz1NYXRoLm1pbigkbi5sb25naXR1ZGUsSyksWD1NYXRoLm1heCgkbi5sb25naXR1ZGUsWCksUj1NYXRoLm1pbigkbi5sYXRpdHVkZSxSKSxRPU1hdGgubWF4KCRuLmxhdGl0dWRlLFEpO2xldCBIbj1iLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKCRuKTtBWyR0XT1uZXcgbnQoc24sbW4pLFNbJHRdPWZvLFBbJHRdPUhuLHMmJihGWyR0XT0oZW8uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZSgkbi5sYXRpdHVkZSktTikqSSksbCYmKGpbJHRdPWIuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKEhuKSksc3QubXVsdGlwbHlCeVBvaW50KEMsSG4sZnUpLGEubWluaW11bUJ5Q29tcG9uZW50KGZ1LEgsSCksYS5tYXhpbXVtQnlDb21wb25lbnQoZnUsayxrKX1sZXQgZnQ9dG0odC53ZXN0SW5kaWNlcyxmdW5jdGlvbigkdCxWZSl7cmV0dXJuIEFbJHRdLnktQVtWZV0ueX0pLHB0PXRtKHQuZWFzdEluZGljZXMsZnVuY3Rpb24oJHQsVmUpe3JldHVybiBBW1ZlXS55LUFbJHRdLnl9KSxndD10bSh0LnNvdXRoSW5kaWNlcyxmdW5jdGlvbigkdCxWZSl7cmV0dXJuIEFbVmVdLngtQVskdF0ueH0pLGl0PXRtKHQubm9ydGhJbmRpY2VzLGZ1bmN0aW9uKCR0LFZlKXtyZXR1cm4gQVskdF0ueC1BW1ZlXS54fSksTnQ7TzwwJiYoTnQ9bmV3IENzKGIpLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50UG9zc2libHlVbmRlckVsbGlwc29pZChFLFAsTykpO2xldCBPdD1PO090PU1hdGgubWluKE90LFFkKHQud2VzdEluZGljZXMsdC53ZXN0U2tpcnRIZWlnaHQsUyxBLHAsYixDLEgsaykpLE90PU1hdGgubWluKE90LFFkKHQuc291dGhJbmRpY2VzLHQuc291dGhTa2lydEhlaWdodCxTLEEscCxiLEMsSCxrKSksT3Q9TWF0aC5taW4oT3QsUWQodC5lYXN0SW5kaWNlcyx0LmVhc3RTa2lydEhlaWdodCxTLEEscCxiLEMsSCxrKSksT3Q9TWF0aC5taW4oT3QsUWQodC5ub3J0aEluZGljZXMsdC5ub3J0aFNraXJ0SGVpZ2h0LFMsQSxwLGIsQyxILGspKTtsZXQgeHQ9bmV3IERpKEgsayxFKSxfdD1uZXcgeHMoRSx4dCxPdCxULHcsVSxzLGwsZix1KSxkdD1fdC5zdHJpZGUsVnQ9bypkdCtpKmR0LHp0PW5ldyBGbG9hdDMyQXJyYXkoVnQpLGhlPTA7Zm9yKGxldCAkdD0wOyR0PG87KyskdCl7aWYoVSl7bGV0IFZlPSR0KjI7a2EueD1yW1ZlXSxrYS55PXJbVmUrMV19aGU9X3QuZW5jb2RlKHp0LGhlLFBbJHRdLEFbJHRdLFNbJHRdLGthLEZbJHRdLGpbJHRdKX1sZXQgY2U9TWF0aC5tYXgoMCwoaS00KSoyKSxwZT10LmluZGljZXMubGVuZ3RoK2NlKjMsZmU9RHQuY3JlYXRlVHlwZWRBcnJheShvK2kscGUpO2ZlLnNldCh0LmluZGljZXMsMCk7bGV0IFF0PTFlLTQsSnQ9KFgtSykqUXQseGU9KFEtUikqUXQsQWU9LUp0LEVlPTAsdW49SnQsVWU9MCxiZT0wLGxuPXhlLHBuPTAsVG49LXhlLG9lPW8qZHQ7cmV0dXJuIEpkKHp0LG9lLGZ0LF90LFMsQSxyLGIscCx0Lndlc3RTa2lydEhlaWdodCxOLEksQWUsRWUpLG9lKz10Lndlc3RJbmRpY2VzLmxlbmd0aCpkdCxKZCh6dCxvZSxndCxfdCxTLEEscixiLHAsdC5zb3V0aFNraXJ0SGVpZ2h0LE4sSSxwbixUbiksb2UrPXQuc291dGhJbmRpY2VzLmxlbmd0aCpkdCxKZCh6dCxvZSxwdCxfdCxTLEEscixiLHAsdC5lYXN0U2tpcnRIZWlnaHQsTixJLHVuLFVlKSxvZSs9dC5lYXN0SW5kaWNlcy5sZW5ndGgqZHQsSmQoenQsb2UsaXQsX3QsUyxBLHIsYixwLHQubm9ydGhTa2lydEhlaWdodCxOLEksYmUsbG4pLGUyLmFkZFNraXJ0SW5kaWNlcyhmdCxndCxwdCxpdCxvLGZlLHQuaW5kaWNlcy5sZW5ndGgpLGUucHVzaCh6dC5idWZmZXIsZmUuYnVmZmVyKSx7dmVydGljZXM6enQuYnVmZmVyLGluZGljZXM6ZmUuYnVmZmVyLHdlc3RJbmRpY2VzU291dGhUb05vcnRoOmZ0LHNvdXRoSW5kaWNlc0Vhc3RUb1dlc3Q6Z3QsZWFzdEluZGljZXNOb3J0aFRvU291dGg6cHQsbm9ydGhJbmRpY2VzV2VzdFRvRWFzdDppdCx2ZXJ0ZXhTdHJpZGU6ZHQsY2VudGVyOkUsbWluaW11bUhlaWdodDpPLG1heGltdW1IZWlnaHQ6VCxvY2NsdWRlZVBvaW50SW5TY2FsZWRTcGFjZTpOdCxlbmNvZGluZzpfdCxpbmRleENvdW50V2l0aG91dFNraXJ0czp0LmluZGljZXMubGVuZ3RofX1mdW5jdGlvbiBRZCh0LGUsbixvLHIsaSxzLGYsdSl7bGV0IGM9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGw9ci5ub3J0aCxwPXIuc291dGgsZD1yLmVhc3QsbT1yLndlc3Q7ZDxtJiYoZCs9TS5UV09fUEkpO2xldCBfPXQubGVuZ3RoO2ZvcihsZXQgZz0wO2c8XzsrK2cpe2xldCBiPXRbZ10sTz1uW2JdLFQ9b1tiXTskbi5sb25naXR1ZGU9TS5sZXJwKG0sZCxULngpLCRuLmxhdGl0dWRlPU0ubGVycChwLGwsVC55KSwkbi5oZWlnaHQ9Ty1lO2xldCBFPWkuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oJG4sZnUpO3N0Lm11bHRpcGx5QnlQb2ludChzLEUsRSksYS5taW5pbXVtQnlDb21wb25lbnQoRSxmLGYpLGEubWF4aW11bUJ5Q29tcG9uZW50KEUsdSx1KSxjPU1hdGgubWluKGMsJG4uaGVpZ2h0KX1yZXR1cm4gY31mdW5jdGlvbiBKZCh0LGUsbixvLHIsaSxzLGYsdSxjLGwscCxkLG0pe2xldCBfPWgocyksZz11Lm5vcnRoLGI9dS5zb3V0aCxPPXUuZWFzdCxUPXUud2VzdDtPPFQmJihPKz1NLlRXT19QSSk7bGV0IEU9bi5sZW5ndGg7Zm9yKGxldCB3PTA7dzxFOysrdyl7bGV0IEM9blt3XSxOPXJbQ10sST1pW0NdOyRuLmxvbmdpdHVkZT1NLmxlcnAoVCxPLEkueCkrZCwkbi5sYXRpdHVkZT1NLmxlcnAoYixnLEkueSkrbSwkbi5oZWlnaHQ9Ti1jO2xldCBMPWYuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oJG4sZnUpO2lmKF8pe2xldCBVPUMqMjtrYS54PXNbVV0sa2EueT1zW1UrMV19bGV0IHY7by5oYXNXZWJNZXJjYXRvclQmJih2PShlby5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKCRuLmxhdGl0dWRlKS1sKSpwKTtsZXQgRDtvLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHMmJihEPWYuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKEwpKSxlPW8uZW5jb2RlKHQsZSxMLEksJG4uaGVpZ2h0LGthLHYsRCl9fWZ1bmN0aW9uIHRtKHQsZSl7bGV0IG47cmV0dXJuIHR5cGVvZiB0LnNsaWNlPT0iZnVuY3Rpb24iJiYobj10LnNsaWNlKCksdHlwZW9mIG4uc29ydCE9ImZ1bmN0aW9uIiYmKG49dm9pZCAwKSksaChuKXx8KG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpLG4uc29ydChlKSxufXZhciBpZyxmdSxsVSxwVSwkbixrYSxtVSxjZz1aKCgpPT57UGYoKTt6ZSgpO1V0KCk7dmUoKTthdCgpO1p0KCk7c3UoKTskZSgpO1d0KCk7a24oKTtBbigpO2N1KCk7bjIoKTskcygpO2ljKCk7c28oKTtpZz0zMjc2NyxmdT1uZXcgYSxsVT1uZXcgYSxwVT1uZXcgYSwkbj1uZXcgY3Qsa2E9bmV3IG50O21VPVFlKGRVKX0pO2Z1bmN0aW9uIGhVKHQsZSl7cmV0dXJuIE0uZXF1YWxzRXBzaWxvbih0LmxhdGl0dWRlLGUubGF0aXR1ZGUsTS5FUFNJTE9OMTApJiZNLmVxdWFsc0Vwc2lsb24odC5sb25naXR1ZGUsZS5sb25naXR1ZGUsTS5FUFNJTE9OMTApfWZ1bmN0aW9uIGdVKHQsZSxuLG8pe2U9Q24oZSxhLmVxdWFsc0Vwc2lsb24pO2xldCByPWUubGVuZ3RoO2lmKHI8MilyZXR1cm47bGV0IGk9aChvKSxzPWgobiksZj1uZXcgQXJyYXkociksdT1uZXcgQXJyYXkociksYz1uZXcgQXJyYXkociksbD1lWzBdO2ZbMF09bDtsZXQgcD10LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGwsX1UpO3MmJihwLmhlaWdodD1uWzBdKSx1WzBdPXAuaGVpZ2h0LGk/Y1swXT1vWzBdOmNbMF09MDtsZXQgZD11WzBdLG09Y1swXSxfPWQ9PT1tLGc9MTtmb3IobGV0IGI9MTtiPHI7KytiKXtsZXQgTz1lW2JdLFQ9dC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhPLHlVKTtzJiYoVC5oZWlnaHQ9bltiXSksXz1fJiZULmhlaWdodD09PTAsaFUocCxUKT9wLmhlaWdodDxULmhlaWdodCYmKHVbZy0xXT1ULmhlaWdodCk6KGZbZ109Tyx1W2ddPVQuaGVpZ2h0LGk/Y1tnXT1vW2JdOmNbZ109MCxfPV8mJnVbZ109PT1jW2ddLGN0LmNsb25lKFQscCksKytnKX1pZighKF98fGc8MikpcmV0dXJuIGYubGVuZ3RoPWcsdS5sZW5ndGg9ZyxjLmxlbmd0aD1nLHtwb3NpdGlvbnM6Zix0b3BIZWlnaHRzOnUsYm90dG9tSGVpZ2h0czpjfX12YXIgbzIsX1UseVUsQVUsYlUsd1UsZW0sYWc9WigoKT0+e2pyKCk7VXQoKTt2ZSgpO2F0KCk7V3QoKTtnYSgpO28yPXt9O19VPW5ldyBjdCx5VT1uZXcgY3Q7QVU9bmV3IEFycmF5KDIpLGJVPW5ldyBBcnJheSgyKSx3VT17cG9zaXRpb25zOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMCxlbGxpcHNvaWQ6dm9pZCAwfTtvMi5jb21wdXRlUG9zaXRpb25zPWZ1bmN0aW9uKHQsZSxuLG8scixpKXtsZXQgcz1nVSh0LGUsbixvKTtpZighaChzKSlyZXR1cm47ZT1zLnBvc2l0aW9ucyxuPXMudG9wSGVpZ2h0cyxvPXMuYm90dG9tSGVpZ2h0cztsZXQgZj1lLmxlbmd0aCx1PWYtMixjLGwscD1NLmNob3JkTGVuZ3RoKHIsdC5tYXhpbXVtUmFkaXVzKSxkPXdVO2lmKGQubWluRGlzdGFuY2U9cCxkLmVsbGlwc29pZD10LGkpe2xldCBtPTAsXztmb3IoXz0wO188Zi0xO18rKyltKz15bi5udW1iZXJPZlBvaW50cyhlW19dLGVbXysxXSxwKSsxO2M9bmV3IEZsb2F0NjRBcnJheShtKjMpLGw9bmV3IEZsb2F0NjRBcnJheShtKjMpO2xldCBnPUFVLGI9YlU7ZC5wb3NpdGlvbnM9ZyxkLmhlaWdodD1iO2xldCBPPTA7Zm9yKF89MDtfPGYtMTtfKyspe2dbMF09ZVtfXSxnWzFdPWVbXysxXSxiWzBdPW5bX10sYlsxXT1uW18rMV07bGV0IFQ9eW4uZ2VuZXJhdGVBcmMoZCk7Yy5zZXQoVCxPKSxiWzBdPW9bX10sYlsxXT1vW18rMV0sbC5zZXQoeW4uZ2VuZXJhdGVBcmMoZCksTyksTys9VC5sZW5ndGh9fWVsc2UgZC5wb3NpdGlvbnM9ZSxkLmhlaWdodD1uLGM9bmV3IEZsb2F0NjRBcnJheSh5bi5nZW5lcmF0ZUFyYyhkKSksZC5oZWlnaHQ9byxsPW5ldyBGbG9hdDY0QXJyYXkoeW4uZ2VuZXJhdGVBcmMoZCkpO3JldHVybntib3R0b21Qb3NpdGlvbnM6bCx0b3BQb3NpdGlvbnM6YyxudW1Db3JuZXJzOnV9fTtlbT1vMn0pO2Z1bmN0aW9uIFJjKHQpe3Q9eCh0LHguRU1QVFlfT0JKRUNUKTtsZXQgZT10LnBvc2l0aW9ucyxuPXQubWF4aW11bUhlaWdodHMsbz10Lm1pbmltdW1IZWlnaHRzO2lmKCFoKGUpKXRocm93IG5ldyBCKCJvcHRpb25zLnBvc2l0aW9ucyBpcyByZXF1aXJlZC4iKTtpZihoKG4pJiZuLmxlbmd0aCE9PWUubGVuZ3RoKXRocm93IG5ldyBCKCJvcHRpb25zLnBvc2l0aW9ucyBhbmQgb3B0aW9ucy5tYXhpbXVtSGVpZ2h0cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoLiIpO2lmKGgobykmJm8ubGVuZ3RoIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEIoIm9wdGlvbnMucG9zaXRpb25zIGFuZCBvcHRpb25zLm1pbmltdW1IZWlnaHRzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGguIik7bGV0IHI9eCh0LnZlcnRleEZvcm1hdCxsdC5ERUZBVUxUKSxpPXgodC5ncmFudWxhcml0eSxNLlJBRElBTlNfUEVSX0RFR1JFRSkscz14KHQuZWxsaXBzb2lkLCQuV0dTODQpO3RoaXMuX3Bvc2l0aW9ucz1lLHRoaXMuX21pbmltdW1IZWlnaHRzPW8sdGhpcy5fbWF4aW11bUhlaWdodHM9bix0aGlzLl92ZXJ0ZXhGb3JtYXQ9bHQuY2xvbmUociksdGhpcy5fZ3JhbnVsYXJpdHk9aSx0aGlzLl9lbGxpcHNvaWQ9JC5jbG9uZShzKSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVXYWxsR2VvbWV0cnkiO2xldCBmPTErZS5sZW5ndGgqYS5wYWNrZWRMZW5ndGgrMjtoKG8pJiYoZis9by5sZW5ndGgpLGgobikmJihmKz1uLmxlbmd0aCksdGhpcy5wYWNrZWRMZW5ndGg9ZiskLnBhY2tlZExlbmd0aCtsdC5wYWNrZWRMZW5ndGgrMX12YXIgZmcsbm0sVFUscjIsT1UsRVUsUlUsaTIsczIsdXUsdWcsYzI9WigoKT0+e1BlKCk7VXQoKTtEZSgpO0l0KCk7YXQoKTtIdCgpO1p0KCk7WGUoKTtZZSgpO2FuKCk7JGUoKTtXdCgpO3RuKCk7Um8oKTthZygpO2ZnPW5ldyBhLG5tPW5ldyBhLFRVPW5ldyBhLHIyPW5ldyBhLE9VPW5ldyBhLEVVPW5ldyBhLFJVPW5ldyBhO1JjLnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBCKCJ2YWx1ZSBpcyByZXF1aXJlZCIpO2lmKCFoKGUpKXRocm93IG5ldyBCKCJhcnJheSBpcyByZXF1aXJlZCIpO249eChuLDApO2xldCBvLHI9dC5fcG9zaXRpb25zLGk9ci5sZW5ndGg7Zm9yKGVbbisrXT1pLG89MDtvPGk7KytvLG4rPWEucGFja2VkTGVuZ3RoKWEucGFjayhyW29dLGUsbik7bGV0IHM9dC5fbWluaW11bUhlaWdodHM7aWYoaT1oKHMpP3MubGVuZ3RoOjAsZVtuKytdPWksaChzKSlmb3Iobz0wO288aTsrK28pZVtuKytdPXNbb107bGV0IGY9dC5fbWF4aW11bUhlaWdodHM7aWYoaT1oKGYpP2YubGVuZ3RoOjAsZVtuKytdPWksaChmKSlmb3Iobz0wO288aTsrK28pZVtuKytdPWZbb107cmV0dXJuICQucGFjayh0Ll9lbGxpcHNvaWQsZSxuKSxuKz0kLnBhY2tlZExlbmd0aCxsdC5wYWNrKHQuX3ZlcnRleEZvcm1hdCxlLG4pLG4rPWx0LnBhY2tlZExlbmd0aCxlW25dPXQuX2dyYW51bGFyaXR5LGV9O2kyPSQuY2xvbmUoJC5VTklUX1NQSEVSRSksczI9bmV3IGx0LHV1PXtwb3NpdGlvbnM6dm9pZCAwLG1pbmltdW1IZWlnaHRzOnZvaWQgMCxtYXhpbXVtSGVpZ2h0czp2b2lkIDAsZWxsaXBzb2lkOmkyLHZlcnRleEZvcm1hdDpzMixncmFudWxhcml0eTp2b2lkIDB9O1JjLnVucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEIoImFycmF5IGlzIHJlcXVpcmVkIik7ZT14KGUsMCk7bGV0IG8scj10W2UrK10saT1uZXcgQXJyYXkocik7Zm9yKG89MDtvPHI7KytvLGUrPWEucGFja2VkTGVuZ3RoKWlbb109YS51bnBhY2sodCxlKTtyPXRbZSsrXTtsZXQgcztpZihyPjApZm9yKHM9bmV3IEFycmF5KHIpLG89MDtvPHI7KytvKXNbb109dFtlKytdO3I9dFtlKytdO2xldCBmO2lmKHI+MClmb3IoZj1uZXcgQXJyYXkociksbz0wO288cjsrK28pZltvXT10W2UrK107bGV0IHU9JC51bnBhY2sodCxlLGkyKTtlKz0kLnBhY2tlZExlbmd0aDtsZXQgYz1sdC51bnBhY2sodCxlLHMyKTtlKz1sdC5wYWNrZWRMZW5ndGg7bGV0IGw9dFtlXTtyZXR1cm4gaChuKT8obi5fcG9zaXRpb25zPWksbi5fbWluaW11bUhlaWdodHM9cyxuLl9tYXhpbXVtSGVpZ2h0cz1mLG4uX2VsbGlwc29pZD0kLmNsb25lKHUsbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9bHQuY2xvbmUoYyxuLl92ZXJ0ZXhGb3JtYXQpLG4uX2dyYW51bGFyaXR5PWwsbik6KHV1LnBvc2l0aW9ucz1pLHV1Lm1pbmltdW1IZWlnaHRzPXMsdXUubWF4aW11bUhlaWdodHM9Zix1dS5ncmFudWxhcml0eT1sLG5ldyBSYyh1dSkpfTtSYy5mcm9tQ29uc3RhbnRIZWlnaHRzPWZ1bmN0aW9uKHQpe3Q9eCh0LHguRU1QVFlfT0JKRUNUKTtsZXQgZT10LnBvc2l0aW9ucztpZighaChlKSl0aHJvdyBuZXcgQigib3B0aW9ucy5wb3NpdGlvbnMgaXMgcmVxdWlyZWQuIik7bGV0IG4sbyxyPXQubWluaW11bUhlaWdodCxpPXQubWF4aW11bUhlaWdodCxzPWgociksZj1oKGkpO2lmKHN8fGYpe2xldCBjPWUubGVuZ3RoO249cz9uZXcgQXJyYXkoYyk6dm9pZCAwLG89Zj9uZXcgQXJyYXkoYyk6dm9pZCAwO2ZvcihsZXQgbD0wO2w8YzsrK2wpcyYmKG5bbF09ciksZiYmKG9bbF09aSl9bGV0IHU9e3Bvc2l0aW9uczplLG1heGltdW1IZWlnaHRzOm8sbWluaW11bUhlaWdodHM6bixlbGxpcHNvaWQ6dC5lbGxpcHNvaWQsdmVydGV4Rm9ybWF0OnQudmVydGV4Rm9ybWF0fTtyZXR1cm4gbmV3IFJjKHUpfTtSYy5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll9wb3NpdGlvbnMsbj10Ll9taW5pbXVtSGVpZ2h0cyxvPXQuX21heGltdW1IZWlnaHRzLHI9dC5fdmVydGV4Rm9ybWF0LGk9dC5fZ3JhbnVsYXJpdHkscz10Ll9lbGxpcHNvaWQsZj1lbS5jb21wdXRlUG9zaXRpb25zKHMsZSxvLG4saSwhMCk7aWYoIWgoZikpcmV0dXJuO2xldCB1PWYuYm90dG9tUG9zaXRpb25zLGM9Zi50b3BQb3NpdGlvbnMsbD1mLm51bUNvcm5lcnMscD1jLmxlbmd0aCxkPXAqMixtPXIucG9zaXRpb24/bmV3IEZsb2F0NjRBcnJheShkKTp2b2lkIDAsXz1yLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KGQpOnZvaWQgMCxnPXIudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KGQpOnZvaWQgMCxiPXIuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoZCk6dm9pZCAwLE89ci5zdD9uZXcgRmxvYXQzMkFycmF5KGQvMyoyKTp2b2lkIDAsVD0wLEU9MCx3PTAsQz0wLE49MCxJPVJVLEw9RVUsdj1PVSxEPSEwO3AvPTM7bGV0IFUsQT0wLFM9MS8ocC1sLTEpO2ZvcihVPTA7VTxwOysrVSl7bGV0IGs9VSozLEs9YS5mcm9tQXJyYXkoYyxrLGZnKSxYPWEuZnJvbUFycmF5KHUsayxubSk7aWYoci5wb3NpdGlvbiYmKG1bVCsrXT1YLngsbVtUKytdPVgueSxtW1QrK109WC56LG1bVCsrXT1LLngsbVtUKytdPUsueSxtW1QrK109Sy56KSxyLnN0JiYoT1tOKytdPUEsT1tOKytdPTAsT1tOKytdPUEsT1tOKytdPTEpLHIubm9ybWFsfHxyLnRhbmdlbnR8fHIuYml0YW5nZW50KXtsZXQgUj1hLmNsb25lKGEuWkVSTyxyMiksUT1hLnN1YnRyYWN0KEsscy5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoSyxubSksbm0pO2lmKFUrMTxwJiYoUj1hLmZyb21BcnJheShjLGsrMyxyMikpLEQpe2xldCBmdD1hLnN1YnRyYWN0KFIsSyxUVSkscHQ9YS5zdWJ0cmFjdChRLEssZmcpO0k9YS5ub3JtYWxpemUoYS5jcm9zcyhwdCxmdCxJKSxJKSxEPSExfWEuZXF1YWxzRXBzaWxvbihLLFIsTS5FUFNJTE9OMTApP0Q9ITA6KEErPVMsci50YW5nZW50JiYoTD1hLm5vcm1hbGl6ZShhLnN1YnRyYWN0KFIsSyxMKSxMKSksci5iaXRhbmdlbnQmJih2PWEubm9ybWFsaXplKGEuY3Jvc3MoSSxMLHYpLHYpKSksci5ub3JtYWwmJihfW0UrK109SS54LF9bRSsrXT1JLnksX1tFKytdPUkueixfW0UrK109SS54LF9bRSsrXT1JLnksX1tFKytdPUkueiksci50YW5nZW50JiYoZ1tDKytdPUwueCxnW0MrK109TC55LGdbQysrXT1MLnosZ1tDKytdPUwueCxnW0MrK109TC55LGdbQysrXT1MLnopLHIuYml0YW5nZW50JiYoYlt3KytdPXYueCxiW3crK109di55LGJbdysrXT12LnosYlt3KytdPXYueCxiW3crK109di55LGJbdysrXT12LnopfX1sZXQgUD1uZXcgcmU7ci5wb3NpdGlvbiYmKFAucG9zaXRpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczptfSkpLHIubm9ybWFsJiYoUC5ub3JtYWw9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOl99KSksci50YW5nZW50JiYoUC50YW5nZW50PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6b3QuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpnfSkpLHIuYml0YW5nZW50JiYoUC5iaXRhbmdlbnQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmJ9KSksci5zdCYmKFAuc3Q9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpvdC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOk99KSk7bGV0IEY9ZC8zO2QtPTYqKGwrMSk7bGV0IGo9RHQuY3JlYXRlVHlwZWRBcnJheShGLGQpLEg9MDtmb3IoVT0wO1U8Ri0yO1UrPTIpe2xldCBrPVUsSz1VKzIsWD1hLmZyb21BcnJheShtLGsqMyxmZyksUj1hLmZyb21BcnJheShtLEsqMyxubSk7aWYoYS5lcXVhbHNFcHNpbG9uKFgsUixNLkVQU0lMT04xMCkpY29udGludWU7bGV0IFE9VSsxLGZ0PVUrMztqW0grK109USxqW0grK109ayxqW0grK109ZnQsaltIKytdPWZ0LGpbSCsrXT1rLGpbSCsrXT1LfXJldHVybiBuZXcgRnQoe2F0dHJpYnV0ZXM6UCxpbmRpY2VzOmoscHJpbWl0aXZlVHlwZTpMdC5UUklBTkdMRVMsYm91bmRpbmdTcGhlcmU6bmV3IHl0LmZyb21WZXJ0aWNlcyhtKX0pfTt1Zz1SY30pO3ZhciBsZz17fTttZShsZyx7ZGVmYXVsdDooKT0+Q1V9KTtmdW5jdGlvbiBTVSh0LGUpe3JldHVybiBoKGUpJiYodD11Zy51bnBhY2sodCxlKSksdC5fZWxsaXBzb2lkPSQuY2xvbmUodC5fZWxsaXBzb2lkKSx1Zy5jcmVhdGVHZW9tZXRyeSh0KX12YXIgQ1UscGc9WigoKT0+e2F0KCk7WnQoKTtjMigpO0NVPVNVfSk7ZnVuY3Rpb24gU2ModCl7dD14KHQseC5FTVBUWV9PQkpFQ1QpO2xldCBlPXQucG9zaXRpb25zLG49dC5tYXhpbXVtSGVpZ2h0cyxvPXQubWluaW11bUhlaWdodHM7aWYoIWgoZSkpdGhyb3cgbmV3IEIoIm9wdGlvbnMucG9zaXRpb25zIGlzIHJlcXVpcmVkLiIpO2lmKGgobikmJm4ubGVuZ3RoIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEIoIm9wdGlvbnMucG9zaXRpb25zIGFuZCBvcHRpb25zLm1heGltdW1IZWlnaHRzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGguIik7aWYoaChvKSYmby5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgQigib3B0aW9ucy5wb3NpdGlvbnMgYW5kIG9wdGlvbnMubWluaW11bUhlaWdodHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4iKTtsZXQgcj14KHQuZ3JhbnVsYXJpdHksTS5SQURJQU5TX1BFUl9ERUdSRUUpLGk9eCh0LmVsbGlwc29pZCwkLldHUzg0KTt0aGlzLl9wb3NpdGlvbnM9ZSx0aGlzLl9taW5pbXVtSGVpZ2h0cz1vLHRoaXMuX21heGltdW1IZWlnaHRzPW4sdGhpcy5fZ3JhbnVsYXJpdHk9cix0aGlzLl9lbGxpcHNvaWQ9JC5jbG9uZShpKSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVXYWxsT3V0bGluZUdlb21ldHJ5IjtsZXQgcz0xK2UubGVuZ3RoKmEucGFja2VkTGVuZ3RoKzI7aChvKSYmKHMrPW8ubGVuZ3RoKSxoKG4pJiYocys9bi5sZW5ndGgpLHRoaXMucGFja2VkTGVuZ3RoPXMrJC5wYWNrZWRMZW5ndGgrMX12YXIgYTIsZjIsdTIsbHUsZGcsbDI9WigoKT0+e1BlKCk7VXQoKTtEZSgpO0l0KCk7YXQoKTtIdCgpO1p0KCk7WGUoKTtZZSgpO2FuKCk7JGUoKTtXdCgpO3RuKCk7YWcoKTthMj1uZXcgYSxmMj1uZXcgYTtTYy5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgQigidmFsdWUgaXMgcmVxdWlyZWQiKTtpZighaChlKSl0aHJvdyBuZXcgQigiYXJyYXkgaXMgcmVxdWlyZWQiKTtuPXgobiwwKTtsZXQgbyxyPXQuX3Bvc2l0aW9ucyxpPXIubGVuZ3RoO2ZvcihlW24rK109aSxvPTA7bzxpOysrbyxuKz1hLnBhY2tlZExlbmd0aClhLnBhY2socltvXSxlLG4pO2xldCBzPXQuX21pbmltdW1IZWlnaHRzO2lmKGk9aChzKT9zLmxlbmd0aDowLGVbbisrXT1pLGgocykpZm9yKG89MDtvPGk7KytvKWVbbisrXT1zW29dO2xldCBmPXQuX21heGltdW1IZWlnaHRzO2lmKGk9aChmKT9mLmxlbmd0aDowLGVbbisrXT1pLGgoZikpZm9yKG89MDtvPGk7KytvKWVbbisrXT1mW29dO3JldHVybiAkLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9JC5wYWNrZWRMZW5ndGgsZVtuXT10Ll9ncmFudWxhcml0eSxlfTt1Mj0kLmNsb25lKCQuVU5JVF9TUEhFUkUpLGx1PXtwb3NpdGlvbnM6dm9pZCAwLG1pbmltdW1IZWlnaHRzOnZvaWQgMCxtYXhpbXVtSGVpZ2h0czp2b2lkIDAsZWxsaXBzb2lkOnUyLGdyYW51bGFyaXR5OnZvaWQgMH07U2MudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgQigiYXJyYXkgaXMgcmVxdWlyZWQiKTtlPXgoZSwwKTtsZXQgbyxyPXRbZSsrXSxpPW5ldyBBcnJheShyKTtmb3Iobz0wO288cjsrK28sZSs9YS5wYWNrZWRMZW5ndGgpaVtvXT1hLnVucGFjayh0LGUpO3I9dFtlKytdO2xldCBzO2lmKHI+MClmb3Iocz1uZXcgQXJyYXkociksbz0wO288cjsrK28pc1tvXT10W2UrK107cj10W2UrK107bGV0IGY7aWYocj4wKWZvcihmPW5ldyBBcnJheShyKSxvPTA7bzxyOysrbylmW29dPXRbZSsrXTtsZXQgdT0kLnVucGFjayh0LGUsdTIpO2UrPSQucGFja2VkTGVuZ3RoO2xldCBjPXRbZV07cmV0dXJuIGgobik/KG4uX3Bvc2l0aW9ucz1pLG4uX21pbmltdW1IZWlnaHRzPXMsbi5fbWF4aW11bUhlaWdodHM9ZixuLl9lbGxpcHNvaWQ9JC5jbG9uZSh1LG4uX2VsbGlwc29pZCksbi5fZ3JhbnVsYXJpdHk9YyxuKToobHUucG9zaXRpb25zPWksbHUubWluaW11bUhlaWdodHM9cyxsdS5tYXhpbXVtSGVpZ2h0cz1mLGx1LmdyYW51bGFyaXR5PWMsbmV3IFNjKGx1KSl9O1NjLmZyb21Db25zdGFudEhlaWdodHM9ZnVuY3Rpb24odCl7dD14KHQseC5FTVBUWV9PQkpFQ1QpO2xldCBlPXQucG9zaXRpb25zO2lmKCFoKGUpKXRocm93IG5ldyBCKCJvcHRpb25zLnBvc2l0aW9ucyBpcyByZXF1aXJlZC4iKTtsZXQgbixvLHI9dC5taW5pbXVtSGVpZ2h0LGk9dC5tYXhpbXVtSGVpZ2h0LHM9aChyKSxmPWgoaSk7aWYoc3x8Zil7bGV0IGM9ZS5sZW5ndGg7bj1zP25ldyBBcnJheShjKTp2b2lkIDAsbz1mP25ldyBBcnJheShjKTp2b2lkIDA7Zm9yKGxldCBsPTA7bDxjOysrbClzJiYobltsXT1yKSxmJiYob1tsXT1pKX1sZXQgdT17cG9zaXRpb25zOmUsbWF4aW11bUhlaWdodHM6byxtaW5pbXVtSGVpZ2h0czpuLGVsbGlwc29pZDp0LmVsbGlwc29pZH07cmV0dXJuIG5ldyBTYyh1KX07U2MuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fcG9zaXRpb25zLG49dC5fbWluaW11bUhlaWdodHMsbz10Ll9tYXhpbXVtSGVpZ2h0cyxyPXQuX2dyYW51bGFyaXR5LGk9dC5fZWxsaXBzb2lkLHM9ZW0uY29tcHV0ZVBvc2l0aW9ucyhpLGUsbyxuLHIsITEpO2lmKCFoKHMpKXJldHVybjtsZXQgZj1zLmJvdHRvbVBvc2l0aW9ucyx1PXMudG9wUG9zaXRpb25zLGM9dS5sZW5ndGgsbD1jKjIscD1uZXcgRmxvYXQ2NEFycmF5KGwpLGQ9MDtjLz0zO2xldCBtO2ZvcihtPTA7bTxjOysrbSl7bGV0IFQ9bSozLEU9YS5mcm9tQXJyYXkodSxULGEyKSx3PWEuZnJvbUFycmF5KGYsVCxmMik7cFtkKytdPXcueCxwW2QrK109dy55LHBbZCsrXT13LnoscFtkKytdPUUueCxwW2QrK109RS55LHBbZCsrXT1FLnp9bGV0IF89bmV3IHJlKHtwb3NpdGlvbjpuZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm90LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnB9KX0pLGc9bC8zO2w9MipnLTQrZztsZXQgYj1EdC5jcmVhdGVUeXBlZEFycmF5KGcsbCksTz0wO2ZvcihtPTA7bTxnLTI7bSs9Mil7bGV0IFQ9bSxFPW0rMix3PWEuZnJvbUFycmF5KHAsVCozLGEyKSxDPWEuZnJvbUFycmF5KHAsRSozLGYyKTtpZihhLmVxdWFsc0Vwc2lsb24odyxDLE0uRVBTSUxPTjEwKSljb250aW51ZTtsZXQgTj1tKzEsST1tKzM7YltPKytdPU4sYltPKytdPVQsYltPKytdPU4sYltPKytdPUksYltPKytdPVQsYltPKytdPUV9cmV0dXJuIGJbTysrXT1nLTIsYltPKytdPWctMSxuZXcgRnQoe2F0dHJpYnV0ZXM6XyxpbmRpY2VzOmIscHJpbWl0aXZlVHlwZTpMdC5MSU5FUyxib3VuZGluZ1NwaGVyZTpuZXcgeXQuZnJvbVZlcnRpY2VzKHApfSl9O2RnPVNjfSk7dmFyIG1nPXt9O21lKG1nLHtkZWZhdWx0OigpPT5QVX0pO2Z1bmN0aW9uIHhVKHQsZSl7cmV0dXJuIGgoZSkmJih0PWRnLnVucGFjayh0LGUpKSx0Ll9lbGxpcHNvaWQ9JC5jbG9uZSh0Ll9lbGxpcHNvaWQpLGRnLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBQVSxoZz1aKCgpPT57YXQoKTtadCgpO2wyKCk7UFU9eFV9KTt2YXIgZ2c9VW4oKHB1LHlnKT0+e3ZhciBCdD1CdHx8e307QnQuc2NvcGU9e307QnQuYXJyYXlJdGVyYXRvckltcGw9ZnVuY3Rpb24odCl7dmFyIGU9MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZTx0Lmxlbmd0aD97ZG9uZTohMSx2YWx1ZTp0W2UrK119Ontkb25lOiEwfX19O0J0LmFycmF5SXRlcmF0b3I9ZnVuY3Rpb24odCl7cmV0dXJue25leHQ6QnQuYXJyYXlJdGVyYXRvckltcGwodCl9fTtCdC5tYWtlSXRlcmF0b3I9ZnVuY3Rpb24odCl7dmFyIGU9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5pdGVyYXRvciYmdFtTeW1ib2wuaXRlcmF0b3JdO3JldHVybiBlP2UuY2FsbCh0KTpCdC5hcnJheUl0ZXJhdG9yKHQpfTtCdC5BU1NVTUVfRVM1PSExO0J0LkFTU1VNRV9OT19OQVRJVkVfTUFQPSExO0J0LkFTU1VNRV9OT19OQVRJVkVfU0VUPSExO0J0LlNJTVBMRV9GUk9VTkRfUE9MWUZJTEw9ITE7QnQuSVNPTEFURV9QT0xZRklMTFM9ITE7QnQuRk9SQ0VfUE9MWUZJTExfUFJPTUlTRT0hMTtCdC5GT1JDRV9QT0xZRklMTF9QUk9NSVNFX1dIRU5fTk9fVU5IQU5ETEVEX1JFSkVDVElPTj0hMTtCdC5nZXRHbG9iYWw9ZnVuY3Rpb24odCl7dD1bdHlwZW9mIGdsb2JhbFRoaXM9PSJvYmplY3QiJiZnbG9iYWxUaGlzLHQsdHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdyx0eXBlb2Ygc2VsZj09Im9iamVjdCImJnNlbGYsdHlwZW9mIGdsb2JhbD09Im9iamVjdCImJmdsb2JhbF07Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDsrK2Upe3ZhciBuPXRbZV07aWYobiYmbi5NYXRoPT1NYXRoKXJldHVybiBufXRocm93IEVycm9yKCJDYW5ub3QgZmluZCBnbG9iYWwgb2JqZWN0Iil9O0J0Lmdsb2JhbD1CdC5nZXRHbG9iYWwocHUpO0J0LmRlZmluZVByb3BlcnR5PUJ0LkFTU1VNRV9FUzV8fHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydGllcz09ImZ1bmN0aW9uIj9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PT1BcnJheS5wcm90b3R5cGV8fHQ9PU9iamVjdC5wcm90b3R5cGV8fCh0W2VdPW4udmFsdWUpLHR9O0J0LklTX1NZTUJPTF9OQVRJVkU9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbCgieCIpPT0ic3ltYm9sIjtCdC5UUlVTVF9FUzZfUE9MWUZJTExTPSFCdC5JU09MQVRFX1BPTFlGSUxMU3x8QnQuSVNfU1lNQk9MX05BVElWRTtCdC5wb2x5ZmlsbHM9e307QnQucHJvcGVydHlUb1BvbHlmaWxsU3ltYm9sPXt9O0J0LlBPTFlGSUxMX1BSRUZJWD0iJGpzY3AkIjtCdC5wb2x5ZmlsbD1mdW5jdGlvbih0LGUsbixvKXtlJiYoQnQuSVNPTEFURV9QT0xZRklMTFM/QnQucG9seWZpbGxJc29sYXRlZCh0LGUsbixvKTpCdC5wb2x5ZmlsbFVuaXNvbGF0ZWQodCxlLG4sbykpfTtCdC5wb2x5ZmlsbFVuaXNvbGF0ZWQ9ZnVuY3Rpb24odCxlLG4sbyl7Zm9yKG49QnQuZ2xvYmFsLHQ9dC5zcGxpdCgiLiIpLG89MDtvPHQubGVuZ3RoLTE7bysrKXt2YXIgcj10W29dO2lmKCEociBpbiBuKSlyZXR1cm47bj1uW3JdfXQ9dFt0Lmxlbmd0aC0xXSxvPW5bdF0sZT1lKG8pLGUhPW8mJmUhPW51bGwmJkJ0LmRlZmluZVByb3BlcnR5KG4sdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmV9KX07QnQucG9seWZpbGxJc29sYXRlZD1mdW5jdGlvbih0LGUsbixvKXt2YXIgcj10LnNwbGl0KCIuIik7dD1yLmxlbmd0aD09PTEsbz1yWzBdLG89IXQmJm8gaW4gQnQucG9seWZpbGxzP0J0LnBvbHlmaWxsczpCdC5nbG9iYWw7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aC0xO2krKyl7dmFyIHM9cltpXTtpZighKHMgaW4gbykpcmV0dXJuO289b1tzXX1yPXJbci5sZW5ndGgtMV0sbj1CdC5JU19TWU1CT0xfTkFUSVZFJiZuPT09ImVzNiI/b1tyXTpudWxsLGU9ZShuKSxlIT1udWxsJiYodD9CdC5kZWZpbmVQcm9wZXJ0eShCdC5wb2x5ZmlsbHMscix7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmV9KTplIT09biYmKEJ0LnByb3BlcnR5VG9Qb2x5ZmlsbFN5bWJvbFtyXT09PXZvaWQgMCYmKG49MWU5Kk1hdGgucmFuZG9tKCk+Pj4wLEJ0LnByb3BlcnR5VG9Qb2x5ZmlsbFN5bWJvbFtyXT1CdC5JU19TWU1CT0xfTkFUSVZFP0J0Lmdsb2JhbC5TeW1ib2wocik6QnQuUE9MWUZJTExfUFJFRklYK24rIiQiK3IpLEJ0LmRlZmluZVByb3BlcnR5KG8sQnQucHJvcGVydHlUb1BvbHlmaWxsU3ltYm9sW3JdLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZX0pKSl9O0J0LnBvbHlmaWxsKCJQcm9taXNlIixmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dGhpcy5iYXRjaF89bnVsbH1mdW5jdGlvbiBuKHMpe3JldHVybiBzIGluc3RhbmNlb2Ygcj9zOm5ldyByKGZ1bmN0aW9uKGYsdSl7ZihzKX0pfWlmKHQmJighKEJ0LkZPUkNFX1BPTFlGSUxMX1BST01JU0V8fEJ0LkZPUkNFX1BPTFlGSUxMX1BST01JU0VfV0hFTl9OT19VTkhBTkRMRURfUkVKRUNUSU9OJiZ0eXBlb2YgQnQuZ2xvYmFsLlByb21pc2VSZWplY3Rpb25FdmVudD4idSIpfHwhQnQuZ2xvYmFsLlByb21pc2V8fEJ0Lmdsb2JhbC5Qcm9taXNlLnRvU3RyaW5nKCkuaW5kZXhPZigiW25hdGl2ZSBjb2RlXSIpPT09LTEpKXJldHVybiB0O2UucHJvdG90eXBlLmFzeW5jRXhlY3V0ZT1mdW5jdGlvbihzKXtpZih0aGlzLmJhdGNoXz09bnVsbCl7dGhpcy5iYXRjaF89W107dmFyIGY9dGhpczt0aGlzLmFzeW5jRXhlY3V0ZUZ1bmN0aW9uKGZ1bmN0aW9uKCl7Zi5leGVjdXRlQmF0Y2hfKCl9KX10aGlzLmJhdGNoXy5wdXNoKHMpfTt2YXIgbz1CdC5nbG9iYWwuc2V0VGltZW91dDtlLnByb3RvdHlwZS5hc3luY0V4ZWN1dGVGdW5jdGlvbj1mdW5jdGlvbihzKXtvKHMsMCl9LGUucHJvdG90eXBlLmV4ZWN1dGVCYXRjaF89ZnVuY3Rpb24oKXtmb3IoO3RoaXMuYmF0Y2hfJiZ0aGlzLmJhdGNoXy5sZW5ndGg7KXt2YXIgcz10aGlzLmJhdGNoXzt0aGlzLmJhdGNoXz1bXTtmb3IodmFyIGY9MDtmPHMubGVuZ3RoOysrZil7dmFyIHU9c1tmXTtzW2ZdPW51bGw7dHJ5e3UoKX1jYXRjaChjKXt0aGlzLmFzeW5jVGhyb3dfKGMpfX19dGhpcy5iYXRjaF89bnVsbH0sZS5wcm90b3R5cGUuYXN5bmNUaHJvd189ZnVuY3Rpb24ocyl7dGhpcy5hc3luY0V4ZWN1dGVGdW5jdGlvbihmdW5jdGlvbigpe3Rocm93IHN9KX07dmFyIHI9ZnVuY3Rpb24ocyl7dGhpcy5zdGF0ZV89MCx0aGlzLnJlc3VsdF89dm9pZCAwLHRoaXMub25TZXR0bGVkQ2FsbGJhY2tzXz1bXSx0aGlzLmlzUmVqZWN0aW9uSGFuZGxlZF89ITE7dmFyIGY9dGhpcy5jcmVhdGVSZXNvbHZlQW5kUmVqZWN0XygpO3RyeXtzKGYucmVzb2x2ZSxmLnJlamVjdCl9Y2F0Y2godSl7Zi5yZWplY3QodSl9fTtyLnByb3RvdHlwZS5jcmVhdGVSZXNvbHZlQW5kUmVqZWN0Xz1mdW5jdGlvbigpe2Z1bmN0aW9uIHMoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3V8fCh1PSEwLGMuY2FsbChmLGwpKX19dmFyIGY9dGhpcyx1PSExO3JldHVybntyZXNvbHZlOnModGhpcy5yZXNvbHZlVG9fKSxyZWplY3Q6cyh0aGlzLnJlamVjdF8pfX0sci5wcm90b3R5cGUucmVzb2x2ZVRvXz1mdW5jdGlvbihzKXtpZihzPT09dGhpcyl0aGlzLnJlamVjdF8obmV3IFR5cGVFcnJvcigiQSBQcm9taXNlIGNhbm5vdCByZXNvbHZlIHRvIGl0c2VsZiIpKTtlbHNlIGlmKHMgaW5zdGFuY2VvZiByKXRoaXMuc2V0dGxlU2FtZUFzUHJvbWlzZV8ocyk7ZWxzZXt0OnN3aXRjaCh0eXBlb2Ygcyl7Y2FzZSJvYmplY3QiOnZhciBmPXMhPW51bGw7YnJlYWsgdDtjYXNlImZ1bmN0aW9uIjpmPSEwO2JyZWFrIHQ7ZGVmYXVsdDpmPSExfWY/dGhpcy5yZXNvbHZlVG9Ob25Qcm9taXNlT2JqXyhzKTp0aGlzLmZ1bGZpbGxfKHMpfX0sci5wcm90b3R5cGUucmVzb2x2ZVRvTm9uUHJvbWlzZU9ial89ZnVuY3Rpb24ocyl7dmFyIGY9dm9pZCAwO3RyeXtmPXMudGhlbn1jYXRjaCh1KXt0aGlzLnJlamVjdF8odSk7cmV0dXJufXR5cGVvZiBmPT0iZnVuY3Rpb24iP3RoaXMuc2V0dGxlU2FtZUFzVGhlbmFibGVfKGYscyk6dGhpcy5mdWxmaWxsXyhzKX0sci5wcm90b3R5cGUucmVqZWN0Xz1mdW5jdGlvbihzKXt0aGlzLnNldHRsZV8oMixzKX0sci5wcm90b3R5cGUuZnVsZmlsbF89ZnVuY3Rpb24ocyl7dGhpcy5zZXR0bGVfKDEscyl9LHIucHJvdG90eXBlLnNldHRsZV89ZnVuY3Rpb24ocyxmKXtpZih0aGlzLnN0YXRlXyE9MCl0aHJvdyBFcnJvcigiQ2Fubm90IHNldHRsZSgiK3MrIiwgIitmKyIpOiBQcm9taXNlIGFscmVhZHkgc2V0dGxlZCBpbiBzdGF0ZSIrdGhpcy5zdGF0ZV8pO3RoaXMuc3RhdGVfPXMsdGhpcy5yZXN1bHRfPWYsdGhpcy5zdGF0ZV89PT0yJiZ0aGlzLnNjaGVkdWxlVW5oYW5kbGVkUmVqZWN0aW9uQ2hlY2tfKCksdGhpcy5leGVjdXRlT25TZXR0bGVkQ2FsbGJhY2tzXygpfSxyLnByb3RvdHlwZS5zY2hlZHVsZVVuaGFuZGxlZFJlamVjdGlvbkNoZWNrXz1mdW5jdGlvbigpe3ZhciBzPXRoaXM7byhmdW5jdGlvbigpe2lmKHMubm90aWZ5VW5oYW5kbGVkUmVqZWN0aW9uXygpKXt2YXIgZj1CdC5nbG9iYWwuY29uc29sZTt0eXBlb2YgZjwidSImJmYuZXJyb3Iocy5yZXN1bHRfKX19LDEpfSxyLnByb3RvdHlwZS5ub3RpZnlVbmhhbmRsZWRSZWplY3Rpb25fPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1JlamVjdGlvbkhhbmRsZWRfKXJldHVybiExO3ZhciBzPUJ0Lmdsb2JhbC5DdXN0b21FdmVudCxmPUJ0Lmdsb2JhbC5FdmVudCx1PUJ0Lmdsb2JhbC5kaXNwYXRjaEV2ZW50O3JldHVybiB0eXBlb2YgdT4idSI/ITA6KHR5cGVvZiBzPT0iZnVuY3Rpb24iP3M9bmV3IHMoInVuaGFuZGxlZHJlamVjdGlvbiIse2NhbmNlbGFibGU6ITB9KTp0eXBlb2YgZj09ImZ1bmN0aW9uIj9zPW5ldyBmKCJ1bmhhbmRsZWRyZWplY3Rpb24iLHtjYW5jZWxhYmxlOiEwfSk6KHM9QnQuZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpLHMuaW5pdEN1c3RvbUV2ZW50KCJ1bmhhbmRsZWRyZWplY3Rpb24iLCExLCEwLHMpKSxzLnByb21pc2U9dGhpcyxzLnJlYXNvbj10aGlzLnJlc3VsdF8sdShzKSl9LHIucHJvdG90eXBlLmV4ZWN1dGVPblNldHRsZWRDYWxsYmFja3NfPWZ1bmN0aW9uKCl7aWYodGhpcy5vblNldHRsZWRDYWxsYmFja3NfIT1udWxsKXtmb3IodmFyIHM9MDtzPHRoaXMub25TZXR0bGVkQ2FsbGJhY2tzXy5sZW5ndGg7KytzKWkuYXN5bmNFeGVjdXRlKHRoaXMub25TZXR0bGVkQ2FsbGJhY2tzX1tzXSk7dGhpcy5vblNldHRsZWRDYWxsYmFja3NfPW51bGx9fTt2YXIgaT1uZXcgZTtyZXR1cm4gci5wcm90b3R5cGUuc2V0dGxlU2FtZUFzUHJvbWlzZV89ZnVuY3Rpb24ocyl7dmFyIGY9dGhpcy5jcmVhdGVSZXNvbHZlQW5kUmVqZWN0XygpO3MuY2FsbFdoZW5TZXR0bGVkXyhmLnJlc29sdmUsZi5yZWplY3QpfSxyLnByb3RvdHlwZS5zZXR0bGVTYW1lQXNUaGVuYWJsZV89ZnVuY3Rpb24ocyxmKXt2YXIgdT10aGlzLmNyZWF0ZVJlc29sdmVBbmRSZWplY3RfKCk7dHJ5e3MuY2FsbChmLHUucmVzb2x2ZSx1LnJlamVjdCl9Y2F0Y2goYyl7dS5yZWplY3QoYyl9fSxyLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKHMsZil7ZnVuY3Rpb24gdShkLG0pe3JldHVybiB0eXBlb2YgZD09ImZ1bmN0aW9uIj9mdW5jdGlvbihfKXt0cnl7YyhkKF8pKX1jYXRjaChnKXtsKGcpfX06bX12YXIgYyxsLHA9bmV3IHIoZnVuY3Rpb24oZCxtKXtjPWQsbD1tfSk7cmV0dXJuIHRoaXMuY2FsbFdoZW5TZXR0bGVkXyh1KHMsYyksdShmLGwpKSxwfSxyLnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy50aGVuKHZvaWQgMCxzKX0sci5wcm90b3R5cGUuY2FsbFdoZW5TZXR0bGVkXz1mdW5jdGlvbihzLGYpe2Z1bmN0aW9uIHUoKXtzd2l0Y2goYy5zdGF0ZV8pe2Nhc2UgMTpzKGMucmVzdWx0Xyk7YnJlYWs7Y2FzZSAyOmYoYy5yZXN1bHRfKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJVbmV4cGVjdGVkIHN0YXRlOiAiK2Muc3RhdGVfKX19dmFyIGM9dGhpczt0aGlzLm9uU2V0dGxlZENhbGxiYWNrc189PW51bGw/aS5hc3luY0V4ZWN1dGUodSk6dGhpcy5vblNldHRsZWRDYWxsYmFja3NfLnB1c2godSksdGhpcy5pc1JlamVjdGlvbkhhbmRsZWRfPSEwfSxyLnJlc29sdmU9bixyLnJlamVjdD1mdW5jdGlvbihzKXtyZXR1cm4gbmV3IHIoZnVuY3Rpb24oZix1KXt1KHMpfSl9LHIucmFjZT1mdW5jdGlvbihzKXtyZXR1cm4gbmV3IHIoZnVuY3Rpb24oZix1KXtmb3IodmFyIGM9QnQubWFrZUl0ZXJhdG9yKHMpLGw9Yy5uZXh0KCk7IWwuZG9uZTtsPWMubmV4dCgpKW4obC52YWx1ZSkuY2FsbFdoZW5TZXR0bGVkXyhmLHUpfSl9LHIuYWxsPWZ1bmN0aW9uKHMpe3ZhciBmPUJ0Lm1ha2VJdGVyYXRvcihzKSx1PWYubmV4dCgpO3JldHVybiB1LmRvbmU/bihbXSk6bmV3IHIoZnVuY3Rpb24oYyxsKXtmdW5jdGlvbiBwKF8pe3JldHVybiBmdW5jdGlvbihnKXtkW19dPWcsbS0tLG09PTAmJmMoZCl9fXZhciBkPVtdLG09MDtkbyBkLnB1c2godm9pZCAwKSxtKyssbih1LnZhbHVlKS5jYWxsV2hlblNldHRsZWRfKHAoZC5sZW5ndGgtMSksbCksdT1mLm5leHQoKTt3aGlsZSghdS5kb25lKX0pfSxyfSwiZXM2IiwiZXMzIik7QnQub3ducz1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX07QnQuYXNzaWduPUJ0LlRSVVNUX0VTNl9QT0xZRklMTFMmJnR5cGVvZiBPYmplY3QuYXNzaWduPT0iZnVuY3Rpb24iP09iamVjdC5hc3NpZ246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgbz1hcmd1bWVudHNbbl07aWYobylmb3IodmFyIHIgaW4gbylCdC5vd25zKG8scikmJih0W3JdPW9bcl0pfXJldHVybiB0fTtCdC5wb2x5ZmlsbCgiT2JqZWN0LmFzc2lnbiIsZnVuY3Rpb24odCl7cmV0dXJuIHR8fEJ0LmFzc2lnbn0sImVzNiIsImVzMyIpO0J0LmNoZWNrU3RyaW5nQXJncz1mdW5jdGlvbih0LGUsbil7aWYodD09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgJ3RoaXMnIHZhbHVlIGZvciBTdHJpbmcucHJvdG90eXBlLiIrbisiIG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkIik7aWYoZSBpbnN0YW5jZW9mIFJlZ0V4cCl0aHJvdyBuZXcgVHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCB0byBTdHJpbmcucHJvdG90eXBlLiIrbisiIG11c3Qgbm90IGJlIGEgcmVndWxhciBleHByZXNzaW9uIik7cmV0dXJuIHQrIiJ9O0J0LnBvbHlmaWxsKCJTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0fHxmdW5jdGlvbihlLG4pe3ZhciBvPUJ0LmNoZWNrU3RyaW5nQXJncyh0aGlzLGUsInN0YXJ0c1dpdGgiKTtlKz0iIjt2YXIgcj1vLmxlbmd0aCxpPWUubGVuZ3RoO249TWF0aC5tYXgoMCxNYXRoLm1pbihufDAsby5sZW5ndGgpKTtmb3IodmFyIHM9MDtzPGkmJm48cjspaWYob1tuKytdIT1lW3MrK10pcmV0dXJuITE7cmV0dXJuIHM+PWl9fSwiZXM2IiwiZXMzIik7QnQucG9seWZpbGwoIkFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe3JldHVybiBuPU51bWJlcihuKSxuPT09MS8wfHxuPT09LTEvMD9uOm58MH1yZXR1cm4gdHx8ZnVuY3Rpb24obixvLHIpe3ZhciBpPXRoaXMubGVuZ3RoO2lmKG49ZShuKSxvPWUobykscj1yPT09dm9pZCAwP2k6ZShyKSxuPTA+bj9NYXRoLm1heChpK24sMCk6TWF0aC5taW4obixpKSxvPTA+bz9NYXRoLm1heChpK28sMCk6TWF0aC5taW4obyxpKSxyPTA+cj9NYXRoLm1heChpK3IsMCk6TWF0aC5taW4ocixpKSxuPG8pZm9yKDtvPHI7KW8gaW4gdGhpcz90aGlzW24rK109dGhpc1tvKytdOihkZWxldGUgdGhpc1tuKytdLG8rKyk7ZWxzZSBmb3Iocj1NYXRoLm1pbihyLGkrby1uKSxuKz1yLW87cj5vOyktLXIgaW4gdGhpcz90aGlzWy0tbl09dGhpc1tyXTpkZWxldGUgdGhpc1stLW5dO3JldHVybiB0aGlzfX0sImVzNiIsImVzMyIpO0J0LnR5cGVkQXJyYXlDb3B5V2l0aGluPWZ1bmN0aW9uKHQpe3JldHVybiB0fHxBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbn07QnQucG9seWZpbGwoIkludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsQnQudHlwZWRBcnJheUNvcHlXaXRoaW4sImVzNiIsImVzNSIpO0J0LnBvbHlmaWxsKCJVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixCdC50eXBlZEFycmF5Q29weVdpdGhpbiwiZXM2IiwiZXM1Iik7QnQucG9seWZpbGwoIlVpbnQ4Q2xhbXBlZEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixCdC50eXBlZEFycmF5Q29weVdpdGhpbiwiZXM2IiwiZXM1Iik7QnQucG9seWZpbGwoIkludDE2QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4iLEJ0LnR5cGVkQXJyYXlDb3B5V2l0aGluLCJlczYiLCJlczUiKTtCdC5wb2x5ZmlsbCgiVWludDE2QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4iLEJ0LnR5cGVkQXJyYXlDb3B5V2l0aGluLCJlczYiLCJlczUiKTtCdC5wb2x5ZmlsbCgiSW50MzJBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsQnQudHlwZWRBcnJheUNvcHlXaXRoaW4sImVzNiIsImVzNSIpO0J0LnBvbHlmaWxsKCJVaW50MzJBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsQnQudHlwZWRBcnJheUNvcHlXaXRoaW4sImVzNiIsImVzNSIpO0J0LnBvbHlmaWxsKCJGbG9hdDMyQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4iLEJ0LnR5cGVkQXJyYXlDb3B5V2l0aGluLCJlczYiLCJlczUiKTtCdC5wb2x5ZmlsbCgiRmxvYXQ2NEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixCdC50eXBlZEFycmF5Q29weVdpdGhpbiwiZXM2IiwiZXM1Iik7dmFyIF9nPWZ1bmN0aW9uKCl7dmFyIHQ9dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdD9kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYzp2b2lkIDA7cmV0dXJuIHR5cGVvZiBfX2ZpbGVuYW1lPCJ1IiYmKHQ9dHx8X19maWxlbmFtZSksZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih6KXtyZXR1cm4gUi5sb2NhdGVGaWxlP1IubG9jYXRlRmlsZSh6LF90KTpfdCt6fWZ1bmN0aW9uIG8oeixXLGV0KXt2YXIgTXQ9VytldDtmb3IoZXQ9Vzt6W2V0XSYmIShldD49TXQpOykrK2V0O2lmKDE2PGV0LVcmJnouYnVmZmVyJiZBZSlyZXR1cm4gQWUuZGVjb2RlKHouc3ViYXJyYXkoVyxldCkpO2ZvcihNdD0iIjtXPGV0Oyl7dmFyIGxlPXpbVysrXTtpZihsZSYxMjgpe3ZhciB3ZT16W1crK10mNjM7aWYoKGxlJjIyNCk9PTE5MilNdCs9U3RyaW5nLmZyb21DaGFyQ29kZSgobGUmMzEpPDw2fHdlKTtlbHNle3ZhciBUaT16W1crK10mNjM7bGU9KGxlJjI0MCk9PTIyND8obGUmMTUpPDwxMnx3ZTw8NnxUaToobGUmNyk8PDE4fHdlPDwxMnxUaTw8Nnx6W1crK10mNjMsNjU1MzY+bGU/TXQrPVN0cmluZy5mcm9tQ2hhckNvZGUobGUpOihsZS09NjU1MzYsTXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8bGU+PjEwLDU2MzIwfGxlJjEwMjMpKX19ZWxzZSBNdCs9U3RyaW5nLmZyb21DaGFyQ29kZShsZSl9cmV0dXJuIE10fWZ1bmN0aW9uIHIoeixXKXtyZXR1cm4gej9vKHVuLHosVyk6IiJ9ZnVuY3Rpb24gaSgpe3ZhciB6PUp0LmJ1ZmZlcjtSLkhFQVA4PUVlPW5ldyBJbnQ4QXJyYXkoeiksUi5IRUFQMTY9bmV3IEludDE2QXJyYXkoeiksUi5IRUFQMzI9VWU9bmV3IEludDMyQXJyYXkoeiksUi5IRUFQVTg9dW49bmV3IFVpbnQ4QXJyYXkoeiksUi5IRUFQVTE2PW5ldyBVaW50MTZBcnJheSh6KSxSLkhFQVBVMzI9YmU9bmV3IFVpbnQzMkFycmF5KHopLFIuSEVBUEYzMj1uZXcgRmxvYXQzMkFycmF5KHopLFIuSEVBUEY2ND1uZXcgRmxvYXQ2NEFycmF5KHopfWZ1bmN0aW9uIHMoeil7dGhyb3cgUi5vbkFib3J0JiZSLm9uQWJvcnQoeiksej0iQWJvcnRlZCgiK3orIikiLGZlKHopLHhlPSEwLHo9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcih6KyIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uIiksZnQoeiksen1mdW5jdGlvbiBmKHope3RyeXtpZih6PT1zbiYmUXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFF0KTtpZihoZSlyZXR1cm4gaGUoeik7dGhyb3ciYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifWNhdGNoKFcpe3MoVyl9fWZ1bmN0aW9uIHUoKXtpZighUXQmJihOdHx8T3QpKXtpZih0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiImJiFzbi5zdGFydHNXaXRoKCJmaWxlOi8vIikpcmV0dXJuIGZldGNoKHNuLHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbih6KXtpZighei5vayl0aHJvdyJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICciK3NuKyInIjtyZXR1cm4gei5hcnJheUJ1ZmZlcigpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gZihzbil9KTtpZihjZSlyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oeixXKXtjZShzbixmdW5jdGlvbihldCl7eihuZXcgVWludDhBcnJheShldCkpfSxXKX0pfXJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGYoc24pfSl9ZnVuY3Rpb24gYyh6KXtmb3IoOzA8ei5sZW5ndGg7KXouc2hpZnQoKShSKX1mdW5jdGlvbiBsKHope3RoaXMuZXhjUHRyPXosdGhpcy5wdHI9ei0yNCx0aGlzLnNldF90eXBlPWZ1bmN0aW9uKFcpe2JlW3RoaXMucHRyKzQ+PjJdPVd9LHRoaXMuZ2V0X3R5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gYmVbdGhpcy5wdHIrND4+Ml19LHRoaXMuc2V0X2Rlc3RydWN0b3I9ZnVuY3Rpb24oVyl7YmVbdGhpcy5wdHIrOD4+Ml09V30sdGhpcy5nZXRfZGVzdHJ1Y3Rvcj1mdW5jdGlvbigpe3JldHVybiBiZVt0aGlzLnB0cis4Pj4yXX0sdGhpcy5zZXRfcmVmY291bnQ9ZnVuY3Rpb24oVyl7VWVbdGhpcy5wdHI+PjJdPVd9LHRoaXMuc2V0X2NhdWdodD1mdW5jdGlvbihXKXtFZVt0aGlzLnB0cisxMj4+MF09Vz8xOjB9LHRoaXMuZ2V0X2NhdWdodD1mdW5jdGlvbigpe3JldHVybiBFZVt0aGlzLnB0cisxMj4+MF0hPTB9LHRoaXMuc2V0X3JldGhyb3duPWZ1bmN0aW9uKFcpe0VlW3RoaXMucHRyKzEzPj4wXT1XPzE6MH0sdGhpcy5nZXRfcmV0aHJvd249ZnVuY3Rpb24oKXtyZXR1cm4gRWVbdGhpcy5wdHIrMTM+PjBdIT0wfSx0aGlzLmluaXQ9ZnVuY3Rpb24oVyxldCl7dGhpcy5zZXRfYWRqdXN0ZWRfcHRyKDApLHRoaXMuc2V0X3R5cGUoVyksdGhpcy5zZXRfZGVzdHJ1Y3RvcihldCksdGhpcy5zZXRfcmVmY291bnQoMCksdGhpcy5zZXRfY2F1Z2h0KCExKSx0aGlzLnNldF9yZXRocm93bighMSl9LHRoaXMuYWRkX3JlZj1mdW5jdGlvbigpe1VlW3RoaXMucHRyPj4yXSs9MX0sdGhpcy5yZWxlYXNlX3JlZj1mdW5jdGlvbigpe3ZhciBXPVVlW3RoaXMucHRyPj4yXTtyZXR1cm4gVWVbdGhpcy5wdHI+PjJdPVctMSxXPT09MX0sdGhpcy5zZXRfYWRqdXN0ZWRfcHRyPWZ1bmN0aW9uKFcpe2JlW3RoaXMucHRyKzE2Pj4yXT1XfSx0aGlzLmdldF9hZGp1c3RlZF9wdHI9ZnVuY3Rpb24oKXtyZXR1cm4gYmVbdGhpcy5wdHIrMTY+PjJdfSx0aGlzLmdldF9leGNlcHRpb25fcHRyPWZ1bmN0aW9uKCl7aWYoRmwodGhpcy5nZXRfdHlwZSgpKSlyZXR1cm4gYmVbdGhpcy5leGNQdHI+PjJdO3ZhciBXPXRoaXMuZ2V0X2FkanVzdGVkX3B0cigpO3JldHVybiBXIT09MD9XOnRoaXMuZXhjUHRyfX1mdW5jdGlvbiBwKCl7ZnVuY3Rpb24geigpe2lmKCFyZiYmKHJmPSEwLFIuY2FsbGVkUnVuPSEwLCF4ZSkpe2lmKG9lPSEwLGMocG4pLFEoUiksUi5vblJ1bnRpbWVJbml0aWFsaXplZCYmUi5vblJ1bnRpbWVJbml0aWFsaXplZCgpLFIucG9zdFJ1bilmb3IodHlwZW9mIFIucG9zdFJ1bj09ImZ1bmN0aW9uIiYmKFIucG9zdFJ1bj1bUi5wb3N0UnVuXSk7Ui5wb3N0UnVuLmxlbmd0aDspVG4udW5zaGlmdChSLnBvc3RSdW4uc2hpZnQoKSk7YyhUbil9fWlmKCEoMDwkdCkpe2lmKFIucHJlUnVuKWZvcih0eXBlb2YgUi5wcmVSdW49PSJmdW5jdGlvbiImJihSLnByZVJ1bj1bUi5wcmVSdW5dKTtSLnByZVJ1bi5sZW5ndGg7KWxuLnVuc2hpZnQoUi5wcmVSdW4uc2hpZnQoKSk7YyhsbiksMDwkdHx8KFIuc2V0U3RhdHVzPyhSLnNldFN0YXR1cygiUnVubmluZy4uLiIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ui5zZXRTdGF0dXMoIiIpfSwxKSx6KCl9LDEpKTp6KCkpfX1mdW5jdGlvbiBkKCl7fWZ1bmN0aW9uIG0oeil7cmV0dXJuKHp8fGQpLl9fY2FjaGVfX31mdW5jdGlvbiBfKHosVyl7dmFyIGV0PW0oVyksTXQ9ZXRbel07cmV0dXJuIE10fHwoTXQ9T2JqZWN0LmNyZWF0ZSgoV3x8ZCkucHJvdG90eXBlKSxNdC5wdHI9eixldFt6XT1NdCl9ZnVuY3Rpb24gZyh6KXtpZih0eXBlb2Ygej09InN0cmluZyIpe2Zvcih2YXIgVz0wLGV0PTA7ZXQ8ei5sZW5ndGg7KytldCl7dmFyIE10PXouY2hhckNvZGVBdChldCk7MTI3Pj1NdD9XKys6MjA0Nz49TXQ/Vys9Mjo1NTI5Njw9TXQmJjU3MzQzPj1NdD8oVys9NCwrK2V0KTpXKz0zfWlmKFc9QXJyYXkoVysxKSxldD0wLE10PVcubGVuZ3RoLDA8TXQpe010PWV0K010LTE7Zm9yKHZhciBsZT0wO2xlPHoubGVuZ3RoOysrbGUpe3ZhciB3ZT16LmNoYXJDb2RlQXQobGUpO2lmKDU1Mjk2PD13ZSYmNTczNDM+PXdlKXt2YXIgVGk9ei5jaGFyQ29kZUF0KCsrbGUpO3dlPTY1NTM2Kygod2UmMTAyMyk8PDEwKXxUaSYxMDIzfWlmKDEyNz49d2Upe2lmKGV0Pj1NdClicmVhaztXW2V0KytdPXdlfWVsc2V7aWYoMjA0Nz49d2Upe2lmKGV0KzE+PU10KWJyZWFrO1dbZXQrK109MTkyfHdlPj42fWVsc2V7aWYoNjU1MzU+PXdlKXtpZihldCsyPj1NdClicmVhaztXW2V0KytdPTIyNHx3ZT4+MTJ9ZWxzZXtpZihldCszPj1NdClicmVhaztXW2V0KytdPTI0MHx3ZT4+MTgsV1tldCsrXT0xMjh8d2U+PjEyJjYzfVdbZXQrK109MTI4fHdlPj42JjYzfVdbZXQrK109MTI4fHdlJjYzfX1XW2V0XT0wfXJldHVybiB6PVJlLmFsbG9jKFcsRWUpLFJlLmNvcHkoVyxFZSx6KSx6fXJldHVybiB6fWZ1bmN0aW9uIGIoeil7aWYodHlwZW9mIHo9PSJvYmplY3QiKXt2YXIgVz1SZS5hbGxvYyh6LEVlKTtyZXR1cm4gUmUuY29weSh6LEVlLFcpLFd9cmV0dXJuIHp9ZnVuY3Rpb24gTygpe3Rocm93ImNhbm5vdCBjb25zdHJ1Y3QgYSBWb2lkUHRyLCBubyBjb25zdHJ1Y3RvciBpbiBJREwifWZ1bmN0aW9uIFQoKXt0aGlzLnB0cj1jbigpLG0oVClbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gRSgpe3RoaXMucHRyPXVvKCksbShFKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiB3KCl7dGhpcy5wdHI9bG8oKSxtKHcpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIEMoKXt0aGlzLnB0cj1OZSgpLG0oQylbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gTigpe3RoaXMucHRyPU5zKCksbShOKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBJKCl7dGhpcy5wdHI9bm8oKSxtKEkpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIEwoKXt0aGlzLnB0cj1JYygpLG0oTClbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gdigpe3RoaXMucHRyPXJyKCksbSh2KVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBEKCl7dGhpcy5wdHI9RGMoKSxtKEQpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIFUoKXt0aHJvdyJjYW5ub3QgY29uc3RydWN0IGEgU3RhdHVzLCBubyBjb25zdHJ1Y3RvciBpbiBJREwifWZ1bmN0aW9uIEEoKXt0aGlzLnB0cj1FdSgpLG0oQSlbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gUygpe3RoaXMucHRyPUxjKCksbShTKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBQKCl7dGhpcy5wdHI9WGEoKSxtKFApW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIEYoKXt0aGlzLnB0cj1CYygpLG0oRilbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gaigpe3RoaXMucHRyPUl1KCksbShqKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBIKCl7dGhpcy5wdHI9THUoKSxtKEgpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIGsoKXt0aGlzLnB0cj1KaSgpLG0oaylbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gSygpe3RoaXMucHRyPUd1KCksbShLKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBYKCl7dGhpcy5wdHI9SmEoKSxtKFgpW3RoaXMucHRyXT10aGlzfWU9ZT09PXZvaWQgMD97fTplO3ZhciBSPXR5cGVvZiBlPCJ1Ij9lOnt9LFEsZnQ7Ui5yZWFkeT1uZXcgUHJvbWlzZShmdW5jdGlvbih6LFcpe1E9eixmdD1XfSk7dmFyIHB0PSExLGd0PSExO1Iub25SdW50aW1lSW5pdGlhbGl6ZWQ9ZnVuY3Rpb24oKXtwdD0hMCxndCYmdHlwZW9mIFIub25Nb2R1bGVMb2FkZWQ9PSJmdW5jdGlvbiImJlIub25Nb2R1bGVMb2FkZWQoUil9LFIub25Nb2R1bGVQYXJzZWQ9ZnVuY3Rpb24oKXtndD0hMCxwdCYmdHlwZW9mIFIub25Nb2R1bGVMb2FkZWQ9PSJmdW5jdGlvbiImJlIub25Nb2R1bGVMb2FkZWQoUil9LFIuaXNWZXJzaW9uU3VwcG9ydGVkPWZ1bmN0aW9uKHope3JldHVybiB0eXBlb2YgeiE9InN0cmluZyI/ITE6KHo9ei5zcGxpdCgiLiIpLDI+ei5sZW5ndGh8fDM8ei5sZW5ndGg/ITE6elswXT09MSYmMDw9elsxXSYmNT49elsxXT8hMDohKHpbMF0hPTB8fDEwPHpbMV0pKX07dmFyIGl0PU9iamVjdC5hc3NpZ24oe30sUiksTnQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCIsT3Q9dHlwZW9mIGltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiIseHQ9dHlwZW9mIHByb2Nlc3M9PSJvYmplY3QiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucz09Im9iamVjdCImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGU9PSJzdHJpbmciLF90PSIiO2lmKHh0KXt2YXIgZHQ9RG8oImZzIiksVnQ9RG8oInBhdGgiKTtfdD1PdD9WdC5kaXJuYW1lKF90KSsiLyI6X19kaXJuYW1lKyIvIjt2YXIgenQ9ZnVuY3Rpb24oeixXKXtyZXR1cm4gej16LnN0YXJ0c1dpdGgoImZpbGU6Ly8iKT9uZXcgVVJMKHopOlZ0Lm5vcm1hbGl6ZSh6KSxkdC5yZWFkRmlsZVN5bmMoeixXP3ZvaWQgMDoidXRmOCIpfSxoZT1mdW5jdGlvbih6KXtyZXR1cm4gej16dCh6LCEwKSx6LmJ1ZmZlcnx8KHo9bmV3IFVpbnQ4QXJyYXkoeikpLHp9LGNlPWZ1bmN0aW9uKHosVyxldCl7ej16LnN0YXJ0c1dpdGgoImZpbGU6Ly8iKT9uZXcgVVJMKHopOlZ0Lm5vcm1hbGl6ZSh6KSxkdC5yZWFkRmlsZSh6LGZ1bmN0aW9uKE10LGxlKXtNdD9ldChNdCk6VyhsZS5idWZmZXIpfSl9OzE8cHJvY2Vzcy5hcmd2Lmxlbmd0aCYmcHJvY2Vzcy5hcmd2WzFdLnJlcGxhY2UoL1xcL2csIi8iKSxwcm9jZXNzLmFyZ3Yuc2xpY2UoMiksUi5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIltFbXNjcmlwdGVuIE1vZHVsZSBvYmplY3RdIn19ZWxzZShOdHx8T3QpJiYoT3Q/X3Q9c2VsZi5sb2NhdGlvbi5ocmVmOnR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQmJihfdD1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyksdCYmKF90PXQpLF90PV90LmluZGV4T2YoImJsb2I6IikhPT0wP190LnN1YnN0cigwLF90LnJlcGxhY2UoL1s/I10uKi8sIiIpLmxhc3RJbmRleE9mKCIvIikrMSk6IiIsenQ9ZnVuY3Rpb24oeil7dmFyIFc9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiBXLm9wZW4oIkdFVCIseiwhMSksVy5zZW5kKG51bGwpLFcucmVzcG9uc2VUZXh0fSxPdCYmKGhlPWZ1bmN0aW9uKHope3ZhciBXPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gVy5vcGVuKCJHRVQiLHosITEpLFcucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsVy5zZW5kKG51bGwpLG5ldyBVaW50OEFycmF5KFcucmVzcG9uc2UpfSksY2U9ZnVuY3Rpb24oeixXLGV0KXt2YXIgTXQ9bmV3IFhNTEh0dHBSZXF1ZXN0O010Lm9wZW4oIkdFVCIseiwhMCksTXQucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsTXQub25sb2FkPWZ1bmN0aW9uKCl7TXQuc3RhdHVzPT0yMDB8fE10LnN0YXR1cz09MCYmTXQucmVzcG9uc2U/VyhNdC5yZXNwb25zZSk6ZXQoKX0sTXQub25lcnJvcj1ldCxNdC5zZW5kKG51bGwpfSk7dmFyIHBlPVIucHJpbnR8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksZmU9Ui5wcmludEVycnx8Y29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7T2JqZWN0LmFzc2lnbihSLGl0KSxpdD1udWxsO3ZhciBRdDtSLndhc21CaW5hcnkmJihRdD1SLndhc21CaW5hcnkpLHR5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCImJnMoIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWQiKTt2YXIgSnQseGU9ITEsQWU9dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9uZXcgVGV4dERlY29kZXIoInV0ZjgiKTp2b2lkIDAsRWUsdW4sVWUsYmUsbG49W10scG49W10sVG49W10sb2U9ITEsJHQ9MCxWZT1udWxsLGRuPW51bGwsc249ImRyYWNvX2RlY29kZXIud2FzbSI7c24uc3RhcnRzV2l0aCgiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCIpfHwoc249bihzbikpO3ZhciBtbj0wLGZvPVtudWxsLFtdLFtdXSxIbj17YjpmdW5jdGlvbih6LFcsZXQpe3Rocm93IG5ldyBsKHopLmluaXQoVyxldCksbW4rKyx6fSxhOmZ1bmN0aW9uKCl7cygiIil9LGc6ZnVuY3Rpb24oeixXLGV0KXt1bi5jb3B5V2l0aGluKHosVyxXK2V0KX0sZTpmdW5jdGlvbih6KXt2YXIgVz11bi5sZW5ndGg7aWYoej4+Pj0wLDIxNDc0ODM2NDg8eilyZXR1cm4hMTtmb3IodmFyIGV0PTE7ND49ZXQ7ZXQqPTIpe3ZhciBNdD1XKigxKy4yL2V0KTtNdD1NYXRoLm1pbihNdCx6KzEwMDY2MzI5Nik7dmFyIGxlPU1hdGg7TXQ9TWF0aC5tYXgoeixNdCksbGU9bGUubWluLmNhbGwobGUsMjE0NzQ4MzY0OCxNdCsoNjU1MzYtTXQlNjU1MzYpJTY1NTM2KTt0OntNdD1KdC5idWZmZXI7dHJ5e0p0Lmdyb3cobGUtTXQuYnl0ZUxlbmd0aCs2NTUzNT4+PjE2KSxpKCk7dmFyIHdlPTE7YnJlYWsgdH1jYXRjaHt9d2U9dm9pZCAwfWlmKHdlKXJldHVybiEwfXJldHVybiExfSxmOmZ1bmN0aW9uKHope3JldHVybiA1Mn0sZDpmdW5jdGlvbih6LFcsZXQsTXQsbGUpe3JldHVybiA3MH0sYzpmdW5jdGlvbih6LFcsZXQsTXQpe2Zvcih2YXIgbGU9MCx3ZT0wO3dlPGV0O3dlKyspe3ZhciBUaT1iZVtXPj4yXSx6Yz1iZVtXKzQ+PjJdO1crPTg7Zm9yKHZhciBWPTA7Vjx6YztWKyspe3ZhciBHPXVuW1RpK1ZdLFk9Zm9bel07Rz09PTB8fEc9PT0xMD8oKHo9PT0xP3BlOmZlKShvKFksMCkpLFkubGVuZ3RoPTApOlkucHVzaChHKX1sZSs9emN9cmV0dXJuIGJlW010Pj4yXT1sZSwwfX07KGZ1bmN0aW9uKCl7ZnVuY3Rpb24geihsZSx3ZSl7Ui5hc209bGUuZXhwb3J0cyxKdD1SLmFzbS5oLGkoKSxwbi51bnNoaWZ0KFIuYXNtLmkpLCR0LS0sUi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZSLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoJHQpLCR0PT0wJiYoVmUhPT1udWxsJiYoY2xlYXJJbnRlcnZhbChWZSksVmU9bnVsbCksZG4mJihsZT1kbixkbj1udWxsLGxlKCkpKX1mdW5jdGlvbiBXKGxlKXt6KGxlLmluc3RhbmNlKX1mdW5jdGlvbiBldChsZSl7cmV0dXJuIHUoKS50aGVuKGZ1bmN0aW9uKHdlKXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUod2UsTXQpfSkudGhlbihmdW5jdGlvbih3ZSl7cmV0dXJuIHdlfSkudGhlbihsZSxmdW5jdGlvbih3ZSl7ZmUoImZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICIrd2UpLHMod2UpfSl9dmFyIE10PXthOkhufTtpZigkdCsrLFIubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmUi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKCR0KSxSLmluc3RhbnRpYXRlV2FzbSl0cnl7cmV0dXJuIFIuaW5zdGFudGlhdGVXYXNtKE10LHopfWNhdGNoKGxlKXtmZSgiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogIitsZSksZnQobGUpfXJldHVybiBmdW5jdGlvbigpe3JldHVybiBRdHx8dHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nIT0iZnVuY3Rpb24ifHxzbi5zdGFydHNXaXRoKCJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIil8fHNuLnN0YXJ0c1dpdGgoImZpbGU6Ly8iKXx8eHR8fHR5cGVvZiBmZXRjaCE9ImZ1bmN0aW9uIj9ldChXKTpmZXRjaChzbix7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24obGUpe3JldHVybiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhsZSxNdCkudGhlbihXLGZ1bmN0aW9uKHdlKXtyZXR1cm4gZmUoIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAiK3dlKSxmZSgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSxldChXKX0pfSl9KCkuY2F0Y2goZnQpLHt9fSkoKTt2YXIgWmU9Ui5fZW1zY3JpcHRlbl9iaW5kX1ZvaWRQdHJfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihaZT1SLl9lbXNjcmlwdGVuX2JpbmRfVm9pZFB0cl9fX2Rlc3Ryb3lfX18wPVIuYXNtLmspLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sY249Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJCdWZmZXJfRGVjb2RlckJ1ZmZlcl8wPWZ1bmN0aW9uKCl7cmV0dXJuKGNuPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyQnVmZmVyX0RlY29kZXJCdWZmZXJfMD1SLmFzbS5sKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEtlPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyQnVmZmVyX0luaXRfMj1mdW5jdGlvbigpe3JldHVybihLZT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2RlckJ1ZmZlcl9Jbml0XzI9Ui5hc20ubSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxobj1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2RlckJ1ZmZlcl9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKGhuPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyQnVmZmVyX19fZGVzdHJveV9fXzA9Ui5hc20ubikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx1bz1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlVHJhbnNmb3JtRGF0YV9BdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhXzA9ZnVuY3Rpb24oKXtyZXR1cm4odW89Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVRyYW5zZm9ybURhdGFfQXR0cmlidXRlVHJhbnNmb3JtRGF0YV8wPVIuYXNtLm8pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0scW49Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVRyYW5zZm9ybURhdGFfdHJhbnNmb3JtX3R5cGVfMD1mdW5jdGlvbigpe3JldHVybihxbj1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlVHJhbnNmb3JtRGF0YV90cmFuc2Zvcm1fdHlwZV8wPVIuYXNtLnApLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sS249Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVRyYW5zZm9ybURhdGFfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihLbj1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlVHJhbnNmb3JtRGF0YV9fX2Rlc3Ryb3lfX18wPVIuYXNtLnEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sbG89Ui5fZW1zY3JpcHRlbl9iaW5kX0dlb21ldHJ5QXR0cmlidXRlX0dlb21ldHJ5QXR0cmlidXRlXzA9ZnVuY3Rpb24oKXtyZXR1cm4obG89Ui5fZW1zY3JpcHRlbl9iaW5kX0dlb21ldHJ5QXR0cmlidXRlX0dlb21ldHJ5QXR0cmlidXRlXzA9Ui5hc20ucikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxrZT1SLl9lbXNjcmlwdGVuX2JpbmRfR2VvbWV0cnlBdHRyaWJ1dGVfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihrZT1SLl9lbXNjcmlwdGVuX2JpbmRfR2VvbWV0cnlBdHRyaWJ1dGVfX19kZXN0cm95X19fMD1SLmFzbS5zKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE5lPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9Qb2ludEF0dHJpYnV0ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKE5lPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9Qb2ludEF0dHJpYnV0ZV8wPVIuYXNtLnQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRG49Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX3NpemVfMD1mdW5jdGlvbigpe3JldHVybihEbj1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfc2l6ZV8wPVIuYXNtLnUpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sV249Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX0dldEF0dHJpYnV0ZVRyYW5zZm9ybURhdGFfMD1mdW5jdGlvbigpe3JldHVybihXbj1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfR2V0QXR0cmlidXRlVHJhbnNmb3JtRGF0YV8wPVIuYXNtLnYpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0scW89Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX2F0dHJpYnV0ZV90eXBlXzA9ZnVuY3Rpb24oKXtyZXR1cm4ocW89Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX2F0dHJpYnV0ZV90eXBlXzA9Ui5hc20udykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxybj1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfZGF0YV90eXBlXzA9ZnVuY3Rpb24oKXtyZXR1cm4ocm49Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX2RhdGFfdHlwZV8wPVIuYXNtLngpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sT249Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX251bV9jb21wb25lbnRzXzA9ZnVuY3Rpb24oKXtyZXR1cm4oT249Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX251bV9jb21wb25lbnRzXzA9Ui5hc20ueSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx1cj1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfbm9ybWFsaXplZF8wPWZ1bmN0aW9uKCl7cmV0dXJuKHVyPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9ub3JtYWxpemVkXzA9Ui5hc20ueikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxabj1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfYnl0ZV9zdHJpZGVfMD1mdW5jdGlvbigpe3JldHVybihabj1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfYnl0ZV9zdHJpZGVfMD1SLmFzbS5BKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEtvPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9ieXRlX29mZnNldF8wPWZ1bmN0aW9uKCl7cmV0dXJuKEtvPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9ieXRlX29mZnNldF8wPVIuYXNtLkIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTnI9Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX3VuaXF1ZV9pZF8wPWZ1bmN0aW9uKCl7cmV0dXJuKE5yPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV91bmlxdWVfaWRfMD1SLmFzbS5DKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE1zPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKE1zPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9fX2Rlc3Ryb3lfX18wPVIuYXNtLkQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTnM9Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fMD1mdW5jdGlvbigpe3JldHVybihOcz1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV8wPVIuYXNtLkUpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sWGk9Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9Jbml0RnJvbUF0dHJpYnV0ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKFhpPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fSW5pdEZyb21BdHRyaWJ1dGVfMT1SLmFzbS5GKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LElyPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fcXVhbnRpemF0aW9uX2JpdHNfMD1mdW5jdGlvbigpe3JldHVybihJcj1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX3F1YW50aXphdGlvbl9iaXRzXzA9Ui5hc20uRykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxZaT1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX21pbl92YWx1ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKFlpPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fbWluX3ZhbHVlXzE9Ui5hc20uSCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxJcz1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX3JhbmdlXzA9ZnVuY3Rpb24oKXtyZXR1cm4oSXM9Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9yYW5nZV8wPVIuYXNtLkkpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQWk9Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKEFpPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fX19kZXN0cm95X19fMD1SLmFzbS5KKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LG5vPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fMD1mdW5jdGlvbigpe3JldHVybihubz1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV9BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtXzA9Ui5hc20uSykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxwbz1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV9Jbml0RnJvbUF0dHJpYnV0ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKHBvPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtX0luaXRGcm9tQXR0cmlidXRlXzE9Ui5hc20uTCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx2cj1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV9xdWFudGl6YXRpb25fYml0c18wPWZ1bmN0aW9uKCl7cmV0dXJuKHZyPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtX3F1YW50aXphdGlvbl9iaXRzXzA9Ui5hc20uTSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxOYz1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKE5jPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtX19fZGVzdHJveV9fXzA9Ui5hc20uTikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxJYz1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRDbG91ZF9Qb2ludENsb3VkXzA9ZnVuY3Rpb24oKXtyZXR1cm4oSWM9Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50Q2xvdWRfUG9pbnRDbG91ZF8wPVIuYXNtLk8pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTG49Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50Q2xvdWRfbnVtX2F0dHJpYnV0ZXNfMD1mdW5jdGlvbigpe3JldHVybihMbj1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRDbG91ZF9udW1fYXR0cmlidXRlc18wPVIuYXNtLlApLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sYmk9Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50Q2xvdWRfbnVtX3BvaW50c18wPWZ1bmN0aW9uKCl7cmV0dXJuKGJpPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludENsb3VkX251bV9wb2ludHNfMD1SLmFzbS5RKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEllPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludENsb3VkX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oSWU9Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50Q2xvdWRfX19kZXN0cm95X19fMD1SLmFzbS5SKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHJyPVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXNoX01lc2hfMD1mdW5jdGlvbigpe3JldHVybihycj1SLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9NZXNoXzA9Ui5hc20uUykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxBdT1SLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9udW1fZmFjZXNfMD1mdW5jdGlvbigpe3JldHVybihBdT1SLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9udW1fZmFjZXNfMD1SLmFzbS5UKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGJ1PVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXNoX251bV9hdHRyaWJ1dGVzXzA9ZnVuY3Rpb24oKXtyZXR1cm4oYnU9Ui5fZW1zY3JpcHRlbl9iaW5kX01lc2hfbnVtX2F0dHJpYnV0ZXNfMD1SLmFzbS5VKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHd1PVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXNoX251bV9wb2ludHNfMD1mdW5jdGlvbigpe3JldHVybih3dT1SLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9udW1fcG9pbnRzXzA9Ui5hc20uVikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx2Yz1SLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKHZjPVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXNoX19fZGVzdHJveV9fXzA9Ui5hc20uVykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxEYz1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFfTWV0YWRhdGFfMD1mdW5jdGlvbigpe3JldHVybihEYz1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFfTWV0YWRhdGFfMD1SLmFzbS5YKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEthPVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKEthPVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YV9fX2Rlc3Ryb3lfX18wPVIuYXNtLlkpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVHU9Ui5fZW1zY3JpcHRlbl9iaW5kX1N0YXR1c19jb2RlXzA9ZnVuY3Rpb24oKXtyZXR1cm4oVHU9Ui5fZW1zY3JpcHRlbl9iaW5kX1N0YXR1c19jb2RlXzA9Ui5hc20uWikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxXYT1SLl9lbXNjcmlwdGVuX2JpbmRfU3RhdHVzX29rXzA9ZnVuY3Rpb24oKXtyZXR1cm4oV2E9Ui5fZW1zY3JpcHRlbl9iaW5kX1N0YXR1c19va18wPVIuYXNtLl8pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sJGk9Ui5fZW1zY3JpcHRlbl9iaW5kX1N0YXR1c19lcnJvcl9tc2dfMD1mdW5jdGlvbigpe3JldHVybigkaT1SLl9lbXNjcmlwdGVuX2JpbmRfU3RhdHVzX2Vycm9yX21zZ18wPVIuYXNtLiQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sT3U9Ui5fZW1zY3JpcHRlbl9iaW5kX1N0YXR1c19fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKE91PVIuX2Vtc2NyaXB0ZW5fYmluZF9TdGF0dXNfX19kZXN0cm95X19fMD1SLmFzbS5hYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29GbG9hdDMyQXJyYXlfRHJhY29GbG9hdDMyQXJyYXlfMD1mdW5jdGlvbigpe3JldHVybihFdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29GbG9hdDMyQXJyYXlfRHJhY29GbG9hdDMyQXJyYXlfMD1SLmFzbS5iYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxSdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29GbG9hdDMyQXJyYXlfR2V0VmFsdWVfMT1mdW5jdGlvbigpe3JldHVybihSdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29GbG9hdDMyQXJyYXlfR2V0VmFsdWVfMT1SLmFzbS5jYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxaaT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29GbG9hdDMyQXJyYXlfc2l6ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKFppPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0Zsb2F0MzJBcnJheV9zaXplXzA9Ui5hc20uZGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sUWk9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvRmxvYXQzMkFycmF5X19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oUWk9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvRmxvYXQzMkFycmF5X19fZGVzdHJveV9fXzA9Ui5hc20uZWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTGM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50OEFycmF5X0RyYWNvSW50OEFycmF5XzA9ZnVuY3Rpb24oKXtyZXR1cm4oTGM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50OEFycmF5X0RyYWNvSW50OEFycmF5XzA9Ui5hc20uZmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sU3U9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50OEFycmF5X0dldFZhbHVlXzE9ZnVuY3Rpb24oKXtyZXR1cm4oU3U9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50OEFycmF5X0dldFZhbHVlXzE9Ui5hc20uZ2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQ3U9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50OEFycmF5X3NpemVfMD1mdW5jdGlvbigpe3JldHVybihDdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQ4QXJyYXlfc2l6ZV8wPVIuYXNtLmhhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LERyPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDhBcnJheV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKERyPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDhBcnJheV9fX2Rlc3Ryb3lfX18wPVIuYXNtLmlhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFhhPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQ4QXJyYXlfRHJhY29VSW50OEFycmF5XzA9ZnVuY3Rpb24oKXtyZXR1cm4oWGE9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDhBcnJheV9EcmFjb1VJbnQ4QXJyYXlfMD1SLmFzbS5qYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxZYT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50OEFycmF5X0dldFZhbHVlXzE9ZnVuY3Rpb24oKXtyZXR1cm4oWWE9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDhBcnJheV9HZXRWYWx1ZV8xPVIuYXNtLmthKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEZjPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQ4QXJyYXlfc2l6ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKEZjPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQ4QXJyYXlfc2l6ZV8wPVIuYXNtLmxhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHh1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQ4QXJyYXlfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybih4dT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50OEFycmF5X19fZGVzdHJveV9fXzA9Ui5hc20ubWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQmM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MTZBcnJheV9EcmFjb0ludDE2QXJyYXlfMD1mdW5jdGlvbigpe3JldHVybihCYz1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQxNkFycmF5X0RyYWNvSW50MTZBcnJheV8wPVIuYXNtLm5hKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFB1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDE2QXJyYXlfR2V0VmFsdWVfMT1mdW5jdGlvbigpe3JldHVybihQdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQxNkFycmF5X0dldFZhbHVlXzE9Ui5hc20ub2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTXU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MTZBcnJheV9zaXplXzA9ZnVuY3Rpb24oKXtyZXR1cm4oTXU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MTZBcnJheV9zaXplXzA9Ui5hc20ucGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MTZBcnJheV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKE51PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDE2QXJyYXlfX19kZXN0cm95X19fMD1SLmFzbS5xYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxJdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MTZBcnJheV9EcmFjb1VJbnQxNkFycmF5XzA9ZnVuY3Rpb24oKXtyZXR1cm4oSXU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDE2QXJyYXlfRHJhY29VSW50MTZBcnJheV8wPVIuYXNtLnJhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHZ1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQxNkFycmF5X0dldFZhbHVlXzE9ZnVuY3Rpb24oKXtyZXR1cm4odnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDE2QXJyYXlfR2V0VmFsdWVfMT1SLmFzbS5zYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxEdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MTZBcnJheV9zaXplXzA9ZnVuY3Rpb24oKXtyZXR1cm4oRHU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDE2QXJyYXlfc2l6ZV8wPVIuYXNtLnRhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LCRhPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQxNkFycmF5X19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oJGE9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDE2QXJyYXlfX19kZXN0cm95X19fMD1SLmFzbS51YSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxMdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQzMkFycmF5X0RyYWNvSW50MzJBcnJheV8wPWZ1bmN0aW9uKCl7cmV0dXJuKEx1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDMyQXJyYXlfRHJhY29JbnQzMkFycmF5XzA9Ui5hc20udmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MzJBcnJheV9HZXRWYWx1ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKEZ1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDMyQXJyYXlfR2V0VmFsdWVfMT1SLmFzbS53YSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxCdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQzMkFycmF5X3NpemVfMD1mdW5jdGlvbigpe3JldHVybihCdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQzMkFycmF5X3NpemVfMD1SLmFzbS54YSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxVdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQzMkFycmF5X19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oVXU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MzJBcnJheV9fX2Rlc3Ryb3lfX18wPVIuYXNtLnlhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEppPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQzMkFycmF5X0RyYWNvVUludDMyQXJyYXlfMD1mdW5jdGlvbigpe3JldHVybihKaT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MzJBcnJheV9EcmFjb1VJbnQzMkFycmF5XzA9Ui5hc20uemEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDMyQXJyYXlfR2V0VmFsdWVfMT1mdW5jdGlvbigpe3JldHVybihWdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MzJBcnJheV9HZXRWYWx1ZV8xPVIuYXNtLkFhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGt1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQzMkFycmF5X3NpemVfMD1mdW5jdGlvbigpe3JldHVybihrdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MzJBcnJheV9zaXplXzA9Ui5hc20uQmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdnM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDMyQXJyYXlfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybih2cz1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MzJBcnJheV9fX2Rlc3Ryb3lfX18wPVIuYXNtLkNhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEd1PVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfTWV0YWRhdGFRdWVyaWVyXzA9ZnVuY3Rpb24oKXtyZXR1cm4oR3U9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9NZXRhZGF0YVF1ZXJpZXJfMD1SLmFzbS5EYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx6dT1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0hhc0VudHJ5XzI9ZnVuY3Rpb24oKXtyZXR1cm4oenU9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9IYXNFbnRyeV8yPVIuYXNtLkVhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGxyPVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0SW50RW50cnlfMj1mdW5jdGlvbigpe3JldHVybihscj1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldEludEVudHJ5XzI9Ui5hc20uRmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sWmE9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9HZXRJbnRFbnRyeUFycmF5XzM9ZnVuY3Rpb24oKXtyZXR1cm4oWmE9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9HZXRJbnRFbnRyeUFycmF5XzM9Ui5hc20uR2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sanU9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9HZXREb3VibGVFbnRyeV8yPWZ1bmN0aW9uKCl7cmV0dXJuKGp1PVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0RG91YmxlRW50cnlfMj1SLmFzbS5IYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxIdT1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldFN0cmluZ0VudHJ5XzI9ZnVuY3Rpb24oKXtyZXR1cm4oSHU9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9HZXRTdHJpbmdFbnRyeV8yPVIuYXNtLklhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHF1PVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfTnVtRW50cmllc18xPWZ1bmN0aW9uKCl7cmV0dXJuKHF1PVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfTnVtRW50cmllc18xPVIuYXNtLkphKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFdvPVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0RW50cnlOYW1lXzI9ZnVuY3Rpb24oKXtyZXR1cm4oV289Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9HZXRFbnRyeU5hbWVfMj1SLmFzbS5LYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxRYT1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oUWE9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9fX2Rlc3Ryb3lfX18wPVIuYXNtLkxhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEphPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0RlY29kZXJfMD1mdW5jdGlvbigpe3JldHVybihKYT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVyXzA9Ui5hc20uTWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRHM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfRGVjb2RlQXJyYXlUb1BvaW50Q2xvdWRfMz1mdW5jdGlvbigpe3JldHVybihEcz1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVBcnJheVRvUG9pbnRDbG91ZF8zPVIuYXNtLk5hKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEt1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0RlY29kZUFycmF5VG9NZXNoXzM9ZnVuY3Rpb24oKXtyZXR1cm4oS3U9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfRGVjb2RlQXJyYXlUb01lc2hfMz1SLmFzbS5PYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxVYz1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJZF8yPWZ1bmN0aW9uKCl7cmV0dXJuKFVjPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUlkXzI9Ui5hc20uUGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sV3U9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSWRCeU5hbWVfMj1mdW5jdGlvbigpe3JldHVybihXdT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJZEJ5TmFtZV8yPVIuYXNtLlFhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHRmPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUlkQnlNZXRhZGF0YUVudHJ5XzM9ZnVuY3Rpb24oKXtyZXR1cm4odGY9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSWRCeU1ldGFkYXRhRW50cnlfMz1SLmFzbS5SYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxlZj1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVfMj1mdW5jdGlvbigpe3JldHVybihlZj1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVfMj1SLmFzbS5TYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxYdT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVCeVVuaXF1ZUlkXzI9ZnVuY3Rpb24oKXtyZXR1cm4oWHU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlQnlVbmlxdWVJZF8yPVIuYXNtLlRhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFl1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldE1ldGFkYXRhXzE9ZnVuY3Rpb24oKXtyZXR1cm4oWXU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0TWV0YWRhdGFfMT1SLmFzbS5VYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxWYz1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVNZXRhZGF0YV8yPWZ1bmN0aW9uKCl7cmV0dXJuKFZjPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZU1ldGFkYXRhXzI9Ui5hc20uVmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQW89Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0RmFjZUZyb21NZXNoXzM9ZnVuY3Rpb24oKXtyZXR1cm4oQW89Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0RmFjZUZyb21NZXNoXzM9Ui5hc20uV2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sa2M9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0VHJpYW5nbGVTdHJpcHNGcm9tTWVzaF8yPWZ1bmN0aW9uKCl7cmV0dXJuKGtjPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldFRyaWFuZ2xlU3RyaXBzRnJvbU1lc2hfMj1SLmFzbS5YYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSwkdT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRUcmlhbmdsZXNVSW50MTZBcnJheV8zPWZ1bmN0aW9uKCl7cmV0dXJuKCR1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldFRyaWFuZ2xlc1VJbnQxNkFycmF5XzM9Ui5hc20uWWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sWnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0VHJpYW5nbGVzVUludDMyQXJyYXlfMz1mdW5jdGlvbigpe3JldHVybihadT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRUcmlhbmdsZXNVSW50MzJBcnJheV8zPVIuYXNtLlphKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFF1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUZsb2F0XzM9ZnVuY3Rpb24oKXtyZXR1cm4oUXU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlRmxvYXRfMz1SLmFzbS5fYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxwcj1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVGbG9hdEZvckFsbFBvaW50c18zPWZ1bmN0aW9uKCl7cmV0dXJuKHByPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUZsb2F0Rm9yQWxsUG9pbnRzXzM9Ui5hc20uJGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSW50Rm9yQWxsUG9pbnRzXzM9ZnVuY3Rpb24oKXtyZXR1cm4oSnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSW50Rm9yQWxsUG9pbnRzXzM9Ui5hc20uYWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdGw9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSW50OEZvckFsbFBvaW50c18zPWZ1bmN0aW9uKCl7cmV0dXJuKHRsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUludDhGb3JBbGxQb2ludHNfMz1SLmFzbS5iYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxlbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVVSW50OEZvckFsbFBvaW50c18zPWZ1bmN0aW9uKCl7cmV0dXJuKGVsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZVVJbnQ4Rm9yQWxsUG9pbnRzXzM9Ui5hc20uY2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTHM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSW50MTZGb3JBbGxQb2ludHNfMz1mdW5jdGlvbigpe3JldHVybihMcz1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJbnQxNkZvckFsbFBvaW50c18zPVIuYXNtLmRiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LG5sPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZVVJbnQxNkZvckFsbFBvaW50c18zPWZ1bmN0aW9uKCl7cmV0dXJuKG5sPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZVVJbnQxNkZvckFsbFBvaW50c18zPVIuYXNtLmViKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHdpPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUludDMyRm9yQWxsUG9pbnRzXzM9ZnVuY3Rpb24oKXtyZXR1cm4od2k9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSW50MzJGb3JBbGxQb2ludHNfMz1SLmFzbS5mYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxvbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVVSW50MzJGb3JBbGxQb2ludHNfMz1mdW5jdGlvbigpe3JldHVybihvbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVVSW50MzJGb3JBbGxQb2ludHNfMz1SLmFzbS5nYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxybD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVEYXRhQXJyYXlGb3JBbGxQb2ludHNfNT1mdW5jdGlvbigpe3JldHVybihybD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVEYXRhQXJyYXlGb3JBbGxQb2ludHNfNT1SLmFzbS5oYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxpbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9Ta2lwQXR0cmlidXRlVHJhbnNmb3JtXzE9ZnVuY3Rpb24oKXtyZXR1cm4oaWw9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfU2tpcEF0dHJpYnV0ZVRyYW5zZm9ybV8xPVIuYXNtLmliKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHNsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEVuY29kZWRHZW9tZXRyeVR5cGVfRGVwcmVjYXRlZF8xPWZ1bmN0aW9uKCl7cmV0dXJuKHNsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEVuY29kZWRHZW9tZXRyeVR5cGVfRGVwcmVjYXRlZF8xPVIuYXNtLmpiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGNsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0RlY29kZUJ1ZmZlclRvUG9pbnRDbG91ZF8yPWZ1bmN0aW9uKCl7cmV0dXJuKGNsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0RlY29kZUJ1ZmZlclRvUG9pbnRDbG91ZF8yPVIuYXNtLmtiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGFsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0RlY29kZUJ1ZmZlclRvTWVzaF8yPWZ1bmN0aW9uKCl7cmV0dXJuKGFsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0RlY29kZUJ1ZmZlclRvTWVzaF8yPVIuYXNtLmxiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGZsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oZmw9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfX19kZXN0cm95X19fMD1SLmFzbS5tYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx1bD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fQXR0cmlidXRlVHJhbnNmb3JtVHlwZV9BVFRSSUJVVEVfSU5WQUxJRF9UUkFOU0ZPUk09ZnVuY3Rpb24oKXtyZXR1cm4odWw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0F0dHJpYnV0ZVRyYW5zZm9ybVR5cGVfQVRUUklCVVRFX0lOVkFMSURfVFJBTlNGT1JNPVIuYXNtLm5iKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGxsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19BdHRyaWJ1dGVUcmFuc2Zvcm1UeXBlX0FUVFJJQlVURV9OT19UUkFOU0ZPUk09ZnVuY3Rpb24oKXtyZXR1cm4obGw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0F0dHJpYnV0ZVRyYW5zZm9ybVR5cGVfQVRUUklCVVRFX05PX1RSQU5TRk9STT1SLmFzbS5vYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxwbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fQXR0cmlidXRlVHJhbnNmb3JtVHlwZV9BVFRSSUJVVEVfUVVBTlRJWkFUSU9OX1RSQU5TRk9STT1mdW5jdGlvbigpe3JldHVybihwbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fQXR0cmlidXRlVHJhbnNmb3JtVHlwZV9BVFRSSUJVVEVfUVVBTlRJWkFUSU9OX1RSQU5TRk9STT1SLmFzbS5wYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxkbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fQXR0cmlidXRlVHJhbnNmb3JtVHlwZV9BVFRSSUJVVEVfT0NUQUhFRFJPTl9UUkFOU0ZPUk09ZnVuY3Rpb24oKXtyZXR1cm4oZGw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0F0dHJpYnV0ZVRyYW5zZm9ybVR5cGVfQVRUUklCVVRFX09DVEFIRURST05fVFJBTlNGT1JNPVIuYXNtLnFiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHRzPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX0lOVkFMSUQ9ZnVuY3Rpb24oKXtyZXR1cm4odHM9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfSU5WQUxJRD1SLmFzbS5yYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxtbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9QT1NJVElPTj1mdW5jdGlvbigpe3JldHVybihtbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9QT1NJVElPTj1SLmFzbS5zYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxobD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9OT1JNQUw9ZnVuY3Rpb24oKXtyZXR1cm4oaGw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfTk9STUFMPVIuYXNtLnRiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEZzPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX0NPTE9SPWZ1bmN0aW9uKCl7cmV0dXJuKEZzPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX0NPTE9SPVIuYXNtLnViKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEdjPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX1RFWF9DT09SRD1mdW5jdGlvbigpe3JldHVybihHYz1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9URVhfQ09PUkQ9Ui5hc20udmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sX2w9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfR0VORVJJQz1mdW5jdGlvbigpe3JldHVybihfbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9HRU5FUklDPVIuYXNtLndiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LG5mPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19FbmNvZGVkR2VvbWV0cnlUeXBlX0lOVkFMSURfR0VPTUVUUllfVFlQRT1mdW5jdGlvbigpe3JldHVybihuZj1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRW5jb2RlZEdlb21ldHJ5VHlwZV9JTlZBTElEX0dFT01FVFJZX1RZUEU9Ui5hc20ueGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0seWw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0VuY29kZWRHZW9tZXRyeVR5cGVfUE9JTlRfQ0xPVUQ9ZnVuY3Rpb24oKXtyZXR1cm4oeWw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0VuY29kZWRHZW9tZXRyeVR5cGVfUE9JTlRfQ0xPVUQ9Ui5hc20ueWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZ2w9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0VuY29kZWRHZW9tZXRyeVR5cGVfVFJJQU5HVUxBUl9NRVNIPWZ1bmN0aW9uKCl7cmV0dXJuKGdsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19FbmNvZGVkR2VvbWV0cnlUeXBlX1RSSUFOR1VMQVJfTUVTSD1SLmFzbS56YikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxBbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5WQUxJRD1mdW5jdGlvbigpe3JldHVybihBbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5WQUxJRD1SLmFzbS5BYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxibD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5UOD1mdW5jdGlvbigpe3JldHVybihibD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5UOD1SLmFzbS5CYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx3bD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfVUlOVDg9ZnVuY3Rpb24oKXtyZXR1cm4od2w9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1VJTlQ4PVIuYXNtLkNiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFRsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9JTlQxNj1mdW5jdGlvbigpe3JldHVybihUbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5UMTY9Ui5hc20uRGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sT2w9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1VJTlQxNj1mdW5jdGlvbigpe3JldHVybihPbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfVUlOVDE2PVIuYXNtLkViKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEVsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9JTlQzMj1mdW5jdGlvbigpe3JldHVybihFbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5UMzI9Ui5hc20uRmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sb2Y9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1VJTlQzMj1mdW5jdGlvbigpe3JldHVybihvZj1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfVUlOVDMyPVIuYXNtLkdiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFJsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9JTlQ2ND1mdW5jdGlvbigpe3JldHVybihSbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5UNjQ9Ui5hc20uSGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sU2w9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1VJTlQ2ND1mdW5jdGlvbigpe3JldHVybihTbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfVUlOVDY0PVIuYXNtLkliKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LENsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9GTE9BVDMyPWZ1bmN0aW9uKCl7cmV0dXJuKENsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9GTE9BVDMyPVIuYXNtLkpiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHhsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9GTE9BVDY0PWZ1bmN0aW9uKCl7cmV0dXJuKHhsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9GTE9BVDY0PVIuYXNtLktiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFBsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9CT09MPWZ1bmN0aW9uKCl7cmV0dXJuKFBsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9CT09MPVIuYXNtLkxiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE1sPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9UWVBFU19DT1VOVD1mdW5jdGlvbigpe3JldHVybihNbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfVFlQRVNfQ09VTlQ9Ui5hc20uTWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTmw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfT0s9ZnVuY3Rpb24oKXtyZXR1cm4oTmw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfT0s9Ui5hc20uTmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQnM9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfRFJBQ09fRVJST1I9ZnVuY3Rpb24oKXtyZXR1cm4oQnM9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfRFJBQ09fRVJST1I9Ui5hc20uT2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSWw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfSU9fRVJST1I9ZnVuY3Rpb24oKXtyZXR1cm4oSWw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfSU9fRVJST1I9Ui5hc20uUGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdmw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfSU5WQUxJRF9QQVJBTUVURVI9ZnVuY3Rpb24oKXtyZXR1cm4odmw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfSU5WQUxJRF9QQVJBTUVURVI9Ui5hc20uUWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRGw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfVU5TVVBQT1JURURfVkVSU0lPTj1mdW5jdGlvbigpe3JldHVybihEbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9VTlNVUFBPUlRFRF9WRVJTSU9OPVIuYXNtLlJiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LExsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX1VOS05PV05fVkVSU0lPTj1mdW5jdGlvbigpe3JldHVybihMbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9VTktOT1dOX1ZFUlNJT049Ui5hc20uU2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX07Ui5fbWFsbG9jPWZ1bmN0aW9uKCl7cmV0dXJuKFIuX21hbGxvYz1SLmFzbS5UYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxSLl9mcmVlPWZ1bmN0aW9uKCl7cmV0dXJuKFIuX2ZyZWU9Ui5hc20uVWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIEZsPWZ1bmN0aW9uKCl7cmV0dXJuKEZsPVIuYXNtLlZiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O1IuX19fc3RhcnRfZW1fanM9MTU4NTYsUi5fX19zdG9wX2VtX2pzPTE1OTU0O3ZhciByZjtpZihkbj1mdW5jdGlvbiB6KCl7cmZ8fHAoKSxyZnx8KGRuPXopfSxSLnByZUluaXQpZm9yKHR5cGVvZiBSLnByZUluaXQ9PSJmdW5jdGlvbiImJihSLnByZUluaXQ9W1IucHJlSW5pdF0pOzA8Ui5wcmVJbml0Lmxlbmd0aDspUi5wcmVJbml0LnBvcCgpKCk7cCgpLGQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLGQucHJvdG90eXBlLmNvbnN0cnVjdG9yPWQsZC5wcm90b3R5cGUuX19jbGFzc19fPWQsZC5fX2NhY2hlX189e30sUi5XcmFwcGVyT2JqZWN0PWQsUi5nZXRDYWNoZT1tLFIud3JhcFBvaW50ZXI9XyxSLmNhc3RPYmplY3Q9ZnVuY3Rpb24oeixXKXtyZXR1cm4gXyh6LnB0cixXKX0sUi5OVUxMPV8oMCksUi5kZXN0cm95PWZ1bmN0aW9uKHope2lmKCF6Ll9fZGVzdHJveV9fKXRocm93IkVycm9yOiBDYW5ub3QgZGVzdHJveSBvYmplY3QuIChEaWQgeW91IGNyZWF0ZSBpdCB5b3Vyc2VsZj8pIjt6Ll9fZGVzdHJveV9fKCksZGVsZXRlIG0oei5fX2NsYXNzX18pW3oucHRyXX0sUi5jb21wYXJlPWZ1bmN0aW9uKHosVyl7cmV0dXJuIHoucHRyPT09Vy5wdHJ9LFIuZ2V0UG9pbnRlcj1mdW5jdGlvbih6KXtyZXR1cm4gei5wdHJ9LFIuZ2V0Q2xhc3M9ZnVuY3Rpb24oeil7cmV0dXJuIHouX19jbGFzc19ffTt2YXIgUmU9e2J1ZmZlcjowLHNpemU6MCxwb3M6MCx0ZW1wczpbXSxuZWVkZWQ6MCxwcmVwYXJlOmZ1bmN0aW9uKCl7aWYoUmUubmVlZGVkKXtmb3IodmFyIHo9MDt6PFJlLnRlbXBzLmxlbmd0aDt6KyspUi5fZnJlZShSZS50ZW1wc1t6XSk7UmUudGVtcHMubGVuZ3RoPTAsUi5fZnJlZShSZS5idWZmZXIpLFJlLmJ1ZmZlcj0wLFJlLnNpemUrPVJlLm5lZWRlZCxSZS5uZWVkZWQ9MH1SZS5idWZmZXJ8fChSZS5zaXplKz0xMjgsUmUuYnVmZmVyPVIuX21hbGxvYyhSZS5zaXplKSxSZS5idWZmZXJ8fHModm9pZCAwKSksUmUucG9zPTB9LGFsbG9jOmZ1bmN0aW9uKHosVyl7cmV0dXJuIFJlLmJ1ZmZlcnx8cyh2b2lkIDApLHo9ei5sZW5ndGgqVy5CWVRFU19QRVJfRUxFTUVOVCx6PXorNyYtOCxSZS5wb3Mrej49UmUuc2l6ZT8oMDx6fHxzKHZvaWQgMCksUmUubmVlZGVkKz16LFc9Ui5fbWFsbG9jKHopLFJlLnRlbXBzLnB1c2goVykpOihXPVJlLmJ1ZmZlcitSZS5wb3MsUmUucG9zKz16KSxXfSxjb3B5OmZ1bmN0aW9uKHosVyxldCl7c3dpdGNoKGV0Pj4+PTAsVy5CWVRFU19QRVJfRUxFTUVOVCl7Y2FzZSAyOmV0Pj4+PTE7YnJlYWs7Y2FzZSA0OmV0Pj4+PTI7YnJlYWs7Y2FzZSA4OmV0Pj4+PTN9Zm9yKHZhciBNdD0wO010PHoubGVuZ3RoO010KyspV1tldCtNdF09eltNdF19fTtyZXR1cm4gTy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksTy5wcm90b3R5cGUuY29uc3RydWN0b3I9TyxPLnByb3RvdHlwZS5fX2NsYXNzX189TyxPLl9fY2FjaGVfXz17fSxSLlZvaWRQdHI9TyxPLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1PLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe1plKHRoaXMucHRyKX0sVC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksVC5wcm90b3R5cGUuY29uc3RydWN0b3I9VCxULnByb3RvdHlwZS5fX2NsYXNzX189VCxULl9fY2FjaGVfXz17fSxSLkRlY29kZXJCdWZmZXI9VCxULnByb3RvdHlwZS5Jbml0PVQucHJvdG90eXBlLkluaXQ9ZnVuY3Rpb24oeixXKXt2YXIgZXQ9dGhpcy5wdHI7UmUucHJlcGFyZSgpLHR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9Yih6KSksVyYmdHlwZW9mIFc9PSJvYmplY3QiJiYoVz1XLnB0ciksS2UoZXQseixXKX0sVC5wcm90b3R5cGUuX19kZXN0cm95X189VC5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtobih0aGlzLnB0cil9LEUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLEUucHJvdG90eXBlLmNvbnN0cnVjdG9yPUUsRS5wcm90b3R5cGUuX19jbGFzc19fPUUsRS5fX2NhY2hlX189e30sUi5BdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhPUUsRS5wcm90b3R5cGUudHJhbnNmb3JtX3R5cGU9RS5wcm90b3R5cGUudHJhbnNmb3JtX3R5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gcW4odGhpcy5wdHIpfSxFLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1FLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe0tuKHRoaXMucHRyKX0sdy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksdy5wcm90b3R5cGUuY29uc3RydWN0b3I9dyx3LnByb3RvdHlwZS5fX2NsYXNzX189dyx3Ll9fY2FjaGVfXz17fSxSLkdlb21ldHJ5QXR0cmlidXRlPXcsdy5wcm90b3R5cGUuX19kZXN0cm95X189dy5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtrZSh0aGlzLnB0cil9LEMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLEMucHJvdG90eXBlLmNvbnN0cnVjdG9yPUMsQy5wcm90b3R5cGUuX19jbGFzc19fPUMsQy5fX2NhY2hlX189e30sUi5Qb2ludEF0dHJpYnV0ZT1DLEMucHJvdG90eXBlLnNpemU9Qy5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBEbih0aGlzLnB0cil9LEMucHJvdG90eXBlLkdldEF0dHJpYnV0ZVRyYW5zZm9ybURhdGE9Qy5wcm90b3R5cGUuR2V0QXR0cmlidXRlVHJhbnNmb3JtRGF0YT1mdW5jdGlvbigpe3JldHVybiBfKFduKHRoaXMucHRyKSxFKX0sQy5wcm90b3R5cGUuYXR0cmlidXRlX3R5cGU9Qy5wcm90b3R5cGUuYXR0cmlidXRlX3R5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gcW8odGhpcy5wdHIpfSxDLnByb3RvdHlwZS5kYXRhX3R5cGU9Qy5wcm90b3R5cGUuZGF0YV90eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHJuKHRoaXMucHRyKX0sQy5wcm90b3R5cGUubnVtX2NvbXBvbmVudHM9Qy5wcm90b3R5cGUubnVtX2NvbXBvbmVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gT24odGhpcy5wdHIpfSxDLnByb3RvdHlwZS5ub3JtYWxpemVkPUMucHJvdG90eXBlLm5vcm1hbGl6ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXVyKHRoaXMucHRyKX0sQy5wcm90b3R5cGUuYnl0ZV9zdHJpZGU9Qy5wcm90b3R5cGUuYnl0ZV9zdHJpZGU9ZnVuY3Rpb24oKXtyZXR1cm4gWm4odGhpcy5wdHIpfSxDLnByb3RvdHlwZS5ieXRlX29mZnNldD1DLnByb3RvdHlwZS5ieXRlX29mZnNldD1mdW5jdGlvbigpe3JldHVybiBLbyh0aGlzLnB0cil9LEMucHJvdG90eXBlLnVuaXF1ZV9pZD1DLnByb3RvdHlwZS51bmlxdWVfaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gTnIodGhpcy5wdHIpfSxDLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1DLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe01zKHRoaXMucHRyKX0sTi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksTi5wcm90b3R5cGUuY29uc3RydWN0b3I9TixOLnByb3RvdHlwZS5fX2NsYXNzX189TixOLl9fY2FjaGVfXz17fSxSLkF0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybT1OLE4ucHJvdG90eXBlLkluaXRGcm9tQXR0cmlidXRlPU4ucHJvdG90eXBlLkluaXRGcm9tQXR0cmlidXRlPWZ1bmN0aW9uKHope3ZhciBXPXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSwhIVhpKFcseil9LE4ucHJvdG90eXBlLnF1YW50aXphdGlvbl9iaXRzPU4ucHJvdG90eXBlLnF1YW50aXphdGlvbl9iaXRzPWZ1bmN0aW9uKCl7cmV0dXJuIElyKHRoaXMucHRyKX0sTi5wcm90b3R5cGUubWluX3ZhbHVlPU4ucHJvdG90eXBlLm1pbl92YWx1ZT1mdW5jdGlvbih6KXt2YXIgVz10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksWWkoVyx6KX0sTi5wcm90b3R5cGUucmFuZ2U9Ti5wcm90b3R5cGUucmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gSXModGhpcy5wdHIpfSxOLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1OLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe0FpKHRoaXMucHRyKX0sSS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksSS5wcm90b3R5cGUuY29uc3RydWN0b3I9SSxJLnByb3RvdHlwZS5fX2NsYXNzX189SSxJLl9fY2FjaGVfXz17fSxSLkF0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm09SSxJLnByb3RvdHlwZS5Jbml0RnJvbUF0dHJpYnV0ZT1JLnByb3RvdHlwZS5Jbml0RnJvbUF0dHJpYnV0ZT1mdW5jdGlvbih6KXt2YXIgVz10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksISFwbyhXLHopfSxJLnByb3RvdHlwZS5xdWFudGl6YXRpb25fYml0cz1JLnByb3RvdHlwZS5xdWFudGl6YXRpb25fYml0cz1mdW5jdGlvbigpe3JldHVybiB2cih0aGlzLnB0cil9LEkucHJvdG90eXBlLl9fZGVzdHJveV9fPUkucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7TmModGhpcy5wdHIpfSxMLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxMLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1MLEwucHJvdG90eXBlLl9fY2xhc3NfXz1MLEwuX19jYWNoZV9fPXt9LFIuUG9pbnRDbG91ZD1MLEwucHJvdG90eXBlLm51bV9hdHRyaWJ1dGVzPUwucHJvdG90eXBlLm51bV9hdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIExuKHRoaXMucHRyKX0sTC5wcm90b3R5cGUubnVtX3BvaW50cz1MLnByb3RvdHlwZS5udW1fcG9pbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIGJpKHRoaXMucHRyKX0sTC5wcm90b3R5cGUuX19kZXN0cm95X189TC5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtJZSh0aGlzLnB0cil9LHYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLHYucHJvdG90eXBlLmNvbnN0cnVjdG9yPXYsdi5wcm90b3R5cGUuX19jbGFzc19fPXYsdi5fX2NhY2hlX189e30sUi5NZXNoPXYsdi5wcm90b3R5cGUubnVtX2ZhY2VzPXYucHJvdG90eXBlLm51bV9mYWNlcz1mdW5jdGlvbigpe3JldHVybiBBdSh0aGlzLnB0cil9LHYucHJvdG90eXBlLm51bV9hdHRyaWJ1dGVzPXYucHJvdG90eXBlLm51bV9hdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGJ1KHRoaXMucHRyKX0sdi5wcm90b3R5cGUubnVtX3BvaW50cz12LnByb3RvdHlwZS5udW1fcG9pbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHd1KHRoaXMucHRyKX0sdi5wcm90b3R5cGUuX19kZXN0cm95X189di5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXt2Yyh0aGlzLnB0cil9LEQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLEQucHJvdG90eXBlLmNvbnN0cnVjdG9yPUQsRC5wcm90b3R5cGUuX19jbGFzc19fPUQsRC5fX2NhY2hlX189e30sUi5NZXRhZGF0YT1ELEQucHJvdG90eXBlLl9fZGVzdHJveV9fPUQucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7S2EodGhpcy5wdHIpfSxVLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxVLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1VLFUucHJvdG90eXBlLl9fY2xhc3NfXz1VLFUuX19jYWNoZV9fPXt9LFIuU3RhdHVzPVUsVS5wcm90b3R5cGUuY29kZT1VLnByb3RvdHlwZS5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIFR1KHRoaXMucHRyKX0sVS5wcm90b3R5cGUub2s9VS5wcm90b3R5cGUub2s9ZnVuY3Rpb24oKXtyZXR1cm4hIVdhKHRoaXMucHRyKX0sVS5wcm90b3R5cGUuZXJyb3JfbXNnPVUucHJvdG90eXBlLmVycm9yX21zZz1mdW5jdGlvbigpe3JldHVybiByKCRpKHRoaXMucHRyKSl9LFUucHJvdG90eXBlLl9fZGVzdHJveV9fPVUucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7T3UodGhpcy5wdHIpfSxBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLEEucHJvdG90eXBlLl9fY2xhc3NfXz1BLEEuX19jYWNoZV9fPXt9LFIuRHJhY29GbG9hdDMyQXJyYXk9QSxBLnByb3RvdHlwZS5HZXRWYWx1ZT1BLnByb3RvdHlwZS5HZXRWYWx1ZT1mdW5jdGlvbih6KXt2YXIgVz10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksUnUoVyx6KX0sQS5wcm90b3R5cGUuc2l6ZT1BLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIFppKHRoaXMucHRyKX0sQS5wcm90b3R5cGUuX19kZXN0cm95X189QS5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtRaSh0aGlzLnB0cil9LFMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLFMucHJvdG90eXBlLmNvbnN0cnVjdG9yPVMsUy5wcm90b3R5cGUuX19jbGFzc19fPVMsUy5fX2NhY2hlX189e30sUi5EcmFjb0ludDhBcnJheT1TLFMucHJvdG90eXBlLkdldFZhbHVlPVMucHJvdG90eXBlLkdldFZhbHVlPWZ1bmN0aW9uKHope3ZhciBXPXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxTdShXLHopfSxTLnByb3RvdHlwZS5zaXplPVMucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gQ3UodGhpcy5wdHIpfSxTLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1TLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe0RyKHRoaXMucHRyKX0sUC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksUC5wcm90b3R5cGUuY29uc3RydWN0b3I9UCxQLnByb3RvdHlwZS5fX2NsYXNzX189UCxQLl9fY2FjaGVfXz17fSxSLkRyYWNvVUludDhBcnJheT1QLFAucHJvdG90eXBlLkdldFZhbHVlPVAucHJvdG90eXBlLkdldFZhbHVlPWZ1bmN0aW9uKHope3ZhciBXPXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxZYShXLHopfSxQLnByb3RvdHlwZS5zaXplPVAucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gRmModGhpcy5wdHIpfSxQLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1QLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe3h1KHRoaXMucHRyKX0sRi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksRi5wcm90b3R5cGUuY29uc3RydWN0b3I9RixGLnByb3RvdHlwZS5fX2NsYXNzX189RixGLl9fY2FjaGVfXz17fSxSLkRyYWNvSW50MTZBcnJheT1GLEYucHJvdG90eXBlLkdldFZhbHVlPUYucHJvdG90eXBlLkdldFZhbHVlPWZ1bmN0aW9uKHope3ZhciBXPXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxQdShXLHopfSxGLnByb3RvdHlwZS5zaXplPUYucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gTXUodGhpcy5wdHIpfSxGLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1GLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe051KHRoaXMucHRyKX0sai5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksai5wcm90b3R5cGUuY29uc3RydWN0b3I9aixqLnByb3RvdHlwZS5fX2NsYXNzX189aixqLl9fY2FjaGVfXz17fSxSLkRyYWNvVUludDE2QXJyYXk9aixqLnByb3RvdHlwZS5HZXRWYWx1ZT1qLnByb3RvdHlwZS5HZXRWYWx1ZT1mdW5jdGlvbih6KXt2YXIgVz10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksdnUoVyx6KX0sai5wcm90b3R5cGUuc2l6ZT1qLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIER1KHRoaXMucHRyKX0sai5wcm90b3R5cGUuX19kZXN0cm95X189ai5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXskYSh0aGlzLnB0cil9LEgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLEgucHJvdG90eXBlLmNvbnN0cnVjdG9yPUgsSC5wcm90b3R5cGUuX19jbGFzc19fPUgsSC5fX2NhY2hlX189e30sUi5EcmFjb0ludDMyQXJyYXk9SCxILnByb3RvdHlwZS5HZXRWYWx1ZT1ILnByb3RvdHlwZS5HZXRWYWx1ZT1mdW5jdGlvbih6KXt2YXIgVz10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksRnUoVyx6KX0sSC5wcm90b3R5cGUuc2l6ZT1ILnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIEJ1KHRoaXMucHRyKX0sSC5wcm90b3R5cGUuX19kZXN0cm95X189SC5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtVdSh0aGlzLnB0cil9LGsucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLGsucHJvdG90eXBlLmNvbnN0cnVjdG9yPWssay5wcm90b3R5cGUuX19jbGFzc19fPWssay5fX2NhY2hlX189e30sUi5EcmFjb1VJbnQzMkFycmF5PWssay5wcm90b3R5cGUuR2V0VmFsdWU9ay5wcm90b3R5cGUuR2V0VmFsdWU9ZnVuY3Rpb24oeil7dmFyIFc9dGhpcy5wdHI7cmV0dXJuIHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLFZ1KFcseil9LGsucHJvdG90eXBlLnNpemU9ay5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBrdSh0aGlzLnB0cil9LGsucHJvdG90eXBlLl9fZGVzdHJveV9fPWsucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7dnModGhpcy5wdHIpfSxLLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxLLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1LLEsucHJvdG90eXBlLl9fY2xhc3NfXz1LLEsuX19jYWNoZV9fPXt9LFIuTWV0YWRhdGFRdWVyaWVyPUssSy5wcm90b3R5cGUuSGFzRW50cnk9Sy5wcm90b3R5cGUuSGFzRW50cnk9ZnVuY3Rpb24oeixXKXt2YXIgZXQ9dGhpcy5wdHI7cmV0dXJuIFJlLnByZXBhcmUoKSx6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxXPVcmJnR5cGVvZiBXPT0ib2JqZWN0Ij9XLnB0cjpnKFcpLCEhenUoZXQseixXKX0sSy5wcm90b3R5cGUuR2V0SW50RW50cnk9Sy5wcm90b3R5cGUuR2V0SW50RW50cnk9ZnVuY3Rpb24oeixXKXt2YXIgZXQ9dGhpcy5wdHI7cmV0dXJuIFJlLnByZXBhcmUoKSx6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxXPVcmJnR5cGVvZiBXPT0ib2JqZWN0Ij9XLnB0cjpnKFcpLGxyKGV0LHosVyl9LEsucHJvdG90eXBlLkdldEludEVudHJ5QXJyYXk9Sy5wcm90b3R5cGUuR2V0SW50RW50cnlBcnJheT1mdW5jdGlvbih6LFcsZXQpe3ZhciBNdD10aGlzLnB0cjtSZS5wcmVwYXJlKCkseiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksVz1XJiZ0eXBlb2YgVz09Im9iamVjdCI/Vy5wdHI6ZyhXKSxldCYmdHlwZW9mIGV0PT0ib2JqZWN0IiYmKGV0PWV0LnB0ciksWmEoTXQseixXLGV0KX0sSy5wcm90b3R5cGUuR2V0RG91YmxlRW50cnk9Sy5wcm90b3R5cGUuR2V0RG91YmxlRW50cnk9ZnVuY3Rpb24oeixXKXt2YXIgZXQ9dGhpcy5wdHI7cmV0dXJuIFJlLnByZXBhcmUoKSx6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxXPVcmJnR5cGVvZiBXPT0ib2JqZWN0Ij9XLnB0cjpnKFcpLGp1KGV0LHosVyl9LEsucHJvdG90eXBlLkdldFN0cmluZ0VudHJ5PUsucHJvdG90eXBlLkdldFN0cmluZ0VudHJ5PWZ1bmN0aW9uKHosVyl7dmFyIGV0PXRoaXMucHRyO3JldHVybiBSZS5wcmVwYXJlKCkseiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksVz1XJiZ0eXBlb2YgVz09Im9iamVjdCI/Vy5wdHI6ZyhXKSxyKEh1KGV0LHosVykpfSxLLnByb3RvdHlwZS5OdW1FbnRyaWVzPUsucHJvdG90eXBlLk51bUVudHJpZXM9ZnVuY3Rpb24oeil7dmFyIFc9dGhpcy5wdHI7cmV0dXJuIHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLHF1KFcseil9LEsucHJvdG90eXBlLkdldEVudHJ5TmFtZT1LLnByb3RvdHlwZS5HZXRFbnRyeU5hbWU9ZnVuY3Rpb24oeixXKXt2YXIgZXQ9dGhpcy5wdHI7cmV0dXJuIHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLFcmJnR5cGVvZiBXPT0ib2JqZWN0IiYmKFc9Vy5wdHIpLHIoV28oZXQseixXKSl9LEsucHJvdG90eXBlLl9fZGVzdHJveV9fPUsucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7UWEodGhpcy5wdHIpfSxYLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxYLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1YLFgucHJvdG90eXBlLl9fY2xhc3NfXz1YLFguX19jYWNoZV9fPXt9LFIuRGVjb2Rlcj1YLFgucHJvdG90eXBlLkRlY29kZUFycmF5VG9Qb2ludENsb3VkPVgucHJvdG90eXBlLkRlY29kZUFycmF5VG9Qb2ludENsb3VkPWZ1bmN0aW9uKHosVyxldCl7dmFyIE10PXRoaXMucHRyO3JldHVybiBSZS5wcmVwYXJlKCksdHlwZW9mIHo9PSJvYmplY3QiJiYoej1iKHopKSxXJiZ0eXBlb2YgVz09Im9iamVjdCImJihXPVcucHRyKSxldCYmdHlwZW9mIGV0PT0ib2JqZWN0IiYmKGV0PWV0LnB0ciksXyhEcyhNdCx6LFcsZXQpLFUpfSxYLnByb3RvdHlwZS5EZWNvZGVBcnJheVRvTWVzaD1YLnByb3RvdHlwZS5EZWNvZGVBcnJheVRvTWVzaD1mdW5jdGlvbih6LFcsZXQpe3ZhciBNdD10aGlzLnB0cjtyZXR1cm4gUmUucHJlcGFyZSgpLHR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9Yih6KSksVyYmdHlwZW9mIFc9PSJvYmplY3QiJiYoVz1XLnB0ciksZXQmJnR5cGVvZiBldD09Im9iamVjdCImJihldD1ldC5wdHIpLF8oS3UoTXQseixXLGV0KSxVKX0sWC5wcm90b3R5cGUuR2V0QXR0cmlidXRlSWQ9WC5wcm90b3R5cGUuR2V0QXR0cmlidXRlSWQ9ZnVuY3Rpb24oeixXKXt2YXIgZXQ9dGhpcy5wdHI7cmV0dXJuIHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLFcmJnR5cGVvZiBXPT0ib2JqZWN0IiYmKFc9Vy5wdHIpLFVjKGV0LHosVyl9LFgucHJvdG90eXBlLkdldEF0dHJpYnV0ZUlkQnlOYW1lPVgucHJvdG90eXBlLkdldEF0dHJpYnV0ZUlkQnlOYW1lPWZ1bmN0aW9uKHosVyl7dmFyIGV0PXRoaXMucHRyO3JldHVybiBSZS5wcmVwYXJlKCkseiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksVz1XJiZ0eXBlb2YgVz09Im9iamVjdCI/Vy5wdHI6ZyhXKSxXdShldCx6LFcpfSxYLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJZEJ5TWV0YWRhdGFFbnRyeT1YLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJZEJ5TWV0YWRhdGFFbnRyeT1mdW5jdGlvbih6LFcsZXQpe3ZhciBNdD10aGlzLnB0cjtyZXR1cm4gUmUucHJlcGFyZSgpLHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLFc9VyYmdHlwZW9mIFc9PSJvYmplY3QiP1cucHRyOmcoVyksZXQ9ZXQmJnR5cGVvZiBldD09Im9iamVjdCI/ZXQucHRyOmcoZXQpLHRmKE10LHosVyxldCl9LFgucHJvdG90eXBlLkdldEF0dHJpYnV0ZT1YLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oeixXKXt2YXIgZXQ9dGhpcy5wdHI7cmV0dXJuIHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLFcmJnR5cGVvZiBXPT0ib2JqZWN0IiYmKFc9Vy5wdHIpLF8oZWYoZXQseixXKSxDKX0sWC5wcm90b3R5cGUuR2V0QXR0cmlidXRlQnlVbmlxdWVJZD1YLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVCeVVuaXF1ZUlkPWZ1bmN0aW9uKHosVyl7dmFyIGV0PXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxXJiZ0eXBlb2YgVz09Im9iamVjdCImJihXPVcucHRyKSxfKFh1KGV0LHosVyksQyl9LFgucHJvdG90eXBlLkdldE1ldGFkYXRhPVgucHJvdG90eXBlLkdldE1ldGFkYXRhPWZ1bmN0aW9uKHope3ZhciBXPXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxfKFl1KFcseiksRCl9LFgucHJvdG90eXBlLkdldEF0dHJpYnV0ZU1ldGFkYXRhPVgucHJvdG90eXBlLkdldEF0dHJpYnV0ZU1ldGFkYXRhPWZ1bmN0aW9uKHosVyl7dmFyIGV0PXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxXJiZ0eXBlb2YgVz09Im9iamVjdCImJihXPVcucHRyKSxfKFZjKGV0LHosVyksRCl9LFgucHJvdG90eXBlLkdldEZhY2VGcm9tTWVzaD1YLnByb3RvdHlwZS5HZXRGYWNlRnJvbU1lc2g9ZnVuY3Rpb24oeixXLGV0KXt2YXIgTXQ9dGhpcy5wdHI7cmV0dXJuIHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLFcmJnR5cGVvZiBXPT0ib2JqZWN0IiYmKFc9Vy5wdHIpLGV0JiZ0eXBlb2YgZXQ9PSJvYmplY3QiJiYoZXQ9ZXQucHRyKSwhIUFvKE10LHosVyxldCl9LFgucHJvdG90eXBlLkdldFRyaWFuZ2xlU3RyaXBzRnJvbU1lc2g9WC5wcm90b3R5cGUuR2V0VHJpYW5nbGVTdHJpcHNGcm9tTWVzaD1mdW5jdGlvbih6LFcpe3ZhciBldD10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksVyYmdHlwZW9mIFc9PSJvYmplY3QiJiYoVz1XLnB0ciksa2MoZXQseixXKX0sWC5wcm90b3R5cGUuR2V0VHJpYW5nbGVzVUludDE2QXJyYXk9WC5wcm90b3R5cGUuR2V0VHJpYW5nbGVzVUludDE2QXJyYXk9ZnVuY3Rpb24oeixXLGV0KXt2YXIgTXQ9dGhpcy5wdHI7cmV0dXJuIHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLFcmJnR5cGVvZiBXPT0ib2JqZWN0IiYmKFc9Vy5wdHIpLGV0JiZ0eXBlb2YgZXQ9PSJvYmplY3QiJiYoZXQ9ZXQucHRyKSwhISR1KE10LHosVyxldCl9LFgucHJvdG90eXBlLkdldFRyaWFuZ2xlc1VJbnQzMkFycmF5PVgucHJvdG90eXBlLkdldFRyaWFuZ2xlc1VJbnQzMkFycmF5PWZ1bmN0aW9uKHosVyxldCl7dmFyIE10PXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxXJiZ0eXBlb2YgVz09Im9iamVjdCImJihXPVcucHRyKSxldCYmdHlwZW9mIGV0PT0ib2JqZWN0IiYmKGV0PWV0LnB0ciksISFadShNdCx6LFcsZXQpfSxYLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVGbG9hdD1YLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVGbG9hdD1mdW5jdGlvbih6LFcsZXQpe3ZhciBNdD10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksVyYmdHlwZW9mIFc9PSJvYmplY3QiJiYoVz1XLnB0ciksZXQmJnR5cGVvZiBldD09Im9iamVjdCImJihldD1ldC5wdHIpLCEhUXUoTXQseixXLGV0KX0sWC5wcm90b3R5cGUuR2V0QXR0cmlidXRlRmxvYXRGb3JBbGxQb2ludHM9WC5wcm90b3R5cGUuR2V0QXR0cmlidXRlRmxvYXRGb3JBbGxQb2ludHM9ZnVuY3Rpb24oeixXLGV0KXt2YXIgTXQ9dGhpcy5wdHI7cmV0dXJuIHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLFcmJnR5cGVvZiBXPT0ib2JqZWN0IiYmKFc9Vy5wdHIpLGV0JiZ0eXBlb2YgZXQ9PSJvYmplY3QiJiYoZXQ9ZXQucHRyKSwhIXByKE10LHosVyxldCl9LFgucHJvdG90eXBlLkdldEF0dHJpYnV0ZUludEZvckFsbFBvaW50cz1YLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJbnRGb3JBbGxQb2ludHM9ZnVuY3Rpb24oeixXLGV0KXt2YXIgTXQ9dGhpcy5wdHI7cmV0dXJuIHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLFcmJnR5cGVvZiBXPT0ib2JqZWN0IiYmKFc9Vy5wdHIpLGV0JiZ0eXBlb2YgZXQ9PSJvYmplY3QiJiYoZXQ9ZXQucHRyKSwhIUp1KE10LHosVyxldCl9LFgucHJvdG90eXBlLkdldEF0dHJpYnV0ZUludDhGb3JBbGxQb2ludHM9WC5wcm90b3R5cGUuR2V0QXR0cmlidXRlSW50OEZvckFsbFBvaW50cz1mdW5jdGlvbih6LFcsZXQpe3ZhciBNdD10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksVyYmdHlwZW9mIFc9PSJvYmplY3QiJiYoVz1XLnB0ciksZXQmJnR5cGVvZiBldD09Im9iamVjdCImJihldD1ldC5wdHIpLCEhdGwoTXQseixXLGV0KX0sWC5wcm90b3R5cGUuR2V0QXR0cmlidXRlVUludDhGb3JBbGxQb2ludHM9WC5wcm90b3R5cGUuR2V0QXR0cmlidXRlVUludDhGb3JBbGxQb2ludHM9ZnVuY3Rpb24oeixXLGV0KXt2YXIgTXQ9dGhpcy5wdHI7cmV0dXJuIHomJnR5cGVvZiB6PT0ib2JqZWN0IiYmKHo9ei5wdHIpLFcmJnR5cGVvZiBXPT0ib2JqZWN0IiYmKFc9Vy5wdHIpLGV0JiZ0eXBlb2YgZXQ9PSJvYmplY3QiJiYoZXQ9ZXQucHRyKSwhIWVsKE10LHosVyxldCl9LFgucHJvdG90eXBlLkdldEF0dHJpYnV0ZUludDE2Rm9yQWxsUG9pbnRzPVgucHJvdG90eXBlLkdldEF0dHJpYnV0ZUludDE2Rm9yQWxsUG9pbnRzPWZ1bmN0aW9uKHosVyxldCl7dmFyIE10PXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxXJiZ0eXBlb2YgVz09Im9iamVjdCImJihXPVcucHRyKSxldCYmdHlwZW9mIGV0PT0ib2JqZWN0IiYmKGV0PWV0LnB0ciksISFMcyhNdCx6LFcsZXQpfSxYLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVVSW50MTZGb3JBbGxQb2ludHM9WC5wcm90b3R5cGUuR2V0QXR0cmlidXRlVUludDE2Rm9yQWxsUG9pbnRzPWZ1bmN0aW9uKHosVyxldCl7dmFyIE10PXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxXJiZ0eXBlb2YgVz09Im9iamVjdCImJihXPVcucHRyKSxldCYmdHlwZW9mIGV0PT0ib2JqZWN0IiYmKGV0PWV0LnB0ciksISFubChNdCx6LFcsZXQpfSxYLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJbnQzMkZvckFsbFBvaW50cz1YLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJbnQzMkZvckFsbFBvaW50cz1mdW5jdGlvbih6LFcsZXQpe3ZhciBNdD10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksVyYmdHlwZW9mIFc9PSJvYmplY3QiJiYoVz1XLnB0ciksZXQmJnR5cGVvZiBldD09Im9iamVjdCImJihldD1ldC5wdHIpLCEhd2koTXQseixXLGV0KX0sWC5wcm90b3R5cGUuR2V0QXR0cmlidXRlVUludDMyRm9yQWxsUG9pbnRzPVgucHJvdG90eXBlLkdldEF0dHJpYnV0ZVVJbnQzMkZvckFsbFBvaW50cz1mdW5jdGlvbih6LFcsZXQpe3ZhciBNdD10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksVyYmdHlwZW9mIFc9PSJvYmplY3QiJiYoVz1XLnB0ciksZXQmJnR5cGVvZiBldD09Im9iamVjdCImJihldD1ldC5wdHIpLCEhb2woTXQseixXLGV0KX0sWC5wcm90b3R5cGUuR2V0QXR0cmlidXRlRGF0YUFycmF5Rm9yQWxsUG9pbnRzPVgucHJvdG90eXBlLkdldEF0dHJpYnV0ZURhdGFBcnJheUZvckFsbFBvaW50cz1mdW5jdGlvbih6LFcsZXQsTXQsbGUpe3ZhciB3ZT10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksVyYmdHlwZW9mIFc9PSJvYmplY3QiJiYoVz1XLnB0ciksZXQmJnR5cGVvZiBldD09Im9iamVjdCImJihldD1ldC5wdHIpLE10JiZ0eXBlb2YgTXQ9PSJvYmplY3QiJiYoTXQ9TXQucHRyKSxsZSYmdHlwZW9mIGxlPT0ib2JqZWN0IiYmKGxlPWxlLnB0ciksISFybCh3ZSx6LFcsZXQsTXQsbGUpfSxYLnByb3RvdHlwZS5Ta2lwQXR0cmlidXRlVHJhbnNmb3JtPVgucHJvdG90eXBlLlNraXBBdHRyaWJ1dGVUcmFuc2Zvcm09ZnVuY3Rpb24oeil7dmFyIFc9dGhpcy5wdHI7eiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksaWwoVyx6KX0sWC5wcm90b3R5cGUuR2V0RW5jb2RlZEdlb21ldHJ5VHlwZV9EZXByZWNhdGVkPVgucHJvdG90eXBlLkdldEVuY29kZWRHZW9tZXRyeVR5cGVfRGVwcmVjYXRlZD1mdW5jdGlvbih6KXt2YXIgVz10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksc2woVyx6KX0sWC5wcm90b3R5cGUuRGVjb2RlQnVmZmVyVG9Qb2ludENsb3VkPVgucHJvdG90eXBlLkRlY29kZUJ1ZmZlclRvUG9pbnRDbG91ZD1mdW5jdGlvbih6LFcpe3ZhciBldD10aGlzLnB0cjtyZXR1cm4geiYmdHlwZW9mIHo9PSJvYmplY3QiJiYoej16LnB0ciksVyYmdHlwZW9mIFc9PSJvYmplY3QiJiYoVz1XLnB0ciksXyhjbChldCx6LFcpLFUpfSxYLnByb3RvdHlwZS5EZWNvZGVCdWZmZXJUb01lc2g9WC5wcm90b3R5cGUuRGVjb2RlQnVmZmVyVG9NZXNoPWZ1bmN0aW9uKHosVyl7dmFyIGV0PXRoaXMucHRyO3JldHVybiB6JiZ0eXBlb2Ygej09Im9iamVjdCImJih6PXoucHRyKSxXJiZ0eXBlb2YgVz09Im9iamVjdCImJihXPVcucHRyKSxfKGFsKGV0LHosVyksVSl9LFgucHJvdG90eXBlLl9fZGVzdHJveV9fPVgucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7ZmwodGhpcy5wdHIpfSxmdW5jdGlvbigpe2Z1bmN0aW9uIHooKXtSLkFUVFJJQlVURV9JTlZBTElEX1RSQU5TRk9STT11bCgpLFIuQVRUUklCVVRFX05PX1RSQU5TRk9STT1sbCgpLFIuQVRUUklCVVRFX1FVQU5USVpBVElPTl9UUkFOU0ZPUk09cGwoKSxSLkFUVFJJQlVURV9PQ1RBSEVEUk9OX1RSQU5TRk9STT1kbCgpLFIuSU5WQUxJRD10cygpLFIuUE9TSVRJT049bWwoKSxSLk5PUk1BTD1obCgpLFIuQ09MT1I9RnMoKSxSLlRFWF9DT09SRD1HYygpLFIuR0VORVJJQz1fbCgpLFIuSU5WQUxJRF9HRU9NRVRSWV9UWVBFPW5mKCksUi5QT0lOVF9DTE9VRD15bCgpLFIuVFJJQU5HVUxBUl9NRVNIPWdsKCksUi5EVF9JTlZBTElEPUFsKCksUi5EVF9JTlQ4PWJsKCksUi5EVF9VSU5UOD13bCgpLFIuRFRfSU5UMTY9VGwoKSxSLkRUX1VJTlQxNj1PbCgpLFIuRFRfSU5UMzI9RWwoKSxSLkRUX1VJTlQzMj1vZigpLFIuRFRfSU5UNjQ9UmwoKSxSLkRUX1VJTlQ2ND1TbCgpLFIuRFRfRkxPQVQzMj1DbCgpLFIuRFRfRkxPQVQ2ND14bCgpLFIuRFRfQk9PTD1QbCgpLFIuRFRfVFlQRVNfQ09VTlQ9TWwoKSxSLk9LPU5sKCksUi5EUkFDT19FUlJPUj1CcygpLFIuSU9fRVJST1I9SWwoKSxSLklOVkFMSURfUEFSQU1FVEVSPXZsKCksUi5VTlNVUFBPUlRFRF9WRVJTSU9OPURsKCksUi5VTktOT1dOX1ZFUlNJT049TGwoKX1vZT96KCk6cG4udW5zaGlmdCh6KX0oKSx0eXBlb2YgUi5vbk1vZHVsZVBhcnNlZD09ImZ1bmN0aW9uIiYmUi5vbk1vZHVsZVBhcnNlZCgpLFIuRGVjb2Rlci5wcm90b3R5cGUuR2V0RW5jb2RlZEdlb21ldHJ5VHlwZT1mdW5jdGlvbih6KXtpZih6Ll9fY2xhc3NfXyYmei5fX2NsYXNzX189PT1SLkRlY29kZXJCdWZmZXIpcmV0dXJuIFIuRGVjb2Rlci5wcm90b3R5cGUuR2V0RW5jb2RlZEdlb21ldHJ5VHlwZV9EZXByZWNhdGVkKHopO2lmKDg+ei5ieXRlTGVuZ3RoKXJldHVybiBSLklOVkFMSURfR0VPTUVUUllfVFlQRTtzd2l0Y2goels3XSl7Y2FzZSAwOnJldHVybiBSLlBPSU5UX0NMT1VEO2Nhc2UgMTpyZXR1cm4gUi5UUklBTkdVTEFSX01FU0g7ZGVmYXVsdDpyZXR1cm4gUi5JTlZBTElEX0dFT01FVFJZX1RZUEV9fSxlLnJlYWR5fX0oKTt0eXBlb2YgcHU9PSJvYmplY3QiJiZ0eXBlb2YgeWc9PSJvYmplY3QiP3lnLmV4cG9ydHM9X2c6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZnVuY3Rpb24oKXtyZXR1cm4gX2d9KTp0eXBlb2YgcHU9PSJvYmplY3QiJiYocHUuRHJhY29EZWNvZGVyTW9kdWxlPV9nKX0pO3ZhciBiZz17fTttZShiZyx7ZGVmYXVsdDooKT0+VVV9KTtmdW5jdGlvbiBNVSh0LGUpe2xldCBuPXQubnVtX3BvaW50cygpLG89dC5udW1fZmFjZXMoKSxyPW5ldyBDZS5EcmFjb0ludDMyQXJyYXksaT1vKjMscz1EdC5jcmVhdGVUeXBlZEFycmF5KG4saSksZj0wO2ZvcihsZXQgdT0wO3U8bzsrK3UpZS5HZXRGYWNlRnJvbU1lc2godCx1LHIpLHNbZiswXT1yLkdldFZhbHVlKDApLHNbZisxXT1yLkdldFZhbHVlKDEpLHNbZisyXT1yLkdldFZhbHVlKDIpLGYrPTM7cmV0dXJuIENlLmRlc3Ryb3kocikse3R5cGVkQXJyYXk6cyxudW1iZXJPZkluZGljZXM6aX19ZnVuY3Rpb24gTlUodCxlLG4sbyxyKXtsZXQgaSxzO28ucXVhbnRpemF0aW9uQml0czw9OD8ocz1uZXcgQ2UuRHJhY29VSW50OEFycmF5LGk9bmV3IFVpbnQ4QXJyYXkociksZS5HZXRBdHRyaWJ1dGVVSW50OEZvckFsbFBvaW50cyh0LG4scykpOm8ucXVhbnRpemF0aW9uQml0czw9MTY/KHM9bmV3IENlLkRyYWNvVUludDE2QXJyYXksaT1uZXcgVWludDE2QXJyYXkociksZS5HZXRBdHRyaWJ1dGVVSW50MTZGb3JBbGxQb2ludHModCxuLHMpKToocz1uZXcgQ2UuRHJhY29GbG9hdDMyQXJyYXksaT1uZXcgRmxvYXQzMkFycmF5KHIpLGUuR2V0QXR0cmlidXRlRmxvYXRGb3JBbGxQb2ludHModCxuLHMpKTtmb3IobGV0IGY9MDtmPHI7KytmKWlbZl09cy5HZXRWYWx1ZShmKTtyZXR1cm4gQ2UuZGVzdHJveShzKSxpfWZ1bmN0aW9uIElVKHQsZSxuLG8pe2xldCByLGk7c3dpdGNoKG4uZGF0YV90eXBlKCkpe2Nhc2UgMTpjYXNlIDExOmk9bmV3IENlLkRyYWNvSW50OEFycmF5LHI9bmV3IEludDhBcnJheShvKSxlLkdldEF0dHJpYnV0ZUludDhGb3JBbGxQb2ludHModCxuLGkpO2JyZWFrO2Nhc2UgMjppPW5ldyBDZS5EcmFjb1VJbnQ4QXJyYXkscj1uZXcgVWludDhBcnJheShvKSxlLkdldEF0dHJpYnV0ZVVJbnQ4Rm9yQWxsUG9pbnRzKHQsbixpKTticmVhaztjYXNlIDM6aT1uZXcgQ2UuRHJhY29JbnQxNkFycmF5LHI9bmV3IEludDE2QXJyYXkobyksZS5HZXRBdHRyaWJ1dGVJbnQxNkZvckFsbFBvaW50cyh0LG4saSk7YnJlYWs7Y2FzZSA0Omk9bmV3IENlLkRyYWNvVUludDE2QXJyYXkscj1uZXcgVWludDE2QXJyYXkobyksZS5HZXRBdHRyaWJ1dGVVSW50MTZGb3JBbGxQb2ludHModCxuLGkpO2JyZWFrO2Nhc2UgNTpjYXNlIDc6aT1uZXcgQ2UuRHJhY29JbnQzMkFycmF5LHI9bmV3IEludDMyQXJyYXkobyksZS5HZXRBdHRyaWJ1dGVJbnQzMkZvckFsbFBvaW50cyh0LG4saSk7YnJlYWs7Y2FzZSA2OmNhc2UgODppPW5ldyBDZS5EcmFjb1VJbnQzMkFycmF5LHI9bmV3IFVpbnQzMkFycmF5KG8pLGUuR2V0QXR0cmlidXRlVUludDMyRm9yQWxsUG9pbnRzKHQsbixpKTticmVhaztjYXNlIDk6Y2FzZSAxMDppPW5ldyBDZS5EcmFjb0Zsb2F0MzJBcnJheSxyPW5ldyBGbG9hdDMyQXJyYXkobyksZS5HZXRBdHRyaWJ1dGVGbG9hdEZvckFsbFBvaW50cyh0LG4saSk7YnJlYWt9Zm9yKGxldCBzPTA7czxvOysrcylyW3NdPWkuR2V0VmFsdWUocyk7cmV0dXJuIENlLmRlc3Ryb3koaSkscn1mdW5jdGlvbiBwMih0LGUsbil7bGV0IG89dC5udW1fcG9pbnRzKCkscj1uLm51bV9jb21wb25lbnRzKCksaSxzPW5ldyBDZS5BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm07aWYocy5Jbml0RnJvbUF0dHJpYnV0ZShuKSl7bGV0IGw9bmV3IEFycmF5KHIpO2ZvcihsZXQgcD0wO3A8cjsrK3ApbFtwXT1zLm1pbl92YWx1ZShwKTtpPXtxdWFudGl6YXRpb25CaXRzOnMucXVhbnRpemF0aW9uX2JpdHMoKSxtaW5WYWx1ZXM6bCxyYW5nZTpzLnJhbmdlKCksb2N0RW5jb2RlZDohMX19Q2UuZGVzdHJveShzKSxzPW5ldyBDZS5BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtLHMuSW5pdEZyb21BdHRyaWJ1dGUobikmJihpPXtxdWFudGl6YXRpb25CaXRzOnMucXVhbnRpemF0aW9uX2JpdHMoKSxvY3RFbmNvZGVkOiEwfSksQ2UuZGVzdHJveShzKTtsZXQgZj1vKnIsdTtoKGkpP3U9TlUodCxlLG4saSxmKTp1PUlVKHQsZSxuLGYpO2xldCBjPW90LmZyb21UeXBlZEFycmF5KHUpO3JldHVybnthcnJheTp1LGRhdGE6e2NvbXBvbmVudHNQZXJBdHRyaWJ1dGU6cixjb21wb25lbnREYXRhdHlwZTpjLGJ5dGVPZmZzZXQ6bi5ieXRlX29mZnNldCgpLGJ5dGVTdHJpZGU6b3QuZ2V0U2l6ZUluQnl0ZXMoYykqcixub3JtYWxpemVkOm4ubm9ybWFsaXplZCgpLHF1YW50aXphdGlvbjppfX19ZnVuY3Rpb24gdlUodCl7bGV0IGU9bmV3IENlLkRlY29kZXI7dC5kZXF1YW50aXplSW5TaGFkZXImJihlLlNraXBBdHRyaWJ1dGVUcmFuc2Zvcm0oQ2UuUE9TSVRJT04pLGUuU2tpcEF0dHJpYnV0ZVRyYW5zZm9ybShDZS5OT1JNQUwpKTtsZXQgbj1uZXcgQ2UuRGVjb2RlckJ1ZmZlcjtpZihuLkluaXQodC5idWZmZXIsdC5idWZmZXIubGVuZ3RoKSxlLkdldEVuY29kZWRHZW9tZXRyeVR5cGUobikhPT1DZS5QT0lOVF9DTE9VRCl0aHJvdyBuZXcgZ2UoIkRyYWNvIGdlb21ldHJ5IHR5cGUgbXVzdCBiZSBQT0lOVF9DTE9VRC4iKTtsZXQgcj1uZXcgQ2UuUG9pbnRDbG91ZCxpPWUuRGVjb2RlQnVmZmVyVG9Qb2ludENsb3VkKG4scik7aWYoIWkub2soKXx8ci5wdHI9PT0wKXRocm93IG5ldyBnZShgRXJyb3IgZGVjb2RpbmcgZHJhY28gcG9pbnQgY2xvdWQ6ICR7aS5lcnJvcl9tc2coKX1gKTtDZS5kZXN0cm95KG4pO2xldCBzPXt9LGY9dC5wcm9wZXJ0aWVzO2ZvcihsZXQgdSBpbiBmKWlmKGYuaGFzT3duUHJvcGVydHkodSkpe2xldCBjO2lmKHU9PT0iUE9TSVRJT04ifHx1PT09Ik5PUk1BTCIpe2xldCBsPWUuR2V0QXR0cmlidXRlSWQocixDZVt1XSk7Yz1lLkdldEF0dHJpYnV0ZShyLGwpfWVsc2V7bGV0IGw9Zlt1XTtjPWUuR2V0QXR0cmlidXRlQnlVbmlxdWVJZChyLGwpfXNbdV09cDIocixlLGMpfXJldHVybiBDZS5kZXN0cm95KHIpLENlLmRlc3Ryb3koZSksc31mdW5jdGlvbiBEVSh0KXtsZXQgZT1uZXcgQ2UuRGVjb2RlcixuPVsiUE9TSVRJT04iLCJOT1JNQUwiLCJDT0xPUiIsIlRFWF9DT09SRCJdO2lmKHQuZGVxdWFudGl6ZUluU2hhZGVyKWZvcihsZXQgcD0wO3A8bi5sZW5ndGg7KytwKWUuU2tpcEF0dHJpYnV0ZVRyYW5zZm9ybShDZVtuW3BdXSk7bGV0IG89dC5idWZmZXJWaWV3LHI9bmV3IENlLkRlY29kZXJCdWZmZXI7aWYoci5Jbml0KHQuYXJyYXksby5ieXRlTGVuZ3RoKSxlLkdldEVuY29kZWRHZW9tZXRyeVR5cGUocikhPT1DZS5UUklBTkdVTEFSX01FU0gpdGhyb3cgbmV3IGdlKCJVbnN1cHBvcnRlZCBkcmFjbyBtZXNoIGdlb21ldHJ5IHR5cGUuIik7bGV0IHM9bmV3IENlLk1lc2gsZj1lLkRlY29kZUJ1ZmZlclRvTWVzaChyLHMpO2lmKCFmLm9rKCl8fHMucHRyPT09MCl0aHJvdyBuZXcgZ2UoYEVycm9yIGRlY29kaW5nIGRyYWNvIG1lc2ggZ2VvbWV0cnk6ICR7Zi5lcnJvcl9tc2coKX1gKTtDZS5kZXN0cm95KHIpO2xldCB1PXt9LGM9dC5jb21wcmVzc2VkQXR0cmlidXRlcztmb3IobGV0IHAgaW4gYylpZihjLmhhc093blByb3BlcnR5KHApKXtsZXQgZD1jW3BdLG09ZS5HZXRBdHRyaWJ1dGVCeVVuaXF1ZUlkKHMsZCk7dVtwXT1wMihzLGUsbSl9bGV0IGw9e2luZGV4QXJyYXk6TVUocyxlKSxhdHRyaWJ1dGVEYXRhOnV9O3JldHVybiBDZS5kZXN0cm95KHMpLENlLmRlc3Ryb3koZSksbH1hc3luYyBmdW5jdGlvbiBMVSh0LGUpe3JldHVybiBoKHQuYnVmZmVyVmlldyk/RFUodCk6dlUodCl9YXN5bmMgZnVuY3Rpb24gRlUodCxlKXtsZXQgbj10LndlYkFzc2VtYmx5Q29uZmlnO3JldHVybiBoKG4pJiZoKG4ud2FzbUJpbmFyeUZpbGUpP0NlPWF3YWl0KDAsQWcuZGVmYXVsdCkobik6Q2U9YXdhaXQoMCxBZy5kZWZhdWx0KSgpLCEwfWFzeW5jIGZ1bmN0aW9uIEJVKHQsZSl7bGV0IG49dC53ZWJBc3NlbWJseUNvbmZpZztyZXR1cm4gaChuKT9GVSh0LGUpOkxVKHQsZSl9dmFyIEFnLENlLFVVLHdnPVooKCk9PntEZSgpO2F0KCk7JGUoKTtKcigpO3NvKCk7QWc9bW8oZ2coKSwxKTtVVT1RZShCVSl9KTtmdW5jdGlvbiBUZyh0LGUpe2lmKFRnLnBhc3NUaHJvdWdoRGF0YUZvclRlc3RpbmcpcmV0dXJuIGU7eS50eXBlT2Yub2JqZWN0KCJrZXkiLHQpLHkudHlwZU9mLm9iamVjdCgiZGF0YSIsZSk7bGV0IG49dC5ieXRlTGVuZ3RoO2lmKG49PT0wfHxuJTQhPT0wKXRocm93IG5ldyBnZSgiVGhlIGxlbmd0aCBvZiBrZXkgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCBhbmQgYSBtdWx0aXBsZSBvZiA0LiIpO2xldCBvPW5ldyBEYXRhVmlldyhlKSxyPW8uZ2V0VWludDMyKDAsITApO2lmKHI9PT1WVXx8cj09PWtVKXJldHVybiBlO2xldCBpPW5ldyBEYXRhVmlldyh0KSxzPTAsZj1lLmJ5dGVMZW5ndGgsdT1mLWYlOCxjPW4sbCxwPTg7Zm9yKDtzPHU7KWZvcihwPShwKzgpJTI0LGw9cDtzPHUmJmw8Yzspby5zZXRVaW50MzIocyxvLmdldFVpbnQzMihzLCEwKV5pLmdldFVpbnQzMihsLCEwKSwhMCksby5zZXRVaW50MzIocys0LG8uZ2V0VWludDMyKHMrNCwhMCleaS5nZXRVaW50MzIobCs0LCEwKSwhMCkscys9OCxsKz0yNDtpZihzPGYpZm9yKGw+PWMmJihwPShwKzgpJTI0LGw9cCk7czxmOylvLnNldFVpbnQ4KHMsby5nZXRVaW50OChzKV5pLmdldFVpbnQ4KGwpKSxzKyssbCsrfXZhciBWVSxrVSxkMixtMj1aKCgpPT57WXQoKTtKcigpO1ZVPTE5NTMwMjk4MDUsa1U9MjkxNzAzNDEwMDtUZy5wYXNzVGhyb3VnaERhdGFGb3JUZXN0aW5nPSExO2QyPVRnfSk7ZnVuY3Rpb24gR1UodCxlKXtyZXR1cm4odCZlKSE9PTB9dmFyIEdhLGgyPVooKCk9PntHYT1HVX0pO2Z1bmN0aW9uIHlpKHQsZSxuLG8scixpKXt0aGlzLl9iaXRzPXQsdGhpcy5jbm9kZVZlcnNpb249ZSx0aGlzLmltYWdlcnlWZXJzaW9uPW4sdGhpcy50ZXJyYWluVmVyc2lvbj1vLHRoaXMuaW1hZ2VyeVByb3ZpZGVyPXIsdGhpcy50ZXJyYWluUHJvdmlkZXI9aSx0aGlzLmFuY2VzdG9ySGFzVGVycmFpbj0hMSx0aGlzLnRlcnJhaW5TdGF0ZT12b2lkIDB9dmFyIHpVLF8yLGpVLEhVLHFVLHkyLGcyPVooKCk9PnthdCgpO2gyKCk7elU9WzEsMiw0LDhdLF8yPTE1LGpVPTE2LEhVPTY0LHFVPTEyODt5aS5jbG9uZT1mdW5jdGlvbih0LGUpe3JldHVybiBoKGUpPyhlLl9iaXRzPXQuX2JpdHMsZS5jbm9kZVZlcnNpb249dC5jbm9kZVZlcnNpb24sZS5pbWFnZXJ5VmVyc2lvbj10LmltYWdlcnlWZXJzaW9uLGUudGVycmFpblZlcnNpb249dC50ZXJyYWluVmVyc2lvbixlLmltYWdlcnlQcm92aWRlcj10LmltYWdlcnlQcm92aWRlcixlLnRlcnJhaW5Qcm92aWRlcj10LnRlcnJhaW5Qcm92aWRlcik6ZT1uZXcgeWkodC5fYml0cyx0LmNub2RlVmVyc2lvbix0LmltYWdlcnlWZXJzaW9uLHQudGVycmFpblZlcnNpb24sdC5pbWFnZXJ5UHJvdmlkZXIsdC50ZXJyYWluUHJvdmlkZXIpLGUuYW5jZXN0b3JIYXNUZXJyYWluPXQuYW5jZXN0b3JIYXNUZXJyYWluLGUudGVycmFpblN0YXRlPXQudGVycmFpblN0YXRlLGV9O3lpLnByb3RvdHlwZS5zZXRQYXJlbnQ9ZnVuY3Rpb24odCl7dGhpcy5hbmNlc3Rvckhhc1RlcnJhaW49dC5hbmNlc3Rvckhhc1RlcnJhaW58fHRoaXMuaGFzVGVycmFpbigpfTt5aS5wcm90b3R5cGUuaGFzU3VidHJlZT1mdW5jdGlvbigpe3JldHVybiBHYSh0aGlzLl9iaXRzLGpVKX07eWkucHJvdG90eXBlLmhhc0ltYWdlcnk9ZnVuY3Rpb24oKXtyZXR1cm4gR2EodGhpcy5fYml0cyxIVSl9O3lpLnByb3RvdHlwZS5oYXNUZXJyYWluPWZ1bmN0aW9uKCl7cmV0dXJuIEdhKHRoaXMuX2JpdHMscVUpfTt5aS5wcm90b3R5cGUuaGFzQ2hpbGRyZW49ZnVuY3Rpb24oKXtyZXR1cm4gR2EodGhpcy5fYml0cyxfMil9O3lpLnByb3RvdHlwZS5oYXNDaGlsZD1mdW5jdGlvbih0KXtyZXR1cm4gR2EodGhpcy5fYml0cyx6VVt0XSl9O3lpLnByb3RvdHlwZS5nZXRDaGlsZEJpdG1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYml0cyZfMn07eTI9eWl9KTt2YXIgYjI9VW4oKG11dCxBMik9PnsidXNlIHN0cmljdCI7dmFyIEtVPSh0LGUsbixvKT0+e2xldCByPXQmNjU1MzV8MCxpPXQ+Pj4xNiY2NTUzNXwwLHM9MDtmb3IoO24hPT0wOyl7cz1uPjJlMz8yZTM6bixuLT1zO2RvIHI9citlW28rK118MCxpPWkrcnwwO3doaWxlKC0tcyk7ciU9NjU1MjEsaSU9NjU1MjF9cmV0dXJuIHJ8aTw8MTZ8MH07QTIuZXhwb3J0cz1LVX0pO3ZhciBUMj1VbigoaHV0LHcyKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgV1U9KCk9PntsZXQgdCxlPVtdO2Zvcih2YXIgbj0wO248MjU2O24rKyl7dD1uO2Zvcih2YXIgbz0wO288ODtvKyspdD10JjE/Mzk4ODI5MjM4NF50Pj4+MTp0Pj4+MTtlW25dPXR9cmV0dXJuIGV9LFhVPW5ldyBVaW50MzJBcnJheShXVSgpKSxZVT0odCxlLG4sbyk9PntsZXQgcj1YVSxpPW8rbjt0Xj0tMTtmb3IobGV0IHM9bztzPGk7cysrKXQ9dD4+PjheclsodF5lW3NdKSYyNTVdO3JldHVybiB0Xi0xfTt3Mi5leHBvcnRzPVlVfSk7dmFyIEUyPVVuKChfdXQsTzIpPT57InVzZSBzdHJpY3QiO08yLmV4cG9ydHM9ZnVuY3Rpb24oZSxuKXtsZXQgbyxyLGkscyxmLHUsYyxsLHAsZCxtLF8sZyxiLE8sVCxFLHcsQyxOLEksTCx2LEQsVT1lLnN0YXRlO289ZS5uZXh0X2luLHY9ZS5pbnB1dCxyPW8rKGUuYXZhaWxfaW4tNSksaT1lLm5leHRfb3V0LEQ9ZS5vdXRwdXQscz1pLShuLWUuYXZhaWxfb3V0KSxmPWkrKGUuYXZhaWxfb3V0LTI1NyksdT1VLmRtYXgsYz1VLndzaXplLGw9VS53aGF2ZSxwPVUud25leHQsZD1VLndpbmRvdyxtPVUuaG9sZCxfPVUuYml0cyxnPVUubGVuY29kZSxiPVUuZGlzdGNvZGUsTz0oMTw8VS5sZW5iaXRzKS0xLFQ9KDE8PFUuZGlzdGJpdHMpLTE7dDpkb3tfPDE1JiYobSs9dltvKytdPDxfLF8rPTgsbSs9dltvKytdPDxfLF8rPTgpLEU9Z1ttJk9dO2U6Zm9yKDs7KXtpZih3PUU+Pj4yNCxtPj4+PXcsXy09dyx3PUU+Pj4xNiYyNTUsdz09PTApRFtpKytdPUUmNjU1MzU7ZWxzZSBpZih3JjE2KXtDPUUmNjU1MzUsdyY9MTUsdyYmKF88dyYmKG0rPXZbbysrXTw8XyxfKz04KSxDKz1tJigxPDx3KS0xLG0+Pj49dyxfLT13KSxfPDE1JiYobSs9dltvKytdPDxfLF8rPTgsbSs9dltvKytdPDxfLF8rPTgpLEU9YlttJlRdO246Zm9yKDs7KXtpZih3PUU+Pj4yNCxtPj4+PXcsXy09dyx3PUU+Pj4xNiYyNTUsdyYxNil7aWYoTj1FJjY1NTM1LHcmPTE1LF88dyYmKG0rPXZbbysrXTw8XyxfKz04LF88dyYmKG0rPXZbbysrXTw8XyxfKz04KSksTis9bSYoMTw8dyktMSxOPnUpe2UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsVS5tb2RlPTE2MjA5O2JyZWFrIHR9aWYobT4+Pj13LF8tPXcsdz1pLXMsTj53KXtpZih3PU4tdyx3PmwmJlUuc2FuZSl7ZS5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixVLm1vZGU9MTYyMDk7YnJlYWsgdH1pZihJPTAsTD1kLHA9PT0wKXtpZihJKz1jLXcsdzxDKXtDLT13O2RvIERbaSsrXT1kW0krK107d2hpbGUoLS13KTtJPWktTixMPUR9fWVsc2UgaWYocDx3KXtpZihJKz1jK3Atdyx3LT1wLHc8Qyl7Qy09dztkbyBEW2krK109ZFtJKytdO3doaWxlKC0tdyk7aWYoST0wLHA8Qyl7dz1wLEMtPXc7ZG8gRFtpKytdPWRbSSsrXTt3aGlsZSgtLXcpO0k9aS1OLEw9RH19fWVsc2UgaWYoSSs9cC13LHc8Qyl7Qy09dztkbyBEW2krK109ZFtJKytdO3doaWxlKC0tdyk7ST1pLU4sTD1EfWZvcig7Qz4yOylEW2krK109TFtJKytdLERbaSsrXT1MW0krK10sRFtpKytdPUxbSSsrXSxDLT0zO0MmJihEW2krK109TFtJKytdLEM+MSYmKERbaSsrXT1MW0krK10pKX1lbHNle0k9aS1OO2RvIERbaSsrXT1EW0krK10sRFtpKytdPURbSSsrXSxEW2krK109RFtJKytdLEMtPTM7d2hpbGUoQz4yKTtDJiYoRFtpKytdPURbSSsrXSxDPjEmJihEW2krK109RFtJKytdKSl9fWVsc2UgaWYodyY2NCl7ZS5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsVS5tb2RlPTE2MjA5O2JyZWFrIHR9ZWxzZXtFPWJbKEUmNjU1MzUpKyhtJigxPDx3KS0xKV07Y29udGludWUgbn1icmVha319ZWxzZSBpZih3JjY0KWlmKHcmMzIpe1UubW9kZT0xNjE5MTticmVhayB0fWVsc2V7ZS5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsVS5tb2RlPTE2MjA5O2JyZWFrIHR9ZWxzZXtFPWdbKEUmNjU1MzUpKyhtJigxPDx3KS0xKV07Y29udGludWUgZX1icmVha319d2hpbGUobzxyJiZpPGYpO0M9Xz4+MyxvLT1DLF8tPUM8PDMsbSY9KDE8PF8pLTEsZS5uZXh0X2luPW8sZS5uZXh0X291dD1pLGUuYXZhaWxfaW49bzxyPzUrKHItbyk6NS0oby1yKSxlLmF2YWlsX291dD1pPGY/MjU3KyhmLWkpOjI1Ny0oaS1mKSxVLmhvbGQ9bSxVLmJpdHM9X319KTt2YXIgUzI9VW4oKHl1dCxSMik9PnsidXNlIHN0cmljdCI7dmFyICRVPW5ldyBVaW50MTZBcnJheShbMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OCwwLDBdKSxaVT1uZXcgVWludDhBcnJheShbMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTcsMTcsMTcsMTcsMTgsMTgsMTgsMTgsMTksMTksMTksMTksMjAsMjAsMjAsMjAsMjEsMjEsMjEsMjEsMTYsNzIsNzhdKSxRVT1uZXcgVWludDE2QXJyYXkoWzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3NywwLDBdKSxKVT1uZXcgVWludDhBcnJheShbMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdKSx0Nj0odCxlLG4sbyxyLGkscyxmKT0+e2xldCB1PWYuYml0cyxjPTAsbD0wLHA9MCxkPTAsbT0wLF89MCxnPTAsYj0wLE89MCxUPTAsRSx3LEMsTixJLEw9bnVsbCx2LEQ9bmV3IFVpbnQxNkFycmF5KDE2KSxVPW5ldyBVaW50MTZBcnJheSgxNiksQT1udWxsLFMsUCxGO2ZvcihjPTA7Yzw9MTU7YysrKURbY109MDtmb3IobD0wO2w8bztsKyspRFtlW24rbF1dKys7Zm9yKG09dSxkPTE1O2Q+PTEmJkRbZF09PT0wO2QtLSk7aWYobT5kJiYobT1kKSxkPT09MClyZXR1cm4gcltpKytdPTE8PDI0fDY0PDwxNnwwLHJbaSsrXT0xPDwyNHw2NDw8MTZ8MCxmLmJpdHM9MSwwO2ZvcihwPTE7cDxkJiZEW3BdPT09MDtwKyspO2ZvcihtPHAmJihtPXApLGI9MSxjPTE7Yzw9MTU7YysrKWlmKGI8PD0xLGItPURbY10sYjwwKXJldHVybi0xO2lmKGI+MCYmKHQ9PT0wfHxkIT09MSkpcmV0dXJuLTE7Zm9yKFVbMV09MCxjPTE7YzwxNTtjKyspVVtjKzFdPVVbY10rRFtjXTtmb3IobD0wO2w8bztsKyspZVtuK2xdIT09MCYmKHNbVVtlW24rbF1dKytdPWwpO2lmKHQ9PT0wPyhMPUE9cyx2PTIwKTp0PT09MT8oTD0kVSxBPVpVLHY9MjU3KTooTD1RVSxBPUpVLHY9MCksVD0wLGw9MCxjPXAsST1pLF89bSxnPTAsQz0tMSxPPTE8PG0sTj1PLTEsdD09PTEmJk8+ODUyfHx0PT09MiYmTz41OTIpcmV0dXJuIDE7Zm9yKDs7KXtTPWMtZyxzW2xdKzE8dj8oUD0wLEY9c1tsXSk6c1tsXT49dj8oUD1BW3NbbF0tdl0sRj1MW3NbbF0tdl0pOihQPTk2LEY9MCksRT0xPDxjLWcsdz0xPDxfLHA9dztkbyB3LT1FLHJbSSsoVD4+Zykrd109Uzw8MjR8UDw8MTZ8RnwwO3doaWxlKHchPT0wKTtmb3IoRT0xPDxjLTE7VCZFOylFPj49MTtpZihFIT09MD8oVCY9RS0xLFQrPUUpOlQ9MCxsKyssLS1EW2NdPT09MCl7aWYoYz09PWQpYnJlYWs7Yz1lW24rc1tsXV19aWYoYz5tJiYoVCZOKSE9PUMpe2ZvcihnPT09MCYmKGc9bSksSSs9cCxfPWMtZyxiPTE8PF87XytnPGQmJihiLT1EW18rZ10sIShiPD0wKSk7KV8rKyxiPDw9MTtpZihPKz0xPDxfLHQ9PT0xJiZPPjg1Mnx8dD09PTImJk8+NTkyKXJldHVybiAxO0M9VCZOLHJbQ109bTw8MjR8Xzw8MTZ8SS1pfDB9fXJldHVybiBUIT09MCYmKHJbSStUXT1jLWc8PDI0fDY0PDwxNnwwKSxmLmJpdHM9bSwwfTtSMi5leHBvcnRzPXQ2fSk7dmFyIG9tPVVuKChndXQsQzIpPT57InVzZSBzdHJpY3QiO0MyLmV4cG9ydHM9e1pfTk9fRkxVU0g6MCxaX1BBUlRJQUxfRkxVU0g6MSxaX1NZTkNfRkxVU0g6MixaX0ZVTExfRkxVU0g6MyxaX0ZJTklTSDo0LFpfQkxPQ0s6NSxaX1RSRUVTOjYsWl9PSzowLFpfU1RSRUFNX0VORDoxLFpfTkVFRF9ESUNUOjIsWl9FUlJOTzotMSxaX1NUUkVBTV9FUlJPUjotMixaX0RBVEFfRVJST1I6LTMsWl9NRU1fRVJST1I6LTQsWl9CVUZfRVJST1I6LTUsWl9OT19DT01QUkVTU0lPTjowLFpfQkVTVF9TUEVFRDoxLFpfQkVTVF9DT01QUkVTU0lPTjo5LFpfREVGQVVMVF9DT01QUkVTU0lPTjotMSxaX0ZJTFRFUkVEOjEsWl9IVUZGTUFOX09OTFk6MixaX1JMRTozLFpfRklYRUQ6NCxaX0RFRkFVTFRfU1RSQVRFR1k6MCxaX0JJTkFSWTowLFpfVEVYVDoxLFpfVU5LTk9XTjoyLFpfREVGTEFURUQ6OH19KTt2YXIgYVM9VW4oKEF1dCxZcik9PnsidXNlIHN0cmljdCI7dmFyIHhnPWIyKCksZ2k9VDIoKSxlNj1FMigpLGR1PVMyKCksbjY9MCxKMj0xLHRTPTIse1pfRklOSVNIOngyLFpfQkxPQ0s6bzYsWl9UUkVFUzpybSxaX09LOkNjLFpfU1RSRUFNX0VORDpyNixaX05FRURfRElDVDppNixaX1NUUkVBTV9FUlJPUjpNcixaX0RBVEFfRVJST1I6ZVMsWl9NRU1fRVJST1I6UGcsWl9CVUZfRVJST1I6czYsWl9ERUZMQVRFRDpQMn09b20oKSxhbT0xNjE4MCxNMj0xNjE4MSxOMj0xNjE4MixJMj0xNjE4Myx2Mj0xNjE4NCxEMj0xNjE4NSxMMj0xNjE4NixGMj0xNjE4NyxCMj0xNjE4OCxVMj0xNjE4OSxjbT0xNjE5MCxxaT0xNjE5MSxPZz0xNjE5MixWMj0xNjE5MyxFZz0xNjE5NCxrMj0xNjE5NSxHMj0xNjE5Nix6Mj0xNjE5NyxqMj0xNjE5OCxpbT0xNjE5OSxzbT0xNjIwMCxIMj0xNjIwMSxxMj0xNjIwMixLMj0xNjIwMyxXMj0xNjIwNCxYMj0xNjIwNSxSZz0xNjIwNixZMj0xNjIwNywkMj0xNjIwOCxQbj0xNjIwOSxNZz0xNjIxMCxuUz0xNjIxMSxjNj04NTIsYTY9NTkyLGY2PTE1LHU2PWY2LFoyPXQ9Pih0Pj4+MjQmMjU1KSsodD4+PjgmNjUyODApKygodCY2NTI4MCk8PDgpKygodCYyNTUpPDwyNCk7ZnVuY3Rpb24gbDYoKXt0aGlzLnN0cm09bnVsbCx0aGlzLm1vZGU9MCx0aGlzLmxhc3Q9ITEsdGhpcy53cmFwPTAsdGhpcy5oYXZlZGljdD0hMSx0aGlzLmZsYWdzPTAsdGhpcy5kbWF4PTAsdGhpcy5jaGVjaz0wLHRoaXMudG90YWw9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLndiaXRzPTAsdGhpcy53c2l6ZT0wLHRoaXMud2hhdmU9MCx0aGlzLnduZXh0PTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLmhvbGQ9MCx0aGlzLmJpdHM9MCx0aGlzLmxlbmd0aD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5leHRyYT0wLHRoaXMubGVuY29kZT1udWxsLHRoaXMuZGlzdGNvZGU9bnVsbCx0aGlzLmxlbmJpdHM9MCx0aGlzLmRpc3RiaXRzPTAsdGhpcy5uY29kZT0wLHRoaXMubmxlbj0wLHRoaXMubmRpc3Q9MCx0aGlzLmhhdmU9MCx0aGlzLm5leHQ9bnVsbCx0aGlzLmxlbnM9bmV3IFVpbnQxNkFycmF5KDMyMCksdGhpcy53b3JrPW5ldyBVaW50MTZBcnJheSgyODgpLHRoaXMubGVuZHluPW51bGwsdGhpcy5kaXN0ZHluPW51bGwsdGhpcy5zYW5lPTAsdGhpcy5iYWNrPTAsdGhpcy53YXM9MH12YXIgeGM9dD0+e2lmKCF0KXJldHVybiAxO2xldCBlPXQuc3RhdGU7cmV0dXJuIWV8fGUuc3RybSE9PXR8fGUubW9kZTxhbXx8ZS5tb2RlPm5TPzE6MH0sb1M9dD0+e2lmKHhjKHQpKXJldHVybiBNcjtsZXQgZT10LnN0YXRlO3JldHVybiB0LnRvdGFsX2luPXQudG90YWxfb3V0PWUudG90YWw9MCx0Lm1zZz0iIixlLndyYXAmJih0LmFkbGVyPWUud3JhcCYxKSxlLm1vZGU9YW0sZS5sYXN0PTAsZS5oYXZlZGljdD0wLGUuZmxhZ3M9LTEsZS5kbWF4PTMyNzY4LGUuaGVhZD1udWxsLGUuaG9sZD0wLGUuYml0cz0wLGUubGVuY29kZT1lLmxlbmR5bj1uZXcgSW50MzJBcnJheShjNiksZS5kaXN0Y29kZT1lLmRpc3RkeW49bmV3IEludDMyQXJyYXkoYTYpLGUuc2FuZT0xLGUuYmFjaz0tMSxDY30sclM9dD0+e2lmKHhjKHQpKXJldHVybiBNcjtsZXQgZT10LnN0YXRlO3JldHVybiBlLndzaXplPTAsZS53aGF2ZT0wLGUud25leHQ9MCxvUyh0KX0saVM9KHQsZSk9PntsZXQgbjtpZih4Yyh0KSlyZXR1cm4gTXI7bGV0IG89dC5zdGF0ZTtyZXR1cm4gZTwwPyhuPTAsZT0tZSk6KG49KGU+PjQpKzUsZTw0OCYmKGUmPTE1KSksZSYmKGU8OHx8ZT4xNSk/TXI6KG8ud2luZG93IT09bnVsbCYmby53Yml0cyE9PWUmJihvLndpbmRvdz1udWxsKSxvLndyYXA9bixvLndiaXRzPWUsclModCkpfSxzUz0odCxlKT0+e2lmKCF0KXJldHVybiBNcjtsZXQgbj1uZXcgbDY7dC5zdGF0ZT1uLG4uc3RybT10LG4ud2luZG93PW51bGwsbi5tb2RlPWFtO2xldCBvPWlTKHQsZSk7cmV0dXJuIG8hPT1DYyYmKHQuc3RhdGU9bnVsbCksb30scDY9dD0+c1ModCx1NiksUTI9ITAsU2csQ2csZDY9dD0+e2lmKFEyKXtTZz1uZXcgSW50MzJBcnJheSg1MTIpLENnPW5ldyBJbnQzMkFycmF5KDMyKTtsZXQgZT0wO2Zvcig7ZTwxNDQ7KXQubGVuc1tlKytdPTg7Zm9yKDtlPDI1NjspdC5sZW5zW2UrK109OTtmb3IoO2U8MjgwOyl0LmxlbnNbZSsrXT03O2Zvcig7ZTwyODg7KXQubGVuc1tlKytdPTg7Zm9yKGR1KEoyLHQubGVucywwLDI4OCxTZywwLHQud29yayx7Yml0czo5fSksZT0wO2U8MzI7KXQubGVuc1tlKytdPTU7ZHUodFMsdC5sZW5zLDAsMzIsQ2csMCx0Lndvcmsse2JpdHM6NX0pLFEyPSExfXQubGVuY29kZT1TZyx0LmxlbmJpdHM9OSx0LmRpc3Rjb2RlPUNnLHQuZGlzdGJpdHM9NX0sY1M9KHQsZSxuLG8pPT57bGV0IHIsaT10LnN0YXRlO3JldHVybiBpLndpbmRvdz09PW51bGwmJihpLndzaXplPTE8PGkud2JpdHMsaS53bmV4dD0wLGkud2hhdmU9MCxpLndpbmRvdz1uZXcgVWludDhBcnJheShpLndzaXplKSksbz49aS53c2l6ZT8oaS53aW5kb3cuc2V0KGUuc3ViYXJyYXkobi1pLndzaXplLG4pLDApLGkud25leHQ9MCxpLndoYXZlPWkud3NpemUpOihyPWkud3NpemUtaS53bmV4dCxyPm8mJihyPW8pLGkud2luZG93LnNldChlLnN1YmFycmF5KG4tbyxuLW8rciksaS53bmV4dCksby09cixvPyhpLndpbmRvdy5zZXQoZS5zdWJhcnJheShuLW8sbiksMCksaS53bmV4dD1vLGkud2hhdmU9aS53c2l6ZSk6KGkud25leHQrPXIsaS53bmV4dD09PWkud3NpemUmJihpLnduZXh0PTApLGkud2hhdmU8aS53c2l6ZSYmKGkud2hhdmUrPXIpKSksMH0sbTY9KHQsZSk9PntsZXQgbixvLHIsaSxzLGYsdSxjLGwscCxkLG0sXyxnLGI9MCxPLFQsRSx3LEMsTixJLEwsdj1uZXcgVWludDhBcnJheSg0KSxELFUsQT1uZXcgVWludDhBcnJheShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pO2lmKHhjKHQpfHwhdC5vdXRwdXR8fCF0LmlucHV0JiZ0LmF2YWlsX2luIT09MClyZXR1cm4gTXI7bj10LnN0YXRlLG4ubW9kZT09PXFpJiYobi5tb2RlPU9nKSxzPXQubmV4dF9vdXQscj10Lm91dHB1dCx1PXQuYXZhaWxfb3V0LGk9dC5uZXh0X2luLG89dC5pbnB1dCxmPXQuYXZhaWxfaW4sYz1uLmhvbGQsbD1uLmJpdHMscD1mLGQ9dSxMPUNjO3Q6Zm9yKDs7KXN3aXRjaChuLm1vZGUpe2Nhc2UgYW06aWYobi53cmFwPT09MCl7bi5tb2RlPU9nO2JyZWFrfWZvcig7bDwxNjspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWlmKG4ud3JhcCYyJiZjPT09MzU2MTUpe24ud2JpdHM9PT0wJiYobi53Yml0cz0xNSksbi5jaGVjaz0wLHZbMF09YyYyNTUsdlsxXT1jPj4+OCYyNTUsbi5jaGVjaz1naShuLmNoZWNrLHYsMiwwKSxjPTAsbD0wLG4ubW9kZT1NMjticmVha31pZihuLmhlYWQmJihuLmhlYWQuZG9uZT0hMSksIShuLndyYXAmMSl8fCgoKGMmMjU1KTw8OCkrKGM+PjgpKSUzMSl7dC5tc2c9ImluY29ycmVjdCBoZWFkZXIgY2hlY2siLG4ubW9kZT1QbjticmVha31pZigoYyYxNSkhPT1QMil7dC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixuLm1vZGU9UG47YnJlYWt9aWYoYz4+Pj00LGwtPTQsST0oYyYxNSkrOCxuLndiaXRzPT09MCYmKG4ud2JpdHM9SSksST4xNXx8ST5uLndiaXRzKXt0Lm1zZz0iaW52YWxpZCB3aW5kb3cgc2l6ZSIsbi5tb2RlPVBuO2JyZWFrfW4uZG1heD0xPDxuLndiaXRzLG4uZmxhZ3M9MCx0LmFkbGVyPW4uY2hlY2s9MSxuLm1vZGU9YyY1MTI/VTI6cWksYz0wLGw9MDticmVhaztjYXNlIE0yOmZvcig7bDwxNjspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWlmKG4uZmxhZ3M9Yywobi5mbGFncyYyNTUpIT09UDIpe3QubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsbi5tb2RlPVBuO2JyZWFrfWlmKG4uZmxhZ3MmNTczNDQpe3QubXNnPSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiLG4ubW9kZT1QbjticmVha31uLmhlYWQmJihuLmhlYWQudGV4dD1jPj44JjEpLG4uZmxhZ3MmNTEyJiZuLndyYXAmNCYmKHZbMF09YyYyNTUsdlsxXT1jPj4+OCYyNTUsbi5jaGVjaz1naShuLmNoZWNrLHYsMiwwKSksYz0wLGw9MCxuLm1vZGU9TjI7Y2FzZSBOMjpmb3IoO2w8MzI7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1uLmhlYWQmJihuLmhlYWQudGltZT1jKSxuLmZsYWdzJjUxMiYmbi53cmFwJjQmJih2WzBdPWMmMjU1LHZbMV09Yz4+PjgmMjU1LHZbMl09Yz4+PjE2JjI1NSx2WzNdPWM+Pj4yNCYyNTUsbi5jaGVjaz1naShuLmNoZWNrLHYsNCwwKSksYz0wLGw9MCxuLm1vZGU9STI7Y2FzZSBJMjpmb3IoO2w8MTY7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1uLmhlYWQmJihuLmhlYWQueGZsYWdzPWMmMjU1LG4uaGVhZC5vcz1jPj44KSxuLmZsYWdzJjUxMiYmbi53cmFwJjQmJih2WzBdPWMmMjU1LHZbMV09Yz4+PjgmMjU1LG4uY2hlY2s9Z2kobi5jaGVjayx2LDIsMCkpLGM9MCxsPTAsbi5tb2RlPXYyO2Nhc2UgdjI6aWYobi5mbGFncyYxMDI0KXtmb3IoO2w8MTY7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1uLmxlbmd0aD1jLG4uaGVhZCYmKG4uaGVhZC5leHRyYV9sZW49Yyksbi5mbGFncyY1MTImJm4ud3JhcCY0JiYodlswXT1jJjI1NSx2WzFdPWM+Pj44JjI1NSxuLmNoZWNrPWdpKG4uY2hlY2ssdiwyLDApKSxjPTAsbD0wfWVsc2Ugbi5oZWFkJiYobi5oZWFkLmV4dHJhPW51bGwpO24ubW9kZT1EMjtjYXNlIEQyOmlmKG4uZmxhZ3MmMTAyNCYmKG09bi5sZW5ndGgsbT5mJiYobT1mKSxtJiYobi5oZWFkJiYoST1uLmhlYWQuZXh0cmFfbGVuLW4ubGVuZ3RoLG4uaGVhZC5leHRyYXx8KG4uaGVhZC5leHRyYT1uZXcgVWludDhBcnJheShuLmhlYWQuZXh0cmFfbGVuKSksbi5oZWFkLmV4dHJhLnNldChvLnN1YmFycmF5KGksaSttKSxJKSksbi5mbGFncyY1MTImJm4ud3JhcCY0JiYobi5jaGVjaz1naShuLmNoZWNrLG8sbSxpKSksZi09bSxpKz1tLG4ubGVuZ3RoLT1tKSxuLmxlbmd0aCkpYnJlYWsgdDtuLmxlbmd0aD0wLG4ubW9kZT1MMjtjYXNlIEwyOmlmKG4uZmxhZ3MmMjA0OCl7aWYoZj09PTApYnJlYWsgdDttPTA7ZG8gST1vW2krbSsrXSxuLmhlYWQmJkkmJm4ubGVuZ3RoPDY1NTM2JiYobi5oZWFkLm5hbWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoSSkpO3doaWxlKEkmJm08Zik7aWYobi5mbGFncyY1MTImJm4ud3JhcCY0JiYobi5jaGVjaz1naShuLmNoZWNrLG8sbSxpKSksZi09bSxpKz1tLEkpYnJlYWsgdH1lbHNlIG4uaGVhZCYmKG4uaGVhZC5uYW1lPW51bGwpO24ubGVuZ3RoPTAsbi5tb2RlPUYyO2Nhc2UgRjI6aWYobi5mbGFncyY0MDk2KXtpZihmPT09MClicmVhayB0O209MDtkbyBJPW9baSttKytdLG4uaGVhZCYmSSYmbi5sZW5ndGg8NjU1MzYmJihuLmhlYWQuY29tbWVudCs9U3RyaW5nLmZyb21DaGFyQ29kZShJKSk7d2hpbGUoSSYmbTxmKTtpZihuLmZsYWdzJjUxMiYmbi53cmFwJjQmJihuLmNoZWNrPWdpKG4uY2hlY2ssbyxtLGkpKSxmLT1tLGkrPW0sSSlicmVhayB0fWVsc2Ugbi5oZWFkJiYobi5oZWFkLmNvbW1lbnQ9bnVsbCk7bi5tb2RlPUIyO2Nhc2UgQjI6aWYobi5mbGFncyY1MTIpe2Zvcig7bDwxNjspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWlmKG4ud3JhcCY0JiZjIT09KG4uY2hlY2smNjU1MzUpKXt0Lm1zZz0iaGVhZGVyIGNyYyBtaXNtYXRjaCIsbi5tb2RlPVBuO2JyZWFrfWM9MCxsPTB9bi5oZWFkJiYobi5oZWFkLmhjcmM9bi5mbGFncz4+OSYxLG4uaGVhZC5kb25lPSEwKSx0LmFkbGVyPW4uY2hlY2s9MCxuLm1vZGU9cWk7YnJlYWs7Y2FzZSBVMjpmb3IoO2w8MzI7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH10LmFkbGVyPW4uY2hlY2s9WjIoYyksYz0wLGw9MCxuLm1vZGU9Y207Y2FzZSBjbTppZihuLmhhdmVkaWN0PT09MClyZXR1cm4gdC5uZXh0X291dD1zLHQuYXZhaWxfb3V0PXUsdC5uZXh0X2luPWksdC5hdmFpbF9pbj1mLG4uaG9sZD1jLG4uYml0cz1sLGk2O3QuYWRsZXI9bi5jaGVjaz0xLG4ubW9kZT1xaTtjYXNlIHFpOmlmKGU9PT1vNnx8ZT09PXJtKWJyZWFrIHQ7Y2FzZSBPZzppZihuLmxhc3Qpe2M+Pj49bCY3LGwtPWwmNyxuLm1vZGU9Umc7YnJlYWt9Zm9yKDtsPDM7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1zd2l0Y2gobi5sYXN0PWMmMSxjPj4+PTEsbC09MSxjJjMpe2Nhc2UgMDpuLm1vZGU9VjI7YnJlYWs7Y2FzZSAxOmlmKGQ2KG4pLG4ubW9kZT1pbSxlPT09cm0pe2M+Pj49MixsLT0yO2JyZWFrIHR9YnJlYWs7Y2FzZSAyOm4ubW9kZT1HMjticmVhaztjYXNlIDM6dC5tc2c9ImludmFsaWQgYmxvY2sgdHlwZSIsbi5tb2RlPVBufWM+Pj49MixsLT0yO2JyZWFrO2Nhc2UgVjI6Zm9yKGM+Pj49bCY3LGwtPWwmNztsPDMyOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9aWYoKGMmNjU1MzUpIT09KGM+Pj4xNl42NTUzNSkpe3QubXNnPSJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIixuLm1vZGU9UG47YnJlYWt9aWYobi5sZW5ndGg9YyY2NTUzNSxjPTAsbD0wLG4ubW9kZT1FZyxlPT09cm0pYnJlYWsgdDtjYXNlIEVnOm4ubW9kZT1rMjtjYXNlIGsyOmlmKG09bi5sZW5ndGgsbSl7aWYobT5mJiYobT1mKSxtPnUmJihtPXUpLG09PT0wKWJyZWFrIHQ7ci5zZXQoby5zdWJhcnJheShpLGkrbSkscyksZi09bSxpKz1tLHUtPW0scys9bSxuLmxlbmd0aC09bTticmVha31uLm1vZGU9cWk7YnJlYWs7Y2FzZSBHMjpmb3IoO2w8MTQ7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1pZihuLm5sZW49KGMmMzEpKzI1NyxjPj4+PTUsbC09NSxuLm5kaXN0PShjJjMxKSsxLGM+Pj49NSxsLT01LG4ubmNvZGU9KGMmMTUpKzQsYz4+Pj00LGwtPTQsbi5ubGVuPjI4Nnx8bi5uZGlzdD4zMCl7dC5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIixuLm1vZGU9UG47YnJlYWt9bi5oYXZlPTAsbi5tb2RlPXoyO2Nhc2UgejI6Zm9yKDtuLmhhdmU8bi5uY29kZTspe2Zvcig7bDwzOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9bi5sZW5zW0Fbbi5oYXZlKytdXT1jJjcsYz4+Pj0zLGwtPTN9Zm9yKDtuLmhhdmU8MTk7KW4ubGVuc1tBW24uaGF2ZSsrXV09MDtpZihuLmxlbmNvZGU9bi5sZW5keW4sbi5sZW5iaXRzPTcsRD17Yml0czpuLmxlbmJpdHN9LEw9ZHUobjYsbi5sZW5zLDAsMTksbi5sZW5jb2RlLDAsbi53b3JrLEQpLG4ubGVuYml0cz1ELmJpdHMsTCl7dC5tc2c9ImludmFsaWQgY29kZSBsZW5ndGhzIHNldCIsbi5tb2RlPVBuO2JyZWFrfW4uaGF2ZT0wLG4ubW9kZT1qMjtjYXNlIGoyOmZvcig7bi5oYXZlPG4ubmxlbituLm5kaXN0Oyl7Zm9yKDtiPW4ubGVuY29kZVtjJigxPDxuLmxlbmJpdHMpLTFdLE89Yj4+PjI0LFQ9Yj4+PjE2JjI1NSxFPWImNjU1MzUsIShPPD1sKTspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWlmKEU8MTYpYz4+Pj1PLGwtPU8sbi5sZW5zW24uaGF2ZSsrXT1FO2Vsc2V7aWYoRT09PTE2KXtmb3IoVT1PKzI7bDxVOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9aWYoYz4+Pj1PLGwtPU8sbi5oYXZlPT09MCl7dC5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLG4ubW9kZT1QbjticmVha31JPW4ubGVuc1tuLmhhdmUtMV0sbT0zKyhjJjMpLGM+Pj49MixsLT0yfWVsc2UgaWYoRT09PTE3KXtmb3IoVT1PKzM7bDxVOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9Yz4+Pj1PLGwtPU8sST0wLG09MysoYyY3KSxjPj4+PTMsbC09M31lbHNle2ZvcihVPU8rNztsPFU7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1jPj4+PU8sbC09TyxJPTAsbT0xMSsoYyYxMjcpLGM+Pj49NyxsLT03fWlmKG4uaGF2ZSttPm4ubmxlbituLm5kaXN0KXt0Lm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsbi5tb2RlPVBuO2JyZWFrfWZvcig7bS0tOyluLmxlbnNbbi5oYXZlKytdPUl9fWlmKG4ubW9kZT09PVBuKWJyZWFrO2lmKG4ubGVuc1syNTZdPT09MCl7dC5tc2c9ImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIsbi5tb2RlPVBuO2JyZWFrfWlmKG4ubGVuYml0cz05LEQ9e2JpdHM6bi5sZW5iaXRzfSxMPWR1KEoyLG4ubGVucywwLG4ubmxlbixuLmxlbmNvZGUsMCxuLndvcmssRCksbi5sZW5iaXRzPUQuYml0cyxMKXt0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0IixuLm1vZGU9UG47YnJlYWt9aWYobi5kaXN0Yml0cz02LG4uZGlzdGNvZGU9bi5kaXN0ZHluLEQ9e2JpdHM6bi5kaXN0Yml0c30sTD1kdSh0UyxuLmxlbnMsbi5ubGVuLG4ubmRpc3Qsbi5kaXN0Y29kZSwwLG4ud29yayxEKSxuLmRpc3RiaXRzPUQuYml0cyxMKXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZXMgc2V0IixuLm1vZGU9UG47YnJlYWt9aWYobi5tb2RlPWltLGU9PT1ybSlicmVhayB0O2Nhc2UgaW06bi5tb2RlPXNtO2Nhc2Ugc206aWYoZj49NiYmdT49MjU4KXt0Lm5leHRfb3V0PXMsdC5hdmFpbF9vdXQ9dSx0Lm5leHRfaW49aSx0LmF2YWlsX2luPWYsbi5ob2xkPWMsbi5iaXRzPWwsZTYodCxkKSxzPXQubmV4dF9vdXQscj10Lm91dHB1dCx1PXQuYXZhaWxfb3V0LGk9dC5uZXh0X2luLG89dC5pbnB1dCxmPXQuYXZhaWxfaW4sYz1uLmhvbGQsbD1uLmJpdHMsbi5tb2RlPT09cWkmJihuLmJhY2s9LTEpO2JyZWFrfWZvcihuLmJhY2s9MDtiPW4ubGVuY29kZVtjJigxPDxuLmxlbmJpdHMpLTFdLE89Yj4+PjI0LFQ9Yj4+PjE2JjI1NSxFPWImNjU1MzUsIShPPD1sKTspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWlmKFQmJiEoVCYyNDApKXtmb3Iodz1PLEM9VCxOPUU7Yj1uLmxlbmNvZGVbTisoKGMmKDE8PHcrQyktMSk+PncpXSxPPWI+Pj4yNCxUPWI+Pj4xNiYyNTUsRT1iJjY1NTM1LCEodytPPD1sKTspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWM+Pj49dyxsLT13LG4uYmFjays9d31pZihjPj4+PU8sbC09TyxuLmJhY2srPU8sbi5sZW5ndGg9RSxUPT09MCl7bi5tb2RlPVgyO2JyZWFrfWlmKFQmMzIpe24uYmFjaz0tMSxuLm1vZGU9cWk7YnJlYWt9aWYoVCY2NCl7dC5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsbi5tb2RlPVBuO2JyZWFrfW4uZXh0cmE9VCYxNSxuLm1vZGU9SDI7Y2FzZSBIMjppZihuLmV4dHJhKXtmb3IoVT1uLmV4dHJhO2w8VTspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fW4ubGVuZ3RoKz1jJigxPDxuLmV4dHJhKS0xLGM+Pj49bi5leHRyYSxsLT1uLmV4dHJhLG4uYmFjays9bi5leHRyYX1uLndhcz1uLmxlbmd0aCxuLm1vZGU9cTI7Y2FzZSBxMjpmb3IoO2I9bi5kaXN0Y29kZVtjJigxPDxuLmRpc3RiaXRzKS0xXSxPPWI+Pj4yNCxUPWI+Pj4xNiYyNTUsRT1iJjY1NTM1LCEoTzw9bCk7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1pZighKFQmMjQwKSl7Zm9yKHc9TyxDPVQsTj1FO2I9bi5kaXN0Y29kZVtOKygoYyYoMTw8dytDKS0xKT4+dyldLE89Yj4+PjI0LFQ9Yj4+PjE2JjI1NSxFPWImNjU1MzUsISh3K088PWwpOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9Yz4+Pj13LGwtPXcsbi5iYWNrKz13fWlmKGM+Pj49TyxsLT1PLG4uYmFjays9TyxUJjY0KXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixuLm1vZGU9UG47YnJlYWt9bi5vZmZzZXQ9RSxuLmV4dHJhPVQmMTUsbi5tb2RlPUsyO2Nhc2UgSzI6aWYobi5leHRyYSl7Zm9yKFU9bi5leHRyYTtsPFU7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1uLm9mZnNldCs9YyYoMTw8bi5leHRyYSktMSxjPj4+PW4uZXh0cmEsbC09bi5leHRyYSxuLmJhY2srPW4uZXh0cmF9aWYobi5vZmZzZXQ+bi5kbWF4KXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLG4ubW9kZT1QbjticmVha31uLm1vZGU9VzI7Y2FzZSBXMjppZih1PT09MClicmVhayB0O2lmKG09ZC11LG4ub2Zmc2V0Pm0pe2lmKG09bi5vZmZzZXQtbSxtPm4ud2hhdmUmJm4uc2FuZSl7dC5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixuLm1vZGU9UG47YnJlYWt9bT5uLnduZXh0PyhtLT1uLnduZXh0LF89bi53c2l6ZS1tKTpfPW4ud25leHQtbSxtPm4ubGVuZ3RoJiYobT1uLmxlbmd0aCksZz1uLndpbmRvd31lbHNlIGc9cixfPXMtbi5vZmZzZXQsbT1uLmxlbmd0aDttPnUmJihtPXUpLHUtPW0sbi5sZW5ndGgtPW07ZG8gcltzKytdPWdbXysrXTt3aGlsZSgtLW0pO24ubGVuZ3RoPT09MCYmKG4ubW9kZT1zbSk7YnJlYWs7Y2FzZSBYMjppZih1PT09MClicmVhayB0O3JbcysrXT1uLmxlbmd0aCx1LS0sbi5tb2RlPXNtO2JyZWFrO2Nhc2UgUmc6aWYobi53cmFwKXtmb3IoO2w8MzI7KXtpZihmPT09MClicmVhayB0O2YtLSxjfD1vW2krK108PGwsbCs9OH1pZihkLT11LHQudG90YWxfb3V0Kz1kLG4udG90YWwrPWQsbi53cmFwJjQmJmQmJih0LmFkbGVyPW4uY2hlY2s9bi5mbGFncz9naShuLmNoZWNrLHIsZCxzLWQpOnhnKG4uY2hlY2sscixkLHMtZCkpLGQ9dSxuLndyYXAmNCYmKG4uZmxhZ3M/YzpaMihjKSkhPT1uLmNoZWNrKXt0Lm1zZz0iaW5jb3JyZWN0IGRhdGEgY2hlY2siLG4ubW9kZT1QbjticmVha31jPTAsbD0wfW4ubW9kZT1ZMjtjYXNlIFkyOmlmKG4ud3JhcCYmbi5mbGFncyl7Zm9yKDtsPDMyOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9aWYobi53cmFwJjQmJmMhPT0obi50b3RhbCY0Mjk0OTY3Mjk1KSl7dC5tc2c9ImluY29ycmVjdCBsZW5ndGggY2hlY2siLG4ubW9kZT1QbjticmVha31jPTAsbD0wfW4ubW9kZT0kMjtjYXNlICQyOkw9cjY7YnJlYWsgdDtjYXNlIFBuOkw9ZVM7YnJlYWsgdDtjYXNlIE1nOnJldHVybiBQZztjYXNlIG5TOmRlZmF1bHQ6cmV0dXJuIE1yfXJldHVybiB0Lm5leHRfb3V0PXMsdC5hdmFpbF9vdXQ9dSx0Lm5leHRfaW49aSx0LmF2YWlsX2luPWYsbi5ob2xkPWMsbi5iaXRzPWwsKG4ud3NpemV8fGQhPT10LmF2YWlsX291dCYmbi5tb2RlPFBuJiYobi5tb2RlPFJnfHxlIT09eDIpKSYmY1ModCx0Lm91dHB1dCx0Lm5leHRfb3V0LGQtdC5hdmFpbF9vdXQpPyhuLm1vZGU9TWcsUGcpOihwLT10LmF2YWlsX2luLGQtPXQuYXZhaWxfb3V0LHQudG90YWxfaW4rPXAsdC50b3RhbF9vdXQrPWQsbi50b3RhbCs9ZCxuLndyYXAmNCYmZCYmKHQuYWRsZXI9bi5jaGVjaz1uLmZsYWdzP2dpKG4uY2hlY2sscixkLHQubmV4dF9vdXQtZCk6eGcobi5jaGVjayxyLGQsdC5uZXh0X291dC1kKSksdC5kYXRhX3R5cGU9bi5iaXRzKyhuLmxhc3Q/NjQ6MCkrKG4ubW9kZT09PXFpPzEyODowKSsobi5tb2RlPT09aW18fG4ubW9kZT09PUVnPzI1NjowKSwocD09PTAmJmQ9PT0wfHxlPT09eDIpJiZMPT09Q2MmJihMPXM2KSxMKX0saDY9dD0+e2lmKHhjKHQpKXJldHVybiBNcjtsZXQgZT10LnN0YXRlO3JldHVybiBlLndpbmRvdyYmKGUud2luZG93PW51bGwpLHQuc3RhdGU9bnVsbCxDY30sXzY9KHQsZSk9PntpZih4Yyh0KSlyZXR1cm4gTXI7bGV0IG49dC5zdGF0ZTtyZXR1cm4gbi53cmFwJjI/KG4uaGVhZD1lLGUuZG9uZT0hMSxDYyk6TXJ9LHk2PSh0LGUpPT57bGV0IG49ZS5sZW5ndGgsbyxyLGk7cmV0dXJuIHhjKHQpfHwobz10LnN0YXRlLG8ud3JhcCE9PTAmJm8ubW9kZSE9PWNtKT9NcjpvLm1vZGU9PT1jbSYmKHI9MSxyPXhnKHIsZSxuLDApLHIhPT1vLmNoZWNrKT9lUzooaT1jUyh0LGUsbixuKSxpPyhvLm1vZGU9TWcsUGcpOihvLmhhdmVkaWN0PTEsQ2MpKX07WXIuZXhwb3J0cy5pbmZsYXRlUmVzZXQ9clM7WXIuZXhwb3J0cy5pbmZsYXRlUmVzZXQyPWlTO1lyLmV4cG9ydHMuaW5mbGF0ZVJlc2V0S2VlcD1vUztZci5leHBvcnRzLmluZmxhdGVJbml0PXA2O1lyLmV4cG9ydHMuaW5mbGF0ZUluaXQyPXNTO1lyLmV4cG9ydHMuaW5mbGF0ZT1tNjtZci5leHBvcnRzLmluZmxhdGVFbmQ9aDY7WXIuZXhwb3J0cy5pbmZsYXRlR2V0SGVhZGVyPV82O1lyLmV4cG9ydHMuaW5mbGF0ZVNldERpY3Rpb25hcnk9eTY7WXIuZXhwb3J0cy5pbmZsYXRlSW5mbz0icGFrbyBpbmZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSJ9KTt2YXIgZlM9VW4oKGJ1dCxOZyk9PnsidXNlIHN0cmljdCI7dmFyIGc2PSh0LGUpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKTtOZy5leHBvcnRzLmFzc2lnbj1mdW5jdGlvbih0KXtsZXQgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7Zm9yKDtlLmxlbmd0aDspe2xldCBuPWUuc2hpZnQoKTtpZihuKXtpZih0eXBlb2YgbiE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcihuKyJtdXN0IGJlIG5vbi1vYmplY3QiKTtmb3IobGV0IG8gaW4gbilnNihuLG8pJiYodFtvXT1uW29dKX19cmV0dXJuIHR9O05nLmV4cG9ydHMuZmxhdHRlbkNodW5rcz10PT57bGV0IGU9MDtmb3IobGV0IG89MCxyPXQubGVuZ3RoO288cjtvKyspZSs9dFtvXS5sZW5ndGg7bGV0IG49bmV3IFVpbnQ4QXJyYXkoZSk7Zm9yKGxldCBvPTAscj0wLGk9dC5sZW5ndGg7bzxpO28rKyl7bGV0IHM9dFtvXTtuLnNldChzLHIpLHIrPXMubGVuZ3RofXJldHVybiBufX0pO3ZhciBsUz1Vbigod3V0LGZtKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgdVM9ITA7dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgxKSl9Y2F0Y2h7dVM9ITF9dmFyIG11PW5ldyBVaW50OEFycmF5KDI1Nik7Zm9yKGxldCB0PTA7dDwyNTY7dCsrKW11W3RdPXQ+PTI1Mj82OnQ+PTI0OD81OnQ+PTI0MD80OnQ+PTIyND8zOnQ+PTE5Mj8yOjE7bXVbMjU0XT1tdVsyNTRdPTE7Zm0uZXhwb3J0cy5zdHJpbmcyYnVmPXQ9PntpZih0eXBlb2YgVGV4dEVuY29kZXI9PSJmdW5jdGlvbiImJlRleHRFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGUpcmV0dXJuIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0KTtsZXQgZSxuLG8scixpLHM9dC5sZW5ndGgsZj0wO2ZvcihyPTA7cjxzO3IrKyluPXQuY2hhckNvZGVBdChyKSwobiY2NDUxMik9PT01NTI5NiYmcisxPHMmJihvPXQuY2hhckNvZGVBdChyKzEpLChvJjY0NTEyKT09PTU2MzIwJiYobj02NTUzNisobi01NTI5Njw8MTApKyhvLTU2MzIwKSxyKyspKSxmKz1uPDEyOD8xOm48MjA0OD8yOm48NjU1MzY/Mzo0O2ZvcihlPW5ldyBVaW50OEFycmF5KGYpLGk9MCxyPTA7aTxmO3IrKyluPXQuY2hhckNvZGVBdChyKSwobiY2NDUxMik9PT01NTI5NiYmcisxPHMmJihvPXQuY2hhckNvZGVBdChyKzEpLChvJjY0NTEyKT09PTU2MzIwJiYobj02NTUzNisobi01NTI5Njw8MTApKyhvLTU2MzIwKSxyKyspKSxuPDEyOD9lW2krK109bjpuPDIwNDg/KGVbaSsrXT0xOTJ8bj4+PjYsZVtpKytdPTEyOHxuJjYzKTpuPDY1NTM2PyhlW2krK109MjI0fG4+Pj4xMixlW2krK109MTI4fG4+Pj42JjYzLGVbaSsrXT0xMjh8biY2Myk6KGVbaSsrXT0yNDB8bj4+PjE4LGVbaSsrXT0xMjh8bj4+PjEyJjYzLGVbaSsrXT0xMjh8bj4+PjYmNjMsZVtpKytdPTEyOHxuJjYzKTtyZXR1cm4gZX07dmFyIEE2PSh0LGUpPT57aWYoZTw2NTUzNCYmdC5zdWJhcnJheSYmdVMpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx0Lmxlbmd0aD09PWU/dDp0LnN1YmFycmF5KDAsZSkpO2xldCBuPSIiO2ZvcihsZXQgbz0wO288ZTtvKyspbis9U3RyaW5nLmZyb21DaGFyQ29kZSh0W29dKTtyZXR1cm4gbn07Zm0uZXhwb3J0cy5idWYyc3RyaW5nPSh0LGUpPT57bGV0IG49ZXx8dC5sZW5ndGg7aWYodHlwZW9mIFRleHREZWNvZGVyPT0iZnVuY3Rpb24iJiZUZXh0RGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlKXJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUodC5zdWJhcnJheSgwLGUpKTtsZXQgbyxyLGk9bmV3IEFycmF5KG4qMik7Zm9yKHI9MCxvPTA7bzxuOyl7bGV0IHM9dFtvKytdO2lmKHM8MTI4KXtpW3IrK109cztjb250aW51ZX1sZXQgZj1tdVtzXTtpZihmPjQpe2lbcisrXT02NTUzMyxvKz1mLTE7Y29udGludWV9Zm9yKHMmPWY9PT0yPzMxOmY9PT0zPzE1Ojc7Zj4xJiZvPG47KXM9czw8Nnx0W28rK10mNjMsZi0tO2lmKGY+MSl7aVtyKytdPTY1NTMzO2NvbnRpbnVlfXM8NjU1MzY/aVtyKytdPXM6KHMtPTY1NTM2LGlbcisrXT01NTI5NnxzPj4xMCYxMDIzLGlbcisrXT01NjMyMHxzJjEwMjMpfXJldHVybiBBNihpLHIpfTtmbS5leHBvcnRzLnV0Zjhib3JkZXI9KHQsZSk9PntlPWV8fHQubGVuZ3RoLGU+dC5sZW5ndGgmJihlPXQubGVuZ3RoKTtsZXQgbj1lLTE7Zm9yKDtuPj0wJiYodFtuXSYxOTIpPT09MTI4OyluLS07cmV0dXJuIG48MHx8bj09PTA/ZTpuK211W3Rbbl1dPmU/bjplfX0pO3ZhciBkUz1VbigoVHV0LHBTKT0+eyJ1c2Ugc3RyaWN0IjtwUy5leHBvcnRzPXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJzaW9uIn19KTt2YXIgaFM9VW4oKE91dCxtUyk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYjYoKXt0aGlzLmlucHV0PW51bGwsdGhpcy5uZXh0X2luPTAsdGhpcy5hdmFpbF9pbj0wLHRoaXMudG90YWxfaW49MCx0aGlzLm91dHB1dD1udWxsLHRoaXMubmV4dF9vdXQ9MCx0aGlzLmF2YWlsX291dD0wLHRoaXMudG90YWxfb3V0PTAsdGhpcy5tc2c9IiIsdGhpcy5zdGF0ZT1udWxsLHRoaXMuZGF0YV90eXBlPTIsdGhpcy5hZGxlcj0wfW1TLmV4cG9ydHM9YjZ9KTt2YXIgeVM9VW4oKEV1dCxfUyk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdzYoKXt0aGlzLnRleHQ9MCx0aGlzLnRpbWU9MCx0aGlzLnhmbGFncz0wLHRoaXMub3M9MCx0aGlzLmV4dHJhPW51bGwsdGhpcy5leHRyYV9sZW49MCx0aGlzLm5hbWU9IiIsdGhpcy5jb21tZW50PSIiLHRoaXMuaGNyYz0wLHRoaXMuZG9uZT0hMX1fUy5leHBvcnRzPXc2fSk7dmFyIHdTPVVuKChSdXQsemEpPT57InVzZSBzdHJpY3QiO3ZhciBLaT1hUygpLEFTPWZTKCksRGc9bFMoKSxMZz1kUygpLFQ2PWhTKCksTzY9eVMoKSxiUz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLHtaX05PX0ZMVVNIOkU2LFpfRklOSVNIOlI2LFpfT0s6aHUsWl9TVFJFQU1fRU5EOklnLFpfTkVFRF9ESUNUOnZnLFpfU1RSRUFNX0VSUk9SOlM2LFpfREFUQV9FUlJPUjpnUyxaX01FTV9FUlJPUjpDNn09b20oKTtmdW5jdGlvbiBfdSh0KXt0aGlzLm9wdGlvbnM9QVMuYXNzaWduKHtjaHVua1NpemU6MTAyNCo2NCx3aW5kb3dCaXRzOjE1LHRvOiIifSx0fHx7fSk7bGV0IGU9dGhpcy5vcHRpb25zO2UucmF3JiZlLndpbmRvd0JpdHM+PTAmJmUud2luZG93Qml0czwxNiYmKGUud2luZG93Qml0cz0tZS53aW5kb3dCaXRzLGUud2luZG93Qml0cz09PTAmJihlLndpbmRvd0JpdHM9LTE1KSksZS53aW5kb3dCaXRzPj0wJiZlLndpbmRvd0JpdHM8MTYmJiEodCYmdC53aW5kb3dCaXRzKSYmKGUud2luZG93Qml0cys9MzIpLGUud2luZG93Qml0cz4xNSYmZS53aW5kb3dCaXRzPDQ4JiYoZS53aW5kb3dCaXRzJjE1fHwoZS53aW5kb3dCaXRzfD0xNSkpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IFQ2LHRoaXMuc3RybS5hdmFpbF9vdXQ9MDtsZXQgbj1LaS5pbmZsYXRlSW5pdDIodGhpcy5zdHJtLGUud2luZG93Qml0cyk7aWYobiE9PWh1KXRocm93IG5ldyBFcnJvcihMZ1tuXSk7aWYodGhpcy5oZWFkZXI9bmV3IE82LEtpLmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLHRoaXMuaGVhZGVyKSxlLmRpY3Rpb25hcnkmJih0eXBlb2YgZS5kaWN0aW9uYXJ5PT0ic3RyaW5nIj9lLmRpY3Rpb25hcnk9RGcuc3RyaW5nMmJ1ZihlLmRpY3Rpb25hcnkpOmJTLmNhbGwoZS5kaWN0aW9uYXJ5KT09PSJbb2JqZWN0IEFycmF5QnVmZmVyXSImJihlLmRpY3Rpb25hcnk9bmV3IFVpbnQ4QXJyYXkoZS5kaWN0aW9uYXJ5KSksZS5yYXcmJihuPUtpLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxlLmRpY3Rpb25hcnkpLG4hPT1odSkpKXRocm93IG5ldyBFcnJvcihMZ1tuXSl9X3UucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCxlKXtsZXQgbj10aGlzLnN0cm0sbz10aGlzLm9wdGlvbnMuY2h1bmtTaXplLHI9dGhpcy5vcHRpb25zLmRpY3Rpb25hcnksaSxzLGY7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtmb3IoZT09PX5+ZT9zPWU6cz1lPT09ITA/UjY6RTYsYlMuY2FsbCh0KT09PSJbb2JqZWN0IEFycmF5QnVmZmVyXSI/bi5pbnB1dD1uZXcgVWludDhBcnJheSh0KTpuLmlucHV0PXQsbi5uZXh0X2luPTAsbi5hdmFpbF9pbj1uLmlucHV0Lmxlbmd0aDs7KXtmb3Iobi5hdmFpbF9vdXQ9PT0wJiYobi5vdXRwdXQ9bmV3IFVpbnQ4QXJyYXkobyksbi5uZXh0X291dD0wLG4uYXZhaWxfb3V0PW8pLGk9S2kuaW5mbGF0ZShuLHMpLGk9PT12ZyYmciYmKGk9S2kuaW5mbGF0ZVNldERpY3Rpb25hcnkobixyKSxpPT09aHU/aT1LaS5pbmZsYXRlKG4scyk6aT09PWdTJiYoaT12ZykpO24uYXZhaWxfaW4+MCYmaT09PUlnJiZuLnN0YXRlLndyYXA+MCYmdFtuLm5leHRfaW5dIT09MDspS2kuaW5mbGF0ZVJlc2V0KG4pLGk9S2kuaW5mbGF0ZShuLHMpO3N3aXRjaChpKXtjYXNlIFM2OmNhc2UgZ1M6Y2FzZSB2ZzpjYXNlIEM2OnJldHVybiB0aGlzLm9uRW5kKGkpLHRoaXMuZW5kZWQ9ITAsITF9aWYoZj1uLmF2YWlsX291dCxuLm5leHRfb3V0JiYobi5hdmFpbF9vdXQ9PT0wfHxpPT09SWcpKWlmKHRoaXMub3B0aW9ucy50bz09PSJzdHJpbmciKXtsZXQgdT1EZy51dGY4Ym9yZGVyKG4ub3V0cHV0LG4ubmV4dF9vdXQpLGM9bi5uZXh0X291dC11LGw9RGcuYnVmMnN0cmluZyhuLm91dHB1dCx1KTtuLm5leHRfb3V0PWMsbi5hdmFpbF9vdXQ9by1jLGMmJm4ub3V0cHV0LnNldChuLm91dHB1dC5zdWJhcnJheSh1LHUrYyksMCksdGhpcy5vbkRhdGEobCl9ZWxzZSB0aGlzLm9uRGF0YShuLm91dHB1dC5sZW5ndGg9PT1uLm5leHRfb3V0P24ub3V0cHV0Om4ub3V0cHV0LnN1YmFycmF5KDAsbi5uZXh0X291dCkpO2lmKCEoaT09PWh1JiZmPT09MCkpe2lmKGk9PT1JZylyZXR1cm4gaT1LaS5pbmZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChpKSx0aGlzLmVuZGVkPSEwLCEwO2lmKG4uYXZhaWxfaW49PT0wKWJyZWFrfX1yZXR1cm4hMH07X3UucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbih0KXt0aGlzLmNodW5rcy5wdXNoKHQpfTtfdS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24odCl7dD09PWh1JiYodGhpcy5vcHRpb25zLnRvPT09InN0cmluZyI/dGhpcy5yZXN1bHQ9dGhpcy5jaHVua3Muam9pbigiIik6dGhpcy5yZXN1bHQ9QVMuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPXQsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ307ZnVuY3Rpb24gRmcodCxlKXtsZXQgbj1uZXcgX3UoZSk7aWYobi5wdXNoKHQpLG4uZXJyKXRocm93IG4ubXNnfHxMZ1tuLmVycl07cmV0dXJuIG4ucmVzdWx0fWZ1bmN0aW9uIHg2KHQsZSl7cmV0dXJuIGU9ZXx8e30sZS5yYXc9ITAsRmcodCxlKX16YS5leHBvcnRzLkluZmxhdGU9X3U7emEuZXhwb3J0cy5pbmZsYXRlPUZnO3phLmV4cG9ydHMuaW5mbGF0ZVJhdz14Njt6YS5leHBvcnRzLnVuZ3ppcD1GZzt6YS5leHBvcnRzLmNvbnN0YW50cz1vbSgpfSk7dmFyIEJnPXt9O21lKEJnLHtkZWZhdWx0OigpPT5CNn0pO2Z1bmN0aW9uIFA2KHQsZSl7bGV0IG49UHMuZnJvbVN0cmluZyh0LnR5cGUpLG89dC5idWZmZXI7ZDIodC5rZXksbyk7bGV0IHI9RjYobyk7bz1yLmJ1ZmZlcjtsZXQgaT1yLmxlbmd0aDtzd2l0Y2gobil7Y2FzZSBQcy5NRVRBREFUQTpyZXR1cm4gTjYobyxpLHQucXVhZEtleSk7Y2FzZSBQcy5URVJSQUlOOnJldHVybiBENihvLGksZSk7Y2FzZSBQcy5EQlJPT1Q6cmV0dXJuIGUucHVzaChvKSx7YnVmZmVyOm99fX1mdW5jdGlvbiBONih0LGUsbil7bGV0IG89bmV3IERhdGFWaWV3KHQpLHI9MCxpPW8uZ2V0VWludDMyKHIsITApO2lmKHIrPUhhLGkhPT1NNil0aHJvdyBuZXcgZ2UoIkludmFsaWQgbWFnaWMiKTtsZXQgcz1vLmdldFVpbnQzMihyLCEwKTtpZihyKz1IYSxzIT09MSl0aHJvdyBuZXcgZ2UoIkludmFsaWQgZGF0YSB0eXBlLiBNdXN0IGJlIDEgZm9yIFF1YWRUcmVlUGFja2V0Iik7bGV0IGY9by5nZXRVaW50MzIociwhMCk7aWYocis9SGEsZiE9PTIpdGhyb3cgbmV3IGdlKCJJbnZhbGlkIFF1YWRUcmVlUGFja2V0IHZlcnNpb24uIE9ubHkgdmVyc2lvbiAyIGlzIHN1cHBvcnRlZC4iKTtsZXQgdT1vLmdldEludDMyKHIsITApO3IrPVBjO2xldCBjPW8uZ2V0SW50MzIociwhMCk7aWYocis9UGMsYyE9PTMyKXRocm93IG5ldyBnZSgiSW52YWxpZCBpbnN0YW5jZSBzaXplLiIpO2xldCBsPW8uZ2V0SW50MzIociwhMCk7cis9UGM7bGV0IHA9by5nZXRJbnQzMihyLCEwKTtyKz1QYztsZXQgZD1vLmdldEludDMyKHIsITApO2lmKHIrPVBjLGwhPT11KmMrcil0aHJvdyBuZXcgZ2UoIkludmFsaWQgZGF0YUJ1ZmZlck9mZnNldCIpO2lmKGwrcCtkIT09ZSl0aHJvdyBuZXcgZ2UoIkludmFsaWQgcGFja2V0IG9mZnNldHMiKTtsZXQgbT1bXTtmb3IobGV0IEU9MDtFPHU7KytFKXtsZXQgdz1vLmdldFVpbnQ4KHIpOysrciwrK3I7bGV0IEM9by5nZXRVaW50MTYociwhMCk7cis9amE7bGV0IE49by5nZXRVaW50MTYociwhMCk7cis9amE7bGV0IEk9by5nZXRVaW50MTYociwhMCk7cis9amEscis9amEscis9amEscis9UGMscis9UGMscis9ODtsZXQgTD1vLmdldFVpbnQ4KHIrKyksdj1vLmdldFVpbnQ4KHIrKyk7cis9amEsbS5wdXNoKG5ldyB5Mih3LEMsTixJLEwsdikpfWxldCBfPVtdLGc9MDtmdW5jdGlvbiBiKEUsdyxDKXtsZXQgTj0hMTtpZihDPT09NCl7aWYody5oYXNTdWJ0cmVlKCkpcmV0dXJuO049ITB9Zm9yKGxldCBJPTA7STw0OysrSSl7bGV0IEw9RStJLnRvU3RyaW5nKCk7aWYoTilfW0xdPW51bGw7ZWxzZSBpZihDPDQpaWYoIXcuaGFzQ2hpbGQoSSkpX1tMXT1udWxsO2Vsc2V7aWYoZz09PXUpe2NvbnNvbGUubG9nKCJJbmNvcnJlY3QgbnVtYmVyIG9mIGluc3RhbmNlcyIpO3JldHVybn1sZXQgdj1tW2crK107X1tMXT12LGIoTCx2LEMrMSl9fX1sZXQgTz0wLFQ9bVtnKytdO3JldHVybiBuPT09IiI/KytPOl9bbl09VCxiKG4sVCxPKSxffWZ1bmN0aW9uIEQ2KHQsZSxuKXtsZXQgbz1uZXcgRGF0YVZpZXcodCkscj1mdW5jdGlvbihmKXtmb3IobGV0IHU9MDt1PHY2OysrdSl7bGV0IGM9by5nZXRVaW50MzIoZiwhMCk7aWYoZis9SGEsZis9YyxmPmUpdGhyb3cgbmV3IGdlKCJNYWxmb3JtZWQgdGVycmFpbiBwYWNrZXQgZm91bmQuIil9cmV0dXJuIGZ9LGk9MCxzPVtdO2Zvcig7cy5sZW5ndGg8STY7KXtsZXQgZj1pO2k9cihpKTtsZXQgdT10LnNsaWNlKGYsaSk7bi5wdXNoKHUpLHMucHVzaCh1KX1yZXR1cm4gc31mdW5jdGlvbiBGNih0KXtsZXQgZT1uZXcgRGF0YVZpZXcodCksbj0wLG89ZS5nZXRVaW50MzIobiwhMCk7aWYobis9SGEsbyE9PVRTJiZvIT09TDYpdGhyb3cgbmV3IGdlKCJJbnZhbGlkIG1hZ2ljIik7bGV0IHI9ZS5nZXRVaW50MzIobixvPT09VFMpO24rPUhhO2xldCBpPW5ldyBVaW50OEFycmF5KHQsbikscz1PUy5kZWZhdWx0LmluZmxhdGUoaSk7aWYocy5sZW5ndGghPT1yKXRocm93IG5ldyBnZSgiU2l6ZSBvZiBwYWNrZXQgZG9lc24ndCBtYXRjaCBoZWFkZXIiKTtyZXR1cm4gc312YXIgT1MsamEsUGMsSGEsUHMsTTYsSTYsdjYsVFMsTDYsQjYsVWc9WigoKT0+e20yKCk7ZzIoKTtKcigpO09TPW1vKHdTKCksMSk7c28oKTtqYT1VaW50MTZBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxQYz1JbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULEhhPVVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULFBzPXtNRVRBREFUQTowLFRFUlJBSU46MSxEQlJPT1Q6Mn07UHMuZnJvbVN0cmluZz1mdW5jdGlvbih0KXtpZih0PT09Ik1ldGFkYXRhIilyZXR1cm4gUHMuTUVUQURBVEE7aWYodD09PSJUZXJyYWluIilyZXR1cm4gUHMuVEVSUkFJTjtpZih0PT09IkRiUm9vdCIpcmV0dXJuIFBzLkRCUk9PVH07TTY9MzIzMDE7STY9NSx2Nj00O1RTPTE5NTMwMjk4MDUsTDY9MjkxNzAzNDEwMDtCNj1RZShQNil9KTt2YXIgR2c9e307bWUoR2cse2RlZmF1bHQ6KCk9Plo2fSk7ZnVuY3Rpb24gVTYodCxlLG4sbyxyLGkpe2xldCBzPW4qKDEtdCkrbyp0LGY9ciooMS10KStpKnQ7cmV0dXJuIHMqKDEtZSkrZiplfWZ1bmN0aW9uIHVtKHQsZSxuLG8pe2xldCByPXQrZSpuO3JldHVybiBvW3JdfWZ1bmN0aW9uIFY2KHQsZSxuKXtsZXQgbz1uLm5hdGl2ZUV4dGVudCxyPSh0LW8ud2VzdCkvKG8uZWFzdC1vLndlc3QpKihuLndpZHRoLTEpLGk9KGUtby5zb3V0aCkvKG8ubm9ydGgtby5zb3V0aCkqKG4uaGVpZ2h0LTEpLHM9TWF0aC5mbG9vcihyKSxmPU1hdGguZmxvb3IoaSk7ci09cyxpLT1mO2xldCB1PXM8bi53aWR0aD9zKzE6cyxjPWY8bi5oZWlnaHQ/ZisxOmY7Zj1uLmhlaWdodC0xLWYsYz1uLmhlaWdodC0xLWM7bGV0IGw9dW0ocyxmLG4ud2lkdGgsbi5idWZmZXIpLHA9dW0odSxmLG4ud2lkdGgsbi5idWZmZXIpLGQ9dW0ocyxjLG4ud2lkdGgsbi5idWZmZXIpLG09dW0odSxjLG4ud2lkdGgsbi5idWZmZXIpLF89VTYocixpLGwscCxkLG0pO3JldHVybiBfPV8qbi5zY2FsZStuLm9mZnNldCxffWZ1bmN0aW9uIEVTKHQsZSxuKXtmb3IobGV0IG89MDtvPG4ubGVuZ3RoO28rKyl7bGV0IHI9bltvXS5uYXRpdmVFeHRlbnQsaT1uZXcgYTtpZihuW29dLnByb2plY3Rpb25UeXBlPT09IldlYk1lcmNhdG9yIil7bGV0IHM9bltvXS5wcm9qZWN0aW9uLl9lbGxpcHNvaWQuX3JhZGlpO2k9bmV3IGVvKG5ldyAkKHMueCxzLnkscy56KSkucHJvamVjdChuZXcgY3QodCxlLDApKX1lbHNlIGkueD10LGkueT1lO2lmKGkueD5yLndlc3QmJmkueDxyLmVhc3QmJmkueT5yLnNvdXRoJiZpLnk8ci5ub3J0aClyZXR1cm4gVjYoaS54LGkueSxuW29dKX1yZXR1cm4gMH1mdW5jdGlvbiBrNih0LGUsbixvLHIsaSxzKXtpZihzKXJldHVybjtsZXQgZj1FUyhyLmxvbmdpdHVkZSxyLmxhdGl0dWRlLGkpO2ZvcihsZXQgdT0wO3U8dDsrK3Upe2xldCBjPUVTKHIubG9uZ2l0dWRlK00udG9SYWRpYW5zKG4qZVt1KjNdKSxyLmxhdGl0dWRlK00udG9SYWRpYW5zKG8qZVt1KjMrMV0pLGkpO2VbdSozKzJdKz1jLWZ9fWZ1bmN0aW9uIEc2KHQsZSxuLG8scixpLHMsZix1KXtpZih0PT09MHx8IWgoZSl8fGUubGVuZ3RoPT09MClyZXR1cm47bGV0IGM9bmV3ICQoTWF0aC5zcXJ0KHMueCksTWF0aC5zcXJ0KHMueSksTWF0aC5zcXJ0KHMueikpO2ZvcihsZXQgbD0wO2w8dDsrK2wpe2xldCBwPWwqMyxkPXArMSxtPXArMixfPW5ldyBjdDtfLmxvbmdpdHVkZT1vLmxvbmdpdHVkZStNLnRvUmFkaWFucyhmKmVbcF0pLF8ubGF0aXR1ZGU9by5sYXRpdHVkZStNLnRvUmFkaWFucyh1KmVbZF0pLF8uaGVpZ2h0PW8uaGVpZ2h0K2VbbV07bGV0IGc9e307Yy5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihfLGcpLGcueC09ci54LGcueS09ci55LGcuei09ci56O2xldCBiPXt9O2lmKHR0Lm11bHRpcGx5QnlWZWN0b3IoaSxnLGIpLGVbcF09Yi54LGVbZF09Yi55LGVbbV09Yi56LGgobikpe2xldCBPPW5ldyBhKG5bcF0sbltkXSxuW21dKSxUPXt9O3R0Lm11bHRpcGx5QnlWZWN0b3IoaSxPLFQpLG5bcF09VC54LG5bZF09VC55LG5bbV09VC56fX19ZnVuY3Rpb24gejYodCxlLG4pe2ZvcihsZXQgbz0wO288dDsrK28pe2xldCByPW5bbyo0XS82NTUzNSxpPW5bbyo0KzFdLzY1NTM1LHM9KG5bbyo0KzJdLW5bbyo0XSkvNjU1MzUsZj0obltvKjQrM10tbltvKjQrMV0pLzY1NTM1O2VbbyoyXSo9cyxlW28qMl0rPXIsZVtvKjIrMV0qPWYsZVtvKjIrMV0rPWl9fWZ1bmN0aW9uIGo2KHQsZSxuLG8scixpKXtpZih0PT09MHx8IWgobil8fG4ubGVuZ3RoPT09MClyZXR1cm57YnVmZmVyczpbXSxidWZmZXJWaWV3czpbXSxhY2Nlc3NvcnM6W10sbWVzaGVzOltdLG5vZGVzOltdLG5vZGVzSW5TY2VuZTpbXX07bGV0IHM9W10sZj1bXSx1PVtdLGM9W10sbD1bXSxwPVtdO2goZSkmJih0PWUubGVuZ3RoKTtsZXQgZD1uZXcgVWludDMyQXJyYXkodCk7aWYoaChlKSlmb3IobGV0IFE9MDtRPHQ7KytRKWRbUV09ZVtRXTtlbHNlIGZvcihsZXQgUT0wO1E8dDsrK1EpZFtRXT1RO2xldCBtPW5ldyBCbG9iKFtkXSx7dHlwZToiYXBwbGljYXRpb24vYmluYXJ5In0pLF89VVJMLmNyZWF0ZU9iamVjdFVSTChtKSxnPXQsYj1uLnN1YmFycmF5KDAsZyozKSxPPW5ldyBCbG9iKFtiXSx7dHlwZToiYXBwbGljYXRpb24vYmluYXJ5In0pLFQ9VVJMLmNyZWF0ZU9iamVjdFVSTChPKSxFPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSx3PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxDPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxOPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxJPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxMPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtmb3IobGV0IFE9MDtRPGIubGVuZ3RoLzM7USsrKUU9TWF0aC5taW4oRSxiW1EqMyswXSksdz1NYXRoLm1heCh3LGJbUSozKzBdKSxDPU1hdGgubWluKEMsYltRKjMrMV0pLE49TWF0aC5tYXgoTixiW1EqMysxXSksST1NYXRoLm1pbihJLGJbUSozKzJdKSxMPU1hdGgubWF4KEwsYltRKjMrMl0pO2xldCB2PW8/by5zdWJhcnJheSgwLGcqMyk6dm9pZCAwLEQ7aWYoaCh2KSl7bGV0IFE9bmV3IEJsb2IoW3ZdLHt0eXBlOiJhcHBsaWNhdGlvbi9iaW5hcnkifSk7RD1VUkwuY3JlYXRlT2JqZWN0VVJMKFEpfWxldCBVPXI/ci5zdWJhcnJheSgwLGcqMik6dm9pZCAwLEE7aWYoaChVKSl7bGV0IFE9bmV3IEJsb2IoW1VdLHt0eXBlOiJhcHBsaWNhdGlvbi9iaW5hcnkifSk7QT1VUkwuY3JlYXRlT2JqZWN0VVJMKFEpfWxldCBTPWgoaSk/aS5zdWJhcnJheSgwLGcqNCk6dm9pZCAwLFA7aWYoaChTKSl7bGV0IFE9bmV3IEJsb2IoW1NdLHt0eXBlOiJhcHBsaWNhdGlvbi9iaW5hcnkifSk7UD1VUkwuY3JlYXRlT2JqZWN0VVJMKFEpfWxldCBGPTAsaj0wLEg9MCxrPTAsSz0wLFg9RixSPXt9O3JldHVybiBSLlBPU0lUSU9OPUYscy5wdXNoKHt1cmk6VCxieXRlTGVuZ3RoOmIuYnl0ZUxlbmd0aH0pLGYucHVzaCh7YnVmZmVyOkYsYnl0ZU9mZnNldDowLGJ5dGVMZW5ndGg6Yi5ieXRlTGVuZ3RoLHRhcmdldDozNDk2Mn0pLHUucHVzaCh7YnVmZmVyVmlldzpGLGJ5dGVPZmZzZXQ6MCxjb21wb25lbnRUeXBlOjUxMjYsY291bnQ6dCx0eXBlOiJWRUMzIixtYXg6W0UsQyxJXSxtaW46W3csTixMXX0pLGgoRCkmJigrK1gsaj1YLFIuTk9STUFMPWoscy5wdXNoKHt1cmk6RCxieXRlTGVuZ3RoOnYuYnl0ZUxlbmd0aH0pLGYucHVzaCh7YnVmZmVyOmosYnl0ZU9mZnNldDowLGJ5dGVMZW5ndGg6di5ieXRlTGVuZ3RoLHRhcmdldDozNDk2Mn0pLHUucHVzaCh7YnVmZmVyVmlldzpqLGJ5dGVPZmZzZXQ6MCxjb21wb25lbnRUeXBlOjUxMjYsY291bnQ6dCx0eXBlOiJWRUMzIn0pKSxoKEEpJiYoKytYLEg9WCxSLlRFWENPT1JEXzA9SCxzLnB1c2goe3VyaTpBLGJ5dGVMZW5ndGg6VS5ieXRlTGVuZ3RofSksZi5wdXNoKHtidWZmZXI6SCxieXRlT2Zmc2V0OjAsYnl0ZUxlbmd0aDpVLmJ5dGVMZW5ndGgsdGFyZ2V0OjM0OTYyfSksdS5wdXNoKHtidWZmZXJWaWV3OkgsYnl0ZU9mZnNldDowLGNvbXBvbmVudFR5cGU6NTEyNixjb3VudDp0LHR5cGU6IlZFQzIifSkpLGgoUCkmJigrK1gsaz1YLFIuQ09MT1JfMD1rLHMucHVzaCh7dXJpOlAsYnl0ZUxlbmd0aDpTLmJ5dGVMZW5ndGh9KSxmLnB1c2goe2J1ZmZlcjprLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOlMuYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjJ9KSx1LnB1c2goe2J1ZmZlclZpZXc6ayxieXRlT2Zmc2V0OjAsY29tcG9uZW50VHlwZTo1MTIxLG5vcm1hbGl6ZWQ6ITAsY291bnQ6dCx0eXBlOiJWRUM0In0pKSwrK1gsSz1YLHMucHVzaCh7dXJpOl8sYnl0ZUxlbmd0aDpkLmJ5dGVMZW5ndGh9KSxmLnB1c2goe2J1ZmZlcjpLLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOmQuYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjN9KSx1LnB1c2goe2J1ZmZlclZpZXc6SyxieXRlT2Zmc2V0OjAsY29tcG9uZW50VHlwZTo1MTI1LGNvdW50OnQsdHlwZToiU0NBTEFSIn0pLGMucHVzaCh7cHJpbWl0aXZlczpbe2F0dHJpYnV0ZXM6UixpbmRpY2VzOkssbWF0ZXJpYWw6MH1dfSkscC5wdXNoKDApLGwucHVzaCh7bWVzaDowfSkse2J1ZmZlcnM6cyxidWZmZXJWaWV3czpmLGFjY2Vzc29yczp1LG1lc2hlczpjLG5vZGVzOmwsbm9kZXNJblNjZW5lOnB9fWZ1bmN0aW9uIEg2KHQsZSxuLG8pe2xldCByPW5ldyBVaW50OEFycmF5KHQsMCw1KTtyZXR1cm4gclswXT09PTY4JiZyWzFdPT09ODImJnJbMl09PT02NSYmclszXT09PTY3JiZyWzRdPT09Nzk/cTYodCxuKTpXNih0LGUsbixvKX1mdW5jdGlvbiBxNih0KXtsZXQgZT1rZyxuPW5ldyBlLkRlY29kZXJCdWZmZXIsbz1uZXcgVWludDhBcnJheSh0KTtuLkluaXQobyxvLmxlbmd0aCk7bGV0IHI9bmV3IGUuRGVjb2RlcixpPXIuR2V0RW5jb2RlZEdlb21ldHJ5VHlwZShuKSxzPW5ldyBlLk1ldGFkYXRhUXVlcmllcixmLHU7aT09PWUuVFJJQU5HVUxBUl9NRVNIJiYoZj1uZXcgZS5NZXNoLHU9ci5EZWNvZGVCdWZmZXJUb01lc2gobixmKSk7bGV0IGM9e3ZlcnRleENvdW50OlswXSxmZWF0dXJlQ291bnQ6MH07aWYoaCh1KSYmdS5vaygpJiZmLnB0ciE9PTApe2xldCBsPWYubnVtX2ZhY2VzKCkscD1mLm51bV9hdHRyaWJ1dGVzKCksZD1mLm51bV9wb2ludHMoKTtjLmluZGljZXM9bmV3IFVpbnQzMkFycmF5KGwqMyk7bGV0IG09Yy5pbmRpY2VzO2MudmVydGV4Q291bnRbMF09ZCxjLnNjYWxlX3g9MSxjLnNjYWxlX3k9MTtsZXQgXz1uZXcgZS5EcmFjb0ludDMyQXJyYXkoMyk7Zm9yKGxldCBnPTA7ZzxsOysrZylyLkdldEZhY2VGcm9tTWVzaChmLGcsXyksbVtnKjNdPV8uR2V0VmFsdWUoMCksbVtnKjMrMV09Xy5HZXRWYWx1ZSgxKSxtW2cqMysyXT1fLkdldFZhbHVlKDIpO2UuZGVzdHJveShfKTtmb3IobGV0IGc9MDtnPHA7KytnKXtsZXQgYj1yLkdldEF0dHJpYnV0ZShmLGcpLE89SzYoZSxyLGYsYixkKSxUPWIuYXR0cmlidXRlX3R5cGUoKSxFPSJ1bmtub3duIjtUPT09ZS5QT1NJVElPTj9FPSJwb3NpdGlvbnMiOlQ9PT1lLk5PUk1BTD9FPSJub3JtYWxzIjpUPT09ZS5DT0xPUj9FPSJjb2xvcnMiOlQ9PT1lLlRFWF9DT09SRCYmKEU9InV2MHMiKTtsZXQgdz1yLkdldEF0dHJpYnV0ZU1ldGFkYXRhKGYsZyk7aWYody5wdHIhPT0wKXtsZXQgQz1zLk51bUVudHJpZXModyk7Zm9yKGxldCBOPTA7TjxDOysrTil7bGV0IEk9cy5HZXRFbnRyeU5hbWUodyxOKTtJPT09Imkzcy1zY2FsZV94Ij9jLnNjYWxlX3g9cy5HZXREb3VibGVFbnRyeSh3LCJpM3Mtc2NhbGVfeCIpOkk9PT0iaTNzLXNjYWxlX3kiP2Muc2NhbGVfeT1zLkdldERvdWJsZUVudHJ5KHcsImkzcy1zY2FsZV95Iik6ST09PSJpM3MtYXR0cmlidXRlLXR5cGUiJiYoRT1zLkdldFN0cmluZ0VudHJ5KHcsImkzcy1hdHRyaWJ1dGUtdHlwZSIpKX19aChjW0VdKSYmY29uc29sZS5sb2coIkF0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0cyIsRSksY1tFXT1PLEU9PT0iZmVhdHVyZS1pbmRleCImJmMuZmVhdHVyZUNvdW50Kyt9ZS5kZXN0cm95KGYpfXJldHVybiBlLmRlc3Ryb3kocyksZS5kZXN0cm95KHIpLGN9ZnVuY3Rpb24gSzYodCxlLG4sbyxyKXtsZXQgaT1vLm51bV9jb21wb25lbnRzKCkqcixzLHU9W2Z1bmN0aW9uKCl7fSxmdW5jdGlvbigpe3M9bmV3IHQuRHJhY29JbnQ4QXJyYXkoaSksZS5HZXRBdHRyaWJ1dGVJbnQ4Rm9yQWxsUG9pbnRzKG4sbyxzKXx8Y29uc29sZS5lcnJvcigiQmFkIHN0cmVhbSIpO2xldCBsPW5ldyBJbnQ4QXJyYXkoaSk7Zm9yKGxldCBwPTA7cDxpOysrcClsW3BdPXMuR2V0VmFsdWUocCk7cmV0dXJuIGx9LGZ1bmN0aW9uKCl7cz1uZXcgdC5EcmFjb0ludDhBcnJheShpKSxlLkdldEF0dHJpYnV0ZVVJbnQ4Rm9yQWxsUG9pbnRzKG4sbyxzKXx8Y29uc29sZS5lcnJvcigiQmFkIHN0cmVhbSIpO2xldCBsPW5ldyBVaW50OEFycmF5KGkpO2ZvcihsZXQgcD0wO3A8aTsrK3ApbFtwXT1zLkdldFZhbHVlKHApO3JldHVybiBsfSxmdW5jdGlvbigpe3M9bmV3IHQuRHJhY29JbnQxNkFycmF5KGkpLGUuR2V0QXR0cmlidXRlSW50MTZGb3JBbGxQb2ludHMobixvLHMpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IGw9bmV3IEludDE2QXJyYXkoaSk7Zm9yKGxldCBwPTA7cDxpOysrcClsW3BdPXMuR2V0VmFsdWUocCk7cmV0dXJuIGx9LGZ1bmN0aW9uKCl7cz1uZXcgdC5EcmFjb0ludDE2QXJyYXkoaSksZS5HZXRBdHRyaWJ1dGVVSW50MTZGb3JBbGxQb2ludHMobixvLHMpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IGw9bmV3IFVpbnQxNkFycmF5KGkpO2ZvcihsZXQgcD0wO3A8aTsrK3ApbFtwXT1zLkdldFZhbHVlKHApO3JldHVybiBsfSxmdW5jdGlvbigpe3M9bmV3IHQuRHJhY29JbnQzMkFycmF5KGkpLGUuR2V0QXR0cmlidXRlSW50MzJGb3JBbGxQb2ludHMobixvLHMpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IGw9bmV3IEludDMyQXJyYXkoaSk7Zm9yKGxldCBwPTA7cDxpOysrcClsW3BdPXMuR2V0VmFsdWUocCk7cmV0dXJuIGx9LGZ1bmN0aW9uKCl7cz1uZXcgdC5EcmFjb0ludDMyQXJyYXkoaSksZS5HZXRBdHRyaWJ1dGVVSW50MzJGb3JBbGxQb2ludHMobixvLHMpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IGw9bmV3IFVpbnQzMkFycmF5KGkpO2ZvcihsZXQgcD0wO3A8aTsrK3ApbFtwXT1zLkdldFZhbHVlKHApO3JldHVybiBsfSxmdW5jdGlvbigpe30sZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKCl7cz1uZXcgdC5EcmFjb0Zsb2F0MzJBcnJheShpKSxlLkdldEF0dHJpYnV0ZUZsb2F0Rm9yQWxsUG9pbnRzKG4sbyxzKXx8Y29uc29sZS5lcnJvcigiQmFkIHN0cmVhbSIpO2xldCBsPW5ldyBGbG9hdDMyQXJyYXkoaSk7Zm9yKGxldCBwPTA7cDxpOysrcClsW3BdPXMuR2V0VmFsdWUocCk7cmV0dXJuIGx9LGZ1bmN0aW9uKCl7fSxmdW5jdGlvbigpe3M9bmV3IHQuRHJhY29VSW50OEFycmF5KGkpLGUuR2V0QXR0cmlidXRlVUludDhGb3JBbGxQb2ludHMobixvLHMpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IGw9bmV3IFVpbnQ4QXJyYXkoaSk7Zm9yKGxldCBwPTA7cDxpOysrcClsW3BdPXMuR2V0VmFsdWUocCk7cmV0dXJuIGx9XVtvLmRhdGFfdHlwZSgpXSgpO3JldHVybiBoKHMpJiZ0LmRlc3Ryb3kocyksdX1mdW5jdGlvbiBXNih0LGUsbixvKXtsZXQgcj17dmVydGV4Q291bnQ6MH0saT1uZXcgRGF0YVZpZXcodCk7dHJ5e2xldCBzPTA7aWYoci52ZXJ0ZXhDb3VudD1pLmdldFVpbnQzMihzLDEpLHMrPTQsci5mZWF0dXJlQ291bnQ9aS5nZXRVaW50MzIocywxKSxzKz00LGgobikpZm9yKGxldCBmPTA7ZjxuLmF0dHJpYnV0ZXMubGVuZ3RoO2YrKyloKGxtW24uYXR0cmlidXRlc1tmXV0pP3M9bG1bbi5hdHRyaWJ1dGVzW2ZdXShyLHQscyk6Y29uc29sZS5lcnJvcigiVW5rbm93biBkZWNvZGVyIGZvciIsbi5hdHRyaWJ1dGVzW2ZdKTtlbHNle2xldCBmPWUub3JkZXJpbmcsdT1lLmZlYXR1cmVBdHRyaWJ1dGVPcmRlcjtoKG8pJiZoKG8uZ2VvbWV0cnlEYXRhKSYmaChvLmdlb21ldHJ5RGF0YVswXSkmJmgoby5nZW9tZXRyeURhdGFbMF0ucGFyYW1zKSYmKGY9T2JqZWN0LmtleXMoby5nZW9tZXRyeURhdGFbMF0ucGFyYW1zLnZlcnRleEF0dHJpYnV0ZXMpLHU9T2JqZWN0LmtleXMoby5nZW9tZXRyeURhdGFbMF0ucGFyYW1zLmZlYXR1cmVBdHRyaWJ1dGVzKSk7Zm9yKGxldCBjPTA7YzxmLmxlbmd0aDtjKyspe2xldCBsPWxtW2ZbY11dO3M9bChyLHQscyl9Zm9yKGxldCBjPTA7Yzx1Lmxlbmd0aDtjKyspe2xldCBsPWxtW3VbY11dO3M9bChyLHQscyl9fX1jYXRjaChzKXtjb25zb2xlLmVycm9yKHMpfXJldHVybiByLnNjYWxlX3g9MSxyLnNjYWxlX3k9MSxyfWZ1bmN0aW9uIFg2KHQpe2xldCBlPUg2KHQuYmluYXJ5RGF0YSx0LnNjaGVtYSx0LmJ1ZmZlckluZm8sdC5mZWF0dXJlRGF0YSk7aCh0Lmdlb2lkRGF0YUxpc3QpJiZ0Lmdlb2lkRGF0YUxpc3QubGVuZ3RoPjAmJms2KGUudmVydGV4Q291bnQsZS5wb3NpdGlvbnMsZS5zY2FsZV94LGUuc2NhbGVfeSx0LmNhcnRvZ3JhcGhpY0NlbnRlcix0Lmdlb2lkRGF0YUxpc3QsITEpLEc2KGUudmVydGV4Q291bnQsZS5wb3NpdGlvbnMsZS5ub3JtYWxzLHQuY2FydG9ncmFwaGljQ2VudGVyLHQuY2FydGVzaWFuQ2VudGVyLHQucGFyZW50Um90YXRpb24sdC5lbGxpcHNvaWRSYWRpaVNxdWFyZSxlLnNjYWxlX3gsZS5zY2FsZV95KSxoKGUudXYwcykmJmgoZVsidXYtcmVnaW9uIl0pJiZ6NihlLnZlcnRleENvdW50LGUudXYwcyxlWyJ1di1yZWdpb24iXSk7bGV0IG49ajYoZS52ZXJ0ZXhDb3VudCxlLmluZGljZXMsZS5wb3NpdGlvbnMsZS5ub3JtYWxzLGUudXYwcyxlLmNvbG9ycyksbz17fTtpZihoKGVbImZlYXR1cmUtaW5kZXgiXSkpby5wb3NpdGlvbnM9ZS5wb3NpdGlvbnMsby5pbmRpY2VzPWUuaW5kaWNlcyxvLmZlYXR1cmVJbmRleD1lWyJmZWF0dXJlLWluZGV4Il0sby5jYXJ0ZXNpYW5DZW50ZXI9dC5jYXJ0ZXNpYW5DZW50ZXIsby5wYXJlbnRSb3RhdGlvbj10LnBhcmVudFJvdGF0aW9uO2Vsc2UgaWYoaChlLmZhY2VSYW5nZSkpe28ucG9zaXRpb25zPWUucG9zaXRpb25zLG8uaW5kaWNlcz1lLmluZGljZXMsby5zb3VyY2VVUkw9dC51cmwsby5jYXJ0ZXNpYW5DZW50ZXI9dC5jYXJ0ZXNpYW5DZW50ZXIsby5wYXJlbnRSb3RhdGlvbj10LnBhcmVudFJvdGF0aW9uLG8uZmVhdHVyZUluZGV4PW5ldyBBcnJheShlLnBvc2l0aW9ucy5sZW5ndGgpO2ZvcihsZXQgaT0wO2k8ZS5mYWNlUmFuZ2UubGVuZ3RoLTE7aSs9Mil7bGV0IHM9aS8yLGY9ZS5mYWNlUmFuZ2VbaV0sdT1lLmZhY2VSYW5nZVtpKzFdO2ZvcihsZXQgYz1mO2M8PXU7YysrKW8uZmVhdHVyZUluZGV4W2MqM109cyxvLmZlYXR1cmVJbmRleFtjKjMrMV09cyxvLmZlYXR1cmVJbmRleFtjKjMrMl09c319cmV0dXJuIG4uX2N1c3RvbUF0dHJpYnV0ZXM9byx7bWVzaERhdGE6bn19YXN5bmMgZnVuY3Rpb24gWTYodCxlKXtsZXQgbj10LndlYkFzc2VtYmx5Q29uZmlnO3JldHVybiBoKG4pJiZoKG4ud2FzbUJpbmFyeUZpbGUpP2tnPWF3YWl0KDAsVmcuZGVmYXVsdCkobik6a2c9YXdhaXQoMCxWZy5kZWZhdWx0KSgpLCEwfWZ1bmN0aW9uICQ2KHQsZSl7bGV0IG49dC53ZWJBc3NlbWJseUNvbmZpZztyZXR1cm4gaChuKT9ZNih0LGUpOlg2KHQsZSl9dmFyIFZnLGtnLGxtLFo2LHpnPVooKCk9PntzbygpO2F0KCk7aWMoKTtadCgpO3ZlKCk7VXQoKTtGbigpO1d0KCk7Vmc9bW8oZ2coKSwxKTtsbT17cG9zaXRpb246ZnVuY3Rpb24odCxlLG4pe2xldCBvPXQudmVydGV4Q291bnQqMztyZXR1cm4gdC5wb3NpdGlvbnM9bmV3IEZsb2F0MzJBcnJheShlLG4sbyksbis9byo0LG59LG5vcm1hbDpmdW5jdGlvbih0LGUsbil7bGV0IG89dC52ZXJ0ZXhDb3VudCozO3JldHVybiB0Lm5vcm1hbHM9bmV3IEZsb2F0MzJBcnJheShlLG4sbyksbis9byo0LG59LHV2MDpmdW5jdGlvbih0LGUsbil7bGV0IG89dC52ZXJ0ZXhDb3VudCoyO3JldHVybiB0LnV2MHM9bmV3IEZsb2F0MzJBcnJheShlLG4sbyksbis9byo0LG59LGNvbG9yOmZ1bmN0aW9uKHQsZSxuKXtsZXQgbz10LnZlcnRleENvdW50KjQ7cmV0dXJuIHQuY29sb3JzPW5ldyBVaW50OEFycmF5KGUsbixvKSxuKz1vLG59LGZlYXR1cmVJZDpmdW5jdGlvbih0LGUsbil7bGV0IG89dC5mZWF0dXJlQ291bnQ7cmV0dXJuIG4rPW8qOCxufSxpZDpmdW5jdGlvbih0LGUsbil7bGV0IG89dC5mZWF0dXJlQ291bnQ7cmV0dXJuIG4rPW8qOCxufSxmYWNlUmFuZ2U6ZnVuY3Rpb24odCxlLG4pe2xldCBvPXQuZmVhdHVyZUNvdW50KjI7cmV0dXJuIHQuZmFjZVJhbmdlPW5ldyBVaW50MzJBcnJheShlLG4sbyksbis9byo0LG59LHV2UmVnaW9uOmZ1bmN0aW9uKHQsZSxuKXtsZXQgbz10LnZlcnRleENvdW50KjQ7cmV0dXJuIHRbInV2LXJlZ2lvbiJdPW5ldyBVaW50MTZBcnJheShlLG4sbyksbis9byoyLG59LHJlZ2lvbjpmdW5jdGlvbih0LGUsbil7bGV0IG89dC52ZXJ0ZXhDb3VudCo0O3JldHVybiB0WyJ1di1yZWdpb24iXT1uZXcgVWludDE2QXJyYXkoZSxuLG8pLG4rPW8qMixufX07WjY9UWUoJDYpfSk7dmFyIE1lLHpvLGpnPVooKCk9PntrcygpO01lPXtVTlNJR05FRF9CWVRFOnF0LlVOU0lHTkVEX0JZVEUsVU5TSUdORURfU0hPUlQ6cXQuVU5TSUdORURfU0hPUlQsVU5TSUdORURfSU5UOnF0LlVOU0lHTkVEX0lOVCxGTE9BVDpxdC5GTE9BVCxIQUxGX0ZMT0FUOnF0LkhBTEZfRkxPQVRfT0VTLFVOU0lHTkVEX0lOVF8yNF84OnF0LlVOU0lHTkVEX0lOVF8yNF84LFVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6cXQuVU5TSUdORURfU0hPUlRfNF80XzRfNCxVTlNJR05FRF9TSE9SVF81XzVfNV8xOnF0LlVOU0lHTkVEX1NIT1JUXzVfNV81XzEsVU5TSUdORURfU0hPUlRfNV82XzU6cXQuVU5TSUdORURfU0hPUlRfNV82XzV9O01lLnRvV2ViR0xDb25zdGFudD1mdW5jdGlvbih0LGUpe3N3aXRjaCh0KXtjYXNlIE1lLlVOU0lHTkVEX0JZVEU6cmV0dXJuIHF0LlVOU0lHTkVEX0JZVEU7Y2FzZSBNZS5VTlNJR05FRF9TSE9SVDpyZXR1cm4gcXQuVU5TSUdORURfU0hPUlQ7Y2FzZSBNZS5VTlNJR05FRF9JTlQ6cmV0dXJuIHF0LlVOU0lHTkVEX0lOVDtjYXNlIE1lLkZMT0FUOnJldHVybiBxdC5GTE9BVDtjYXNlIE1lLkhBTEZfRkxPQVQ6cmV0dXJuIGUud2ViZ2wyP3F0LkhBTEZfRkxPQVQ6cXQuSEFMRl9GTE9BVF9PRVM7Y2FzZSBNZS5VTlNJR05FRF9JTlRfMjRfODpyZXR1cm4gcXQuVU5TSUdORURfSU5UXzI0Xzg7Y2FzZSBNZS5VTlNJR05FRF9TSE9SVF80XzRfNF80OnJldHVybiBxdC5VTlNJR05FRF9TSE9SVF80XzRfNF80O2Nhc2UgTWUuVU5TSUdORURfU0hPUlRfNV81XzVfMTpyZXR1cm4gcXQuVU5TSUdORURfU0hPUlRfNV81XzVfMTtjYXNlIE1lLlVOU0lHTkVEX1NIT1JUXzVfNl81OnJldHVybiBNZS5VTlNJR05FRF9TSE9SVF81XzZfNX19O01lLmlzUGFja2VkPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09TWUuVU5TSUdORURfSU5UXzI0Xzh8fHQ9PT1NZS5VTlNJR05FRF9TSE9SVF80XzRfNF80fHx0PT09TWUuVU5TSUdORURfU0hPUlRfNV81XzVfMXx8dD09PU1lLlVOU0lHTkVEX1NIT1JUXzVfNl81fTtNZS5zaXplSW5CeXRlcz1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSBNZS5VTlNJR05FRF9CWVRFOnJldHVybiAxO2Nhc2UgTWUuVU5TSUdORURfU0hPUlQ6Y2FzZSBNZS5VTlNJR05FRF9TSE9SVF80XzRfNF80OmNhc2UgTWUuVU5TSUdORURfU0hPUlRfNV81XzVfMTpjYXNlIE1lLlVOU0lHTkVEX1NIT1JUXzVfNl81OmNhc2UgTWUuSEFMRl9GTE9BVDpyZXR1cm4gMjtjYXNlIE1lLlVOU0lHTkVEX0lOVDpjYXNlIE1lLkZMT0FUOmNhc2UgTWUuVU5TSUdORURfSU5UXzI0Xzg6cmV0dXJuIDR9fTtNZS52YWxpZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdD09PU1lLlVOU0lHTkVEX0JZVEV8fHQ9PT1NZS5VTlNJR05FRF9TSE9SVHx8dD09PU1lLlVOU0lHTkVEX0lOVHx8dD09PU1lLkZMT0FUfHx0PT09TWUuSEFMRl9GTE9BVHx8dD09PU1lLlVOU0lHTkVEX0lOVF8yNF84fHx0PT09TWUuVU5TSUdORURfU0hPUlRfNF80XzRfNHx8dD09PU1lLlVOU0lHTkVEX1NIT1JUXzVfNV81XzF8fHQ9PT1NZS5VTlNJR05FRF9TSE9SVF81XzZfNX07em89T2JqZWN0LmZyZWV6ZShNZSl9KTt2YXIgU3QsQm4sUlM9WigoKT0+e2pnKCk7a3MoKTtTdD17REVQVEhfQ09NUE9ORU5UOnF0LkRFUFRIX0NPTVBPTkVOVCxERVBUSF9TVEVOQ0lMOnF0LkRFUFRIX1NURU5DSUwsQUxQSEE6cXQuQUxQSEEsUkVEOnF0LlJFRCxSRzpxdC5SRyxSR0I6cXQuUkdCLFJHQkE6cXQuUkdCQSxMVU1JTkFOQ0U6cXQuTFVNSU5BTkNFLExVTUlOQU5DRV9BTFBIQTpxdC5MVU1JTkFOQ0VfQUxQSEEsUkdCX0RYVDE6cXQuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCxSR0JBX0RYVDE6cXQuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQsUkdCQV9EWFQzOnF0LkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhULFJHQkFfRFhUNTpxdC5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVCxSR0JfUFZSVENfNEJQUFYxOnF0LkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUcsUkdCX1BWUlRDXzJCUFBWMTpxdC5DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HLFJHQkFfUFZSVENfNEJQUFYxOnF0LkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HLFJHQkFfUFZSVENfMkJQUFYxOnF0LkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HLFJHQkFfQVNUQzpxdC5DT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfV0VCR0wsUkdCX0VUQzE6cXQuQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTCxSR0I4X0VUQzI6cXQuQ09NUFJFU1NFRF9SR0I4X0VUQzIsUkdCQThfRVRDMl9FQUM6cXQuQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQyxSR0JBX0JDNzpxdC5DT01QUkVTU0VEX1JHQkFfQlBUQ19VTk9STX07U3QuY29tcG9uZW50c0xlbmd0aD1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSBTdC5SR0I6cmV0dXJuIDM7Y2FzZSBTdC5SR0JBOnJldHVybiA0O2Nhc2UgU3QuTFVNSU5BTkNFX0FMUEhBOmNhc2UgU3QuUkc6cmV0dXJuIDI7Y2FzZSBTdC5BTFBIQTpjYXNlIFN0LlJFRDpjYXNlIFN0LkxVTUlOQU5DRTpyZXR1cm4gMTtkZWZhdWx0OnJldHVybiAxfX07U3QudmFsaWRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1TdC5ERVBUSF9DT01QT05FTlR8fHQ9PT1TdC5ERVBUSF9TVEVOQ0lMfHx0PT09U3QuQUxQSEF8fHQ9PT1TdC5SRUR8fHQ9PT1TdC5SR3x8dD09PVN0LlJHQnx8dD09PVN0LlJHQkF8fHQ9PT1TdC5MVU1JTkFOQ0V8fHQ9PT1TdC5MVU1JTkFOQ0VfQUxQSEF8fHQ9PT1TdC5SR0JfRFhUMXx8dD09PVN0LlJHQkFfRFhUMXx8dD09PVN0LlJHQkFfRFhUM3x8dD09PVN0LlJHQkFfRFhUNXx8dD09PVN0LlJHQl9QVlJUQ180QlBQVjF8fHQ9PT1TdC5SR0JfUFZSVENfMkJQUFYxfHx0PT09U3QuUkdCQV9QVlJUQ180QlBQVjF8fHQ9PT1TdC5SR0JBX1BWUlRDXzJCUFBWMXx8dD09PVN0LlJHQkFfQVNUQ3x8dD09PVN0LlJHQl9FVEMxfHx0PT09U3QuUkdCOF9FVEMyfHx0PT09U3QuUkdCQThfRVRDMl9FQUN8fHQ9PT1TdC5SR0JBX0JDN307U3QuaXNDb2xvckZvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gdD09PVN0LkFMUEhBfHx0PT09U3QuUkdCfHx0PT09U3QuUkdCQXx8dD09PVN0LkxVTUlOQU5DRXx8dD09PVN0LkxVTUlOQU5DRV9BTFBIQX07U3QuaXNEZXB0aEZvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gdD09PVN0LkRFUFRIX0NPTVBPTkVOVHx8dD09PVN0LkRFUFRIX1NURU5DSUx9O1N0LmlzQ29tcHJlc3NlZEZvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gdD09PVN0LlJHQl9EWFQxfHx0PT09U3QuUkdCQV9EWFQxfHx0PT09U3QuUkdCQV9EWFQzfHx0PT09U3QuUkdCQV9EWFQ1fHx0PT09U3QuUkdCX1BWUlRDXzRCUFBWMXx8dD09PVN0LlJHQl9QVlJUQ18yQlBQVjF8fHQ9PT1TdC5SR0JBX1BWUlRDXzRCUFBWMXx8dD09PVN0LlJHQkFfUFZSVENfMkJQUFYxfHx0PT09U3QuUkdCQV9BU1RDfHx0PT09U3QuUkdCX0VUQzF8fHQ9PT1TdC5SR0I4X0VUQzJ8fHQ9PT1TdC5SR0JBOF9FVEMyX0VBQ3x8dD09PVN0LlJHQkFfQkM3fTtTdC5pc0RYVEZvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gdD09PVN0LlJHQl9EWFQxfHx0PT09U3QuUkdCQV9EWFQxfHx0PT09U3QuUkdCQV9EWFQzfHx0PT09U3QuUkdCQV9EWFQ1fTtTdC5pc1BWUlRDRm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiB0PT09U3QuUkdCX1BWUlRDXzRCUFBWMXx8dD09PVN0LlJHQl9QVlJUQ18yQlBQVjF8fHQ9PT1TdC5SR0JBX1BWUlRDXzRCUFBWMXx8dD09PVN0LlJHQkFfUFZSVENfMkJQUFYxfTtTdC5pc0FTVENGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1TdC5SR0JBX0FTVEN9O1N0LmlzRVRDMUZvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gdD09PVN0LlJHQl9FVEMxfTtTdC5pc0VUQzJGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1TdC5SR0I4X0VUQzJ8fHQ9PT1TdC5SR0JBOF9FVEMyX0VBQ307U3QuaXNCQzdGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1TdC5SR0JBX0JDN307U3QuY29tcHJlc3NlZFRleHR1cmVTaXplSW5CeXRlcz1mdW5jdGlvbih0LGUsbil7c3dpdGNoKHQpe2Nhc2UgU3QuUkdCX0RYVDE6Y2FzZSBTdC5SR0JBX0RYVDE6Y2FzZSBTdC5SR0JfRVRDMTpjYXNlIFN0LlJHQjhfRVRDMjpyZXR1cm4gTWF0aC5mbG9vcigoZSszKS80KSpNYXRoLmZsb29yKChuKzMpLzQpKjg7Y2FzZSBTdC5SR0JBX0RYVDM6Y2FzZSBTdC5SR0JBX0RYVDU6Y2FzZSBTdC5SR0JBX0FTVEM6Y2FzZSBTdC5SR0JBOF9FVEMyX0VBQzpyZXR1cm4gTWF0aC5mbG9vcigoZSszKS80KSpNYXRoLmZsb29yKChuKzMpLzQpKjE2O2Nhc2UgU3QuUkdCX1BWUlRDXzRCUFBWMTpjYXNlIFN0LlJHQkFfUFZSVENfNEJQUFYxOnJldHVybiBNYXRoLmZsb29yKChNYXRoLm1heChlLDgpKk1hdGgubWF4KG4sOCkqNCs3KS84KTtjYXNlIFN0LlJHQl9QVlJUQ18yQlBQVjE6Y2FzZSBTdC5SR0JBX1BWUlRDXzJCUFBWMTpyZXR1cm4gTWF0aC5mbG9vcigoTWF0aC5tYXgoZSwxNikqTWF0aC5tYXgobiw4KSoyKzcpLzgpO2Nhc2UgU3QuUkdCQV9CQzc6cmV0dXJuIE1hdGguY2VpbChlLzQpKk1hdGguY2VpbChuLzQpKjE2O2RlZmF1bHQ6cmV0dXJuIDB9fTtTdC50ZXh0dXJlU2l6ZUluQnl0ZXM9ZnVuY3Rpb24odCxlLG4sbyl7bGV0IHI9U3QuY29tcG9uZW50c0xlbmd0aCh0KTtyZXR1cm4gem8uaXNQYWNrZWQoZSkmJihyPTEpLHIqem8uc2l6ZUluQnl0ZXMoZSkqbipvfTtTdC5hbGlnbm1lbnRJbkJ5dGVzPWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz1TdC50ZXh0dXJlU2l6ZUluQnl0ZXModCxlLG4sMSklNDtyZXR1cm4gbz09PTA/NDpvPT09Mj8yOjF9O1N0LmNyZWF0ZVR5cGVkQXJyYXk9ZnVuY3Rpb24odCxlLG4sbyl7bGV0IHIsaT16by5zaXplSW5CeXRlcyhlKTtpPT09VWludDhBcnJheS5CWVRFU19QRVJfRUxFTUVOVD9yPVVpbnQ4QXJyYXk6aT09PVVpbnQxNkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UP3I9VWludDE2QXJyYXk6aT09PUZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCYmZT09PXpvLkZMT0FUP3I9RmxvYXQzMkFycmF5OnI9VWludDMyQXJyYXk7bGV0IHM9U3QuY29tcG9uZW50c0xlbmd0aCh0KSpuKm87cmV0dXJuIG5ldyByKHMpfTtTdC5mbGlwWT1mdW5jdGlvbih0LGUsbixvLHIpe2lmKHI9PT0xKXJldHVybiB0O2xldCBpPVN0LmNyZWF0ZVR5cGVkQXJyYXkoZSxuLG8scikscz1TdC5jb21wb25lbnRzTGVuZ3RoKGUpLGY9bypzO2ZvcihsZXQgdT0wO3U8cjsrK3Upe2xldCBjPXUqbypzLGw9KHItdS0xKSpvKnM7Zm9yKGxldCBwPTA7cDxmOysrcClpW2wrcF09dFtjK3BdfXJldHVybiBpfTtTdC50b0ludGVybmFsRm9ybWF0PWZ1bmN0aW9uKHQsZSxuKXtpZighbi53ZWJnbDIpcmV0dXJuIHQ7aWYodD09PVN0LkRFUFRIX1NURU5DSUwpcmV0dXJuIHF0LkRFUFRIMjRfU1RFTkNJTDg7aWYodD09PVN0LkRFUFRIX0NPTVBPTkVOVCl7aWYoZT09PXpvLlVOU0lHTkVEX1NIT1JUKXJldHVybiBxdC5ERVBUSF9DT01QT05FTlQxNjtpZihlPT09em8uVU5TSUdORURfSU5UKXJldHVybiBxdC5ERVBUSF9DT01QT05FTlQyNH1pZihlPT09em8uRkxPQVQpc3dpdGNoKHQpe2Nhc2UgU3QuUkdCQTpyZXR1cm4gcXQuUkdCQTMyRjtjYXNlIFN0LlJHQjpyZXR1cm4gcXQuUkdCMzJGO2Nhc2UgU3QuUkc6cmV0dXJuIHF0LlJHMzJGO2Nhc2UgU3QuUkVEOnJldHVybiBxdC5SMzJGfWlmKGU9PT16by5IQUxGX0ZMT0FUKXN3aXRjaCh0KXtjYXNlIFN0LlJHQkE6cmV0dXJuIHF0LlJHQkExNkY7Y2FzZSBTdC5SR0I6cmV0dXJuIHF0LlJHQjE2RjtjYXNlIFN0LlJHOnJldHVybiBxdC5SRzE2RjtjYXNlIFN0LlJFRDpyZXR1cm4gcXQuUjE2Rn1yZXR1cm4gdH07Qm49T2JqZWN0LmZyZWV6ZShTdCl9KTt2YXIgUTYseXUsU1M9WigoKT0+e1E2PXtWS19GT1JNQVRfVU5ERUZJTkVEOjAsVktfRk9STUFUX1I0RzRfVU5PUk1fUEFDSzg6MSxWS19GT1JNQVRfUjRHNEI0QTRfVU5PUk1fUEFDSzE2OjIsVktfRk9STUFUX0I0RzRSNEE0X1VOT1JNX1BBQ0sxNjozLFZLX0ZPUk1BVF9SNUc2QjVfVU5PUk1fUEFDSzE2OjQsVktfRk9STUFUX0I1RzZSNV9VTk9STV9QQUNLMTY6NSxWS19GT1JNQVRfUjVHNUI1QTFfVU5PUk1fUEFDSzE2OjYsVktfRk9STUFUX0I1RzVSNUExX1VOT1JNX1BBQ0sxNjo3LFZLX0ZPUk1BVF9BMVI1RzVCNV9VTk9STV9QQUNLMTY6OCxWS19GT1JNQVRfUjhfVU5PUk06OSxWS19GT1JNQVRfUjhfU05PUk06MTAsVktfRk9STUFUX1I4X1VTQ0FMRUQ6MTEsVktfRk9STUFUX1I4X1NTQ0FMRUQ6MTIsVktfRk9STUFUX1I4X1VJTlQ6MTMsVktfRk9STUFUX1I4X1NJTlQ6MTQsVktfRk9STUFUX1I4X1NSR0I6MTUsVktfRk9STUFUX1I4RzhfVU5PUk06MTYsVktfRk9STUFUX1I4RzhfU05PUk06MTcsVktfRk9STUFUX1I4RzhfVVNDQUxFRDoxOCxWS19GT1JNQVRfUjhHOF9TU0NBTEVEOjE5LFZLX0ZPUk1BVF9SOEc4X1VJTlQ6MjAsVktfRk9STUFUX1I4RzhfU0lOVDoyMSxWS19GT1JNQVRfUjhHOF9TUkdCOjIyLFZLX0ZPUk1BVF9SOEc4QjhfVU5PUk06MjMsVktfRk9STUFUX1I4RzhCOF9TTk9STToyNCxWS19GT1JNQVRfUjhHOEI4X1VTQ0FMRUQ6MjUsVktfRk9STUFUX1I4RzhCOF9TU0NBTEVEOjI2LFZLX0ZPUk1BVF9SOEc4QjhfVUlOVDoyNyxWS19GT1JNQVRfUjhHOEI4X1NJTlQ6MjgsVktfRk9STUFUX1I4RzhCOF9TUkdCOjI5LFZLX0ZPUk1BVF9COEc4UjhfVU5PUk06MzAsVktfRk9STUFUX0I4RzhSOF9TTk9STTozMSxWS19GT1JNQVRfQjhHOFI4X1VTQ0FMRUQ6MzIsVktfRk9STUFUX0I4RzhSOF9TU0NBTEVEOjMzLFZLX0ZPUk1BVF9COEc4UjhfVUlOVDozNCxWS19GT1JNQVRfQjhHOFI4X1NJTlQ6MzUsVktfRk9STUFUX0I4RzhSOF9TUkdCOjM2LFZLX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTozNyxWS19GT1JNQVRfUjhHOEI4QThfU05PUk06MzgsVktfRk9STUFUX1I4RzhCOEE4X1VTQ0FMRUQ6MzksVktfRk9STUFUX1I4RzhCOEE4X1NTQ0FMRUQ6NDAsVktfRk9STUFUX1I4RzhCOEE4X1VJTlQ6NDEsVktfRk9STUFUX1I4RzhCOEE4X1NJTlQ6NDIsVktfRk9STUFUX1I4RzhCOEE4X1NSR0I6NDMsVktfRk9STUFUX0I4RzhSOEE4X1VOT1JNOjQ0LFZLX0ZPUk1BVF9COEc4UjhBOF9TTk9STTo0NSxWS19GT1JNQVRfQjhHOFI4QThfVVNDQUxFRDo0NixWS19GT1JNQVRfQjhHOFI4QThfU1NDQUxFRDo0NyxWS19GT1JNQVRfQjhHOFI4QThfVUlOVDo0OCxWS19GT1JNQVRfQjhHOFI4QThfU0lOVDo0OSxWS19GT1JNQVRfQjhHOFI4QThfU1JHQjo1MCxWS19GT1JNQVRfQThCOEc4UjhfVU5PUk1fUEFDSzMyOjUxLFZLX0ZPUk1BVF9BOEI4RzhSOF9TTk9STV9QQUNLMzI6NTIsVktfRk9STUFUX0E4QjhHOFI4X1VTQ0FMRURfUEFDSzMyOjUzLFZLX0ZPUk1BVF9BOEI4RzhSOF9TU0NBTEVEX1BBQ0szMjo1NCxWS19GT1JNQVRfQThCOEc4UjhfVUlOVF9QQUNLMzI6NTUsVktfRk9STUFUX0E4QjhHOFI4X1NJTlRfUEFDSzMyOjU2LFZLX0ZPUk1BVF9BOEI4RzhSOF9TUkdCX1BBQ0szMjo1NyxWS19GT1JNQVRfQTJSMTBHMTBCMTBfVU5PUk1fUEFDSzMyOjU4LFZLX0ZPUk1BVF9BMlIxMEcxMEIxMF9TTk9STV9QQUNLMzI6NTksVktfRk9STUFUX0EyUjEwRzEwQjEwX1VTQ0FMRURfUEFDSzMyOjYwLFZLX0ZPUk1BVF9BMlIxMEcxMEIxMF9TU0NBTEVEX1BBQ0szMjo2MSxWS19GT1JNQVRfQTJSMTBHMTBCMTBfVUlOVF9QQUNLMzI6NjIsVktfRk9STUFUX0EyUjEwRzEwQjEwX1NJTlRfUEFDSzMyOjYzLFZLX0ZPUk1BVF9BMkIxMEcxMFIxMF9VTk9STV9QQUNLMzI6NjQsVktfRk9STUFUX0EyQjEwRzEwUjEwX1NOT1JNX1BBQ0szMjo2NSxWS19GT1JNQVRfQTJCMTBHMTBSMTBfVVNDQUxFRF9QQUNLMzI6NjYsVktfRk9STUFUX0EyQjEwRzEwUjEwX1NTQ0FMRURfUEFDSzMyOjY3LFZLX0ZPUk1BVF9BMkIxMEcxMFIxMF9VSU5UX1BBQ0szMjo2OCxWS19GT1JNQVRfQTJCMTBHMTBSMTBfU0lOVF9QQUNLMzI6NjksVktfRk9STUFUX1IxNl9VTk9STTo3MCxWS19GT1JNQVRfUjE2X1NOT1JNOjcxLFZLX0ZPUk1BVF9SMTZfVVNDQUxFRDo3MixWS19GT1JNQVRfUjE2X1NTQ0FMRUQ6NzMsVktfRk9STUFUX1IxNl9VSU5UOjc0LFZLX0ZPUk1BVF9SMTZfU0lOVDo3NSxWS19GT1JNQVRfUjE2X1NGTE9BVDo3NixWS19GT1JNQVRfUjE2RzE2X1VOT1JNOjc3LFZLX0ZPUk1BVF9SMTZHMTZfU05PUk06NzgsVktfRk9STUFUX1IxNkcxNl9VU0NBTEVEOjc5LFZLX0ZPUk1BVF9SMTZHMTZfU1NDQUxFRDo4MCxWS19GT1JNQVRfUjE2RzE2X1VJTlQ6ODEsVktfRk9STUFUX1IxNkcxNl9TSU5UOjgyLFZLX0ZPUk1BVF9SMTZHMTZfU0ZMT0FUOjgzLFZLX0ZPUk1BVF9SMTZHMTZCMTZfVU5PUk06ODQsVktfRk9STUFUX1IxNkcxNkIxNl9TTk9STTo4NSxWS19GT1JNQVRfUjE2RzE2QjE2X1VTQ0FMRUQ6ODYsVktfRk9STUFUX1IxNkcxNkIxNl9TU0NBTEVEOjg3LFZLX0ZPUk1BVF9SMTZHMTZCMTZfVUlOVDo4OCxWS19GT1JNQVRfUjE2RzE2QjE2X1NJTlQ6ODksVktfRk9STUFUX1IxNkcxNkIxNl9TRkxPQVQ6OTAsVktfRk9STUFUX1IxNkcxNkIxNkExNl9VTk9STTo5MSxWS19GT1JNQVRfUjE2RzE2QjE2QTE2X1NOT1JNOjkyLFZLX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVVNDQUxFRDo5MyxWS19GT1JNQVRfUjE2RzE2QjE2QTE2X1NTQ0FMRUQ6OTQsVktfRk9STUFUX1IxNkcxNkIxNkExNl9VSU5UOjk1LFZLX0ZPUk1BVF9SMTZHMTZCMTZBMTZfU0lOVDo5NixWS19GT1JNQVRfUjE2RzE2QjE2QTE2X1NGTE9BVDo5NyxWS19GT1JNQVRfUjMyX1VJTlQ6OTgsVktfRk9STUFUX1IzMl9TSU5UOjk5LFZLX0ZPUk1BVF9SMzJfU0ZMT0FUOjEwMCxWS19GT1JNQVRfUjMyRzMyX1VJTlQ6MTAxLFZLX0ZPUk1BVF9SMzJHMzJfU0lOVDoxMDIsVktfRk9STUFUX1IzMkczMl9TRkxPQVQ6MTAzLFZLX0ZPUk1BVF9SMzJHMzJCMzJfVUlOVDoxMDQsVktfRk9STUFUX1IzMkczMkIzMl9TSU5UOjEwNSxWS19GT1JNQVRfUjMyRzMyQjMyX1NGTE9BVDoxMDYsVktfRk9STUFUX1IzMkczMkIzMkEzMl9VSU5UOjEwNyxWS19GT1JNQVRfUjMyRzMyQjMyQTMyX1NJTlQ6MTA4LFZLX0ZPUk1BVF9SMzJHMzJCMzJBMzJfU0ZMT0FUOjEwOSxWS19GT1JNQVRfUjY0X1VJTlQ6MTEwLFZLX0ZPUk1BVF9SNjRfU0lOVDoxMTEsVktfRk9STUFUX1I2NF9TRkxPQVQ6MTEyLFZLX0ZPUk1BVF9SNjRHNjRfVUlOVDoxMTMsVktfRk9STUFUX1I2NEc2NF9TSU5UOjExNCxWS19GT1JNQVRfUjY0RzY0X1NGTE9BVDoxMTUsVktfRk9STUFUX1I2NEc2NEI2NF9VSU5UOjExNixWS19GT1JNQVRfUjY0RzY0QjY0X1NJTlQ6MTE3LFZLX0ZPUk1BVF9SNjRHNjRCNjRfU0ZMT0FUOjExOCxWS19GT1JNQVRfUjY0RzY0QjY0QTY0X1VJTlQ6MTE5LFZLX0ZPUk1BVF9SNjRHNjRCNjRBNjRfU0lOVDoxMjAsVktfRk9STUFUX1I2NEc2NEI2NEE2NF9TRkxPQVQ6MTIxLFZLX0ZPUk1BVF9CMTBHMTFSMTFfVUZMT0FUX1BBQ0szMjoxMjIsVktfRk9STUFUX0U1QjlHOVI5X1VGTE9BVF9QQUNLMzI6MTIzLFZLX0ZPUk1BVF9EMTZfVU5PUk06MTI0LFZLX0ZPUk1BVF9YOF9EMjRfVU5PUk1fUEFDSzMyOjEyNSxWS19GT1JNQVRfRDMyX1NGTE9BVDoxMjYsVktfRk9STUFUX1M4X1VJTlQ6MTI3LFZLX0ZPUk1BVF9EMTZfVU5PUk1fUzhfVUlOVDoxMjgsVktfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOjEyOSxWS19GT1JNQVRfRDMyX1NGTE9BVF9TOF9VSU5UOjEzMCxWS19GT1JNQVRfQkMxX1JHQl9VTk9STV9CTE9DSzoxMzEsVktfRk9STUFUX0JDMV9SR0JfU1JHQl9CTE9DSzoxMzIsVktfRk9STUFUX0JDMV9SR0JBX1VOT1JNX0JMT0NLOjEzMyxWS19GT1JNQVRfQkMxX1JHQkFfU1JHQl9CTE9DSzoxMzQsVktfRk9STUFUX0JDMl9VTk9STV9CTE9DSzoxMzUsVktfRk9STUFUX0JDMl9TUkdCX0JMT0NLOjEzNixWS19GT1JNQVRfQkMzX1VOT1JNX0JMT0NLOjEzNyxWS19GT1JNQVRfQkMzX1NSR0JfQkxPQ0s6MTM4LFZLX0ZPUk1BVF9CQzRfVU5PUk1fQkxPQ0s6MTM5LFZLX0ZPUk1BVF9CQzRfU05PUk1fQkxPQ0s6MTQwLFZLX0ZPUk1BVF9CQzVfVU5PUk1fQkxPQ0s6MTQxLFZLX0ZPUk1BVF9CQzVfU05PUk1fQkxPQ0s6MTQyLFZLX0ZPUk1BVF9CQzZIX1VGTE9BVF9CTE9DSzoxNDMsVktfRk9STUFUX0JDNkhfU0ZMT0FUX0JMT0NLOjE0NCxWS19GT1JNQVRfQkM3X1VOT1JNX0JMT0NLOjE0NSxWS19GT1JNQVRfQkM3X1NSR0JfQkxPQ0s6MTQ2LFZLX0ZPUk1BVF9FVEMyX1I4RzhCOF9VTk9STV9CTE9DSzoxNDcsVktfRk9STUFUX0VUQzJfUjhHOEI4X1NSR0JfQkxPQ0s6MTQ4LFZLX0ZPUk1BVF9FVEMyX1I4RzhCOEExX1VOT1JNX0JMT0NLOjE0OSxWS19GT1JNQVRfRVRDMl9SOEc4QjhBMV9TUkdCX0JMT0NLOjE1MCxWS19GT1JNQVRfRVRDMl9SOEc4QjhBOF9VTk9STV9CTE9DSzoxNTEsVktfRk9STUFUX0VUQzJfUjhHOEI4QThfU1JHQl9CTE9DSzoxNTIsVktfRk9STUFUX0VBQ19SMTFfVU5PUk1fQkxPQ0s6MTUzLFZLX0ZPUk1BVF9FQUNfUjExX1NOT1JNX0JMT0NLOjE1NCxWS19GT1JNQVRfRUFDX1IxMUcxMV9VTk9STV9CTE9DSzoxNTUsVktfRk9STUFUX0VBQ19SMTFHMTFfU05PUk1fQkxPQ0s6MTU2LFZLX0ZPUk1BVF9BU1RDXzR4NF9VTk9STV9CTE9DSzoxNTcsVktfRk9STUFUX0FTVENfNHg0X1NSR0JfQkxPQ0s6MTU4LFZLX0ZPUk1BVF9BU1RDXzV4NF9VTk9STV9CTE9DSzoxNTksVktfRk9STUFUX0FTVENfNXg0X1NSR0JfQkxPQ0s6MTYwLFZLX0ZPUk1BVF9BU1RDXzV4NV9VTk9STV9CTE9DSzoxNjEsVktfRk9STUFUX0FTVENfNXg1X1NSR0JfQkxPQ0s6MTYyLFZLX0ZPUk1BVF9BU1RDXzZ4NV9VTk9STV9CTE9DSzoxNjMsVktfRk9STUFUX0FTVENfNng1X1NSR0JfQkxPQ0s6MTY0LFZLX0ZPUk1BVF9BU1RDXzZ4Nl9VTk9STV9CTE9DSzoxNjUsVktfRk9STUFUX0FTVENfNng2X1NSR0JfQkxPQ0s6MTY2LFZLX0ZPUk1BVF9BU1RDXzh4NV9VTk9STV9CTE9DSzoxNjcsVktfRk9STUFUX0FTVENfOHg1X1NSR0JfQkxPQ0s6MTY4LFZLX0ZPUk1BVF9BU1RDXzh4Nl9VTk9STV9CTE9DSzoxNjksVktfRk9STUFUX0FTVENfOHg2X1NSR0JfQkxPQ0s6MTcwLFZLX0ZPUk1BVF9BU1RDXzh4OF9VTk9STV9CTE9DSzoxNzEsVktfRk9STUFUX0FTVENfOHg4X1NSR0JfQkxPQ0s6MTcyLFZLX0ZPUk1BVF9BU1RDXzEweDVfVU5PUk1fQkxPQ0s6MTczLFZLX0ZPUk1BVF9BU1RDXzEweDVfU1JHQl9CTE9DSzoxNzQsVktfRk9STUFUX0FTVENfMTB4Nl9VTk9STV9CTE9DSzoxNzUsVktfRk9STUFUX0FTVENfMTB4Nl9TUkdCX0JMT0NLOjE3NixWS19GT1JNQVRfQVNUQ18xMHg4X1VOT1JNX0JMT0NLOjE3NyxWS19GT1JNQVRfQVNUQ18xMHg4X1NSR0JfQkxPQ0s6MTc4LFZLX0ZPUk1BVF9BU1RDXzEweDEwX1VOT1JNX0JMT0NLOjE3OSxWS19GT1JNQVRfQVNUQ18xMHgxMF9TUkdCX0JMT0NLOjE4MCxWS19GT1JNQVRfQVNUQ18xMngxMF9VTk9STV9CTE9DSzoxODEsVktfRk9STUFUX0FTVENfMTJ4MTBfU1JHQl9CTE9DSzoxODIsVktfRk9STUFUX0FTVENfMTJ4MTJfVU5PUk1fQkxPQ0s6MTgzLFZLX0ZPUk1BVF9BU1RDXzEyeDEyX1NSR0JfQkxPQ0s6MTg0LFZLX0ZPUk1BVF9HOEI4RzhSOF80MjJfVU5PUk06MTAwMDE1NmUzLFZLX0ZPUk1BVF9COEc4UjhHOF80MjJfVU5PUk06MTAwMDE1NjAwMSxWS19GT1JNQVRfRzhfQjhfUjhfM1BMQU5FXzQyMF9VTk9STToxMDAwMTU2MDAyLFZLX0ZPUk1BVF9HOF9COFI4XzJQTEFORV80MjBfVU5PUk06MTAwMDE1NjAwMyxWS19GT1JNQVRfRzhfQjhfUjhfM1BMQU5FXzQyMl9VTk9STToxMDAwMTU2MDA0LFZLX0ZPUk1BVF9HOF9COFI4XzJQTEFORV80MjJfVU5PUk06MTAwMDE1NjAwNSxWS19GT1JNQVRfRzhfQjhfUjhfM1BMQU5FXzQ0NF9VTk9STToxMDAwMTU2MDA2LFZLX0ZPUk1BVF9SMTBYNl9VTk9STV9QQUNLMTY6MTAwMDE1NjAwNyxWS19GT1JNQVRfUjEwWDZHMTBYNl9VTk9STV8yUEFDSzE2OjEwMDAxNTYwMDgsVktfRk9STUFUX1IxMFg2RzEwWDZCMTBYNkExMFg2X1VOT1JNXzRQQUNLMTY6MTAwMDE1NjAwOSxWS19GT1JNQVRfRzEwWDZCMTBYNkcxMFg2UjEwWDZfNDIyX1VOT1JNXzRQQUNLMTY6MTAwMDE1NjAxMCxWS19GT1JNQVRfQjEwWDZHMTBYNlIxMFg2RzEwWDZfNDIyX1VOT1JNXzRQQUNLMTY6MTAwMDE1NjAxMSxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQyMF9VTk9STV8zUEFDSzE2OjEwMDAxNTYwMTIsVktfRk9STUFUX0cxMFg2X0IxMFg2UjEwWDZfMlBMQU5FXzQyMF9VTk9STV8zUEFDSzE2OjEwMDAxNTYwMTMsVktfRk9STUFUX0cxMFg2X0IxMFg2X1IxMFg2XzNQTEFORV80MjJfVU5PUk1fM1BBQ0sxNjoxMDAwMTU2MDE0LFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjJfVU5PUk1fM1BBQ0sxNjoxMDAwMTU2MDE1LFZLX0ZPUk1BVF9HMTBYNl9CMTBYNl9SMTBYNl8zUExBTkVfNDQ0X1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAxNixWS19GT1JNQVRfUjEyWDRfVU5PUk1fUEFDSzE2OjEwMDAxNTYwMTcsVktfRk9STUFUX1IxMlg0RzEyWDRfVU5PUk1fMlBBQ0sxNjoxMDAwMTU2MDE4LFZLX0ZPUk1BVF9SMTJYNEcxMlg0QjEyWDRBMTJYNF9VTk9STV80UEFDSzE2OjEwMDAxNTYwMTksVktfRk9STUFUX0cxMlg0QjEyWDRHMTJYNFIxMlg0XzQyMl9VTk9STV80UEFDSzE2OjEwMDAxNTYwMjAsVktfRk9STUFUX0IxMlg0RzEyWDRSMTJYNEcxMlg0XzQyMl9VTk9STV80UEFDSzE2OjEwMDAxNTYwMjEsVktfRk9STUFUX0cxMlg0X0IxMlg0X1IxMlg0XzNQTEFORV80MjBfVU5PUk1fM1BBQ0sxNjoxMDAwMTU2MDIyLFZLX0ZPUk1BVF9HMTJYNF9CMTJYNFIxMlg0XzJQTEFORV80MjBfVU5PUk1fM1BBQ0sxNjoxMDAwMTU2MDIzLFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDIyX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAyNCxWS19GT1JNQVRfRzEyWDRfQjEyWDRSMTJYNF8yUExBTkVfNDIyX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAyNSxWS19GT1JNQVRfRzEyWDRfQjEyWDRfUjEyWDRfM1BMQU5FXzQ0NF9VTk9STV8zUEFDSzE2OjEwMDAxNTYwMjYsVktfRk9STUFUX0cxNkIxNkcxNlIxNl80MjJfVU5PUk06MTAwMDE1NjAyNyxWS19GT1JNQVRfQjE2RzE2UjE2RzE2XzQyMl9VTk9STToxMDAwMTU2MDI4LFZLX0ZPUk1BVF9HMTZfQjE2X1IxNl8zUExBTkVfNDIwX1VOT1JNOjEwMDAxNTYwMjksVktfRk9STUFUX0cxNl9CMTZSMTZfMlBMQU5FXzQyMF9VTk9STToxMDAwMTU2MDMwLFZLX0ZPUk1BVF9HMTZfQjE2X1IxNl8zUExBTkVfNDIyX1VOT1JNOjEwMDAxNTYwMzEsVktfRk9STUFUX0cxNl9CMTZSMTZfMlBMQU5FXzQyMl9VTk9STToxMDAwMTU2MDMyLFZLX0ZPUk1BVF9HMTZfQjE2X1IxNl8zUExBTkVfNDQ0X1VOT1JNOjEwMDAxNTYwMzMsVktfRk9STUFUX1BWUlRDMV8yQlBQX1VOT1JNX0JMT0NLX0lNRzoxMDAwMDU0ZTMsVktfRk9STUFUX1BWUlRDMV80QlBQX1VOT1JNX0JMT0NLX0lNRzoxMDAwMDU0MDAxLFZLX0ZPUk1BVF9QVlJUQzJfMkJQUF9VTk9STV9CTE9DS19JTUc6MTAwMDA1NDAwMixWS19GT1JNQVRfUFZSVEMyXzRCUFBfVU5PUk1fQkxPQ0tfSU1HOjEwMDAwNTQwMDMsVktfRk9STUFUX1BWUlRDMV8yQlBQX1NSR0JfQkxPQ0tfSU1HOjEwMDAwNTQwMDQsVktfRk9STUFUX1BWUlRDMV80QlBQX1NSR0JfQkxPQ0tfSU1HOjEwMDAwNTQwMDUsVktfRk9STUFUX1BWUlRDMl8yQlBQX1NSR0JfQkxPQ0tfSU1HOjEwMDAwNTQwMDYsVktfRk9STUFUX1BWUlRDMl80QlBQX1NSR0JfQkxPQ0tfSU1HOjEwMDAwNTQwMDcsVktfRk9STUFUX0FTVENfNHg0X1NGTE9BVF9CTE9DS19FWFQ6MTAwMDA2NmUzLFZLX0ZPUk1BVF9BU1RDXzV4NF9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMDEsVktfRk9STUFUX0FTVENfNXg1X1NGTE9BVF9CTE9DS19FWFQ6MTAwMDA2NjAwMixWS19GT1JNQVRfQVNUQ182eDVfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDAzLFZLX0ZPUk1BVF9BU1RDXzZ4Nl9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMDQsVktfRk9STUFUX0FTVENfOHg1X1NGTE9BVF9CTE9DS19FWFQ6MTAwMDA2NjAwNSxWS19GT1JNQVRfQVNUQ184eDZfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA2LFZLX0ZPUk1BVF9BU1RDXzh4OF9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMDcsVktfRk9STUFUX0FTVENfMTB4NV9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMDgsVktfRk9STUFUX0FTVENfMTB4Nl9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMDksVktfRk9STUFUX0FTVENfMTB4OF9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMTAsVktfRk9STUFUX0FTVENfMTB4MTBfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDExLFZLX0ZPUk1BVF9BU1RDXzEyeDEwX1NGTE9BVF9CTE9DS19FWFQ6MTAwMDA2NjAxMixWS19GT1JNQVRfQVNUQ18xMngxMl9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMTMsVktfRk9STUFUX0c4QjhHOFI4XzQyMl9VTk9STV9LSFI6MTAwMDE1NmUzLFZLX0ZPUk1BVF9COEc4UjhHOF80MjJfVU5PUk1fS0hSOjEwMDAxNTYwMDEsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80MjBfVU5PUk1fS0hSOjEwMDAxNTYwMDIsVktfRk9STUFUX0c4X0I4UjhfMlBMQU5FXzQyMF9VTk9STV9LSFI6MTAwMDE1NjAwMyxWS19GT1JNQVRfRzhfQjhfUjhfM1BMQU5FXzQyMl9VTk9STV9LSFI6MTAwMDE1NjAwNCxWS19GT1JNQVRfRzhfQjhSOF8yUExBTkVfNDIyX1VOT1JNX0tIUjoxMDAwMTU2MDA1LFZLX0ZPUk1BVF9HOF9COF9SOF8zUExBTkVfNDQ0X1VOT1JNX0tIUjoxMDAwMTU2MDA2LFZLX0ZPUk1BVF9SMTBYNl9VTk9STV9QQUNLMTZfS0hSOjEwMDAxNTYwMDcsVktfRk9STUFUX1IxMFg2RzEwWDZfVU5PUk1fMlBBQ0sxNl9LSFI6MTAwMDE1NjAwOCxWS19GT1JNQVRfUjEwWDZHMTBYNkIxMFg2QTEwWDZfVU5PUk1fNFBBQ0sxNl9LSFI6MTAwMDE1NjAwOSxWS19GT1JNQVRfRzEwWDZCMTBYNkcxMFg2UjEwWDZfNDIyX1VOT1JNXzRQQUNLMTZfS0hSOjEwMDAxNTYwMTAsVktfRk9STUFUX0IxMFg2RzEwWDZSMTBYNkcxMFg2XzQyMl9VTk9STV80UEFDSzE2X0tIUjoxMDAwMTU2MDExLFZLX0ZPUk1BVF9HMTBYNl9CMTBYNl9SMTBYNl8zUExBTkVfNDIwX1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMTIsVktfRk9STUFUX0cxMFg2X0IxMFg2UjEwWDZfMlBMQU5FXzQyMF9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDEzLFZLX0ZPUk1BVF9HMTBYNl9CMTBYNl9SMTBYNl8zUExBTkVfNDIyX1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMTQsVktfRk9STUFUX0cxMFg2X0IxMFg2UjEwWDZfMlBMQU5FXzQyMl9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDE1LFZLX0ZPUk1BVF9HMTBYNl9CMTBYNl9SMTBYNl8zUExBTkVfNDQ0X1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMTYsVktfRk9STUFUX1IxMlg0X1VOT1JNX1BBQ0sxNl9LSFI6MTAwMDE1NjAxNyxWS19GT1JNQVRfUjEyWDRHMTJYNF9VTk9STV8yUEFDSzE2X0tIUjoxMDAwMTU2MDE4LFZLX0ZPUk1BVF9SMTJYNEcxMlg0QjEyWDRBMTJYNF9VTk9STV80UEFDSzE2X0tIUjoxMDAwMTU2MDE5LFZLX0ZPUk1BVF9HMTJYNEIxMlg0RzEyWDRSMTJYNF80MjJfVU5PUk1fNFBBQ0sxNl9LSFI6MTAwMDE1NjAyMCxWS19GT1JNQVRfQjEyWDRHMTJYNFIxMlg0RzEyWDRfNDIyX1VOT1JNXzRQQUNLMTZfS0hSOjEwMDAxNTYwMjEsVktfRk9STUFUX0cxMlg0X0IxMlg0X1IxMlg0XzNQTEFORV80MjBfVU5PUk1fM1BBQ0sxNl9LSFI6MTAwMDE1NjAyMixWS19GT1JNQVRfRzEyWDRfQjEyWDRSMTJYNF8yUExBTkVfNDIwX1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMjMsVktfRk9STUFUX0cxMlg0X0IxMlg0X1IxMlg0XzNQTEFORV80MjJfVU5PUk1fM1BBQ0sxNl9LSFI6MTAwMDE1NjAyNCxWS19GT1JNQVRfRzEyWDRfQjEyWDRSMTJYNF8yUExBTkVfNDIyX1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMjUsVktfRk9STUFUX0cxMlg0X0IxMlg0X1IxMlg0XzNQTEFORV80NDRfVU5PUk1fM1BBQ0sxNl9LSFI6MTAwMDE1NjAyNixWS19GT1JNQVRfRzE2QjE2RzE2UjE2XzQyMl9VTk9STV9LSFI6MTAwMDE1NjAyNyxWS19GT1JNQVRfQjE2RzE2UjE2RzE2XzQyMl9VTk9STV9LSFI6MTAwMDE1NjAyOCxWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMF9VTk9STV9LSFI6MTAwMDE1NjAyOSxWS19GT1JNQVRfRzE2X0IxNlIxNl8yUExBTkVfNDIwX1VOT1JNX0tIUjoxMDAwMTU2MDMwLFZLX0ZPUk1BVF9HMTZfQjE2X1IxNl8zUExBTkVfNDIyX1VOT1JNX0tIUjoxMDAwMTU2MDMxLFZLX0ZPUk1BVF9HMTZfQjE2UjE2XzJQTEFORV80MjJfVU5PUk1fS0hSOjEwMDAxNTYwMzIsVktfRk9STUFUX0cxNl9CMTZfUjE2XzNQTEFORV80NDRfVU5PUk1fS0hSOjEwMDAxNTYwMzN9LHl1PU9iamVjdC5mcmVlemUoUTYpfSk7ZnVuY3Rpb24gQ1ModCl7cmV0dXJuIHR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKHQpOkJ1ZmZlci5mcm9tKHQpLnRvU3RyaW5nKCJ1dGY4Iil9ZnVuY3Rpb24geFModCl7bGV0IGU9bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsdC5ieXRlT2Zmc2V0LGpvLmxlbmd0aCk7aWYoZVswXSE9PWpvWzBdfHxlWzFdIT09am9bMV18fGVbMl0hPT1qb1syXXx8ZVszXSE9PWpvWzNdfHxlWzRdIT09am9bNF18fGVbNV0hPT1qb1s1XXx8ZVs2XSE9PWpvWzZdfHxlWzddIT09am9bN118fGVbOF0hPT1qb1s4XXx8ZVs5XSE9PWpvWzldfHxlWzEwXSE9PWpvWzEwXXx8ZVsxMV0hPT1qb1sxMV0pdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIEtUWCAyLjAgaWRlbnRpZmllci4iKTtsZXQgbj1uZXcgSGcsbz0xNypVaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxyPW5ldyBNYyh0LGpvLmxlbmd0aCxvLCEwKTtuLnZrRm9ybWF0PXIuX25leHRVaW50MzIoKSxuLnR5cGVTaXplPXIuX25leHRVaW50MzIoKSxuLnBpeGVsV2lkdGg9ci5fbmV4dFVpbnQzMigpLG4ucGl4ZWxIZWlnaHQ9ci5fbmV4dFVpbnQzMigpLG4ucGl4ZWxEZXB0aD1yLl9uZXh0VWludDMyKCksbi5sYXllckNvdW50PXIuX25leHRVaW50MzIoKSxuLmZhY2VDb3VudD1yLl9uZXh0VWludDMyKCk7bGV0IGk9ci5fbmV4dFVpbnQzMigpO24uc3VwZXJjb21wcmVzc2lvblNjaGVtZT1yLl9uZXh0VWludDMyKCk7bGV0IHM9ci5fbmV4dFVpbnQzMigpLGY9ci5fbmV4dFVpbnQzMigpLHU9ci5fbmV4dFVpbnQzMigpLGM9ci5fbmV4dFVpbnQzMigpLGw9ci5fbmV4dFVpbnQ2NCgpLHA9ci5fbmV4dFVpbnQ2NCgpLGQ9aSozKjgsbT1uZXcgTWModCxqby5sZW5ndGgrbyxkLCEwKTtmb3IobGV0IFg9MDtYPGk7WCsrKW4ubGV2ZWxzLnB1c2goe2xldmVsRGF0YTpuZXcgVWludDhBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrbS5fbmV4dFVpbnQ2NCgpLG0uX25leHRVaW50NjQoKSksdW5jb21wcmVzc2VkQnl0ZUxlbmd0aDptLl9uZXh0VWludDY0KCl9KTtsZXQgXz1uZXcgTWModCxzLGYsITApLGc9e3ZlbmRvcklkOl8uX3NraXAoNCkuX25leHRVaW50MTYoKSxkZXNjcmlwdG9yVHlwZTpfLl9uZXh0VWludDE2KCksdmVyc2lvbk51bWJlcjpfLl9uZXh0VWludDE2KCksZGVzY3JpcHRvckJsb2NrU2l6ZTpfLl9uZXh0VWludDE2KCksY29sb3JNb2RlbDpfLl9uZXh0VWludDgoKSxjb2xvclByaW1hcmllczpfLl9uZXh0VWludDgoKSx0cmFuc2ZlckZ1bmN0aW9uOl8uX25leHRVaW50OCgpLGZsYWdzOl8uX25leHRVaW50OCgpLHRleGVsQmxvY2tEaW1lbnNpb246W18uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpXSxieXRlc1BsYW5lOltfLl9uZXh0VWludDgoKSxfLl9uZXh0VWludDgoKSxfLl9uZXh0VWludDgoKSxfLl9uZXh0VWludDgoKSxfLl9uZXh0VWludDgoKSxfLl9uZXh0VWludDgoKSxfLl9uZXh0VWludDgoKSxfLl9uZXh0VWludDgoKV0sc2FtcGxlczpbXX0sYj02LE89NCxUPShnLmRlc2NyaXB0b3JCbG9ja1NpemUvNC1iKS9PO2ZvcihsZXQgWD0wO1g8VDtYKyspe2xldCBSPXtiaXRPZmZzZXQ6Xy5fbmV4dFVpbnQxNigpLGJpdExlbmd0aDpfLl9uZXh0VWludDgoKSxjaGFubmVsVHlwZTpfLl9uZXh0VWludDgoKSxzYW1wbGVQb3NpdGlvbjpbXy5fbmV4dFVpbnQ4KCksXy5fbmV4dFVpbnQ4KCksXy5fbmV4dFVpbnQ4KCksXy5fbmV4dFVpbnQ4KCldLHNhbXBsZUxvd2VyOi0xLzAsc2FtcGxlVXBwZXI6MS8wfTtSLmNoYW5uZWxUeXBlJjY0PyhSLnNhbXBsZUxvd2VyPV8uX25leHRJbnQzMigpLFIuc2FtcGxlVXBwZXI9Xy5fbmV4dEludDMyKCkpOihSLnNhbXBsZUxvd2VyPV8uX25leHRVaW50MzIoKSxSLnNhbXBsZVVwcGVyPV8uX25leHRVaW50MzIoKSksZy5zYW1wbGVzW1hdPVJ9bi5kYXRhRm9ybWF0RGVzY3JpcHRvci5sZW5ndGg9MCxuLmRhdGFGb3JtYXREZXNjcmlwdG9yLnB1c2goZyk7bGV0IEU9bmV3IE1jKHQsdSxjLCEwKTtmb3IoO0UuX29mZnNldDxjOyl7bGV0IFg9RS5fbmV4dFVpbnQzMigpLFI9RS5fc2NhbihYKSxRPUNTKFIpO2lmKG4ua2V5VmFsdWVbUV09RS5fbmV4dFVpbnQ4QXJyYXkoWC1SLmJ5dGVMZW5ndGgtMSksUS5tYXRjaCgvXmt0eC9pKSl7bGV0IHB0PUNTKG4ua2V5VmFsdWVbUV0pO24ua2V5VmFsdWVbUV09cHQuc3Vic3RyaW5nKDAscHQubGFzdEluZGV4T2YoIlwwIikpfWxldCBmdD1YJTQ/NC1YJTQ6MDtFLl9za2lwKGZ0KX1pZihwPD0wKXJldHVybiBuO2xldCB3PW5ldyBNYyh0LGwscCwhMCksQz13Ll9uZXh0VWludDE2KCksTj13Ll9uZXh0VWludDE2KCksST13Ll9uZXh0VWludDMyKCksTD13Ll9uZXh0VWludDMyKCksdj13Ll9uZXh0VWludDMyKCksRD13Ll9uZXh0VWludDMyKCksVT1bXTtmb3IobGV0IFg9MDtYPGk7WCsrKVUucHVzaCh7aW1hZ2VGbGFnczp3Ll9uZXh0VWludDMyKCkscmdiU2xpY2VCeXRlT2Zmc2V0OncuX25leHRVaW50MzIoKSxyZ2JTbGljZUJ5dGVMZW5ndGg6dy5fbmV4dFVpbnQzMigpLGFscGhhU2xpY2VCeXRlT2Zmc2V0OncuX25leHRVaW50MzIoKSxhbHBoYVNsaWNlQnl0ZUxlbmd0aDp3Ll9uZXh0VWludDMyKCl9KTtsZXQgQT1sK3cuX29mZnNldCxTPUErSSxQPVMrTCxGPVArdixqPW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCtBLEkpLEg9bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsdC5ieXRlT2Zmc2V0K1MsTCksaz1uZXcgVWludDhBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrUCx2KSxLPW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCtGLEQpO3JldHVybiBuLmdsb2JhbERhdGE9e2VuZHBvaW50Q291bnQ6QyxzZWxlY3RvckNvdW50Ok4saW1hZ2VEZXNjczpVLGVuZHBvaW50c0RhdGE6aixzZWxlY3RvcnNEYXRhOkgsdGFibGVzRGF0YTprLGV4dGVuZGVkRGF0YTpLfSxufXZhciBIZyxNYyxIdXQsam8sUFM9WigoKT0+e0hnPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy52a0Zvcm1hdD0wLHRoaXMudHlwZVNpemU9MSx0aGlzLnBpeGVsV2lkdGg9MCx0aGlzLnBpeGVsSGVpZ2h0PTAsdGhpcy5waXhlbERlcHRoPTAsdGhpcy5sYXllckNvdW50PTAsdGhpcy5mYWNlQ291bnQ9MSx0aGlzLnN1cGVyY29tcHJlc3Npb25TY2hlbWU9MCx0aGlzLmxldmVscz1bXSx0aGlzLmRhdGFGb3JtYXREZXNjcmlwdG9yPVt7dmVuZG9ySWQ6MCxkZXNjcmlwdG9yVHlwZTowLGRlc2NyaXB0b3JCbG9ja1NpemU6MCx2ZXJzaW9uTnVtYmVyOjIsY29sb3JNb2RlbDowLGNvbG9yUHJpbWFyaWVzOjEsdHJhbnNmZXJGdW5jdGlvbjoyLGZsYWdzOjAsdGV4ZWxCbG9ja0RpbWVuc2lvbjpbMCwwLDAsMF0sYnl0ZXNQbGFuZTpbMCwwLDAsMCwwLDAsMCwwXSxzYW1wbGVzOltdfV0sdGhpcy5rZXlWYWx1ZT17fSx0aGlzLmdsb2JhbERhdGE9bnVsbH19LE1jPWNsYXNze2NvbnN0cnVjdG9yKGUsbixvLHIpe3RoaXMuX2RhdGFWaWV3PXZvaWQgMCx0aGlzLl9saXR0bGVFbmRpYW49dm9pZCAwLHRoaXMuX29mZnNldD12b2lkIDAsdGhpcy5fZGF0YVZpZXc9bmV3IERhdGFWaWV3KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCtuLG8pLHRoaXMuX2xpdHRsZUVuZGlhbj1yLHRoaXMuX29mZnNldD0wfV9uZXh0VWludDgoKXtsZXQgZT10aGlzLl9kYXRhVmlldy5nZXRVaW50OCh0aGlzLl9vZmZzZXQpO3JldHVybiB0aGlzLl9vZmZzZXQrPTEsZX1fbmV4dFVpbnQxNigpe2xldCBlPXRoaXMuX2RhdGFWaWV3LmdldFVpbnQxNih0aGlzLl9vZmZzZXQsdGhpcy5fbGl0dGxlRW5kaWFuKTtyZXR1cm4gdGhpcy5fb2Zmc2V0Kz0yLGV9X25leHRVaW50MzIoKXtsZXQgZT10aGlzLl9kYXRhVmlldy5nZXRVaW50MzIodGhpcy5fb2Zmc2V0LHRoaXMuX2xpdHRsZUVuZGlhbik7cmV0dXJuIHRoaXMuX29mZnNldCs9NCxlfV9uZXh0VWludDY0KCl7bGV0IGU9dGhpcy5fZGF0YVZpZXcuZ2V0VWludDMyKHRoaXMuX29mZnNldCx0aGlzLl9saXR0bGVFbmRpYW4pLG49dGhpcy5fZGF0YVZpZXcuZ2V0VWludDMyKHRoaXMuX29mZnNldCs0LHRoaXMuX2xpdHRsZUVuZGlhbiksbz1lKzIqKjMyKm47cmV0dXJuIHRoaXMuX29mZnNldCs9OCxvfV9uZXh0SW50MzIoKXtsZXQgZT10aGlzLl9kYXRhVmlldy5nZXRJbnQzMih0aGlzLl9vZmZzZXQsdGhpcy5fbGl0dGxlRW5kaWFuKTtyZXR1cm4gdGhpcy5fb2Zmc2V0Kz00LGV9X25leHRVaW50OEFycmF5KGUpe2xldCBuPW5ldyBVaW50OEFycmF5KHRoaXMuX2RhdGFWaWV3LmJ1ZmZlcix0aGlzLl9kYXRhVmlldy5ieXRlT2Zmc2V0K3RoaXMuX29mZnNldCxlKTtyZXR1cm4gdGhpcy5fb2Zmc2V0Kz1lLG59X3NraXAoZSl7cmV0dXJuIHRoaXMuX29mZnNldCs9ZSx0aGlzfV9zY2FuKGUsbj0wKXtsZXQgbz10aGlzLl9vZmZzZXQscj0wO2Zvcig7dGhpcy5fZGF0YVZpZXcuZ2V0VWludDgodGhpcy5fb2Zmc2V0KSE9PW4mJnI8ZTspcisrLHRoaXMuX29mZnNldCsrO3JldHVybiByPGUmJnRoaXMuX29mZnNldCsrLG5ldyBVaW50OEFycmF5KHRoaXMuX2RhdGFWaWV3LmJ1ZmZlcix0aGlzLl9kYXRhVmlldy5ieXRlT2Zmc2V0K28scil9fSxIdXQ9bmV3IFVpbnQ4QXJyYXkoWzBdKSxqbz1bMTcxLDc1LDg0LDg4LDMyLDUwLDQ4LDE4NywxMywxMCwyNiwxMF19KTt2YXIgTVM9VW4oKHBtLEtnKT0+e3ZhciBxZz1mdW5jdGlvbigpe3ZhciB0PXR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQ/ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM6dm9pZCAwO3JldHVybiB0eXBlb2YgX19maWxlbmFtZTwidSImJih0PXR8fF9fZmlsZW5hbWUpLGZ1bmN0aW9uKGUpe2U9ZXx8e307dmFyIG49dHlwZW9mIGU8InUiP2U6e30sbyxyO24ucmVhZHk9bmV3IFByb21pc2UoZnVuY3Rpb24oVixHKXtvPVYscj1HfSk7dmFyIGk9e30scztmb3IocyBpbiBuKW4uaGFzT3duUHJvcGVydHkocykmJihpW3NdPW5bc10pO3ZhciBmPVtdLHU9Ii4vdGhpcy5wcm9ncmFtIixjPWZ1bmN0aW9uKFYsRyl7dGhyb3cgR30sbD0hMSxwPSExLGQ9ITEsbT0hMTtsPXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiLHA9dHlwZW9mIGltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiIsZD10eXBlb2YgcHJvY2Vzcz09Im9iamVjdCImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zPT0ib2JqZWN0IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZT09InN0cmluZyIsbT0hbCYmIWQmJiFwO3ZhciBfPSIiO2Z1bmN0aW9uIGcoVil7cmV0dXJuIG4ubG9jYXRlRmlsZT9uLmxvY2F0ZUZpbGUoVixfKTpfK1Z9dmFyIGIsTyxULEUsdyxDO2Q/KHA/Xz1EbygicGF0aCIpLmRpcm5hbWUoXykrIi8iOl89X19kaXJuYW1lKyIvIixiPWZ1bmN0aW9uKEcsWSl7cmV0dXJuIHd8fCh3PURvKCJmcyIpKSxDfHwoQz1EbygicGF0aCIpKSxHPUMubm9ybWFsaXplKEcpLHcucmVhZEZpbGVTeW5jKEcsWT9udWxsOiJ1dGY4Iil9LFQ9ZnVuY3Rpb24oRyl7dmFyIFk9YihHLCEwKTtyZXR1cm4gWS5idWZmZXJ8fChZPW5ldyBVaW50OEFycmF5KFkpKSxGKFkuYnVmZmVyKSxZfSxwcm9jZXNzLmFyZ3YubGVuZ3RoPjEmJih1PXByb2Nlc3MuYXJndlsxXS5yZXBsYWNlKC9cXC9nLCIvIikpLGY9cHJvY2Vzcy5hcmd2LnNsaWNlKDIpLHByb2Nlc3Mub24oInVuY2F1Z2h0RXhjZXB0aW9uIixmdW5jdGlvbihWKXtpZighKFYgaW5zdGFuY2VvZiBUaSkpdGhyb3cgVn0pLHByb2Nlc3Mub24oInVuaGFuZGxlZFJlamVjdGlvbiIsS2UpLGM9ZnVuY3Rpb24oVil7cHJvY2Vzcy5leGl0KFYpfSxuLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4iW0Vtc2NyaXB0ZW4gTW9kdWxlIG9iamVjdF0ifSk6bT8odHlwZW9mIHJlYWQ8InUiJiYoYj1mdW5jdGlvbihHKXtyZXR1cm4gcmVhZChHKX0pLFQ9ZnVuY3Rpb24oRyl7dmFyIFk7cmV0dXJuIHR5cGVvZiByZWFkYnVmZmVyPT0iZnVuY3Rpb24iP25ldyBVaW50OEFycmF5KHJlYWRidWZmZXIoRykpOihZPXJlYWQoRywiYmluYXJ5IiksRih0eXBlb2YgWT09Im9iamVjdCIpLFkpfSx0eXBlb2Ygc2NyaXB0QXJnczwidSI/Zj1zY3JpcHRBcmdzOnR5cGVvZiBhcmd1bWVudHM8InUiJiYoZj1hcmd1bWVudHMpLHR5cGVvZiBxdWl0PT0iZnVuY3Rpb24iJiYoYz1mdW5jdGlvbihWKXtxdWl0KFYpfSksdHlwZW9mIHByaW50PCJ1IiYmKHR5cGVvZiBjb25zb2xlPiJ1IiYmKGNvbnNvbGU9e30pLGNvbnNvbGUubG9nPXByaW50LGNvbnNvbGUud2Fybj1jb25zb2xlLmVycm9yPXR5cGVvZiBwcmludEVycjwidSI/cHJpbnRFcnI6cHJpbnQpKToobHx8cCkmJihwP189c2VsZi5sb2NhdGlvbi5ocmVmOnR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQmJihfPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjKSx0JiYoXz10KSxfLmluZGV4T2YoImJsb2I6IikhPT0wP189Xy5zdWJzdHIoMCxfLmxhc3RJbmRleE9mKCIvIikrMSk6Xz0iIixiPWZ1bmN0aW9uKFYpe3ZhciBHPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gRy5vcGVuKCJHRVQiLFYsITEpLEcuc2VuZChudWxsKSxHLnJlc3BvbnNlVGV4dH0scCYmKFQ9ZnVuY3Rpb24oVil7dmFyIEc9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiBHLm9wZW4oIkdFVCIsViwhMSksRy5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixHLnNlbmQobnVsbCksbmV3IFVpbnQ4QXJyYXkoRy5yZXNwb25zZSl9KSxPPWZ1bmN0aW9uKFYsRyxZKXt2YXIgSj1uZXcgWE1MSHR0cFJlcXVlc3Q7Si5vcGVuKCJHRVQiLFYsITApLEoucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsSi5vbmxvYWQ9ZnVuY3Rpb24oKXtpZihKLnN0YXR1cz09MjAwfHxKLnN0YXR1cz09MCYmSi5yZXNwb25zZSl7RyhKLnJlc3BvbnNlKTtyZXR1cm59WSgpfSxKLm9uZXJyb3I9WSxKLnNlbmQobnVsbCl9LEU9ZnVuY3Rpb24oVil7ZG9jdW1lbnQudGl0bGU9Vn0pO3ZhciBOPW4ucHJpbnR8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksST1uLnByaW50RXJyfHxjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtmb3IocyBpbiBpKWkuaGFzT3duUHJvcGVydHkocykmJihuW3NdPWlbc10pO2k9bnVsbCxuLmFyZ3VtZW50cyYmKGY9bi5hcmd1bWVudHMpLG4udGhpc1Byb2dyYW0mJih1PW4udGhpc1Byb2dyYW0pLG4ucXVpdCYmKGM9bi5xdWl0KTt2YXIgTD0wLHY9ZnVuY3Rpb24oVil7TD1WfSxEO24ud2FzbUJpbmFyeSYmKEQ9bi53YXNtQmluYXJ5KTt2YXIgVT1uLm5vRXhpdFJ1bnRpbWV8fCEwO3R5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCImJktlKCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkIik7dmFyIEEsUz0hMSxQO2Z1bmN0aW9uIEYoVixHKXtWfHxLZSgiQXNzZXJ0aW9uIGZhaWxlZDogIitHKX12YXIgaj10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmOCIpOnZvaWQgMDtmdW5jdGlvbiBIKFYsRyxZKXtmb3IodmFyIEo9RytZLHV0PUc7Vlt1dF0mJiEodXQ+PUopOykrK3V0O2lmKHV0LUc+MTYmJlYuc3ViYXJyYXkmJmopcmV0dXJuIGouZGVjb2RlKFYuc3ViYXJyYXkoRyx1dCkpO2Zvcih2YXIgVHQ9IiI7Rzx1dDspe3ZhciBSdD1WW0crK107aWYoIShSdCYxMjgpKXtUdCs9U3RyaW5nLmZyb21DaGFyQ29kZShSdCk7Y29udGludWV9dmFyIG10PVZbRysrXSY2MztpZigoUnQmMjI0KT09MTkyKXtUdCs9U3RyaW5nLmZyb21DaGFyQ29kZSgoUnQmMzEpPDw2fG10KTtjb250aW51ZX12YXIgaHQ9VltHKytdJjYzO2lmKChSdCYyNDApPT0yMjQ/UnQ9KFJ0JjE1KTw8MTJ8bXQ8PDZ8aHQ6UnQ9KFJ0JjcpPDwxOHxtdDw8MTJ8aHQ8PDZ8VltHKytdJjYzLFJ0PDY1NTM2KVR0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKFJ0KTtlbHNle3ZhciBLdD1SdC02NTUzNjtUdCs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxLdD4+MTAsNTYzMjB8S3QmMTAyMyl9fXJldHVybiBUdH1mdW5jdGlvbiBrKFYsRyl7cmV0dXJuIFY/SChWdCxWLEcpOiIifWZ1bmN0aW9uIEsoVixHLFksSil7aWYoIShKPjApKXJldHVybiAwO2Zvcih2YXIgdXQ9WSxUdD1ZK0otMSxSdD0wO1J0PFYubGVuZ3RoOysrUnQpe3ZhciBtdD1WLmNoYXJDb2RlQXQoUnQpO2lmKG10Pj01NTI5NiYmbXQ8PTU3MzQzKXt2YXIgaHQ9Vi5jaGFyQ29kZUF0KCsrUnQpO210PTY1NTM2KygobXQmMTAyMyk8PDEwKXxodCYxMDIzfWlmKG10PD0xMjcpe2lmKFk+PVR0KWJyZWFrO0dbWSsrXT1tdH1lbHNlIGlmKG10PD0yMDQ3KXtpZihZKzE+PVR0KWJyZWFrO0dbWSsrXT0xOTJ8bXQ+PjYsR1tZKytdPTEyOHxtdCY2M31lbHNlIGlmKG10PD02NTUzNSl7aWYoWSsyPj1UdClicmVhaztHW1krK109MjI0fG10Pj4xMixHW1krK109MTI4fG10Pj42JjYzLEdbWSsrXT0xMjh8bXQmNjN9ZWxzZXtpZihZKzM+PVR0KWJyZWFrO0dbWSsrXT0yNDB8bXQ+PjE4LEdbWSsrXT0xMjh8bXQ+PjEyJjYzLEdbWSsrXT0xMjh8bXQ+PjYmNjMsR1tZKytdPTEyOHxtdCY2M319cmV0dXJuIEdbWV09MCxZLXV0fWZ1bmN0aW9uIFgoVixHLFkpe3JldHVybiBLKFYsVnQsRyxZKX1mdW5jdGlvbiBSKFYpe2Zvcih2YXIgRz0wLFk9MDtZPFYubGVuZ3RoOysrWSl7dmFyIEo9Vi5jaGFyQ29kZUF0KFkpO0o+PTU1Mjk2JiZKPD01NzM0MyYmKEo9NjU1MzYrKChKJjEwMjMpPDwxMCl8Vi5jaGFyQ29kZUF0KCsrWSkmMTAyMyksSjw9MTI3PysrRzpKPD0yMDQ3P0crPTI6Sjw9NjU1MzU/Rys9MzpHKz00fXJldHVybiBHfXZhciBRPXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCJ1dGYtMTZsZSIpOnZvaWQgMDtmdW5jdGlvbiBmdChWLEcpe2Zvcih2YXIgWT1WLEo9WT4+MSx1dD1KK0cvMjshKEo+PXV0KSYmaGVbSl07KSsrSjtpZihZPUo8PDEsWS1WPjMyJiZRKXJldHVybiBRLmRlY29kZShWdC5zdWJhcnJheShWLFkpKTtmb3IodmFyIFR0PSIiLFJ0PTA7IShSdD49Ry8yKTsrK1J0KXt2YXIgbXQ9enRbVitSdCoyPj4xXTtpZihtdD09MClicmVhaztUdCs9U3RyaW5nLmZyb21DaGFyQ29kZShtdCl9cmV0dXJuIFR0fWZ1bmN0aW9uIHB0KFYsRyxZKXtpZihZPT09dm9pZCAwJiYoWT0yMTQ3NDgzNjQ3KSxZPDIpcmV0dXJuIDA7WS09Mjtmb3IodmFyIEo9Ryx1dD1ZPFYubGVuZ3RoKjI/WS8yOlYubGVuZ3RoLFR0PTA7VHQ8dXQ7KytUdCl7dmFyIFJ0PVYuY2hhckNvZGVBdChUdCk7enRbRz4+MV09UnQsRys9Mn1yZXR1cm4genRbRz4+MV09MCxHLUp9ZnVuY3Rpb24gZ3QoVil7cmV0dXJuIFYubGVuZ3RoKjJ9ZnVuY3Rpb24gaXQoVixHKXtmb3IodmFyIFk9MCxKPSIiOyEoWT49Ry80KTspe3ZhciB1dD1jZVtWK1kqND4+Ml07aWYodXQ9PTApYnJlYWs7aWYoKytZLHV0Pj02NTUzNil7dmFyIFR0PXV0LTY1NTM2O0orPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8VHQ+PjEwLDU2MzIwfFR0JjEwMjMpfWVsc2UgSis9U3RyaW5nLmZyb21DaGFyQ29kZSh1dCl9cmV0dXJuIEp9ZnVuY3Rpb24gTnQoVixHLFkpe2lmKFk9PT12b2lkIDAmJihZPTIxNDc0ODM2NDcpLFk8NClyZXR1cm4gMDtmb3IodmFyIEo9Ryx1dD1KK1ktNCxUdD0wO1R0PFYubGVuZ3RoOysrVHQpe3ZhciBSdD1WLmNoYXJDb2RlQXQoVHQpO2lmKFJ0Pj01NTI5NiYmUnQ8PTU3MzQzKXt2YXIgbXQ9Vi5jaGFyQ29kZUF0KCsrVHQpO1J0PTY1NTM2KygoUnQmMTAyMyk8PDEwKXxtdCYxMDIzfWlmKGNlW0c+PjJdPVJ0LEcrPTQsRys0PnV0KWJyZWFrfXJldHVybiBjZVtHPj4yXT0wLEctSn1mdW5jdGlvbiBPdChWKXtmb3IodmFyIEc9MCxZPTA7WTxWLmxlbmd0aDsrK1kpe3ZhciBKPVYuY2hhckNvZGVBdChZKTtKPj01NTI5NiYmSjw9NTczNDMmJisrWSxHKz00fXJldHVybiBHfWZ1bmN0aW9uIHh0KFYsRyl7cmV0dXJuIFYlRz4wJiYoVis9Ry1WJUcpLFZ9dmFyIF90LGR0LFZ0LHp0LGhlLGNlLHBlLGZlLFF0O2Z1bmN0aW9uIEp0KFYpe190PVYsbi5IRUFQOD1kdD1uZXcgSW50OEFycmF5KFYpLG4uSEVBUDE2PXp0PW5ldyBJbnQxNkFycmF5KFYpLG4uSEVBUDMyPWNlPW5ldyBJbnQzMkFycmF5KFYpLG4uSEVBUFU4PVZ0PW5ldyBVaW50OEFycmF5KFYpLG4uSEVBUFUxNj1oZT1uZXcgVWludDE2QXJyYXkoViksbi5IRUFQVTMyPXBlPW5ldyBVaW50MzJBcnJheShWKSxuLkhFQVBGMzI9ZmU9bmV3IEZsb2F0MzJBcnJheShWKSxuLkhFQVBGNjQ9UXQ9bmV3IEZsb2F0NjRBcnJheShWKX12YXIgeGU9bi5JTklUSUFMX01FTU9SWXx8MTY3NzcyMTYsQWUsRWU9W10sdW49W10sVWU9W10sYmU9W10sbG49ITE7ZnVuY3Rpb24gcG4oKXtpZihuLnByZVJ1bilmb3IodHlwZW9mIG4ucHJlUnVuPT0iZnVuY3Rpb24iJiYobi5wcmVSdW49W24ucHJlUnVuXSk7bi5wcmVSdW4ubGVuZ3RoOylWZShuLnByZVJ1bi5zaGlmdCgpKTtxbyhFZSl9ZnVuY3Rpb24gVG4oKXtsbj0hMCxxbyh1bil9ZnVuY3Rpb24gb2UoKXtxbyhVZSl9ZnVuY3Rpb24gJHQoKXtpZihuLnBvc3RSdW4pZm9yKHR5cGVvZiBuLnBvc3RSdW49PSJmdW5jdGlvbiImJihuLnBvc3RSdW49W24ucG9zdFJ1bl0pO24ucG9zdFJ1bi5sZW5ndGg7KXNuKG4ucG9zdFJ1bi5zaGlmdCgpKTtxbyhiZSl9ZnVuY3Rpb24gVmUoVil7RWUudW5zaGlmdChWKX1mdW5jdGlvbiBkbihWKXt1bi51bnNoaWZ0KFYpfWZ1bmN0aW9uIHNuKFYpe2JlLnVuc2hpZnQoVil9dmFyIG1uPTAsZm89bnVsbCxIbj1udWxsO2Z1bmN0aW9uIFplKFYpe21uKyssbi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZuLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMobW4pfWZ1bmN0aW9uIGNuKFYpe2lmKG1uLS0sbi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZuLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMobW4pLG1uPT0wJiYoZm8hPT1udWxsJiYoY2xlYXJJbnRlcnZhbChmbyksZm89bnVsbCksSG4pKXt2YXIgRz1IbjtIbj1udWxsLEcoKX19bi5wcmVsb2FkZWRJbWFnZXM9e30sbi5wcmVsb2FkZWRBdWRpb3M9e307ZnVuY3Rpb24gS2UoVil7bi5vbkFib3J0JiZuLm9uQWJvcnQoViksVis9IiIsSShWKSxTPSEwLFA9MSxWPSJhYm9ydCgiK1YrIikuIEJ1aWxkIHdpdGggLXMgQVNTRVJUSU9OUz0xIGZvciBtb3JlIGluZm8uIjt2YXIgRz1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKFYpO3Rocm93IHIoRyksR31mdW5jdGlvbiBobihWLEcpe3JldHVybiBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGg/Vi5zdGFydHNXaXRoKEcpOlYuaW5kZXhPZihHKT09PTB9dmFyIHVvPSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIjtmdW5jdGlvbiBxbihWKXtyZXR1cm4gaG4oVix1byl9dmFyIEtuPSJmaWxlOi8vIjtmdW5jdGlvbiBsbyhWKXtyZXR1cm4gaG4oVixLbil9dmFyIGtlPSJiYXNpc190cmFuc2NvZGVyLndhc20iO3FuKGtlKXx8KGtlPWcoa2UpKTtmdW5jdGlvbiBOZShWKXt0cnl7aWYoVj09a2UmJkQpcmV0dXJuIG5ldyBVaW50OEFycmF5KEQpO2lmKFQpcmV0dXJuIFQoVik7dGhyb3ciYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifWNhdGNoKEcpe0tlKEcpfX1mdW5jdGlvbiBEbigpe2lmKCFEJiYobHx8cCkpe2lmKHR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIiYmIWxvKGtlKSlyZXR1cm4gZmV0Y2goa2Use2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKFYpe2lmKCFWLm9rKXRocm93ImZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJyIra2UrIiciO3JldHVybiBWLmFycmF5QnVmZmVyKCl9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiBOZShrZSl9KTtpZihPKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihWLEcpe08oa2UsZnVuY3Rpb24oWSl7VihuZXcgVWludDhBcnJheShZKSl9LEcpfSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gTmUoa2UpfSl9ZnVuY3Rpb24gV24oKXt2YXIgVj17YTpGbH07ZnVuY3Rpb24gRyhSdCxtdCl7dmFyIGh0PVJ0LmV4cG9ydHM7bi5hc209aHQsQT1uLmFzbS5LLEp0KEEuYnVmZmVyKSxBZT1uLmFzbS5PLGRuKG4uYXNtLkwpLGNuKCJ3YXNtLWluc3RhbnRpYXRlIil9WmUoIndhc20taW5zdGFudGlhdGUiKTtmdW5jdGlvbiBZKFJ0KXtHKFJ0Lmluc3RhbmNlKX1mdW5jdGlvbiBKKFJ0KXtyZXR1cm4gRG4oKS50aGVuKGZ1bmN0aW9uKG10KXt2YXIgaHQ9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUobXQsVik7cmV0dXJuIGh0fSkudGhlbihSdCxmdW5jdGlvbihtdCl7SSgiZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogIittdCksS2UobXQpfSl9ZnVuY3Rpb24gdXQoKXtyZXR1cm4hRCYmdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nPT0iZnVuY3Rpb24iJiYhcW4oa2UpJiYhbG8oa2UpJiZ0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiI/ZmV0Y2goa2Use2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKFJ0KXt2YXIgbXQ9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcoUnQsVik7cmV0dXJuIG10LnRoZW4oWSxmdW5jdGlvbihodCl7cmV0dXJuIEkoIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAiK2h0KSxJKCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiIpLEooWSl9KX0pOkooWSl9aWYobi5pbnN0YW50aWF0ZVdhc20pdHJ5e3ZhciBUdD1uLmluc3RhbnRpYXRlV2FzbShWLEcpO3JldHVybiBUdH1jYXRjaChSdCl7cmV0dXJuIEkoIk1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICIrUnQpLCExfXJldHVybiB1dCgpLmNhdGNoKHIpLHt9fWZ1bmN0aW9uIHFvKFYpe2Zvcig7Vi5sZW5ndGg+MDspe3ZhciBHPVYuc2hpZnQoKTtpZih0eXBlb2YgRz09ImZ1bmN0aW9uIil7RyhuKTtjb250aW51ZX12YXIgWT1HLmZ1bmM7dHlwZW9mIFk9PSJudW1iZXIiP0cuYXJnPT09dm9pZCAwP0FlLmdldChZKSgpOkFlLmdldChZKShHLmFyZyk6WShHLmFyZz09PXZvaWQgMD9udWxsOkcuYXJnKX19dmFyIHJuPXt9O2Z1bmN0aW9uIE9uKFYpe2Zvcig7Vi5sZW5ndGg7KXt2YXIgRz1WLnBvcCgpLFk9Vi5wb3AoKTtZKEcpfX1mdW5jdGlvbiB1cihWKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUocGVbVj4+Ml0pfXZhciBabj17fSxLbz17fSxOcj17fSxNcz00OCxOcz01NztmdW5jdGlvbiBYaShWKXtpZihWPT09dm9pZCAwKXJldHVybiJfdW5rbm93biI7Vj1WLnJlcGxhY2UoL1teYS16QS1aMC05X10vZywiJCIpO3ZhciBHPVYuY2hhckNvZGVBdCgwKTtyZXR1cm4gRz49TXMmJkc8PU5zPyJfIitWOlZ9ZnVuY3Rpb24gSXIoVixHKXtyZXR1cm4gVj1YaShWKSxuZXcgRnVuY3Rpb24oImJvZHkiLCJyZXR1cm4gZnVuY3Rpb24gIitWK2AoKSB7CiAgICAidXNlIHN0cmljdCI7ICAgIHJldHVybiBib2R5LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Cn07CmApKEcpfWZ1bmN0aW9uIFlpKFYsRyl7dmFyIFk9SXIoRyxmdW5jdGlvbihKKXt0aGlzLm5hbWU9Ryx0aGlzLm1lc3NhZ2U9Sjt2YXIgdXQ9bmV3IEVycm9yKEopLnN0YWNrO3V0IT09dm9pZCAwJiYodGhpcy5zdGFjaz10aGlzLnRvU3RyaW5nKCkrYApgK3V0LnJlcGxhY2UoL15FcnJvcig6W15cbl0qKT9cbi8sIiIpKX0pO3JldHVybiBZLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFYucHJvdG90eXBlKSxZLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ZLFkucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZT09PXZvaWQgMD90aGlzLm5hbWU6dGhpcy5uYW1lKyI6ICIrdGhpcy5tZXNzYWdlfSxZfXZhciBJcz12b2lkIDA7ZnVuY3Rpb24gQWkoVil7dGhyb3cgbmV3IElzKFYpfWZ1bmN0aW9uIG5vKFYsRyxZKXtWLmZvckVhY2goZnVuY3Rpb24obXQpe05yW210XT1HfSk7ZnVuY3Rpb24gSihtdCl7dmFyIGh0PVkobXQpO2h0Lmxlbmd0aCE9PVYubGVuZ3RoJiZBaSgiTWlzbWF0Y2hlZCB0eXBlIGNvbnZlcnRlciBjb3VudCIpO2Zvcih2YXIgS3Q9MDtLdDxWLmxlbmd0aDsrK0t0KXJyKFZbS3RdLGh0W0t0XSl9dmFyIHV0PW5ldyBBcnJheShHLmxlbmd0aCksVHQ9W10sUnQ9MDtHLmZvckVhY2goZnVuY3Rpb24obXQsaHQpe0tvLmhhc093blByb3BlcnR5KG10KT91dFtodF09S29bbXRdOihUdC5wdXNoKG10KSxabi5oYXNPd25Qcm9wZXJ0eShtdCl8fChablttdF09W10pLFpuW210XS5wdXNoKGZ1bmN0aW9uKCl7dXRbaHRdPUtvW210XSwrK1J0LFJ0PT09VHQubGVuZ3RoJiZKKHV0KX0pKX0pLFR0Lmxlbmd0aD09PTAmJkoodXQpfWZ1bmN0aW9uIHBvKFYpe3ZhciBHPXJuW1ZdO2RlbGV0ZSBybltWXTt2YXIgWT1HLnJhd0NvbnN0cnVjdG9yLEo9Ry5yYXdEZXN0cnVjdG9yLHV0PUcuZmllbGRzLFR0PXV0Lm1hcChmdW5jdGlvbihSdCl7cmV0dXJuIFJ0LmdldHRlclJldHVyblR5cGV9KS5jb25jYXQodXQubWFwKGZ1bmN0aW9uKFJ0KXtyZXR1cm4gUnQuc2V0dGVyQXJndW1lbnRUeXBlfSkpO25vKFtWXSxUdCxmdW5jdGlvbihSdCl7dmFyIG10PXt9O3JldHVybiB1dC5mb3JFYWNoKGZ1bmN0aW9uKGh0LEt0KXt2YXIgdGU9aHQuZmllbGROYW1lLFRlPVJ0W0t0XSxKZT1odC5nZXR0ZXIsZ249aHQuZ2V0dGVyQ29udGV4dCxvbz1SdFtLdCt1dC5sZW5ndGhdLHZvPWh0LnNldHRlcixkcj1odC5zZXR0ZXJDb250ZXh0O210W3RlXT17cmVhZDpmdW5jdGlvbihacil7cmV0dXJuIFRlLmZyb21XaXJlVHlwZShKZShnbixacikpfSx3cml0ZTpmdW5jdGlvbihacixzZil7dmFyIE9pPVtdO3ZvKGRyLFpyLG9vLnRvV2lyZVR5cGUoT2ksc2YpKSxPbihPaSl9fX0pLFt7bmFtZTpHLm5hbWUsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKGh0KXt2YXIgS3Q9e307Zm9yKHZhciB0ZSBpbiBtdClLdFt0ZV09bXRbdGVdLnJlYWQoaHQpO3JldHVybiBKKGh0KSxLdH0sdG9XaXJlVHlwZTpmdW5jdGlvbihodCxLdCl7Zm9yKHZhciB0ZSBpbiBtdClpZighKHRlIGluIEt0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCdNaXNzaW5nIGZpZWxkOiAgIicrdGUrJyInKTt2YXIgVGU9WSgpO2Zvcih0ZSBpbiBtdCltdFt0ZV0ud3JpdGUoVGUsS3RbdGVdKTtyZXR1cm4gaHQhPT1udWxsJiZodC5wdXNoKEosVGUpLFRlfSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOnVyLGRlc3RydWN0b3JGdW5jdGlvbjpKfV19KX1mdW5jdGlvbiB2cihWKXtzd2l0Y2goVil7Y2FzZSAxOnJldHVybiAwO2Nhc2UgMjpyZXR1cm4gMTtjYXNlIDQ6cmV0dXJuIDI7Y2FzZSA4OnJldHVybiAzO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biB0eXBlIHNpemU6ICIrVil9fWZ1bmN0aW9uIE5jKCl7Zm9yKHZhciBWPW5ldyBBcnJheSgyNTYpLEc9MDtHPDI1NjsrK0cpVltHXT1TdHJpbmcuZnJvbUNoYXJDb2RlKEcpO0ljPVZ9dmFyIEljPXZvaWQgMDtmdW5jdGlvbiBMbihWKXtmb3IodmFyIEc9IiIsWT1WO1Z0W1ldOylHKz1JY1tWdFtZKytdXTtyZXR1cm4gR312YXIgYmk9dm9pZCAwO2Z1bmN0aW9uIEllKFYpe3Rocm93IG5ldyBiaShWKX1mdW5jdGlvbiBycihWLEcsWSl7aWYoWT1ZfHx7fSwhKCJhcmdQYWNrQWR2YW5jZSJpbiBHKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWdpc3RlclR5cGUgcmVnaXN0ZXJlZEluc3RhbmNlIHJlcXVpcmVzIGFyZ1BhY2tBZHZhbmNlIik7dmFyIEo9Ry5uYW1lO2lmKFZ8fEllKCd0eXBlICInK0orJyIgbXVzdCBoYXZlIGEgcG9zaXRpdmUgaW50ZWdlciB0eXBlaWQgcG9pbnRlcicpLEtvLmhhc093blByb3BlcnR5KFYpKXtpZihZLmlnbm9yZUR1cGxpY2F0ZVJlZ2lzdHJhdGlvbnMpcmV0dXJuO0llKCJDYW5ub3QgcmVnaXN0ZXIgdHlwZSAnIitKKyInIHR3aWNlIil9aWYoS29bVl09RyxkZWxldGUgTnJbVl0sWm4uaGFzT3duUHJvcGVydHkoVikpe3ZhciB1dD1abltWXTtkZWxldGUgWm5bVl0sdXQuZm9yRWFjaChmdW5jdGlvbihUdCl7VHQoKX0pfX1mdW5jdGlvbiBBdShWLEcsWSxKLHV0KXt2YXIgVHQ9dnIoWSk7Rz1MbihHKSxycihWLHtuYW1lOkcsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKFJ0KXtyZXR1cm4hIVJ0fSx0b1dpcmVUeXBlOmZ1bmN0aW9uKFJ0LG10KXtyZXR1cm4gbXQ/Sjp1dH0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpmdW5jdGlvbihSdCl7dmFyIG10O2lmKFk9PT0xKW10PWR0O2Vsc2UgaWYoWT09PTIpbXQ9enQ7ZWxzZSBpZihZPT09NCltdD1jZTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gYm9vbGVhbiB0eXBlIHNpemU6ICIrRyk7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKG10W1J0Pj5UdF0pfSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfWZ1bmN0aW9uIGJ1KFYpe2lmKCEodGhpcyBpbnN0YW5jZW9mIERyKXx8IShWIGluc3RhbmNlb2YgRHIpKXJldHVybiExO2Zvcih2YXIgRz10aGlzLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLFk9dGhpcy4kJC5wdHIsSj1WLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLHV0PVYuJCQucHRyO0cuYmFzZUNsYXNzOylZPUcudXBjYXN0KFkpLEc9Ry5iYXNlQ2xhc3M7Zm9yKDtKLmJhc2VDbGFzczspdXQ9Si51cGNhc3QodXQpLEo9Si5iYXNlQ2xhc3M7cmV0dXJuIEc9PT1KJiZZPT09dXR9ZnVuY3Rpb24gd3UoVil7cmV0dXJue2NvdW50OlYuY291bnQsZGVsZXRlU2NoZWR1bGVkOlYuZGVsZXRlU2NoZWR1bGVkLHByZXNlcnZlUG9pbnRlck9uRGVsZXRlOlYucHJlc2VydmVQb2ludGVyT25EZWxldGUscHRyOlYucHRyLHB0clR5cGU6Vi5wdHJUeXBlLHNtYXJ0UHRyOlYuc21hcnRQdHIsc21hcnRQdHJUeXBlOlYuc21hcnRQdHJUeXBlfX1mdW5jdGlvbiB2YyhWKXtmdW5jdGlvbiBHKFkpe3JldHVybiBZLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLm5hbWV9SWUoRyhWKSsiIGluc3RhbmNlIGFscmVhZHkgZGVsZXRlZCIpfXZhciBEYz0hMTtmdW5jdGlvbiBLYShWKXt9ZnVuY3Rpb24gVHUoVil7Vi5zbWFydFB0cj9WLnNtYXJ0UHRyVHlwZS5yYXdEZXN0cnVjdG9yKFYuc21hcnRQdHIpOlYucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MucmF3RGVzdHJ1Y3RvcihWLnB0cil9ZnVuY3Rpb24gV2EoVil7Vi5jb3VudC52YWx1ZS09MTt2YXIgRz1WLmNvdW50LnZhbHVlPT09MDtHJiZUdShWKX1mdW5jdGlvbiAkaShWKXtyZXR1cm4gdHlwZW9mIEZpbmFsaXphdGlvbkdyb3VwPiJ1Ij8oJGk9ZnVuY3Rpb24oRyl7cmV0dXJuIEd9LFYpOihEYz1uZXcgRmluYWxpemF0aW9uR3JvdXAoZnVuY3Rpb24oRyl7Zm9yKHZhciBZPUcubmV4dCgpOyFZLmRvbmU7WT1HLm5leHQoKSl7dmFyIEo9WS52YWx1ZTtKLnB0cj9XYShKKTpjb25zb2xlLndhcm4oIm9iamVjdCBhbHJlYWR5IGRlbGV0ZWQ6ICIrSi5wdHIpfX0pLCRpPWZ1bmN0aW9uKEcpe3JldHVybiBEYy5yZWdpc3RlcihHLEcuJCQsRy4kJCksR30sS2E9ZnVuY3Rpb24oRyl7RGMudW5yZWdpc3RlcihHLiQkKX0sJGkoVikpfWZ1bmN0aW9uIE91KCl7aWYodGhpcy4kJC5wdHJ8fHZjKHRoaXMpLHRoaXMuJCQucHJlc2VydmVQb2ludGVyT25EZWxldGUpcmV0dXJuIHRoaXMuJCQuY291bnQudmFsdWUrPTEsdGhpczt2YXIgVj0kaShPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSx7JCQ6e3ZhbHVlOnd1KHRoaXMuJCQpfX0pKTtyZXR1cm4gVi4kJC5jb3VudC52YWx1ZSs9MSxWLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMSxWfWZ1bmN0aW9uIEV1KCl7dGhpcy4kJC5wdHJ8fHZjKHRoaXMpLHRoaXMuJCQuZGVsZXRlU2NoZWR1bGVkJiYhdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSYmSWUoIk9iamVjdCBhbHJlYWR5IHNjaGVkdWxlZCBmb3IgZGVsZXRpb24iKSxLYSh0aGlzKSxXYSh0aGlzLiQkKSx0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlfHwodGhpcy4kJC5zbWFydFB0cj12b2lkIDAsdGhpcy4kJC5wdHI9dm9pZCAwKX1mdW5jdGlvbiBSdSgpe3JldHVybiF0aGlzLiQkLnB0cn12YXIgWmk9dm9pZCAwLFFpPVtdO2Z1bmN0aW9uIExjKCl7Zm9yKDtRaS5sZW5ndGg7KXt2YXIgVj1RaS5wb3AoKTtWLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMSxWLmRlbGV0ZSgpfX1mdW5jdGlvbiBTdSgpe3JldHVybiB0aGlzLiQkLnB0cnx8dmModGhpcyksdGhpcy4kJC5kZWxldGVTY2hlZHVsZWQmJiF0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlJiZJZSgiT2JqZWN0IGFscmVhZHkgc2NoZWR1bGVkIGZvciBkZWxldGlvbiIpLFFpLnB1c2godGhpcyksUWkubGVuZ3RoPT09MSYmWmkmJlppKExjKSx0aGlzLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMCx0aGlzfWZ1bmN0aW9uIEN1KCl7RHIucHJvdG90eXBlLmlzQWxpYXNPZj1idSxEci5wcm90b3R5cGUuY2xvbmU9T3UsRHIucHJvdG90eXBlLmRlbGV0ZT1FdSxEci5wcm90b3R5cGUuaXNEZWxldGVkPVJ1LERyLnByb3RvdHlwZS5kZWxldGVMYXRlcj1TdX1mdW5jdGlvbiBEcigpe312YXIgWGE9e307ZnVuY3Rpb24gWWEoVixHLFkpe2lmKFZbR10ub3ZlcmxvYWRUYWJsZT09PXZvaWQgMCl7dmFyIEo9VltHXTtWW0ddPWZ1bmN0aW9uKCl7cmV0dXJuIFZbR10ub3ZlcmxvYWRUYWJsZS5oYXNPd25Qcm9wZXJ0eShhcmd1bWVudHMubGVuZ3RoKXx8SWUoIkZ1bmN0aW9uICciK1krIicgY2FsbGVkIHdpdGggYW4gaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzICgiK2FyZ3VtZW50cy5sZW5ndGgrIikgLSBleHBlY3RzIG9uZSBvZiAoIitWW0ddLm92ZXJsb2FkVGFibGUrIikhIiksVltHXS5vdmVybG9hZFRhYmxlW2FyZ3VtZW50cy5sZW5ndGhdLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sVltHXS5vdmVybG9hZFRhYmxlPVtdLFZbR10ub3ZlcmxvYWRUYWJsZVtKLmFyZ0NvdW50XT1KfX1mdW5jdGlvbiBGYyhWLEcsWSl7bi5oYXNPd25Qcm9wZXJ0eShWKT8oKFk9PT12b2lkIDB8fG5bVl0ub3ZlcmxvYWRUYWJsZSE9PXZvaWQgMCYmbltWXS5vdmVybG9hZFRhYmxlW1ldIT09dm9pZCAwKSYmSWUoIkNhbm5vdCByZWdpc3RlciBwdWJsaWMgbmFtZSAnIitWKyInIHR3aWNlIiksWWEobixWLFYpLG4uaGFzT3duUHJvcGVydHkoWSkmJkllKCJDYW5ub3QgcmVnaXN0ZXIgbXVsdGlwbGUgb3ZlcmxvYWRzIG9mIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgYXJndW1lbnRzICgiK1krIikhIiksbltWXS5vdmVybG9hZFRhYmxlW1ldPUcpOihuW1ZdPUcsWSE9PXZvaWQgMCYmKG5bVl0ubnVtQXJndW1lbnRzPVkpKX1mdW5jdGlvbiB4dShWLEcsWSxKLHV0LFR0LFJ0LG10KXt0aGlzLm5hbWU9Vix0aGlzLmNvbnN0cnVjdG9yPUcsdGhpcy5pbnN0YW5jZVByb3RvdHlwZT1ZLHRoaXMucmF3RGVzdHJ1Y3Rvcj1KLHRoaXMuYmFzZUNsYXNzPXV0LHRoaXMuZ2V0QWN0dWFsVHlwZT1UdCx0aGlzLnVwY2FzdD1SdCx0aGlzLmRvd25jYXN0PW10LHRoaXMucHVyZVZpcnR1YWxGdW5jdGlvbnM9W119ZnVuY3Rpb24gQmMoVixHLFkpe2Zvcig7RyE9PVk7KUcudXBjYXN0fHxJZSgiRXhwZWN0ZWQgbnVsbCBvciBpbnN0YW5jZSBvZiAiK1kubmFtZSsiLCBnb3QgYW4gaW5zdGFuY2Ugb2YgIitHLm5hbWUpLFY9Ry51cGNhc3QoViksRz1HLmJhc2VDbGFzcztyZXR1cm4gVn1mdW5jdGlvbiBQdShWLEcpe2lmKEc9PT1udWxsKXJldHVybiB0aGlzLmlzUmVmZXJlbmNlJiZJZSgibnVsbCBpcyBub3QgYSB2YWxpZCAiK3RoaXMubmFtZSksMDtHLiQkfHxJZSgnQ2Fubm90IHBhc3MgIicrd2koRykrJyIgYXMgYSAnK3RoaXMubmFtZSksRy4kJC5wdHJ8fEllKCJDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAiK3RoaXMubmFtZSk7dmFyIFk9Ry4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyxKPUJjKEcuJCQucHRyLFksdGhpcy5yZWdpc3RlcmVkQ2xhc3MpO3JldHVybiBKfWZ1bmN0aW9uIE11KFYsRyl7dmFyIFk7aWYoRz09PW51bGwpcmV0dXJuIHRoaXMuaXNSZWZlcmVuY2UmJkllKCJudWxsIGlzIG5vdCBhIHZhbGlkICIrdGhpcy5uYW1lKSx0aGlzLmlzU21hcnRQb2ludGVyPyhZPXRoaXMucmF3Q29uc3RydWN0b3IoKSxWIT09bnVsbCYmVi5wdXNoKHRoaXMucmF3RGVzdHJ1Y3RvcixZKSxZKTowO0cuJCR8fEllKCdDYW5ub3QgcGFzcyAiJyt3aShHKSsnIiBhcyBhICcrdGhpcy5uYW1lKSxHLiQkLnB0cnx8SWUoIkNhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICIrdGhpcy5uYW1lKSwhdGhpcy5pc0NvbnN0JiZHLiQkLnB0clR5cGUuaXNDb25zdCYmSWUoIkNhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgIisoRy4kJC5zbWFydFB0clR5cGU/Ry4kJC5zbWFydFB0clR5cGUubmFtZTpHLiQkLnB0clR5cGUubmFtZSkrIiB0byBwYXJhbWV0ZXIgdHlwZSAiK3RoaXMubmFtZSk7dmFyIEo9Ry4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcztpZihZPUJjKEcuJCQucHRyLEosdGhpcy5yZWdpc3RlcmVkQ2xhc3MpLHRoaXMuaXNTbWFydFBvaW50ZXIpc3dpdGNoKEcuJCQuc21hcnRQdHI9PT12b2lkIDAmJkllKCJQYXNzaW5nIHJhdyBwb2ludGVyIHRvIHNtYXJ0IHBvaW50ZXIgaXMgaWxsZWdhbCIpLHRoaXMuc2hhcmluZ1BvbGljeSl7Y2FzZSAwOkcuJCQuc21hcnRQdHJUeXBlPT09dGhpcz9ZPUcuJCQuc21hcnRQdHI6SWUoIkNhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgIisoRy4kJC5zbWFydFB0clR5cGU/Ry4kJC5zbWFydFB0clR5cGUubmFtZTpHLiQkLnB0clR5cGUubmFtZSkrIiB0byBwYXJhbWV0ZXIgdHlwZSAiK3RoaXMubmFtZSk7YnJlYWs7Y2FzZSAxOlk9Ry4kJC5zbWFydFB0cjticmVhaztjYXNlIDI6aWYoRy4kJC5zbWFydFB0clR5cGU9PT10aGlzKVk9Ry4kJC5zbWFydFB0cjtlbHNle3ZhciB1dD1HLmNsb25lKCk7WT10aGlzLnJhd1NoYXJlKFkscHIoZnVuY3Rpb24oKXt1dC5kZWxldGUoKX0pKSxWIT09bnVsbCYmVi5wdXNoKHRoaXMucmF3RGVzdHJ1Y3RvcixZKX1icmVhaztkZWZhdWx0OkllKCJVbnN1cHBvcnRpbmcgc2hhcmluZyBwb2xpY3kiKX1yZXR1cm4gWX1mdW5jdGlvbiBOdShWLEcpe2lmKEc9PT1udWxsKXJldHVybiB0aGlzLmlzUmVmZXJlbmNlJiZJZSgibnVsbCBpcyBub3QgYSB2YWxpZCAiK3RoaXMubmFtZSksMDtHLiQkfHxJZSgnQ2Fubm90IHBhc3MgIicrd2koRykrJyIgYXMgYSAnK3RoaXMubmFtZSksRy4kJC5wdHJ8fEllKCJDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAiK3RoaXMubmFtZSksRy4kJC5wdHJUeXBlLmlzQ29uc3QmJkllKCJDYW5ub3QgY29udmVydCBhcmd1bWVudCBvZiB0eXBlICIrRy4kJC5wdHJUeXBlLm5hbWUrIiB0byBwYXJhbWV0ZXIgdHlwZSAiK3RoaXMubmFtZSk7dmFyIFk9Ry4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyxKPUJjKEcuJCQucHRyLFksdGhpcy5yZWdpc3RlcmVkQ2xhc3MpO3JldHVybiBKfWZ1bmN0aW9uIEl1KFYpe3JldHVybiB0aGlzLnJhd0dldFBvaW50ZWUmJihWPXRoaXMucmF3R2V0UG9pbnRlZShWKSksVn1mdW5jdGlvbiB2dShWKXt0aGlzLnJhd0Rlc3RydWN0b3ImJnRoaXMucmF3RGVzdHJ1Y3RvcihWKX1mdW5jdGlvbiBEdShWKXtWIT09bnVsbCYmVi5kZWxldGUoKX1mdW5jdGlvbiAkYShWLEcsWSl7aWYoRz09PVkpcmV0dXJuIFY7aWYoWS5iYXNlQ2xhc3M9PT12b2lkIDApcmV0dXJuIG51bGw7dmFyIEo9JGEoVixHLFkuYmFzZUNsYXNzKTtyZXR1cm4gSj09PW51bGw/bnVsbDpZLmRvd25jYXN0KEopfWZ1bmN0aW9uIEx1KCl7cmV0dXJuIE9iamVjdC5rZXlzKEppKS5sZW5ndGh9ZnVuY3Rpb24gRnUoKXt2YXIgVj1bXTtmb3IodmFyIEcgaW4gSmkpSmkuaGFzT3duUHJvcGVydHkoRykmJlYucHVzaChKaVtHXSk7cmV0dXJuIFZ9ZnVuY3Rpb24gQnUoVil7Wmk9VixRaS5sZW5ndGgmJlppJiZaaShMYyl9ZnVuY3Rpb24gVXUoKXtuLmdldEluaGVyaXRlZEluc3RhbmNlQ291bnQ9THUsbi5nZXRMaXZlSW5oZXJpdGVkSW5zdGFuY2VzPUZ1LG4uZmx1c2hQZW5kaW5nRGVsZXRlcz1MYyxuLnNldERlbGF5RnVuY3Rpb249QnV9dmFyIEppPXt9O2Z1bmN0aW9uIFZ1KFYsRyl7Zm9yKEc9PT12b2lkIDAmJkllKCJwdHIgc2hvdWxkIG5vdCBiZSB1bmRlZmluZWQiKTtWLmJhc2VDbGFzczspRz1WLnVwY2FzdChHKSxWPVYuYmFzZUNsYXNzO3JldHVybiBHfWZ1bmN0aW9uIGt1KFYsRyl7cmV0dXJuIEc9VnUoVixHKSxKaVtHXX1mdW5jdGlvbiB2cyhWLEcpeyghRy5wdHJUeXBlfHwhRy5wdHIpJiZBaSgibWFrZUNsYXNzSGFuZGxlIHJlcXVpcmVzIHB0ciBhbmQgcHRyVHlwZSIpO3ZhciBZPSEhRy5zbWFydFB0clR5cGUsSj0hIUcuc21hcnRQdHI7cmV0dXJuIFkhPT1KJiZBaSgiQm90aCBzbWFydFB0clR5cGUgYW5kIHNtYXJ0UHRyIG11c3QgYmUgc3BlY2lmaWVkIiksRy5jb3VudD17dmFsdWU6MX0sJGkoT2JqZWN0LmNyZWF0ZShWLHskJDp7dmFsdWU6R319KSl9ZnVuY3Rpb24gR3UoVil7dmFyIEc9dGhpcy5nZXRQb2ludGVlKFYpO2lmKCFHKXJldHVybiB0aGlzLmRlc3RydWN0b3IoViksbnVsbDt2YXIgWT1rdSh0aGlzLnJlZ2lzdGVyZWRDbGFzcyxHKTtpZihZIT09dm9pZCAwKXtpZihZLiQkLmNvdW50LnZhbHVlPT09MClyZXR1cm4gWS4kJC5wdHI9RyxZLiQkLnNtYXJ0UHRyPVYsWS5jbG9uZSgpO3ZhciBKPVkuY2xvbmUoKTtyZXR1cm4gdGhpcy5kZXN0cnVjdG9yKFYpLEp9ZnVuY3Rpb24gdXQoKXtyZXR1cm4gdGhpcy5pc1NtYXJ0UG9pbnRlcj92cyh0aGlzLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTp0aGlzLnBvaW50ZWVUeXBlLHB0cjpHLHNtYXJ0UHRyVHlwZTp0aGlzLHNtYXJ0UHRyOlZ9KTp2cyh0aGlzLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTp0aGlzLHB0cjpWfSl9dmFyIFR0PXRoaXMucmVnaXN0ZXJlZENsYXNzLmdldEFjdHVhbFR5cGUoRyksUnQ9WGFbVHRdO2lmKCFSdClyZXR1cm4gdXQuY2FsbCh0aGlzKTt2YXIgbXQ7dGhpcy5pc0NvbnN0P210PVJ0LmNvbnN0UG9pbnRlclR5cGU6bXQ9UnQucG9pbnRlclR5cGU7dmFyIGh0PSRhKEcsdGhpcy5yZWdpc3RlcmVkQ2xhc3MsbXQucmVnaXN0ZXJlZENsYXNzKTtyZXR1cm4gaHQ9PT1udWxsP3V0LmNhbGwodGhpcyk6dGhpcy5pc1NtYXJ0UG9pbnRlcj92cyhtdC5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUse3B0clR5cGU6bXQscHRyOmh0LHNtYXJ0UHRyVHlwZTp0aGlzLHNtYXJ0UHRyOlZ9KTp2cyhtdC5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUse3B0clR5cGU6bXQscHRyOmh0fSl9ZnVuY3Rpb24genUoKXtsci5wcm90b3R5cGUuZ2V0UG9pbnRlZT1JdSxsci5wcm90b3R5cGUuZGVzdHJ1Y3Rvcj12dSxsci5wcm90b3R5cGUuYXJnUGFja0FkdmFuY2U9OCxsci5wcm90b3R5cGUucmVhZFZhbHVlRnJvbVBvaW50ZXI9dXIsbHIucHJvdG90eXBlLmRlbGV0ZU9iamVjdD1EdSxsci5wcm90b3R5cGUuZnJvbVdpcmVUeXBlPUd1fWZ1bmN0aW9uIGxyKFYsRyxZLEosdXQsVHQsUnQsbXQsaHQsS3QsdGUpe3RoaXMubmFtZT1WLHRoaXMucmVnaXN0ZXJlZENsYXNzPUcsdGhpcy5pc1JlZmVyZW5jZT1ZLHRoaXMuaXNDb25zdD1KLHRoaXMuaXNTbWFydFBvaW50ZXI9dXQsdGhpcy5wb2ludGVlVHlwZT1UdCx0aGlzLnNoYXJpbmdQb2xpY3k9UnQsdGhpcy5yYXdHZXRQb2ludGVlPW10LHRoaXMucmF3Q29uc3RydWN0b3I9aHQsdGhpcy5yYXdTaGFyZT1LdCx0aGlzLnJhd0Rlc3RydWN0b3I9dGUsIXV0JiZHLmJhc2VDbGFzcz09PXZvaWQgMD9KPyh0aGlzLnRvV2lyZVR5cGU9UHUsdGhpcy5kZXN0cnVjdG9yRnVuY3Rpb249bnVsbCk6KHRoaXMudG9XaXJlVHlwZT1OdSx0aGlzLmRlc3RydWN0b3JGdW5jdGlvbj1udWxsKTp0aGlzLnRvV2lyZVR5cGU9TXV9ZnVuY3Rpb24gWmEoVixHLFkpe24uaGFzT3duUHJvcGVydHkoVil8fEFpKCJSZXBsYWNpbmcgbm9uZXhpc3RhbnQgcHVibGljIHN5bWJvbCIpLG5bVl0ub3ZlcmxvYWRUYWJsZSE9PXZvaWQgMCYmWSE9PXZvaWQgMD9uW1ZdLm92ZXJsb2FkVGFibGVbWV09RzoobltWXT1HLG5bVl0uYXJnQ291bnQ9WSl9ZnVuY3Rpb24ganUoVixHLFkpe3ZhciBKPW5bImR5bkNhbGxfIitWXTtyZXR1cm4gWSYmWS5sZW5ndGg/Si5hcHBseShudWxsLFtHXS5jb25jYXQoWSkpOkouY2FsbChudWxsLEcpfWZ1bmN0aW9uIEh1KFYsRyxZKXtyZXR1cm4gVi5pbmRleE9mKCJqIikhPS0xP2p1KFYsRyxZKTpBZS5nZXQoRykuYXBwbHkobnVsbCxZKX1mdW5jdGlvbiBxdShWLEcpe3ZhciBZPVtdO3JldHVybiBmdW5jdGlvbigpe1kubGVuZ3RoPWFyZ3VtZW50cy5sZW5ndGg7Zm9yKHZhciBKPTA7Sjxhcmd1bWVudHMubGVuZ3RoO0orKylZW0pdPWFyZ3VtZW50c1tKXTtyZXR1cm4gSHUoVixHLFkpfX1mdW5jdGlvbiBXbyhWLEcpe1Y9TG4oVik7ZnVuY3Rpb24gWSgpe3JldHVybiBWLmluZGV4T2YoImoiKSE9LTE/cXUoVixHKTpBZS5nZXQoRyl9dmFyIEo9WSgpO3JldHVybiB0eXBlb2YgSiE9ImZ1bmN0aW9uIiYmSWUoInVua25vd24gZnVuY3Rpb24gcG9pbnRlciB3aXRoIHNpZ25hdHVyZSAiK1YrIjogIitHKSxKfXZhciBRYT12b2lkIDA7ZnVuY3Rpb24gSmEoVil7dmFyIEc9ZXQoViksWT1MbihHKTtyZXR1cm4gVyhHKSxZfWZ1bmN0aW9uIERzKFYsRyl7dmFyIFk9W10sSj17fTtmdW5jdGlvbiB1dChUdCl7aWYoIUpbVHRdJiYhS29bVHRdKXtpZihOcltUdF0pe05yW1R0XS5mb3JFYWNoKHV0KTtyZXR1cm59WS5wdXNoKFR0KSxKW1R0XT0hMH19dGhyb3cgRy5mb3JFYWNoKHV0KSxuZXcgUWEoVisiOiAiK1kubWFwKEphKS5qb2luKFsiLCAiXSkpfWZ1bmN0aW9uIEt1KFYsRyxZLEosdXQsVHQsUnQsbXQsaHQsS3QsdGUsVGUsSmUpe3RlPUxuKHRlKSxUdD1Xbyh1dCxUdCksbXQmJihtdD1XbyhSdCxtdCkpLEt0JiYoS3Q9V28oaHQsS3QpKSxKZT1XbyhUZSxKZSk7dmFyIGduPVhpKHRlKTtGYyhnbixmdW5jdGlvbigpe0RzKCJDYW5ub3QgY29uc3RydWN0ICIrdGUrIiBkdWUgdG8gdW5ib3VuZCB0eXBlcyIsW0pdKX0pLG5vKFtWLEcsWV0sSj9bSl06W10sZnVuY3Rpb24ob28pe29vPW9vWzBdO3ZhciB2byxkcjtKPyh2bz1vby5yZWdpc3RlcmVkQ2xhc3MsZHI9dm8uaW5zdGFuY2VQcm90b3R5cGUpOmRyPURyLnByb3RvdHlwZTt2YXIgWnI9SXIoZ24sZnVuY3Rpb24oKXtpZihPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykhPT1zZil0aHJvdyBuZXcgYmkoIlVzZSAnbmV3JyB0byBjb25zdHJ1Y3QgIit0ZSk7aWYoT2kuY29uc3RydWN0b3JfYm9keT09PXZvaWQgMCl0aHJvdyBuZXcgYmkodGUrIiBoYXMgbm8gYWNjZXNzaWJsZSBjb25zdHJ1Y3RvciIpO3ZhciByMT1PaS5jb25zdHJ1Y3Rvcl9ib2R5W2FyZ3VtZW50cy5sZW5ndGhdO2lmKHIxPT09dm9pZCAwKXRocm93IG5ldyBiaSgiVHJpZWQgdG8gaW52b2tlIGN0b3Igb2YgIit0ZSsiIHdpdGggaW52YWxpZCBudW1iZXIgb2YgcGFyYW1ldGVycyAoIithcmd1bWVudHMubGVuZ3RoKyIpIC0gZXhwZWN0ZWQgKCIrT2JqZWN0LmtleXMoT2kuY29uc3RydWN0b3JfYm9keSkudG9TdHJpbmcoKSsiKSBwYXJhbWV0ZXJzIGluc3RlYWQhIik7cmV0dXJuIHIxLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHNmPU9iamVjdC5jcmVhdGUoZHIse2NvbnN0cnVjdG9yOnt2YWx1ZTpacn19KTtaci5wcm90b3R5cGU9c2Y7dmFyIE9pPW5ldyB4dSh0ZSxacixzZixKZSx2byxUdCxtdCxLdCksa1M9bmV3IGxyKHRlLE9pLCEwLCExLCExKSxuMT1uZXcgbHIodGUrIioiLE9pLCExLCExLCExKSxvMT1uZXcgbHIodGUrIiBjb25zdCoiLE9pLCExLCEwLCExKTtyZXR1cm4gWGFbVl09e3BvaW50ZXJUeXBlOm4xLGNvbnN0UG9pbnRlclR5cGU6bzF9LFphKGduLFpyKSxba1MsbjEsbzFdfSl9ZnVuY3Rpb24gVWMoVixHKXtmb3IodmFyIFk9W10sSj0wO0o8VjtKKyspWS5wdXNoKGNlWyhHPj4yKStKXSk7cmV0dXJuIFl9ZnVuY3Rpb24gV3UoVixHLFksSix1dCxUdCl7RihHPjApO3ZhciBSdD1VYyhHLFkpO3V0PVdvKEosdXQpO3ZhciBtdD1bVHRdLGh0PVtdO25vKFtdLFtWXSxmdW5jdGlvbihLdCl7S3Q9S3RbMF07dmFyIHRlPSJjb25zdHJ1Y3RvciAiK0t0Lm5hbWU7aWYoS3QucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHk9PT12b2lkIDAmJihLdC5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keT1bXSksS3QucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHlbRy0xXSE9PXZvaWQgMCl0aHJvdyBuZXcgYmkoIkNhbm5vdCByZWdpc3RlciBtdWx0aXBsZSBjb25zdHJ1Y3RvcnMgd2l0aCBpZGVudGljYWwgbnVtYmVyIG9mIHBhcmFtZXRlcnMgKCIrKEctMSkrIikgZm9yIGNsYXNzICciK0t0Lm5hbWUrIichIE92ZXJsb2FkIHJlc29sdXRpb24gaXMgY3VycmVudGx5IG9ubHkgcGVyZm9ybWVkIHVzaW5nIHRoZSBwYXJhbWV0ZXIgY291bnQsIG5vdCBhY3R1YWwgdHlwZSBpbmZvISIpO3JldHVybiBLdC5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keVtHLTFdPWZ1bmN0aW9uKCl7RHMoIkNhbm5vdCBjb25zdHJ1Y3QgIitLdC5uYW1lKyIgZHVlIHRvIHVuYm91bmQgdHlwZXMiLFJ0KX0sbm8oW10sUnQsZnVuY3Rpb24oVGUpe3JldHVybiBLdC5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keVtHLTFdPWZ1bmN0aW9uKCl7YXJndW1lbnRzLmxlbmd0aCE9PUctMSYmSWUodGUrIiBjYWxsZWQgd2l0aCAiK2FyZ3VtZW50cy5sZW5ndGgrIiBhcmd1bWVudHMsIGV4cGVjdGVkICIrKEctMSkpLGh0Lmxlbmd0aD0wLG10Lmxlbmd0aD1HO2Zvcih2YXIgZ249MTtnbjxHOysrZ24pbXRbZ25dPVRlW2duXS50b1dpcmVUeXBlKGh0LGFyZ3VtZW50c1tnbi0xXSk7dmFyIG9vPXV0LmFwcGx5KG51bGwsbXQpO3JldHVybiBPbihodCksVGVbMF0uZnJvbVdpcmVUeXBlKG9vKX0sW119KSxbXX0pfWZ1bmN0aW9uIHRmKFYsRyl7aWYoIShWIGluc3RhbmNlb2YgRnVuY3Rpb24pKXRocm93IG5ldyBUeXBlRXJyb3IoIm5ld18gY2FsbGVkIHdpdGggY29uc3RydWN0b3IgdHlwZSAiK3R5cGVvZiBWKyIgd2hpY2ggaXMgbm90IGEgZnVuY3Rpb24iKTt2YXIgWT1JcihWLm5hbWV8fCJ1bmtub3duRnVuY3Rpb25OYW1lIixmdW5jdGlvbigpe30pO1kucHJvdG90eXBlPVYucHJvdG90eXBlO3ZhciBKPW5ldyBZLHV0PVYuYXBwbHkoSixHKTtyZXR1cm4gdXQgaW5zdGFuY2VvZiBPYmplY3Q/dXQ6Sn1mdW5jdGlvbiBlZihWLEcsWSxKLHV0KXt2YXIgVHQ9Ry5sZW5ndGg7VHQ8MiYmSWUoImFyZ1R5cGVzIGFycmF5IHNpemUgbWlzbWF0Y2ghIE11c3QgYXQgbGVhc3QgZ2V0IHJldHVybiB2YWx1ZSBhbmQgJ3RoaXMnIHR5cGVzISIpO2Zvcih2YXIgUnQ9R1sxXSE9PW51bGwmJlkhPT1udWxsLG10PSExLGh0PTE7aHQ8Ry5sZW5ndGg7KytodClpZihHW2h0XSE9PW51bGwmJkdbaHRdLmRlc3RydWN0b3JGdW5jdGlvbj09PXZvaWQgMCl7bXQ9ITA7YnJlYWt9Zm9yKHZhciBLdD1HWzBdLm5hbWUhPT0idm9pZCIsdGU9IiIsVGU9IiIsaHQ9MDtodDxUdC0yOysraHQpdGUrPShodCE9PTA/IiwgIjoiIikrImFyZyIraHQsVGUrPShodCE9PTA/IiwgIjoiIikrImFyZyIraHQrIldpcmVkIjt2YXIgSmU9InJldHVybiBmdW5jdGlvbiAiK1hpKFYpKyIoIit0ZStgKSB7CmlmIChhcmd1bWVudHMubGVuZ3RoICE9PSBgKyhUdC0yKStgKSB7CnRocm93QmluZGluZ0Vycm9yKCdmdW5jdGlvbiBgK1YrIiBjYWxsZWQgd2l0aCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLCBleHBlY3RlZCAiKyhUdC0yKStgIGFyZ3MhJyk7Cn0KYDttdCYmKEplKz1gdmFyIGRlc3RydWN0b3JzID0gW107CmApO3ZhciBnbj1tdD8iZGVzdHJ1Y3RvcnMiOiJudWxsIixvbz1bInRocm93QmluZGluZ0Vycm9yIiwiaW52b2tlciIsImZuIiwicnVuRGVzdHJ1Y3RvcnMiLCJyZXRUeXBlIiwiY2xhc3NQYXJhbSJdLHZvPVtJZSxKLHV0LE9uLEdbMF0sR1sxXV07UnQmJihKZSs9InZhciB0aGlzV2lyZWQgPSBjbGFzc1BhcmFtLnRvV2lyZVR5cGUoIitnbitgLCB0aGlzKTsKYCk7Zm9yKHZhciBodD0wO2h0PFR0LTI7KytodClKZSs9InZhciBhcmciK2h0KyJXaXJlZCA9IGFyZ1R5cGUiK2h0KyIudG9XaXJlVHlwZSgiK2duKyIsIGFyZyIraHQrIik7IC8vICIrR1todCsyXS5uYW1lK2AKYCxvby5wdXNoKCJhcmdUeXBlIitodCksdm8ucHVzaChHW2h0KzJdKTtpZihSdCYmKFRlPSJ0aGlzV2lyZWQiKyhUZS5sZW5ndGg+MD8iLCAiOiIiKStUZSksSmUrPShLdD8idmFyIHJ2ID0gIjoiIikrImludm9rZXIoZm4iKyhUZS5sZW5ndGg+MD8iLCAiOiIiKStUZStgKTsKYCxtdClKZSs9YHJ1bkRlc3RydWN0b3JzKGRlc3RydWN0b3JzKTsKYDtlbHNlIGZvcih2YXIgaHQ9UnQ/MToyO2h0PEcubGVuZ3RoOysraHQpe3ZhciBkcj1odD09PTE/InRoaXNXaXJlZCI6ImFyZyIrKGh0LTIpKyJXaXJlZCI7R1todF0uZGVzdHJ1Y3RvckZ1bmN0aW9uIT09bnVsbCYmKEplKz1kcisiX2R0b3IoIitkcisiKTsgLy8gIitHW2h0XS5uYW1lK2AKYCxvby5wdXNoKGRyKyJfZHRvciIpLHZvLnB1c2goR1todF0uZGVzdHJ1Y3RvckZ1bmN0aW9uKSl9S3QmJihKZSs9YHZhciByZXQgPSByZXRUeXBlLmZyb21XaXJlVHlwZShydik7CnJldHVybiByZXQ7CmApLEplKz1gfQpgLG9vLnB1c2goSmUpO3ZhciBacj10ZihGdW5jdGlvbixvbykuYXBwbHkobnVsbCx2byk7cmV0dXJuIFpyfWZ1bmN0aW9uIFh1KFYsRyxZLEosdXQsVHQsUnQsbXQpe3ZhciBodD1VYyhZLEopO0c9TG4oRyksVHQ9V28odXQsVHQpLG5vKFtdLFtWXSxmdW5jdGlvbihLdCl7S3Q9S3RbMF07dmFyIHRlPUt0Lm5hbWUrIi4iK0c7bXQmJkt0LnJlZ2lzdGVyZWRDbGFzcy5wdXJlVmlydHVhbEZ1bmN0aW9ucy5wdXNoKEcpO2Z1bmN0aW9uIFRlKCl7RHMoIkNhbm5vdCBjYWxsICIrdGUrIiBkdWUgdG8gdW5ib3VuZCB0eXBlcyIsaHQpfXZhciBKZT1LdC5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUsZ249SmVbR107cmV0dXJuIGduPT09dm9pZCAwfHxnbi5vdmVybG9hZFRhYmxlPT09dm9pZCAwJiZnbi5jbGFzc05hbWUhPT1LdC5uYW1lJiZnbi5hcmdDb3VudD09PVktMj8oVGUuYXJnQ291bnQ9WS0yLFRlLmNsYXNzTmFtZT1LdC5uYW1lLEplW0ddPVRlKTooWWEoSmUsRyx0ZSksSmVbR10ub3ZlcmxvYWRUYWJsZVtZLTJdPVRlKSxubyhbXSxodCxmdW5jdGlvbihvbyl7dmFyIHZvPWVmKHRlLG9vLEt0LFR0LFJ0KTtyZXR1cm4gSmVbR10ub3ZlcmxvYWRUYWJsZT09PXZvaWQgMD8odm8uYXJnQ291bnQ9WS0yLEplW0ddPXZvKTpKZVtHXS5vdmVybG9hZFRhYmxlW1ktMl09dm8sW119KSxbXX0pfWZ1bmN0aW9uIFl1KFYsRyxZKXtWPUxuKFYpLG5vKFtdLFtHXSxmdW5jdGlvbihKKXtyZXR1cm4gSj1KWzBdLG5bVl09Si5mcm9tV2lyZVR5cGUoWSksW119KX12YXIgVmM9W10sQW89W3t9LHt2YWx1ZTp2b2lkIDB9LHt2YWx1ZTpudWxsfSx7dmFsdWU6ITB9LHt2YWx1ZTohMX1dO2Z1bmN0aW9uIGtjKFYpe1Y+NCYmLS1Bb1tWXS5yZWZjb3VudD09PTAmJihBb1tWXT12b2lkIDAsVmMucHVzaChWKSl9ZnVuY3Rpb24gJHUoKXtmb3IodmFyIFY9MCxHPTU7RzxBby5sZW5ndGg7KytHKUFvW0ddIT09dm9pZCAwJiYrK1Y7cmV0dXJuIFZ9ZnVuY3Rpb24gWnUoKXtmb3IodmFyIFY9NTtWPEFvLmxlbmd0aDsrK1YpaWYoQW9bVl0hPT12b2lkIDApcmV0dXJuIEFvW1ZdO3JldHVybiBudWxsfWZ1bmN0aW9uIFF1KCl7bi5jb3VudF9lbXZhbF9oYW5kbGVzPSR1LG4uZ2V0X2ZpcnN0X2VtdmFsPVp1fWZ1bmN0aW9uIHByKFYpe3N3aXRjaChWKXtjYXNlIHZvaWQgMDpyZXR1cm4gMTtjYXNlIG51bGw6cmV0dXJuIDI7Y2FzZSEwOnJldHVybiAzO2Nhc2UhMTpyZXR1cm4gNDtkZWZhdWx0Ont2YXIgRz1WYy5sZW5ndGg/VmMucG9wKCk6QW8ubGVuZ3RoO3JldHVybiBBb1tHXT17cmVmY291bnQ6MSx2YWx1ZTpWfSxHfX19ZnVuY3Rpb24gSnUoVixHKXtHPUxuKEcpLHJyKFYse25hbWU6Ryxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oWSl7dmFyIEo9QW9bWV0udmFsdWU7cmV0dXJuIGtjKFkpLEp9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oWSxKKXtyZXR1cm4gcHIoSil9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6dXIsZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KX1mdW5jdGlvbiB0bChWLEcsWSl7c3dpdGNoKEcpe2Nhc2UgMDpyZXR1cm4gZnVuY3Rpb24oSil7dmFyIHV0PVk/ZHQ6VnQ7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKHV0W0pdKX07Y2FzZSAxOnJldHVybiBmdW5jdGlvbihKKXt2YXIgdXQ9WT96dDpoZTtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUodXRbSj4+MV0pfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKEope3ZhciB1dD1ZP2NlOnBlO3JldHVybiB0aGlzLmZyb21XaXJlVHlwZSh1dFtKPj4yXSl9O2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBpbnRlZ2VyIHR5cGU6ICIrVil9fWZ1bmN0aW9uIGVsKFYsRyxZLEope3ZhciB1dD12cihZKTtHPUxuKEcpO2Z1bmN0aW9uIFR0KCl7fVR0LnZhbHVlcz17fSxycihWLHtuYW1lOkcsY29uc3RydWN0b3I6VHQsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKFJ0KXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci52YWx1ZXNbUnRdfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKFJ0LG10KXtyZXR1cm4gbXQudmFsdWV9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6dGwoRyx1dCxKKSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pLEZjKEcsVHQpfWZ1bmN0aW9uIExzKFYsRyl7dmFyIFk9S29bVl07cmV0dXJuIFk9PT12b2lkIDAmJkllKEcrIiBoYXMgdW5rbm93biB0eXBlICIrSmEoVikpLFl9ZnVuY3Rpb24gbmwoVixHLFkpe3ZhciBKPUxzKFYsImVudW0iKTtHPUxuKEcpO3ZhciB1dD1KLmNvbnN0cnVjdG9yLFR0PU9iamVjdC5jcmVhdGUoSi5jb25zdHJ1Y3Rvci5wcm90b3R5cGUse3ZhbHVlOnt2YWx1ZTpZfSxjb25zdHJ1Y3Rvcjp7dmFsdWU6SXIoSi5uYW1lKyJfIitHLGZ1bmN0aW9uKCl7fSl9fSk7dXQudmFsdWVzW1ldPVR0LHV0W0ddPVR0fWZ1bmN0aW9uIHdpKFYpe2lmKFY9PT1udWxsKXJldHVybiJudWxsIjt2YXIgRz10eXBlb2YgVjtyZXR1cm4gRz09PSJvYmplY3QifHxHPT09ImFycmF5Inx8Rz09PSJmdW5jdGlvbiI/Vi50b1N0cmluZygpOiIiK1Z9ZnVuY3Rpb24gb2woVixHKXtzd2l0Y2goRyl7Y2FzZSAyOnJldHVybiBmdW5jdGlvbihZKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoZmVbWT4+Ml0pfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKFkpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShRdFtZPj4zXSl9O2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBmbG9hdCB0eXBlOiAiK1YpfX1mdW5jdGlvbiBybChWLEcsWSl7dmFyIEo9dnIoWSk7Rz1MbihHKSxycihWLHtuYW1lOkcsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKHV0KXtyZXR1cm4gdXR9LHRvV2lyZVR5cGU6ZnVuY3Rpb24odXQsVHQpe2lmKHR5cGVvZiBUdCE9Im51bWJlciImJnR5cGVvZiBUdCE9ImJvb2xlYW4iKXRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0ICInK3dpKFR0KSsnIiB0byAnK3RoaXMubmFtZSk7cmV0dXJuIFR0fSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOm9sKEcsSiksZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KX1mdW5jdGlvbiBpbChWLEcsWSxKLHV0LFR0KXt2YXIgUnQ9VWMoRyxZKTtWPUxuKFYpLHV0PVdvKEosdXQpLEZjKFYsZnVuY3Rpb24oKXtEcygiQ2Fubm90IGNhbGwgIitWKyIgZHVlIHRvIHVuYm91bmQgdHlwZXMiLFJ0KX0sRy0xKSxubyhbXSxSdCxmdW5jdGlvbihtdCl7dmFyIGh0PVttdFswXSxudWxsXS5jb25jYXQobXQuc2xpY2UoMSkpO3JldHVybiBaYShWLGVmKFYsaHQsbnVsbCx1dCxUdCksRy0xKSxbXX0pfWZ1bmN0aW9uIHNsKFYsRyxZKXtzd2l0Y2goRyl7Y2FzZSAwOnJldHVybiBZP2Z1bmN0aW9uKHV0KXtyZXR1cm4gZHRbdXRdfTpmdW5jdGlvbih1dCl7cmV0dXJuIFZ0W3V0XX07Y2FzZSAxOnJldHVybiBZP2Z1bmN0aW9uKHV0KXtyZXR1cm4genRbdXQ+PjFdfTpmdW5jdGlvbih1dCl7cmV0dXJuIGhlW3V0Pj4xXX07Y2FzZSAyOnJldHVybiBZP2Z1bmN0aW9uKHV0KXtyZXR1cm4gY2VbdXQ+PjJdfTpmdW5jdGlvbih1dCl7cmV0dXJuIHBlW3V0Pj4yXX07ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGludGVnZXIgdHlwZTogIitWKX19ZnVuY3Rpb24gY2woVixHLFksSix1dCl7Rz1MbihHKSx1dD09PS0xJiYodXQ9NDI5NDk2NzI5NSk7dmFyIFR0PXZyKFkpLFJ0PWZ1bmN0aW9uKEt0KXtyZXR1cm4gS3R9O2lmKEo9PT0wKXt2YXIgbXQ9MzItOCpZO1J0PWZ1bmN0aW9uKEt0KXtyZXR1cm4gS3Q8PG10Pj4+bXR9fXZhciBodD1HLmluZGV4T2YoInVuc2lnbmVkIikhPS0xO3JyKFYse25hbWU6Ryxmcm9tV2lyZVR5cGU6UnQsdG9XaXJlVHlwZTpmdW5jdGlvbihLdCx0ZSl7aWYodHlwZW9mIHRlIT0ibnVtYmVyIiYmdHlwZW9mIHRlIT0iYm9vbGVhbiIpdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgIicrd2kodGUpKyciIHRvICcrdGhpcy5uYW1lKTtpZih0ZTxKfHx0ZT51dCl0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXNzaW5nIGEgbnVtYmVyICInK3dpKHRlKSsnIiBmcm9tIEpTIHNpZGUgdG8gQy9DKysgc2lkZSB0byBhbiBhcmd1bWVudCBvZiB0eXBlICInK0crJyIsIHdoaWNoIGlzIG91dHNpZGUgdGhlIHZhbGlkIHJhbmdlIFsnK0orIiwgIit1dCsiXSEiKTtyZXR1cm4gaHQ/dGU+Pj4wOnRlfDB9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6c2woRyxUdCxKIT09MCksZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KX1mdW5jdGlvbiBhbChWLEcsWSl7dmFyIEo9W0ludDhBcnJheSxVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5XSx1dD1KW0ddO2Z1bmN0aW9uIFR0KFJ0KXtSdD1SdD4+Mjt2YXIgbXQ9cGUsaHQ9bXRbUnRdLEt0PW10W1J0KzFdO3JldHVybiBuZXcgdXQoX3QsS3QsaHQpfVk9TG4oWSkscnIoVix7bmFtZTpZLGZyb21XaXJlVHlwZTpUdCxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOlR0fSx7aWdub3JlRHVwbGljYXRlUmVnaXN0cmF0aW9uczohMH0pfWZ1bmN0aW9uIGZsKFYsRyl7Rz1MbihHKTt2YXIgWT1HPT09InN0ZDo6c3RyaW5nIjtycihWLHtuYW1lOkcsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKEope3ZhciB1dD1wZVtKPj4yXSxUdDtpZihZKWZvcih2YXIgUnQ9Sis0LG10PTA7bXQ8PXV0OysrbXQpe3ZhciBodD1KKzQrbXQ7aWYobXQ9PXV0fHxWdFtodF09PTApe3ZhciBLdD1odC1SdCx0ZT1rKFJ0LEt0KTtUdD09PXZvaWQgMD9UdD10ZTooVHQrPSJcMCIsVHQrPXRlKSxSdD1odCsxfX1lbHNle2Zvcih2YXIgVGU9bmV3IEFycmF5KHV0KSxtdD0wO210PHV0OysrbXQpVGVbbXRdPVN0cmluZy5mcm9tQ2hhckNvZGUoVnRbSis0K210XSk7VHQ9VGUuam9pbigiIil9cmV0dXJuIFcoSiksVHR9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oSix1dCl7dXQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmKHV0PW5ldyBVaW50OEFycmF5KHV0KSk7dmFyIFR0LFJ0PXR5cGVvZiB1dD09InN0cmluZyI7UnR8fHV0IGluc3RhbmNlb2YgVWludDhBcnJheXx8dXQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheXx8dXQgaW5zdGFuY2VvZiBJbnQ4QXJyYXl8fEllKCJDYW5ub3QgcGFzcyBub24tc3RyaW5nIHRvIHN0ZDo6c3RyaW5nIiksWSYmUnQ/VHQ9ZnVuY3Rpb24oKXtyZXR1cm4gUih1dCl9OlR0PWZ1bmN0aW9uKCl7cmV0dXJuIHV0Lmxlbmd0aH07dmFyIG10PVR0KCksaHQ9eig0K210KzEpO2lmKHBlW2h0Pj4yXT1tdCxZJiZSdClYKHV0LGh0KzQsbXQrMSk7ZWxzZSBpZihSdClmb3IodmFyIEt0PTA7S3Q8bXQ7KytLdCl7dmFyIHRlPXV0LmNoYXJDb2RlQXQoS3QpO3RlPjI1NSYmKFcoaHQpLEllKCJTdHJpbmcgaGFzIFVURi0xNiBjb2RlIHVuaXRzIHRoYXQgZG8gbm90IGZpdCBpbiA4IGJpdHMiKSksVnRbaHQrNCtLdF09dGV9ZWxzZSBmb3IodmFyIEt0PTA7S3Q8bXQ7KytLdClWdFtodCs0K0t0XT11dFtLdF07cmV0dXJuIEohPT1udWxsJiZKLnB1c2goVyxodCksaHR9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6dXIsZGVzdHJ1Y3RvckZ1bmN0aW9uOmZ1bmN0aW9uKEope1coSil9fSl9ZnVuY3Rpb24gdWwoVixHLFkpe1k9TG4oWSk7dmFyIEosdXQsVHQsUnQsbXQ7Rz09PTI/KEo9ZnQsdXQ9cHQsUnQ9Z3QsVHQ9ZnVuY3Rpb24oKXtyZXR1cm4gaGV9LG10PTEpOkc9PT00JiYoSj1pdCx1dD1OdCxSdD1PdCxUdD1mdW5jdGlvbigpe3JldHVybiBwZX0sbXQ9MikscnIoVix7bmFtZTpZLGZyb21XaXJlVHlwZTpmdW5jdGlvbihodCl7Zm9yKHZhciBLdD1wZVtodD4+Ml0sdGU9VHQoKSxUZSxKZT1odCs0LGduPTA7Z248PUt0OysrZ24pe3ZhciBvbz1odCs0K2duKkc7aWYoZ249PUt0fHx0ZVtvbz4+bXRdPT0wKXt2YXIgdm89b28tSmUsZHI9SihKZSx2byk7VGU9PT12b2lkIDA/VGU9ZHI6KFRlKz0iXDAiLFRlKz1kciksSmU9b28rR319cmV0dXJuIFcoaHQpLFRlfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKGh0LEt0KXt0eXBlb2YgS3QhPSJzdHJpbmciJiZJZSgiQ2Fubm90IHBhc3Mgbm9uLXN0cmluZyB0byBDKysgc3RyaW5nIHR5cGUgIitZKTt2YXIgdGU9UnQoS3QpLFRlPXooNCt0ZStHKTtyZXR1cm4gcGVbVGU+PjJdPXRlPj5tdCx1dChLdCxUZSs0LHRlK0cpLGh0IT09bnVsbCYmaHQucHVzaChXLFRlKSxUZX0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjp1cixkZXN0cnVjdG9yRnVuY3Rpb246ZnVuY3Rpb24oaHQpe1coaHQpfX0pfWZ1bmN0aW9uIGxsKFYsRyxZLEosdXQsVHQpe3JuW1ZdPXtuYW1lOkxuKEcpLHJhd0NvbnN0cnVjdG9yOldvKFksSikscmF3RGVzdHJ1Y3RvcjpXbyh1dCxUdCksZmllbGRzOltdfX1mdW5jdGlvbiBwbChWLEcsWSxKLHV0LFR0LFJ0LG10LGh0LEt0KXtybltWXS5maWVsZHMucHVzaCh7ZmllbGROYW1lOkxuKEcpLGdldHRlclJldHVyblR5cGU6WSxnZXR0ZXI6V28oSix1dCksZ2V0dGVyQ29udGV4dDpUdCxzZXR0ZXJBcmd1bWVudFR5cGU6UnQsc2V0dGVyOldvKG10LGh0KSxzZXR0ZXJDb250ZXh0Okt0fSl9ZnVuY3Rpb24gZGwoVixHKXtHPUxuKEcpLHJyKFYse2lzVm9pZDohMCxuYW1lOkcsYXJnUGFja0FkdmFuY2U6MCxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oKXt9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oWSxKKXt9fSl9ZnVuY3Rpb24gdHMoVil7cmV0dXJuIFZ8fEllKCJDYW5ub3QgdXNlIGRlbGV0ZWQgdmFsLiBoYW5kbGUgPSAiK1YpLEFvW1ZdLnZhbHVlfWZ1bmN0aW9uIG1sKFYsRyxZKXtWPXRzKFYpLEc9THMoRywiZW12YWw6OmFzIik7dmFyIEo9W10sdXQ9cHIoSik7cmV0dXJuIGNlW1k+PjJdPXV0LEcudG9XaXJlVHlwZShKLFYpfXZhciBobD17fTtmdW5jdGlvbiBGcyhWKXt2YXIgRz1obFtWXTtyZXR1cm4gRz09PXZvaWQgMD9MbihWKTpHfXZhciBHYz1bXTtmdW5jdGlvbiBfbChWLEcsWSxKKXtWPUdjW1ZdLEc9dHMoRyksWT1GcyhZKSxWKEcsWSxudWxsLEopfWZ1bmN0aW9uIG5mKCl7cmV0dXJuIHR5cGVvZiBnbG9iYWxUaGlzPT0ib2JqZWN0Ij9nbG9iYWxUaGlzOmZ1bmN0aW9uKCl7cmV0dXJuIEZ1bmN0aW9ufSgpKCJyZXR1cm4gdGhpcyIpKCl9ZnVuY3Rpb24geWwoVil7cmV0dXJuIFY9PT0wP3ByKG5mKCkpOihWPUZzKFYpLHByKG5mKClbVl0pKX1mdW5jdGlvbiBnbChWKXt2YXIgRz1HYy5sZW5ndGg7cmV0dXJuIEdjLnB1c2goViksR31mdW5jdGlvbiBBbChWLEcpe2Zvcih2YXIgWT1uZXcgQXJyYXkoViksSj0wO0o8VjsrK0opWVtKXT1McyhjZVsoRz4+MikrSl0sInBhcmFtZXRlciAiK0opO3JldHVybiBZfWZ1bmN0aW9uIGJsKFYsRyl7Zm9yKHZhciBZPUFsKFYsRyksSj1ZWzBdLHV0PUoubmFtZSsiXyQiK1kuc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGduKXtyZXR1cm4gZ24ubmFtZX0pLmpvaW4oIl8iKSsiJCIsVHQ9WyJyZXRUeXBlIl0sUnQ9W0pdLG10PSIiLGh0PTA7aHQ8Vi0xOysraHQpbXQrPShodCE9PTA/IiwgIjoiIikrImFyZyIraHQsVHQucHVzaCgiYXJnVHlwZSIraHQpLFJ0LnB1c2goWVsxK2h0XSk7Zm9yKHZhciBLdD1YaSgibWV0aG9kQ2FsbGVyXyIrdXQpLHRlPSJyZXR1cm4gZnVuY3Rpb24gIitLdCtgKGhhbmRsZSwgbmFtZSwgZGVzdHJ1Y3RvcnMsIGFyZ3MpIHsKYCxUZT0wLGh0PTA7aHQ8Vi0xOysraHQpdGUrPSIgICAgdmFyIGFyZyIraHQrIiA9IGFyZ1R5cGUiK2h0KyIucmVhZFZhbHVlRnJvbVBvaW50ZXIoYXJncyIrKFRlPyIrIitUZToiIikrYCk7CmAsVGUrPVlbaHQrMV0uYXJnUGFja0FkdmFuY2U7dGUrPSIgICAgdmFyIHJ2ID0gaGFuZGxlW25hbWVdKCIrbXQrYCk7CmA7Zm9yKHZhciBodD0wO2h0PFYtMTsrK2h0KVlbaHQrMV0uZGVsZXRlT2JqZWN0JiYodGUrPSIgICAgYXJnVHlwZSIraHQrIi5kZWxldGVPYmplY3QoYXJnIitodCtgKTsKYCk7Si5pc1ZvaWR8fCh0ZSs9YCAgICByZXR1cm4gcmV0VHlwZS50b1dpcmVUeXBlKGRlc3RydWN0b3JzLCBydik7CmApLHRlKz1gfTsKYCxUdC5wdXNoKHRlKTt2YXIgSmU9dGYoRnVuY3Rpb24sVHQpLmFwcGx5KG51bGwsUnQpO3JldHVybiBnbChKZSl9ZnVuY3Rpb24gd2woVil7cmV0dXJuIFY9RnMoVikscHIobltWXSl9ZnVuY3Rpb24gVGwoVixHKXtyZXR1cm4gVj10cyhWKSxHPXRzKEcpLHByKFZbR10pfWZ1bmN0aW9uIE9sKFYpe1Y+NCYmKEFvW1ZdLnJlZmNvdW50Kz0xKX1mdW5jdGlvbiBFbChWKXtmb3IodmFyIEc9IiIsWT0wO1k8VjsrK1kpRys9KFkhPT0wPyIsICI6IiIpKyJhcmciK1k7Zm9yKHZhciBKPSJyZXR1cm4gZnVuY3Rpb24gZW12YWxfYWxsb2NhdG9yXyIrVitgKGNvbnN0cnVjdG9yLCBhcmdUeXBlcywgYXJncykgewpgLFk9MDtZPFY7KytZKUorPSJ2YXIgYXJnVHlwZSIrWSsiID0gcmVxdWlyZVJlZ2lzdGVyZWRUeXBlKE1vZHVsZVsnSEVBUDMyJ11bKGFyZ1R5cGVzID4+PiAyKSArICIrWSsnXSwgInBhcmFtZXRlciAnK1krYCIpOwp2YXIgYXJnYCtZKyIgPSBhcmdUeXBlIitZK2AucmVhZFZhbHVlRnJvbVBvaW50ZXIoYXJncyk7CmFyZ3MgKz0gYXJnVHlwZWArWStgWydhcmdQYWNrQWR2YW5jZSddOwpgO3JldHVybiBKKz0idmFyIG9iaiA9IG5ldyBjb25zdHJ1Y3RvcigiK0crYCk7CnJldHVybiBfX2VtdmFsX3JlZ2lzdGVyKG9iaik7Cn0KYCxuZXcgRnVuY3Rpb24oInJlcXVpcmVSZWdpc3RlcmVkVHlwZSIsIk1vZHVsZSIsIl9fZW12YWxfcmVnaXN0ZXIiLEopKExzLG4scHIpfXZhciBvZj17fTtmdW5jdGlvbiBSbChWLEcsWSxKKXtWPXRzKFYpO3ZhciB1dD1vZltHXTtyZXR1cm4gdXR8fCh1dD1FbChHKSxvZltHXT11dCksdXQoVixZLEopfWZ1bmN0aW9uIFNsKFYpe3JldHVybiBwcihGcyhWKSl9ZnVuY3Rpb24gQ2woVil7dmFyIEc9QW9bVl0udmFsdWU7T24oRyksa2MoVil9ZnVuY3Rpb24geGwoKXtLZSgpfWZ1bmN0aW9uIFBsKFYsRyxZKXtWdC5jb3B5V2l0aGluKFYsRyxHK1kpfWZ1bmN0aW9uIE1sKFYpe3RyeXtyZXR1cm4gQS5ncm93KFYtX3QuYnl0ZUxlbmd0aCs2NTUzNT4+PjE2KSxKdChBLmJ1ZmZlciksMX1jYXRjaHt9fWZ1bmN0aW9uIE5sKFYpe3ZhciBHPVZ0Lmxlbmd0aDtWPVY+Pj4wO3ZhciBZPTIxNDc0ODM2NDg7aWYoVj5ZKXJldHVybiExO2Zvcih2YXIgSj0xO0o8PTQ7Sio9Mil7dmFyIHV0PUcqKDErLjIvSik7dXQ9TWF0aC5taW4odXQsVisxMDA2NjMyOTYpO3ZhciBUdD1NYXRoLm1pbihZLHh0KE1hdGgubWF4KFYsdXQpLDY1NTM2KSksUnQ9TWwoVHQpO2lmKFJ0KXJldHVybiEwfXJldHVybiExfXZhciBCcz17bWFwcGluZ3M6e30sYnVmZmVyczpbbnVsbCxbXSxbXV0scHJpbnRDaGFyOmZ1bmN0aW9uKFYsRyl7dmFyIFk9QnMuYnVmZmVyc1tWXTtHPT09MHx8Rz09PTEwPygoVj09PTE/TjpJKShIKFksMCkpLFkubGVuZ3RoPTApOlkucHVzaChHKX0sdmFyYXJnczp2b2lkIDAsZ2V0OmZ1bmN0aW9uKCl7QnMudmFyYXJncys9NDt2YXIgVj1jZVtCcy52YXJhcmdzLTQ+PjJdO3JldHVybiBWfSxnZXRTdHI6ZnVuY3Rpb24oVil7dmFyIEc9ayhWKTtyZXR1cm4gR30sZ2V0NjQ6ZnVuY3Rpb24oVixHKXtyZXR1cm4gVn19O2Z1bmN0aW9uIElsKFYpe3JldHVybiAwfWZ1bmN0aW9uIHZsKFYsRyxZLEosdXQpe31mdW5jdGlvbiBEbChWLEcsWSxKKXtmb3IodmFyIHV0PTAsVHQ9MDtUdDxZO1R0Kyspe2Zvcih2YXIgUnQ9Y2VbRytUdCo4Pj4yXSxtdD1jZVtHKyhUdCo4KzQpPj4yXSxodD0wO2h0PG10O2h0KyspQnMucHJpbnRDaGFyKFYsVnRbUnQraHRdKTt1dCs9bXR9cmV0dXJuIGNlW0o+PjJdPXV0LDB9ZnVuY3Rpb24gTGwoVil7dihWfDApfUlzPW4uSW50ZXJuYWxFcnJvcj1ZaShFcnJvciwiSW50ZXJuYWxFcnJvciIpLE5jKCksYmk9bi5CaW5kaW5nRXJyb3I9WWkoRXJyb3IsIkJpbmRpbmdFcnJvciIpLEN1KCksenUoKSxVdSgpLFFhPW4uVW5ib3VuZFR5cGVFcnJvcj1ZaShFcnJvciwiVW5ib3VuZFR5cGVFcnJvciIpLFF1KCk7dmFyIEZsPXt0OnBvLEk6QXUseDpLdSx3Old1LGQ6WHUsazpZdSxIOkp1LG46ZWwsYTpubCxBOnJsLGk6aWwsajpjbCxoOmFsLEI6Zmwsdjp1bCx1OmxsLGM6cGwsSjpkbCxtOm1sLHM6X2wsYjprYyx5OnlsLHA6Ymwscjp3bCxlOlRsLGc6T2wscTpSbCxmOlNsLGw6Q2wsbzp4bCxFOlBsLEY6TmwsRzpJbCxDOnZsLHo6RGwsRDpMbH0scmY9V24oKSxSZT1uLl9fX3dhc21fY2FsbF9jdG9ycz1mdW5jdGlvbigpe3JldHVybihSZT1uLl9fX3dhc21fY2FsbF9jdG9ycz1uLmFzbS5MKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHo9bi5fbWFsbG9jPWZ1bmN0aW9uKCl7cmV0dXJuKHo9bi5fbWFsbG9jPW4uYXNtLk0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVz1uLl9mcmVlPWZ1bmN0aW9uKCl7cmV0dXJuKFc9bi5fZnJlZT1uLmFzbS5OKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGV0PW4uX19fZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4oZXQ9bi5fX19nZXRUeXBlTmFtZT1uLmFzbS5QKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE10PW4uX19fZW1iaW5kX3JlZ2lzdGVyX25hdGl2ZV9hbmRfYnVpbHRpbl90eXBlcz1mdW5jdGlvbigpe3JldHVybihNdD1uLl9fX2VtYmluZF9yZWdpc3Rlcl9uYXRpdmVfYW5kX2J1aWx0aW5fdHlwZXM9bi5hc20uUSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxsZT1uLmR5bkNhbGxfamlqaT1mdW5jdGlvbigpe3JldHVybihsZT1uLmR5bkNhbGxfamlqaT1uLmFzbS5SKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHdlO2Z1bmN0aW9uIFRpKFYpe3RoaXMubmFtZT0iRXhpdFN0YXR1cyIsdGhpcy5tZXNzYWdlPSJQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCIrVisiKSIsdGhpcy5zdGF0dXM9Vn1Ibj1mdW5jdGlvbiBWKCl7d2V8fHpjKCksd2V8fChIbj1WKX07ZnVuY3Rpb24gemMoVil7aWYoVj1WfHxmLG1uPjB8fChwbigpLG1uPjApKXJldHVybjtmdW5jdGlvbiBHKCl7d2V8fCh3ZT0hMCxuLmNhbGxlZFJ1bj0hMCwhUyYmKFRuKCksb2UoKSxvKG4pLG4ub25SdW50aW1lSW5pdGlhbGl6ZWQmJm4ub25SdW50aW1lSW5pdGlhbGl6ZWQoKSwkdCgpKSl9bi5zZXRTdGF0dXM/KG4uc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksc2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtuLnNldFN0YXR1cygiIil9LDEpLEcoKX0sMSkpOkcoKX1pZihuLnJ1bj16YyxuLnByZUluaXQpZm9yKHR5cGVvZiBuLnByZUluaXQ9PSJmdW5jdGlvbiImJihuLnByZUluaXQ9W24ucHJlSW5pdF0pO24ucHJlSW5pdC5sZW5ndGg+MDspbi5wcmVJbml0LnBvcCgpKCk7cmV0dXJuIHpjKCksZS5yZWFkeX19KCk7dHlwZW9mIHBtPT0ib2JqZWN0IiYmdHlwZW9mIEtnPT0ib2JqZWN0Ij9LZy5leHBvcnRzPXFnOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHFnfSk6dHlwZW9mIHBtPT0ib2JqZWN0IiYmKHBtLkJBU0lTPXFnKX0pO3ZhciBXZz17fTttZShXZyx7ZGVmYXVsdDooKT0+cjh9KTtmdW5jdGlvbiBKNih0LGUpe3kudHlwZU9mLm9iamVjdCgidHJhbnNjb2Rlck1vZHVsZSIsZ3UpO2xldCBuPXQua3R4MkJ1ZmZlcixvPXQuc3VwcG9ydGVkVGFyZ2V0Rm9ybWF0cyxyO3RyeXtyPXhTKG4pfWNhdGNoe3Rocm93IG5ldyBnZSgiSW52YWxpZCBLVFgyIGZpbGUuIil9aWYoci5sYXllckNvdW50IT09MCl0aHJvdyBuZXcgZ2UoIktUWDIgdGV4dHVyZSBhcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQuIik7aWYoci5waXhlbERlcHRoIT09MCl0aHJvdyBuZXcgZ2UoIktUWDIgM0QgdGV4dHVyZXMgYXJlIHVuc3VwcG9ydGVkLiIpO2xldCBpPXIuZGF0YUZvcm1hdERlc2NyaXB0b3JbMF0scz1uZXcgQXJyYXkoci5sZXZlbENvdW50KTtyZXR1cm4gci52a0Zvcm1hdD09PTAmJihpLmNvbG9yTW9kZWw9PT12U3x8aS5jb2xvck1vZGVsPT09RFMpP2U4KG4scixvLGd1LGUscyk6KGUucHVzaChuLmJ1ZmZlciksdDgocixzKSksc31mdW5jdGlvbiB0OCh0LGUpe2xldCBuPXQudmtGb3JtYXQ9PT15dS5WS19GT1JNQVRfUjhHOEI4X1NSR0I/Qm4uUkdCOkJuLlJHQkEsbzt0LnZrRm9ybWF0PT09eXUuVktfRk9STUFUX1I4RzhCOEE4X1VOT1JNP289em8uVU5TSUdORURfQllURTp0LnZrRm9ybWF0PT09eXUuVktfRk9STUFUX1IxNkcxNkIxNkExNl9TRkxPQVQ/bz16by5IQUxGX0ZMT0FUOnQudmtGb3JtYXQ9PT15dS5WS19GT1JNQVRfUjMyRzMyQjMyQTMyX1NGTE9BVCYmKG89em8uRkxPQVQpO2ZvcihsZXQgcj0wO3I8dC5sZXZlbHMubGVuZ3RoOysrcil7bGV0IGk9e307ZVtyXT1pO2xldCBzPXQubGV2ZWxzW3JdLmxldmVsRGF0YSxmPXQucGl4ZWxXaWR0aD4+cix1PXQucGl4ZWxIZWlnaHQ+PnIsYz1mKnUqQm4uY29tcG9uZW50c0xlbmd0aChuKTtmb3IobGV0IGw9MDtsPHQuZmFjZUNvdW50OysrbCl7bGV0IHA9cy5ieXRlT2Zmc2V0K2MqdC50eXBlU2l6ZSpsLGQ7IWgobyl8fHpvLnNpemVJbkJ5dGVzKG8pPT09MT9kPW5ldyBVaW50OEFycmF5KHMuYnVmZmVyLHAsYyk6em8uc2l6ZUluQnl0ZXMobyk9PT0yP2Q9bmV3IFVpbnQxNkFycmF5KHMuYnVmZmVyLHAsYyk6ZD1uZXcgRmxvYXQzMkFycmF5KHMuYnVmZmVyLHAsYyksaVtJU1tsXV09e2ludGVybmFsRm9ybWF0Om4sZGF0YXR5cGU6byx3aWR0aDpmLGhlaWdodDp1LGxldmVsQnVmZmVyOmR9fX19ZnVuY3Rpb24gZTgodCxlLG4sbyxyLGkpe2xldCBzPW5ldyBvLktUWDJGaWxlKHQpLGY9cy5nZXRXaWR0aCgpLHU9cy5nZXRIZWlnaHQoKSxjPXMuZ2V0TGV2ZWxzKCksbD1zLmdldEhhc0FscGhhKCk7aWYoIShmPjApfHwhKHU+MCl8fCEoYz4wKSl0aHJvdyBzLmNsb3NlKCkscy5kZWxldGUoKSxuZXcgZ2UoIkludmFsaWQgS1RYMiBmaWxlIik7bGV0IHAsZCxtPWUuZGF0YUZvcm1hdERlc2NyaXB0b3JbMF0sXz1vLnRyYW5zY29kZXJfdGV4dHVyZV9mb3JtYXQ7aWYobS5jb2xvck1vZGVsPT09dlMpaWYobi5ldGMpcD1sP0JuLlJHQkE4X0VUQzJfRUFDOkJuLlJHQjhfRVRDMixkPWw/Xy5jVEZFVEMyX1JHQkE6Xy5jVEZFVEMxX1JHQjtlbHNlIGlmKG4uZXRjMSYmIWwpcD1Cbi5SR0JfRVRDMSxkPV8uY1RGRVRDMV9SR0I7ZWxzZSBpZihuLnMzdGMpcD1sP0JuLlJHQkFfRFhUNTpCbi5SR0JfRFhUMSxkPWw/Xy5jVEZCQzNfUkdCQTpfLmNURkJDMV9SR0I7ZWxzZSBpZihuLnB2cnRjKXA9bD9Cbi5SR0JBX1BWUlRDXzRCUFBWMTpCbi5SR0JfUFZSVENfNEJQUFYxLGQ9bD9fLmNURlBWUlRDMV80X1JHQkE6Xy5jVEZQVlJUQzFfNF9SR0I7ZWxzZSBpZihuLmFzdGMpcD1Cbi5SR0JBX0FTVEMsZD1fLmNURkFTVENfNHg0X1JHQkE7ZWxzZSBpZihuLmJjNylwPUJuLlJHQkFfQkM3LGQ9Xy5jVEZCQzdfUkdCQTtlbHNlIHRocm93IG5ldyBnZSgiTm8gdHJhbnNjb2RpbmcgZm9ybWF0IHRhcmdldCBhdmFpbGFibGUgZm9yIEVUQzFTIGNvbXByZXNzZWQga3R4Mi4iKTtlbHNlIGlmKG0uY29sb3JNb2RlbD09PURTKWlmKG4uYXN0YylwPUJuLlJHQkFfQVNUQyxkPV8uY1RGQVNUQ180eDRfUkdCQTtlbHNlIGlmKG4uYmM3KXA9Qm4uUkdCQV9CQzcsZD1fLmNURkJDN19SR0JBO2Vsc2UgaWYobi5zM3RjKXA9bD9Cbi5SR0JBX0RYVDU6Qm4uUkdCX0RYVDEsZD1sP18uY1RGQkMzX1JHQkE6Xy5jVEZCQzFfUkdCO2Vsc2UgaWYobi5ldGMpcD1sP0JuLlJHQkE4X0VUQzJfRUFDOkJuLlJHQjhfRVRDMixkPWw/Xy5jVEZFVEMyX1JHQkE6Xy5jVEZFVEMxX1JHQjtlbHNlIGlmKG4uZXRjMSYmIWwpcD1Cbi5SR0JfRVRDMSxkPV8uY1RGRVRDMV9SR0I7ZWxzZSBpZihuLnB2cnRjKXA9bD9Cbi5SR0JBX1BWUlRDXzRCUFBWMTpCbi5SR0JfUFZSVENfNEJQUFYxLGQ9bD9fLmNURlBWUlRDMV80X1JHQkE6Xy5jVEZQVlJUQzFfNF9SR0I7ZWxzZSB0aHJvdyBuZXcgZ2UoIk5vIHRyYW5zY29kaW5nIGZvcm1hdCB0YXJnZXQgYXZhaWxhYmxlIGZvciBVQVNUQyBjb21wcmVzc2VkIGt0eDIuIik7aWYoIXMuc3RhcnRUcmFuc2NvZGluZygpKXRocm93IHMuY2xvc2UoKSxzLmRlbGV0ZSgpLG5ldyBnZSgic3RhcnRUcmFuc2NvZGluZygpIGZhaWxlZCIpO2ZvcihsZXQgZz0wO2c8ZS5sZXZlbHMubGVuZ3RoOysrZyl7bGV0IGI9e307aVtnXT1iLGY9ZS5waXhlbFdpZHRoPj5nLHU9ZS5waXhlbEhlaWdodD4+ZztsZXQgTz1zLmdldEltYWdlVHJhbnNjb2RlZFNpemVJbkJ5dGVzKGcsMCwwLGQudmFsdWUpLFQ9bmV3IFVpbnQ4QXJyYXkoTyksRT1zLnRyYW5zY29kZUltYWdlKFQsZywwLDAsZC52YWx1ZSwwLC0xLC0xKTtpZighaChFKSl0aHJvdyBuZXcgZ2UoInRyYW5zY29kZUltYWdlKCkgZmFpbGVkLiIpO3IucHVzaChULmJ1ZmZlciksYltJU1swXV09e2ludGVybmFsRm9ybWF0OnAsd2lkdGg6ZixoZWlnaHQ6dSxsZXZlbEJ1ZmZlcjpUfX1yZXR1cm4gcy5jbG9zZSgpLHMuZGVsZXRlKCksaX1hc3luYyBmdW5jdGlvbiBuOCh0LGUpe2xldCBuPXQud2ViQXNzZW1ibHlDb25maWcsbz14KE5TLmRlZmF1bHQsc2VsZi5CQVNJUyk7cmV0dXJuIGgobi53YXNtQmluYXJ5RmlsZSk/Z3U9YXdhaXQgbyhuKTpndT1hd2FpdCBvKCksZ3UuaW5pdGlhbGl6ZUJhc2lzKCksITB9ZnVuY3Rpb24gbzgodCxlKXtsZXQgbj10LndlYkFzc2VtYmx5Q29uZmlnO3JldHVybiBoKG4pP244KHQsZSk6SjYodCxlKX12YXIgTlMsSVMsdlMsRFMsZ3UscjgsWGc9WigoKT0+e0l0KCk7YXQoKTtZdCgpO1JTKCk7SnIoKTtTUygpO2pnKCk7c28oKTtQUygpO05TPW1vKE1TKCksMSksSVM9WyJwb3NpdGl2ZVgiLCJuZWdhdGl2ZVgiLCJwb3NpdGl2ZVkiLCJuZWdhdGl2ZVkiLCJwb3NpdGl2ZVoiLCJuZWdhdGl2ZVoiXSx2Uz0xNjMsRFM9MTY2O3I4PVFlKG84KX0pO3ZhciBMUz17fTt2YXIgWWc9WigoKT0+e3NlbGYub25tZXNzYWdlPWZ1bmN0aW9uKHQpe2xldCBlPXQuZGF0YS5hcnJheSxuPXNlbGYud2Via2l0UG9zdE1lc3NhZ2V8fHNlbGYucG9zdE1lc3NhZ2U7dHJ5e24oe2FycmF5OmV9LFtlLmJ1ZmZlcl0pfWNhdGNoe24oe30pfX19KTt2YXIgZG0sbW0sRlM9WigoKT0+e3plKCk7VXQoKTtZdCgpO2F0KCk7SHQoKTtkbT17fTtkbS5jbGlwVHJpYW5nbGVBdEF4aXNBbGlnbmVkVGhyZXNob2xkPWZ1bmN0aW9uKHQsZSxuLG8scixpKXtpZighaCh0KSl0aHJvdyBuZXcgQigidGhyZXNob2xkIGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBCKCJrZWVwQWJvdmUgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEIoInUwIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG8pKXRocm93IG5ldyBCKCJ1MSBpcyByZXF1aXJlZC4iKTtpZighaChyKSl0aHJvdyBuZXcgQigidTIgaXMgcmVxdWlyZWQuIik7aChpKT9pLmxlbmd0aD0wOmk9W107bGV0IHMsZix1O2U/KHM9bjx0LGY9bzx0LHU9cjx0KToocz1uPnQsZj1vPnQsdT1yPnQpO2xldCBjPXMrZit1LGwscCxkLG0sXyxnO3JldHVybiBjPT09MT9zPyhsPSh0LW4pLyhvLW4pLHA9KHQtbikvKHItbiksaS5wdXNoKDEpLGkucHVzaCgyKSxwIT09MSYmKGkucHVzaCgtMSksaS5wdXNoKDApLGkucHVzaCgyKSxpLnB1c2gocCkpLGwhPT0xJiYoaS5wdXNoKC0xKSxpLnB1c2goMCksaS5wdXNoKDEpLGkucHVzaChsKSkpOmY/KGQ9KHQtbykvKHItbyksbT0odC1vKS8obi1vKSxpLnB1c2goMiksaS5wdXNoKDApLG0hPT0xJiYoaS5wdXNoKC0xKSxpLnB1c2goMSksaS5wdXNoKDApLGkucHVzaChtKSksZCE9PTEmJihpLnB1c2goLTEpLGkucHVzaCgxKSxpLnB1c2goMiksaS5wdXNoKGQpKSk6dSYmKF89KHQtcikvKG4tciksZz0odC1yKS8oby1yKSxpLnB1c2goMCksaS5wdXNoKDEpLGchPT0xJiYoaS5wdXNoKC0xKSxpLnB1c2goMiksaS5wdXNoKDEpLGkucHVzaChnKSksXyE9PTEmJihpLnB1c2goLTEpLGkucHVzaCgyKSxpLnB1c2goMCksaS5wdXNoKF8pKSk6Yz09PTI/IXMmJm4hPT10PyhtPSh0LW8pLyhuLW8pLF89KHQtcikvKG4tciksaS5wdXNoKDApLGkucHVzaCgtMSksaS5wdXNoKDEpLGkucHVzaCgwKSxpLnB1c2gobSksaS5wdXNoKC0xKSxpLnB1c2goMiksaS5wdXNoKDApLGkucHVzaChfKSk6IWYmJm8hPT10PyhnPSh0LXIpLyhvLXIpLGw9KHQtbikvKG8tbiksaS5wdXNoKDEpLGkucHVzaCgtMSksaS5wdXNoKDIpLGkucHVzaCgxKSxpLnB1c2goZyksaS5wdXNoKC0xKSxpLnB1c2goMCksaS5wdXNoKDEpLGkucHVzaChsKSk6IXUmJnIhPT10JiYocD0odC1uKS8oci1uKSxkPSh0LW8pLyhyLW8pLGkucHVzaCgyKSxpLnB1c2goLTEpLGkucHVzaCgwKSxpLnB1c2goMiksaS5wdXNoKHApLGkucHVzaCgtMSksaS5wdXNoKDEpLGkucHVzaCgyKSxpLnB1c2goZCkpOmMhPT0zJiYoaS5wdXNoKDApLGkucHVzaCgxKSxpLnB1c2goMikpLGl9O2RtLmNvbXB1dGVCYXJ5Y2VudHJpY0Nvb3JkaW5hdGVzPWZ1bmN0aW9uKHQsZSxuLG8scixpLHMsZix1KXtpZighaCh0KSl0aHJvdyBuZXcgQigieCBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgQigieSBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgQigieDEgaXMgcmVxdWlyZWQuIik7aWYoIWgobykpdGhyb3cgbmV3IEIoInkxIGlzIHJlcXVpcmVkLiIpO2lmKCFoKHIpKXRocm93IG5ldyBCKCJ4MiBpcyByZXF1aXJlZC4iKTtpZighaChpKSl0aHJvdyBuZXcgQigieTIgaXMgcmVxdWlyZWQuIik7aWYoIWgocykpdGhyb3cgbmV3IEIoIngzIGlzIHJlcXVpcmVkLiIpO2lmKCFoKGYpKXRocm93IG5ldyBCKCJ5MyBpcyByZXF1aXJlZC4iKTtsZXQgYz1uLXMsbD1zLXIscD1pLWYsZD1vLWYsbT0xLyhwKmMrbCpkKSxfPWUtZixnPXQtcyxiPShwKmcrbCpfKSptLE89KC1kKmcrYypfKSptLFQ9MS1iLU87cmV0dXJuIGgodSk/KHUueD1iLHUueT1PLHUuej1ULHUpOm5ldyBhKGIsTyxUKX07ZG0uY29tcHV0ZUxpbmVTZWdtZW50TGluZVNlZ21lbnRJbnRlcnNlY3Rpb249ZnVuY3Rpb24odCxlLG4sbyxyLGkscyxmLHUpe3kudHlwZU9mLm51bWJlcigieDAwIix0KSx5LnR5cGVPZi5udW1iZXIoInkwMCIsZSkseS50eXBlT2YubnVtYmVyKCJ4MDEiLG4pLHkudHlwZU9mLm51bWJlcigieTAxIixvKSx5LnR5cGVPZi5udW1iZXIoIngxMCIscikseS50eXBlT2YubnVtYmVyKCJ5MTAiLGkpLHkudHlwZU9mLm51bWJlcigieDExIixzKSx5LnR5cGVPZi5udW1iZXIoInkxMSIsZik7bGV0IGM9KHMtcikqKGUtaSktKGYtaSkqKHQtciksbD0obi10KSooZS1pKS0oby1lKSoodC1yKSxwPShmLWkpKihuLXQpLShzLXIpKihvLWUpO2lmKHA9PT0wKXJldHVybjtsZXQgZD1jL3AsbT1sL3A7aWYoZD49MCYmZDw9MSYmbT49MCYmbTw9MSlyZXR1cm4gaCh1KXx8KHU9bmV3IG50KSx1Lng9dCtkKihuLXQpLHUueT1lK2QqKG8tZSksdX07bW09ZG19KTt2YXIgJGc9e307bWUoJGcse2RlZmF1bHQ6KCk9PmI4fSk7ZnVuY3Rpb24geTgodCxlKXtsZXQgbj10LmlzRWFzdENoaWxkLG89dC5pc05vcnRoQ2hpbGQscj1uPyRyOjAsaT1uP3puOiRyLHM9bz8kcjowLGY9bz96bjokcix1PWM4LGM9YTgsbD1mOCxwPWw4O3UubGVuZ3RoPTAsYy5sZW5ndGg9MCxsLmxlbmd0aD0wLHAubGVuZ3RoPTA7bGV0IGQ9dTg7ZC5sZW5ndGg9MDtsZXQgbT17fSxfPXQudmVydGljZXMsZz10LmluZGljZXM7Zz1nLnN1YmFycmF5KDAsdC5pbmRleENvdW50V2l0aG91dFNraXJ0cyk7bGV0IGI9eHMuY2xvbmUodC5lbmNvZGluZyksTz1iLmhhc1ZlcnRleE5vcm1hbHMsVD0wLEU9dC52ZXJ0ZXhDb3VudFdpdGhvdXRTa2lydHMsdz10Lm1pbmltdW1IZWlnaHQsQz10Lm1heGltdW1IZWlnaHQsTj1uZXcgQXJyYXkoRSksST1uZXcgQXJyYXkoRSksTD1uZXcgQXJyYXkoRSksdj1PP25ldyBBcnJheShFKjIpOnZvaWQgMCxEPTIwLFUsQSxTLFAsRjtmb3IoQT0wLFM9MDtBPEU7KytBLFMrPTIpe2xldCBVZT1iLmRlY29kZVRleHR1cmVDb29yZGluYXRlcyhfLEEsaDgpO2lmKFU9Yi5kZWNvZGVIZWlnaHQoXyxBKSxQPU0uY2xhbXAoVWUueCp6bnwwLDAsem4pLEY9TS5jbGFtcChVZS55KnpufDAsMCx6biksTFtBXT1NLmNsYW1wKChVLXcpLyhDLXcpKnpufDAsMCx6biksUDxEJiYoUD0wKSxGPEQmJihGPTApLHpuLVA8RCYmKFA9em4pLHpuLUY8RCYmKEY9em4pLE5bQV09UCxJW0FdPUYsTyl7bGV0IGJlPWIuZ2V0T2N0RW5jb2RlZE5vcm1hbChfLEEsXzgpO3ZbU109YmUueCx2W1MrMV09YmUueX0obiYmUD49JHJ8fCFuJiZQPD0kcikmJihvJiZGPj0kcnx8IW8mJkY8PSRyKSYmKG1bQV09VCx1LnB1c2goUCksYy5wdXNoKEYpLGwucHVzaChMW0FdKSxPJiYocC5wdXNoKHZbU10pLHAucHVzaCh2W1MrMV0pKSwrK1QpfWxldCBqPVtdO2oucHVzaChuZXcgam4pLGoucHVzaChuZXcgam4pLGoucHVzaChuZXcgam4pO2xldCBIPVtdO0gucHVzaChuZXcgam4pLEgucHVzaChuZXcgam4pLEgucHVzaChuZXcgam4pO2xldCBrLEs7Zm9yKEE9MDtBPGcubGVuZ3RoO0ErPTMpe2xldCBVZT1nW0FdLGJlPWdbQSsxXSxsbj1nW0ErMl0scG49TltVZV0sVG49TltiZV0sb2U9Tltsbl07alswXS5pbml0aWFsaXplSW5kZXhlZChOLEksTCx2LFVlKSxqWzFdLmluaXRpYWxpemVJbmRleGVkKE4sSSxMLHYsYmUpLGpbMl0uaW5pdGlhbGl6ZUluZGV4ZWQoTixJLEwsdixsbik7bGV0ICR0PW1tLmNsaXBUcmlhbmdsZUF0QXhpc0FsaWduZWRUaHJlc2hvbGQoJHIsbixwbixUbixvZSxpOCk7az0wLCEoaz49JHQubGVuZ3RoKSYmKGs9SFswXS5pbml0aWFsaXplRnJvbUNsaXBSZXN1bHQoJHQsayxqKSwhKGs+PSR0Lmxlbmd0aCkmJihrPUhbMV0uaW5pdGlhbGl6ZUZyb21DbGlwUmVzdWx0KCR0LGssaiksIShrPj0kdC5sZW5ndGgpJiYoaz1IWzJdLmluaXRpYWxpemVGcm9tQ2xpcFJlc3VsdCgkdCxrLGopLEs9bW0uY2xpcFRyaWFuZ2xlQXRBeGlzQWxpZ25lZFRocmVzaG9sZCgkcixvLEhbMF0uZ2V0VigpLEhbMV0uZ2V0VigpLEhbMl0uZ2V0VigpLEJTKSxVUyh1LGMsbCxwLGQsbSxLLEgsTyksazwkdC5sZW5ndGgmJihIWzJdLmNsb25lKEhbMV0pLEhbMl0uaW5pdGlhbGl6ZUZyb21DbGlwUmVzdWx0KCR0LGssaiksSz1tbS5jbGlwVHJpYW5nbGVBdEF4aXNBbGlnbmVkVGhyZXNob2xkKCRyLG8sSFswXS5nZXRWKCksSFsxXS5nZXRWKCksSFsyXS5nZXRWKCksQlMpLFVTKHUsYyxsLHAsZCxtLEssSCxPKSkpKSl9bGV0IFg9bj8tem46MCxSPW8/LXpuOjAsUT1bXSxmdD1bXSxwdD1bXSxndD1bXSxpdD1OdW1iZXIuTUFYX1ZBTFVFLE50PS1pdCxPdD1zODtPdC5sZW5ndGg9MDtsZXQgeHQ9JC5jbG9uZSh0LmVsbGlwc29pZCksX3Q9UHQuY2xvbmUodC5jaGlsZFJlY3RhbmdsZSksZHQ9X3Qubm9ydGgsVnQ9X3Quc291dGgsenQ9X3QuZWFzdCxoZT1fdC53ZXN0O2Zvcih6dDxoZSYmKHp0Kz1NLlRXT19QSSksQT0wO0E8dS5sZW5ndGg7KytBKVA9TWF0aC5yb3VuZCh1W0FdKSxQPD1yPyhRLnB1c2goQSksUD0wKTpQPj1pPyhwdC5wdXNoKEEpLFA9em4pOlA9UCoyK1gsdVtBXT1QLEY9TWF0aC5yb3VuZChjW0FdKSxGPD1zPyhmdC5wdXNoKEEpLEY9MCk6Rj49Zj8oZ3QucHVzaChBKSxGPXpuKTpGPUYqMitSLGNbQV09RixVPU0ubGVycCh3LEMsbFtBXS96biksVTxpdCYmKGl0PVUpLFU+TnQmJihOdD1VKSxsW0FdPVUsaG0ubG9uZ2l0dWRlPU0ubGVycChoZSx6dCxQL3puKSxobS5sYXRpdHVkZT1NLmxlcnAoVnQsZHQsRi96biksaG0uaGVpZ2h0PVUseHQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oaG0sV2kpLE90LnB1c2goV2kueCksT3QucHVzaChXaS55KSxPdC5wdXNoKFdpLnopO2xldCBjZT15dC5mcm9tVmVydGljZXMoT3QsYS5aRVJPLDMsZDgpLHBlPUNvLmZyb21SZWN0YW5nbGUoX3QsaXQsTnQseHQsbTgpLFF0PW5ldyBDcyh4dCkuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnRGcm9tVmVydGljZXNQb3NzaWJseVVuZGVyRWxsaXBzb2lkKGNlLmNlbnRlcixPdCwzLGNlLmNlbnRlcixpdCxwOCksSnQ9TnQtaXQseGU9bmV3IFVpbnQxNkFycmF5KHUubGVuZ3RoK2MubGVuZ3RoK2wubGVuZ3RoKTtmb3IoQT0wO0E8dS5sZW5ndGg7KytBKXhlW0FdPXVbQV07bGV0IEFlPXUubGVuZ3RoO2ZvcihBPTA7QTxjLmxlbmd0aDsrK0EpeGVbQWUrQV09Y1tBXTtmb3IoQWUrPWMubGVuZ3RoLEE9MDtBPGwubGVuZ3RoOysrQSl4ZVtBZStBXT16bioobFtBXS1pdCkvSnQ7bGV0IEVlPUR0LmNyZWF0ZVR5cGVkQXJyYXkodS5sZW5ndGgsZCksdW47aWYoTyl7bGV0IFVlPW5ldyBVaW50OEFycmF5KHApO2UucHVzaCh4ZS5idWZmZXIsRWUuYnVmZmVyLFVlLmJ1ZmZlciksdW49VWUuYnVmZmVyfWVsc2UgZS5wdXNoKHhlLmJ1ZmZlcixFZS5idWZmZXIpO3JldHVybnt2ZXJ0aWNlczp4ZS5idWZmZXIsZW5jb2RlZE5vcm1hbHM6dW4saW5kaWNlczpFZS5idWZmZXIsbWluaW11bUhlaWdodDppdCxtYXhpbXVtSGVpZ2h0Ok50LHdlc3RJbmRpY2VzOlEsc291dGhJbmRpY2VzOmZ0LGVhc3RJbmRpY2VzOnB0LG5vcnRoSW5kaWNlczpndCxib3VuZGluZ1NwaGVyZTpjZSxvcmllbnRlZEJvdW5kaW5nQm94OnBlLGhvcml6b25PY2NsdXNpb25Qb2ludDpRdH19ZnVuY3Rpb24gam4oKXt0aGlzLnZlcnRleEJ1ZmZlcj12b2lkIDAsdGhpcy5pbmRleD12b2lkIDAsdGhpcy5maXJzdD12b2lkIDAsdGhpcy5zZWNvbmQ9dm9pZCAwLHRoaXMucmF0aW89dm9pZCAwfWZ1bmN0aW9uIFZTKHQsZSl7KytfbTtsZXQgbj1nOFtfbV0sbz1BOFtfbV07cmV0dXJuIG49bm4ub2N0RGVjb2RlKHQuZmlyc3QuZ2V0Tm9ybWFsWCgpLHQuZmlyc3QuZ2V0Tm9ybWFsWSgpLG4pLG89bm4ub2N0RGVjb2RlKHQuc2Vjb25kLmdldE5vcm1hbFgoKSx0LnNlY29uZC5nZXROb3JtYWxZKCksbyksV2k9YS5sZXJwKG4sbyx0LnJhdGlvLFdpKSxhLm5vcm1hbGl6ZShXaSxXaSksbm4ub2N0RW5jb2RlKFdpLGUpLC0tX20sZX1mdW5jdGlvbiBVUyh0LGUsbixvLHIsaSxzLGYsdSl7aWYocy5sZW5ndGg9PT0wKXJldHVybjtsZXQgYz0wLGw9MDtmb3IoO2w8cy5sZW5ndGg7KWw9SG9bYysrXS5pbml0aWFsaXplRnJvbUNsaXBSZXN1bHQocyxsLGYpO2ZvcihsZXQgcD0wO3A8YzsrK3Ape2xldCBkPUhvW3BdO2lmKGQuaXNJbmRleGVkKCkpZC5uZXdJbmRleD1pW2QuaW5kZXhdLGQudUJ1ZmZlcj10LGQudkJ1ZmZlcj1lLGQuaGVpZ2h0QnVmZmVyPW4sdSYmKGQubm9ybWFsQnVmZmVyPW8pO2Vsc2V7bGV0IG09ZC5nZXRLZXkoKTtpZihoKGlbbV0pKWQubmV3SW5kZXg9aVttXTtlbHNle2xldCBfPXQubGVuZ3RoO3QucHVzaChkLmdldFUoKSksZS5wdXNoKGQuZ2V0VigpKSxuLnB1c2goZC5nZXRIKCkpLHUmJihvLnB1c2goZC5nZXROb3JtYWxYKCkpLG8ucHVzaChkLmdldE5vcm1hbFkoKSkpLGQubmV3SW5kZXg9XyxpW21dPV99fX1jPT09Mz8oci5wdXNoKEhvWzBdLm5ld0luZGV4KSxyLnB1c2goSG9bMV0ubmV3SW5kZXgpLHIucHVzaChIb1syXS5uZXdJbmRleCkpOmM9PT00JiYoci5wdXNoKEhvWzBdLm5ld0luZGV4KSxyLnB1c2goSG9bMV0ubmV3SW5kZXgpLHIucHVzaChIb1syXS5uZXdJbmRleCksci5wdXNoKEhvWzBdLm5ld0luZGV4KSxyLnB1c2goSG9bMl0ubmV3SW5kZXgpLHIucHVzaChIb1szXS5uZXdJbmRleCkpfXZhciB6biwkcixpOCxCUyxzOCxobSxXaSxjOCxhOCxmOCx1OCxsOCxwOCxkOCxtOCxoOCxfOCxxYSxfbSxnOCxBOCxIbyxiOCxaZz1aKCgpPT57c3MoKTtQZSgpO3plKCk7VXQoKTt2ZSgpO2F0KCk7WnQoKTtzdSgpOyRlKCk7RlMoKTtXdCgpO2RhKCk7QW4oKTtjdSgpO3NvKCk7em49MzI3NjcsJHI9em4vMnwwLGk4PVtdLEJTPVtdLHM4PVtdLGhtPW5ldyBjdCxXaT1uZXcgYSxjOD1bXSxhOD1bXSxmOD1bXSx1OD1bXSxsOD1bXSxwOD1uZXcgYSxkOD1uZXcgeXQsbTg9bmV3IENvLGg4PW5ldyBudCxfOD1uZXcgYTtqbi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIGgodCl8fCh0PW5ldyBqbiksdC51QnVmZmVyPXRoaXMudUJ1ZmZlcix0LnZCdWZmZXI9dGhpcy52QnVmZmVyLHQuaGVpZ2h0QnVmZmVyPXRoaXMuaGVpZ2h0QnVmZmVyLHQubm9ybWFsQnVmZmVyPXRoaXMubm9ybWFsQnVmZmVyLHQuaW5kZXg9dGhpcy5pbmRleCx0LmZpcnN0PXRoaXMuZmlyc3QsdC5zZWNvbmQ9dGhpcy5zZWNvbmQsdC5yYXRpbz10aGlzLnJhdGlvLHR9O2puLnByb3RvdHlwZS5pbml0aWFsaXplSW5kZXhlZD1mdW5jdGlvbih0LGUsbixvLHIpe3RoaXMudUJ1ZmZlcj10LHRoaXMudkJ1ZmZlcj1lLHRoaXMuaGVpZ2h0QnVmZmVyPW4sdGhpcy5ub3JtYWxCdWZmZXI9byx0aGlzLmluZGV4PXIsdGhpcy5maXJzdD12b2lkIDAsdGhpcy5zZWNvbmQ9dm9pZCAwLHRoaXMucmF0aW89dm9pZCAwfTtqbi5wcm90b3R5cGUuaW5pdGlhbGl6ZUZyb21DbGlwUmVzdWx0PWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz1lKzE7cmV0dXJuIHRbZV0hPT0tMT9uW3RbZV1dLmNsb25lKHRoaXMpOih0aGlzLnZlcnRleEJ1ZmZlcj12b2lkIDAsdGhpcy5pbmRleD12b2lkIDAsdGhpcy5maXJzdD1uW3Rbb11dLCsrbyx0aGlzLnNlY29uZD1uW3Rbb11dLCsrbyx0aGlzLnJhdGlvPXRbb10sKytvKSxvfTtqbi5wcm90b3R5cGUuZ2V0S2V5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmRleGVkKCk/dGhpcy5pbmRleDpKU09OLnN0cmluZ2lmeSh7Zmlyc3Q6dGhpcy5maXJzdC5nZXRLZXkoKSxzZWNvbmQ6dGhpcy5zZWNvbmQuZ2V0S2V5KCkscmF0aW86dGhpcy5yYXRpb30pfTtqbi5wcm90b3R5cGUuaXNJbmRleGVkPWZ1bmN0aW9uKCl7cmV0dXJuIGgodGhpcy5pbmRleCl9O2puLnByb3RvdHlwZS5nZXRIPWZ1bmN0aW9uKCl7cmV0dXJuIGgodGhpcy5pbmRleCk/dGhpcy5oZWlnaHRCdWZmZXJbdGhpcy5pbmRleF06TS5sZXJwKHRoaXMuZmlyc3QuZ2V0SCgpLHRoaXMuc2Vjb25kLmdldEgoKSx0aGlzLnJhdGlvKX07am4ucHJvdG90eXBlLmdldFU9ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzLmluZGV4KT90aGlzLnVCdWZmZXJbdGhpcy5pbmRleF06TS5sZXJwKHRoaXMuZmlyc3QuZ2V0VSgpLHRoaXMuc2Vjb25kLmdldFUoKSx0aGlzLnJhdGlvKX07am4ucHJvdG90eXBlLmdldFY9ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzLmluZGV4KT90aGlzLnZCdWZmZXJbdGhpcy5pbmRleF06TS5sZXJwKHRoaXMuZmlyc3QuZ2V0VigpLHRoaXMuc2Vjb25kLmdldFYoKSx0aGlzLnJhdGlvKX07cWE9bmV3IG50LF9tPS0xLGc4PVtuZXcgYSxuZXcgYV0sQTg9W25ldyBhLG5ldyBhXTtqbi5wcm90b3R5cGUuZ2V0Tm9ybWFsWD1mdW5jdGlvbigpe3JldHVybiBoKHRoaXMuaW5kZXgpP3RoaXMubm9ybWFsQnVmZmVyW3RoaXMuaW5kZXgqMl06KHFhPVZTKHRoaXMscWEpLHFhLngpfTtqbi5wcm90b3R5cGUuZ2V0Tm9ybWFsWT1mdW5jdGlvbigpe3JldHVybiBoKHRoaXMuaW5kZXgpP3RoaXMubm9ybWFsQnVmZmVyW3RoaXMuaW5kZXgqMisxXToocWE9VlModGhpcyxxYSkscWEueSl9O0hvPVtdO0hvLnB1c2gobmV3IGpuKTtIby5wdXNoKG5ldyBqbik7SG8ucHVzaChuZXcgam4pO0hvLnB1c2gobmV3IGpuKTtiOD1RZSh5OCl9KTt2YXIgRWx0LFFnPVooKCk9PntFbHQ9aTEoeyIuL2NvbWJpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihRaCgpLFpoKSksIi4vY3JlYXRlQm94R2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4objAoKSxlMCkpLCIuL2NyZWF0ZUJveE91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihpMCgpLHIwKSksIi4vY3JlYXRlQ2lyY2xlR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oaDAoKSxtMCkpLCIuL2NyZWF0ZUNpcmNsZU91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihBMCgpLGcwKSksIi4vY3JlYXRlQ29wbGFuYXJQb2x5Z29uR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oSTAoKSxOMCkpLCIuL2NyZWF0ZUNvcGxhbmFyUG9seWdvbk91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihMMCgpLEQwKSksIi4vY3JlYXRlQ29ycmlkb3JHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PigkMCgpLFkwKSksIi4vY3JlYXRlQ29ycmlkb3JPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oSjAoKSxRMCkpLCIuL2NyZWF0ZUN5bGluZGVyR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oaV8oKSxyXykpLCIuL2NyZWF0ZUN5bGluZGVyT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGZfKCksYV8pKSwiLi9jcmVhdGVFbGxpcHNlR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4obF8oKSx1XykpLCIuL2NyZWF0ZUVsbGlwc2VPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oZF8oKSxwXykpLCIuL2NyZWF0ZUVsbGlwc29pZEdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KF9fKCksaF8pKSwiLi9jcmVhdGVFbGxpcHNvaWRPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oQV8oKSxnXykpLCIuL2NyZWF0ZUZydXN0dW1HZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pih4XygpLENfKSksIi4vY3JlYXRlRnJ1c3R1bU91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihJXygpLE5fKSksIi4vY3JlYXRlR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4odDEoKSxKZykpLCIuL2NyZWF0ZUdyb3VuZFBvbHlsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4ocV8oKSxIXykpLCIuL2NyZWF0ZVBsYW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oWF8oKSxXXykpLCIuL2NyZWF0ZVBsYW5lT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFpfKCksJF8pKSwiLi9jcmVhdGVQb2x5Z29uR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oZXkoKSx0eSkpLCIuL2NyZWF0ZVBvbHlnb25PdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4ocnkoKSxveSkpLCIuL2NyZWF0ZVBvbHlsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4odXkoKSxmeSkpLCIuL2NyZWF0ZVBvbHlsaW5lVm9sdW1lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oZHkoKSxweSkpLCIuL2NyZWF0ZVBvbHlsaW5lVm9sdW1lT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KF95KCksaHkpKSwiLi9jcmVhdGVSZWN0YW5nbGVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihTeSgpLFJ5KSksIi4vY3JlYXRlUmVjdGFuZ2xlT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFB5KCkseHkpKSwiLi9jcmVhdGVTaW1wbGVQb2x5bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEl5KCksTnkpKSwiLi9jcmVhdGVTcGhlcmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihMeSgpLER5KSksIi4vY3JlYXRlU3BoZXJlT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFV5KCksQnkpKSwiLi9jcmVhdGVUYXNrUHJvY2Vzc29yV29ya2VyLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHNvKCksJGgpKSwiLi9jcmVhdGVWZWN0b3JUaWxlQ2xhbXBlZFBvbHlsaW5lcy5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihreSgpLFZ5KSksIi4vY3JlYXRlVmVjdG9yVGlsZUdlb21ldHJpZXMuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oenkoKSxHeSkpLCIuL2NyZWF0ZVZlY3RvclRpbGVQb2ludHMuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4ocXkoKSxIeSkpLCIuL2NyZWF0ZVZlY3RvclRpbGVQb2x5Z29ucy5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihXeSgpLEt5KSksIi4vY3JlYXRlVmVjdG9yVGlsZVBvbHlsaW5lcy5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PigkeSgpLFl5KSksIi4vY3JlYXRlVmVydGljZXNGcm9tR29vZ2xlRWFydGhFbnRlcnByaXNlQnVmZmVyLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGVnKCksdGcpKSwiLi9jcmVhdGVWZXJ0aWNlc0Zyb21IZWlnaHRtYXAuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4ocmcoKSxvZykpLCIuL2NyZWF0ZVZlcnRpY2VzRnJvbVF1YW50aXplZFRlcnJhaW5NZXNoLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGNnKCksc2cpKSwiLi9jcmVhdGVXYWxsR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4ocGcoKSxsZykpLCIuL2NyZWF0ZVdhbGxPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oaGcoKSxtZykpLCIuL2RlY29kZURyYWNvLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHdnKCksYmcpKSwiLi9kZWNvZGVHb29nbGVFYXJ0aEVudGVycHJpc2VQYWNrZXQuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oVWcoKSxCZykpLCIuL2RlY29kZUkzUy5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pih6ZygpLEdnKSksIi4vdHJhbnNjb2RlS1RYMi5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihYZygpLFdnKSksIi4vdHJhbnNmZXJUeXBlZEFycmF5VGVzdC5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihZZygpLExTKSksIi4vdXBzYW1wbGVRdWFudGl6ZWRUZXJyYWluTWVzaC5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihaZygpLCRnKSl9KX0pO3ZhciBKZz17fTttZShKZyx7ZGVmYXVsdDooKT0+Tzh9KTthc3luYyBmdW5jdGlvbiB3OCh0KXtsZXQgZT1lMVt0XTtyZXR1cm4gaChlKXx8KHR5cGVvZiBleHBvcnRzPT0ib2JqZWN0Ij9lMVtlXT1lPURvKGBXb3JrZXJzLyR7dH1gKTooZT0oYXdhaXQgRWx0KGAuLyR7dH0uanNgKSkuZGVmYXVsdCxlMVtlXT1lKSksZX1hc3luYyBmdW5jdGlvbiBUOCh0LGUpe2xldCBuPXQuc3ViVGFza3Msbz1uLmxlbmd0aCxyPW5ldyBBcnJheShvKTtmb3IobGV0IGk9MDtpPG87aSsrKXtsZXQgcz1uW2ldLGY9cy5nZW9tZXRyeSx1PXMubW9kdWxlTmFtZTtoKHUpP3JbaV09dzgodSkudGhlbihjPT5jKGYscy5vZmZzZXQpKTpyW2ldPWZ9cmV0dXJuIFByb21pc2UuYWxsKHIpLnRoZW4oZnVuY3Rpb24oaSl7cmV0dXJuIGNhLnBhY2tDcmVhdGVHZW9tZXRyeVJlc3VsdHMoaSxlKX0pfXZhciBlMSxPOCx0MT1aKCgpPT57YXQoKTtZaCgpO3NvKCk7UWcoKTtlMT17fTtPOD1RZShUOCl9KTt2YXIgZ1Y9e307bWUoZ1Yse2NvbWJpbmVHZW9tZXRyeTooKT0+RTgsY3JlYXRlQm94R2VvbWV0cnk6KCk9PlI4LGNyZWF0ZUJveE91dGxpbmVHZW9tZXRyeTooKT0+UzgsY3JlYXRlQ2lyY2xlR2VvbWV0cnk6KCk9PkM4LGNyZWF0ZUNpcmNsZU91dGxpbmVHZW9tZXRyeTooKT0+eDgsY3JlYXRlQ29wbGFuYXJQb2x5Z29uR2VvbWV0cnk6KCk9PlA4LGNyZWF0ZUNvcGxhbmFyUG9seWdvbk91dGxpbmVHZW9tZXRyeTooKT0+TTgsY3JlYXRlQ29ycmlkb3JHZW9tZXRyeTooKT0+TjgsY3JlYXRlQ29ycmlkb3JPdXRsaW5lR2VvbWV0cnk6KCk9Pkk4LGNyZWF0ZUN5bGluZGVyR2VvbWV0cnk6KCk9PnY4LGNyZWF0ZUN5bGluZGVyT3V0bGluZUdlb21ldHJ5OigpPT5EOCxjcmVhdGVFbGxpcHNlR2VvbWV0cnk6KCk9Pkw4LGNyZWF0ZUVsbGlwc2VPdXRsaW5lR2VvbWV0cnk6KCk9PkY4LGNyZWF0ZUVsbGlwc29pZEdlb21ldHJ5OigpPT5COCxjcmVhdGVFbGxpcHNvaWRPdXRsaW5lR2VvbWV0cnk6KCk9PlU4LGNyZWF0ZUZydXN0dW1HZW9tZXRyeTooKT0+VjgsY3JlYXRlRnJ1c3R1bU91dGxpbmVHZW9tZXRyeTooKT0+azgsY3JlYXRlR2VvbWV0cnk6KCk9Pkc4LGNyZWF0ZUdyb3VuZFBvbHlsaW5lR2VvbWV0cnk6KCk9Pno4LGNyZWF0ZVBsYW5lR2VvbWV0cnk6KCk9Pmo4LGNyZWF0ZVBsYW5lT3V0bGluZUdlb21ldHJ5OigpPT5IOCxjcmVhdGVQb2x5Z29uR2VvbWV0cnk6KCk9PnE4LGNyZWF0ZVBvbHlnb25PdXRsaW5lR2VvbWV0cnk6KCk9Pks4LGNyZWF0ZVBvbHlsaW5lR2VvbWV0cnk6KCk9Plc4LGNyZWF0ZVBvbHlsaW5lVm9sdW1lR2VvbWV0cnk6KCk9Plg4LGNyZWF0ZVBvbHlsaW5lVm9sdW1lT3V0bGluZUdlb21ldHJ5OigpPT5ZOCxjcmVhdGVSZWN0YW5nbGVHZW9tZXRyeTooKT0+JDgsY3JlYXRlUmVjdGFuZ2xlT3V0bGluZUdlb21ldHJ5OigpPT5aOCxjcmVhdGVTaW1wbGVQb2x5bGluZUdlb21ldHJ5OigpPT5ROCxjcmVhdGVTcGhlcmVHZW9tZXRyeTooKT0+SjgsY3JlYXRlU3BoZXJlT3V0bGluZUdlb21ldHJ5OigpPT50VixjcmVhdGVUYXNrUHJvY2Vzc29yV29ya2VyOigpPT5lVixjcmVhdGVWZWN0b3JUaWxlQ2xhbXBlZFBvbHlsaW5lczooKT0+blYsY3JlYXRlVmVjdG9yVGlsZUdlb21ldHJpZXM6KCk9Pm9WLGNyZWF0ZVZlY3RvclRpbGVQb2ludHM6KCk9PnJWLGNyZWF0ZVZlY3RvclRpbGVQb2x5Z29uczooKT0+aVYsY3JlYXRlVmVjdG9yVGlsZVBvbHlsaW5lczooKT0+c1YsY3JlYXRlVmVydGljZXNGcm9tR29vZ2xlRWFydGhFbnRlcnByaXNlQnVmZmVyOigpPT5jVixjcmVhdGVWZXJ0aWNlc0Zyb21IZWlnaHRtYXA6KCk9PmFWLGNyZWF0ZVZlcnRpY2VzRnJvbVF1YW50aXplZFRlcnJhaW5NZXNoOigpPT5mVixjcmVhdGVXYWxsR2VvbWV0cnk6KCk9PnVWLGNyZWF0ZVdhbGxPdXRsaW5lR2VvbWV0cnk6KCk9PmxWLGRlY29kZURyYWNvOigpPT5wVixkZWNvZGVHb29nbGVFYXJ0aEVudGVycHJpc2VQYWNrZXQ6KCk9PmRWLGRlY29kZUkzUzooKT0+bVYsdHJhbnNjb2RlS1RYMjooKT0+aFYsdHJhbnNmZXJUeXBlZEFycmF5VGVzdDooKT0+X1YsdXBzYW1wbGVRdWFudGl6ZWRUZXJyYWluTWVzaDooKT0+eVZ9KTt2YXIgRTg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5RaCgpKX0sUjg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5uMCgpKX0sUzg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5pMCgpKX0sQzg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5oMCgpKX0seDg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5BMCgpKX0sUDg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5JMCgpKX0sTTg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5MMCgpKX0sTjg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4kMCgpKX0sSTg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5KMCgpKX0sdjg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5pXygpKX0sRDg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5mXygpKX0sTDg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5sXygpKX0sRjg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5kXygpKX0sQjg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5fXygpKX0sVTg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5BXygpKX0sVjg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT54XygpKX0sazg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5JXygpKX0sRzg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50MSgpKX0sejg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5xXygpKX0sajg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5YXygpKX0sSDg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5aXygpKX0scTg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5leSgpKX0sSzg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5yeSgpKX0sVzg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT51eSgpKX0sWDg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5keSgpKX0sWTg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5feSgpKX0sJDg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5TeSgpKX0sWjg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5QeSgpKX0sUTg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5JeSgpKX0sSjg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5MeSgpKX0sdFY9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5VeSgpKX0sZVY9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5zbygpKX0sblY9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5reSgpKX0sb1Y9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT56eSgpKX0sclY9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5xeSgpKX0saVY9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5XeSgpKX0sc1Y9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4keSgpKX0sY1Y9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5lZygpKX0sYVY9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5yZygpKX0sZlY9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5jZygpKX0sdVY9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5wZygpKX0sbFY9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5oZygpKX0scFY9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT53ZygpKX0sZFY9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5VZygpKX0sbVY9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT56ZygpKX0saFY9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5YZygpKX0sX1Y9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5ZZygpKX0seVY9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5aZygpKX07cmV0dXJuIEtTKGdWKTt9KSgpOwo=")});var oA=yc((dxt,B8)=>{var uxt=T(S()),Bf=function(e){e==null&&(e=new Date().getTime()),this.N=624,this.M=397,this.MATRIX_A=2567483615,this.UPPER_MASK=2147483648,this.LOWER_MASK=2147483647,this.mt=new Array(this.N),this.mti=this.N+1,e.constructor==Array?this.init_by_array(e,e.length):this.init_seed(e)};Bf.prototype.init_seed=function(e){for(this.mt[0]=e>>>0,this.mti=1;this.mti<this.N;this.mti++){var e=this.mt[this.mti-1]^this.mt[this.mti-1]>>>30;this.mt[this.mti]=(((e&4294901760)>>>16)*1812433253<<16)+(e&65535)*1812433253+this.mti,this.mt[this.mti]>>>=0}};Bf.prototype.init_by_array=function(e,t){var n,i,o;for(this.init_seed(19650218),n=1,i=0,o=this.N>t?this.N:t;o;o--){var r=this.mt[n-1]^this.mt[n-1]>>>30;this.mt[n]=(this.mt[n]^(((r&4294901760)>>>16)*1664525<<16)+(r&65535)*1664525)+e[i]+i,this.mt[n]>>>=0,n++,i++,n>=this.N&&(this.mt[0]=this.mt[this.N-1],n=1),i>=t&&(i=0)}for(o=this.N-1;o;o--){var r=this.mt[n-1]^this.mt[n-1]>>>30;this.mt[n]=(this.mt[n]^(((r&4294901760)>>>16)*1566083941<<16)+(r&65535)*1566083941)-n,this.mt[n]>>>=0,n++,n>=this.N&&(this.mt[0]=this.mt[this.N-1],n=1)}this.mt[0]=2147483648};Bf.prototype.random_int=function(){var e,t=new Array(0,this.MATRIX_A);if(this.mti>=this.N){var n;for(this.mti==this.N+1&&this.init_seed(5489),n=0;n<this.N-this.M;n++)e=this.mt[n]&this.UPPER_MASK|this.mt[n+1]&this.LOWER_MASK,this.mt[n]=this.mt[n+this.M]^e>>>1^t[e&1];for(;n<this.N-1;n++)e=this.mt[n]&this.UPPER_MASK|this.mt[n+1]&this.LOWER_MASK,this.mt[n]=this.mt[n+(this.M-this.N)]^e>>>1^t[e&1];e=this.mt[this.N-1]&this.UPPER_MASK|this.mt[0]&this.LOWER_MASK,this.mt[this.N-1]=this.mt[this.M-1]^e>>>1^t[e&1],this.mti=0}return e=this.mt[this.mti++],e^=e>>>11,e^=e<<7&2636928640,e^=e<<15&4022730752,e^=e>>>18,e>>>0};Bf.prototype.random_int31=function(){return this.random_int()>>>1};Bf.prototype.random_incl=function(){return this.random_int()*(1/4294967295)};Bf.prototype.random=function(){return this.random_int()*(1/4294967296)};Bf.prototype.random_excl=function(){return(this.random_int()+.5)*(1/4294967296)};Bf.prototype.random_long=function(){var e=this.random_int()>>>5,t=this.random_int()>>>6;return(e*67108864+t)*(1/9007199254740992)};B8.exports=Bf});var C7=yc((eS,tS)=>{var jSt=T(S());/*! https://mths.be/punycode v1.4.0 by @mathias */(function(e){var t=typeof eS=="object"&&eS&&!eS.nodeType&&eS,n=typeof tS=="object"&&tS&&!tS.nodeType&&tS,i=typeof global=="object"&&global;(i.global===i||i.window===i||i.self===i)&&(e=i);var o,r=2147483647,s=36,a=1,c=26,l=38,u=700,m=72,p=128,y="-",f=/^xn--/,x=/[^\x20-\x7E]/,_=/[\x2E\u3002\uFF0E\uFF61]/g,C={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},V=s-a,L=Math.floor,Z=String.fromCharCode,G;function X(k){throw new RangeError(C[k])}function P(k,O){for(var U=k.length,J=[];U--;)J[U]=O(k[U]);return J}function v(k,O){var U=k.split("@"),J="";U.length>1&&(J=U[0]+"@",k=U[1]),k=k.replace(_,".");var z=k.split("."),ee=P(z,O).join(".");return J+ee}function F(k){for(var O=[],U=0,J=k.length,z,ee;U<J;)z=k.charCodeAt(U++),z>=55296&&z<=56319&&U<J?(ee=k.charCodeAt(U++),(ee&64512)==56320?O.push(((z&1023)<<10)+(ee&1023)+65536):(O.push(z),U--)):O.push(z);return O}function M(k){return P(k,function(O){var U="";return O>65535&&(O-=65536,U+=Z(O>>>10&1023|55296),O=56320|O&1023),U+=Z(O),U}).join("")}function b(k){return k-48<10?k-22:k-65<26?k-65:k-97<26?k-97:s}function R(k,O){return k+22+75*(k<26)-((O!=0)<<5)}function E(k,O,U){var J=0;for(k=U?L(k/u):k>>1,k+=L(k/O);k>V*c>>1;J+=s)k=L(k/V);return L(J+(V+1)*k/(k+l))}function I(k){var O=[],U=k.length,J,z=0,ee=p,K=m,j,q,be,Te,ae,xe,_e,Ve,Ie;for(j=k.lastIndexOf(y),j<0&&(j=0),q=0;q<j;++q)k.charCodeAt(q)>=128&&X("not-basic"),O.push(k.charCodeAt(q));for(be=j>0?j+1:0;be<U;){for(Te=z,ae=1,xe=s;be>=U&&X("invalid-input"),_e=b(k.charCodeAt(be++)),(_e>=s||_e>L((r-z)/ae))&&X("overflow"),z+=_e*ae,Ve=xe<=K?a:xe>=K+c?c:xe-K,!(_e<Ve);xe+=s)Ie=s-Ve,ae>L(r/Ie)&&X("overflow"),ae*=Ie;J=O.length+1,K=E(z-Te,J,Te==0),L(z/J)>r-ee&&X("overflow"),ee+=L(z/J),z%=J,O.splice(z++,0,ee)}return M(O)}function w(k){var O,U,J,z,ee,K,j,q,be,Te,ae,xe=[],_e,Ve,Ie,Me;for(k=F(k),_e=k.length,O=p,U=0,ee=m,K=0;K<_e;++K)ae=k[K],ae<128&&xe.push(Z(ae));for(J=z=xe.length,z&&xe.push(y);J<_e;){for(j=r,K=0;K<_e;++K)ae=k[K],ae>=O&&ae<j&&(j=ae);for(Ve=J+1,j-O>L((r-U)/Ve)&&X("overflow"),U+=(j-O)*Ve,O=j,K=0;K<_e;++K)if(ae=k[K],ae<O&&++U>r&&X("overflow"),ae==O){for(q=U,be=s;Te=be<=ee?a:be>=ee+c?c:be-ee,!(q<Te);be+=s)Me=q-Te,Ie=s-Te,xe.push(Z(R(Te+Me%Ie,0))),q=L(Me/Ie);xe.push(Z(R(q,0))),ee=E(U,Ve,J==z),U=0,++J}++U,++O}return xe.join("")}function N(k){return v(k,function(O){return f.test(O)?I(O.slice(4).toLowerCase()):O})}function B(k){return v(k,function(O){return x.test(O)?"xn--"+w(O):O})}if(o={version:"1.3.2",ucs2:{decode:F,encode:M},decode:I,encode:w,toASCII:B,toUnicode:N},typeof define=="function"&&typeof define.amd=="object"&&define.amd)define("punycode",function(){return o});else if(t&&n)if(tS.exports==t)n.exports=o;else for(G in o)o.hasOwnProperty(G)&&(t[G]=o[G]);else e.punycode=o})(eS)});var L7=yc((V7,RA)=>{var qSt=T(S());/*!
  26. * URI.js - Mutating URLs
  27. * IPv6 Support
  28. *
  29. * Version: 1.19.11
  30. *
  31. * Author: Rodney Rehm
  32. * Web: http://medialize.github.io/URI.js/
  33. *
  34. * Licensed under
  35. * MIT License http://www.opensource.org/licenses/mit-license
  36. *
  37. */(function(e,t){"use strict";typeof RA=="object"&&RA.exports?RA.exports=t():typeof define=="function"&&define.amd?define(t):e.IPv6=t(e)})(V7,function(e){"use strict";var t=e&&e.IPv6;function n(o){var r=o.toLowerCase(),s=r.split(":"),a=s.length,c=8;s[0]===""&&s[1]===""&&s[2]===""?(s.shift(),s.shift()):s[0]===""&&s[1]===""?s.shift():s[a-1]===""&&s[a-2]===""&&s.pop(),a=s.length,s[a-1].indexOf(".")!==-1&&(c=7);var l;for(l=0;l<a&&s[l]!=="";l++);if(l<c)for(s.splice(l,1,"0000");s.length<c;)s.splice(l,0,"0000");for(var u,m=0;m<c;m++){u=s[m].split("");for(var p=0;p<3&&(u[0]==="0"&&u.length>1);p++)u.splice(0,1);s[m]=u.join("")}var y=-1,f=0,x=0,_=-1,C=!1;for(m=0;m<c;m++)C?s[m]==="0"?x+=1:(C=!1,x>f&&(y=_,f=x)):s[m]==="0"&&(C=!0,_=m,x=1);x>f&&(y=_,f=x),f>1&&s.splice(y,f,""),a=s.length;var V="";for(s[0]===""&&(V=":"),m=0;m<a&&(V+=s[m],m!==a-1);m++)V+=":";return s[a-1]===""&&(V+=":"),V}function i(){return e.IPv6===this&&(e.IPv6=t),this}return{best:n,noConflict:i}})});var Z7=yc((R7,ZA)=>{var $St=T(S());/*!
  38. * URI.js - Mutating URLs
  39. * Second Level Domain (SLD) Support
  40. *
  41. * Version: 1.19.11
  42. *
  43. * Author: Rodney Rehm
  44. * Web: http://medialize.github.io/URI.js/
  45. *
  46. * Licensed under
  47. * MIT License http://www.opensource.org/licenses/mit-license
  48. *
  49. */(function(e,t){"use strict";typeof ZA=="object"&&ZA.exports?ZA.exports=t():typeof define=="function"&&define.amd?define(t):e.SecondLevelDomains=t(e)})(R7,function(e){"use strict";var t=e&&e.SecondLevelDomains,n={list:{ac:" com gov mil net org ",ae:" ac co gov mil name net org pro sch ",af:" com edu gov net org ",al:" com edu gov mil net org ",ao:" co ed gv it og pb ",ar:" com edu gob gov int mil net org tur ",at:" ac co gv or ",au:" asn com csiro edu gov id net org ",ba:" co com edu gov mil net org rs unbi unmo unsa untz unze ",bb:" biz co com edu gov info net org store tv ",bh:" biz cc com edu gov info net org ",bn:" com edu gov net org ",bo:" com edu gob gov int mil net org tv ",br:" adm adv agr am arq art ato b bio blog bmd cim cng cnt com coop ecn edu eng esp etc eti far flog fm fnd fot fst g12 ggf gov imb ind inf jor jus lel mat med mil mus net nom not ntr odo org ppg pro psc psi qsl rec slg srv tmp trd tur tv vet vlog wiki zlg ",bs:" com edu gov net org ",bz:" du et om ov rg ",ca:" ab bc mb nb nf nl ns nt nu on pe qc sk yk ",ck:" biz co edu gen gov info net org ",cn:" ac ah bj com cq edu fj gd gov gs gx gz ha hb he hi hl hn jl js jx ln mil net nm nx org qh sc sd sh sn sx tj tw xj xz yn zj ",co:" com edu gov mil net nom org ",cr:" ac c co ed fi go or sa ",cy:" ac biz com ekloges gov ltd name net org parliament press pro tm ",do:" art com edu gob gov mil net org sld web ",dz:" art asso com edu gov net org pol ",ec:" com edu fin gov info med mil net org pro ",eg:" com edu eun gov mil name net org sci ",er:" com edu gov ind mil net org rochest w ",es:" com edu gob nom org ",et:" biz com edu gov info name net org ",fj:" ac biz com info mil name net org pro ",fk:" ac co gov net nom org ",fr:" asso com f gouv nom prd presse tm ",gg:" co net org ",gh:" com edu gov mil org ",gn:" ac com gov net org ",gr:" com edu gov mil net org ",gt:" com edu gob ind mil net org ",gu:" com edu gov net org ",hk:" com edu gov idv net org ",hu:" 2000 agrar bolt casino city co erotica erotika film forum games hotel info ingatlan jogasz konyvelo lakas media news org priv reklam sex shop sport suli szex tm tozsde utazas video ",id:" ac co go mil net or sch web ",il:" ac co gov idf k12 muni net org ",in:" ac co edu ernet firm gen gov i ind mil net nic org res ",iq:" com edu gov i mil net org ",ir:" ac co dnssec gov i id net org sch ",it:" edu gov ",je:" co net org ",jo:" com edu gov mil name net org sch ",jp:" ac ad co ed go gr lg ne or ",ke:" ac co go info me mobi ne or sc ",kh:" com edu gov mil net org per ",ki:" biz com de edu gov info mob net org tel ",km:" asso com coop edu gouv k medecin mil nom notaires pharmaciens presse tm veterinaire ",kn:" edu gov net org ",kr:" ac busan chungbuk chungnam co daegu daejeon es gangwon go gwangju gyeongbuk gyeonggi gyeongnam hs incheon jeju jeonbuk jeonnam k kg mil ms ne or pe re sc seoul ulsan ",kw:" com edu gov net org ",ky:" com edu gov net org ",kz:" com edu gov mil net org ",lb:" com edu gov net org ",lk:" assn com edu gov grp hotel int ltd net ngo org sch soc web ",lr:" com edu gov net org ",lv:" asn com conf edu gov id mil net org ",ly:" com edu gov id med net org plc sch ",ma:" ac co gov m net org press ",mc:" asso tm ",me:" ac co edu gov its net org priv ",mg:" com edu gov mil nom org prd tm ",mk:" com edu gov inf name net org pro ",ml:" com edu gov net org presse ",mn:" edu gov org ",mo:" com edu gov net org ",mt:" com edu gov net org ",mv:" aero biz com coop edu gov info int mil museum name net org pro ",mw:" ac co com coop edu gov int museum net org ",mx:" com edu gob net org ",my:" com edu gov mil name net org sch ",nf:" arts com firm info net other per rec store web ",ng:" biz com edu gov mil mobi name net org sch ",ni:" ac co com edu gob mil net nom org ",np:" com edu gov mil net org ",nr:" biz com edu gov info net org ",om:" ac biz co com edu gov med mil museum net org pro sch ",pe:" com edu gob mil net nom org sld ",ph:" com edu gov i mil net ngo org ",pk:" biz com edu fam gob gok gon gop gos gov net org web ",pl:" art bialystok biz com edu gda gdansk gorzow gov info katowice krakow lodz lublin mil net ngo olsztyn org poznan pwr radom slupsk szczecin torun warszawa waw wroc wroclaw zgora ",pr:" ac biz com edu est gov info isla name net org pro prof ",ps:" com edu gov net org plo sec ",pw:" belau co ed go ne or ",ro:" arts com firm info nom nt org rec store tm www ",rs:" ac co edu gov in org ",sb:" com edu gov net org ",sc:" com edu gov net org ",sh:" co com edu gov net nom org ",sl:" com edu gov net org ",st:" co com consulado edu embaixada gov mil net org principe saotome store ",sv:" com edu gob org red ",sz:" ac co org ",tr:" av bbs bel biz com dr edu gen gov info k12 name net org pol tel tsk tv web ",tt:" aero biz cat co com coop edu gov info int jobs mil mobi museum name net org pro tel travel ",tw:" club com ebiz edu game gov idv mil net org ",mu:" ac co com gov net or org ",mz:" ac co edu gov org ",na:" co com ",nz:" ac co cri geek gen govt health iwi maori mil net org parliament school ",pa:" abo ac com edu gob ing med net nom org sld ",pt:" com edu gov int net nome org publ ",py:" com edu gov mil net org ",qa:" com edu gov mil net org ",re:" asso com nom ",ru:" ac adygeya altai amur arkhangelsk astrakhan bashkiria belgorod bir bryansk buryatia cbg chel chelyabinsk chita chukotka chuvashia com dagestan e-burg edu gov grozny int irkutsk ivanovo izhevsk jar joshkar-ola kalmykia kaluga kamchatka karelia kazan kchr kemerovo khabarovsk khakassia khv kirov koenig komi kostroma kranoyarsk kuban kurgan kursk lipetsk magadan mari mari-el marine mil mordovia mosreg msk murmansk nalchik net nnov nov novosibirsk nsk omsk orenburg org oryol penza perm pp pskov ptz rnd ryazan sakhalin samara saratov simbirsk smolensk spb stavropol stv surgut tambov tatarstan tom tomsk tsaritsyn tsk tula tuva tver tyumen udm udmurtia ulan-ude vladikavkaz vladimir vladivostok volgograd vologda voronezh vrn vyatka yakutia yamal yekaterinburg yuzhno-sakhalinsk ",rw:" ac co com edu gouv gov int mil net ",sa:" com edu gov med net org pub sch ",sd:" com edu gov info med net org tv ",se:" a ac b bd c d e f g h i k l m n o org p parti pp press r s t tm u w x y z ",sg:" com edu gov idn net org per ",sn:" art com edu gouv org perso univ ",sy:" com edu gov mil net news org ",th:" ac co go in mi net or ",tj:" ac biz co com edu go gov info int mil name net nic org test web ",tn:" agrinet com defense edunet ens fin gov ind info intl mincom nat net org perso rnrt rns rnu tourism ",tz:" ac co go ne or ",ua:" biz cherkassy chernigov chernovtsy ck cn co com crimea cv dn dnepropetrovsk donetsk dp edu gov if in ivano-frankivsk kh kharkov kherson khmelnitskiy kiev kirovograd km kr ks kv lg lugansk lutsk lviv me mk net nikolaev od odessa org pl poltava pp rovno rv sebastopol sumy te ternopil uzhgorod vinnica vn zaporizhzhe zhitomir zp zt ",ug:" ac co go ne or org sc ",uk:" ac bl british-library co cym gov govt icnet jet lea ltd me mil mod national-library-scotland nel net nhs nic nls org orgn parliament plc police sch scot soc ",us:" dni fed isa kids nsn ",uy:" com edu gub mil net org ",ve:" co com edu gob info mil net org web ",vi:" co com k12 net org ",vn:" ac biz com edu gov health info int name net org pro ",ye:" co com gov ltd me net org plc ",yu:" ac co edu gov org ",za:" ac agric alt bourse city co cybernet db edu gov grondar iaccess imt inca landesign law mil net ngo nis nom olivetti org pix school tm web ",zm:" ac co com edu gov net org sch ",com:"ar br cn de eu gb gr hu jpn kr no qc ru sa se uk us uy za ",net:"gb jp se uk ",org:"ae",de:"com "},has:function(i){var o=i.lastIndexOf(".");if(o<=0||o>=i.length-1)return!1;var r=i.lastIndexOf(".",o-1);if(r<=0||r>=o-1)return!1;var s=n.list[i.slice(o+1)];return s?s.indexOf(" "+i.slice(r+1,o)+" ")>=0:!1},is:function(i){var o=i.lastIndexOf(".");if(o<=0||o>=i.length-1)return!1;var r=i.lastIndexOf(".",o-1);if(r>=0)return!1;var s=n.list[i.slice(o+1)];return s?s.indexOf(" "+i.slice(0,o)+" ")>=0:!1},get:function(i){var o=i.lastIndexOf(".");if(o<=0||o>=i.length-1)return null;var r=i.lastIndexOf(".",o-1);if(r<=0||r>=o-1)return null;var s=n.list[i.slice(o+1)];return!s||s.indexOf(" "+i.slice(r+1,o)+" ")<0?null:i.slice(r+1)},noConflict:function(){return e.SecondLevelDomains===this&&(e.SecondLevelDomains=t),this}};return n})});var Bl=yc((G7,GA)=>{var eCt=T(S());/*!
  50. * URI.js - Mutating URLs
  51. *
  52. * Version: 1.19.11
  53. *
  54. * Author: Rodney Rehm
  55. * Web: http://medialize.github.io/URI.js/
  56. *
  57. * Licensed under
  58. * MIT License http://www.opensource.org/licenses/mit-license
  59. *
  60. */(function(e,t){"use strict";typeof GA=="object"&&GA.exports?GA.exports=t(C7(),L7(),Z7()):typeof define=="function"&&define.amd?define(["./punycode","./IPv6","./SecondLevelDomains"],t):e.URI=t(e.punycode,e.IPv6,e.SecondLevelDomains,e)})(G7,function(e,t,n,i){"use strict";var o=i&&i.URI;function r(R,E){var I=arguments.length>=1,w=arguments.length>=2;if(!(this instanceof r))return I?w?new r(R,E):new r(R):new r;if(R===void 0){if(I)throw new TypeError("undefined is not a valid argument for URI");typeof location<"u"?R=location.href+"":R=""}if(R===null&&I)throw new TypeError("null is not a valid argument for URI");return this.href(R),E!==void 0?this.absoluteTo(E):this}function s(R){return/^[0-9]+$/.test(R)}r.version="1.19.11";var a=r.prototype,c=Object.prototype.hasOwnProperty;function l(R){return R.replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}function u(R){return R===void 0?"Undefined":String(Object.prototype.toString.call(R)).slice(8,-1)}function m(R){return u(R)==="Array"}function p(R,E){var I={},w,N;if(u(E)==="RegExp")I=null;else if(m(E))for(w=0,N=E.length;w<N;w++)I[E[w]]=!0;else I[E]=!0;for(w=0,N=R.length;w<N;w++){var B=I&&I[R[w]]!==void 0||!I&&E.test(R[w]);B&&(R.splice(w,1),N--,w--)}return R}function y(R,E){var I,w;if(m(E)){for(I=0,w=E.length;I<w;I++)if(!y(R,E[I]))return!1;return!0}var N=u(E);for(I=0,w=R.length;I<w;I++)if(N==="RegExp"){if(typeof R[I]=="string"&&R[I].match(E))return!0}else if(R[I]===E)return!0;return!1}function f(R,E){if(!m(R)||!m(E)||R.length!==E.length)return!1;R.sort(),E.sort();for(var I=0,w=R.length;I<w;I++)if(R[I]!==E[I])return!1;return!0}function x(R){var E=/^\/+|\/+$/g;return R.replace(E,"")}r._parts=function(){return{protocol:null,username:null,password:null,hostname:null,urn:null,port:null,path:null,query:null,fragment:null,preventInvalidHostname:r.preventInvalidHostname,duplicateQueryParameters:r.duplicateQueryParameters,escapeQuerySpace:r.escapeQuerySpace}},r.preventInvalidHostname=!1,r.duplicateQueryParameters=!1,r.escapeQuerySpace=!0,r.protocol_expression=/^[a-z][a-z0-9.+-]*$/i,r.idn_expression=/[^a-z0-9\._-]/i,r.punycode_expression=/(xn--)/i,r.ip4_expression=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,r.ip6_expression=/^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/,r.find_uri_expression=/\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/ig,r.findUri={start:/\b(?:([a-z][a-z0-9.+-]*:\/\/)|www\.)/gi,end:/[\s\r\n]|$/,trim:/[`!()\[\]{};:'".,<>?«»“”„‘’]+$/,parens:/(\([^\)]*\)|\[[^\]]*\]|\{[^}]*\}|<[^>]*>)/g},r.leading_whitespace_expression=/^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/,r.ascii_tab_whitespace=/[\u0009\u000A\u000D]+/g,r.defaultPorts={http:"80",https:"443",ftp:"21",gopher:"70",ws:"80",wss:"443"},r.hostProtocols=["http","https"],r.invalid_hostname_characters=/[^a-zA-Z0-9\.\-:_]/,r.domAttributes={a:"href",blockquote:"cite",link:"href",base:"href",script:"src",form:"action",img:"src",area:"href",iframe:"src",embed:"src",source:"src",track:"src",input:"src",audio:"src",video:"src"},r.getDomAttribute=function(R){if(!(!R||!R.nodeName)){var E=R.nodeName.toLowerCase();if(!(E==="input"&&R.type!=="image"))return r.domAttributes[E]}};function _(R){return escape(R)}function C(R){return encodeURIComponent(R).replace(/[!'()*]/g,_).replace(/\*/g,"%2A")}r.encode=C,r.decode=decodeURIComponent,r.iso8859=function(){r.encode=escape,r.decode=unescape},r.unicode=function(){r.encode=C,r.decode=decodeURIComponent},r.characters={pathname:{encode:{expression:/%(24|26|2B|2C|3B|3D|3A|40)/ig,map:{"%24":"$","%26":"&","%2B":"+","%2C":",","%3B":";","%3D":"=","%3A":":","%40":"@"}},decode:{expression:/[\/\?#]/g,map:{"/":"%2F","?":"%3F","#":"%23"}}},reserved:{encode:{expression:/%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/ig,map:{"%3A":":","%2F":"/","%3F":"?","%23":"#","%5B":"[","%5D":"]","%40":"@","%21":"!","%24":"$","%26":"&","%27":"'","%28":"(","%29":")","%2A":"*","%2B":"+","%2C":",","%3B":";","%3D":"="}}},urnpath:{encode:{expression:/%(21|24|27|28|29|2A|2B|2C|3B|3D|40)/ig,map:{"%21":"!","%24":"$","%27":"'","%28":"(","%29":")","%2A":"*","%2B":"+","%2C":",","%3B":";","%3D":"=","%40":"@"}},decode:{expression:/[\/\?#:]/g,map:{"/":"%2F","?":"%3F","#":"%23",":":"%3A"}}}},r.encodeQuery=function(R,E){var I=r.encode(R+"");return E===void 0&&(E=r.escapeQuerySpace),E?I.replace(/%20/g,"+"):I},r.decodeQuery=function(R,E){R+="",E===void 0&&(E=r.escapeQuerySpace);try{return r.decode(E?R.replace(/\+/g,"%20"):R)}catch{return R}};var V={encode:"encode",decode:"decode"},L,Z=function(R,E){return function(I){try{return r[E](I+"").replace(r.characters[R][E].expression,function(w){return r.characters[R][E].map[w]})}catch{return I}}};for(L in V)r[L+"PathSegment"]=Z("pathname",V[L]),r[L+"UrnPathSegment"]=Z("urnpath",V[L]);var G=function(R,E,I){return function(w){var N;I?N=function(U){return r[E](r[I](U))}:N=r[E];for(var B=(w+"").split(R),k=0,O=B.length;k<O;k++)B[k]=N(B[k]);return B.join(R)}};r.decodePath=G("/","decodePathSegment"),r.decodeUrnPath=G(":","decodeUrnPathSegment"),r.recodePath=G("/","encodePathSegment","decode"),r.recodeUrnPath=G(":","encodeUrnPathSegment","decode"),r.encodeReserved=Z("reserved","encode"),r.parse=function(R,E){var I;return E||(E={preventInvalidHostname:r.preventInvalidHostname}),R=R.replace(r.leading_whitespace_expression,""),R=R.replace(r.ascii_tab_whitespace,""),I=R.indexOf("#"),I>-1&&(E.fragment=R.substring(I+1)||null,R=R.substring(0,I)),I=R.indexOf("?"),I>-1&&(E.query=R.substring(I+1)||null,R=R.substring(0,I)),R=R.replace(/^(https?|ftp|wss?)?:+[/\\]*/i,"$1://"),R=R.replace(/^[/\\]{2,}/i,"//"),R.substring(0,2)==="//"?(E.protocol=null,R=R.substring(2),R=r.parseAuthority(R,E)):(I=R.indexOf(":"),I>-1&&(E.protocol=R.substring(0,I)||null,E.protocol&&!E.protocol.match(r.protocol_expression)?E.protocol=void 0:R.substring(I+1,I+3).replace(/\\/g,"/")==="//"?(R=R.substring(I+3),R=r.parseAuthority(R,E)):(R=R.substring(I+1),E.urn=!0))),E.path=R,E},r.parseHost=function(R,E){R||(R=""),R=R.replace(/\\/g,"/");var I=R.indexOf("/"),w,N;if(I===-1&&(I=R.length),R.charAt(0)==="[")w=R.indexOf("]"),E.hostname=R.substring(1,w)||null,E.port=R.substring(w+2,I)||null,E.port==="/"&&(E.port=null);else{var B=R.indexOf(":"),k=R.indexOf("/"),O=R.indexOf(":",B+1);O!==-1&&(k===-1||O<k)?(E.hostname=R.substring(0,I)||null,E.port=null):(N=R.substring(0,I).split(":"),E.hostname=N[0]||null,E.port=N[1]||null)}return E.hostname&&R.substring(I).charAt(0)!=="/"&&(I++,R="/"+R),E.preventInvalidHostname&&r.ensureValidHostname(E.hostname,E.protocol),E.port&&r.ensureValidPort(E.port),R.substring(I)||"/"},r.parseAuthority=function(R,E){return R=r.parseUserinfo(R,E),r.parseHost(R,E)},r.parseUserinfo=function(R,E){var I=R,w=R.indexOf("\\");w!==-1&&(R=R.replace(/\\/g,"/"));var N=R.indexOf("/"),B=R.lastIndexOf("@",N>-1?N:R.length-1),k;return B>-1&&(N===-1||B<N)?(k=R.substring(0,B).split(":"),E.username=k[0]?r.decode(k[0]):null,k.shift(),E.password=k[0]?r.decode(k.join(":")):null,R=I.substring(B+1)):(E.username=null,E.password=null),R},r.parseQuery=function(R,E){if(!R)return{};if(R=R.replace(/&+/g,"&").replace(/^\?*&*|&+$/g,""),!R)return{};for(var I={},w=R.split("&"),N=w.length,B,k,O,U=0;U<N;U++)B=w[U].split("="),k=r.decodeQuery(B.shift(),E),O=B.length?r.decodeQuery(B.join("="),E):null,k!=="__proto__"&&(c.call(I,k)?((typeof I[k]=="string"||I[k]===null)&&(I[k]=[I[k]]),I[k].push(O)):I[k]=O);return I},r.build=function(R){var E="",I=!1;return R.protocol&&(E+=R.protocol+":"),!R.urn&&(E||R.hostname)&&(E+="//",I=!0),E+=r.buildAuthority(R)||"",typeof R.path=="string"&&(R.path.charAt(0)!=="/"&&I&&(E+="/"),E+=R.path),typeof R.query=="string"&&R.query&&(E+="?"+R.query),typeof R.fragment=="string"&&R.fragment&&(E+="#"+R.fragment),E},r.buildHost=function(R){var E="";if(R.hostname)r.ip6_expression.test(R.hostname)?E+="["+R.hostname+"]":E+=R.hostname;else return"";return R.port&&(E+=":"+R.port),E},r.buildAuthority=function(R){return r.buildUserinfo(R)+r.buildHost(R)},r.buildUserinfo=function(R){var E="";return R.username&&(E+=r.encode(R.username)),R.password&&(E+=":"+r.encode(R.password)),E&&(E+="@"),E},r.buildQuery=function(R,E,I){var w="",N,B,k,O;for(B in R)if(B!=="__proto__"&&c.call(R,B))if(m(R[B]))for(N={},k=0,O=R[B].length;k<O;k++)R[B][k]!==void 0&&N[R[B][k]+""]===void 0&&(w+="&"+r.buildQueryParameter(B,R[B][k],I),E!==!0&&(N[R[B][k]+""]=!0));else R[B]!==void 0&&(w+="&"+r.buildQueryParameter(B,R[B],I));return w.substring(1)},r.buildQueryParameter=function(R,E,I){return r.encodeQuery(R,I)+(E!==null?"="+r.encodeQuery(E,I):"")},r.addQuery=function(R,E,I){if(typeof E=="object")for(var w in E)c.call(E,w)&&r.addQuery(R,w,E[w]);else if(typeof E=="string"){if(R[E]===void 0){R[E]=I;return}else typeof R[E]=="string"&&(R[E]=[R[E]]);m(I)||(I=[I]),R[E]=(R[E]||[]).concat(I)}else throw new TypeError("URI.addQuery() accepts an object, string as the name parameter")},r.setQuery=function(R,E,I){if(typeof E=="object")for(var w in E)c.call(E,w)&&r.setQuery(R,w,E[w]);else if(typeof E=="string")R[E]=I===void 0?null:I;else throw new TypeError("URI.setQuery() accepts an object, string as the name parameter")},r.removeQuery=function(R,E,I){var w,N,B;if(m(E))for(w=0,N=E.length;w<N;w++)R[E[w]]=void 0;else if(u(E)==="RegExp")for(B in R)E.test(B)&&(R[B]=void 0);else if(typeof E=="object")for(B in E)c.call(E,B)&&r.removeQuery(R,B,E[B]);else if(typeof E=="string")I!==void 0?u(I)==="RegExp"?!m(R[E])&&I.test(R[E])?R[E]=void 0:R[E]=p(R[E],I):R[E]===String(I)&&(!m(I)||I.length===1)?R[E]=void 0:m(R[E])&&(R[E]=p(R[E],I)):R[E]=void 0;else throw new TypeError("URI.removeQuery() accepts an object, string, RegExp as the first parameter")},r.hasQuery=function(R,E,I,w){switch(u(E)){case"String":break;case"RegExp":for(var N in R)if(c.call(R,N)&&E.test(N)&&(I===void 0||r.hasQuery(R,N,I)))return!0;return!1;case"Object":for(var B in E)if(c.call(E,B)&&!r.hasQuery(R,B,E[B]))return!1;return!0;default:throw new TypeError("URI.hasQuery() accepts a string, regular expression or object as the name parameter")}switch(u(I)){case"Undefined":return E in R;case"Boolean":var k=!!(m(R[E])?R[E].length:R[E]);return I===k;case"Function":return!!I(R[E],E,R);case"Array":if(!m(R[E]))return!1;var O=w?y:f;return O(R[E],I);case"RegExp":return m(R[E])?w?y(R[E],I):!1:!!(R[E]&&R[E].match(I));case"Number":I=String(I);case"String":return m(R[E])?w?y(R[E],I):!1:R[E]===I;default:throw new TypeError("URI.hasQuery() accepts undefined, boolean, string, number, RegExp, Function as the value parameter")}},r.joinPaths=function(){for(var R=[],E=[],I=0,w=0;w<arguments.length;w++){var N=new r(arguments[w]);R.push(N);for(var B=N.segment(),k=0;k<B.length;k++)typeof B[k]=="string"&&E.push(B[k]),B[k]&&I++}if(!E.length||!I)return new r("");var O=new r("").segment(E);return(R[0].path()===""||R[0].path().slice(0,1)==="/")&&O.path("/"+O.path()),O.normalize()},r.commonPath=function(R,E){var I=Math.min(R.length,E.length),w;for(w=0;w<I;w++)if(R.charAt(w)!==E.charAt(w)){w--;break}return w<1?R.charAt(0)===E.charAt(0)&&R.charAt(0)==="/"?"/":"":((R.charAt(w)!=="/"||E.charAt(w)!=="/")&&(w=R.substring(0,w).lastIndexOf("/")),R.substring(0,w+1))},r.withinString=function(R,E,I){I||(I={});var w=I.start||r.findUri.start,N=I.end||r.findUri.end,B=I.trim||r.findUri.trim,k=I.parens||r.findUri.parens,O=/[a-z0-9-]=["']?$/i;for(w.lastIndex=0;;){var U=w.exec(R);if(!U)break;var J=U.index;if(I.ignoreHtml){var z=R.slice(Math.max(J-3,0),J);if(z&&O.test(z))continue}for(var ee=J+R.slice(J).search(N),K=R.slice(J,ee),j=-1;;){var q=k.exec(K);if(!q)break;var be=q.index+q[0].length;j=Math.max(j,be)}if(j>-1?K=K.slice(0,j)+K.slice(j).replace(B,""):K=K.replace(B,""),!(K.length<=U[0].length)&&!(I.ignore&&I.ignore.test(K))){ee=J+K.length;var Te=E(K,J,ee,R);if(Te===void 0){w.lastIndex=ee;continue}Te=String(Te),R=R.slice(0,J)+Te+R.slice(ee),w.lastIndex=J+Te.length}}return w.lastIndex=0,R},r.ensureValidHostname=function(R,E){var I=!!R,w=!!E,N=!1;if(w&&(N=y(r.hostProtocols,E)),N&&!I)throw new TypeError("Hostname cannot be empty, if protocol is "+E);if(R&&R.match(r.invalid_hostname_characters)){if(!e)throw new TypeError('Hostname "'+R+'" contains characters other than [A-Z0-9.-:_] and Punycode.js is not available');if(e.toASCII(R).match(r.invalid_hostname_characters))throw new TypeError('Hostname "'+R+'" contains characters other than [A-Z0-9.-:_]')}},r.ensureValidPort=function(R){if(R){var E=Number(R);if(!(s(E)&&E>0&&E<65536))throw new TypeError('Port "'+R+'" is not a valid port')}},r.noConflict=function(R){if(R){var E={URI:this.noConflict()};return i.URITemplate&&typeof i.URITemplate.noConflict=="function"&&(E.URITemplate=i.URITemplate.noConflict()),i.IPv6&&typeof i.IPv6.noConflict=="function"&&(E.IPv6=i.IPv6.noConflict()),i.SecondLevelDomains&&typeof i.SecondLevelDomains.noConflict=="function"&&(E.SecondLevelDomains=i.SecondLevelDomains.noConflict()),E}else i.URI===this&&(i.URI=o);return this},a.build=function(R){return R===!0?this._deferred_build=!0:(R===void 0||this._deferred_build)&&(this._string=r.build(this._parts),this._deferred_build=!1),this},a.clone=function(){return new r(this)},a.valueOf=a.toString=function(){return this.build(!1)._string};function X(R){return function(E,I){return E===void 0?this._parts[R]||"":(this._parts[R]=E||null,this.build(!I),this)}}function P(R,E){return function(I,w){return I===void 0?this._parts[R]||"":(I!==null&&(I=I+"",I.charAt(0)===E&&(I=I.substring(1))),this._parts[R]=I,this.build(!w),this)}}a.protocol=X("protocol"),a.username=X("username"),a.password=X("password"),a.hostname=X("hostname"),a.port=X("port"),a.query=P("query","?"),a.fragment=P("fragment","#"),a.search=function(R,E){var I=this.query(R,E);return typeof I=="string"&&I.length?"?"+I:I},a.hash=function(R,E){var I=this.fragment(R,E);return typeof I=="string"&&I.length?"#"+I:I},a.pathname=function(R,E){if(R===void 0||R===!0){var I=this._parts.path||(this._parts.hostname?"/":"");return R?(this._parts.urn?r.decodeUrnPath:r.decodePath)(I):I}else return this._parts.urn?this._parts.path=R?r.recodeUrnPath(R):"":this._parts.path=R?r.recodePath(R):"/",this.build(!E),this},a.path=a.pathname,a.href=function(R,E){var I;if(R===void 0)return this.toString();this._string="",this._parts=r._parts();var w=R instanceof r,N=typeof R=="object"&&(R.hostname||R.path||R.pathname);if(R.nodeName){var B=r.getDomAttribute(R);R=R[B]||"",N=!1}if(!w&&N&&R.pathname!==void 0&&(R=R.toString()),typeof R=="string"||R instanceof String)this._parts=r.parse(String(R),this._parts);else if(w||N){var k=w?R._parts:R;for(I in k)I!=="query"&&c.call(this._parts,I)&&(this._parts[I]=k[I]);k.query&&this.query(k.query,!1)}else throw new TypeError("invalid input");return this.build(!E),this},a.is=function(R){var E=!1,I=!1,w=!1,N=!1,B=!1,k=!1,O=!1,U=!this._parts.urn;switch(this._parts.hostname&&(U=!1,I=r.ip4_expression.test(this._parts.hostname),w=r.ip6_expression.test(this._parts.hostname),E=I||w,N=!E,B=N&&n&&n.has(this._parts.hostname),k=N&&r.idn_expression.test(this._parts.hostname),O=N&&r.punycode_expression.test(this._parts.hostname)),R.toLowerCase()){case"relative":return U;case"absolute":return!U;case"domain":case"name":return N;case"sld":return B;case"ip":return E;case"ip4":case"ipv4":case"inet4":return I;case"ip6":case"ipv6":case"inet6":return w;case"idn":return k;case"url":return!this._parts.urn;case"urn":return!!this._parts.urn;case"punycode":return O}return null};var v=a.protocol,F=a.port,M=a.hostname;a.protocol=function(R,E){if(R&&(R=R.replace(/:(\/\/)?$/,""),!R.match(r.protocol_expression)))throw new TypeError('Protocol "'+R+`" contains characters other than [A-Z0-9.+-] or doesn't start with [A-Z]`);return v.call(this,R,E)},a.scheme=a.protocol,a.port=function(R,E){return this._parts.urn?R===void 0?"":this:(R!==void 0&&(R===0&&(R=null),R&&(R+="",R.charAt(0)===":"&&(R=R.substring(1)),r.ensureValidPort(R))),F.call(this,R,E))},a.hostname=function(R,E){if(this._parts.urn)return R===void 0?"":this;if(R!==void 0){var I={preventInvalidHostname:this._parts.preventInvalidHostname},w=r.parseHost(R,I);if(w!=="/")throw new TypeError('Hostname "'+R+'" contains characters other than [A-Z0-9.-]');R=I.hostname,this._parts.preventInvalidHostname&&r.ensureValidHostname(R,this._parts.protocol)}return M.call(this,R,E)},a.origin=function(R,E){if(this._parts.urn)return R===void 0?"":this;if(R===void 0){var I=this.protocol(),w=this.authority();return w?(I?I+"://":"")+this.authority():""}else{var N=r(R);return this.protocol(N.protocol()).authority(N.authority()).build(!E),this}},a.host=function(R,E){if(this._parts.urn)return R===void 0?"":this;if(R===void 0)return this._parts.hostname?r.buildHost(this._parts):"";var I=r.parseHost(R,this._parts);if(I!=="/")throw new TypeError('Hostname "'+R+'" contains characters other than [A-Z0-9.-]');return this.build(!E),this},a.authority=function(R,E){if(this._parts.urn)return R===void 0?"":this;if(R===void 0)return this._parts.hostname?r.buildAuthority(this._parts):"";var I=r.parseAuthority(R,this._parts);if(I!=="/")throw new TypeError('Hostname "'+R+'" contains characters other than [A-Z0-9.-]');return this.build(!E),this},a.userinfo=function(R,E){if(this._parts.urn)return R===void 0?"":this;if(R===void 0){var I=r.buildUserinfo(this._parts);return I&&I.substring(0,I.length-1)}else return R[R.length-1]!=="@"&&(R+="@"),r.parseUserinfo(R,this._parts),this.build(!E),this},a.resource=function(R,E){var I;return R===void 0?this.path()+this.search()+this.hash():(I=r.parse(R),this._parts.path=I.path,this._parts.query=I.query,this._parts.fragment=I.fragment,this.build(!E),this)},a.subdomain=function(R,E){if(this._parts.urn)return R===void 0?"":this;if(R===void 0){if(!this._parts.hostname||this.is("IP"))return"";var I=this._parts.hostname.length-this.domain().length-1;return this._parts.hostname.substring(0,I)||""}else{var w=this._parts.hostname.length-this.domain().length,N=this._parts.hostname.substring(0,w),B=new RegExp("^"+l(N));if(R&&R.charAt(R.length-1)!=="."&&(R+="."),R.indexOf(":")!==-1)throw new TypeError("Domains cannot contain colons");return R&&r.ensureValidHostname(R,this._parts.protocol),this._parts.hostname=this._parts.hostname.replace(B,R),this.build(!E),this}},a.domain=function(R,E){if(this._parts.urn)return R===void 0?"":this;if(typeof R=="boolean"&&(E=R,R=void 0),R===void 0){if(!this._parts.hostname||this.is("IP"))return"";var I=this._parts.hostname.match(/\./g);if(I&&I.length<2)return this._parts.hostname;var w=this._parts.hostname.length-this.tld(E).length-1;return w=this._parts.hostname.lastIndexOf(".",w-1)+1,this._parts.hostname.substring(w)||""}else{if(!R)throw new TypeError("cannot set domain empty");if(R.indexOf(":")!==-1)throw new TypeError("Domains cannot contain colons");if(r.ensureValidHostname(R,this._parts.protocol),!this._parts.hostname||this.is("IP"))this._parts.hostname=R;else{var N=new RegExp(l(this.domain())+"$");this._parts.hostname=this._parts.hostname.replace(N,R)}return this.build(!E),this}},a.tld=function(R,E){if(this._parts.urn)return R===void 0?"":this;if(typeof R=="boolean"&&(E=R,R=void 0),R===void 0){if(!this._parts.hostname||this.is("IP"))return"";var I=this._parts.hostname.lastIndexOf("."),w=this._parts.hostname.substring(I+1);return E!==!0&&n&&n.list[w.toLowerCase()]&&n.get(this._parts.hostname)||w}else{var N;if(R)if(R.match(/[^a-zA-Z0-9-]/))if(n&&n.is(R))N=new RegExp(l(this.tld())+"$"),this._parts.hostname=this._parts.hostname.replace(N,R);else throw new TypeError('TLD "'+R+'" contains characters other than [A-Z0-9]');else{if(!this._parts.hostname||this.is("IP"))throw new ReferenceError("cannot set TLD on non-domain host");N=new RegExp(l(this.tld())+"$"),this._parts.hostname=this._parts.hostname.replace(N,R)}else throw new TypeError("cannot set TLD empty");return this.build(!E),this}},a.directory=function(R,E){if(this._parts.urn)return R===void 0?"":this;if(R===void 0||R===!0){if(!this._parts.path&&!this._parts.hostname)return"";if(this._parts.path==="/")return"/";var I=this._parts.path.length-this.filename().length-1,w=this._parts.path.substring(0,I)||(this._parts.hostname?"/":"");return R?r.decodePath(w):w}else{var N=this._parts.path.length-this.filename().length,B=this._parts.path.substring(0,N),k=new RegExp("^"+l(B));return this.is("relative")||(R||(R="/"),R.charAt(0)!=="/"&&(R="/"+R)),R&&R.charAt(R.length-1)!=="/"&&(R+="/"),R=r.recodePath(R),this._parts.path=this._parts.path.replace(k,R),this.build(!E),this}},a.filename=function(R,E){if(this._parts.urn)return R===void 0?"":this;if(typeof R!="string"){if(!this._parts.path||this._parts.path==="/")return"";var I=this._parts.path.lastIndexOf("/"),w=this._parts.path.substring(I+1);return R?r.decodePathSegment(w):w}else{var N=!1;R.charAt(0)==="/"&&(R=R.substring(1)),R.match(/\.?\//)&&(N=!0);var B=new RegExp(l(this.filename())+"$");return R=r.recodePath(R),this._parts.path=this._parts.path.replace(B,R),N?this.normalizePath(E):this.build(!E),this}},a.suffix=function(R,E){if(this._parts.urn)return R===void 0?"":this;if(R===void 0||R===!0){if(!this._parts.path||this._parts.path==="/")return"";var I=this.filename(),w=I.lastIndexOf("."),N,B;return w===-1?"":(N=I.substring(w+1),B=/^[a-z0-9%]+$/i.test(N)?N:"",R?r.decodePathSegment(B):B)}else{R.charAt(0)==="."&&(R=R.substring(1));var k=this.suffix(),O;if(k)R?O=new RegExp(l(k)+"$"):O=new RegExp(l("."+k)+"$");else{if(!R)return this;this._parts.path+="."+r.recodePath(R)}return O&&(R=r.recodePath(R),this._parts.path=this._parts.path.replace(O,R)),this.build(!E),this}},a.segment=function(R,E,I){var w=this._parts.urn?":":"/",N=this.path(),B=N.substring(0,1)==="/",k=N.split(w);if(R!==void 0&&typeof R!="number"&&(I=E,E=R,R=void 0),R!==void 0&&typeof R!="number")throw new Error('Bad segment "'+R+'", must be 0-based integer');if(B&&k.shift(),R<0&&(R=Math.max(k.length+R,0)),E===void 0)return R===void 0?k:k[R];if(R===null||k[R]===void 0)if(m(E)){k=[];for(var O=0,U=E.length;O<U;O++)!E[O].length&&(!k.length||!k[k.length-1].length)||(k.length&&!k[k.length-1].length&&k.pop(),k.push(x(E[O])))}else(E||typeof E=="string")&&(E=x(E),k[k.length-1]===""?k[k.length-1]=E:k.push(E));else E?k[R]=x(E):k.splice(R,1);return B&&k.unshift(""),this.path(k.join(w),I)},a.segmentCoded=function(R,E,I){var w,N,B;if(typeof R!="number"&&(I=E,E=R,R=void 0),E===void 0){if(w=this.segment(R,E,I),!m(w))w=w!==void 0?r.decode(w):void 0;else for(N=0,B=w.length;N<B;N++)w[N]=r.decode(w[N]);return w}if(!m(E))E=typeof E=="string"||E instanceof String?r.encode(E):E;else for(N=0,B=E.length;N<B;N++)E[N]=r.encode(E[N]);return this.segment(R,E,I)};var b=a.query;return a.query=function(R,E){if(R===!0)return r.parseQuery(this._parts.query,this._parts.escapeQuerySpace);if(typeof R=="function"){var I=r.parseQuery(this._parts.query,this._parts.escapeQuerySpace),w=R.call(this,I);return this._parts.query=r.buildQuery(w||I,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),this.build(!E),this}else return R!==void 0&&typeof R!="string"?(this._parts.query=r.buildQuery(R,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),this.build(!E),this):b.call(this,R,E)},a.setQuery=function(R,E,I){var w=r.parseQuery(this._parts.query,this._parts.escapeQuerySpace);if(typeof R=="string"||R instanceof String)w[R]=E!==void 0?E:null;else if(typeof R=="object")for(var N in R)c.call(R,N)&&(w[N]=R[N]);else throw new TypeError("URI.addQuery() accepts an object, string as the name parameter");return this._parts.query=r.buildQuery(w,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),typeof R!="string"&&(I=E),this.build(!I),this},a.addQuery=function(R,E,I){var w=r.parseQuery(this._parts.query,this._parts.escapeQuerySpace);return r.addQuery(w,R,E===void 0?null:E),this._parts.query=r.buildQuery(w,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),typeof R!="string"&&(I=E),this.build(!I),this},a.removeQuery=function(R,E,I){var w=r.parseQuery(this._parts.query,this._parts.escapeQuerySpace);return r.removeQuery(w,R,E),this._parts.query=r.buildQuery(w,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),typeof R!="string"&&(I=E),this.build(!I),this},a.hasQuery=function(R,E,I){var w=r.parseQuery(this._parts.query,this._parts.escapeQuerySpace);return r.hasQuery(w,R,E,I)},a.setSearch=a.setQuery,a.addSearch=a.addQuery,a.removeSearch=a.removeQuery,a.hasSearch=a.hasQuery,a.normalize=function(){return this._parts.urn?this.normalizeProtocol(!1).normalizePath(!1).normalizeQuery(!1).normalizeFragment(!1).build():this.normalizeProtocol(!1).normalizeHostname(!1).normalizePort(!1).normalizePath(!1).normalizeQuery(!1).normalizeFragment(!1).build()},a.normalizeProtocol=function(R){return typeof this._parts.protocol=="string"&&(this._parts.protocol=this._parts.protocol.toLowerCase(),this.build(!R)),this},a.normalizeHostname=function(R){return this._parts.hostname&&(this.is("IDN")&&e?this._parts.hostname=e.toASCII(this._parts.hostname):this.is("IPv6")&&t&&(this._parts.hostname=t.best(this._parts.hostname)),this._parts.hostname=this._parts.hostname.toLowerCase(),this.build(!R)),this},a.normalizePort=function(R){return typeof this._parts.protocol=="string"&&this._parts.port===r.defaultPorts[this._parts.protocol]&&(this._parts.port=null,this.build(!R)),this},a.normalizePath=function(R){var E=this._parts.path;if(!E)return this;if(this._parts.urn)return this._parts.path=r.recodeUrnPath(this._parts.path),this.build(!R),this;if(this._parts.path==="/")return this;E=r.recodePath(E);var I,w="",N,B;for(E.charAt(0)!=="/"&&(I=!0,E="/"+E),(E.slice(-3)==="/.."||E.slice(-2)==="/.")&&(E+="/"),E=E.replace(/(\/(\.\/)+)|(\/\.$)/g,"/").replace(/\/{2,}/g,"/"),I&&(w=E.substring(1).match(/^(\.\.\/)+/)||"",w&&(w=w[0]));N=E.search(/\/\.\.(\/|$)/),N!==-1;){if(N===0){E=E.substring(3);continue}B=E.substring(0,N).lastIndexOf("/"),B===-1&&(B=N),E=E.substring(0,B)+E.substring(N+3)}return I&&this.is("relative")&&(E=w+E.substring(1)),this._parts.path=E,this.build(!R),this},a.normalizePathname=a.normalizePath,a.normalizeQuery=function(R){return typeof this._parts.query=="string"&&(this._parts.query.length?this.query(r.parseQuery(this._parts.query,this._parts.escapeQuerySpace)):this._parts.query=null,this.build(!R)),this},a.normalizeFragment=function(R){return this._parts.fragment||(this._parts.fragment=null,this.build(!R)),this},a.normalizeSearch=a.normalizeQuery,a.normalizeHash=a.normalizeFragment,a.iso8859=function(){var R=r.encode,E=r.decode;r.encode=escape,r.decode=decodeURIComponent;try{this.normalize()}finally{r.encode=R,r.decode=E}return this},a.unicode=function(){var R=r.encode,E=r.decode;r.encode=C,r.decode=unescape;try{this.normalize()}finally{r.encode=R,r.decode=E}return this},a.readable=function(){var R=this.clone();R.username("").password("").normalize();var E="";if(R._parts.protocol&&(E+=R._parts.protocol+"://"),R._parts.hostname&&(R.is("punycode")&&e?(E+=e.toUnicode(R._parts.hostname),R._parts.port&&(E+=":"+R._parts.port)):E+=R.host()),R._parts.hostname&&R._parts.path&&R._parts.path.charAt(0)!=="/"&&(E+="/"),E+=R.path(!0),R._parts.query){for(var I="",w=0,N=R._parts.query.split("&"),B=N.length;w<B;w++){var k=(N[w]||"").split("=");I+="&"+r.decodeQuery(k[0],this._parts.escapeQuerySpace).replace(/&/g,"%26"),k[1]!==void 0&&(I+="="+r.decodeQuery(k[1],this._parts.escapeQuerySpace).replace(/&/g,"%26"))}E+="?"+I.substring(1)}return E+=r.decodeQuery(R.hash(),!0),E},a.absoluteTo=function(R){var E=this.clone(),I=["protocol","username","password","hostname","port"],w,N,B;if(this._parts.urn)throw new Error("URNs do not have any generally defined hierarchical components");if(R instanceof r||(R=new r(R)),E._parts.protocol||(E._parts.protocol=R._parts.protocol,this._parts.hostname))return E;for(N=0;B=I[N];N++)E._parts[B]=R._parts[B];return E._parts.path?(E._parts.path.substring(-2)===".."&&(E._parts.path+="/"),E.path().charAt(0)!=="/"&&(w=R.directory(),w=w||(R.path().indexOf("/")===0?"/":""),E._parts.path=(w?w+"/":"")+E._parts.path,E.normalizePath())):(E._parts.path=R._parts.path,E._parts.query||(E._parts.query=R._parts.query)),E.build(),E},a.relativeTo=function(R){var E=this.clone().normalize(),I,w,N,B,k;if(E._parts.urn)throw new Error("URNs do not have any generally defined hierarchical components");if(R=new r(R).normalize(),I=E._parts,w=R._parts,B=E.path(),k=R.path(),B.charAt(0)!=="/")throw new Error("URI is already relative");if(k.charAt(0)!=="/")throw new Error("Cannot calculate a URI relative to another relative URI");if(I.protocol===w.protocol&&(I.protocol=null),I.username!==w.username||I.password!==w.password||I.protocol!==null||I.username!==null||I.password!==null)return E.build();if(I.hostname===w.hostname&&I.port===w.port)I.hostname=null,I.port=null;else return E.build();if(B===k)return I.path="",E.build();if(N=r.commonPath(B,k),!N)return E.build();var O=w.path.substring(N.length).replace(/[^\/]*$/,"").replace(/.*?\//g,"../");return I.path=O+I.path.substring(N.length)||"./",E.build()},a.equals=function(R){var E=this.clone(),I=new r(R),w={},N={},B={},k,O,U;if(E.normalize(),I.normalize(),E.toString()===I.toString())return!0;if(k=E.query(),O=I.query(),E.query(""),I.query(""),E.toString()!==I.toString()||k.length!==O.length)return!1;w=r.parseQuery(k,this._parts.escapeQuerySpace),N=r.parseQuery(O,this._parts.escapeQuerySpace);for(U in w)if(c.call(w,U)){if(m(w[U])){if(!f(w[U],N[U]))return!1}else if(w[U]!==N[U])return!1;B[U]=!0}for(U in N)if(c.call(N,U)&&!B[U])return!1;return!0},a.preventInvalidHostname=function(R){return this._parts.preventInvalidHostname=!!R,this},a.duplicateQueryParameters=function(R){return this._parts.duplicateQueryParameters=!!R,this},a.escapeQuerySpace=function(R){return this._parts.escapeQuerySpace=!!R,this},r})});var Wee=yc((z3,J3)=>{var gJt=T(S());/*! @license DOMPurify 3.0.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.6/LICENSE */(function(e,t){typeof z3=="object"&&typeof J3<"u"?J3.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self,e.DOMPurify=t())})(z3,function(){"use strict";let{entries:e,setPrototypeOf:t,isFrozen:n,getPrototypeOf:i,getOwnPropertyDescriptor:o}=Object,{freeze:r,seal:s,create:a}=Object,{apply:c,construct:l}=typeof Reflect<"u"&&Reflect;r||(r=function(ke){return ke}),s||(s=function(ke){return ke}),c||(c=function(ke,ct,yt){return ke.apply(ct,yt)}),l||(l=function(ke,ct){return new ke(...ct)});let u=G(Array.prototype.forEach),m=G(Array.prototype.pop),p=G(Array.prototype.push),y=G(String.prototype.toLowerCase),f=G(String.prototype.toString),x=G(String.prototype.match),_=G(String.prototype.replace),C=G(String.prototype.indexOf),V=G(String.prototype.trim),L=G(RegExp.prototype.test),Z=X(TypeError);function G(ve){return function(ke){for(var ct=arguments.length,yt=new Array(ct>1?ct-1:0),ot=1;ot<ct;ot++)yt[ot-1]=arguments[ot];return c(ve,ke,yt)}}function X(ve){return function(){for(var ke=arguments.length,ct=new Array(ke),yt=0;yt<ke;yt++)ct[yt]=arguments[yt];return l(ve,ct)}}function P(ve,ke){let ct=arguments.length>2&&arguments[2]!==void 0?arguments[2]:y;t&&t(ve,null);let yt=ke.length;for(;yt--;){let ot=ke[yt];if(typeof ot=="string"){let ln=ct(ot);ln!==ot&&(n(ke)||(ke[yt]=ln),ot=ln)}ve[ot]=!0}return ve}function v(ve){let ke=a(null);for(let[ct,yt]of e(ve))o(ve,ct)!==void 0&&(ke[ct]=yt);return ke}function F(ve,ke){for(;ve!==null;){let yt=o(ve,ke);if(yt){if(yt.get)return G(yt.get);if(typeof yt.value=="function")return G(yt.value)}ve=i(ve)}function ct(yt){return console.warn("fallback value for",yt),null}return ct}let M=r(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),b=r(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),R=r(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),E=r(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),I=r(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),w=r(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),N=r(["#text"]),B=r(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),k=r(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),O=r(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),U=r(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),J=s(/\{\{[\w\W]*|[\w\W]*\}\}/gm),z=s(/<%[\w\W]*|[\w\W]*%>/gm),ee=s(/\${[\w\W]*}/gm),K=s(/^data-[\-\w.\u00B7-\uFFFF]/),j=s(/^aria-[\-\w]+$/),q=s(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),be=s(/^(?:\w+script|data):/i),Te=s(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),ae=s(/^html$/i);var xe=Object.freeze({__proto__:null,MUSTACHE_EXPR:J,ERB_EXPR:z,TMPLIT_EXPR:ee,DATA_ATTR:K,ARIA_ATTR:j,IS_ALLOWED_URI:q,IS_SCRIPT_OR_DATA:be,ATTR_WHITESPACE:Te,DOCTYPE_NAME:ae});let _e=function(){return typeof window>"u"?null:window},Ve=function(ke,ct){if(typeof ke!="object"||typeof ke.createPolicy!="function")return null;let yt=null,ot="data-tt-policy-suffix";ct&&ct.hasAttribute(ot)&&(yt=ct.getAttribute(ot));let ln="dompurify"+(yt?"#"+yt:"");try{return ke.createPolicy(ln,{createHTML(vn){return vn},createScriptURL(vn){return vn}})}catch{return console.warn("TrustedTypes policy "+ln+" could not be created."),null}};function Ie(){let ve=arguments.length>0&&arguments[0]!==void 0?arguments[0]:_e(),ke=Ln=>Ie(Ln);if(ke.version="3.0.6",ke.removed=[],!ve||!ve.document||ve.document.nodeType!==9)return ke.isSupported=!1,ke;let{document:ct}=ve,yt=ct,ot=yt.currentScript,{DocumentFragment:ln,HTMLTemplateElement:vn,Node:Dt,Element:Nt,NodeFilter:pe,NamedNodeMap:Ce=ve.NamedNodeMap||ve.MozNamedAttrMap,HTMLFormElement:Ht,DOMParser:ut,trustedTypes:hi}=ve,ji=Nt.prototype,pc=F(ji,"cloneNode"),bs=F(ji,"nextSibling"),ys=F(ji,"childNodes"),$r=F(ji,"parentNode");if(typeof vn=="function"){let Ln=ct.createElement("template");Ln.content&&Ln.content.ownerDocument&&(ct=Ln.content.ownerDocument)}let we,je="",{implementation:qe,createNodeIterator:Qe,createDocumentFragment:pt,getElementsByTagName:Bt}=ct,{importNode:Vn}=yt,di={};ke.isSupported=typeof e=="function"&&typeof $r=="function"&&qe&&qe.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:bo,ERB_EXPR:es,TMPLIT_EXPR:ts,DATA_ATTR:Mo,ARIA_ATTR:Ki,IS_SCRIPT_OR_DATA:ns,ATTR_WHITESPACE:zn}=xe,{IS_ALLOWED_URI:wn}=xe,mn=null,_i=P({},[...M,...b,...R,...I,...N]),ui=null,As=P({},[...B,...k,...O,...U]),fi=Object.seal(a(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Pr=null,Sh=null,cr=!0,kd=!0,qc=!1,pg=!0,Or=!1,bc=!1,Dd=!1,Ga=!1,Ch=!1,DT=!1,KV=!1,C8=!0,V8=!1,f_e="user-content-",UD=!0,HV=!1,BT={},YT=null,L8=P({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),R8=null,Z8=P({},["audio","video","img","source","image","track"]),kD=null,G8=P({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),eA="http://www.w3.org/1998/Math/MathML",tA="http://www.w3.org/2000/svg",kf="http://www.w3.org/1999/xhtml",OT=kf,DD=!1,BD=null,p_e=P({},[eA,tA,kf],f),bg=null,b_e=["application/xhtml+xml","text/html"],y_e="text/html",Ms=null,KT=null,g_e=ct.createElement("form"),E8=function(Ge){return Ge instanceof RegExp||Ge instanceof Function},YD=function(){let Ge=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(KT&&KT===Ge)){if((!Ge||typeof Ge!="object")&&(Ge={}),Ge=v(Ge),bg=b_e.indexOf(Ge.PARSER_MEDIA_TYPE)===-1?bg=y_e:bg=Ge.PARSER_MEDIA_TYPE,Ms=bg==="application/xhtml+xml"?f:y,mn="ALLOWED_TAGS"in Ge?P({},Ge.ALLOWED_TAGS,Ms):_i,ui="ALLOWED_ATTR"in Ge?P({},Ge.ALLOWED_ATTR,Ms):As,BD="ALLOWED_NAMESPACES"in Ge?P({},Ge.ALLOWED_NAMESPACES,f):p_e,kD="ADD_URI_SAFE_ATTR"in Ge?P(v(G8),Ge.ADD_URI_SAFE_ATTR,Ms):G8,R8="ADD_DATA_URI_TAGS"in Ge?P(v(Z8),Ge.ADD_DATA_URI_TAGS,Ms):Z8,YT="FORBID_CONTENTS"in Ge?P({},Ge.FORBID_CONTENTS,Ms):L8,Pr="FORBID_TAGS"in Ge?P({},Ge.FORBID_TAGS,Ms):{},Sh="FORBID_ATTR"in Ge?P({},Ge.FORBID_ATTR,Ms):{},BT="USE_PROFILES"in Ge?Ge.USE_PROFILES:!1,cr=Ge.ALLOW_ARIA_ATTR!==!1,kd=Ge.ALLOW_DATA_ATTR!==!1,qc=Ge.ALLOW_UNKNOWN_PROTOCOLS||!1,pg=Ge.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Or=Ge.SAFE_FOR_TEMPLATES||!1,bc=Ge.WHOLE_DOCUMENT||!1,Ch=Ge.RETURN_DOM||!1,DT=Ge.RETURN_DOM_FRAGMENT||!1,KV=Ge.RETURN_TRUSTED_TYPE||!1,Ga=Ge.FORCE_BODY||!1,C8=Ge.SANITIZE_DOM!==!1,V8=Ge.SANITIZE_NAMED_PROPS||!1,UD=Ge.KEEP_CONTENT!==!1,HV=Ge.IN_PLACE||!1,wn=Ge.ALLOWED_URI_REGEXP||q,OT=Ge.NAMESPACE||kf,fi=Ge.CUSTOM_ELEMENT_HANDLING||{},Ge.CUSTOM_ELEMENT_HANDLING&&E8(Ge.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(fi.tagNameCheck=Ge.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Ge.CUSTOM_ELEMENT_HANDLING&&E8(Ge.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(fi.attributeNameCheck=Ge.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Ge.CUSTOM_ELEMENT_HANDLING&&typeof Ge.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(fi.allowCustomizedBuiltInElements=Ge.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Or&&(kd=!1),DT&&(Ch=!0),BT&&(mn=P({},[...N]),ui=[],BT.html===!0&&(P(mn,M),P(ui,B)),BT.svg===!0&&(P(mn,b),P(ui,k),P(ui,U)),BT.svgFilters===!0&&(P(mn,R),P(ui,k),P(ui,U)),BT.mathMl===!0&&(P(mn,I),P(ui,O),P(ui,U))),Ge.ADD_TAGS&&(mn===_i&&(mn=v(mn)),P(mn,Ge.ADD_TAGS,Ms)),Ge.ADD_ATTR&&(ui===As&&(ui=v(ui)),P(ui,Ge.ADD_ATTR,Ms)),Ge.ADD_URI_SAFE_ATTR&&P(kD,Ge.ADD_URI_SAFE_ATTR,Ms),Ge.FORBID_CONTENTS&&(YT===L8&&(YT=v(YT)),P(YT,Ge.FORBID_CONTENTS,Ms)),UD&&(mn["#text"]=!0),bc&&P(mn,["html","head","body"]),mn.table&&(P(mn,["tbody"]),delete Pr.tbody),Ge.TRUSTED_TYPES_POLICY){if(typeof Ge.TRUSTED_TYPES_POLICY.createHTML!="function")throw Z('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof Ge.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Z('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');we=Ge.TRUSTED_TYPES_POLICY,je=we.createHTML("")}else we===void 0&&(we=Ve(hi,ot)),we!==null&&typeof je=="string"&&(je=we.createHTML(""));r&&r(Ge),KT=Ge}},X8=P({},["mi","mo","mn","ms","mtext"]),I8=P({},["foreignobject","desc","title","annotation-xml"]),x_e=P({},["title","style","font","a","script"]),nA=P({},b);P(nA,R),P(nA,E);let OD=P({},I);P(OD,w);let __e=function(Ge){let Zt=$r(Ge);(!Zt||!Zt.tagName)&&(Zt={namespaceURI:OT,tagName:"template"});let bn=y(Ge.tagName),No=y(Zt.tagName);return BD[Ge.namespaceURI]?Ge.namespaceURI===tA?Zt.namespaceURI===kf?bn==="svg":Zt.namespaceURI===eA?bn==="svg"&&(No==="annotation-xml"||X8[No]):!!nA[bn]:Ge.namespaceURI===eA?Zt.namespaceURI===kf?bn==="math":Zt.namespaceURI===tA?bn==="math"&&I8[No]:!!OD[bn]:Ge.namespaceURI===kf?Zt.namespaceURI===tA&&!I8[No]||Zt.namespaceURI===eA&&!X8[No]?!1:!OD[bn]&&(x_e[bn]||!nA[bn]):!!(bg==="application/xhtml+xml"&&BD[Ge.namespaceURI]):!1},yg=function(Ge){p(ke.removed,{element:Ge});try{Ge.parentNode.removeChild(Ge)}catch{Ge.remove()}},KD=function(Ge,Zt){try{p(ke.removed,{attribute:Zt.getAttributeNode(Ge),from:Zt})}catch{p(ke.removed,{attribute:null,from:Zt})}if(Zt.removeAttribute(Ge),Ge==="is"&&!ui[Ge])if(Ch||DT)try{yg(Zt)}catch{}else try{Zt.setAttribute(Ge,"")}catch{}},W8=function(Ge){let Zt=null,bn=null;if(Ga)Ge="<remove></remove>"+Ge;else{let Xa=x(Ge,/^[\r\n\t ]+/);bn=Xa&&Xa[0]}bg==="application/xhtml+xml"&&OT===kf&&(Ge='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+Ge+"</body></html>");let No=we?we.createHTML(Ge):Ge;if(OT===kf)try{Zt=new ut().parseFromString(No,bg)}catch{}if(!Zt||!Zt.documentElement){Zt=qe.createDocument(OT,"template",null);try{Zt.documentElement.innerHTML=DD?je:No}catch{}}let Ea=Zt.body||Zt.documentElement;return Ge&&bn&&Ea.insertBefore(ct.createTextNode(bn),Ea.childNodes[0]||null),OT===kf?Bt.call(Zt,bc?"html":"body")[0]:bc?Zt.documentElement:Ea},P8=function(Ge){return Qe.call(Ge.ownerDocument||Ge,Ge,pe.SHOW_ELEMENT|pe.SHOW_COMMENT|pe.SHOW_TEXT,null)},T_e=function(Ge){return Ge instanceof Ht&&(typeof Ge.nodeName!="string"||typeof Ge.textContent!="string"||typeof Ge.removeChild!="function"||!(Ge.attributes instanceof Ce)||typeof Ge.removeAttribute!="function"||typeof Ge.setAttribute!="function"||typeof Ge.namespaceURI!="string"||typeof Ge.insertBefore!="function"||typeof Ge.hasChildNodes!="function")},v8=function(Ge){return typeof Dt=="function"&&Ge instanceof Dt},Df=function(Ge,Zt,bn){di[Ge]&&u(di[Ge],No=>{No.call(ke,Zt,bn,KT)})},w8=function(Ge){let Zt=null;if(Df("beforeSanitizeElements",Ge,null),T_e(Ge))return yg(Ge),!0;let bn=Ms(Ge.nodeName);if(Df("uponSanitizeElement",Ge,{tagName:bn,allowedTags:mn}),Ge.hasChildNodes()&&!v8(Ge.firstElementChild)&&L(/<[/\w]/g,Ge.innerHTML)&&L(/<[/\w]/g,Ge.textContent))return yg(Ge),!0;if(!mn[bn]||Pr[bn]){if(!Pr[bn]&&A8(bn)&&(fi.tagNameCheck instanceof RegExp&&L(fi.tagNameCheck,bn)||fi.tagNameCheck instanceof Function&&fi.tagNameCheck(bn)))return!1;if(UD&&!YT[bn]){let No=$r(Ge)||Ge.parentNode,Ea=ys(Ge)||Ge.childNodes;if(Ea&&No){let Xa=Ea.length;for(let $c=Xa-1;$c>=0;--$c)No.insertBefore(pc(Ea[$c],!0),bs(Ge))}}return yg(Ge),!0}return Ge instanceof Nt&&!__e(Ge)||(bn==="noscript"||bn==="noembed"||bn==="noframes")&&L(/<\/no(script|embed|frames)/i,Ge.innerHTML)?(yg(Ge),!0):(Or&&Ge.nodeType===3&&(Zt=Ge.textContent,u([bo,es,ts],No=>{Zt=_(Zt,No," ")}),Ge.textContent!==Zt&&(p(ke.removed,{element:Ge.cloneNode()}),Ge.textContent=Zt)),Df("afterSanitizeElements",Ge,null),!1)},F8=function(Ge,Zt,bn){if(C8&&(Zt==="id"||Zt==="name")&&(bn in ct||bn in g_e))return!1;if(!(kd&&!Sh[Zt]&&L(Mo,Zt))){if(!(cr&&L(Ki,Zt))){if(!ui[Zt]||Sh[Zt]){if(!(A8(Ge)&&(fi.tagNameCheck instanceof RegExp&&L(fi.tagNameCheck,Ge)||fi.tagNameCheck instanceof Function&&fi.tagNameCheck(Ge))&&(fi.attributeNameCheck instanceof RegExp&&L(fi.attributeNameCheck,Zt)||fi.attributeNameCheck instanceof Function&&fi.attributeNameCheck(Zt))||Zt==="is"&&fi.allowCustomizedBuiltInElements&&(fi.tagNameCheck instanceof RegExp&&L(fi.tagNameCheck,bn)||fi.tagNameCheck instanceof Function&&fi.tagNameCheck(bn))))return!1}else if(!kD[Zt]){if(!L(wn,_(bn,zn,""))){if(!((Zt==="src"||Zt==="xlink:href"||Zt==="href")&&Ge!=="script"&&C(bn,"data:")===0&&R8[Ge])){if(!(qc&&!L(ns,_(bn,zn,"")))){if(bn)return!1}}}}}}return!0},A8=function(Ge){return Ge.indexOf("-")>0},M8=function(Ge){Df("beforeSanitizeAttributes",Ge,null);let{attributes:Zt}=Ge;if(!Zt)return;let bn={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:ui},No=Zt.length;for(;No--;){let Ea=Zt[No],{name:Xa,namespaceURI:$c,value:gg}=Ea,zV=Ms(Xa),el=Xa==="value"?gg:V(gg);if(bn.attrName=zV,bn.attrValue=el,bn.keepAttr=!0,bn.forceKeepAttr=void 0,Df("uponSanitizeAttribute",Ge,bn),el=bn.attrValue,bn.forceKeepAttr||(KD(Xa,Ge),!bn.keepAttr))continue;if(!pg&&L(/\/>/i,el)){KD(Xa,Ge);continue}Or&&u([bo,es,ts],U8=>{el=_(el,U8," ")});let N8=Ms(Ge.nodeName);if(F8(N8,zV,el)){if(V8&&(zV==="id"||zV==="name")&&(KD(Xa,Ge),el=f_e+el),we&&typeof hi=="object"&&typeof hi.getAttributeType=="function"&&!$c)switch(hi.getAttributeType(N8,zV)){case"TrustedHTML":{el=we.createHTML(el);break}case"TrustedScriptURL":{el=we.createScriptURL(el);break}}try{$c?Ge.setAttributeNS($c,Xa,el):Ge.setAttribute(Xa,el),m(ke.removed)}catch{}}}Df("afterSanitizeAttributes",Ge,null)},S_e=function Ln(Ge){let Zt=null,bn=P8(Ge);for(Df("beforeSanitizeShadowDOM",Ge,null);Zt=bn.nextNode();)Df("uponSanitizeShadowNode",Zt,null),!w8(Zt)&&(Zt.content instanceof ln&&Ln(Zt.content),M8(Zt));Df("afterSanitizeShadowDOM",Ge,null)};return ke.sanitize=function(Ln){let Ge=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Zt=null,bn=null,No=null,Ea=null;if(DD=!Ln,DD&&(Ln="<!-->"),typeof Ln!="string"&&!v8(Ln))if(typeof Ln.toString=="function"){if(Ln=Ln.toString(),typeof Ln!="string")throw Z("dirty is not a string, aborting")}else throw Z("toString is not a function");if(!ke.isSupported)return Ln;if(Dd||YD(Ge),ke.removed=[],typeof Ln=="string"&&(HV=!1),HV){if(Ln.nodeName){let gg=Ms(Ln.nodeName);if(!mn[gg]||Pr[gg])throw Z("root node is forbidden and cannot be sanitized in-place")}}else if(Ln instanceof Dt)Zt=W8("<!---->"),bn=Zt.ownerDocument.importNode(Ln,!0),bn.nodeType===1&&bn.nodeName==="BODY"||bn.nodeName==="HTML"?Zt=bn:Zt.appendChild(bn);else{if(!Ch&&!Or&&!bc&&Ln.indexOf("<")===-1)return we&&KV?we.createHTML(Ln):Ln;if(Zt=W8(Ln),!Zt)return Ch?null:KV?je:""}Zt&&Ga&&yg(Zt.firstChild);let Xa=P8(HV?Ln:Zt);for(;No=Xa.nextNode();)w8(No)||(No.content instanceof ln&&S_e(No.content),M8(No));if(HV)return Ln;if(Ch){if(DT)for(Ea=pt.call(Zt.ownerDocument);Zt.firstChild;)Ea.appendChild(Zt.firstChild);else Ea=Zt;return(ui.shadowroot||ui.shadowrootmode)&&(Ea=Vn.call(yt,Ea,!0)),Ea}let $c=bc?Zt.outerHTML:Zt.innerHTML;return bc&&mn["!doctype"]&&Zt.ownerDocument&&Zt.ownerDocument.doctype&&Zt.ownerDocument.doctype.name&&L(ae,Zt.ownerDocument.doctype.name)&&($c="<!DOCTYPE "+Zt.ownerDocument.doctype.name+`>
  61. `+$c),Or&&u([bo,es,ts],gg=>{$c=_($c,gg," ")}),we&&KV?we.createHTML($c):$c},ke.setConfig=function(){let Ln=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};YD(Ln),Dd=!0},ke.clearConfig=function(){KT=null,Dd=!1},ke.isValidAttribute=function(Ln,Ge,Zt){KT||YD({});let bn=Ms(Ln),No=Ms(Ge);return F8(bn,No,Zt)},ke.addHook=function(Ln,Ge){typeof Ge=="function"&&(di[Ln]=di[Ln]||[],p(di[Ln],Ge))},ke.removeHook=function(Ln){if(di[Ln])return m(di[Ln])},ke.removeHooks=function(Ln){di[Ln]&&(di[Ln]=[])},ke.removeAllHooks=function(){di={}},ke}var Me=Ie();return Me})});var Yoe=yc((P1n,Boe)=>{"use strict";var v1n=T(S());Boe.exports=PUe;var KI=1e20;function PUe(e,t){t||(t={});var n=t.cutoff==null?.25:t.cutoff,i=t.radius==null?8:t.radius,o=t.channel||0,r,s,a,c,l,u,m,p,y,f,x;if(ArrayBuffer.isView(e)||Array.isArray(e)){if(!t.width||!t.height)throw Error("For raw data width and height should be provided by options");r=t.width,s=t.height,c=e,t.stride?u=t.stride:u=Math.floor(e.length/r/s)}else window.HTMLCanvasElement&&e instanceof window.HTMLCanvasElement?(p=e,m=p.getContext("2d"),r=p.width,s=p.height,y=m.getImageData(0,0,r,s),c=y.data,u=4):window.CanvasRenderingContext2D&&e instanceof window.CanvasRenderingContext2D?(p=e.canvas,m=e,r=p.width,s=p.height,y=m.getImageData(0,0,r,s),c=y.data,u=4):window.ImageData&&e instanceof window.ImageData&&(y=e,r=e.width,s=e.height,c=y.data,u=4);if(a=Math.max(r,s),window.Uint8ClampedArray&&c instanceof window.Uint8ClampedArray||window.Uint8Array&&c instanceof window.Uint8Array)for(l=c,c=Array(r*s),f=0,x=Math.floor(l.length/u);f<x;f++)c[f]=l[f*u+o]/255;else if(u!==1)throw Error("Raw data can have only 1 value per pixel");var _=Array(r*s),C=Array(r*s),V=Array(a),L=Array(a),Z=Array(a+1),G=Array(a);for(f=0,x=r*s;f<x;f++){var X=c[f];_[f]=X===1?0:X===0?KI:Math.pow(Math.max(0,.5-X),2),C[f]=X===1?KI:X===0?0:Math.pow(Math.max(0,X-.5),2)}koe(_,r,s,V,L,G,Z),koe(C,r,s,V,L,G,Z);var P=window.Float32Array?new Float32Array(r*s):new Array(r*s);for(f=0,x=r*s;f<x;f++)P[f]=Math.min(Math.max(1-((_[f]-C[f])/i+n),0),1);return P}function koe(e,t,n,i,o,r,s){for(var a=0;a<t;a++){for(var c=0;c<n;c++)i[c]=e[c*t+a];for(Doe(i,o,r,s,n),c=0;c<n;c++)e[c*t+a]=o[c]}for(c=0;c<n;c++){for(a=0;a<t;a++)i[a]=e[c*t+a];for(Doe(i,o,r,s,t),a=0;a<t;a++)e[c*t+a]=Math.sqrt(o[a])}}function Doe(e,t,n,i,o){n[0]=0,i[0]=-KI,i[1]=+KI;for(var r=1,s=0;r<o;r++){for(var a=(e[r]+r*r-(e[n[s]]+n[s]*n[s]))/(2*r-2*n[s]);a<=i[s];)s--,a=(e[r]+r*r-(e[n[s]]+n[s]*n[s]))/(2*r-2*n[s]);s++,n[s]=r,i[s]=a,i[s+1]=+KI}for(r=0,s=0;r<o;r++){for(;i[s+1]<r;)s++;t[r]=(r-n[s])*(r-n[s])+e[n[s]]}}});var Joe=yc(($1n,aN)=>{var eVn=T(S());function YUe(){var e=0,t=1,n=2,i=3,o=4,r=5,s=6,a=7,c=8,l=9,u=10,m=11,p=12,y=13,f=14,x=15,_=16,C=17,V=0,L=1,Z=2,G=3,X=4;function P(b,R){return 55296<=b.charCodeAt(R)&&b.charCodeAt(R)<=56319&&56320<=b.charCodeAt(R+1)&&b.charCodeAt(R+1)<=57343}function v(b,R){R===void 0&&(R=0);var E=b.charCodeAt(R);if(55296<=E&&E<=56319&&R<b.length-1){var I=E,w=b.charCodeAt(R+1);return 56320<=w&&w<=57343?(I-55296)*1024+(w-56320)+65536:I}if(56320<=E&&E<=57343&&R>=1){var I=b.charCodeAt(R-1),w=E;return 55296<=I&&I<=56319?(I-55296)*1024+(w-56320)+65536:w}return E}function F(b,R,E){var I=[b].concat(R).concat([E]),w=I[I.length-2],N=E,B=I.lastIndexOf(f);if(B>1&&I.slice(1,B).every(function(U){return U==i})&&[i,y,C].indexOf(b)==-1)return Z;var k=I.lastIndexOf(o);if(k>0&&I.slice(1,k).every(function(U){return U==o})&&[p,o].indexOf(w)==-1)return I.filter(function(U){return U==o}).length%2==1?G:X;if(w==e&&N==t)return V;if(w==n||w==e||w==t)return N==f&&R.every(function(U){return U==i})?Z:L;if(N==n||N==e||N==t)return L;if(w==s&&(N==s||N==a||N==l||N==u))return V;if((w==l||w==a)&&(N==a||N==c))return V;if((w==u||w==c)&&N==c)return V;if(N==i||N==x)return V;if(N==r)return V;if(w==p)return V;var O=I.indexOf(i)!=-1?I.lastIndexOf(i)-1:I.length-2;return[y,C].indexOf(I[O])!=-1&&I.slice(O+1,-1).every(function(U){return U==i})&&N==f||w==x&&[_,C].indexOf(N)!=-1?V:R.indexOf(o)!=-1?Z:w==o&&N==o?V:L}this.nextBreak=function(b,R){if(R===void 0&&(R=0),R<0)return 0;if(R>=b.length-1)return b.length;for(var E=M(v(b,R)),I=[],w=R+1;w<b.length;w++)if(!P(b,w-1)){var N=M(v(b,w));if(F(E,I,N))return w;I.push(N)}return b.length},this.splitGraphemes=function(b){for(var R=[],E=0,I;(I=this.nextBreak(b,E))<b.length;)R.push(b.slice(E,I)),E=I;return E<b.length&&R.push(b.slice(E)),R},this.iterateGraphemes=function(b){var R=0,E={next:function(){var I,w;return(w=this.nextBreak(b,R))<b.length?(I=b.slice(R,w),R=w,{value:I,done:!1}):R<b.length?(I=b.slice(R),R=b.length,{value:I,done:!1}):{value:void 0,done:!0}}.bind(this)};return typeof Symbol<"u"&&Symbol.iterator&&(E[Symbol.iterator]=function(){return E}),E},this.countGraphemes=function(b){for(var R=0,E=0,I;(I=this.nextBreak(b,E))<b.length;)E=I,R++;return E<b.length&&R++,R};function M(b){return 1536<=b&&b<=1541||b==1757||b==1807||b==2274||b==3406||b==69821||70082<=b&&b<=70083||b==72250||72326<=b&&b<=72329||b==73030?p:b==13?e:b==10?t:0<=b&&b<=9||11<=b&&b<=12||14<=b&&b<=31||127<=b&&b<=159||b==173||b==1564||b==6158||b==8203||8206<=b&&b<=8207||b==8232||b==8233||8234<=b&&b<=8238||8288<=b&&b<=8292||b==8293||8294<=b&&b<=8303||55296<=b&&b<=57343||b==65279||65520<=b&&b<=65528||65529<=b&&b<=65531||113824<=b&&b<=113827||119155<=b&&b<=119162||b==917504||b==917505||917506<=b&&b<=917535||917632<=b&&b<=917759||918e3<=b&&b<=921599?n:768<=b&&b<=879||1155<=b&&b<=1159||1160<=b&&b<=1161||1425<=b&&b<=1469||b==1471||1473<=b&&b<=1474||1476<=b&&b<=1477||b==1479||1552<=b&&b<=1562||1611<=b&&b<=1631||b==1648||1750<=b&&b<=1756||1759<=b&&b<=1764||1767<=b&&b<=1768||1770<=b&&b<=1773||b==1809||1840<=b&&b<=1866||1958<=b&&b<=1968||2027<=b&&b<=2035||2070<=b&&b<=2073||2075<=b&&b<=2083||2085<=b&&b<=2087||2089<=b&&b<=2093||2137<=b&&b<=2139||2260<=b&&b<=2273||2275<=b&&b<=2306||b==2362||b==2364||2369<=b&&b<=2376||b==2381||2385<=b&&b<=2391||2402<=b&&b<=2403||b==2433||b==2492||b==2494||2497<=b&&b<=2500||b==2509||b==2519||2530<=b&&b<=2531||2561<=b&&b<=2562||b==2620||2625<=b&&b<=2626||2631<=b&&b<=2632||2635<=b&&b<=2637||b==2641||2672<=b&&b<=2673||b==2677||2689<=b&&b<=2690||b==2748||2753<=b&&b<=2757||2759<=b&&b<=2760||b==2765||2786<=b&&b<=2787||2810<=b&&b<=2815||b==2817||b==2876||b==2878||b==2879||2881<=b&&b<=2884||b==2893||b==2902||b==2903||2914<=b&&b<=2915||b==2946||b==3006||b==3008||b==3021||b==3031||b==3072||3134<=b&&b<=3136||3142<=b&&b<=3144||3146<=b&&b<=3149||3157<=b&&b<=3158||3170<=b&&b<=3171||b==3201||b==3260||b==3263||b==3266||b==3270||3276<=b&&b<=3277||3285<=b&&b<=3286||3298<=b&&b<=3299||3328<=b&&b<=3329||3387<=b&&b<=3388||b==3390||3393<=b&&b<=3396||b==3405||b==3415||3426<=b&&b<=3427||b==3530||b==3535||3538<=b&&b<=3540||b==3542||b==3551||b==3633||3636<=b&&b<=3642||3655<=b&&b<=3662||b==3761||3764<=b&&b<=3769||3771<=b&&b<=3772||3784<=b&&b<=3789||3864<=b&&b<=3865||b==3893||b==3895||b==3897||3953<=b&&b<=3966||3968<=b&&b<=3972||3974<=b&&b<=3975||3981<=b&&b<=3991||3993<=b&&b<=4028||b==4038||4141<=b&&b<=4144||4146<=b&&b<=4151||4153<=b&&b<=4154||4157<=b&&b<=4158||4184<=b&&b<=4185||4190<=b&&b<=4192||4209<=b&&b<=4212||b==4226||4229<=b&&b<=4230||b==4237||b==4253||4957<=b&&b<=4959||5906<=b&&b<=5908||5938<=b&&b<=5940||5970<=b&&b<=5971||6002<=b&&b<=6003||6068<=b&&b<=6069||6071<=b&&b<=6077||b==6086||6089<=b&&b<=6099||b==6109||6155<=b&&b<=6157||6277<=b&&b<=6278||b==6313||6432<=b&&b<=6434||6439<=b&&b<=6440||b==6450||6457<=b&&b<=6459||6679<=b&&b<=6680||b==6683||b==6742||6744<=b&&b<=6750||b==6752||b==6754||6757<=b&&b<=6764||6771<=b&&b<=6780||b==6783||6832<=b&&b<=6845||b==6846||6912<=b&&b<=6915||b==6964||6966<=b&&b<=6970||b==6972||b==6978||7019<=b&&b<=7027||7040<=b&&b<=7041||7074<=b&&b<=7077||7080<=b&&b<=7081||7083<=b&&b<=7085||b==7142||7144<=b&&b<=7145||b==7149||7151<=b&&b<=7153||7212<=b&&b<=7219||7222<=b&&b<=7223||7376<=b&&b<=7378||7380<=b&&b<=7392||7394<=b&&b<=7400||b==7405||b==7412||7416<=b&&b<=7417||7616<=b&&b<=7673||7675<=b&&b<=7679||b==8204||8400<=b&&b<=8412||8413<=b&&b<=8416||b==8417||8418<=b&&b<=8420||8421<=b&&b<=8432||11503<=b&&b<=11505||b==11647||11744<=b&&b<=11775||12330<=b&&b<=12333||12334<=b&&b<=12335||12441<=b&&b<=12442||b==42607||42608<=b&&b<=42610||42612<=b&&b<=42621||42654<=b&&b<=42655||42736<=b&&b<=42737||b==43010||b==43014||b==43019||43045<=b&&b<=43046||43204<=b&&b<=43205||43232<=b&&b<=43249||43302<=b&&b<=43309||43335<=b&&b<=43345||43392<=b&&b<=43394||b==43443||43446<=b&&b<=43449||b==43452||b==43493||43561<=b&&b<=43566||43569<=b&&b<=43570||43573<=b&&b<=43574||b==43587||b==43596||b==43644||b==43696||43698<=b&&b<=43700||43703<=b&&b<=43704||43710<=b&&b<=43711||b==43713||43756<=b&&b<=43757||b==43766||b==44005||b==44008||b==44013||b==64286||65024<=b&&b<=65039||65056<=b&&b<=65071||65438<=b&&b<=65439||b==66045||b==66272||66422<=b&&b<=66426||68097<=b&&b<=68099||68101<=b&&b<=68102||68108<=b&&b<=68111||68152<=b&&b<=68154||b==68159||68325<=b&&b<=68326||b==69633||69688<=b&&b<=69702||69759<=b&&b<=69761||69811<=b&&b<=69814||69817<=b&&b<=69818||69888<=b&&b<=69890||69927<=b&&b<=69931||69933<=b&&b<=69940||b==70003||70016<=b&&b<=70017||70070<=b&&b<=70078||70090<=b&&b<=70092||70191<=b&&b<=70193||b==70196||70198<=b&&b<=70199||b==70206||b==70367||70371<=b&&b<=70378||70400<=b&&b<=70401||b==70460||b==70462||b==70464||b==70487||70502<=b&&b<=70508||70512<=b&&b<=70516||70712<=b&&b<=70719||70722<=b&&b<=70724||b==70726||b==70832||70835<=b&&b<=70840||b==70842||b==70845||70847<=b&&b<=70848||70850<=b&&b<=70851||b==71087||71090<=b&&b<=71093||71100<=b&&b<=71101||71103<=b&&b<=71104||71132<=b&&b<=71133||71219<=b&&b<=71226||b==71229||71231<=b&&b<=71232||b==71339||b==71341||71344<=b&&b<=71349||b==71351||71453<=b&&b<=71455||71458<=b&&b<=71461||71463<=b&&b<=71467||72193<=b&&b<=72198||72201<=b&&b<=72202||72243<=b&&b<=72248||72251<=b&&b<=72254||b==72263||72273<=b&&b<=72278||72281<=b&&b<=72283||72330<=b&&b<=72342||72344<=b&&b<=72345||72752<=b&&b<=72758||72760<=b&&b<=72765||b==72767||72850<=b&&b<=72871||72874<=b&&b<=72880||72882<=b&&b<=72883||72885<=b&&b<=72886||73009<=b&&b<=73014||b==73018||73020<=b&&b<=73021||73023<=b&&b<=73029||b==73031||92912<=b&&b<=92916||92976<=b&&b<=92982||94095<=b&&b<=94098||113821<=b&&b<=113822||b==119141||119143<=b&&b<=119145||119150<=b&&b<=119154||119163<=b&&b<=119170||119173<=b&&b<=119179||119210<=b&&b<=119213||119362<=b&&b<=119364||121344<=b&&b<=121398||121403<=b&&b<=121452||b==121461||b==121476||121499<=b&&b<=121503||121505<=b&&b<=121519||122880<=b&&b<=122886||122888<=b&&b<=122904||122907<=b&&b<=122913||122915<=b&&b<=122916||122918<=b&&b<=122922||125136<=b&&b<=125142||125252<=b&&b<=125258||917536<=b&&b<=917631||917760<=b&&b<=917999?i:127462<=b&&b<=127487?o:b==2307||b==2363||2366<=b&&b<=2368||2377<=b&&b<=2380||2382<=b&&b<=2383||2434<=b&&b<=2435||2495<=b&&b<=2496||2503<=b&&b<=2504||2507<=b&&b<=2508||b==2563||2622<=b&&b<=2624||b==2691||2750<=b&&b<=2752||b==2761||2763<=b&&b<=2764||2818<=b&&b<=2819||b==2880||2887<=b&&b<=2888||2891<=b&&b<=2892||b==3007||3009<=b&&b<=3010||3014<=b&&b<=3016||3018<=b&&b<=3020||3073<=b&&b<=3075||3137<=b&&b<=3140||3202<=b&&b<=3203||b==3262||3264<=b&&b<=3265||3267<=b&&b<=3268||3271<=b&&b<=3272||3274<=b&&b<=3275||3330<=b&&b<=3331||3391<=b&&b<=3392||3398<=b&&b<=3400||3402<=b&&b<=3404||3458<=b&&b<=3459||3536<=b&&b<=3537||3544<=b&&b<=3550||3570<=b&&b<=3571||b==3635||b==3763||3902<=b&&b<=3903||b==3967||b==4145||4155<=b&&b<=4156||4182<=b&&b<=4183||b==4228||b==6070||6078<=b&&b<=6085||6087<=b&&b<=6088||6435<=b&&b<=6438||6441<=b&&b<=6443||6448<=b&&b<=6449||6451<=b&&b<=6456||6681<=b&&b<=6682||b==6741||b==6743||6765<=b&&b<=6770||b==6916||b==6965||b==6971||6973<=b&&b<=6977||6979<=b&&b<=6980||b==7042||b==7073||7078<=b&&b<=7079||b==7082||b==7143||7146<=b&&b<=7148||b==7150||7154<=b&&b<=7155||7204<=b&&b<=7211||7220<=b&&b<=7221||b==7393||7410<=b&&b<=7411||b==7415||43043<=b&&b<=43044||b==43047||43136<=b&&b<=43137||43188<=b&&b<=43203||43346<=b&&b<=43347||b==43395||43444<=b&&b<=43445||43450<=b&&b<=43451||43453<=b&&b<=43456||43567<=b&&b<=43568||43571<=b&&b<=43572||b==43597||b==43755||43758<=b&&b<=43759||b==43765||44003<=b&&b<=44004||44006<=b&&b<=44007||44009<=b&&b<=44010||b==44012||b==69632||b==69634||b==69762||69808<=b&&b<=69810||69815<=b&&b<=69816||b==69932||b==70018||70067<=b&&b<=70069||70079<=b&&b<=70080||70188<=b&&b<=70190||70194<=b&&b<=70195||b==70197||70368<=b&&b<=70370||70402<=b&&b<=70403||b==70463||70465<=b&&b<=70468||70471<=b&&b<=70472||70475<=b&&b<=70477||70498<=b&&b<=70499||70709<=b&&b<=70711||70720<=b&&b<=70721||b==70725||70833<=b&&b<=70834||b==70841||70843<=b&&b<=70844||b==70846||b==70849||71088<=b&&b<=71089||71096<=b&&b<=71099||b==71102||71216<=b&&b<=71218||71227<=b&&b<=71228||b==71230||b==71340||71342<=b&&b<=71343||b==71350||71456<=b&&b<=71457||b==71462||72199<=b&&b<=72200||b==72249||72279<=b&&b<=72280||b==72343||b==72751||b==72766||b==72873||b==72881||b==72884||94033<=b&&b<=94078||b==119142||b==119149?r:4352<=b&&b<=4447||43360<=b&&b<=43388?s:4448<=b&&b<=4519||55216<=b&&b<=55238?a:4520<=b&&b<=4607||55243<=b&&b<=55291?c:b==44032||b==44060||b==44088||b==44116||b==44144||b==44172||b==44200||b==44228||b==44256||b==44284||b==44312||b==44340||b==44368||b==44396||b==44424||b==44452||b==44480||b==44508||b==44536||b==44564||b==44592||b==44620||b==44648||b==44676||b==44704||b==44732||b==44760||b==44788||b==44816||b==44844||b==44872||b==44900||b==44928||b==44956||b==44984||b==45012||b==45040||b==45068||b==45096||b==45124||b==45152||b==45180||b==45208||b==45236||b==45264||b==45292||b==45320||b==45348||b==45376||b==45404||b==45432||b==45460||b==45488||b==45516||b==45544||b==45572||b==45600||b==45628||b==45656||b==45684||b==45712||b==45740||b==45768||b==45796||b==45824||b==45852||b==45880||b==45908||b==45936||b==45964||b==45992||b==46020||b==46048||b==46076||b==46104||b==46132||b==46160||b==46188||b==46216||b==46244||b==46272||b==46300||b==46328||b==46356||b==46384||b==46412||b==46440||b==46468||b==46496||b==46524||b==46552||b==46580||b==46608||b==46636||b==46664||b==46692||b==46720||b==46748||b==46776||b==46804||b==46832||b==46860||b==46888||b==46916||b==46944||b==46972||b==47e3||b==47028||b==47056||b==47084||b==47112||b==47140||b==47168||b==47196||b==47224||b==47252||b==47280||b==47308||b==47336||b==47364||b==47392||b==47420||b==47448||b==47476||b==47504||b==47532||b==47560||b==47588||b==47616||b==47644||b==47672||b==47700||b==47728||b==47756||b==47784||b==47812||b==47840||b==47868||b==47896||b==47924||b==47952||b==47980||b==48008||b==48036||b==48064||b==48092||b==48120||b==48148||b==48176||b==48204||b==48232||b==48260||b==48288||b==48316||b==48344||b==48372||b==48400||b==48428||b==48456||b==48484||b==48512||b==48540||b==48568||b==48596||b==48624||b==48652||b==48680||b==48708||b==48736||b==48764||b==48792||b==48820||b==48848||b==48876||b==48904||b==48932||b==48960||b==48988||b==49016||b==49044||b==49072||b==49100||b==49128||b==49156||b==49184||b==49212||b==49240||b==49268||b==49296||b==49324||b==49352||b==49380||b==49408||b==49436||b==49464||b==49492||b==49520||b==49548||b==49576||b==49604||b==49632||b==49660||b==49688||b==49716||b==49744||b==49772||b==49800||b==49828||b==49856||b==49884||b==49912||b==49940||b==49968||b==49996||b==50024||b==50052||b==50080||b==50108||b==50136||b==50164||b==50192||b==50220||b==50248||b==50276||b==50304||b==50332||b==50360||b==50388||b==50416||b==50444||b==50472||b==50500||b==50528||b==50556||b==50584||b==50612||b==50640||b==50668||b==50696||b==50724||b==50752||b==50780||b==50808||b==50836||b==50864||b==50892||b==50920||b==50948||b==50976||b==51004||b==51032||b==51060||b==51088||b==51116||b==51144||b==51172||b==51200||b==51228||b==51256||b==51284||b==51312||b==51340||b==51368||b==51396||b==51424||b==51452||b==51480||b==51508||b==51536||b==51564||b==51592||b==51620||b==51648||b==51676||b==51704||b==51732||b==51760||b==51788||b==51816||b==51844||b==51872||b==51900||b==51928||b==51956||b==51984||b==52012||b==52040||b==52068||b==52096||b==52124||b==52152||b==52180||b==52208||b==52236||b==52264||b==52292||b==52320||b==52348||b==52376||b==52404||b==52432||b==52460||b==52488||b==52516||b==52544||b==52572||b==52600||b==52628||b==52656||b==52684||b==52712||b==52740||b==52768||b==52796||b==52824||b==52852||b==52880||b==52908||b==52936||b==52964||b==52992||b==53020||b==53048||b==53076||b==53104||b==53132||b==53160||b==53188||b==53216||b==53244||b==53272||b==53300||b==53328||b==53356||b==53384||b==53412||b==53440||b==53468||b==53496||b==53524||b==53552||b==53580||b==53608||b==53636||b==53664||b==53692||b==53720||b==53748||b==53776||b==53804||b==53832||b==53860||b==53888||b==53916||b==53944||b==53972||b==54e3||b==54028||b==54056||b==54084||b==54112||b==54140||b==54168||b==54196||b==54224||b==54252||b==54280||b==54308||b==54336||b==54364||b==54392||b==54420||b==54448||b==54476||b==54504||b==54532||b==54560||b==54588||b==54616||b==54644||b==54672||b==54700||b==54728||b==54756||b==54784||b==54812||b==54840||b==54868||b==54896||b==54924||b==54952||b==54980||b==55008||b==55036||b==55064||b==55092||b==55120||b==55148||b==55176?l:44033<=b&&b<=44059||44061<=b&&b<=44087||44089<=b&&b<=44115||44117<=b&&b<=44143||44145<=b&&b<=44171||44173<=b&&b<=44199||44201<=b&&b<=44227||44229<=b&&b<=44255||44257<=b&&b<=44283||44285<=b&&b<=44311||44313<=b&&b<=44339||44341<=b&&b<=44367||44369<=b&&b<=44395||44397<=b&&b<=44423||44425<=b&&b<=44451||44453<=b&&b<=44479||44481<=b&&b<=44507||44509<=b&&b<=44535||44537<=b&&b<=44563||44565<=b&&b<=44591||44593<=b&&b<=44619||44621<=b&&b<=44647||44649<=b&&b<=44675||44677<=b&&b<=44703||44705<=b&&b<=44731||44733<=b&&b<=44759||44761<=b&&b<=44787||44789<=b&&b<=44815||44817<=b&&b<=44843||44845<=b&&b<=44871||44873<=b&&b<=44899||44901<=b&&b<=44927||44929<=b&&b<=44955||44957<=b&&b<=44983||44985<=b&&b<=45011||45013<=b&&b<=45039||45041<=b&&b<=45067||45069<=b&&b<=45095||45097<=b&&b<=45123||45125<=b&&b<=45151||45153<=b&&b<=45179||45181<=b&&b<=45207||45209<=b&&b<=45235||45237<=b&&b<=45263||45265<=b&&b<=45291||45293<=b&&b<=45319||45321<=b&&b<=45347||45349<=b&&b<=45375||45377<=b&&b<=45403||45405<=b&&b<=45431||45433<=b&&b<=45459||45461<=b&&b<=45487||45489<=b&&b<=45515||45517<=b&&b<=45543||45545<=b&&b<=45571||45573<=b&&b<=45599||45601<=b&&b<=45627||45629<=b&&b<=45655||45657<=b&&b<=45683||45685<=b&&b<=45711||45713<=b&&b<=45739||45741<=b&&b<=45767||45769<=b&&b<=45795||45797<=b&&b<=45823||45825<=b&&b<=45851||45853<=b&&b<=45879||45881<=b&&b<=45907||45909<=b&&b<=45935||45937<=b&&b<=45963||45965<=b&&b<=45991||45993<=b&&b<=46019||46021<=b&&b<=46047||46049<=b&&b<=46075||46077<=b&&b<=46103||46105<=b&&b<=46131||46133<=b&&b<=46159||46161<=b&&b<=46187||46189<=b&&b<=46215||46217<=b&&b<=46243||46245<=b&&b<=46271||46273<=b&&b<=46299||46301<=b&&b<=46327||46329<=b&&b<=46355||46357<=b&&b<=46383||46385<=b&&b<=46411||46413<=b&&b<=46439||46441<=b&&b<=46467||46469<=b&&b<=46495||46497<=b&&b<=46523||46525<=b&&b<=46551||46553<=b&&b<=46579||46581<=b&&b<=46607||46609<=b&&b<=46635||46637<=b&&b<=46663||46665<=b&&b<=46691||46693<=b&&b<=46719||46721<=b&&b<=46747||46749<=b&&b<=46775||46777<=b&&b<=46803||46805<=b&&b<=46831||46833<=b&&b<=46859||46861<=b&&b<=46887||46889<=b&&b<=46915||46917<=b&&b<=46943||46945<=b&&b<=46971||46973<=b&&b<=46999||47001<=b&&b<=47027||47029<=b&&b<=47055||47057<=b&&b<=47083||47085<=b&&b<=47111||47113<=b&&b<=47139||47141<=b&&b<=47167||47169<=b&&b<=47195||47197<=b&&b<=47223||47225<=b&&b<=47251||47253<=b&&b<=47279||47281<=b&&b<=47307||47309<=b&&b<=47335||47337<=b&&b<=47363||47365<=b&&b<=47391||47393<=b&&b<=47419||47421<=b&&b<=47447||47449<=b&&b<=47475||47477<=b&&b<=47503||47505<=b&&b<=47531||47533<=b&&b<=47559||47561<=b&&b<=47587||47589<=b&&b<=47615||47617<=b&&b<=47643||47645<=b&&b<=47671||47673<=b&&b<=47699||47701<=b&&b<=47727||47729<=b&&b<=47755||47757<=b&&b<=47783||47785<=b&&b<=47811||47813<=b&&b<=47839||47841<=b&&b<=47867||47869<=b&&b<=47895||47897<=b&&b<=47923||47925<=b&&b<=47951||47953<=b&&b<=47979||47981<=b&&b<=48007||48009<=b&&b<=48035||48037<=b&&b<=48063||48065<=b&&b<=48091||48093<=b&&b<=48119||48121<=b&&b<=48147||48149<=b&&b<=48175||48177<=b&&b<=48203||48205<=b&&b<=48231||48233<=b&&b<=48259||48261<=b&&b<=48287||48289<=b&&b<=48315||48317<=b&&b<=48343||48345<=b&&b<=48371||48373<=b&&b<=48399||48401<=b&&b<=48427||48429<=b&&b<=48455||48457<=b&&b<=48483||48485<=b&&b<=48511||48513<=b&&b<=48539||48541<=b&&b<=48567||48569<=b&&b<=48595||48597<=b&&b<=48623||48625<=b&&b<=48651||48653<=b&&b<=48679||48681<=b&&b<=48707||48709<=b&&b<=48735||48737<=b&&b<=48763||48765<=b&&b<=48791||48793<=b&&b<=48819||48821<=b&&b<=48847||48849<=b&&b<=48875||48877<=b&&b<=48903||48905<=b&&b<=48931||48933<=b&&b<=48959||48961<=b&&b<=48987||48989<=b&&b<=49015||49017<=b&&b<=49043||49045<=b&&b<=49071||49073<=b&&b<=49099||49101<=b&&b<=49127||49129<=b&&b<=49155||49157<=b&&b<=49183||49185<=b&&b<=49211||49213<=b&&b<=49239||49241<=b&&b<=49267||49269<=b&&b<=49295||49297<=b&&b<=49323||49325<=b&&b<=49351||49353<=b&&b<=49379||49381<=b&&b<=49407||49409<=b&&b<=49435||49437<=b&&b<=49463||49465<=b&&b<=49491||49493<=b&&b<=49519||49521<=b&&b<=49547||49549<=b&&b<=49575||49577<=b&&b<=49603||49605<=b&&b<=49631||49633<=b&&b<=49659||49661<=b&&b<=49687||49689<=b&&b<=49715||49717<=b&&b<=49743||49745<=b&&b<=49771||49773<=b&&b<=49799||49801<=b&&b<=49827||49829<=b&&b<=49855||49857<=b&&b<=49883||49885<=b&&b<=49911||49913<=b&&b<=49939||49941<=b&&b<=49967||49969<=b&&b<=49995||49997<=b&&b<=50023||50025<=b&&b<=50051||50053<=b&&b<=50079||50081<=b&&b<=50107||50109<=b&&b<=50135||50137<=b&&b<=50163||50165<=b&&b<=50191||50193<=b&&b<=50219||50221<=b&&b<=50247||50249<=b&&b<=50275||50277<=b&&b<=50303||50305<=b&&b<=50331||50333<=b&&b<=50359||50361<=b&&b<=50387||50389<=b&&b<=50415||50417<=b&&b<=50443||50445<=b&&b<=50471||50473<=b&&b<=50499||50501<=b&&b<=50527||50529<=b&&b<=50555||50557<=b&&b<=50583||50585<=b&&b<=50611||50613<=b&&b<=50639||50641<=b&&b<=50667||50669<=b&&b<=50695||50697<=b&&b<=50723||50725<=b&&b<=50751||50753<=b&&b<=50779||50781<=b&&b<=50807||50809<=b&&b<=50835||50837<=b&&b<=50863||50865<=b&&b<=50891||50893<=b&&b<=50919||50921<=b&&b<=50947||50949<=b&&b<=50975||50977<=b&&b<=51003||51005<=b&&b<=51031||51033<=b&&b<=51059||51061<=b&&b<=51087||51089<=b&&b<=51115||51117<=b&&b<=51143||51145<=b&&b<=51171||51173<=b&&b<=51199||51201<=b&&b<=51227||51229<=b&&b<=51255||51257<=b&&b<=51283||51285<=b&&b<=51311||51313<=b&&b<=51339||51341<=b&&b<=51367||51369<=b&&b<=51395||51397<=b&&b<=51423||51425<=b&&b<=51451||51453<=b&&b<=51479||51481<=b&&b<=51507||51509<=b&&b<=51535||51537<=b&&b<=51563||51565<=b&&b<=51591||51593<=b&&b<=51619||51621<=b&&b<=51647||51649<=b&&b<=51675||51677<=b&&b<=51703||51705<=b&&b<=51731||51733<=b&&b<=51759||51761<=b&&b<=51787||51789<=b&&b<=51815||51817<=b&&b<=51843||51845<=b&&b<=51871||51873<=b&&b<=51899||51901<=b&&b<=51927||51929<=b&&b<=51955||51957<=b&&b<=51983||51985<=b&&b<=52011||52013<=b&&b<=52039||52041<=b&&b<=52067||52069<=b&&b<=52095||52097<=b&&b<=52123||52125<=b&&b<=52151||52153<=b&&b<=52179||52181<=b&&b<=52207||52209<=b&&b<=52235||52237<=b&&b<=52263||52265<=b&&b<=52291||52293<=b&&b<=52319||52321<=b&&b<=52347||52349<=b&&b<=52375||52377<=b&&b<=52403||52405<=b&&b<=52431||52433<=b&&b<=52459||52461<=b&&b<=52487||52489<=b&&b<=52515||52517<=b&&b<=52543||52545<=b&&b<=52571||52573<=b&&b<=52599||52601<=b&&b<=52627||52629<=b&&b<=52655||52657<=b&&b<=52683||52685<=b&&b<=52711||52713<=b&&b<=52739||52741<=b&&b<=52767||52769<=b&&b<=52795||52797<=b&&b<=52823||52825<=b&&b<=52851||52853<=b&&b<=52879||52881<=b&&b<=52907||52909<=b&&b<=52935||52937<=b&&b<=52963||52965<=b&&b<=52991||52993<=b&&b<=53019||53021<=b&&b<=53047||53049<=b&&b<=53075||53077<=b&&b<=53103||53105<=b&&b<=53131||53133<=b&&b<=53159||53161<=b&&b<=53187||53189<=b&&b<=53215||53217<=b&&b<=53243||53245<=b&&b<=53271||53273<=b&&b<=53299||53301<=b&&b<=53327||53329<=b&&b<=53355||53357<=b&&b<=53383||53385<=b&&b<=53411||53413<=b&&b<=53439||53441<=b&&b<=53467||53469<=b&&b<=53495||53497<=b&&b<=53523||53525<=b&&b<=53551||53553<=b&&b<=53579||53581<=b&&b<=53607||53609<=b&&b<=53635||53637<=b&&b<=53663||53665<=b&&b<=53691||53693<=b&&b<=53719||53721<=b&&b<=53747||53749<=b&&b<=53775||53777<=b&&b<=53803||53805<=b&&b<=53831||53833<=b&&b<=53859||53861<=b&&b<=53887||53889<=b&&b<=53915||53917<=b&&b<=53943||53945<=b&&b<=53971||53973<=b&&b<=53999||54001<=b&&b<=54027||54029<=b&&b<=54055||54057<=b&&b<=54083||54085<=b&&b<=54111||54113<=b&&b<=54139||54141<=b&&b<=54167||54169<=b&&b<=54195||54197<=b&&b<=54223||54225<=b&&b<=54251||54253<=b&&b<=54279||54281<=b&&b<=54307||54309<=b&&b<=54335||54337<=b&&b<=54363||54365<=b&&b<=54391||54393<=b&&b<=54419||54421<=b&&b<=54447||54449<=b&&b<=54475||54477<=b&&b<=54503||54505<=b&&b<=54531||54533<=b&&b<=54559||54561<=b&&b<=54587||54589<=b&&b<=54615||54617<=b&&b<=54643||54645<=b&&b<=54671||54673<=b&&b<=54699||54701<=b&&b<=54727||54729<=b&&b<=54755||54757<=b&&b<=54783||54785<=b&&b<=54811||54813<=b&&b<=54839||54841<=b&&b<=54867||54869<=b&&b<=54895||54897<=b&&b<=54923||54925<=b&&b<=54951||54953<=b&&b<=54979||54981<=b&&b<=55007||55009<=b&&b<=55035||55037<=b&&b<=55063||55065<=b&&b<=55091||55093<=b&&b<=55119||55121<=b&&b<=55147||55149<=b&&b<=55175||55177<=b&&b<=55203?u:b==9757||b==9977||9994<=b&&b<=9997||b==127877||127938<=b&&b<=127940||b==127943||127946<=b&&b<=127948||128066<=b&&b<=128067||128070<=b&&b<=128080||b==128110||128112<=b&&b<=128120||b==128124||128129<=b&&b<=128131||128133<=b&&b<=128135||b==128170||128372<=b&&b<=128373||b==128378||b==128400||128405<=b&&b<=128406||128581<=b&&b<=128583||128587<=b&&b<=128591||b==128675||128692<=b&&b<=128694||b==128704||b==128716||129304<=b&&b<=129308||129310<=b&&b<=129311||b==129318||129328<=b&&b<=129337||129341<=b&&b<=129342||129489<=b&&b<=129501?y:127995<=b&&b<=127999?f:b==8205?x:b==9792||b==9794||9877<=b&&b<=9878||b==9992||b==10084||b==127752||b==127806||b==127859||b==127891||b==127908||b==127912||b==127979||b==127981||b==128139||128187<=b&&b<=128188||b==128295||b==128300||b==128488||b==128640||b==128658?_:128102<=b&&b<=128105?C:m}return this}typeof aN<"u"&&aN.exports&&(aN.exports=YUe)});var Ire=yc((mEn,NO)=>{"use strict";var hEn=T(S());NO.exports=fN;NO.exports.default=fN;function fN(e,t,n){n=n||2;var i=t&&t.length,o=i?t[0]*n:e.length,r=Gre(e,0,o,n,!0),s=[];if(!r||r.next===r.prev)return s;var a,c,l,u,m,p,y;if(i&&(r=zDe(e,t,r,n)),e.length>80*n){a=l=e[0],c=u=e[1];for(var f=n;f<o;f+=n)m=e[f],p=e[f+1],m<a&&(a=m),p<c&&(c=p),m>l&&(l=m),p>u&&(u=p);y=Math.max(l-a,u-c),y=y!==0?32767/y:0}return bW(r,s,n,a,c,y,0),s}function Gre(e,t,n,i,o){var r,s;if(o===MO(e,t,n,i)>0)for(r=t;r<n;r+=i)s=Zre(r,e[r],e[r+1],s);else for(r=n-i;r>=t;r-=i)s=Zre(r,e[r],e[r+1],s);return s&&pN(s,s.next)&&(gW(s),s=s.next),s}function jx(e,t){if(!e)return e;t||(t=e);var n=e,i;do if(i=!1,!n.steiner&&(pN(n,n.next)||_r(n.prev,n,n.next)===0)){if(gW(n),n=t=n.prev,n===n.next)break;i=!0}else n=n.next;while(i||n!==t);return t}function bW(e,t,n,i,o,r,s){if(e){!s&&r&&$De(e,i,o,r);for(var a=e,c,l;e.prev!==e.next;){if(c=e.prev,l=e.next,r?ODe(e,i,o,r):YDe(e)){t.push(c.i/n|0),t.push(e.i/n|0),t.push(l.i/n|0),gW(e),e=l.next,a=l.next;continue}if(e=l,e===a){s?s===1?(e=KDe(jx(e),t,n),bW(e,t,n,i,o,r,2)):s===2&&HDe(e,t,n,i,o,r):bW(jx(e),t,n,i,o,r,1);break}}}}function YDe(e){var t=e.prev,n=e,i=e.next;if(_r(t,n,i)>=0)return!1;for(var o=t.x,r=n.x,s=i.x,a=t.y,c=n.y,l=i.y,u=o<r?o<s?o:s:r<s?r:s,m=a<c?a<l?a:l:c<l?c:l,p=o>r?o>s?o:s:r>s?r:s,y=a>c?a>l?a:l:c>l?c:l,f=i.next;f!==t;){if(f.x>=u&&f.x<=p&&f.y>=m&&f.y<=y&&uC(o,a,r,c,s,l,f.x,f.y)&&_r(f.prev,f,f.next)>=0)return!1;f=f.next}return!0}function ODe(e,t,n,i){var o=e.prev,r=e,s=e.next;if(_r(o,r,s)>=0)return!1;for(var a=o.x,c=r.x,l=s.x,u=o.y,m=r.y,p=s.y,y=a<c?a<l?a:l:c<l?c:l,f=u<m?u<p?u:p:m<p?m:p,x=a>c?a>l?a:l:c>l?c:l,_=u>m?u>p?u:p:m>p?m:p,C=FO(y,f,t,n,i),V=FO(x,_,t,n,i),L=e.prevZ,Z=e.nextZ;L&&L.z>=C&&Z&&Z.z<=V;){if(L.x>=y&&L.x<=x&&L.y>=f&&L.y<=_&&L!==o&&L!==s&&uC(a,u,c,m,l,p,L.x,L.y)&&_r(L.prev,L,L.next)>=0||(L=L.prevZ,Z.x>=y&&Z.x<=x&&Z.y>=f&&Z.y<=_&&Z!==o&&Z!==s&&uC(a,u,c,m,l,p,Z.x,Z.y)&&_r(Z.prev,Z,Z.next)>=0))return!1;Z=Z.nextZ}for(;L&&L.z>=C;){if(L.x>=y&&L.x<=x&&L.y>=f&&L.y<=_&&L!==o&&L!==s&&uC(a,u,c,m,l,p,L.x,L.y)&&_r(L.prev,L,L.next)>=0)return!1;L=L.prevZ}for(;Z&&Z.z<=V;){if(Z.x>=y&&Z.x<=x&&Z.y>=f&&Z.y<=_&&Z!==o&&Z!==s&&uC(a,u,c,m,l,p,Z.x,Z.y)&&_r(Z.prev,Z,Z.next)>=0)return!1;Z=Z.nextZ}return!0}function KDe(e,t,n){var i=e;do{var o=i.prev,r=i.next.next;!pN(o,r)&&Ere(o,i,i.next,r)&&yW(o,r)&&yW(r,o)&&(t.push(o.i/n|0),t.push(i.i/n|0),t.push(r.i/n|0),gW(i),gW(i.next),i=e=r),i=i.next}while(i!==e);return jx(i)}function HDe(e,t,n,i,o,r){var s=e;do{for(var a=s.next.next;a!==s.prev;){if(s.i!==a.i&&nBe(s,a)){var c=Xre(s,a);s=jx(s,s.next),c=jx(c,c.next),bW(s,t,n,i,o,r,0),bW(c,t,n,i,o,r,0);return}a=a.next}s=s.next}while(s!==e)}function zDe(e,t,n,i){var o=[],r,s,a,c,l;for(r=0,s=t.length;r<s;r++)a=t[r]*i,c=r<s-1?t[r+1]*i:e.length,l=Gre(e,a,c,i,!1),l===l.next&&(l.steiner=!0),o.push(tBe(l));for(o.sort(JDe),r=0;r<o.length;r++)n=QDe(o[r],n);return n}function JDe(e,t){return e.x-t.x}function QDe(e,t){var n=jDe(e,t);if(!n)return t;var i=Xre(n,e);return jx(i,i.next),jx(n,n.next)}function jDe(e,t){var n=t,i=e.x,o=e.y,r=-1/0,s;do{if(o<=n.y&&o>=n.next.y&&n.next.y!==n.y){var a=n.x+(o-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(a<=i&&a>r&&(r=a,s=n.x<n.next.x?n:n.next,a===i))return s}n=n.next}while(n!==t);if(!s)return null;var c=s,l=s.x,u=s.y,m=1/0,p;n=s;do i>=n.x&&n.x>=l&&i!==n.x&&uC(o<u?i:r,o,l,u,o<u?r:i,o,n.x,n.y)&&(p=Math.abs(o-n.y)/(i-n.x),yW(n,e)&&(p<m||p===m&&(n.x>s.x||n.x===s.x&&qDe(s,n)))&&(s=n,m=p)),n=n.next;while(n!==c);return s}function qDe(e,t){return _r(e.prev,e,t.prev)<0&&_r(t.next,e,e.next)<0}function $De(e,t,n,i){var o=e;do o.z===0&&(o.z=FO(o.x,o.y,t,n,i)),o.prevZ=o.prev,o.nextZ=o.next,o=o.next;while(o!==e);o.prevZ.nextZ=null,o.prevZ=null,eBe(o)}function eBe(e){var t,n,i,o,r,s,a,c,l=1;do{for(n=e,e=null,r=null,s=0;n;){for(s++,i=n,a=0,t=0;t<l&&(a++,i=i.nextZ,!!i);t++);for(c=l;a>0||c>0&&i;)a!==0&&(c===0||!i||n.z<=i.z)?(o=n,n=n.nextZ,a--):(o=i,i=i.nextZ,c--),r?r.nextZ=o:e=o,o.prevZ=r,r=o;n=i}r.nextZ=null,l*=2}while(s>1);return e}function FO(e,t,n,i,o){return e=(e-n)*o|0,t=(t-i)*o|0,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,e|t<<1}function tBe(e){var t=e,n=e;do(t.x<n.x||t.x===n.x&&t.y<n.y)&&(n=t),t=t.next;while(t!==e);return n}function uC(e,t,n,i,o,r,s,a){return(o-s)*(t-a)>=(e-s)*(r-a)&&(e-s)*(i-a)>=(n-s)*(t-a)&&(n-s)*(r-a)>=(o-s)*(i-a)}function nBe(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!iBe(e,t)&&(yW(e,t)&&yW(t,e)&&oBe(e,t)&&(_r(e.prev,e,t.prev)||_r(e,t.prev,t))||pN(e,t)&&_r(e.prev,e,e.next)>0&&_r(t.prev,t,t.next)>0)}function _r(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function pN(e,t){return e.x===t.x&&e.y===t.y}function Ere(e,t,n,i){var o=hN(_r(e,t,n)),r=hN(_r(e,t,i)),s=hN(_r(n,i,e)),a=hN(_r(n,i,t));return!!(o!==r&&s!==a||o===0&&mN(e,n,t)||r===0&&mN(e,i,t)||s===0&&mN(n,e,i)||a===0&&mN(n,t,i))}function mN(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function hN(e){return e>0?1:e<0?-1:0}function iBe(e,t){var n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&Ere(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1}function yW(e,t){return _r(e.prev,e,e.next)<0?_r(e,t,e.next)>=0&&_r(e,e.prev,t)>=0:_r(e,t,e.prev)<0||_r(e,e.next,t)<0}function oBe(e,t){var n=e,i=!1,o=(e.x+t.x)/2,r=(e.y+t.y)/2;do n.y>r!=n.next.y>r&&n.next.y!==n.y&&o<(n.next.x-n.x)*(r-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next;while(n!==e);return i}function Xre(e,t){var n=new AO(e.i,e.x,e.y),i=new AO(t.i,t.x,t.y),o=e.next,r=t.prev;return e.next=t,t.prev=e,n.next=o,o.prev=n,i.next=n,n.prev=i,r.next=i,i.prev=r,i}function Zre(e,t,n,i){var o=new AO(e,t,n);return i?(o.next=i.next,o.prev=i,i.next.prev=o,i.next=o):(o.prev=o,o.next=o),o}function gW(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function AO(e,t,n){this.i=e,this.x=t,this.y=n,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}fN.deviation=function(e,t,n,i){var o=t&&t.length,r=o?t[0]*n:e.length,s=Math.abs(MO(e,0,r,n));if(o)for(var a=0,c=t.length;a<c;a++){var l=t[a]*n,u=a<c-1?t[a+1]*n:e.length;s-=Math.abs(MO(e,l,u,n))}var m=0;for(a=0;a<i.length;a+=3){var p=i[a]*n,y=i[a+1]*n,f=i[a+2]*n;m+=Math.abs((e[p]-e[f])*(e[y+1]-e[p+1])-(e[p]-e[y])*(e[f+1]-e[p+1]))}return s===0&&m===0?0:Math.abs((m-s)/s)};function MO(e,t,n,i){for(var o=0,r=t,s=n-i;r<n;r+=i)o+=(e[s]-e[r])*(e[r+1]+e[s+1]),s=r;return o}fN.flatten=function(e){for(var t=e[0][0].length,n={vertices:[],holes:[],dimensions:t},i=0,o=0;o<e.length;o++){for(var r=0;r<e[o].length;r++)for(var s=0;s<t;s++)n.vertices.push(e[o][r][s]);o>0&&(i+=e[o-1].length,n.holes.push(i))}return n}});var ede=yc((hH,fH)=>{var jQn=T(S());(function(e,t){typeof hH=="object"&&typeof fH<"u"?fH.exports=t():typeof define=="function"&&define.amd?define(t):(e=e||self).RBush=t()})(hH,function(){"use strict";function e(_,C,V,L,Z){(function G(X,P,v,F,M){for(;F>v;){if(F-v>600){var b=F-v+1,R=P-v+1,E=Math.log(b),I=.5*Math.exp(2*E/3),w=.5*Math.sqrt(E*I*(b-I)/b)*(R-b/2<0?-1:1),N=Math.max(v,Math.floor(P-R*I/b+w)),B=Math.min(F,Math.floor(P+(b-R)*I/b+w));G(X,P,N,B,M)}var k=X[P],O=v,U=F;for(t(X,v,P),M(X[F],k)>0&&t(X,v,F);O<U;){for(t(X,O,U),O++,U--;M(X[O],k)<0;)O++;for(;M(X[U],k)>0;)U--}M(X[v],k)===0?t(X,v,U):t(X,++U,F),U<=P&&(v=U+1),P<=U&&(F=U-1)}})(_,C,V||0,L||_.length-1,Z||n)}function t(_,C,V){var L=_[C];_[C]=_[V],_[V]=L}function n(_,C){return _<C?-1:_>C?1:0}var i=function(_){_===void 0&&(_=9),this._maxEntries=Math.max(4,_),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()};function o(_,C,V){if(!V)return C.indexOf(_);for(var L=0;L<C.length;L++)if(V(_,C[L]))return L;return-1}function r(_,C){s(_,0,_.children.length,C,_)}function s(_,C,V,L,Z){Z||(Z=f(null)),Z.minX=1/0,Z.minY=1/0,Z.maxX=-1/0,Z.maxY=-1/0;for(var G=C;G<V;G++){var X=_.children[G];a(Z,_.leaf?L(X):X)}return Z}function a(_,C){return _.minX=Math.min(_.minX,C.minX),_.minY=Math.min(_.minY,C.minY),_.maxX=Math.max(_.maxX,C.maxX),_.maxY=Math.max(_.maxY,C.maxY),_}function c(_,C){return _.minX-C.minX}function l(_,C){return _.minY-C.minY}function u(_){return(_.maxX-_.minX)*(_.maxY-_.minY)}function m(_){return _.maxX-_.minX+(_.maxY-_.minY)}function p(_,C){return _.minX<=C.minX&&_.minY<=C.minY&&C.maxX<=_.maxX&&C.maxY<=_.maxY}function y(_,C){return C.minX<=_.maxX&&C.minY<=_.maxY&&C.maxX>=_.minX&&C.maxY>=_.minY}function f(_){return{children:_,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function x(_,C,V,L,Z){for(var G=[C,V];G.length;)if(!((V=G.pop())-(C=G.pop())<=L)){var X=C+Math.ceil((V-C)/L/2)*L;e(_,X,C,V,Z),G.push(C,X,X,V)}}return i.prototype.all=function(){return this._all(this.data,[])},i.prototype.search=function(_){var C=this.data,V=[];if(!y(_,C))return V;for(var L=this.toBBox,Z=[];C;){for(var G=0;G<C.children.length;G++){var X=C.children[G],P=C.leaf?L(X):X;y(_,P)&&(C.leaf?V.push(X):p(_,P)?this._all(X,V):Z.push(X))}C=Z.pop()}return V},i.prototype.collides=function(_){var C=this.data;if(!y(_,C))return!1;for(var V=[];C;){for(var L=0;L<C.children.length;L++){var Z=C.children[L],G=C.leaf?this.toBBox(Z):Z;if(y(_,G)){if(C.leaf||p(_,G))return!0;V.push(Z)}}C=V.pop()}return!1},i.prototype.load=function(_){if(!_||!_.length)return this;if(_.length<this._minEntries){for(var C=0;C<_.length;C++)this.insert(_[C]);return this}var V=this._build(_.slice(),0,_.length-1,0);if(this.data.children.length)if(this.data.height===V.height)this._splitRoot(this.data,V);else{if(this.data.height<V.height){var L=this.data;this.data=V,V=L}this._insert(V,this.data.height-V.height-1,!0)}else this.data=V;return this},i.prototype.insert=function(_){return _&&this._insert(_,this.data.height-1),this},i.prototype.clear=function(){return this.data=f([]),this},i.prototype.remove=function(_,C){if(!_)return this;for(var V,L,Z,G=this.data,X=this.toBBox(_),P=[],v=[];G||P.length;){if(G||(G=P.pop(),L=P[P.length-1],V=v.pop(),Z=!0),G.leaf){var F=o(_,G.children,C);if(F!==-1)return G.children.splice(F,1),P.push(G),this._condense(P),this}Z||G.leaf||!p(G,X)?L?(V++,G=L.children[V],Z=!1):G=null:(P.push(G),v.push(V),V=0,L=G,G=G.children[0])}return this},i.prototype.toBBox=function(_){return _},i.prototype.compareMinX=function(_,C){return _.minX-C.minX},i.prototype.compareMinY=function(_,C){return _.minY-C.minY},i.prototype.toJSON=function(){return this.data},i.prototype.fromJSON=function(_){return this.data=_,this},i.prototype._all=function(_,C){for(var V=[];_;)_.leaf?C.push.apply(C,_.children):V.push.apply(V,_.children),_=V.pop();return C},i.prototype._build=function(_,C,V,L){var Z,G=V-C+1,X=this._maxEntries;if(G<=X)return r(Z=f(_.slice(C,V+1)),this.toBBox),Z;L||(L=Math.ceil(Math.log(G)/Math.log(X)),X=Math.ceil(G/Math.pow(X,L-1))),(Z=f([])).leaf=!1,Z.height=L;var P=Math.ceil(G/X),v=P*Math.ceil(Math.sqrt(X));x(_,C,V,v,this.compareMinX);for(var F=C;F<=V;F+=v){var M=Math.min(F+v-1,V);x(_,F,M,P,this.compareMinY);for(var b=F;b<=M;b+=P){var R=Math.min(b+P-1,M);Z.children.push(this._build(_,b,R,L-1))}}return r(Z,this.toBBox),Z},i.prototype._chooseSubtree=function(_,C,V,L){for(;L.push(C),!C.leaf&&L.length-1!==V;){for(var Z=1/0,G=1/0,X=void 0,P=0;P<C.children.length;P++){var v=C.children[P],F=u(v),M=(b=_,R=v,(Math.max(R.maxX,b.maxX)-Math.min(R.minX,b.minX))*(Math.max(R.maxY,b.maxY)-Math.min(R.minY,b.minY))-F);M<G?(G=M,Z=F<Z?F:Z,X=v):M===G&&F<Z&&(Z=F,X=v)}C=X||C.children[0]}var b,R;return C},i.prototype._insert=function(_,C,V){var L=V?_:this.toBBox(_),Z=[],G=this._chooseSubtree(L,this.data,C,Z);for(G.children.push(_),a(G,L);C>=0&&Z[C].children.length>this._maxEntries;)this._split(Z,C),C--;this._adjustParentBBoxes(L,Z,C)},i.prototype._split=function(_,C){var V=_[C],L=V.children.length,Z=this._minEntries;this._chooseSplitAxis(V,Z,L);var G=this._chooseSplitIndex(V,Z,L),X=f(V.children.splice(G,V.children.length-G));X.height=V.height,X.leaf=V.leaf,r(V,this.toBBox),r(X,this.toBBox),C?_[C-1].children.push(X):this._splitRoot(V,X)},i.prototype._splitRoot=function(_,C){this.data=f([_,C]),this.data.height=_.height+1,this.data.leaf=!1,r(this.data,this.toBBox)},i.prototype._chooseSplitIndex=function(_,C,V){for(var L,Z,G,X,P,v,F,M=1/0,b=1/0,R=C;R<=V-C;R++){var E=s(_,0,R,this.toBBox),I=s(_,R,V,this.toBBox),w=(Z=E,G=I,X=void 0,P=void 0,v=void 0,F=void 0,X=Math.max(Z.minX,G.minX),P=Math.max(Z.minY,G.minY),v=Math.min(Z.maxX,G.maxX),F=Math.min(Z.maxY,G.maxY),Math.max(0,v-X)*Math.max(0,F-P)),N=u(E)+u(I);w<M?(M=w,L=R,b=N<b?N:b):w===M&&N<b&&(b=N,L=R)}return L||V-C},i.prototype._chooseSplitAxis=function(_,C,V){var L=_.leaf?this.compareMinX:c,Z=_.leaf?this.compareMinY:l;this._allDistMargin(_,C,V,L)<this._allDistMargin(_,C,V,Z)&&_.children.sort(L)},i.prototype._allDistMargin=function(_,C,V,L){_.children.sort(L);for(var Z=this.toBBox,G=s(_,0,C,Z),X=s(_,V-C,V,Z),P=m(G)+m(X),v=C;v<V-C;v++){var F=_.children[v];a(G,_.leaf?Z(F):F),P+=m(G)}for(var M=V-C-1;M>=C;M--){var b=_.children[M];a(X,_.leaf?Z(b):b),P+=m(X)}return P},i.prototype._adjustParentBBoxes=function(_,C,V){for(var L=V;L>=0;L--)a(C[L],_)},i.prototype._condense=function(_){for(var C=_.length-1,V=void 0;C>=0;C--)_[C].children.length===0?C>0?(V=_[C-1].children).splice(V.indexOf(_[C]),1):this.clear():r(_[C],this.toBBox)},i})});var wJ=yc((exports,module)=>{var gfi=T(S());/*!
  62. * protobuf.js v7.2.5 (c) 2016, daniel wirtz
  63. * compiled tue, 22 aug 2023 00:04:28 utc
  64. * licensed under the bsd-3-clause license
  65. * see: https://github.com/dcodeio/protobuf.js for details
  66. */(function(undefined){"use strict";(function(t,n,i){function o(s){var a=n[s];return a||t[s][0].call(a=n[s]={exports:{}},o,a,a.exports),a.exports}var r=o(i[0]);r.util.global.protobuf=r,typeof define=="function"&&define.amd&&define(["long"],function(s){return s&&s.isLong&&(r.util.Long=s,r.configure()),r}),typeof module=="object"&&module&&module.exports&&(module.exports=r)})({1:[function(e,t,n){"use strict";t.exports=i;function i(o,r){for(var s=new Array(arguments.length-1),a=0,c=2,l=!0;c<arguments.length;)s[a++]=arguments[c++];return new Promise(function(m,p){s[a]=function(f){if(l)if(l=!1,f)p(f);else{for(var x=new Array(arguments.length-1),_=0;_<x.length;)x[_++]=arguments[_];m.apply(null,x)}};try{o.apply(r||null,s)}catch(y){l&&(l=!1,p(y))}})}},{}],2:[function(e,t,n){"use strict";var i=n;i.length=function(l){var u=l.length;if(!u)return 0;for(var m=0;--u%4>1&&l.charAt(u)==="=";)++m;return Math.ceil(l.length*3)/4-m};for(var o=new Array(64),r=new Array(123),s=0;s<64;)r[o[s]=s<26?s+65:s<52?s+71:s<62?s-4:s-59|43]=s++;i.encode=function(l,u,m){for(var p=null,y=[],f=0,x=0,_;u<m;){var C=l[u++];switch(x){case 0:y[f++]=o[C>>2],_=(C&3)<<4,x=1;break;case 1:y[f++]=o[_|C>>4],_=(C&15)<<2,x=2;break;case 2:y[f++]=o[_|C>>6],y[f++]=o[C&63],x=0;break}f>8191&&((p||(p=[])).push(String.fromCharCode.apply(String,y)),f=0)}return x&&(y[f++]=o[_],y[f++]=61,x===1&&(y[f++]=61)),p?(f&&p.push(String.fromCharCode.apply(String,y.slice(0,f))),p.join("")):String.fromCharCode.apply(String,y.slice(0,f))};var a="invalid encoding";i.decode=function(l,u,m){for(var p=m,y=0,f,x=0;x<l.length;){var _=l.charCodeAt(x++);if(_===61&&y>1)break;if((_=r[_])===undefined)throw Error(a);switch(y){case 0:f=_,y=1;break;case 1:u[m++]=f<<2|(_&48)>>4,f=_,y=2;break;case 2:u[m++]=(f&15)<<4|(_&60)>>2,f=_,y=3;break;case 3:u[m++]=(f&3)<<6|_,y=0;break}}if(y===1)throw Error(a);return m-p},i.test=function(l){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(l)}},{}],3:[function(e,t,n){"use strict";t.exports=i;function i(){this._listeners={}}i.prototype.on=function(r,s,a){return(this._listeners[r]||(this._listeners[r]=[])).push({fn:s,ctx:a||this}),this},i.prototype.off=function(r,s){if(r===undefined)this._listeners={};else if(s===undefined)this._listeners[r]=[];else for(var a=this._listeners[r],c=0;c<a.length;)a[c].fn===s?a.splice(c,1):++c;return this},i.prototype.emit=function(r){var s=this._listeners[r];if(s){for(var a=[],c=1;c<arguments.length;)a.push(arguments[c++]);for(c=0;c<s.length;)s[c].fn.apply(s[c++].ctx,a)}return this}},{}],4:[function(e,t,n){"use strict";t.exports=i(i);function i(c){return typeof Float32Array<"u"?function(){var l=new Float32Array([-0]),u=new Uint8Array(l.buffer),m=u[3]===128;function p(_,C,V){l[0]=_,C[V]=u[0],C[V+1]=u[1],C[V+2]=u[2],C[V+3]=u[3]}function y(_,C,V){l[0]=_,C[V]=u[3],C[V+1]=u[2],C[V+2]=u[1],C[V+3]=u[0]}c.writeFloatLE=m?p:y,c.writeFloatBE=m?y:p;function f(_,C){return u[0]=_[C],u[1]=_[C+1],u[2]=_[C+2],u[3]=_[C+3],l[0]}function x(_,C){return u[3]=_[C],u[2]=_[C+1],u[1]=_[C+2],u[0]=_[C+3],l[0]}c.readFloatLE=m?f:x,c.readFloatBE=m?x:f}():function(){function l(m,p,y,f){var x=p<0?1:0;if(x&&(p=-p),p===0)m(1/p>0?0:2147483648,y,f);else if(isNaN(p))m(2143289344,y,f);else if(p>34028234663852886e22)m((x<<31|2139095040)>>>0,y,f);else if(p<11754943508222875e-54)m((x<<31|Math.round(p/1401298464324817e-60))>>>0,y,f);else{var _=Math.floor(Math.log(p)/Math.LN2),C=Math.round(p*Math.pow(2,-_)*8388608)&8388607;m((x<<31|_+127<<23|C)>>>0,y,f)}}c.writeFloatLE=l.bind(null,o),c.writeFloatBE=l.bind(null,r);function u(m,p,y){var f=m(p,y),x=(f>>31)*2+1,_=f>>>23&255,C=f&8388607;return _===255?C?NaN:x*(1/0):_===0?x*1401298464324817e-60*C:x*Math.pow(2,_-150)*(C+8388608)}c.readFloatLE=u.bind(null,s),c.readFloatBE=u.bind(null,a)}(),typeof Float64Array<"u"?function(){var l=new Float64Array([-0]),u=new Uint8Array(l.buffer),m=u[7]===128;function p(_,C,V){l[0]=_,C[V]=u[0],C[V+1]=u[1],C[V+2]=u[2],C[V+3]=u[3],C[V+4]=u[4],C[V+5]=u[5],C[V+6]=u[6],C[V+7]=u[7]}function y(_,C,V){l[0]=_,C[V]=u[7],C[V+1]=u[6],C[V+2]=u[5],C[V+3]=u[4],C[V+4]=u[3],C[V+5]=u[2],C[V+6]=u[1],C[V+7]=u[0]}c.writeDoubleLE=m?p:y,c.writeDoubleBE=m?y:p;function f(_,C){return u[0]=_[C],u[1]=_[C+1],u[2]=_[C+2],u[3]=_[C+3],u[4]=_[C+4],u[5]=_[C+5],u[6]=_[C+6],u[7]=_[C+7],l[0]}function x(_,C){return u[7]=_[C],u[6]=_[C+1],u[5]=_[C+2],u[4]=_[C+3],u[3]=_[C+4],u[2]=_[C+5],u[1]=_[C+6],u[0]=_[C+7],l[0]}c.readDoubleLE=m?f:x,c.readDoubleBE=m?x:f}():function(){function l(m,p,y,f,x,_){var C=f<0?1:0;if(C&&(f=-f),f===0)m(0,x,_+p),m(1/f>0?0:2147483648,x,_+y);else if(isNaN(f))m(0,x,_+p),m(2146959360,x,_+y);else if(f>17976931348623157e292)m(0,x,_+p),m((C<<31|2146435072)>>>0,x,_+y);else{var V;if(f<22250738585072014e-324)V=f/5e-324,m(V>>>0,x,_+p),m((C<<31|V/4294967296)>>>0,x,_+y);else{var L=Math.floor(Math.log(f)/Math.LN2);L===1024&&(L=1023),V=f*Math.pow(2,-L),m(V*4503599627370496>>>0,x,_+p),m((C<<31|L+1023<<20|V*1048576&1048575)>>>0,x,_+y)}}}c.writeDoubleLE=l.bind(null,o,0,4),c.writeDoubleBE=l.bind(null,r,4,0);function u(m,p,y,f,x){var _=m(f,x+p),C=m(f,x+y),V=(C>>31)*2+1,L=C>>>20&2047,Z=4294967296*(C&1048575)+_;return L===2047?Z?NaN:V*(1/0):L===0?V*5e-324*Z:V*Math.pow(2,L-1075)*(Z+4503599627370496)}c.readDoubleLE=u.bind(null,s,0,4),c.readDoubleBE=u.bind(null,a,4,0)}(),c}function o(c,l,u){l[u]=c&255,l[u+1]=c>>>8&255,l[u+2]=c>>>16&255,l[u+3]=c>>>24}function r(c,l,u){l[u]=c>>>24,l[u+1]=c>>>16&255,l[u+2]=c>>>8&255,l[u+3]=c&255}function s(c,l){return(c[l]|c[l+1]<<8|c[l+2]<<16|c[l+3]<<24)>>>0}function a(c,l){return(c[l]<<24|c[l+1]<<16|c[l+2]<<8|c[l+3])>>>0}},{}],5:[function(require,module,exports){"use strict";module.exports=inquire;function inquire(moduleName){try{var mod=eval("quire".replace(/^/,"re"))(moduleName);if(mod&&(mod.length||Object.keys(mod).length))return mod}catch(e){}return null}},{}],6:[function(e,t,n){"use strict";t.exports=i;function i(o,r,s){var a=s||8192,c=a>>>1,l=null,u=a;return function(p){if(p<1||p>c)return o(p);u+p>a&&(l=o(a),u=0);var y=r.call(l,u,u+=p);return u&7&&(u=(u|7)+1),y}}},{}],7:[function(e,t,n){"use strict";var i=n;i.length=function(r){for(var s=0,a=0,c=0;c<r.length;++c)a=r.charCodeAt(c),a<128?s+=1:a<2048?s+=2:(a&64512)===55296&&(r.charCodeAt(c+1)&64512)===56320?(++c,s+=4):s+=3;return s},i.read=function(r,s,a){var c=a-s;if(c<1)return"";for(var l=null,u=[],m=0,p;s<a;)p=r[s++],p<128?u[m++]=p:p>191&&p<224?u[m++]=(p&31)<<6|r[s++]&63:p>239&&p<365?(p=((p&7)<<18|(r[s++]&63)<<12|(r[s++]&63)<<6|r[s++]&63)-65536,u[m++]=55296+(p>>10),u[m++]=56320+(p&1023)):u[m++]=(p&15)<<12|(r[s++]&63)<<6|r[s++]&63,m>8191&&((l||(l=[])).push(String.fromCharCode.apply(String,u)),m=0);return l?(m&&l.push(String.fromCharCode.apply(String,u.slice(0,m))),l.join("")):String.fromCharCode.apply(String,u.slice(0,m))},i.write=function(r,s,a){for(var c=a,l,u,m=0;m<r.length;++m)l=r.charCodeAt(m),l<128?s[a++]=l:l<2048?(s[a++]=l>>6|192,s[a++]=l&63|128):(l&64512)===55296&&((u=r.charCodeAt(m+1))&64512)===56320?(l=65536+((l&1023)<<10)+(u&1023),++m,s[a++]=l>>18|240,s[a++]=l>>12&63|128,s[a++]=l>>6&63|128,s[a++]=l&63|128):(s[a++]=l>>12|224,s[a++]=l>>6&63|128,s[a++]=l&63|128);return a-c}},{}],8:[function(e,t,n){"use strict";var i=n;i.build="minimal",i.Writer=e(16),i.BufferWriter=e(17),i.Reader=e(9),i.BufferReader=e(10),i.util=e(15),i.rpc=e(12),i.roots=e(11),i.configure=o;function o(){i.util._configure(),i.Writer._configure(i.BufferWriter),i.Reader._configure(i.BufferReader)}o()},{10:10,11:11,12:12,15:15,16:16,17:17,9:9}],9:[function(e,t,n){"use strict";t.exports=c;var i=e(15),o,r=i.LongBits,s=i.utf8;function a(f,x){return RangeError("index out of range: "+f.pos+" + "+(x||1)+" > "+f.len)}function c(f){this.buf=f,this.pos=0,this.len=f.length}var l=typeof Uint8Array<"u"?function(x){if(x instanceof Uint8Array||Array.isArray(x))return new c(x);throw Error("illegal buffer")}:function(x){if(Array.isArray(x))return new c(x);throw Error("illegal buffer")},u=function(){return i.Buffer?function(_){return(c.create=function(V){return i.Buffer.isBuffer(V)?new o(V):l(V)})(_)}:l};c.create=u(),c.prototype._slice=i.Array.prototype.subarray||i.Array.prototype.slice,c.prototype.uint32=function(){var x=4294967295;return function(){if(x=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(x=(x|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(x=(x|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(x=(x|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(x=(x|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return x;if((this.pos+=5)>this.len)throw this.pos=this.len,a(this,10);return x}}(),c.prototype.int32=function(){return this.uint32()|0},c.prototype.sint32=function(){var x=this.uint32();return x>>>1^-(x&1)|0};function m(){var f=new r(0,0),x=0;if(this.len-this.pos>4){for(;x<4;++x)if(f.lo=(f.lo|(this.buf[this.pos]&127)<<x*7)>>>0,this.buf[this.pos++]<128)return f;if(f.lo=(f.lo|(this.buf[this.pos]&127)<<28)>>>0,f.hi=(f.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return f;x=0}else{for(;x<3;++x){if(this.pos>=this.len)throw a(this);if(f.lo=(f.lo|(this.buf[this.pos]&127)<<x*7)>>>0,this.buf[this.pos++]<128)return f}return f.lo=(f.lo|(this.buf[this.pos++]&127)<<x*7)>>>0,f}if(this.len-this.pos>4){for(;x<5;++x)if(f.hi=(f.hi|(this.buf[this.pos]&127)<<x*7+3)>>>0,this.buf[this.pos++]<128)return f}else for(;x<5;++x){if(this.pos>=this.len)throw a(this);if(f.hi=(f.hi|(this.buf[this.pos]&127)<<x*7+3)>>>0,this.buf[this.pos++]<128)return f}throw Error("invalid varint encoding")}c.prototype.bool=function(){return this.uint32()!==0};function p(f,x){return(f[x-4]|f[x-3]<<8|f[x-2]<<16|f[x-1]<<24)>>>0}c.prototype.fixed32=function(){if(this.pos+4>this.len)throw a(this,4);return p(this.buf,this.pos+=4)},c.prototype.sfixed32=function(){if(this.pos+4>this.len)throw a(this,4);return p(this.buf,this.pos+=4)|0};function y(){if(this.pos+8>this.len)throw a(this,8);return new r(p(this.buf,this.pos+=4),p(this.buf,this.pos+=4))}c.prototype.float=function(){if(this.pos+4>this.len)throw a(this,4);var x=i.float.readFloatLE(this.buf,this.pos);return this.pos+=4,x},c.prototype.double=function(){if(this.pos+8>this.len)throw a(this,4);var x=i.float.readDoubleLE(this.buf,this.pos);return this.pos+=8,x},c.prototype.bytes=function(){var x=this.uint32(),_=this.pos,C=this.pos+x;if(C>this.len)throw a(this,x);if(this.pos+=x,Array.isArray(this.buf))return this.buf.slice(_,C);if(_===C){var V=i.Buffer;return V?V.alloc(0):new this.buf.constructor(0)}return this._slice.call(this.buf,_,C)},c.prototype.string=function(){var x=this.bytes();return s.read(x,0,x.length)},c.prototype.skip=function(x){if(typeof x=="number"){if(this.pos+x>this.len)throw a(this,x);this.pos+=x}else do if(this.pos>=this.len)throw a(this);while(this.buf[this.pos++]&128);return this},c.prototype.skipType=function(f){switch(f){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(f=this.uint32()&7)!==4;)this.skipType(f);break;case 5:this.skip(4);break;default:throw Error("invalid wire type "+f+" at offset "+this.pos)}return this},c._configure=function(f){o=f,c.create=u(),o._configure();var x=i.Long?"toLong":"toNumber";i.merge(c.prototype,{int64:function(){return m.call(this)[x](!1)},uint64:function(){return m.call(this)[x](!0)},sint64:function(){return m.call(this).zzDecode()[x](!1)},fixed64:function(){return y.call(this)[x](!0)},sfixed64:function(){return y.call(this)[x](!1)}})}},{15:15}],10:[function(e,t,n){"use strict";t.exports=r;var i=e(9);(r.prototype=Object.create(i.prototype)).constructor=r;var o=e(15);function r(s){i.call(this,s)}r._configure=function(){o.Buffer&&(r.prototype._slice=o.Buffer.prototype.slice)},r.prototype.string=function(){var a=this.uint32();return this.buf.utf8Slice?this.buf.utf8Slice(this.pos,this.pos=Math.min(this.pos+a,this.len)):this.buf.toString("utf-8",this.pos,this.pos=Math.min(this.pos+a,this.len))},r._configure()},{15:15,9:9}],11:[function(e,t,n){"use strict";t.exports={}},{}],12:[function(e,t,n){"use strict";var i=n;i.Service=e(13)},{13:13}],13:[function(e,t,n){"use strict";t.exports=o;var i=e(15);(o.prototype=Object.create(i.EventEmitter.prototype)).constructor=o;function o(r,s,a){if(typeof r!="function")throw TypeError("rpcImpl must be a function");i.EventEmitter.call(this),this.rpcImpl=r,this.requestDelimited=!!s,this.responseDelimited=!!a}o.prototype.rpcCall=function r(s,a,c,l,u){if(!l)throw TypeError("request must be specified");var m=this;if(!u)return i.asPromise(r,m,s,a,c,l);if(!m.rpcImpl)return setTimeout(function(){u(Error("already ended"))},0),undefined;try{return m.rpcImpl(s,a[m.requestDelimited?"encodeDelimited":"encode"](l).finish(),function(y,f){if(y)return m.emit("error",y,s),u(y);if(f===null)return m.end(!0),undefined;if(!(f instanceof c))try{f=c[m.responseDelimited?"decodeDelimited":"decode"](f)}catch(x){return m.emit("error",x,s),u(x)}return m.emit("data",f,s),u(null,f)})}catch(p){return m.emit("error",p,s),setTimeout(function(){u(p)},0),undefined}},o.prototype.end=function(s){return this.rpcImpl&&(s||this.rpcImpl(null,null,null),this.rpcImpl=null,this.emit("end").off()),this}},{15:15}],14:[function(e,t,n){"use strict";t.exports=o;var i=e(15);function o(c,l){this.lo=c>>>0,this.hi=l>>>0}var r=o.zero=new o(0,0);r.toNumber=function(){return 0},r.zzEncode=r.zzDecode=function(){return this},r.length=function(){return 1};var s=o.zeroHash="\0\0\0\0\0\0\0\0";o.fromNumber=function(l){if(l===0)return r;var u=l<0;u&&(l=-l);var m=l>>>0,p=(l-m)/4294967296>>>0;return u&&(p=~p>>>0,m=~m>>>0,++m>4294967295&&(m=0,++p>4294967295&&(p=0))),new o(m,p)},o.from=function(l){if(typeof l=="number")return o.fromNumber(l);if(i.isString(l))if(i.Long)l=i.Long.fromString(l);else return o.fromNumber(parseInt(l,10));return l.low||l.high?new o(l.low>>>0,l.high>>>0):r},o.prototype.toNumber=function(l){if(!l&&this.hi>>>31){var u=~this.lo+1>>>0,m=~this.hi>>>0;return u||(m=m+1>>>0),-(u+m*4294967296)}return this.lo+this.hi*4294967296},o.prototype.toLong=function(l){return i.Long?new i.Long(this.lo|0,this.hi|0,!!l):{low:this.lo|0,high:this.hi|0,unsigned:!!l}};var a=String.prototype.charCodeAt;o.fromHash=function(l){return l===s?r:new o((a.call(l,0)|a.call(l,1)<<8|a.call(l,2)<<16|a.call(l,3)<<24)>>>0,(a.call(l,4)|a.call(l,5)<<8|a.call(l,6)<<16|a.call(l,7)<<24)>>>0)},o.prototype.toHash=function(){return String.fromCharCode(this.lo&255,this.lo>>>8&255,this.lo>>>16&255,this.lo>>>24,this.hi&255,this.hi>>>8&255,this.hi>>>16&255,this.hi>>>24)},o.prototype.zzEncode=function(){var l=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^l)>>>0,this.lo=(this.lo<<1^l)>>>0,this},o.prototype.zzDecode=function(){var l=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^l)>>>0,this.hi=(this.hi>>>1^l)>>>0,this},o.prototype.length=function(){var l=this.lo,u=(this.lo>>>28|this.hi<<4)>>>0,m=this.hi>>>24;return m===0?u===0?l<16384?l<128?1:2:l<2097152?3:4:u<16384?u<128?5:6:u<2097152?7:8:m<128?9:10}},{15:15}],15:[function(e,t,n){"use strict";var i=n;i.asPromise=e(1),i.base64=e(2),i.EventEmitter=e(3),i.float=e(4),i.inquire=e(5),i.utf8=e(7),i.pool=e(6),i.LongBits=e(14),i.isNode=!!(typeof global<"u"&&global&&global.process&&global.process.versions&&global.process.versions.node),i.global=i.isNode&&global||typeof window<"u"&&window||typeof self<"u"&&self||this,i.emptyArray=Object.freeze?Object.freeze([]):[],i.emptyObject=Object.freeze?Object.freeze({}):{},i.isInteger=Number.isInteger||function(a){return typeof a=="number"&&isFinite(a)&&Math.floor(a)===a},i.isString=function(a){return typeof a=="string"||a instanceof String},i.isObject=function(a){return a&&typeof a=="object"},i.isset=i.isSet=function(a,c){var l=a[c];return l!=null&&a.hasOwnProperty(c)?typeof l!="object"||(Array.isArray(l)?l.length:Object.keys(l).length)>0:!1},i.Buffer=function(){try{var s=i.inquire("buffer").Buffer;return s.prototype.utf8Write?s:null}catch{return null}}(),i._Buffer_from=null,i._Buffer_allocUnsafe=null,i.newBuffer=function(a){return typeof a=="number"?i.Buffer?i._Buffer_allocUnsafe(a):new i.Array(a):i.Buffer?i._Buffer_from(a):typeof Uint8Array>"u"?a:new Uint8Array(a)},i.Array=typeof Uint8Array<"u"?Uint8Array:Array,i.Long=i.global.dcodeIO&&i.global.dcodeIO.Long||i.global.Long||i.inquire("long"),i.key2Re=/^true|false|0|1$/,i.key32Re=/^-?(?:0|[1-9][0-9]*)$/,i.key64Re=/^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/,i.longToHash=function(a){return a?i.LongBits.from(a).toHash():i.LongBits.zeroHash},i.longFromHash=function(a,c){var l=i.LongBits.fromHash(a);return i.Long?i.Long.fromBits(l.lo,l.hi,c):l.toNumber(!!c)};function o(s,a,c){for(var l=Object.keys(a),u=0;u<l.length;++u)(s[l[u]]===undefined||!c)&&(s[l[u]]=a[l[u]]);return s}i.merge=o,i.lcFirst=function(a){return a.charAt(0).toLowerCase()+a.substring(1)};function r(s){function a(c,l){if(!(this instanceof a))return new a(c,l);Object.defineProperty(this,"message",{get:function(){return c}}),Error.captureStackTrace?Error.captureStackTrace(this,a):Object.defineProperty(this,"stack",{value:new Error().stack||""}),l&&o(this,l)}return a.prototype=Object.create(Error.prototype,{constructor:{value:a,writable:!0,enumerable:!1,configurable:!0},name:{get:function(){return s},set:undefined,enumerable:!1,configurable:!0},toString:{value:function(){return this.name+": "+this.message},writable:!0,enumerable:!1,configurable:!0}}),a}i.newError=r,i.ProtocolError=r("ProtocolError"),i.oneOfGetter=function(a){for(var c={},l=0;l<a.length;++l)c[a[l]]=1;return function(){for(var u=Object.keys(this),m=u.length-1;m>-1;--m)if(c[u[m]]===1&&this[u[m]]!==undefined&&this[u[m]]!==null)return u[m]}},i.oneOfSetter=function(a){return function(c){for(var l=0;l<a.length;++l)a[l]!==c&&delete this[a[l]]}},i.toJSONOptions={longs:String,enums:String,bytes:String,json:!0},i._configure=function(){var s=i.Buffer;if(!s){i._Buffer_from=i._Buffer_allocUnsafe=null;return}i._Buffer_from=s.from!==Uint8Array.from&&s.from||function(c,l){return new s(c,l)},i._Buffer_allocUnsafe=s.allocUnsafe||function(c){return new s(c)}}},{1:1,14:14,2:2,3:3,4:4,5:5,6:6,7:7}],16:[function(e,t,n){"use strict";t.exports=m;var i=e(15),o,r=i.LongBits,s=i.base64,a=i.utf8;function c(L,Z,G){this.fn=L,this.len=Z,this.next=undefined,this.val=G}function l(){}function u(L){this.head=L.head,this.tail=L.tail,this.len=L.len,this.next=L.states}function m(){this.len=0,this.head=new c(l,0,0),this.tail=this.head,this.states=null}var p=function(){return i.Buffer?function(){return(m.create=function(){return new o})()}:function(){return new m}};m.create=p(),m.alloc=function(Z){return new i.Array(Z)},i.Array!==Array&&(m.alloc=i.pool(m.alloc,i.Array.prototype.subarray)),m.prototype._push=function(Z,G,X){return this.tail=this.tail.next=new c(Z,G,X),this.len+=G,this};function y(L,Z,G){Z[G]=L&255}function f(L,Z,G){for(;L>127;)Z[G++]=L&127|128,L>>>=7;Z[G]=L}function x(L,Z){this.len=L,this.next=undefined,this.val=Z}x.prototype=Object.create(c.prototype),x.prototype.fn=f,m.prototype.uint32=function(Z){return this.len+=(this.tail=this.tail.next=new x((Z=Z>>>0)<128?1:Z<16384?2:Z<2097152?3:Z<268435456?4:5,Z)).len,this},m.prototype.int32=function(Z){return Z<0?this._push(_,10,r.fromNumber(Z)):this.uint32(Z)},m.prototype.sint32=function(Z){return this.uint32((Z<<1^Z>>31)>>>0)};function _(L,Z,G){for(;L.hi;)Z[G++]=L.lo&127|128,L.lo=(L.lo>>>7|L.hi<<25)>>>0,L.hi>>>=7;for(;L.lo>127;)Z[G++]=L.lo&127|128,L.lo=L.lo>>>7;Z[G++]=L.lo}m.prototype.uint64=function(Z){var G=r.from(Z);return this._push(_,G.length(),G)},m.prototype.int64=m.prototype.uint64,m.prototype.sint64=function(Z){var G=r.from(Z).zzEncode();return this._push(_,G.length(),G)},m.prototype.bool=function(Z){return this._push(y,1,Z?1:0)};function C(L,Z,G){Z[G]=L&255,Z[G+1]=L>>>8&255,Z[G+2]=L>>>16&255,Z[G+3]=L>>>24}m.prototype.fixed32=function(Z){return this._push(C,4,Z>>>0)},m.prototype.sfixed32=m.prototype.fixed32,m.prototype.fixed64=function(Z){var G=r.from(Z);return this._push(C,4,G.lo)._push(C,4,G.hi)},m.prototype.sfixed64=m.prototype.fixed64,m.prototype.float=function(Z){return this._push(i.float.writeFloatLE,4,Z)},m.prototype.double=function(Z){return this._push(i.float.writeDoubleLE,8,Z)};var V=i.Array.prototype.set?function(Z,G,X){G.set(Z,X)}:function(Z,G,X){for(var P=0;P<Z.length;++P)G[X+P]=Z[P]};m.prototype.bytes=function(Z){var G=Z.length>>>0;if(!G)return this._push(y,1,0);if(i.isString(Z)){var X=m.alloc(G=s.length(Z));s.decode(Z,X,0),Z=X}return this.uint32(G)._push(V,G,Z)},m.prototype.string=function(Z){var G=a.length(Z);return G?this.uint32(G)._push(a.write,G,Z):this._push(y,1,0)},m.prototype.fork=function(){return this.states=new u(this),this.head=this.tail=new c(l,0,0),this.len=0,this},m.prototype.reset=function(){return this.states?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new c(l,0,0),this.len=0),this},m.prototype.ldelim=function(){var Z=this.head,G=this.tail,X=this.len;return this.reset().uint32(X),X&&(this.tail.next=Z.next,this.tail=G,this.len+=X),this},m.prototype.finish=function(){for(var Z=this.head.next,G=this.constructor.alloc(this.len),X=0;Z;)Z.fn(Z.val,G,X),X+=Z.len,Z=Z.next;return G},m._configure=function(L){o=L,m.create=p(),o._configure()}},{15:15}],17:[function(e,t,n){"use strict";t.exports=r;var i=e(16);(r.prototype=Object.create(i.prototype)).constructor=r;var o=e(15);function r(){i.call(this)}r._configure=function(){r.alloc=o._Buffer_allocUnsafe,r.writeBytesBuffer=o.Buffer&&o.Buffer.prototype instanceof Uint8Array&&o.Buffer.prototype.set.name==="set"?function(c,l,u){l.set(c,u)}:function(c,l,u){if(c.copy)c.copy(l,u,0,c.length);else for(var m=0;m<c.length;)l[u++]=c[m++]}},r.prototype.bytes=function(c){o.isString(c)&&(c=o._Buffer_from(c,"base64"));var l=c.length>>>0;return this.uint32(l),l&&this._push(r.writeBytesBuffer,l,c),this};function s(a,c,l){a.length<40?o.utf8.write(a,c,l):c.utf8Write?c.utf8Write(a,l):c.write(a,l)}r.prototype.string=function(c){var l=o.Buffer.byteLength(c);return this.uint32(l),l&&this._push(s,l,c),this},r._configure()},{15:15,16:16}]},{},[8])})()});var jge=yc((WDi,oD)=>{var PDi=T(S());/* Copyright 2015-2018 Esri. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 @preserve */(function(){var e=function(){var o={};o.defaultNoDataValue=-34027999387901484e22,o.decode=function(u,m){m=m||{};var p=m.encodedMaskData||m.encodedMaskData===null,y=c(u,m.inputOffset||0,p),f=m.noDataValue!==null?m.noDataValue:o.defaultNoDataValue,x=r(y,m.pixelType||Float32Array,m.encodedMaskData,f,m.returnMask),_={width:y.width,height:y.height,pixelData:x.resultPixels,minValue:x.minValue,maxValue:y.pixels.maxValue,noDataValue:f};return x.resultMask&&(_.maskData=x.resultMask),m.returnEncodedMask&&y.mask&&(_.encodedMaskData=y.mask.bitset?y.mask.bitset:null),m.returnFileInfo&&(_.fileInfo=s(y),m.computeUsedBitDepths&&(_.fileInfo.bitDepths=a(y))),_};var r=function(u,m,p,y,f){var x=0,_=u.pixels.numBlocksX,C=u.pixels.numBlocksY,V=Math.floor(u.width/_),L=Math.floor(u.height/C),Z=2*u.maxZError,G=Number.MAX_VALUE,X;p=p||(u.mask?u.mask.bitset:null);var P,v;P=new m(u.width*u.height),f&&p&&(v=new Uint8Array(u.width*u.height));for(var F=new Float32Array(V*L),M,b,R=0;R<=C;R++){var E=R!==C?L:u.height%C;if(E!==0)for(var I=0;I<=_;I++){var w=I!==_?V:u.width%_;if(w!==0){var N=R*u.width*L+I*V,B=u.width-w,k=u.pixels.blocks[x],O,U,J;k.encoding<2?(k.encoding===0?O=k.rawData:(l(k.stuffedData,k.bitsPerPixel,k.numValidPixels,k.offset,Z,F,u.pixels.maxValue),O=F),U=0):k.encoding===2?J=0:J=k.offset;var z;if(p)for(b=0;b<E;b++){for(N&7&&(z=p[N>>3],z<<=N&7),M=0;M<w;M++)N&7||(z=p[N>>3]),z&128?(v&&(v[N]=1),X=k.encoding<2?O[U++]:J,G=G>X?X:G,P[N++]=X):(v&&(v[N]=0),P[N++]=y),z<<=1;N+=B}else if(k.encoding<2)for(b=0;b<E;b++){for(M=0;M<w;M++)X=O[U++],G=G>X?X:G,P[N++]=X;N+=B}else for(G=G>J?J:G,b=0;b<E;b++){for(M=0;M<w;M++)P[N++]=J;N+=B}if(k.encoding===1&&U!==k.numValidPixels)throw"Block and Mask do not match";x++}}}return{resultPixels:P,resultMask:v,minValue:G}},s=function(u){return{fileIdentifierString:u.fileIdentifierString,fileVersion:u.fileVersion,imageType:u.imageType,height:u.height,width:u.width,maxZError:u.maxZError,eofOffset:u.eofOffset,mask:u.mask?{numBlocksX:u.mask.numBlocksX,numBlocksY:u.mask.numBlocksY,numBytes:u.mask.numBytes,maxValue:u.mask.maxValue}:null,pixels:{numBlocksX:u.pixels.numBlocksX,numBlocksY:u.pixels.numBlocksY,numBytes:u.pixels.numBytes,maxValue:u.pixels.maxValue,noDataValue:u.noDataValue}}},a=function(u){for(var m=u.pixels.numBlocksX*u.pixels.numBlocksY,p={},y=0;y<m;y++){var f=u.pixels.blocks[y];f.encoding===0?p.float32=!0:f.encoding===1?p[f.bitsPerPixel]=!0:p[0]=!0}return Object.keys(p)},c=function(u,m,p){var y={},f=new Uint8Array(u,m,10);if(y.fileIdentifierString=String.fromCharCode.apply(null,f),y.fileIdentifierString.trim()!=="CntZImage")throw"Unexpected file identifier string: "+y.fileIdentifierString;m+=10;var x=new DataView(u,m,24);if(y.fileVersion=x.getInt32(0,!0),y.imageType=x.getInt32(4,!0),y.height=x.getUint32(8,!0),y.width=x.getUint32(12,!0),y.maxZError=x.getFloat64(16,!0),m+=24,!p)if(x=new DataView(u,m,16),y.mask={},y.mask.numBlocksY=x.getUint32(0,!0),y.mask.numBlocksX=x.getUint32(4,!0),y.mask.numBytes=x.getUint32(8,!0),y.mask.maxValue=x.getFloat32(12,!0),m+=16,y.mask.numBytes>0){var _=new Uint8Array(Math.ceil(y.width*y.height/8));x=new DataView(u,m,y.mask.numBytes);var C=x.getInt16(0,!0),V=2,L=0;do{if(C>0)for(;C--;)_[L++]=x.getUint8(V++);else{var Z=x.getUint8(V++);for(C=-C;C--;)_[L++]=Z}C=x.getInt16(V,!0),V+=2}while(V<y.mask.numBytes);if(C!==-32768||L<_.length)throw"Unexpected end of mask RLE encoding";y.mask.bitset=_,m+=y.mask.numBytes}else y.mask.numBytes|y.mask.numBlocksY|y.mask.maxValue||(y.mask.bitset=new Uint8Array(Math.ceil(y.width*y.height/8)));x=new DataView(u,m,16),y.pixels={},y.pixels.numBlocksY=x.getUint32(0,!0),y.pixels.numBlocksX=x.getUint32(4,!0),y.pixels.numBytes=x.getUint32(8,!0),y.pixels.maxValue=x.getFloat32(12,!0),m+=16;var G=y.pixels.numBlocksX,X=y.pixels.numBlocksY,P=G+(y.width%G>0?1:0),v=X+(y.height%X>0?1:0);y.pixels.blocks=new Array(P*v);for(var F=0,M=0;M<v;M++)for(var b=0;b<P;b++){var R=0,E=u.byteLength-m;x=new DataView(u,m,Math.min(10,E));var I={};y.pixels.blocks[F++]=I;var w=x.getUint8(0);if(R++,I.encoding=w&63,I.encoding>3)throw"Invalid block encoding ("+I.encoding+")";if(I.encoding===2){m++;continue}if(w!==0&&w!==2){if(w>>=6,I.offsetType=w,w===2)I.offset=x.getInt8(1),R++;else if(w===1)I.offset=x.getInt16(1,!0),R+=2;else if(w===0)I.offset=x.getFloat32(1,!0),R+=4;else throw"Invalid block offset type";if(I.encoding===1)if(w=x.getUint8(R),R++,I.bitsPerPixel=w&63,w>>=6,I.numValidPixelsType=w,w===2)I.numValidPixels=x.getUint8(R),R++;else if(w===1)I.numValidPixels=x.getUint16(R,!0),R+=2;else if(w===0)I.numValidPixels=x.getUint32(R,!0),R+=4;else throw"Invalid valid pixel count type"}if(m+=R,I.encoding!==3){var N,B;if(I.encoding===0){var k=(y.pixels.numBytes-1)/4;if(k!==Math.floor(k))throw"uncompressed block has invalid length";N=new ArrayBuffer(k*4),B=new Uint8Array(N),B.set(new Uint8Array(u,m,k*4));var O=new Float32Array(N);I.rawData=O,m+=k*4}else if(I.encoding===1){var U=Math.ceil(I.numValidPixels*I.bitsPerPixel/8),J=Math.ceil(U/4);N=new ArrayBuffer(J*4),B=new Uint8Array(N),B.set(new Uint8Array(u,m,U)),I.stuffedData=new Uint32Array(N),m+=U}}}return y.eofOffset=m,y},l=function(u,m,p,y,f,x,_){var C=(1<<m)-1,V=0,L,Z=0,G,X,P=Math.ceil((_-y)/f),v=u.length*4-Math.ceil(m*p/8);for(u[u.length-1]<<=8*v,L=0;L<p;L++){if(Z===0&&(X=u[V++],Z=32),Z>=m)G=X>>>Z-m&C,Z-=m;else{var F=m-Z;G=(X&C)<<F&C,X=u[V++],Z=32-F,G+=X>>>Z}x[L]=G<P?y+G*f:_}return x};return o}(),t=function(){"use strict";var o={unstuff:function(c,l,u,m,p,y,f,x){var _=(1<<u)-1,C=0,V,L=0,Z,G,X,P,v=c.length*4-Math.ceil(u*m/8);if(c[c.length-1]<<=8*v,p)for(V=0;V<m;V++)L===0&&(G=c[C++],L=32),L>=u?(Z=G>>>L-u&_,L-=u):(X=u-L,Z=(G&_)<<X&_,G=c[C++],L=32-X,Z+=G>>>L),l[V]=p[Z];else for(P=Math.ceil((x-y)/f),V=0;V<m;V++)L===0&&(G=c[C++],L=32),L>=u?(Z=G>>>L-u&_,L-=u):(X=u-L,Z=(G&_)<<X&_,G=c[C++],L=32-X,Z+=G>>>L),l[V]=Z<P?y+Z*f:x},unstuffLUT:function(c,l,u,m,p,y){var f=(1<<l)-1,x=0,_=0,C=0,V=0,L=0,Z,G=[],X=c.length*4-Math.ceil(l*u/8);c[c.length-1]<<=8*X;var P=Math.ceil((y-m)/p);for(_=0;_<u;_++)V===0&&(Z=c[x++],V=32),V>=l?(L=Z>>>V-l&f,V-=l):(C=l-V,L=(Z&f)<<C&f,Z=c[x++],V=32-C,L+=Z>>>V),G[_]=L<P?m+L*p:y;return G.unshift(m),G},unstuff2:function(c,l,u,m,p,y,f,x){var _=(1<<u)-1,C=0,V,L=0,Z=0,G,X,P;if(p)for(V=0;V<m;V++)L===0&&(X=c[C++],L=32,Z=0),L>=u?(G=X>>>Z&_,L-=u,Z+=u):(P=u-L,G=X>>>Z&_,X=c[C++],L=32-P,G|=(X&(1<<P)-1)<<u-P,Z=P),l[V]=p[G];else{var v=Math.ceil((x-y)/f);for(V=0;V<m;V++)L===0&&(X=c[C++],L=32,Z=0),L>=u?(G=X>>>Z&_,L-=u,Z+=u):(P=u-L,G=X>>>Z&_,X=c[C++],L=32-P,G|=(X&(1<<P)-1)<<u-P,Z=P),l[V]=G<v?y+G*f:x}return l},unstuffLUT2:function(c,l,u,m,p,y){var f=(1<<l)-1,x=0,_=0,C=0,V=0,L=0,Z=0,G,X=[],P=Math.ceil((y-m)/p);for(_=0;_<u;_++)V===0&&(G=c[x++],V=32,Z=0),V>=l?(L=G>>>Z&f,V-=l,Z+=l):(C=l-V,L=G>>>Z&f,G=c[x++],V=32-C,L|=(G&(1<<C)-1)<<l-C,Z=C),X[_]=L<P?m+L*p:y;return X.unshift(m),X},originalUnstuff:function(c,l,u,m){var p=(1<<u)-1,y=0,f,x=0,_,C,V,L=c.length*4-Math.ceil(u*m/8);for(c[c.length-1]<<=8*L,f=0;f<m;f++)x===0&&(C=c[y++],x=32),x>=u?(_=C>>>x-u&p,x-=u):(V=u-x,_=(C&p)<<V&p,C=c[y++],x=32-V,_+=C>>>x),l[f]=_;return l},originalUnstuff2:function(c,l,u,m){var p=(1<<u)-1,y=0,f,x=0,_=0,C,V,L;for(f=0;f<m;f++)x===0&&(V=c[y++],x=32,_=0),x>=u?(C=V>>>_&p,x-=u,_+=u):(L=u-x,C=V>>>_&p,V=c[y++],x=32-L,C|=(V&(1<<L)-1)<<u-L,_=L),l[f]=C;return l}},r={HUFFMAN_LUT_BITS_MAX:12,computeChecksumFletcher32:function(c){for(var l=65535,u=65535,m=c.length,p=Math.floor(m/2),y=0;p;){var f=p>=359?359:p;p-=f;do l+=c[y++]<<8,u+=l+=c[y++];while(--f);l=(l&65535)+(l>>>16),u=(u&65535)+(u>>>16)}return m&1&&(u+=l+=c[y]<<8),l=(l&65535)+(l>>>16),u=(u&65535)+(u>>>16),(u<<16|l)>>>0},readHeaderInfo:function(c,l){var u=l.ptr,m=new Uint8Array(c,u,6),p={};if(p.fileIdentifierString=String.fromCharCode.apply(null,m),p.fileIdentifierString.lastIndexOf("Lerc2",0)!==0)throw"Unexpected file identifier string (expect Lerc2 ): "+p.fileIdentifierString;u+=6;var y=new DataView(c,u,8),f=y.getInt32(0,!0);p.fileVersion=f,u+=4,f>=3&&(p.checksum=y.getUint32(4,!0),u+=4),y=new DataView(c,u,12),p.height=y.getUint32(0,!0),p.width=y.getUint32(4,!0),u+=8,f>=4?(p.numDims=y.getUint32(8,!0),u+=4):p.numDims=1,y=new DataView(c,u,40),p.numValidPixel=y.getUint32(0,!0),p.microBlockSize=y.getInt32(4,!0),p.blobSize=y.getInt32(8,!0),p.imageType=y.getInt32(12,!0),p.maxZError=y.getFloat64(16,!0),p.zMin=y.getFloat64(24,!0),p.zMax=y.getFloat64(32,!0),u+=40,l.headerInfo=p,l.ptr=u;var x,_;if(f>=3&&(_=f>=4?52:48,x=this.computeChecksumFletcher32(new Uint8Array(c,u-_,p.blobSize-14)),x!==p.checksum))throw"Checksum failed.";return!0},checkMinMaxRanges:function(c,l){var u=l.headerInfo,m=this.getDataTypeArray(u.imageType),p=u.numDims*this.getDataTypeSize(u.imageType),y=this.readSubArray(c,l.ptr,m,p),f=this.readSubArray(c,l.ptr+p,m,p);l.ptr+=2*p;var x,_=!0;for(x=0;x<u.numDims;x++)if(y[x]!==f[x]){_=!1;break}return u.minValues=y,u.maxValues=f,_},readSubArray:function(c,l,u,m){var p;if(u===Uint8Array)p=new Uint8Array(c,l,m);else{var y=new ArrayBuffer(m),f=new Uint8Array(y);f.set(new Uint8Array(c,l,m)),p=new u(y)}return p},readMask:function(c,l){var u=l.ptr,m=l.headerInfo,p=m.width*m.height,y=m.numValidPixel,f=new DataView(c,u,4),x={};if(x.numBytes=f.getUint32(0,!0),u+=4,(y===0||p===y)&&x.numBytes!==0)throw"invalid mask";var _,C;if(y===0)_=new Uint8Array(Math.ceil(p/8)),x.bitset=_,C=new Uint8Array(p),l.pixels.resultMask=C,u+=x.numBytes;else if(x.numBytes>0){_=new Uint8Array(Math.ceil(p/8)),f=new DataView(c,u,x.numBytes);var V=f.getInt16(0,!0),L=2,Z=0,G=0;do{if(V>0)for(;V--;)_[Z++]=f.getUint8(L++);else for(G=f.getUint8(L++),V=-V;V--;)_[Z++]=G;V=f.getInt16(L,!0),L+=2}while(L<x.numBytes);if(V!==-32768||Z<_.length)throw"Unexpected end of mask RLE encoding";C=new Uint8Array(p);var X=0,P=0;for(P=0;P<p;P++)P&7?(X=_[P>>3],X<<=P&7):X=_[P>>3],X&128&&(C[P]=1);l.pixels.resultMask=C,x.bitset=_,u+=x.numBytes}return l.ptr=u,l.mask=x,!0},readDataOneSweep:function(c,l,u){var m=l.ptr,p=l.headerInfo,y=p.numDims,f=p.width*p.height,x=p.imageType,_=p.numValidPixel*r.getDataTypeSize(x)*y,C,V=l.pixels.resultMask;if(u===Uint8Array)C=new Uint8Array(c,m,_);else{var L=new ArrayBuffer(_),Z=new Uint8Array(L);Z.set(new Uint8Array(c,m,_)),C=new u(L)}if(C.length===f*y)l.pixels.resultPixels=C;else{l.pixels.resultPixels=new u(f*y);var G=0,X=0,P=0,v=0;if(y>1)for(P=0;P<y;P++)for(v=P*f,X=0;X<f;X++)V[X]&&(l.pixels.resultPixels[v+X]=C[G++]);else for(X=0;X<f;X++)V[X]&&(l.pixels.resultPixels[X]=C[G++])}return m+=_,l.ptr=m,!0},readHuffmanTree:function(c,l){var u=this.HUFFMAN_LUT_BITS_MAX,m=new DataView(c,l.ptr,16);l.ptr+=16;var p=m.getInt32(0,!0);if(p<2)throw"unsupported Huffman version";var y=m.getInt32(4,!0),f=m.getInt32(8,!0),x=m.getInt32(12,!0);if(f>=x)return!1;var _=new Uint32Array(x-f);r.decodeBits(c,l,_);var C=[],V,L,Z,G;for(V=f;V<x;V++)L=V-(V<y?0:y),C[L]={first:_[V-f],second:null};var X=c.byteLength-l.ptr,P=Math.ceil(X/4),v=new ArrayBuffer(P*4),F=new Uint8Array(v);F.set(new Uint8Array(c,l.ptr,X));var M=new Uint32Array(v),b=0,R,E=0;for(R=M[0],V=f;V<x;V++)L=V-(V<y?0:y),G=C[L].first,G>0&&(C[L].second=R<<b>>>32-G,32-b>=G?(b+=G,b===32&&(b=0,E++,R=M[E])):(b+=G-32,E++,R=M[E],C[L].second|=R>>>32-b));var I=0,w=0,N=new s;for(V=0;V<C.length;V++)C[V]!==void 0&&(I=Math.max(I,C[V].first));I>=u?w=u:w=I,I>=30&&console.log("WARning, large NUM LUT BITS IS "+I);var B=[],k,O,U,J,z,ee;for(V=f;V<x;V++)if(L=V-(V<y?0:y),G=C[L].first,G>0)if(k=[G,L],G<=w)for(O=C[L].second<<w-G,U=1<<w-G,Z=0;Z<U;Z++)B[O|Z]=k;else for(O=C[L].second,ee=N,J=G-1;J>=0;J--)z=O>>>J&1,z?(ee.right||(ee.right=new s),ee=ee.right):(ee.left||(ee.left=new s),ee=ee.left),J===0&&!ee.val&&(ee.val=k[1]);return{decodeLut:B,numBitsLUTQick:w,numBitsLUT:I,tree:N,stuffedData:M,srcPtr:E,bitPos:b}},readHuffman:function(c,l,u){var m=l.headerInfo,p=m.numDims,y=l.headerInfo.height,f=l.headerInfo.width,x=f*y,_=this.readHuffmanTree(c,l),C=_.decodeLut,V=_.tree,L=_.stuffedData,Z=_.srcPtr,G=_.bitPos,X=_.numBitsLUTQick,P=_.numBitsLUT,v=l.headerInfo.imageType===0?128:0,F,M,b,R=l.pixels.resultMask,E,I,w,N,B,k,O,U=0;G>0&&(Z++,G=0);var J=L[Z],z=l.encodeMode===1,ee=new u(x*p),K=ee,j;for(j=0;j<m.numDims;j++){if(p>1&&(K=new u(ee.buffer,x*j,x),U=0),l.headerInfo.numValidPixel===f*y)for(k=0,N=0;N<y;N++)for(B=0;B<f;B++,k++){if(M=0,E=J<<G>>>32-X,I=E,32-G<X&&(E|=L[Z+1]>>>64-G-X,I=E),C[I])M=C[I][1],G+=C[I][0];else for(E=J<<G>>>32-P,I=E,32-G<P&&(E|=L[Z+1]>>>64-G-P,I=E),F=V,O=0;O<P;O++)if(w=E>>>P-O-1&1,F=w?F.right:F.left,!(F.left||F.right)){M=F.val,G=G+O+1;break}G>=32&&(G-=32,Z++,J=L[Z]),b=M-v,z?(B>0?b+=U:N>0?b+=K[k-f]:b+=U,b&=255,K[k]=b,U=b):K[k]=b}else for(k=0,N=0;N<y;N++)for(B=0;B<f;B++,k++)if(R[k]){if(M=0,E=J<<G>>>32-X,I=E,32-G<X&&(E|=L[Z+1]>>>64-G-X,I=E),C[I])M=C[I][1],G+=C[I][0];else for(E=J<<G>>>32-P,I=E,32-G<P&&(E|=L[Z+1]>>>64-G-P,I=E),F=V,O=0;O<P;O++)if(w=E>>>P-O-1&1,F=w?F.right:F.left,!(F.left||F.right)){M=F.val,G=G+O+1;break}G>=32&&(G-=32,Z++,J=L[Z]),b=M-v,z?(B>0&&R[k-1]?b+=U:N>0&&R[k-f]?b+=K[k-f]:b+=U,b&=255,K[k]=b,U=b):K[k]=b}l.ptr=l.ptr+(Z+1)*4+(G>0?4:0)}l.pixels.resultPixels=ee},decodeBits:function(c,l,u,m,p){{var y=l.headerInfo,f=y.fileVersion,x=0,_=new DataView(c,l.ptr,5),C=_.getUint8(0);x++;var V=C>>6,L=V===0?4:3-V,Z=(C&32)>0,G=C&31,X=0;if(L===1)X=_.getUint8(x),x++;else if(L===2)X=_.getUint16(x,!0),x+=2;else if(L===4)X=_.getUint32(x,!0),x+=4;else throw"Invalid valid pixel count type";var P=2*y.maxZError,v,F,M,b,R,E,I,w,N,B,k=y.numDims>1?y.maxValues[p]:y.zMax;if(Z){for(l.counter.lut++,w=_.getUint8(x),N=G,x++,b=Math.ceil((w-1)*G/8),R=Math.ceil(b/4),F=new ArrayBuffer(R*4),M=new Uint8Array(F),l.ptr+=x,M.set(new Uint8Array(c,l.ptr,b)),I=new Uint32Array(F),l.ptr+=b,B=0;w-1>>>B;)B++;b=Math.ceil(X*B/8),R=Math.ceil(b/4),F=new ArrayBuffer(R*4),M=new Uint8Array(F),M.set(new Uint8Array(c,l.ptr,b)),v=new Uint32Array(F),l.ptr+=b,f>=3?E=o.unstuffLUT2(I,G,w-1,m,P,k):E=o.unstuffLUT(I,G,w-1,m,P,k),f>=3?o.unstuff2(v,u,B,X,E):o.unstuff(v,u,B,X,E)}else l.counter.bitstuffer++,B=G,l.ptr+=x,B>0&&(b=Math.ceil(X*B/8),R=Math.ceil(b/4),F=new ArrayBuffer(R*4),M=new Uint8Array(F),M.set(new Uint8Array(c,l.ptr,b)),v=new Uint32Array(F),l.ptr+=b,f>=3?m==null?o.originalUnstuff2(v,u,B,X):o.unstuff2(v,u,B,X,!1,m,P,k):m==null?o.originalUnstuff(v,u,B,X):o.unstuff(v,u,B,X,!1,m,P,k))}},readTiles:function(c,l,u){var m=l.headerInfo,p=m.width,y=m.height,f=m.microBlockSize,x=m.imageType,_=r.getDataTypeSize(x),C=Math.ceil(p/f),V=Math.ceil(y/f);l.pixels.numBlocksY=V,l.pixels.numBlocksX=C,l.pixels.ptr=0;var L=0,Z=0,G=0,X=0,P=0,v=0,F=0,M=0,b=0,R=0,E=0,I=0,w=0,N=0,B=0,k=0,O,U,J,z,ee,K,j=new u(f*f),q=y%f||f,be=p%f||f,Te,ae,xe=m.numDims,_e,Ve=l.pixels.resultMask,Ie=l.pixels.resultPixels;for(G=0;G<V;G++)for(P=G!==V-1?f:q,X=0;X<C;X++)for(v=X!==C-1?f:be,E=G*p*f+X*f,I=p-v,_e=0;_e<xe;_e++){if(xe>1&&(Ie=new u(l.pixels.resultPixels.buffer,p*y*_e*_,p*y)),F=c.byteLength-l.ptr,O=new DataView(c,l.ptr,Math.min(10,F)),U={},k=0,M=O.getUint8(0),k++,b=M>>6&255,R=M>>2&15,R!==(X*f>>3&15))throw"integrity issue";if(K=M&3,K>3)throw l.ptr+=k,"Invalid block encoding ("+K+")";if(K===2){l.counter.constant++,l.ptr+=k;continue}else if(K===0){if(l.counter.uncompressed++,l.ptr+=k,w=P*v*_,N=c.byteLength-l.ptr,w=w<N?w:N,J=new ArrayBuffer(w%_===0?w:w+_-w%_),z=new Uint8Array(J),z.set(new Uint8Array(c,l.ptr,w)),ee=new u(J),B=0,Ve)for(L=0;L<P;L++){for(Z=0;Z<v;Z++)Ve[E]&&(Ie[E]=ee[B++]),E++;E+=I}else for(L=0;L<P;L++){for(Z=0;Z<v;Z++)Ie[E++]=ee[B++];E+=I}l.ptr+=B*_}else if(Te=r.getDataTypeUsed(x,b),ae=r.getOnePixel(U,k,Te,O),k+=r.getDataTypeSize(Te),K===3)if(l.ptr+=k,l.counter.constantoffset++,Ve)for(L=0;L<P;L++){for(Z=0;Z<v;Z++)Ve[E]&&(Ie[E]=ae),E++;E+=I}else for(L=0;L<P;L++){for(Z=0;Z<v;Z++)Ie[E++]=ae;E+=I}else if(l.ptr+=k,r.decodeBits(c,l,j,ae,_e),k=0,Ve)for(L=0;L<P;L++){for(Z=0;Z<v;Z++)Ve[E]&&(Ie[E]=j[k++]),E++;E+=I}else for(L=0;L<P;L++){for(Z=0;Z<v;Z++)Ie[E++]=j[k++];E+=I}}},formatFileInfo:function(c){return{fileIdentifierString:c.headerInfo.fileIdentifierString,fileVersion:c.headerInfo.fileVersion,imageType:c.headerInfo.imageType,height:c.headerInfo.height,width:c.headerInfo.width,numValidPixel:c.headerInfo.numValidPixel,microBlockSize:c.headerInfo.microBlockSize,blobSize:c.headerInfo.blobSize,maxZError:c.headerInfo.maxZError,pixelType:r.getPixelType(c.headerInfo.imageType),eofOffset:c.eofOffset,mask:c.mask?{numBytes:c.mask.numBytes}:null,pixels:{numBlocksX:c.pixels.numBlocksX,numBlocksY:c.pixels.numBlocksY,maxValue:c.headerInfo.zMax,minValue:c.headerInfo.zMin,noDataValue:c.noDataValue}}},constructConstantSurface:function(c){var l=c.headerInfo.zMax,u=c.headerInfo.numDims,m=c.headerInfo.height*c.headerInfo.width,p=m*u,y=0,f=0,x=0,_=c.pixels.resultMask;if(_)if(u>1)for(y=0;y<u;y++)for(x=y*m,f=0;f<m;f++)_[f]&&(c.pixels.resultPixels[x+f]=l);else for(f=0;f<m;f++)_[f]&&(c.pixels.resultPixels[f]=l);else if(c.pixels.resultPixels.fill)c.pixels.resultPixels.fill(l);else for(f=0;f<p;f++)c.pixels.resultPixels[f]=l},getDataTypeArray:function(c){var l;switch(c){case 0:l=Int8Array;break;case 1:l=Uint8Array;break;case 2:l=Int16Array;break;case 3:l=Uint16Array;break;case 4:l=Int32Array;break;case 5:l=Uint32Array;break;case 6:l=Float32Array;break;case 7:l=Float64Array;break;default:l=Float32Array}return l},getPixelType:function(c){var l;switch(c){case 0:l="S8";break;case 1:l="U8";break;case 2:l="S16";break;case 3:l="U16";break;case 4:l="S32";break;case 5:l="U32";break;case 6:l="F32";break;case 7:l="F64";break;default:l="F32"}return l},isValidPixelValue:function(c,l){if(l==null)return!1;var u;switch(c){case 0:u=l>=-128&&l<=127;break;case 1:u=l>=0&&l<=255;break;case 2:u=l>=-32768&&l<=32767;break;case 3:u=l>=0&&l<=65536;break;case 4:u=l>=-2147483648&&l<=2147483647;break;case 5:u=l>=0&&l<=4294967296;break;case 6:u=l>=-34027999387901484e22&&l<=34027999387901484e22;break;case 7:u=l>=5e-324&&l<=17976931348623157e292;break;default:u=!1}return u},getDataTypeSize:function(c){var l=0;switch(c){case 0:case 1:l=1;break;case 2:case 3:l=2;break;case 4:case 5:case 6:l=4;break;case 7:l=8;break;default:l=c}return l},getDataTypeUsed:function(c,l){var u=c;switch(c){case 2:case 4:u=c-l;break;case 3:case 5:u=c-2*l;break;case 6:l===0?u=c:l===1?u=2:u=1;break;case 7:l===0?u=c:u=c-2*l+1;break;default:u=c;break}return u},getOnePixel:function(c,l,u,m){var p=0;switch(u){case 0:p=m.getInt8(l);break;case 1:p=m.getUint8(l);break;case 2:p=m.getInt16(l,!0);break;case 3:p=m.getUint16(l,!0);break;case 4:p=m.getInt32(l,!0);break;case 5:p=m.getUInt32(l,!0);break;case 6:p=m.getFloat32(l,!0);break;case 7:p=m.getFloat64(l,!0);break;default:throw"the decoder does not understand this pixel type"}return p}},s=function(c,l,u){this.val=c,this.left=l,this.right=u},a={decode:function(c,l){l=l||{};var u=l.noDataValue,m=0,p={};if(p.ptr=l.inputOffset||0,p.pixels={},!!r.readHeaderInfo(c,p)){var y=p.headerInfo,f=y.fileVersion,x=r.getDataTypeArray(y.imageType);r.readMask(c,p),y.numValidPixel!==y.width*y.height&&!p.pixels.resultMask&&(p.pixels.resultMask=l.maskData);var _=y.width*y.height;if(p.pixels.resultPixels=new x(_*y.numDims),p.counter={onesweep:0,uncompressed:0,lut:0,bitstuffer:0,constant:0,constantoffset:0},y.numValidPixel!==0)if(y.zMax===y.zMin)r.constructConstantSurface(p);else if(f>=4&&r.checkMinMaxRanges(c,p))r.constructConstantSurface(p);else{var C=new DataView(c,p.ptr,2),V=C.getUint8(0);if(p.ptr++,V)r.readDataOneSweep(c,p,x);else if(f>1&&y.imageType<=1&&Math.abs(y.maxZError-.5)<1e-5){var L=C.getUint8(1);if(p.ptr++,p.encodeMode=L,L>2||f<4&&L>1)throw"Invalid Huffman flag "+L;L?r.readHuffman(c,p,x):r.readTiles(c,p,x)}else r.readTiles(c,p,x)}p.eofOffset=p.ptr;var Z;l.inputOffset?(Z=p.headerInfo.blobSize+l.inputOffset-p.ptr,Math.abs(Z)>=1&&(p.eofOffset=l.inputOffset+p.headerInfo.blobSize)):(Z=p.headerInfo.blobSize-p.ptr,Math.abs(Z)>=1&&(p.eofOffset=p.headerInfo.blobSize));var G={width:y.width,height:y.height,pixelData:p.pixels.resultPixels,minValue:y.zMin,maxValue:y.zMax,validPixelCount:y.numValidPixel,dimCount:y.numDims,dimStats:{minValues:y.minValues,maxValues:y.maxValues},maskData:p.pixels.resultMask};if(p.pixels.resultMask&&r.isValidPixelValue(y.imageType,u)){var X=p.pixels.resultMask;for(m=0;m<_;m++)X[m]||(G.pixelData[m]=u);G.noDataValue=u}return p.noDataValue=u,l.returnFileInfo&&(G.fileInfo=r.formatFileInfo(p)),G}},getBandCount:function(c){var l=0,u=0,m={};for(m.ptr=0,m.pixels={};u<c.byteLength-58;)r.readHeaderInfo(c,m),u+=m.headerInfo.blobSize,l++,m.ptr=u;return l}};return a}(),n=function(){var o=new ArrayBuffer(4),r=new Uint8Array(o),s=new Uint32Array(o);return s[0]=1,r[0]===1}(),i={decode:function(o,r){if(!n)throw"Big endian system is not supported.";r=r||{};var s=r.inputOffset||0,a=new Uint8Array(o,s,10),c=String.fromCharCode.apply(null,a),l,u;if(c.trim()==="CntZImage")l=e,u=1;else if(c.substring(0,5)==="Lerc2")l=t,u=2;else throw"Unexpected file identifier string: "+c;for(var m=0,p=o.byteLength-10,y,f=[],x,_,C={width:0,height:0,pixels:[],pixelType:r.pixelType,mask:null,statistics:[]};s<p;){var V=l.decode(o,{inputOffset:s,encodedMaskData:y,maskData:_,returnMask:m===0,returnEncodedMask:m===0,returnFileInfo:!0,pixelType:r.pixelType||null,noDataValue:r.noDataValue||null});s=V.fileInfo.eofOffset,m===0&&(y=V.encodedMaskData,_=V.maskData,C.width=V.width,C.height=V.height,C.dimCount=V.dimCount||1,C.pixelType=V.pixelType||V.fileInfo.pixelType,C.mask=V.maskData),u>1&&V.fileInfo.mask&&V.fileInfo.mask.numBytes>0&&f.push(V.maskData),m++,C.pixels.push(V.pixelData),C.statistics.push({minValue:V.minValue,maxValue:V.maxValue,noDataValue:V.noDataValue,dimStats:V.dimStats})}var L,Z,G;if(u>1&&f.length>1){for(G=C.width*C.height,C.bandMasks=f,_=new Uint8Array(G),_.set(f[0]),L=1;L<f.length;L++)for(x=f[L],Z=0;Z<G;Z++)_[Z]=_[Z]&x[Z];C.maskData=_}return C}};typeof define=="function"&&define.amd?define([],function(){return i}):typeof oD<"u"&&oD.exports?oD.exports=i:this.Lerc=i})()});var n_e=yc((i0o,t_e)=>{var o0o=T(S());t_e.exports={webm:"data:video/webm;base64,GkXfowEAAAAAAAAfQoaBAUL3gQFC8oEEQvOBCEKChHdlYm1Ch4EEQoWBAhhTgGcBAAAAAAAVkhFNm3RALE27i1OrhBVJqWZTrIHfTbuMU6uEFlSua1OsggEwTbuMU6uEHFO7a1OsghV17AEAAAAAAACkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVSalmAQAAAAAAAEUq17GDD0JATYCNTGF2ZjU1LjMzLjEwMFdBjUxhdmY1NS4zMy4xMDBzpJBlrrXf3DCDVB8KcgbMpcr+RImIQJBgAAAAAAAWVK5rAQAAAAAAD++uAQAAAAAAADLXgQFzxYEBnIEAIrWcg3VuZIaFVl9WUDiDgQEj44OEAmJaAOABAAAAAAAABrCBsLqBkK4BAAAAAAAPq9eBAnPFgQKcgQAitZyDdW5khohBX1ZPUkJJU4OBAuEBAAAAAAAAEZ+BArWIQOdwAAAAAABiZIEgY6JPbwIeVgF2b3JiaXMAAAAAAoC7AAAAAAAAgLUBAAAAAAC4AQN2b3JiaXMtAAAAWGlwaC5PcmcgbGliVm9yYmlzIEkgMjAxMDExMDEgKFNjaGF1ZmVudWdnZXQpAQAAABUAAABlbmNvZGVyPUxhdmM1NS41Mi4xMDIBBXZvcmJpcyVCQ1YBAEAAACRzGCpGpXMWhBAaQlAZ4xxCzmvsGUJMEYIcMkxbyyVzkCGkoEKIWyiB0JBVAABAAACHQXgUhIpBCCGEJT1YkoMnPQghhIg5eBSEaUEIIYQQQgghhBBCCCGERTlokoMnQQgdhOMwOAyD5Tj4HIRFOVgQgydB6CCED0K4moOsOQghhCQ1SFCDBjnoHITCLCiKgsQwuBaEBDUojILkMMjUgwtCiJqDSTX4GoRnQXgWhGlBCCGEJEFIkIMGQcgYhEZBWJKDBjm4FITLQagahCo5CB+EIDRkFQCQAACgoiiKoigKEBqyCgDIAAAQQFEUx3EcyZEcybEcCwgNWQUAAAEACAAAoEiKpEiO5EiSJFmSJVmSJVmS5omqLMuyLMuyLMsyEBqyCgBIAABQUQxFcRQHCA1ZBQBkAAAIoDiKpViKpWiK54iOCISGrAIAgAAABAAAEDRDUzxHlETPVFXXtm3btm3btm3btm3btm1blmUZCA1ZBQBAAAAQ0mlmqQaIMAMZBkJDVgEACAAAgBGKMMSA0JBVAABAAACAGEoOogmtOd+c46BZDppKsTkdnEi1eZKbirk555xzzsnmnDHOOeecopxZDJoJrTnnnMSgWQqaCa0555wnsXnQmiqtOeeccc7pYJwRxjnnnCateZCajbU555wFrWmOmkuxOeecSLl5UptLtTnnnHPOOeecc84555zqxekcnBPOOeecqL25lpvQxTnnnE/G6d6cEM4555xzzjnnnHPOOeecIDRkFQAABABAEIaNYdwpCNLnaCBGEWIaMulB9+gwCRqDnELq0ehopJQ6CCWVcVJKJwgNWQUAAAIAQAghhRRSSCGFFFJIIYUUYoghhhhyyimnoIJKKqmooowyyyyzzDLLLLPMOuyssw47DDHEEEMrrcRSU2011lhr7jnnmoO0VlprrbVSSimllFIKQkNWAQAgAAAEQgYZZJBRSCGFFGKIKaeccgoqqIDQkFUAACAAgAAAAABP8hzRER3RER3RER3RER3R8RzPESVREiVREi3TMjXTU0VVdWXXlnVZt31b2IVd933d933d+HVhWJZlWZZlWZZlWZZlWZZlWZYgNGQVAAACAAAghBBCSCGFFFJIKcYYc8w56CSUEAgNWQUAAAIACAAAAHAUR3EcyZEcSbIkS9IkzdIsT/M0TxM9URRF0zRV0RVdUTdtUTZl0zVdUzZdVVZtV5ZtW7Z125dl2/d93/d93/d93/d93/d9XQdCQ1YBABIAADqSIymSIimS4ziOJElAaMgqAEAGAEAAAIriKI7jOJIkSZIlaZJneZaomZrpmZ4qqkBoyCoAABAAQAAAAAAAAIqmeIqpeIqoeI7oiJJomZaoqZoryqbsuq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq4LhIasAgAkAAB0JEdyJEdSJEVSJEdygNCQVQCADACAAAAcwzEkRXIsy9I0T/M0TxM90RM901NFV3SB0JBVAAAgAIAAAAAAAAAMybAUy9EcTRIl1VItVVMt1VJF1VNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVN0zRNEwgNWQkAkAEAkBBTLS3GmgmLJGLSaqugYwxS7KWxSCpntbfKMYUYtV4ah5RREHupJGOKQcwtpNApJq3WVEKFFKSYYyoVUg5SIDRkhQAQmgHgcBxAsixAsiwAAAAAAAAAkDQN0DwPsDQPAAAAAAAAACRNAyxPAzTPAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAA0DwP8DwR8EQRAAAAAAAAACzPAzTRAzxRBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAAsDwP8EQR0DwRAAAAAAAAACzPAzxRBDzRAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEOAAABBgIRQasiIAiBMAcEgSJAmSBM0DSJYFTYOmwTQBkmVB06BpME0AAAAAAAAAAAAAJE2DpkHTIIoASdOgadA0iCIAAAAAAAAAAAAAkqZB06BpEEWApGnQNGgaRBEAAAAAAAAAAAAAzzQhihBFmCbAM02IIkQRpgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAGHAAAAgwoQwUGrIiAIgTAHA4imUBAIDjOJYFAACO41gWAABYliWKAABgWZooAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAYcAAACDChDBQashIAiAIAcCiKZQHHsSzgOJYFJMmyAJYF0DyApgFEEQAIAAAocAAACLBBU2JxgEJDVgIAUQAABsWxLE0TRZKkaZoniiRJ0zxPFGma53meacLzPM80IYqiaJoQRVE0TZimaaoqME1VFQAAUOAAABBgg6bE4gCFhqwEAEICAByKYlma5nmeJ4qmqZokSdM8TxRF0TRNU1VJkqZ5niiKommapqqyLE3zPFEURdNUVVWFpnmeKIqiaaqq6sLzPE8URdE0VdV14XmeJ4qiaJqq6roQRVE0TdNUTVV1XSCKpmmaqqqqrgtETxRNU1Vd13WB54miaaqqq7ouEE3TVFVVdV1ZBpimaaqq68oyQFVV1XVdV5YBqqqqruu6sgxQVdd1XVmWZQCu67qyLMsCAAAOHAAAAoygk4wqi7DRhAsPQKEhKwKAKAAAwBimFFPKMCYhpBAaxiSEFEImJaXSUqogpFJSKRWEVEoqJaOUUmopVRBSKamUCkIqJZVSAADYgQMA2IGFUGjISgAgDwCAMEYpxhhzTiKkFGPOOScRUoox55yTSjHmnHPOSSkZc8w556SUzjnnnHNSSuacc845KaVzzjnnnJRSSuecc05KKSWEzkEnpZTSOeecEwAAVOAAABBgo8jmBCNBhYasBABSAQAMjmNZmuZ5omialiRpmud5niiapiZJmuZ5nieKqsnzPE8URdE0VZXneZ4oiqJpqirXFUXTNE1VVV2yLIqmaZqq6rowTdNUVdd1XZimaaqq67oubFtVVdV1ZRm2raqq6rqyDFzXdWXZloEsu67s2rIAAPAEBwCgAhtWRzgpGgssNGQlAJABAEAYg5BCCCFlEEIKIYSUUggJAAAYcAAACDChDBQashIASAUAAIyx1lprrbXWQGettdZaa62AzFprrbXWWmuttdZaa6211lJrrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmstpZRSSimllFJKKaWUUkoppZRSSgUA+lU4APg/2LA6wknRWGChISsBgHAAAMAYpRhzDEIppVQIMeacdFRai7FCiDHnJKTUWmzFc85BKCGV1mIsnnMOQikpxVZjUSmEUlJKLbZYi0qho5JSSq3VWIwxqaTWWoutxmKMSSm01FqLMRYjbE2ptdhqq7EYY2sqLbQYY4zFCF9kbC2m2moNxggjWywt1VprMMYY3VuLpbaaizE++NpSLDHWXAAAd4MDAESCjTOsJJ0VjgYXGrISAAgJACAQUooxxhhzzjnnpFKMOeaccw5CCKFUijHGnHMOQgghlIwx5pxzEEIIIYRSSsaccxBCCCGEkFLqnHMQQgghhBBKKZ1zDkIIIYQQQimlgxBCCCGEEEoopaQUQgghhBBCCKmklEIIIYRSQighlZRSCCGEEEIpJaSUUgohhFJCCKGElFJKKYUQQgillJJSSimlEkoJJYQSUikppRRKCCGUUkpKKaVUSgmhhBJKKSWllFJKIYQQSikFAAAcOAAABBhBJxlVFmGjCRcegEJDVgIAZAAAkKKUUiktRYIipRikGEtGFXNQWoqocgxSzalSziDmJJaIMYSUk1Qy5hRCDELqHHVMKQYtlRhCxhik2HJLoXMOAAAAQQCAgJAAAAMEBTMAwOAA4XMQdAIERxsAgCBEZohEw0JweFAJEBFTAUBigkIuAFRYXKRdXECXAS7o4q4DIQQhCEEsDqCABByccMMTb3jCDU7QKSp1IAAAAAAADADwAACQXAAREdHMYWRobHB0eHyAhIiMkAgAAAAAABcAfAAAJCVAREQ0cxgZGhscHR4fICEiIyQBAIAAAgAAAAAggAAEBAQAAAAAAAIAAAAEBB9DtnUBAAAAAAAEPueBAKOFggAAgACjzoEAA4BwBwCdASqwAJAAAEcIhYWIhYSIAgIABhwJ7kPfbJyHvtk5D32ych77ZOQ99snIe+2TkPfbJyHvtk5D32ych77ZOQ99YAD+/6tQgKOFggADgAqjhYIAD4AOo4WCACSADqOZgQArADECAAEQEAAYABhYL/QACIBDmAYAAKOFggA6gA6jhYIAT4AOo5mBAFMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAGSADqOFggB6gA6jmYEAewAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIAj4AOo5mBAKMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAKSADqOFggC6gA6jmYEAywAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIAz4AOo4WCAOSADqOZgQDzADECAAEQEAAYABhYL/QACIBDmAYAAKOFggD6gA6jhYIBD4AOo5iBARsAEQIAARAQFGAAYWC/0AAiAQ5gGACjhYIBJIAOo4WCATqADqOZgQFDADECAAEQEAAYABhYL/QACIBDmAYAAKOFggFPgA6jhYIBZIAOo5mBAWsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAXqADqOFggGPgA6jmYEBkwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIBpIAOo4WCAbqADqOZgQG7ADECAAEQEAAYABhYL/QACIBDmAYAAKOFggHPgA6jmYEB4wAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIB5IAOo4WCAfqADqOZgQILADECAAEQEAAYABhYL/QACIBDmAYAAKOFggIPgA6jhYICJIAOo5mBAjMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAjqADqOFggJPgA6jmYECWwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYICZIAOo4WCAnqADqOZgQKDADECAAEQEAAYABhYL/QACIBDmAYAAKOFggKPgA6jhYICpIAOo5mBAqsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCArqADqOFggLPgA6jmIEC0wARAgABEBAUYABhYL/QACIBDmAYAKOFggLkgA6jhYIC+oAOo5mBAvsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAw+ADqOZgQMjADECAAEQEAAYABhYL/QACIBDmAYAAKOFggMkgA6jhYIDOoAOo5mBA0sAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCA0+ADqOFggNkgA6jmYEDcwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIDeoAOo4WCA4+ADqOZgQObADECAAEQEAAYABhYL/QACIBDmAYAAKOFggOkgA6jhYIDuoAOo5mBA8MAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCA8+ADqOFggPkgA6jhYID+oAOo4WCBA+ADhxTu2sBAAAAAAAAEbuPs4EDt4r3gQHxghEr8IEK",mp4:"data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAAAGF21kYXTeBAAAbGliZmFhYyAxLjI4AABCAJMgBDIARwAAArEGBf//rdxF6b3m2Ui3lizYINkj7u94MjY0IC0gY29yZSAxNDIgcjIgOTU2YzhkOCAtIEguMjY0L01QRUctNCBBVkMgY29kZWMgLSBDb3B5bGVmdCAyMDAzLTIwMTQgLSBodHRwOi8vd3d3LnZpZGVvbGFuLm9yZy94MjY0Lmh0bWwgLSBvcHRpb25zOiBjYWJhYz0wIHJlZj0zIGRlYmxvY2s9MTowOjAgYW5hbHlzZT0weDE6MHgxMTEgbWU9aGV4IHN1Ym1lPTcgcHN5PTEgcHN5X3JkPTEuMDA6MC4wMCBtaXhlZF9yZWY9MSBtZV9yYW5nZT0xNiBjaHJvbWFfbWU9MSB0cmVsbGlzPTEgOHg4ZGN0PTAgY3FtPTAgZGVhZHpvbmU9MjEsMTEgZmFzdF9wc2tpcD0xIGNocm9tYV9xcF9vZmZzZXQ9LTIgdGhyZWFkcz02IGxvb2thaGVhZF90aHJlYWRzPTEgc2xpY2VkX3RocmVhZHM9MCBucj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9pbnRyYT0wIGJmcmFtZXM9MCB3ZWlnaHRwPTAga2V5aW50PTI1MCBrZXlpbnRfbWluPTI1IHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NDAgcmM9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXA9NCB2YnZfbWF4cmF0ZT03NjggdmJ2X2J1ZnNpemU9MzAwMCBjcmZfbWF4PTAuMCBuYWxfaHJkPW5vbmUgZmlsbGVyPTAgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAAAFZliIQL8mKAAKvMnJycnJycnJycnXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXiEASZACGQAjgCEASZACGQAjgAAAAAdBmjgX4GSAIQBJkAIZACOAAAAAB0GaVAX4GSAhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZpgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGagC/AySEASZACGQAjgAAAAAZBmqAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZrAL8DJIQBJkAIZACOAAAAABkGa4C/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmwAvwMkhAEmQAhkAI4AAAAAGQZsgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGbQC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBm2AvwMkhAEmQAhkAI4AAAAAGQZuAL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGboC/AySEASZACGQAjgAAAAAZBm8AvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZvgL8DJIQBJkAIZACOAAAAABkGaAC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmiAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZpAL8DJIQBJkAIZACOAAAAABkGaYC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmoAvwMkhAEmQAhkAI4AAAAAGQZqgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGawC/AySEASZACGQAjgAAAAAZBmuAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZsAL8DJIQBJkAIZACOAAAAABkGbIC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBm0AvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZtgL8DJIQBJkAIZACOAAAAABkGbgCvAySEASZACGQAjgCEASZACGQAjgAAAAAZBm6AnwMkhAEmQAhkAI4AhAEmQAhkAI4AhAEmQAhkAI4AhAEmQAhkAI4AAAAhubW9vdgAAAGxtdmhkAAAAAAAAAAAAAAAAAAAD6AAABDcAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAzB0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAABAAAAAAAAA+kAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAALAAAACQAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAPpAAAAAAABAAAAAAKobWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAB1MAAAdU5VxAAAAAAALWhkbHIAAAAAAAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAACU21pbmYAAAAUdm1oZAAAAAEAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAhNzdGJsAAAAr3N0c2QAAAAAAAAAAQAAAJ9hdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAALAAkABIAAAASAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGP//AAAALWF2Y0MBQsAN/+EAFWdCwA3ZAsTsBEAAAPpAADqYA8UKkgEABWjLg8sgAAAAHHV1aWRraEDyXyRPxbo5pRvPAyPzAAAAAAAAABhzdHRzAAAAAAAAAAEAAAAeAAAD6QAAABRzdHNzAAAAAAAAAAEAAAABAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAABAAAAAQAAAIxzdHN6AAAAAAAAAAAAAAAeAAADDwAAAAsAAAALAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAAiHN0Y28AAAAAAAAAHgAAAEYAAANnAAADewAAA5gAAAO0AAADxwAAA+MAAAP2AAAEEgAABCUAAARBAAAEXQAABHAAAASMAAAEnwAABLsAAATOAAAE6gAABQYAAAUZAAAFNQAABUgAAAVkAAAFdwAABZMAAAWmAAAFwgAABd4AAAXxAAAGDQAABGh0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAACAAAAAAAABDcAAAAAAAAAAAAAAAEBAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAQkAAADcAABAAAAAAPgbWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAC7gAAAykBVxAAAAAAALWhkbHIAAAAAAAAAAHNvdW4AAAAAAAAAAAAAAABTb3VuZEhhbmRsZXIAAAADi21pbmYAAAAQc21oZAAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAADT3N0YmwAAABnc3RzZAAAAAAAAAABAAAAV21wNGEAAAAAAAAAAQAAAAAAAAAAAAIAEAAAAAC7gAAAAAAAM2VzZHMAAAAAA4CAgCIAAgAEgICAFEAVBbjYAAu4AAAADcoFgICAAhGQBoCAgAECAAAAIHN0dHMAAAAAAAAAAgAAADIAAAQAAAAAAQAAAkAAAAFUc3RzYwAAAAAAAAAbAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAwAAAAEAAAABAAAABAAAAAIAAAABAAAABgAAAAEAAAABAAAABwAAAAIAAAABAAAACAAAAAEAAAABAAAACQAAAAIAAAABAAAACgAAAAEAAAABAAAACwAAAAIAAAABAAAADQAAAAEAAAABAAAADgAAAAIAAAABAAAADwAAAAEAAAABAAAAEAAAAAIAAAABAAAAEQAAAAEAAAABAAAAEgAAAAIAAAABAAAAFAAAAAEAAAABAAAAFQAAAAIAAAABAAAAFgAAAAEAAAABAAAAFwAAAAIAAAABAAAAGAAAAAEAAAABAAAAGQAAAAIAAAABAAAAGgAAAAEAAAABAAAAGwAAAAIAAAABAAAAHQAAAAEAAAABAAAAHgAAAAIAAAABAAAAHwAAAAQAAAABAAAA4HN0c3oAAAAAAAAAAAAAADMAAAAaAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAACMc3RjbwAAAAAAAAAfAAAALAAAA1UAAANyAAADhgAAA6IAAAO+AAAD0QAAA+0AAAQAAAAEHAAABC8AAARLAAAEZwAABHoAAASWAAAEqQAABMUAAATYAAAE9AAABRAAAAUjAAAFPwAABVIAAAVuAAAFgQAABZ0AAAWwAAAFzAAABegAAAX7AAAGFwAAAGJ1ZHRhAAAAWm1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAALWlsc3QAAAAlqXRvbwAAAB1kYXRhAAAAAQAAAABMYXZmNTUuMzMuMTAw"}});var o_e=yc((r0o,i_e)=>{var s0o=T(S()),{webm:ngt,mp4:igt}=n_e(),m8=()=>typeof navigator<"u"&&parseFloat((""+(/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))<10&&!window.MSStream,h8=()=>"wakeLock"in navigator,f8=class{constructor(){if(this.enabled=!1,h8()){this._wakeLock=null;let t=()=>{this._wakeLock!==null&&document.visibilityState==="visible"&&this.enable()};document.addEventListener("visibilitychange",t),document.addEventListener("fullscreenchange",t)}else m8()?this.noSleepTimer=null:(this.noSleepVideo=document.createElement("video"),this.noSleepVideo.setAttribute("title","No Sleep"),this.noSleepVideo.setAttribute("playsinline",""),this._addSourceToVideo(this.noSleepVideo,"webm",ngt),this._addSourceToVideo(this.noSleepVideo,"mp4",igt),this.noSleepVideo.addEventListener("loadedmetadata",()=>{this.noSleepVideo.duration<=1?this.noSleepVideo.setAttribute("loop",""):this.noSleepVideo.addEventListener("timeupdate",()=>{this.noSleepVideo.currentTime>.5&&(this.noSleepVideo.currentTime=Math.random())})}))}_addSourceToVideo(t,n,i){var o=document.createElement("source");o.src=i,o.type=`video/${n}`,t.appendChild(o)}get isEnabled(){return this.enabled}enable(){return h8()?navigator.wakeLock.request("screen").then(t=>{this._wakeLock=t,this.enabled=!0,console.log("Wake Lock active."),this._wakeLock.addEventListener("release",()=>{console.log("Wake Lock released.")})}).catch(t=>{throw this.enabled=!1,console.error(`${t.name}, ${t.message}`),t}):m8()?(this.disable(),console.warn(`
  67. NoSleep enabled for older iOS devices. This can interrupt
  68. active or long-running network requests from completing successfully.
  69. See https://github.com/richtr/NoSleep.js/issues/15 for more details.
  70. `),this.noSleepTimer=window.setInterval(()=>{document.hidden||(window.location.href=window.location.href.split("#")[0],window.setTimeout(window.stop,0))},15e3),this.enabled=!0,Promise.resolve()):this.noSleepVideo.play().then(n=>(this.enabled=!0,n)).catch(n=>{throw this.enabled=!1,n})}disable(){h8()?(this._wakeLock&&this._wakeLock.release(),this._wakeLock=null):m8()?this.noSleepTimer&&(console.warn(`
  71. NoSleep now disabled for older iOS devices.
  72. `),window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause(),this.enabled=!1}};i_e.exports=f8});var Ggt={};G_e(Ggt,{AlphaMode:()=>Oh,AlphaPipelineStage:()=>MX,Animation:()=>f9,AnimationViewModel:()=>p9,Appearance:()=>to,ApproximateTerrainHeights:()=>li,ArcGISTiledElevationTerrainProvider:()=>pJ,ArcGisBaseMapType:()=>hh,ArcGisMapServerImageryProvider:()=>v0,ArcGisMapService:()=>Xd,ArcType:()=>Jt,ArticulationStageType:()=>Ha,AssociativeArray:()=>Tt,AttributeCompression:()=>Kn,AttributeType:()=>an,AutoExposure:()=>Kw,AutomaticUniforms:()=>$f,Axis:()=>Zo,AxisAlignedBoundingBox:()=>ab,B3dmLoader:()=>nX,B3dmParser:()=>$E,BaseLayerPicker:()=>y9,BaseLayerPickerViewModel:()=>b9,BatchTable:()=>Ng,BatchTableHierarchy:()=>mx,BatchTexture:()=>Xc,BatchTexturePipelineStage:()=>NX,Billboard:()=>uo,BillboardCollection:()=>nd,BillboardGraphics:()=>Ia,BillboardVisualizer:()=>qV,BingMapsGeocoderService:()=>yJ,BingMapsImageryProvider:()=>Gv,BingMapsStyle:()=>oV,BlendEquation:()=>da,BlendFunction:()=>_o,BlendOption:()=>So,BlendingState:()=>dn,BoundingRectangle:()=>He,BoundingSphere:()=>ce,BoundingSphereState:()=>lt,BoundingVolumeSemantics:()=>Ex,BoxEmitter:()=>O4,BoxGeometry:()=>rl,BoxGeometryUpdater:()=>sE,BoxGraphics:()=>qg,BoxOutlineGeometry:()=>im,BrdfLutGenerator:()=>ew,Buffer:()=>mt,BufferLoader:()=>gx,BufferUsage:()=>Ne,CPUStylingPipelineStage:()=>BX,CallbackProperty:()=>mm,Camera:()=>co,CameraEventAggregator:()=>$w,CameraEventType:()=>vi,CameraFlightPath:()=>nw,Cartesian2:()=>D,Cartesian3:()=>h,Cartesian4:()=>se,Cartographic:()=>he,CartographicGeocoderService:()=>xJ,CatmullRomSpline:()=>_J,Cesium3DContentGroup:()=>ux,Cesium3DTile:()=>gu,Cesium3DTileBatchTable:()=>bp,Cesium3DTileColorBlendMode:()=>hl,Cesium3DTileContent:()=>K4,Cesium3DTileContentFactory:()=>zx,Cesium3DTileContentState:()=>wo,Cesium3DTileContentType:()=>cs,Cesium3DTileFeature:()=>Ts,Cesium3DTileFeatureTable:()=>Rm,Cesium3DTileOptimizationHint:()=>mu,Cesium3DTileOptimizations:()=>CW,Cesium3DTilePass:()=>Xo,Cesium3DTilePassState:()=>Bu,Cesium3DTilePointFeature:()=>kp,Cesium3DTileRefine:()=>Wo,Cesium3DTileStyle:()=>CT,Cesium3DTileStyleEngine:()=>EW,Cesium3DTilesInspector:()=>C9,Cesium3DTilesInspectorViewModel:()=>S9,Cesium3DTilesVoxelProvider:()=>Q4,Cesium3DTileset:()=>zs,Cesium3DTilesetBaseTraversal:()=>wW,Cesium3DTilesetCache:()=>RW,Cesium3DTilesetGraphics:()=>rx,Cesium3DTilesetHeatmap:()=>ZW,Cesium3DTilesetMetadata:()=>s_,Cesium3DTilesetMostDetailedTraversal:()=>WW,Cesium3DTilesetSkipTraversal:()=>MW,Cesium3DTilesetStatistics:()=>i0,Cesium3DTilesetTraversal:()=>Gs,Cesium3DTilesetVisualizer:()=>NW,CesiumInspector:()=>R9,CesiumInspectorViewModel:()=>L9,CesiumTerrainProvider:()=>NP,CesiumWidget:()=>pF,Check:()=>tl,CheckerboardMaterialProperty:()=>LC,CircleEmitter:()=>_F,CircleGeometry:()=>RJ,CircleOutlineGeometry:()=>ZJ,ClassificationModelDrawCommand:()=>gX,ClassificationPipelineStage:()=>UX,ClassificationPrimitive:()=>gS,ClassificationType:()=>kn,ClearCommand:()=>oi,ClippingPlane:()=>Xx,ClippingPlaneCollection:()=>rs,Clock:()=>km,ClockRange:()=>Gr,ClockStep:()=>mo,ClockViewModel:()=>d9,CloudCollection:()=>nj,CloudType:()=>ZV,Color:()=>Y,ColorBlendMode:()=>Ka,ColorGeometryInstanceAttribute:()=>Ut,ColorMaterialProperty:()=>At,Command:()=>$j,ComponentDatatype:()=>Q,Composite3DTileContent:()=>fE,CompositeEntityCollection:()=>uK,CompositeMaterialProperty:()=>ZC,CompositePositionProperty:()=>Js,CompositeProperty:()=>qa,CompressedTextureBuffer:()=>_L,ComputeCommand:()=>qd,ComputeEngine:()=>EP,ConditionsExpression:()=>bF,ConeEmitter:()=>oj,ConstantPositionProperty:()=>Rc,ConstantProperty:()=>qn,ConstantSpline:()=>sX,ContentMetadata:()=>mW,Context:()=>wP,ContextLimits:()=>kt,CoplanarPolygonGeometry:()=>C2,CoplanarPolygonGeometryLibrary:()=>jp,CoplanarPolygonOutlineGeometry:()=>bu,CornerType:()=>Ii,CorridorGeometry:()=>m_,CorridorGeometryLibrary:()=>Mi,CorridorGeometryUpdater:()=>zW,CorridorGraphics:()=>ex,CorridorOutlineGeometry:()=>HW,Credit:()=>St,CreditDisplay:()=>sw,CubeMap:()=>Ma,CubeMapFace:()=>Xh,CubicRealPolynomial:()=>wg,CullFace:()=>bi,CullingVolume:()=>jr,CumulusCloud:()=>Ad,CustomDataSource:()=>e2,CustomHeightmapTerrainProvider:()=>GJ,CustomShader:()=>wT,CustomShaderMode:()=>Mp,CustomShaderPipelineStage:()=>QX,CustomShaderTranslucencyMode:()=>Bb,CylinderGeometry:()=>t2,CylinderGeometryLibrary:()=>h_,CylinderGeometryUpdater:()=>i2,CylinderGraphics:()=>tx,CylinderOutlineGeometry:()=>n2,CzmlDataSource:()=>h2,DataSource:()=>Rr,DataSourceClock:()=>Dm,DataSourceCollection:()=>f2,DataSourceDisplay:()=>eP,DebugAppearance:()=>rj,DebugCameraPrimitive:()=>Gf,DebugInspector:()=>aF,DebugModelMatrixPrimitive:()=>SF,DefaultProxy:()=>EJ,DepthFunction:()=>Ua,DepthPlane:()=>lw,DequantizationPipelineStage:()=>qX,DerivedCommand:()=>N0,DeveloperError:()=>fe,DeviceOrientationCameraController:()=>uw,DirectionalLight:()=>sj,DiscardEmptyTileImagePolicy:()=>rV,DiscardMissingTileImagePolicy:()=>Rv,DistanceDisplayCondition:()=>Gt,DistanceDisplayConditionGeometryInstanceAttribute:()=>Un,DoubleEndedPriorityQueue:()=>H_,DoublyLinkedList:()=>LW,DracoLoader:()=>Vp,DrawCommand:()=>nt,DynamicGeometryBatch:()=>T_,DynamicGeometryUpdater:()=>ni,EarthOrientationParameters:()=>dL,EarthOrientationParametersSample:()=>eb,EasingFunction:()=>Xr,EllipseGeometry:()=>Uc,EllipseGeometryLibrary:()=>Gl,EllipseGeometryUpdater:()=>b2,EllipseGraphics:()=>nx,EllipseOutlineGeometry:()=>ud,Ellipsoid:()=>re,EllipsoidGeodesic:()=>jd,EllipsoidGeometry:()=>Is,EllipsoidGeometryUpdater:()=>g2,EllipsoidGraphics:()=>ix,EllipsoidOutlineGeometry:()=>od,EllipsoidPrimitive:()=>Qv,EllipsoidRhumbLine:()=>ma,EllipsoidSurfaceAppearance:()=>aj,EllipsoidTangentPlane:()=>wr,EllipsoidTerrainProvider:()=>Cf,EllipsoidalOccluder:()=>l0,Empty3DTileContent:()=>dC,EncodedCartesian3:()=>On,Entity:()=>Oo,EntityCluster:()=>rd,EntityCollection:()=>Es,EntityView:()=>nP,Event:()=>ye,EventHelper:()=>Cr,Expression:()=>tu,ExpressionNodeType:()=>ft,ExtrapolationType:()=>ad,FeatureDetection:()=>Mt,FeatureIdPipelineStage:()=>Db,Fog:()=>mw,ForEach:()=>Xe,FrameRateMonitor:()=>LF,FrameState:()=>hw,Framebuffer:()=>Os,FramebufferManager:()=>mi,FrustumCommands:()=>yw,FrustumGeometry:()=>J_,FrustumOutlineGeometry:()=>BP,Fullscreen:()=>lr,FullscreenButton:()=>G9,FullscreenButtonViewModel:()=>Z9,GeoJsonDataSource:()=>rP,GeoJsonLoader:()=>iX,GeocodeType:()=>Oy,Geocoder:()=>X9,GeocoderService:()=>H1,GeocoderViewModel:()=>E9,GeographicProjection:()=>Zi,GeographicTilingScheme:()=>Di,Geometry:()=>dt,Geometry3DTileContent:()=>bE,GeometryAttribute:()=>Ze,GeometryAttributes:()=>hn,GeometryFactory:()=>vJ,GeometryInstance:()=>_t,GeometryInstanceAttribute:()=>ka,GeometryOffsetAttribute:()=>on,GeometryPipeline:()=>An,GeometryPipelineStage:()=>nI,GeometryType:()=>Kd,GeometryUpdater:()=>ii,GeometryVisualizer:()=>k2,GetFeatureInfoFormat:()=>nT,Globe:()=>Jv,GlobeDepth:()=>gw,GlobeSurfaceShaderSet:()=>Lv,GlobeSurfaceTile:()=>Uu,GlobeSurfaceTileProvider:()=>Nv,GlobeTranslucency:()=>Uv,GlobeTranslucencyFramebuffer:()=>xw,GlobeTranslucencyState:()=>fw,GltfBufferViewLoader:()=>IS,GltfDracoLoader:()=>WS,GltfImageLoader:()=>PS,GltfIndexBufferLoader:()=>vS,GltfJsonLoader:()=>FS,GltfLoader:()=>Ep,GltfLoaderUtil:()=>yl,GltfStructuralMetadataLoader:()=>HE,GltfTextureLoader:()=>AS,GltfVertexBufferLoader:()=>MS,GoogleEarthEnterpriseImageryProvider:()=>lj,GoogleEarthEnterpriseMapsProvider:()=>Iv,GoogleEarthEnterpriseMetadata:()=>X0,GoogleEarthEnterpriseTerrainData:()=>z1,GoogleEarthEnterpriseTerrainProvider:()=>DJ,GoogleEarthEnterpriseTileInformation:()=>YP,GoogleMaps:()=>j_,GpxDataSource:()=>lP,GregorianDate:()=>Hf,GridImageryProvider:()=>dj,GridMaterialProperty:()=>AC,GroundGeometryUpdater:()=>Hn,GroundPolylineGeometry:()=>zg,GroundPolylinePrimitive:()=>cm,GroundPrimitive:()=>Vc,GroupMetadata:()=>SC,HeadingPitchRange:()=>Wu,HeadingPitchRoll:()=>Aa,Heap:()=>sL,HeightReference:()=>Oe,HeightmapEncoding:()=>Fu,HeightmapTerrainData:()=>Sa,HeightmapTessellator:()=>M1,HermitePolynomialApproximation:()=>o2,HermiteSpline:()=>Nb,HilbertOrder:()=>ZS,HomeButton:()=>W9,HomeButtonViewModel:()=>I9,HorizontalOrigin:()=>pi,I3SDataProvider:()=>ET,I3SDecoder:()=>RF,I3SFeature:()=>ZF,I3SField:()=>GF,I3SGeometry:()=>EV,I3SLayer:()=>IV,I3SNode:()=>XV,I3dmLoader:()=>rX,I3dmParser:()=>oX,Iau2000Orientation:()=>KP,Iau2006XysData:()=>uL,Iau2006XysSample:()=>Wg,IauOrientationAxes:()=>HP,IauOrientationParameters:()=>OP,ImageBasedLighting:()=>dx,ImageBasedLightingPipelineStage:()=>CX,ImageMaterialProperty:()=>hb,Imagery:()=>uV,ImageryLayer:()=>ia,ImageryLayerCollection:()=>kv,ImageryLayerFeatureInfo:()=>mh,ImageryProvider:()=>Oc,ImageryState:()=>ci,Implicit3DTileContent:()=>US,ImplicitAvailabilityBitstream:()=>ES,ImplicitMetadataView:()=>XS,ImplicitSubdivisionScheme:()=>Mr,ImplicitSubtree:()=>Zx,ImplicitSubtreeCache:()=>gF,ImplicitSubtreeMetadata:()=>yE,ImplicitTileCoordinates:()=>l_,ImplicitTileset:()=>c_,IndexDatatype:()=>Ue,InfoBox:()=>v9,InfoBoxViewModel:()=>P9,InspectorShared:()=>Za,InstanceAttributeSemantic:()=>Nr,InstancingPipelineStage:()=>vX,InterpolationAlgorithm:()=>YJ,InterpolationType:()=>Cm,Intersect:()=>qt,IntersectionTests:()=>Si,Intersections2D:()=>G0,Interval:()=>xc,InvertClassification:()=>xV,Ion:()=>fm,IonGeocoderService:()=>QP,IonImageryProvider:()=>w0,IonResource:()=>Ql,IonWorldImageryStyle:()=>F0,Iso8601:()=>Be,JobScheduler:()=>pw,JobType:()=>pa,JsonMetadataTable:()=>Zp,JulianDate:()=>te,KTX2Transcoder:()=>TL,KeyboardEventModifier:()=>na,KeyframeNode:()=>Qi,KmlCamera:()=>dP,KmlDataSource:()=>RP,KmlLookAt:()=>xP,KmlTour:()=>_P,KmlTourFlyTo:()=>SP,KmlTourWait:()=>CP,Label:()=>Jb,LabelCollection:()=>qh,LabelGraphics:()=>lm,LabelStyle:()=>vo,LabelVisualizer:()=>D2,LagrangePolynomialApproximation:()=>r2,LeapSecond:()=>Ui,Light:()=>hj,LightingModel:()=>Hh,LightingPipelineStage:()=>oI,LinearApproximation:()=>p_,LinearSpline:()=>Mb,ManagedArray:()=>Ec,MapMode2D:()=>Fl,MapProjection:()=>HJ,MapboxImageryProvider:()=>Wv,MapboxStyleImageryProvider:()=>fj,Material:()=>ki,MaterialAppearance:()=>so,MaterialPipelineStage:()=>sI,MaterialProperty:()=>Yo,Math:()=>W,Matrix2:()=>$i,Matrix3:()=>$,Matrix4:()=>A,Megatexture:()=>PV,MetadataClass:()=>xm,MetadataClassProperty:()=>Vb,MetadataComponentType:()=>tn,MetadataEntity:()=>Mn,MetadataEnum:()=>vE,MetadataEnumValue:()=>PE,MetadataPipelineStage:()=>ou,MetadataSchema:()=>_m,MetadataSchemaLoader:()=>NS,MetadataSemantic:()=>Gx,MetadataTable:()=>pl,MetadataTableProperty:()=>xE,MetadataType:()=>Ot,MipmapHint:()=>Ih,Model:()=>Em,Model3DTileContent:()=>Jh,ModelAlphaOptions:()=>SI,ModelAnimation:()=>dX,ModelAnimationChannel:()=>lX,ModelAnimationCollection:()=>uX,ModelAnimationLoop:()=>_l,ModelAnimationState:()=>Zm,ModelArticulation:()=>LX,ModelArticulationStage:()=>VX,ModelClippingPlanesPipelineStage:()=>GX,ModelColorPipelineStage:()=>kb,ModelComponents:()=>wt,ModelDrawCommand:()=>xX,ModelFeature:()=>mX,ModelFeatureTable:()=>fX,ModelGraphics:()=>dp,ModelLightingOptions:()=>WI,ModelMatrixUpdateStage:()=>wX,ModelNode:()=>EX,ModelRenderResources:()=>LI,ModelRuntimeNode:()=>AX,ModelRuntimePrimitive:()=>_I,ModelSceneGraph:()=>vI,ModelSilhouettePipelineStage:()=>GI,ModelSkin:()=>TI,ModelSplitterPipelineStage:()=>XI,ModelStatistics:()=>wI,ModelType:()=>nr,ModelUtility:()=>nn,ModelVisualizer:()=>Y2,Moon:()=>qv,MorphTargetsPipelineStage:()=>cI,MorphWeightSpline:()=>zJ,MortonOrder:()=>ry,Multiple3DTileContent:()=>pW,MultisampleFramebuffer:()=>JE,NavigationHelpButton:()=>F9,NavigationHelpButtonViewModel:()=>w9,NearFarScalar:()=>It,NeverTileDiscardPolicy:()=>bj,NodeRenderResources:()=>II,NodeStatisticsPipelineStage:()=>FX,NodeTransformationProperty:()=>ox,OIT:()=>_w,Occluder:()=>jP,OctahedralProjectedCubeMap:()=>hm,OffsetGeometryInstanceAttribute:()=>zi,OpenCageGeocoderService:()=>jJ,OpenStreetMapImageryProvider:()=>z0,OrderedGroundPrimitiveCollection:()=>p2,OrientedBoundingBox:()=>Wn,OrthographicFrustum:()=>en,OrthographicOffCenterFrustum:()=>yr,Packable:()=>qJ,PackableForInterpolation:()=>$J,Particle:()=>vV,ParticleBurst:()=>gj,ParticleEmitter:()=>xj,ParticleSystem:()=>_j,Pass:()=>Re,PassState:()=>oc,PathGraphics:()=>up,PathVisualizer:()=>K2,PeliasGeocoderService:()=>JP,PerInstanceColorAppearance:()=>rn,PerformanceDisplay:()=>U0,PerformanceWatchdog:()=>M9,PerformanceWatchdogViewModel:()=>A9,PerspectiveFrustum:()=>Ri,PerspectiveOffCenterFrustum:()=>Yc,PickDepth:()=>bw,PickDepthFramebuffer:()=>Sw,PickFramebuffer:()=>Lw,Picking:()=>Gw,PickingPipelineStage:()=>lI,PinBuilder:()=>C0,PixelDatatype:()=>Je,PixelFormat:()=>st,Plane:()=>sn,PlaneGeometry:()=>x2,PlaneGeometryUpdater:()=>T2,PlaneGraphics:()=>$G,PlaneOutlineGeometry:()=>_2,PntsLoader:()=>AI,PntsParser:()=>Dx,PointCloud:()=>PF,PointCloudEyeDomeLighting:()=>Xp,PointCloudShading:()=>Kh,PointCloudStylingPipelineStage:()=>uI,PointGraphics:()=>sx,PointPrimitive:()=>Xs,PointPrimitiveCollection:()=>WC,PointVisualizer:()=>z2,PolygonGeometry:()=>L_,PolygonGeometryLibrary:()=>Bn,PolygonGeometryUpdater:()=>L2,PolygonGraphics:()=>dm,PolygonHierarchy:()=>ha,PolygonOutlineGeometry:()=>V2,PolygonPipeline:()=>ai,Polyline:()=>lu,PolylineArrowMaterialProperty:()=>NC,PolylineCollection:()=>Wm,PolylineColorAppearance:()=>Fr,PolylineDashMaterialProperty:()=>kC,PolylineGeometry:()=>S0,PolylineGeometryUpdater:()=>j2,PolylineGlowMaterialProperty:()=>BC,PolylineGraphics:()=>Da,PolylineMaterialAppearance:()=>ks,PolylineOutlineMaterialProperty:()=>hy,PolylinePipeline:()=>Xi,PolylineVisualizer:()=>$2,PolylineVolumeGeometry:()=>G2,PolylineVolumeGeometryLibrary:()=>Am,PolylineVolumeGeometryUpdater:()=>W2,PolylineVolumeGraphics:()=>ax,PolylineVolumeOutlineGeometry:()=>I2,PositionProperty:()=>cp,PositionPropertyArray:()=>h0,PostProcessStage:()=>po,PostProcessStageCollection:()=>Qw,PostProcessStageComposite:()=>Hc,PostProcessStageLibrary:()=>Ou,PostProcessStageSampleMode:()=>Pd,PostProcessStageTextureCache:()=>bT,Primitive:()=>Zn,PrimitiveCollection:()=>Zl,PrimitiveLoadPlan:()=>vx,PrimitiveOutlineGenerator:()=>Px,PrimitiveOutlinePipelineStage:()=>fI,PrimitivePipeline:()=>Og,PrimitiveRenderResources:()=>PI,PrimitiveState:()=>mr,PrimitiveStatisticsPipelineStage:()=>pI,PrimitiveType:()=>Fe,ProjectionPicker:()=>U9,ProjectionPickerViewModel:()=>N9,Property:()=>H,PropertyArray:()=>OC,PropertyAttribute:()=>Wx,PropertyAttributeProperty:()=>BE,PropertyBag:()=>dl,PropertyTable:()=>Ic,PropertyTexture:()=>Ix,PropertyTextureProperty:()=>DE,ProviderViewModel:()=>Yr,Proxy:()=>eQ,QuadraticRealPolynomial:()=>Tc,QuadtreeOccluders:()=>Dv,QuadtreePrimitive:()=>zv,QuadtreeTile:()=>Bv,QuadtreeTileLoadState:()=>ws,QuadtreeTileProvider:()=>Rj,QuantizedMeshTerrainData:()=>K_,QuarticRealPolynomial:()=>JL,Quaternion:()=>Ae,QuaternionSpline:()=>cX,Queue:()=>ty,Ray:()=>Sn,Rectangle:()=>de,RectangleCollisionChecker:()=>E_,RectangleGeometry:()=>Z_,RectangleGeometryLibrary:()=>ls,RectangleGeometryUpdater:()=>P2,RectangleGraphics:()=>um,RectangleOutlineGeometry:()=>qx,ReferenceFrame:()=>io,ReferenceProperty:()=>f0,RenderState:()=>De,Renderbuffer:()=>ed,RenderbufferFormat:()=>Wc,Request:()=>Uo,RequestErrorEvent:()=>Rh,RequestScheduler:()=>wa,RequestState:()=>$n,RequestType:()=>Hr,Resource:()=>Ee,ResourceCache:()=>Bi,ResourceCacheKey:()=>gl,ResourceCacheStatistics:()=>ME,ResourceLoader:()=>oo,ResourceLoaderState:()=>Rt,Rotation:()=>Cu,RuntimeError:()=>me,S2Cell:()=>_p,SDFSettings:()=>Rs,SampledPositionProperty:()=>js,SampledProperty:()=>ld,Sampler:()=>un,ScaledPositionProperty:()=>mf,Scene:()=>lF,SceneFramebuffer:()=>lT,SceneMode:()=>ie,SceneMode2DPipelineStage:()=>bI,SceneModePicker:()=>D9,SceneModePickerViewModel:()=>k9,SceneTransforms:()=>Ji,SceneTransitioner:()=>qw,ScreenSpaceCameraController:()=>nF,ScreenSpaceEventHandler:()=>Ed,ScreenSpaceEventType:()=>_n,SelectedFeatureIdPipelineStage:()=>Yb,SelectionIndicator:()=>O9,SelectionIndicatorViewModel:()=>Y9,ShaderBuilder:()=>Ux,ShaderCache:()=>XP,ShaderDestination:()=>Le,ShaderFunction:()=>VI,ShaderProgram:()=>Qt,ShaderSource:()=>Ye,ShaderStruct:()=>CI,ShadowMap:()=>B0,ShadowMapShader:()=>Wf,ShadowMode:()=>xn,ShadowVolumeAppearance:()=>Hl,ShowGeometryInstanceAttribute:()=>gn,Simon1994PlanetaryPositions:()=>My,SimplePolylineGeometry:()=>lQ,SingleTileImageryProvider:()=>Pv,SkinningPipelineStage:()=>gI,SkyAtmosphere:()=>dF,SkyBox:()=>uF,SpatialNode:()=>wF,SphereEmitter:()=>Gj,SphereGeometry:()=>dQ,SphereOutlineGeometry:()=>$p,Spherical:()=>s2,Spline:()=>ro,SplitDirection:()=>Pc,Splitter:()=>wV,StaticGeometryColorBatch:()=>Zu,StaticGeometryPerMaterialBatch:()=>Gu,StaticGroundGeometryColorBatch:()=>f1,StaticGroundGeometryPerMaterialBatch:()=>v2,StaticGroundPolylinePerMaterialBatch:()=>q2,StaticOutlineGeometryBatch:()=>y1,StencilConstants:()=>Ft,StencilFunction:()=>Dn,StencilOperation:()=>ht,SteppedSpline:()=>aX,Stereographic:()=>nc,StripeMaterialProperty:()=>HC,StripeOrientation:()=>Ym,StructuralMetadata:()=>ba,StyleCommandsNeeded:()=>Gm,StyleExpression:()=>Ej,Sun:()=>fF,SunLight:()=>R0,SunPostProcess:()=>rF,SupportedImageFormats:()=>zE,SvgPathBindingHandler:()=>c9,TaskProcessor:()=>yi,Terrain:()=>AF,TerrainData:()=>sh,TerrainEncoding:()=>sc,TerrainExaggeration:()=>Sc,TerrainFillMesh:()=>pV,TerrainMesh:()=>Mu,TerrainOffsetProperty:()=>cx,TerrainProvider:()=>Ur,TerrainQuantization:()=>vs,TerrainState:()=>ao,Texture:()=>Wt,TextureAtlas:()=>zb,TextureCache:()=>IP,TextureMagnificationFilter:()=>Ti,TextureManager:()=>n9,TextureMinificationFilter:()=>cn,TextureUniform:()=>zj,TextureWrap:()=>Gn,TileAvailability:()=>ah,TileBoundingRegion:()=>pu,TileBoundingS2Cell:()=>TW,TileBoundingSphere:()=>e0,TileBoundingVolume:()=>Xj,TileCoordinatesImageryProvider:()=>NF,TileDiscardPolicy:()=>Wj,TileEdge:()=>yn,TileImagery:()=>mV,TileMapServiceImageryProvider:()=>jy,TileMetadata:()=>hW,TileOrientedBoundingBox:()=>yu,TileProviderError:()=>Vo,TileReplacementQueue:()=>Yv,TileSelectionResult:()=>jn,TileState:()=>Pj,Tileset3DTileContent:()=>UI,TilesetMetadata:()=>SW,TilesetPipelineStage:()=>TX,TilingScheme:()=>uQ,TimeConstants:()=>Qn,TimeDynamicImagery:()=>iT,TimeDynamicPointCloud:()=>MV,TimeInterval:()=>Tn,TimeIntervalCollection:()=>Lr,TimeIntervalCollectionPositionProperty:()=>p0,TimeIntervalCollectionProperty:()=>b0,TimeStandard:()=>Jn,Timeline:()=>z9,TimelineHighlightRange:()=>K9,TimelineTrack:()=>H9,Tipsify:()=>ZG,ToggleButtonViewModel:()=>dg,Tonemapper:()=>rg,Transforms:()=>vt,TranslationRotationScale:()=>fb,TranslucentTileClassification:()=>Rw,TridiagonalSystemSolver:()=>JS,TrustedServers:()=>oS,TweenCollection:()=>xT,UniformState:()=>vP,UniformType:()=>UV,UrlTemplateImageryProvider:()=>Ca,VERSION:()=>Zgt,VRButton:()=>Q9,VRButtonViewModel:()=>J9,VRTheWorldTerrainProvider:()=>mQ,VaryingType:()=>Jj,Vector3DTileBatch:()=>Dh,Vector3DTileClampedPolylines:()=>lW,Vector3DTileContent:()=>uW,Vector3DTileGeometry:()=>gp,Vector3DTilePoints:()=>nW,Vector3DTilePolygons:()=>iW,Vector3DTilePolylines:()=>Hx,Vector3DTilePrimitive:()=>px,VelocityOrientationProperty:()=>c2,VelocityVectorProperty:()=>x_,VertexArray:()=>ti,VertexArrayFacade:()=>Np,VertexAttributeSemantic:()=>Ct,VertexFormat:()=>We,VerticalOrigin:()=>In,VideoSynchronizer:()=>hQ,View:()=>mT,Viewer:()=>b8,ViewportQuad:()=>Fj,Visibility:()=>sr,Visualizer:()=>eJ,VoxelBoxShape:()=>Af,VoxelContent:()=>xF,VoxelCylinderShape:()=>Mf,VoxelEllipsoidShape:()=>VT,VoxelInspector:()=>$9,VoxelInspectorViewModel:()=>q9,VoxelPrimitive:()=>DV,VoxelProvider:()=>Uj,VoxelRenderResources:()=>$F,VoxelShape:()=>kj,VoxelShapeType:()=>Oi,VoxelTraversal:()=>NV,VulkanConstants:()=>fQ,WallGeometry:()=>F2,WallGeometryLibrary:()=>X_,WallGeometryUpdater:()=>N2,WallGraphics:()=>mp,WallOutlineGeometry:()=>M2,WebGLConstants:()=>ne,WebMapServiceImageryProvider:()=>wv,WebMapTileServiceImageryProvider:()=>Av,WebMercatorProjection:()=>Ei,WebMercatorTilingScheme:()=>kr,WindingOrder:()=>Jr,WireframeIndexGenerator:()=>oC,WireframePipelineStage:()=>xI,_shadersAcesTonemappingStage:()=>Ew,_shadersAdditiveBlend:()=>iF,_shadersAdjustTranslucentFS:()=>j1,_shadersAllMaterialAppearanceFS:()=>fL,_shadersAllMaterialAppearanceVS:()=>pL,_shadersAmbientOcclusionGenerate:()=>Xw,_shadersAmbientOcclusionModulate:()=>Iw,_shadersAspectRampMaterial:()=>VL,_shadersAtmosphereCommon:()=>W0,_shadersBasicMaterialAppearanceFS:()=>bL,_shadersBasicMaterialAppearanceVS:()=>yL,_shadersBillboardCollectionFS:()=>kI,_shadersBillboardCollectionVS:()=>DI,_shadersBlackAndWhite:()=>Ww,_shadersBloomComposite:()=>Pw,_shadersBrdfLutGeneratorFS:()=>iv,_shadersBrightPass:()=>oF,_shadersBrightness:()=>vw,_shadersBumpMapMaterial:()=>LL,_shadersCPUStylingStageFS:()=>DX,_shadersCPUStylingStageVS:()=>kX,_shadersCheckerboardMaterial:()=>RL,_shadersCloudCollectionFS:()=>ov,_shadersCloudCollectionVS:()=>rv,_shadersCloudNoiseFS:()=>sv,_shadersCloudNoiseVS:()=>av,_shadersCompareAndPackTranslucentDepth:()=>cv,_shadersCompositeOITFS:()=>lv,_shadersCompositeTranslucentClassification:()=>uT,_shadersContrastBias:()=>ww,_shadersCustomShaderStageFS:()=>OX,_shadersCustomShaderStageVS:()=>YX,_shadersCzmBuiltins:()=>Mg,_shadersDepthOfField:()=>Fw,_shadersDepthPlaneFS:()=>dv,_shadersDepthPlaneVS:()=>uv,_shadersDepthView:()=>Aw,_shadersDepthViewPacked:()=>Hj,_shadersDotMaterial:()=>ZL,_shadersEdgeDetection:()=>Mw,_shadersElevationBandMaterial:()=>GL,_shadersElevationContourMaterial:()=>EL,_shadersElevationRampMaterial:()=>XL,_shadersEllipsoidFS:()=>q1,_shadersEllipsoidSurfaceAppearanceFS:()=>CF,_shadersEllipsoidSurfaceAppearanceVS:()=>VF,_shadersEllipsoidVS:()=>$1,_shadersFXAA:()=>Uw,_shadersFXAA3_11:()=>mv,_shadersFadeMaterial:()=>IL,_shadersFeatureIdStageFS:()=>KX,_shadersFeatureIdStageVS:()=>HX,_shadersFilmicTonemapping:()=>Nw,_shadersGaussianBlur1D:()=>og,_shadersGeometryStageFS:()=>$X,_shadersGeometryStageVS:()=>eI,_shadersGlobeFS:()=>hv,_shadersGlobeVS:()=>fv,_shadersGridMaterial:()=>WL,_shadersGroundAtmosphere:()=>eV,_shadersHSBToRGB:()=>KR,_shadersHSLToRGB:()=>HR,_shadersImageBasedLightingStageFS:()=>SX,_shadersInstancingStageCommon:()=>XX,_shadersInstancingStageVS:()=>IX,_shadersIntersectBox:()=>OF,_shadersIntersectClippingPlanes:()=>YF,_shadersIntersectCylinder:()=>KF,_shadersIntersectDepth:()=>BF,_shadersIntersectEllipsoid:()=>HF,_shadersIntersection:()=>PT,_shadersIntersectionUtils:()=>DF,_shadersLegacyInstancingStageVS:()=>WX,_shadersLensFlare:()=>kw,_shadersLightingStageFS:()=>iI,_shadersMaterialStageFS:()=>rI,_shadersMegatexture:()=>qF,_shadersMetadataStageFS:()=>zX,_shadersMetadataStageVS:()=>JX,_shadersModelClippingPlanesStageFS:()=>ZX,_shadersModelColorStageFS:()=>RX,_shadersModelFS:()=>pX,_shadersModelSilhouetteStageFS:()=>RI,_shadersModelSilhouetteStageVS:()=>ZI,_shadersModelSplitterStageFS:()=>EI,_shadersModelVS:()=>bX,_shadersModifiedReinhardTonemapping:()=>Dw,_shadersMorphTargetsStageVS:()=>aI,_shadersNightVision:()=>Bw,_shadersNormalMapMaterial:()=>PL,_shadersOctahedralProjectionAtlasFS:()=>aE,_shadersOctahedralProjectionFS:()=>cE,_shadersOctahedralProjectionVS:()=>lE,_shadersOctree:()=>jF,_shadersPassThrough:()=>Al,_shadersPassThroughDepth:()=>tg,_shadersPerInstanceColorAppearanceFS:()=>BL,_shadersPerInstanceColorAppearanceVS:()=>YL,_shadersPerInstanceFlatColorAppearanceFS:()=>vg,_shadersPerInstanceFlatColorAppearanceVS:()=>OL,_shadersPointCloudEyeDomeLighting:()=>jE,_shadersPointCloudStylingStageVS:()=>dI,_shadersPointPrimitiveCollectionFS:()=>my,_shadersPointPrimitiveCollectionVS:()=>JW,_shadersPolylineArrowMaterial:()=>vL,_shadersPolylineColorAppearanceVS:()=>UG,_shadersPolylineCommon:()=>zl,_shadersPolylineDashMaterial:()=>wL,_shadersPolylineFS:()=>Qg,_shadersPolylineGlowMaterial:()=>FL,_shadersPolylineMaterialAppearanceVS:()=>kG,_shadersPolylineOutlineMaterial:()=>AL,_shadersPolylineShadowVolumeFS:()=>FG,_shadersPolylineShadowVolumeMorphFS:()=>AG,_shadersPolylineShadowVolumeMorphVS:()=>MG,_shadersPolylineShadowVolumeVS:()=>NG,_shadersPolylineVS:()=>QI,_shadersPrimitiveOutlineStageFS:()=>hI,_shadersPrimitiveOutlineStageVS:()=>mI,_shadersRGBToHSB:()=>zR,_shadersRGBToHSL:()=>JR,_shadersRGBToXYZ:()=>QR,_shadersReinhardTonemapping:()=>Yw,_shadersReprojectWebMercatorFS:()=>pv,_shadersReprojectWebMercatorVS:()=>bv,_shadersRimLightingMaterial:()=>ML,_shadersSelectedFeatureIdStageCommon:()=>iC,_shadersShadowVolumeAppearanceFS:()=>bS,_shadersShadowVolumeAppearanceVS:()=>CG,_shadersShadowVolumeFS:()=>lb,_shadersSilhouette:()=>Ow,_shadersSkinningStageVS:()=>yI,_shadersSkyAtmosphereCommon:()=>tV,_shadersSkyAtmosphereFS:()=>yv,_shadersSkyAtmosphereVS:()=>gv,_shadersSkyBoxFS:()=>xv,_shadersSkyBoxVS:()=>_v,_shadersSlopeRampMaterial:()=>NL,_shadersStripeMaterial:()=>UL,_shadersSunFS:()=>Tv,_shadersSunTextureFS:()=>Sv,_shadersSunVS:()=>Cv,_shadersTexturedMaterialAppearanceFS:()=>gL,_shadersTexturedMaterialAppearanceVS:()=>xL,_shadersVector3DTileClampedPolylinesFS:()=>aW,_shadersVector3DTileClampedPolylinesVS:()=>sW,_shadersVector3DTilePolylinesVS:()=>oW,_shadersVectorTileVS:()=>RS,_shadersViewportQuadFS:()=>Vv,_shadersViewportQuadVS:()=>D_,_shadersVoxelFS:()=>UF,_shadersVoxelVS:()=>kF,_shadersWater:()=>kL,_shadersXYZToRGB:()=>jR,_shadersacesTonemapping:()=>qR,_shadersalphaWeight:()=>$R,_shadersantialias:()=>eZ,_shadersapproximateSphericalCoordinates:()=>tZ,_shadersbackFacing:()=>nZ,_shadersbranchFreeTernary:()=>iZ,_shaderscascadeColor:()=>oZ,_shaderscascadeDistance:()=>rZ,_shaderscascadeMatrix:()=>sZ,_shaderscascadeWeights:()=>aZ,_shaderscolumbusViewMorph:()=>cZ,_shaderscomputePosition:()=>lZ,_shadersconvertUvToBox:()=>zF,_shadersconvertUvToCylinder:()=>JF,_shadersconvertUvToEllipsoid:()=>QF,_shaderscosineAndSine:()=>dZ,_shadersdecompressTextureCoordinates:()=>uZ,_shadersdefaultPbrMaterial:()=>mZ,_shadersdegreesPerRadian:()=>$L,_shadersdepthClamp:()=>hZ,_shadersdepthRange:()=>eR,_shadersdepthRangeStruct:()=>AR,_shaderseastNorthUpToEyeCoordinates:()=>fZ,_shadersellipsoidContainsPoint:()=>pZ,_shadersellipsoidWgs84TextureCoordinates:()=>bZ,_shadersepsilon1:()=>tR,_shadersepsilon2:()=>nR,_shadersepsilon3:()=>iR,_shadersepsilon4:()=>oR,_shadersepsilon5:()=>rR,_shadersepsilon6:()=>sR,_shadersepsilon7:()=>aR,_shadersequalsEpsilon:()=>yZ,_shaderseyeOffset:()=>gZ,_shaderseyeToWindowCoordinates:()=>xZ,_shadersfastApproximateAtan:()=>_Z,_shadersfog:()=>TZ,_shadersgammaCorrect:()=>SZ,_shadersgeodeticSurfaceNormal:()=>CZ,_shadersgetDefaultMaterial:()=>VZ,_shadersgetLambertDiffuse:()=>LZ,_shadersgetSpecular:()=>RZ,_shadersgetWaterNoise:()=>ZZ,_shadershue:()=>GZ,_shadersinfinity:()=>cR,_shadersinverseGamma:()=>EZ,_shadersisEmpty:()=>XZ,_shadersisFull:()=>IZ,_shaderslatitudeToWebMercatorFraction:()=>WZ,_shaderslineDistance:()=>PZ,_shaderslinearToSrgb:()=>vZ,_shadersluminance:()=>wZ,_shadersmaterial:()=>MR,_shadersmaterialInput:()=>NR,_shadersmetersPerPixel:()=>FZ,_shadersmodelMaterial:()=>UR,_shadersmodelToWindowCoordinates:()=>AZ,_shadersmodelVertexOutput:()=>kR,_shadersmultiplyWithColorBalance:()=>MZ,_shadersnearFarScalar:()=>NZ,_shadersoctDecode:()=>UZ,_shadersoneOverPi:()=>lR,_shadersoneOverTwoPi:()=>dR,_shaderspackDepth:()=>kZ,_shaderspassCesium3DTile:()=>uR,_shaderspassCesium3DTileClassification:()=>mR,_shaderspassCesium3DTileClassificationIgnoreShow:()=>hR,_shaderspassClassification:()=>fR,_shaderspassCompute:()=>pR,_shaderspassEnvironment:()=>bR,_shaderspassGlobe:()=>yR,_shaderspassOpaque:()=>gR,_shaderspassOverlay:()=>xR,_shaderspassTerrainClassification:()=>_R,_shaderspassTranslucent:()=>TR,_shaderspassVoxels:()=>SR,_shaderspbrLighting:()=>DZ,_shaderspbrMetallicRoughnessMaterial:()=>BZ,_shaderspbrParameters:()=>DR,_shaderspbrSpecularGlossinessMaterial:()=>YZ,_shadersphong:()=>OZ,_shaderspi:()=>CR,_shaderspiOverFour:()=>VR,_shaderspiOverSix:()=>LR,_shaderspiOverThree:()=>RR,_shaderspiOverTwo:()=>ZR,_shadersplaneDistance:()=>KZ,_shaderspointAlongRay:()=>HZ,_shadersradiansPerDegree:()=>GR,_shadersray:()=>BR,_shadersrayEllipsoidIntersectionInterval:()=>zZ,_shadersraySegment:()=>YR,_shadersraySphereIntersectionInterval:()=>JZ,_shadersreadDepth:()=>QZ,_shadersreadNonPerspective:()=>jZ,_shadersreverseLogDepth:()=>qZ,_shadersround:()=>$Z,_shaderssampleOctahedralProjection:()=>eG,_shaderssaturation:()=>tG,_shaderssceneMode2D:()=>ER,_shaderssceneMode3D:()=>XR,_shaderssceneModeColumbusView:()=>IR,_shaderssceneModeMorphing:()=>WR,_shadersshadowDepthCompare:()=>nG,_shadersshadowParameters:()=>OR,_shadersshadowVisibility:()=>iG,_shaderssignNotZero:()=>oG,_shaderssolarRadius:()=>PR,_shaderssphericalHarmonics:()=>rG,_shaderssrgbToLinear:()=>sG,_shaderstangentToEyeSpaceMatrix:()=>aG,_shaderstextureCube:()=>cG,_shadersthreePiOver2:()=>vR,_shaderstransformPlane:()=>lG,_shaderstranslateRelativeToEye:()=>dG,_shaderstranslucentPhong:()=>uG,_shaderstranspose:()=>mG,_shaderstwoPi:()=>wR,_shadersunpackDepth:()=>hG,_shadersunpackFloat:()=>fG,_shadersunpackUint:()=>pG,_shadersvalueTransform:()=>bG,_shadersvertexLogDepth:()=>yG,_shaderswebMercatorMaxLatitude:()=>FR,_shaderswindowToEyeCoordinates:()=>gG,_shaderswriteDepthClamp:()=>xG,_shaderswriteLogDepth:()=>_G,_shaderswriteNonPerspective:()=>TG,addBuffer:()=>GE,addDefaults:()=>_E,addExtensionsRequired:()=>LE,addExtensionsUsed:()=>nu,addPipelineExtras:()=>Gb,addToArray:()=>os,appendForwardSlash:()=>iL,arrayRemoveDuplicates:()=>go,barycentricCoordinates:()=>Ug,binarySearch:()=>Lo,buildDrawCommand:()=>_X,buildModuleUrl:()=>$t,buildVoxelDrawCommands:()=>t9,clone:()=>Ke,combine:()=>xt,computeFlyToLocationForRectangle:()=>AT,createBillboardPointCallback:()=>Bx,createCommand:()=>Cn,createDefaultImageryProviderViewModels:()=>g9,createDefaultTerrainProviderViewModels:()=>x9,createElevationBandMaterial:()=>Bj,createGooglePhotorealistic3DTileset:()=>Yj,createGuid:()=>Yn,createMaterialPropertyDescriptor:()=>Ro,createOsmBuildingsAsync:()=>Oj,createPropertyDescriptor:()=>le,createRawPropertyDescriptor:()=>ll,createTangentSpaceDebugPrimitive:()=>Kj,createTaskProcessorWorker:()=>Qj,createUniform:()=>jL,createUniformArray:()=>qL,createWorldImageryAsync:()=>A0,createWorldTerrainAsync:()=>eT,decodeGoogleEarthEnterpriseData:()=>ev,decodeVectorPolylinePositions:()=>dW,defaultValue:()=>g,defer:()=>il,defined:()=>d,demodernizeShader:()=>SG,deprecationWarning:()=>Qr,destroyObject:()=>ue,exportKml:()=>rJ,findAccessorMinMax:()=>Cx,findContentMetadata:()=>Jx,findGroupMetadata:()=>Qx,findTileMetadata:()=>fW,forEachTextureInMaterial:()=>wS,formatError:()=>Sf,freezeRenderState:()=>s3,getAbsoluteUri:()=>Vh,getAccessorByteStride:()=>bl,getBaseUri:()=>oL,getBinaryAccessor:()=>jl,getClipAndStyleCode:()=>IF,getClippingFunction:()=>P0,getComponentReader:()=>Rp,getElement:()=>En,getExtensionFromUri:()=>Cg,getFilenameFromUri:()=>u0,getImageFromTypedArray:()=>tv,getImagePixels:()=>nm,getJsonFromTypedArray:()=>Go,getMagic:()=>pm,getStringFromTypedArray:()=>ml,getTimestamp:()=>gi,hasExtension:()=>ri,heightReferenceOnEntityPropertyChanged:()=>hp,isBitSet:()=>cc,isBlobUri:()=>Vg,isCrossOriginUrl:()=>Lg,isDataUri:()=>Jf,isLeapYear:()=>zf,knockout:()=>Se,knockout_3_5_1:()=>MT,knockout_es5:()=>a9,loadAndExecuteScript:()=>Rg,loadCubeMap:()=>FP,loadImageFromTypedArray:()=>_x,loadKTX2:()=>sl,mergeSort:()=>I0,moveTechniqueRenderStates:()=>VE,moveTechniquesToExtension:()=>RE,numberOfComponentsForType:()=>$l,objectToQuery:()=>Zg,oneTimeWarning:()=>Pt,parseBatchTable:()=>Pp,parseFeatureMetadataLegacy:()=>KE,parseGlb:()=>SE,parseResponseHeaders:()=>rL,parseStructuralMetadata:()=>OE,pointInsideTriangle:()=>xQ,preprocess3DTileContent:()=>tf,processVoxelProperties:()=>e9,queryToObject:()=>Yl,readAccessorPacked:()=>EE,removeExtension:()=>Vx,removeExtensionsRequired:()=>TE,removeExtensionsUsed:()=>Sx,removePipelineExtras:()=>CE,removeUnusedElements:()=>ZE,resizeImageToNextPowerOfTwo:()=>Ib,sampleTerrain:()=>B2,sampleTerrainMostDetailed:()=>T0,scaleToGeodeticSurface:()=>Tg,subdivideArray:()=>VG,subscribeAndEvaluate:()=>aa,updateAccessorComponentTypes:()=>XE,updateVersion:()=>IE,usesExtension:()=>tr,viewerCesium3DTilesInspectorMixin:()=>y8,viewerCesiumInspectorMixin:()=>g8,viewerDragDropMixin:()=>_8,viewerPerformanceWatchdogMixin:()=>T8,viewerVoxelInspectorMixin:()=>S8,webGLConstantToGlslType:()=>_Q,wrapFunction:()=>nv,writeTextToCanvas:()=>Ox});var xyo=T(S(),1);var eJi=T(S(),1);var sxt=T(S(),1);var Pgt=T(S(),1);function D8(e,t){return e??t}D8.EMPTY_OBJECT=Object.freeze({});var g=D8;var wgt=T(S(),1);function X_e(e){return e!=null}var d=X_e;var Mgt=T(S(),1);function xg(e){this.name="DeveloperError",this.message=e;let t;try{throw new Error}catch(n){t=n.stack}this.stack=t}d(Object.create)&&(xg.prototype=Object.create(Error.prototype),xg.prototype.constructor=xg);xg.prototype.toString=function(){let e=`${this.name}: ${this.message}`;return d(this.stack)&&(e+=`
  73. ${this.stack.toString()}`),e};xg.throwInstantiationError=function(){throw new xg("This function defines an interface and should not be called directly.")};var fe=xg;var Ogt=T(S(),1);var Dgt=T(S(),1);var is={};is.typeOf={};function I_e(e){return`${e} is required, actual value was undefined`}function HT(e,t,n){return`Expected ${n} to be typeof ${t}, actual typeof was ${e}`}is.defined=function(e,t){if(!d(t))throw new fe(I_e(e))};is.typeOf.func=function(e,t){if(typeof t!="function")throw new fe(HT(typeof t,"function",e))};is.typeOf.string=function(e,t){if(typeof t!="string")throw new fe(HT(typeof t,"string",e))};is.typeOf.number=function(e,t){if(typeof t!="number")throw new fe(HT(typeof t,"number",e))};is.typeOf.number.lessThan=function(e,t,n){if(is.typeOf.number(e,t),t>=n)throw new fe(`Expected ${e} to be less than ${n}, actual value was ${t}`)};is.typeOf.number.lessThanOrEquals=function(e,t,n){if(is.typeOf.number(e,t),t>n)throw new fe(`Expected ${e} to be less than or equal to ${n}, actual value was ${t}`)};is.typeOf.number.greaterThan=function(e,t,n){if(is.typeOf.number(e,t),t<=n)throw new fe(`Expected ${e} to be greater than ${n}, actual value was ${t}`)};is.typeOf.number.greaterThanOrEquals=function(e,t,n){if(is.typeOf.number(e,t),t<n)throw new fe(`Expected ${e} to be greater than or equal to ${n}, actual value was ${t}`)};is.typeOf.object=function(e,t){if(typeof t!="object")throw new fe(HT(typeof t,"object",e))};is.typeOf.bool=function(e,t){if(typeof t!="boolean")throw new fe(HT(typeof t,"boolean",e))};is.typeOf.bigint=function(e,t){if(typeof t!="bigint")throw new fe(HT(typeof t,"bigint",e))};is.typeOf.number.equals=function(e,t,n,i){if(is.typeOf.number(e,n),is.typeOf.number(t,i),n!==i)throw new fe(`${e} must be equal to ${t}, the actual values are ${n} and ${i}`)};var tl=is;function JV(){this._listeners=[],this._scopes=[],this._toRemove=[],this._insideRaiseEvent=!1}Object.defineProperties(JV.prototype,{numberOfListeners:{get:function(){return this._listeners.length-this._toRemove.length}}});JV.prototype.addEventListener=function(e,t){this._listeners.push(e),this._scopes.push(t);let n=this;return function(){n.removeEventListener(e,t)}};JV.prototype.removeEventListener=function(e,t){let n=this._listeners,i=this._scopes,o=-1;for(let r=0;r<n.length;r++)if(n[r]===e&&i[r]===t){o=r;break}return o!==-1?(this._insideRaiseEvent?(this._toRemove.push(o),n[o]=void 0,i[o]=void 0):(n.splice(o,1),i.splice(o,1)),!0):!1};function W_e(e,t){return t-e}JV.prototype.raiseEvent=function(){this._insideRaiseEvent=!0;let e,t=this._listeners,n=this._scopes,i=t.length;for(e=0;e<i;e++){let r=t[e];d(r)&&t[e].apply(n[e],arguments)}let o=this._toRemove;if(i=o.length,i>0){for(o.sort(W_e),e=0;e<i;e++){let r=o[e];t.splice(r,1),n.splice(r,1)}o.length=0}this._insideRaiseEvent=!1};var ye=JV;var ext=T(S(),1);var Jgt=T(S(),1);function j0(e){this._value=void 0,this._hasClone=!1,this._hasEquals=!1,this._definitionChanged=new ye,this.setValue(e)}Object.defineProperties(j0.prototype,{isConstant:{value:!0},definitionChanged:{get:function(){return this._definitionChanged}}});j0.prototype.getValue=function(e,t){return this._hasClone?this._value.clone(t):this._value};j0.prototype.setValue=function(e){let t=this._value;if(t!==e){let n=d(e),i=n&&typeof e.clone=="function",o=n&&typeof e.equals=="function";(!o||!e.equals(t))&&(this._hasClone=i,this._hasEquals=o,this._value=i?e.clone(this._value):e,this._definitionChanged.raiseEvent(this))}};j0.prototype.equals=function(e){return this===e||e instanceof j0&&(!this._hasEquals&&this._value===e._value||this._hasEquals&&this._value.equals(e._value))};j0.prototype.valueOf=function(){return this._value};j0.prototype.toString=function(){return String(this._value)};var qn=j0;function P_e(e,t,n,i,o){return{configurable:i,get:function(){return this[t]},set:function(r){let s=this[t],a=this[n];d(a)&&(a(),this[n]=void 0),r!==void 0&&(!d(r)||!d(r.getValue))&&d(o)&&(r=o(r)),s!==r&&(this[t]=r,this._definitionChanged.raiseEvent(this,e,r,s)),d(r)&&d(r.definitionChanged)&&(this[n]=r.definitionChanged.addEventListener(function(){this._definitionChanged.raiseEvent(this,e,r,r)},this))}}}function v_e(e){return new qn(e)}function w_e(e,t,n){return P_e(e,`_${e.toString()}`,`_${e.toString()}Subscription`,g(t,!1),g(n,v_e))}var le=w_e;function QV(e){this._definitionChanged=new ye,this._show=void 0,this._showSubscription=void 0,this._image=void 0,this._imageSubscription=void 0,this._scale=void 0,this._scaleSubscription=void 0,this._pixelOffset=void 0,this._pixelOffsetSubscription=void 0,this._eyeOffset=void 0,this._eyeOffsetSubscription=void 0,this._horizontalOrigin=void 0,this._horizontalOriginSubscription=void 0,this._verticalOrigin=void 0,this._verticalOriginSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._color=void 0,this._colorSubscription=void 0,this._rotation=void 0,this._rotationSubscription=void 0,this._alignedAxis=void 0,this._alignedAxisSubscription=void 0,this._sizeInMeters=void 0,this._sizeInMetersSubscription=void 0,this._width=void 0,this._widthSubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._scaleByDistance=void 0,this._scaleByDistanceSubscription=void 0,this._translucencyByDistance=void 0,this._translucencyByDistanceSubscription=void 0,this._pixelOffsetScaleByDistance=void 0,this._pixelOffsetScaleByDistanceSubscription=void 0,this._imageSubRegion=void 0,this._imageSubRegionSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._disableDepthTestDistance=void 0,this._disableDepthTestDistanceSubscription=void 0,this.merge(g(e,g.EMPTY_OBJECT))}Object.defineProperties(QV.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:le("show"),image:le("image"),scale:le("scale"),pixelOffset:le("pixelOffset"),eyeOffset:le("eyeOffset"),horizontalOrigin:le("horizontalOrigin"),verticalOrigin:le("verticalOrigin"),heightReference:le("heightReference"),color:le("color"),rotation:le("rotation"),alignedAxis:le("alignedAxis"),sizeInMeters:le("sizeInMeters"),width:le("width"),height:le("height"),scaleByDistance:le("scaleByDistance"),translucencyByDistance:le("translucencyByDistance"),pixelOffsetScaleByDistance:le("pixelOffsetScaleByDistance"),imageSubRegion:le("imageSubRegion"),distanceDisplayCondition:le("distanceDisplayCondition"),disableDepthTestDistance:le("disableDepthTestDistance")});QV.prototype.clone=function(e){return d(e)?(e.show=this._show,e.image=this._image,e.scale=this._scale,e.pixelOffset=this._pixelOffset,e.eyeOffset=this._eyeOffset,e.horizontalOrigin=this._horizontalOrigin,e.verticalOrigin=this._verticalOrigin,e.heightReference=this._heightReference,e.color=this._color,e.rotation=this._rotation,e.alignedAxis=this._alignedAxis,e.sizeInMeters=this._sizeInMeters,e.width=this._width,e.height=this._height,e.scaleByDistance=this._scaleByDistance,e.translucencyByDistance=this._translucencyByDistance,e.pixelOffsetScaleByDistance=this._pixelOffsetScaleByDistance,e.imageSubRegion=this._imageSubRegion,e.distanceDisplayCondition=this._distanceDisplayCondition,e.disableDepthTestDistance=this._disableDepthTestDistance,e):new QV(this)};QV.prototype.merge=function(e){this.show=g(this._show,e.show),this.image=g(this._image,e.image),this.scale=g(this._scale,e.scale),this.pixelOffset=g(this._pixelOffset,e.pixelOffset),this.eyeOffset=g(this._eyeOffset,e.eyeOffset),this.horizontalOrigin=g(this._horizontalOrigin,e.horizontalOrigin),this.verticalOrigin=g(this._verticalOrigin,e.verticalOrigin),this.heightReference=g(this._heightReference,e.heightReference),this.color=g(this._color,e.color),this.rotation=g(this._rotation,e.rotation),this.alignedAxis=g(this._alignedAxis,e.alignedAxis),this.sizeInMeters=g(this._sizeInMeters,e.sizeInMeters),this.width=g(this._width,e.width),this.height=g(this._height,e.height),this.scaleByDistance=g(this._scaleByDistance,e.scaleByDistance),this.translucencyByDistance=g(this._translucencyByDistance,e.translucencyByDistance),this.pixelOffsetScaleByDistance=g(this._pixelOffsetScaleByDistance,e.pixelOffsetScaleByDistance),this.imageSubRegion=g(this._imageSubRegion,e.imageSubRegion),this.distanceDisplayCondition=g(this._distanceDisplayCondition,e.distanceDisplayCondition),this.disableDepthTestDistance=g(this._disableDepthTestDistance,e.disableDepthTestDistance)};var Ia=QV;var pTt=T(S(),1);var lxt=T(S(),1);function _g(){this._array=[],this._hash={}}Object.defineProperties(_g.prototype,{length:{get:function(){return this._array.length}},values:{get:function(){return this._array}}});_g.prototype.contains=function(e){return d(this._hash[e])};_g.prototype.set=function(e,t){let n=this._hash[e];t!==n&&(this.remove(e),this._hash[e]=t,this._array.push(t))};_g.prototype.get=function(e){return this._hash[e]};_g.prototype.remove=function(e){let t=this._hash[e],n=d(t);if(n){let i=this._array;i.splice(i.indexOf(t),1),delete this._hash[e]}return n};_g.prototype.removeAll=function(){let e=this._array;e.length>0&&(this._hash={},e.length=0)};var Tt=_g;var p_t=T(S(),1);var xxt=T(S(),1);var fxt=T(S(),1),HD=T(oA(),1);var at={};at.EPSILON1=.1;at.EPSILON2=.01;at.EPSILON3=.001;at.EPSILON4=1e-4;at.EPSILON5=1e-5;at.EPSILON6=1e-6;at.EPSILON7=1e-7;at.EPSILON8=1e-8;at.EPSILON9=1e-9;at.EPSILON10=1e-10;at.EPSILON11=1e-11;at.EPSILON12=1e-12;at.EPSILON13=1e-13;at.EPSILON14=1e-14;at.EPSILON15=1e-15;at.EPSILON16=1e-16;at.EPSILON17=1e-17;at.EPSILON18=1e-18;at.EPSILON19=1e-19;at.EPSILON20=1e-20;at.EPSILON21=1e-21;at.GRAVITATIONALPARAMETER=3986004418e5;at.SOLAR_RADIUS=6955e5;at.LUNAR_RADIUS=1737400;at.SIXTY_FOUR_KILOBYTES=64*1024;at.FOUR_GIGABYTES=4*1024*1024*1024;at.sign=g(Math.sign,function(t){return t=+t,t===0||t!==t?t:t>0?1:-1});at.signNotZero=function(e){return e<0?-1:1};at.toSNorm=function(e,t){return t=g(t,255),Math.round((at.clamp(e,-1,1)*.5+.5)*t)};at.fromSNorm=function(e,t){return t=g(t,255),at.clamp(e,0,t)/t*2-1};at.normalize=function(e,t,n){return n=Math.max(n-t,0),n===0?0:at.clamp((e-t)/n,0,1)};at.sinh=g(Math.sinh,function(t){return(Math.exp(t)-Math.exp(-t))/2});at.cosh=g(Math.cosh,function(t){return(Math.exp(t)+Math.exp(-t))/2});at.lerp=function(e,t,n){return(1-n)*e+n*t};at.PI=Math.PI;at.ONE_OVER_PI=1/Math.PI;at.PI_OVER_TWO=Math.PI/2;at.PI_OVER_THREE=Math.PI/3;at.PI_OVER_FOUR=Math.PI/4;at.PI_OVER_SIX=Math.PI/6;at.THREE_PI_OVER_TWO=3*Math.PI/2;at.TWO_PI=2*Math.PI;at.ONE_OVER_TWO_PI=1/(2*Math.PI);at.RADIANS_PER_DEGREE=Math.PI/180;at.DEGREES_PER_RADIAN=180/Math.PI;at.RADIANS_PER_ARCSECOND=at.RADIANS_PER_DEGREE/3600;at.toRadians=function(e){return e*at.RADIANS_PER_DEGREE};at.toDegrees=function(e){return e*at.DEGREES_PER_RADIAN};at.convertLongitudeRange=function(e){let t=at.TWO_PI,n=e-Math.floor(e/t)*t;return n<-Math.PI?n+t:n>=Math.PI?n-t:n};at.clampToLatitudeRange=function(e){return at.clamp(e,-1*at.PI_OVER_TWO,at.PI_OVER_TWO)};at.negativePiToPi=function(e){return e>=-at.PI&&e<=at.PI?e:at.zeroToTwoPi(e+at.PI)-at.PI};at.zeroToTwoPi=function(e){if(e>=0&&e<=at.TWO_PI)return e;let t=at.mod(e,at.TWO_PI);return Math.abs(t)<at.EPSILON14&&Math.abs(e)>at.EPSILON14?at.TWO_PI:t};at.mod=function(e,t){return at.sign(e)===at.sign(t)&&Math.abs(e)<Math.abs(t)?e:(e%t+t)%t};at.equalsEpsilon=function(e,t,n,i){n=g(n,0),i=g(i,n);let o=Math.abs(e-t);return o<=i||o<=n*Math.max(Math.abs(e),Math.abs(t))};at.lessThan=function(e,t,n){return e-t<-n};at.lessThanOrEquals=function(e,t,n){return e-t<n};at.greaterThan=function(e,t,n){return e-t>n};at.greaterThanOrEquals=function(e,t,n){return e-t>-n};var rA=[1];at.factorial=function(e){let t=rA.length;if(e>=t){let n=rA[t-1];for(let i=t;i<=e;i++){let o=n*i;rA.push(o),n=o}}return rA[e]};at.incrementWrap=function(e,t,n){return n=g(n,0),++e,e>t&&(e=n),e};at.isPowerOfTwo=function(e){return e!==0&&(e&e-1)===0};at.nextPowerOfTwo=function(e){return--e,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e,e};at.previousPowerOfTwo=function(e){return e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,e|=e>>32,e=(e>>>0)-(e>>>1),e};at.clamp=function(e,t,n){return e<t?t:e>n?n:e};var Y8=new HD.default;at.setRandomNumberSeed=function(e){Y8=new HD.default(e)};at.nextRandomNumber=function(){return Y8.random()};at.randomBetween=function(e,t){return at.nextRandomNumber()*(t-e)+e};at.acosClamped=function(e){return Math.acos(at.clamp(e,-1,1))};at.asinClamped=function(e){return Math.asin(at.clamp(e,-1,1))};at.chordLength=function(e,t){return 2*t*Math.sin(e*.5)};at.logBase=function(e,t){return Math.log(e)/Math.log(t)};at.cbrt=g(Math.cbrt,function(t){let n=Math.pow(Math.abs(t),.3333333333333333);return t<0?-n:n});at.log2=g(Math.log2,function(t){return Math.log(t)*Math.LOG2E});at.fog=function(e,t){let n=e*t;return 1-Math.exp(-(n*n))};at.fastApproximateAtan=function(e){return e*(-.1784*Math.abs(e)-.0663*e*e+1.0301)};at.fastApproximateAtan2=function(e,t){let n,i=Math.abs(e);n=Math.abs(t);let o=Math.max(i,n);n=Math.min(i,n);let r=n/o;return i=at.fastApproximateAtan(r),i=Math.abs(t)>Math.abs(e)?at.PI_OVER_TWO-i:i,i=e<0?at.PI-i:i,i=t<0?-i:i,i};var W=at;function Xt(e,t){this.x=g(e,0),this.y=g(t,0)}Xt.fromElements=function(e,t,n){return d(n)?(n.x=e,n.y=t,n):new Xt(e,t)};Xt.clone=function(e,t){if(d(e))return d(t)?(t.x=e.x,t.y=e.y,t):new Xt(e.x,e.y)};Xt.fromCartesian3=Xt.clone;Xt.fromCartesian4=Xt.clone;Xt.packedLength=2;Xt.pack=function(e,t,n){return n=g(n,0),t[n++]=e.x,t[n]=e.y,t};Xt.unpack=function(e,t,n){return t=g(t,0),d(n)||(n=new Xt),n.x=e[t++],n.y=e[t],n};Xt.packArray=function(e,t){let n=e.length,i=n*2;d(t)?!Array.isArray(t)&&t.length!==i||t.length!==i&&(t.length=i):t=new Array(i);for(let o=0;o<n;++o)Xt.pack(e[o],t,o*2);return t};Xt.unpackArray=function(e,t){let n=e.length;d(t)?t.length=n/2:t=new Array(n/2);for(let i=0;i<n;i+=2){let o=i/2;t[o]=Xt.unpack(e,i,t[o])}return t};Xt.fromArray=Xt.unpack;Xt.maximumComponent=function(e){return Math.max(e.x,e.y)};Xt.minimumComponent=function(e){return Math.min(e.x,e.y)};Xt.minimumByComponent=function(e,t,n){return n.x=Math.min(e.x,t.x),n.y=Math.min(e.y,t.y),n};Xt.maximumByComponent=function(e,t,n){return n.x=Math.max(e.x,t.x),n.y=Math.max(e.y,t.y),n};Xt.clamp=function(e,t,n,i){let o=W.clamp(e.x,t.x,n.x),r=W.clamp(e.y,t.y,n.y);return i.x=o,i.y=r,i};Xt.magnitudeSquared=function(e){return e.x*e.x+e.y*e.y};Xt.magnitude=function(e){return Math.sqrt(Xt.magnitudeSquared(e))};var sA=new Xt;Xt.distance=function(e,t){return Xt.subtract(e,t,sA),Xt.magnitude(sA)};Xt.distanceSquared=function(e,t){return Xt.subtract(e,t,sA),Xt.magnitudeSquared(sA)};Xt.normalize=function(e,t){let n=Xt.magnitude(e);return t.x=e.x/n,t.y=e.y/n,t};Xt.dot=function(e,t){return e.x*t.x+e.y*t.y};Xt.cross=function(e,t){return e.x*t.y-e.y*t.x};Xt.multiplyComponents=function(e,t,n){return n.x=e.x*t.x,n.y=e.y*t.y,n};Xt.divideComponents=function(e,t,n){return n.x=e.x/t.x,n.y=e.y/t.y,n};Xt.add=function(e,t,n){return n.x=e.x+t.x,n.y=e.y+t.y,n};Xt.subtract=function(e,t,n){return n.x=e.x-t.x,n.y=e.y-t.y,n};Xt.multiplyByScalar=function(e,t,n){return n.x=e.x*t,n.y=e.y*t,n};Xt.divideByScalar=function(e,t,n){return n.x=e.x/t,n.y=e.y/t,n};Xt.negate=function(e,t){return t.x=-e.x,t.y=-e.y,t};Xt.abs=function(e,t){return t.x=Math.abs(e.x),t.y=Math.abs(e.y),t};var O8=new Xt;Xt.lerp=function(e,t,n,i){return Xt.multiplyByScalar(t,n,O8),i=Xt.multiplyByScalar(e,1-n,i),Xt.add(O8,i,i)};var K8=new Xt,H8=new Xt;Xt.angleBetween=function(e,t){return Xt.normalize(e,K8),Xt.normalize(t,H8),W.acosClamped(Xt.dot(K8,H8))};var F_e=new Xt;Xt.mostOrthogonalAxis=function(e,t){let n=Xt.normalize(e,F_e);return Xt.abs(n,n),n.x<=n.y?t=Xt.clone(Xt.UNIT_X,t):t=Xt.clone(Xt.UNIT_Y,t),t};Xt.equals=function(e,t){return e===t||d(e)&&d(t)&&e.x===t.x&&e.y===t.y};Xt.equalsArray=function(e,t,n){return e.x===t[n]&&e.y===t[n+1]};Xt.equalsEpsilon=function(e,t,n,i){return e===t||d(e)&&d(t)&&W.equalsEpsilon(e.x,t.x,n,i)&&W.equalsEpsilon(e.y,t.y,n,i)};Xt.ZERO=Object.freeze(new Xt(0,0));Xt.ONE=Object.freeze(new Xt(1,1));Xt.UNIT_X=Object.freeze(new Xt(1,0));Xt.UNIT_Y=Object.freeze(new Xt(0,1));Xt.prototype.clone=function(e){return Xt.clone(this,e)};Xt.prototype.equals=function(e){return Xt.equals(this,e)};Xt.prototype.equalsEpsilon=function(e,t,n){return Xt.equalsEpsilon(this,e,t,n)};Xt.prototype.toString=function(){return`(${this.x}, ${this.y})`};var D=Xt;var Fxt=T(S(),1);var Vxt=T(S(),1);function et(e,t,n){this.x=g(e,0),this.y=g(t,0),this.z=g(n,0)}et.fromSpherical=function(e,t){d(t)||(t=new et);let n=e.clock,i=e.cone,o=g(e.magnitude,1),r=o*Math.sin(i);return t.x=r*Math.cos(n),t.y=r*Math.sin(n),t.z=o*Math.cos(i),t};et.fromElements=function(e,t,n,i){return d(i)?(i.x=e,i.y=t,i.z=n,i):new et(e,t,n)};et.clone=function(e,t){if(d(e))return d(t)?(t.x=e.x,t.y=e.y,t.z=e.z,t):new et(e.x,e.y,e.z)};et.fromCartesian4=et.clone;et.packedLength=3;et.pack=function(e,t,n){return n=g(n,0),t[n++]=e.x,t[n++]=e.y,t[n]=e.z,t};et.unpack=function(e,t,n){return t=g(t,0),d(n)||(n=new et),n.x=e[t++],n.y=e[t++],n.z=e[t],n};et.packArray=function(e,t){let n=e.length,i=n*3;d(t)?!Array.isArray(t)&&t.length!==i||t.length!==i&&(t.length=i):t=new Array(i);for(let o=0;o<n;++o)et.pack(e[o],t,o*3);return t};et.unpackArray=function(e,t){let n=e.length;d(t)?t.length=n/3:t=new Array(n/3);for(let i=0;i<n;i+=3){let o=i/3;t[o]=et.unpack(e,i,t[o])}return t};et.fromArray=et.unpack;et.maximumComponent=function(e){return Math.max(e.x,e.y,e.z)};et.minimumComponent=function(e){return Math.min(e.x,e.y,e.z)};et.minimumByComponent=function(e,t,n){return n.x=Math.min(e.x,t.x),n.y=Math.min(e.y,t.y),n.z=Math.min(e.z,t.z),n};et.maximumByComponent=function(e,t,n){return n.x=Math.max(e.x,t.x),n.y=Math.max(e.y,t.y),n.z=Math.max(e.z,t.z),n};et.clamp=function(e,t,n,i){let o=W.clamp(e.x,t.x,n.x),r=W.clamp(e.y,t.y,n.y),s=W.clamp(e.z,t.z,n.z);return i.x=o,i.y=r,i.z=s,i};et.magnitudeSquared=function(e){return e.x*e.x+e.y*e.y+e.z*e.z};et.magnitude=function(e){return Math.sqrt(et.magnitudeSquared(e))};var cA=new et;et.distance=function(e,t){return et.subtract(e,t,cA),et.magnitude(cA)};et.distanceSquared=function(e,t){return et.subtract(e,t,cA),et.magnitudeSquared(cA)};et.normalize=function(e,t){let n=et.magnitude(e);return t.x=e.x/n,t.y=e.y/n,t.z=e.z/n,t};et.dot=function(e,t){return e.x*t.x+e.y*t.y+e.z*t.z};et.multiplyComponents=function(e,t,n){return n.x=e.x*t.x,n.y=e.y*t.y,n.z=e.z*t.z,n};et.divideComponents=function(e,t,n){return n.x=e.x/t.x,n.y=e.y/t.y,n.z=e.z/t.z,n};et.add=function(e,t,n){return n.x=e.x+t.x,n.y=e.y+t.y,n.z=e.z+t.z,n};et.subtract=function(e,t,n){return n.x=e.x-t.x,n.y=e.y-t.y,n.z=e.z-t.z,n};et.multiplyByScalar=function(e,t,n){return n.x=e.x*t,n.y=e.y*t,n.z=e.z*t,n};et.divideByScalar=function(e,t,n){return n.x=e.x/t,n.y=e.y/t,n.z=e.z/t,n};et.negate=function(e,t){return t.x=-e.x,t.y=-e.y,t.z=-e.z,t};et.abs=function(e,t){return t.x=Math.abs(e.x),t.y=Math.abs(e.y),t.z=Math.abs(e.z),t};var z8=new et;et.lerp=function(e,t,n,i){return et.multiplyByScalar(t,n,z8),i=et.multiplyByScalar(e,1-n,i),et.add(z8,i,i)};var aA=new et,zD=new et;et.angleBetween=function(e,t){et.normalize(e,aA),et.normalize(t,zD);let n=et.dot(aA,zD),i=et.magnitude(et.cross(aA,zD,aA));return Math.atan2(i,n)};var A_e=new et;et.mostOrthogonalAxis=function(e,t){let n=et.normalize(e,A_e);return et.abs(n,n),n.x<=n.y?n.x<=n.z?t=et.clone(et.UNIT_X,t):t=et.clone(et.UNIT_Z,t):n.y<=n.z?t=et.clone(et.UNIT_Y,t):t=et.clone(et.UNIT_Z,t),t};et.projectVector=function(e,t,n){let i=et.dot(e,t)/et.dot(t,t);return et.multiplyByScalar(t,i,n)};et.equals=function(e,t){return e===t||d(e)&&d(t)&&e.x===t.x&&e.y===t.y&&e.z===t.z};et.equalsArray=function(e,t,n){return e.x===t[n]&&e.y===t[n+1]&&e.z===t[n+2]};et.equalsEpsilon=function(e,t,n,i){return e===t||d(e)&&d(t)&&W.equalsEpsilon(e.x,t.x,n,i)&&W.equalsEpsilon(e.y,t.y,n,i)&&W.equalsEpsilon(e.z,t.z,n,i)};et.cross=function(e,t,n){let i=e.x,o=e.y,r=e.z,s=t.x,a=t.y,c=t.z,l=o*c-r*a,u=r*s-i*c,m=i*a-o*s;return n.x=l,n.y=u,n.z=m,n};et.midpoint=function(e,t,n){return n.x=(e.x+t.x)*.5,n.y=(e.y+t.y)*.5,n.z=(e.z+t.z)*.5,n};et.fromDegrees=function(e,t,n,i,o){return e=W.toRadians(e),t=W.toRadians(t),et.fromRadians(e,t,n,i,o)};var Bd=new et,zT=new et,M_e=new et(6378137*6378137,6378137*6378137,6356752314245179e-9*6356752314245179e-9);et.fromRadians=function(e,t,n,i,o){n=g(n,0);let r=d(i)?i.radiiSquared:M_e,s=Math.cos(t);Bd.x=s*Math.cos(e),Bd.y=s*Math.sin(e),Bd.z=Math.sin(t),Bd=et.normalize(Bd,Bd),et.multiplyComponents(r,Bd,zT);let a=Math.sqrt(et.dot(Bd,zT));return zT=et.divideByScalar(zT,a,zT),Bd=et.multiplyByScalar(Bd,n,Bd),d(o)||(o=new et),et.add(zT,Bd,o)};et.fromDegreesArray=function(e,t,n){let i=e.length;d(n)?n.length=i/2:n=new Array(i/2);for(let o=0;o<i;o+=2){let r=e[o],s=e[o+1],a=o/2;n[a]=et.fromDegrees(r,s,0,t,n[a])}return n};et.fromRadiansArray=function(e,t,n){let i=e.length;d(n)?n.length=i/2:n=new Array(i/2);for(let o=0;o<i;o+=2){let r=e[o],s=e[o+1],a=o/2;n[a]=et.fromRadians(r,s,0,t,n[a])}return n};et.fromDegreesArrayHeights=function(e,t,n){let i=e.length;d(n)?n.length=i/3:n=new Array(i/3);for(let o=0;o<i;o+=3){let r=e[o],s=e[o+1],a=e[o+2],c=o/3;n[c]=et.fromDegrees(r,s,a,t,n[c])}return n};et.fromRadiansArrayHeights=function(e,t,n){let i=e.length;d(n)?n.length=i/3:n=new Array(i/3);for(let o=0;o<i;o+=3){let r=e[o],s=e[o+1],a=e[o+2],c=o/3;n[c]=et.fromRadians(r,s,a,t,n[c])}return n};et.ZERO=Object.freeze(new et(0,0,0));et.ONE=Object.freeze(new et(1,1,1));et.UNIT_X=Object.freeze(new et(1,0,0));et.UNIT_Y=Object.freeze(new et(0,1,0));et.UNIT_Z=Object.freeze(new et(0,0,1));et.prototype.clone=function(e){return et.clone(this,e)};et.prototype.equals=function(e){return et.equals(this,e)};et.prototype.equalsEpsilon=function(e,t,n){return et.equalsEpsilon(this,e,t,n)};et.prototype.toString=function(){return`(${this.x}, ${this.y}, ${this.z})`};var h=et;var Ext=T(S(),1);var N_e=new h,U_e=new h;function k_e(e,t,n,i,o){let r=e.x,s=e.y,a=e.z,c=t.x,l=t.y,u=t.z,m=r*r*c*c,p=s*s*l*l,y=a*a*u*u,f=m+p+y,x=Math.sqrt(1/f),_=h.multiplyByScalar(e,x,N_e);if(f<i)return isFinite(x)?h.clone(_,o):void 0;let C=n.x,V=n.y,L=n.z,Z=U_e;Z.x=_.x*C*2,Z.y=_.y*V*2,Z.z=_.z*L*2;let G=(1-x)*h.magnitude(e)/(.5*h.magnitude(Z)),X=0,P,v,F,M,b,R,E,I,w,N,B;do{G-=X,F=1/(1+G*C),M=1/(1+G*V),b=1/(1+G*L),R=F*F,E=M*M,I=b*b,w=R*F,N=E*M,B=I*b,P=m*R+p*E+y*I-1,v=m*w*C+p*N*V+y*B*L;let k=-2*v;X=P/k}while(Math.abs(P)>W.EPSILON12);return d(o)?(o.x=r*F,o.y=s*M,o.z=a*b,o):new h(r*F,s*M,a*b)}var Tg=k_e;function Kr(e,t,n){this.longitude=g(e,0),this.latitude=g(t,0),this.height=g(n,0)}Kr.fromRadians=function(e,t,n,i){return n=g(n,0),d(i)?(i.longitude=e,i.latitude=t,i.height=n,i):new Kr(e,t,n)};Kr.fromDegrees=function(e,t,n,i){return e=W.toRadians(e),t=W.toRadians(t),Kr.fromRadians(e,t,n,i)};var D_e=new h,B_e=new h,Y_e=new h,O_e=new h(1/6378137,1/6378137,1/6356752314245179e-9),K_e=new h(1/(6378137*6378137),1/(6378137*6378137),1/(6356752314245179e-9*6356752314245179e-9)),H_e=W.EPSILON1;Kr.fromCartesian=function(e,t,n){let i=d(t)?t.oneOverRadii:O_e,o=d(t)?t.oneOverRadiiSquared:K_e,r=d(t)?t._centerToleranceSquared:H_e,s=Tg(e,i,o,r,B_e);if(!d(s))return;let a=h.multiplyComponents(s,o,D_e);a=h.normalize(a,a);let c=h.subtract(e,s,Y_e),l=Math.atan2(a.y,a.x),u=Math.asin(a.z),m=W.sign(h.dot(c,e))*h.magnitude(c);return d(n)?(n.longitude=l,n.latitude=u,n.height=m,n):new Kr(l,u,m)};Kr.toCartesian=function(e,t,n){return h.fromRadians(e.longitude,e.latitude,e.height,t,n)};Kr.clone=function(e,t){if(d(e))return d(t)?(t.longitude=e.longitude,t.latitude=e.latitude,t.height=e.height,t):new Kr(e.longitude,e.latitude,e.height)};Kr.equals=function(e,t){return e===t||d(e)&&d(t)&&e.longitude===t.longitude&&e.latitude===t.latitude&&e.height===t.height};Kr.equalsEpsilon=function(e,t,n){return n=g(n,0),e===t||d(e)&&d(t)&&Math.abs(e.longitude-t.longitude)<=n&&Math.abs(e.latitude-t.latitude)<=n&&Math.abs(e.height-t.height)<=n};Kr.ZERO=Object.freeze(new Kr(0,0,0));Kr.prototype.clone=function(e){return Kr.clone(this,e)};Kr.prototype.equals=function(e){return Kr.equals(this,e)};Kr.prototype.equalsEpsilon=function(e,t){return Kr.equalsEpsilon(this,e,t)};Kr.prototype.toString=function(){return`(${this.longitude}, ${this.latitude}, ${this.height})`};var he=Kr;var jxt=T(S(),1);var Yxt=T(S(),1);function Q8(e,t,n,i){t=g(t,0),n=g(n,0),i=g(i,0),e._radii=new h(t,n,i),e._radiiSquared=new h(t*t,n*n,i*i),e._radiiToTheFourth=new h(t*t*t*t,n*n*n*n,i*i*i*i),e._oneOverRadii=new h(t===0?0:1/t,n===0?0:1/n,i===0?0:1/i),e._oneOverRadiiSquared=new h(t===0?0:1/(t*t),n===0?0:1/(n*n),i===0?0:1/(i*i)),e._minimumRadius=Math.min(t,n,i),e._maximumRadius=Math.max(t,n,i),e._centerToleranceSquared=W.EPSILON1,e._radiiSquared.z!==0&&(e._squaredXOverSquaredZ=e._radiiSquared.x/e._radiiSquared.z)}function qi(e,t,n){this._radii=void 0,this._radiiSquared=void 0,this._radiiToTheFourth=void 0,this._oneOverRadii=void 0,this._oneOverRadiiSquared=void 0,this._minimumRadius=void 0,this._maximumRadius=void 0,this._centerToleranceSquared=void 0,this._squaredXOverSquaredZ=void 0,Q8(this,e,t,n)}Object.defineProperties(qi.prototype,{radii:{get:function(){return this._radii}},radiiSquared:{get:function(){return this._radiiSquared}},radiiToTheFourth:{get:function(){return this._radiiToTheFourth}},oneOverRadii:{get:function(){return this._oneOverRadii}},oneOverRadiiSquared:{get:function(){return this._oneOverRadiiSquared}},minimumRadius:{get:function(){return this._minimumRadius}},maximumRadius:{get:function(){return this._maximumRadius}}});qi.clone=function(e,t){if(!d(e))return;let n=e._radii;return d(t)?(h.clone(n,t._radii),h.clone(e._radiiSquared,t._radiiSquared),h.clone(e._radiiToTheFourth,t._radiiToTheFourth),h.clone(e._oneOverRadii,t._oneOverRadii),h.clone(e._oneOverRadiiSquared,t._oneOverRadiiSquared),t._minimumRadius=e._minimumRadius,t._maximumRadius=e._maximumRadius,t._centerToleranceSquared=e._centerToleranceSquared,t):new qi(n.x,n.y,n.z)};qi.fromCartesian3=function(e,t){return d(t)||(t=new qi),d(e)&&Q8(t,e.x,e.y,e.z),t};qi.WGS84=Object.freeze(new qi(6378137,6378137,6356752314245179e-9));qi.UNIT_SPHERE=Object.freeze(new qi(1,1,1));qi.MOON=Object.freeze(new qi(W.LUNAR_RADIUS,W.LUNAR_RADIUS,W.LUNAR_RADIUS));qi.prototype.clone=function(e){return qi.clone(this,e)};qi.packedLength=h.packedLength;qi.pack=function(e,t,n){return n=g(n,0),h.pack(e._radii,t,n),t};qi.unpack=function(e,t,n){t=g(t,0);let i=h.unpack(e,t);return qi.fromCartesian3(i,n)};qi.prototype.geocentricSurfaceNormal=h.normalize;qi.prototype.geodeticSurfaceNormalCartographic=function(e,t){let n=e.longitude,i=e.latitude,o=Math.cos(i),r=o*Math.cos(n),s=o*Math.sin(n),a=Math.sin(i);return d(t)||(t=new h),t.x=r,t.y=s,t.z=a,h.normalize(t,t)};qi.prototype.geodeticSurfaceNormal=function(e,t){if(!h.equalsEpsilon(e,h.ZERO,W.EPSILON14))return d(t)||(t=new h),t=h.multiplyComponents(e,this._oneOverRadiiSquared,t),h.normalize(t,t)};var z_e=new h,J_e=new h;qi.prototype.cartographicToCartesian=function(e,t){let n=z_e,i=J_e;this.geodeticSurfaceNormalCartographic(e,n),h.multiplyComponents(this._radiiSquared,n,i);let o=Math.sqrt(h.dot(n,i));return h.divideByScalar(i,o,i),h.multiplyByScalar(n,e.height,n),d(t)||(t=new h),h.add(i,n,t)};qi.prototype.cartographicArrayToCartesianArray=function(e,t){let n=e.length;d(t)?t.length=n:t=new Array(n);for(let i=0;i<n;i++)t[i]=this.cartographicToCartesian(e[i],t[i]);return t};var Q_e=new h,j_e=new h,q_e=new h;qi.prototype.cartesianToCartographic=function(e,t){let n=this.scaleToGeodeticSurface(e,j_e);if(!d(n))return;let i=this.geodeticSurfaceNormal(n,Q_e),o=h.subtract(e,n,q_e),r=Math.atan2(i.y,i.x),s=Math.asin(i.z),a=W.sign(h.dot(o,e))*h.magnitude(o);return d(t)?(t.longitude=r,t.latitude=s,t.height=a,t):new he(r,s,a)};qi.prototype.cartesianArrayToCartographicArray=function(e,t){let n=e.length;d(t)?t.length=n:t=new Array(n);for(let i=0;i<n;++i)t[i]=this.cartesianToCartographic(e[i],t[i]);return t};qi.prototype.scaleToGeodeticSurface=function(e,t){return Tg(e,this._oneOverRadii,this._oneOverRadiiSquared,this._centerToleranceSquared,t)};qi.prototype.scaleToGeocentricSurface=function(e,t){d(t)||(t=new h);let n=e.x,i=e.y,o=e.z,r=this._oneOverRadiiSquared,s=1/Math.sqrt(n*n*r.x+i*i*r.y+o*o*r.z);return h.multiplyByScalar(e,s,t)};qi.prototype.transformPositionToScaledSpace=function(e,t){return d(t)||(t=new h),h.multiplyComponents(e,this._oneOverRadii,t)};qi.prototype.transformPositionFromScaledSpace=function(e,t){return d(t)||(t=new h),h.multiplyComponents(e,this._radii,t)};qi.prototype.equals=function(e){return this===e||d(e)&&h.equals(this._radii,e._radii)};qi.prototype.toString=function(){return this._radii.toString()};qi.prototype.getSurfaceNormalIntersectionWithZAxis=function(e,t,n){t=g(t,0);let i=this._squaredXOverSquaredZ;if(d(n)||(n=new h),n.x=0,n.y=0,n.z=e.z*(1-i),!(Math.abs(n.z)>=this._radii.z-t))return n};var $_e=[.14887433898163,.43339539412925,.67940956829902,.86506336668898,.97390652851717,0],eTe=[.29552422471475,.26926671930999,.21908636251598,.14945134915058,.066671344308684,0];function J8(e,t,n){let i=.5*(t+e),o=.5*(t-e),r=0;for(let s=0;s<5;s++){let a=o*$_e[s];r+=eTe[s]*(n(i+a)+n(i-a))}return r*=o,r}qi.prototype.surfaceArea=function(e){let t=e.west,n=e.east,i=e.south,o=e.north;for(;n<t;)n+=W.TWO_PI;let r=this._radiiSquared,s=r.x,a=r.y,c=r.z,l=s*a;return J8(i,o,function(u){let m=Math.cos(u),p=Math.sin(u);return Math.cos(u)*J8(t,n,function(y){let f=Math.cos(y),x=Math.sin(y);return Math.sqrt(l*p*p+c*(a*f*f+s*x*x)*m*m)})})};var re=qi;function lA(e){this._ellipsoid=g(e,re.WGS84),this._semimajorAxis=this._ellipsoid.maximumRadius,this._oneOverSemimajorAxis=1/this._semimajorAxis}Object.defineProperties(lA.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});lA.prototype.project=function(e,t){let n=this._semimajorAxis,i=e.longitude*n,o=e.latitude*n,r=e.height;return d(t)?(t.x=i,t.y=o,t.z=r,t):new h(i,o,r)};lA.prototype.unproject=function(e,t){let n=this._oneOverSemimajorAxis,i=e.x*n,o=e.y*n,r=e.z;return d(t)?(t.longitude=i,t.latitude=o,t.height=r,t):new he(i,o,r)};var Zi=lA;var $xt=T(S(),1),tTe={OUTSIDE:-1,INTERSECTING:0,INSIDE:1},qt=Object.freeze(tTe);var s_t=T(S(),1);function Nn(e,t,n,i){this.west=g(e,0),this.south=g(t,0),this.east=g(n,0),this.north=g(i,0)}Object.defineProperties(Nn.prototype,{width:{get:function(){return Nn.computeWidth(this)}},height:{get:function(){return Nn.computeHeight(this)}}});Nn.packedLength=4;Nn.pack=function(e,t,n){return n=g(n,0),t[n++]=e.west,t[n++]=e.south,t[n++]=e.east,t[n]=e.north,t};Nn.unpack=function(e,t,n){return t=g(t,0),d(n)||(n=new Nn),n.west=e[t++],n.south=e[t++],n.east=e[t++],n.north=e[t],n};Nn.computeWidth=function(e){let t=e.east,n=e.west;return t<n&&(t+=W.TWO_PI),t-n};Nn.computeHeight=function(e){return e.north-e.south};Nn.fromDegrees=function(e,t,n,i,o){return e=W.toRadians(g(e,0)),t=W.toRadians(g(t,0)),n=W.toRadians(g(n,0)),i=W.toRadians(g(i,0)),d(o)?(o.west=e,o.south=t,o.east=n,o.north=i,o):new Nn(e,t,n,i)};Nn.fromRadians=function(e,t,n,i,o){return d(o)?(o.west=g(e,0),o.south=g(t,0),o.east=g(n,0),o.north=g(i,0),o):new Nn(e,t,n,i)};Nn.fromCartographicArray=function(e,t){let n=Number.MAX_VALUE,i=-Number.MAX_VALUE,o=Number.MAX_VALUE,r=-Number.MAX_VALUE,s=Number.MAX_VALUE,a=-Number.MAX_VALUE;for(let c=0,l=e.length;c<l;c++){let u=e[c];n=Math.min(n,u.longitude),i=Math.max(i,u.longitude),s=Math.min(s,u.latitude),a=Math.max(a,u.latitude);let m=u.longitude>=0?u.longitude:u.longitude+W.TWO_PI;o=Math.min(o,m),r=Math.max(r,m)}return i-n>r-o&&(n=o,i=r,i>W.PI&&(i=i-W.TWO_PI),n>W.PI&&(n=n-W.TWO_PI)),d(t)?(t.west=n,t.south=s,t.east=i,t.north=a,t):new Nn(n,s,i,a)};Nn.fromCartesianArray=function(e,t,n){t=g(t,re.WGS84);let i=Number.MAX_VALUE,o=-Number.MAX_VALUE,r=Number.MAX_VALUE,s=-Number.MAX_VALUE,a=Number.MAX_VALUE,c=-Number.MAX_VALUE;for(let l=0,u=e.length;l<u;l++){let m=t.cartesianToCartographic(e[l]);i=Math.min(i,m.longitude),o=Math.max(o,m.longitude),a=Math.min(a,m.latitude),c=Math.max(c,m.latitude);let p=m.longitude>=0?m.longitude:m.longitude+W.TWO_PI;r=Math.min(r,p),s=Math.max(s,p)}return o-i>s-r&&(i=r,o=s,o>W.PI&&(o=o-W.TWO_PI),i>W.PI&&(i=i-W.TWO_PI)),d(n)?(n.west=i,n.south=a,n.east=o,n.north=c,n):new Nn(i,a,o,c)};Nn.clone=function(e,t){if(d(e))return d(t)?(t.west=e.west,t.south=e.south,t.east=e.east,t.north=e.north,t):new Nn(e.west,e.south,e.east,e.north)};Nn.equalsEpsilon=function(e,t,n){return n=g(n,0),e===t||d(e)&&d(t)&&Math.abs(e.west-t.west)<=n&&Math.abs(e.south-t.south)<=n&&Math.abs(e.east-t.east)<=n&&Math.abs(e.north-t.north)<=n};Nn.prototype.clone=function(e){return Nn.clone(this,e)};Nn.prototype.equals=function(e){return Nn.equals(this,e)};Nn.equals=function(e,t){return e===t||d(e)&&d(t)&&e.west===t.west&&e.south===t.south&&e.east===t.east&&e.north===t.north};Nn.prototype.equalsEpsilon=function(e,t){return Nn.equalsEpsilon(this,e,t)};Nn.validate=function(e){};Nn.southwest=function(e,t){return d(t)?(t.longitude=e.west,t.latitude=e.south,t.height=0,t):new he(e.west,e.south)};Nn.northwest=function(e,t){return d(t)?(t.longitude=e.west,t.latitude=e.north,t.height=0,t):new he(e.west,e.north)};Nn.northeast=function(e,t){return d(t)?(t.longitude=e.east,t.latitude=e.north,t.height=0,t):new he(e.east,e.north)};Nn.southeast=function(e,t){return d(t)?(t.longitude=e.east,t.latitude=e.south,t.height=0,t):new he(e.east,e.south)};Nn.center=function(e,t){let n=e.east,i=e.west;n<i&&(n+=W.TWO_PI);let o=W.negativePiToPi((i+n)*.5),r=(e.south+e.north)*.5;return d(t)?(t.longitude=o,t.latitude=r,t.height=0,t):new he(o,r)};Nn.intersection=function(e,t,n){let i=e.east,o=e.west,r=t.east,s=t.west;i<o&&r>0?i+=W.TWO_PI:r<s&&i>0&&(r+=W.TWO_PI),i<o&&s<0?s+=W.TWO_PI:r<s&&o<0&&(o+=W.TWO_PI);let a=W.negativePiToPi(Math.max(o,s)),c=W.negativePiToPi(Math.min(i,r));if((e.west<e.east||t.west<t.east)&&c<=a)return;let l=Math.max(e.south,t.south),u=Math.min(e.north,t.north);if(!(l>=u))return d(n)?(n.west=a,n.south=l,n.east=c,n.north=u,n):new Nn(a,l,c,u)};Nn.simpleIntersection=function(e,t,n){let i=Math.max(e.west,t.west),o=Math.max(e.south,t.south),r=Math.min(e.east,t.east),s=Math.min(e.north,t.north);if(!(o>=s||i>=r))return d(n)?(n.west=i,n.south=o,n.east=r,n.north=s,n):new Nn(i,o,r,s)};Nn.union=function(e,t,n){d(n)||(n=new Nn);let i=e.east,o=e.west,r=t.east,s=t.west;i<o&&r>0?i+=W.TWO_PI:r<s&&i>0&&(r+=W.TWO_PI),i<o&&s<0?s+=W.TWO_PI:r<s&&o<0&&(o+=W.TWO_PI);let a=W.negativePiToPi(Math.min(o,s)),c=W.negativePiToPi(Math.max(i,r));return n.west=a,n.south=Math.min(e.south,t.south),n.east=c,n.north=Math.max(e.north,t.north),n};Nn.expand=function(e,t,n){return d(n)||(n=new Nn),n.west=Math.min(e.west,t.longitude),n.south=Math.min(e.south,t.latitude),n.east=Math.max(e.east,t.longitude),n.north=Math.max(e.north,t.latitude),n};Nn.contains=function(e,t){let n=t.longitude,i=t.latitude,o=e.west,r=e.east;return r<o&&(r+=W.TWO_PI,n<0&&(n+=W.TWO_PI)),(n>o||W.equalsEpsilon(n,o,W.EPSILON14))&&(n<r||W.equalsEpsilon(n,r,W.EPSILON14))&&i>=e.south&&i<=e.north};var nTe=new he;Nn.subsample=function(e,t,n,i){t=g(t,re.WGS84),n=g(n,0),d(i)||(i=[]);let o=0,r=e.north,s=e.south,a=e.east,c=e.west,l=nTe;l.height=n,l.longitude=c,l.latitude=r,i[o]=t.cartographicToCartesian(l,i[o]),o++,l.longitude=a,i[o]=t.cartographicToCartesian(l,i[o]),o++,l.latitude=s,i[o]=t.cartographicToCartesian(l,i[o]),o++,l.longitude=c,i[o]=t.cartographicToCartesian(l,i[o]),o++,r<0?l.latitude=r:s>0?l.latitude=s:l.latitude=0;for(let u=1;u<8;++u)l.longitude=-Math.PI+u*W.PI_OVER_TWO,Nn.contains(e,l)&&(i[o]=t.cartographicToCartesian(l,i[o]),o++);return l.latitude===0&&(l.longitude=c,i[o]=t.cartographicToCartesian(l,i[o]),o++,l.longitude=a,i[o]=t.cartographicToCartesian(l,i[o]),o++),i.length=o,i};Nn.subsection=function(e,t,n,i,o,r){if(d(r)||(r=new Nn),e.west<=e.east){let a=e.east-e.west;r.west=e.west+t*a,r.east=e.west+i*a}else{let a=W.TWO_PI+e.east-e.west;r.west=W.negativePiToPi(e.west+t*a),r.east=W.negativePiToPi(e.west+i*a)}let s=e.north-e.south;return r.south=e.south+n*s,r.north=e.south+o*s,t===1&&(r.west=e.east),i===1&&(r.east=e.east),n===1&&(r.south=e.north),o===1&&(r.north=e.north),r};Nn.MAX_VALUE=Object.freeze(new Nn(-Math.PI,-W.PI_OVER_TWO,Math.PI,W.PI_OVER_TWO));var de=Nn;function pr(e,t,n,i){this.x=g(e,0),this.y=g(t,0),this.width=g(n,0),this.height=g(i,0)}pr.packedLength=4;pr.pack=function(e,t,n){return n=g(n,0),t[n++]=e.x,t[n++]=e.y,t[n++]=e.width,t[n]=e.height,t};pr.unpack=function(e,t,n){return t=g(t,0),d(n)||(n=new pr),n.x=e[t++],n.y=e[t++],n.width=e[t++],n.height=e[t],n};pr.fromPoints=function(e,t){if(d(t)||(t=new pr),!d(e)||e.length===0)return t.x=0,t.y=0,t.width=0,t.height=0,t;let n=e.length,i=e[0].x,o=e[0].y,r=e[0].x,s=e[0].y;for(let a=1;a<n;a++){let c=e[a],l=c.x,u=c.y;i=Math.min(l,i),r=Math.max(l,r),o=Math.min(u,o),s=Math.max(u,s)}return t.x=i,t.y=o,t.width=r-i,t.height=s-o,t};var iTe=new Zi,oTe=new he,rTe=new he;pr.fromRectangle=function(e,t,n){if(d(n)||(n=new pr),!d(e))return n.x=0,n.y=0,n.width=0,n.height=0,n;t=g(t,iTe);let i=t.project(de.southwest(e,oTe)),o=t.project(de.northeast(e,rTe));return D.subtract(o,i,o),n.x=i.x,n.y=i.y,n.width=o.x,n.height=o.y,n};pr.clone=function(e,t){if(d(e))return d(t)?(t.x=e.x,t.y=e.y,t.width=e.width,t.height=e.height,t):new pr(e.x,e.y,e.width,e.height)};pr.union=function(e,t,n){d(n)||(n=new pr);let i=Math.min(e.x,t.x),o=Math.min(e.y,t.y),r=Math.max(e.x+e.width,t.x+t.width),s=Math.max(e.y+e.height,t.y+t.height);return n.x=i,n.y=o,n.width=r-i,n.height=s-o,n};pr.expand=function(e,t,n){n=pr.clone(e,n);let i=t.x-n.x,o=t.y-n.y;return i>n.width?n.width=i:i<0&&(n.width-=i,n.x=t.x),o>n.height?n.height=o:o<0&&(n.height-=o,n.y=t.y),n};pr.intersect=function(e,t){let n=e.x,i=e.y,o=t.x,r=t.y;return n>o+t.width||n+e.width<o||i+e.height<r||i>r+t.height?qt.OUTSIDE:qt.INTERSECTING};pr.equals=function(e,t){return e===t||d(e)&&d(t)&&e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height};pr.prototype.clone=function(e){return pr.clone(this,e)};pr.prototype.intersect=function(e){return pr.intersect(this,e)};pr.prototype.equals=function(e){return pr.equals(this,e)};var He=pr;var E_t=T(S(),1);var C_t=T(S(),1);var g_t=T(S(),1);var q0,br={requestFullscreen:void 0,exitFullscreen:void 0,fullscreenEnabled:void 0,fullscreenElement:void 0,fullscreenchange:void 0,fullscreenerror:void 0},nl={};Object.defineProperties(nl,{element:{get:function(){if(nl.supportsFullscreen())return document[br.fullscreenElement]}},changeEventName:{get:function(){if(nl.supportsFullscreen())return br.fullscreenchange}},errorEventName:{get:function(){if(nl.supportsFullscreen())return br.fullscreenerror}},enabled:{get:function(){if(nl.supportsFullscreen())return document[br.fullscreenEnabled]}},fullscreen:{get:function(){if(nl.supportsFullscreen())return nl.element!==null}}});nl.supportsFullscreen=function(){if(d(q0))return q0;q0=!1;let e=document.body;if(typeof e.requestFullscreen=="function")return br.requestFullscreen="requestFullscreen",br.exitFullscreen="exitFullscreen",br.fullscreenEnabled="fullscreenEnabled",br.fullscreenElement="fullscreenElement",br.fullscreenchange="fullscreenchange",br.fullscreenerror="fullscreenerror",q0=!0,q0;let t=["webkit","moz","o","ms","khtml"],n;for(let i=0,o=t.length;i<o;++i){let r=t[i];n=`${r}RequestFullscreen`,typeof e[n]=="function"?(br.requestFullscreen=n,q0=!0):(n=`${r}RequestFullScreen`,typeof e[n]=="function"&&(br.requestFullscreen=n,q0=!0)),n=`${r}ExitFullscreen`,typeof document[n]=="function"?br.exitFullscreen=n:(n=`${r}CancelFullScreen`,typeof document[n]=="function"&&(br.exitFullscreen=n)),n=`${r}FullscreenEnabled`,document[n]!==void 0?br.fullscreenEnabled=n:(n=`${r}FullScreenEnabled`,document[n]!==void 0&&(br.fullscreenEnabled=n)),n=`${r}FullscreenElement`,document[n]!==void 0?br.fullscreenElement=n:(n=`${r}FullScreenElement`,document[n]!==void 0&&(br.fullscreenElement=n)),n=`${r}fullscreenchange`,document[`on${n}`]!==void 0&&(r==="ms"&&(n="MSFullscreenChange"),br.fullscreenchange=n),n=`${r}fullscreenerror`,document[`on${n}`]!==void 0&&(r==="ms"&&(n="MSFullscreenError"),br.fullscreenerror=n)}return q0};nl.requestFullscreen=function(e,t){nl.supportsFullscreen()&&e[br.requestFullscreen]({vrDisplay:t})};nl.exitFullscreen=function(){nl.supportsFullscreen()&&document[br.exitFullscreen]()};nl._names=br;var lr=nl;var Wa;typeof navigator<"u"?Wa=navigator:Wa={};function Sg(e){let t=e.split(".");for(let n=0,i=t.length;n<i;++n)t[n]=parseInt(t[n],10);return t}var dA,j8;function eB(){if(!d(dA)&&(dA=!1,!bA())){let e=/ Chrome\/([\.0-9]+)/.exec(Wa.userAgent);e!==null&&(dA=!0,j8=Sg(e[1]))}return dA}function sTe(){return eB()&&j8}var uA,q8;function $8(){if(!d(uA)&&(uA=!1,!eB()&&!bA()&&/ Safari\/[\.0-9]+/.test(Wa.userAgent))){let e=/ Version\/([\.0-9]+)/.exec(Wa.userAgent);e!==null&&(uA=!0,q8=Sg(e[1]))}return uA}function aTe(){return $8()&&q8}var mA,qD;function e7(){if(!d(mA)){mA=!1;let e=/ AppleWebKit\/([\.0-9]+)(\+?)/.exec(Wa.userAgent);e!==null&&(mA=!0,qD=Sg(e[1]),qD.isNightly=!!e[2])}return mA}function cTe(){return e7()&&qD}var jV,$D;function t7(){if(!d(jV)){jV=!1;let e;Wa.appName==="Microsoft Internet Explorer"?(e=/MSIE ([0-9]{1,}[\.0-9]{0,})/.exec(Wa.userAgent),e!==null&&(jV=!0,$D=Sg(e[1]))):Wa.appName==="Netscape"&&(e=/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/.exec(Wa.userAgent),e!==null&&(jV=!0,$D=Sg(e[1])))}return jV}function lTe(){return t7()&&$D}var hA,n7;function bA(){if(!d(hA)){hA=!1;let e=/ Edg\/([\.0-9]+)/.exec(Wa.userAgent);e!==null&&(hA=!0,n7=Sg(e[1]))}return hA}function dTe(){return bA()&&n7}var fA,tB;function yA(){if(!d(fA)){fA=!1;let e=/Firefox\/([\.0-9]+)/.exec(Wa.userAgent);e!==null&&(fA=!0,tB=Sg(e[1]))}return fA}var JD;function uTe(){return d(JD)||(JD=/Windows/i.test(Wa.appVersion)),JD}var QD;function mTe(){return d(QD)||(QD=navigator.platform==="iPhone"||navigator.platform==="iPod"||navigator.platform==="iPad"),QD}function hTe(){return yA()&&tB}var jD;function fTe(){return d(jD)||(jD=!yA()&&typeof PointerEvent<"u"&&(!d(Wa.pointerEnabled)||Wa.pointerEnabled)),jD}var i7,pA;function o7(){if(!d(pA)){let e=document.createElement("canvas");e.setAttribute("style","image-rendering: -moz-crisp-edges;image-rendering: pixelated;");let t=e.style.imageRendering;pA=d(t)&&t!=="",pA&&(i7=t)}return pA}function pTe(){return o7()?i7:void 0}function gc(){return gc._result}gc._promise=void 0;gc._result=void 0;gc.initialize=function(){return d(gc._promise)||(gc._promise=new Promise(e=>{let t=new Image;t.onload=function(){gc._result=t.width>0&&t.height>0,e(gc._result)},t.onerror=function(){gc._result=!1,e(gc._result)},t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA"})),gc._promise};Object.defineProperties(gc,{initialized:{get:function(){return d(gc._result)}}});var JT=[];typeof ArrayBuffer<"u"&&(JT.push(Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array),typeof Uint8ClampedArray<"u"&&JT.push(Uint8ClampedArray),typeof Uint8ClampedArray<"u"&&JT.push(Uint8ClampedArray),typeof BigInt64Array<"u"&&JT.push(BigInt64Array),typeof BigUint64Array<"u"&&JT.push(BigUint64Array));var Yd={isChrome:eB,chromeVersion:sTe,isSafari:$8,safariVersion:aTe,isWebkit:e7,webkitVersion:cTe,isInternetExplorer:t7,internetExplorerVersion:lTe,isEdge:bA,edgeVersion:dTe,isFirefox:yA,firefoxVersion:hTe,isWindows:uTe,isIPadOrIOS:mTe,hardwareConcurrency:g(Wa.hardwareConcurrency,3),supportsPointerEvents:fTe,supportsImageRenderingPixelated:o7,supportsWebP:gc,imageRenderingValue:pTe,typedArrayTypes:JT};Yd.supportsBasis=function(e){return Yd.supportsWebAssembly()&&e.context.supportsBasis};Yd.supportsFullscreen=function(){return lr.supportsFullscreen()};Yd.supportsTypedArrays=function(){return typeof ArrayBuffer<"u"};Yd.supportsBigInt64Array=function(){return typeof BigInt64Array<"u"};Yd.supportsBigUint64Array=function(){return typeof BigUint64Array<"u"};Yd.supportsBigInt=function(){return typeof BigInt<"u"};Yd.supportsWebWorkers=function(){return typeof Worker<"u"};Yd.supportsWebAssembly=function(){return typeof WebAssembly<"u"};Yd.supportsWebgl2=function(e){return e.context.webgl2};Yd.supportsEsmWebWorkers=function(){return!yA()||parseInt(tB)>=114};var Mt=Yd;function nB(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n*6<1?e+(t-e)*6*n:n*2<1?t:n*3<2?e+(t-e)*(2/3-n)*6:e}function oe(e,t,n,i){this.red=g(e,1),this.green=g(t,1),this.blue=g(n,1),this.alpha=g(i,1)}oe.fromCartesian4=function(e,t){return d(t)?(t.red=e.x,t.green=e.y,t.blue=e.z,t.alpha=e.w,t):new oe(e.x,e.y,e.z,e.w)};oe.fromBytes=function(e,t,n,i,o){return e=oe.byteToFloat(g(e,255)),t=oe.byteToFloat(g(t,255)),n=oe.byteToFloat(g(n,255)),i=oe.byteToFloat(g(i,255)),d(o)?(o.red=e,o.green=t,o.blue=n,o.alpha=i,o):new oe(e,t,n,i)};oe.fromAlpha=function(e,t,n){return d(n)?(n.red=e.red,n.green=e.green,n.blue=e.blue,n.alpha=t,n):new oe(e.red,e.green,e.blue,t)};var iB,oB,Yf;Mt.supportsTypedArrays()&&(iB=new ArrayBuffer(4),oB=new Uint32Array(iB),Yf=new Uint8Array(iB));oe.fromRgba=function(e,t){return oB[0]=e,oe.fromBytes(Yf[0],Yf[1],Yf[2],Yf[3],t)};oe.fromHsl=function(e,t,n,i,o){e=g(e,0)%1,t=g(t,0),n=g(n,0),i=g(i,1);let r=n,s=n,a=n;if(t!==0){let c;n<.5?c=n*(1+t):c=n+t-n*t;let l=2*n-c;r=nB(l,c,e+1/3),s=nB(l,c,e),a=nB(l,c,e-1/3)}return d(o)?(o.red=r,o.green=s,o.blue=a,o.alpha=i,o):new oe(r,s,a,i)};oe.fromRandom=function(e,t){e=g(e,g.EMPTY_OBJECT);let n=e.red;if(!d(n)){let s=g(e.minimumRed,0),a=g(e.maximumRed,1);n=s+W.nextRandomNumber()*(a-s)}let i=e.green;if(!d(i)){let s=g(e.minimumGreen,0),a=g(e.maximumGreen,1);i=s+W.nextRandomNumber()*(a-s)}let o=e.blue;if(!d(o)){let s=g(e.minimumBlue,0),a=g(e.maximumBlue,1);o=s+W.nextRandomNumber()*(a-s)}let r=e.alpha;if(!d(r)){let s=g(e.minimumAlpha,0),a=g(e.maximumAlpha,1);r=s+W.nextRandomNumber()*(a-s)}return d(t)?(t.red=n,t.green=i,t.blue=o,t.alpha=r,t):new oe(n,i,o,r)};var bTe=/^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])?$/i,yTe=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i,gTe=/^rgba?\s*\(\s*([0-9.]+%?)\s*[,\s]+\s*([0-9.]+%?)\s*[,\s]+\s*([0-9.]+%?)(?:\s*[,\s/]+\s*([0-9.]+))?\s*\)$/i,xTe=/^hsla?\s*\(\s*([0-9.]+)\s*[,\s]+\s*([0-9.]+%)\s*[,\s]+\s*([0-9.]+%)(?:\s*[,\s/]+\s*([0-9.]+))?\s*\)$/i;oe.fromCssColorString=function(e,t){d(t)||(t=new oe),e=e.trim();let n=oe[e.toUpperCase()];if(d(n))return oe.clone(n,t),t;let i=bTe.exec(e);return i!==null?(t.red=parseInt(i[1],16)/15,t.green=parseInt(i[2],16)/15,t.blue=parseInt(i[3],16)/15,t.alpha=parseInt(g(i[4],"f"),16)/15,t):(i=yTe.exec(e),i!==null?(t.red=parseInt(i[1],16)/255,t.green=parseInt(i[2],16)/255,t.blue=parseInt(i[3],16)/255,t.alpha=parseInt(g(i[4],"ff"),16)/255,t):(i=gTe.exec(e),i!==null?(t.red=parseFloat(i[1])/(i[1].substr(-1)==="%"?100:255),t.green=parseFloat(i[2])/(i[2].substr(-1)==="%"?100:255),t.blue=parseFloat(i[3])/(i[3].substr(-1)==="%"?100:255),t.alpha=parseFloat(g(i[4],"1.0")),t):(i=xTe.exec(e),i!==null?oe.fromHsl(parseFloat(i[1])/360,parseFloat(i[2])/100,parseFloat(i[3])/100,parseFloat(g(i[4],"1.0")),t):(t=void 0,t))))};oe.packedLength=4;oe.pack=function(e,t,n){return n=g(n,0),t[n++]=e.red,t[n++]=e.green,t[n++]=e.blue,t[n]=e.alpha,t};oe.unpack=function(e,t,n){return t=g(t,0),d(n)||(n=new oe),n.red=e[t++],n.green=e[t++],n.blue=e[t++],n.alpha=e[t],n};oe.byteToFloat=function(e){return e/255};oe.floatToByte=function(e){return e===1?255:e*256|0};oe.clone=function(e,t){if(d(e))return d(t)?(t.red=e.red,t.green=e.green,t.blue=e.blue,t.alpha=e.alpha,t):new oe(e.red,e.green,e.blue,e.alpha)};oe.equals=function(e,t){return e===t||d(e)&&d(t)&&e.red===t.red&&e.green===t.green&&e.blue===t.blue&&e.alpha===t.alpha};oe.equalsArray=function(e,t,n){return e.red===t[n]&&e.green===t[n+1]&&e.blue===t[n+2]&&e.alpha===t[n+3]};oe.prototype.clone=function(e){return oe.clone(this,e)};oe.prototype.equals=function(e){return oe.equals(this,e)};oe.prototype.equalsEpsilon=function(e,t){return this===e||d(e)&&Math.abs(this.red-e.red)<=t&&Math.abs(this.green-e.green)<=t&&Math.abs(this.blue-e.blue)<=t&&Math.abs(this.alpha-e.alpha)<=t};oe.prototype.toString=function(){return`(${this.red}, ${this.green}, ${this.blue}, ${this.alpha})`};oe.prototype.toCssColorString=function(){let e=oe.floatToByte(this.red),t=oe.floatToByte(this.green),n=oe.floatToByte(this.blue);return this.alpha===1?`rgb(${e},${t},${n})`:`rgba(${e},${t},${n},${this.alpha})`};oe.prototype.toCssHexString=function(){let e=oe.floatToByte(this.red).toString(16);e.length<2&&(e=`0${e}`);let t=oe.floatToByte(this.green).toString(16);t.length<2&&(t=`0${t}`);let n=oe.floatToByte(this.blue).toString(16);if(n.length<2&&(n=`0${n}`),this.alpha<1){let i=oe.floatToByte(this.alpha).toString(16);return i.length<2&&(i=`0${i}`),`#${e}${t}${n}${i}`}return`#${e}${t}${n}`};oe.prototype.toBytes=function(e){let t=oe.floatToByte(this.red),n=oe.floatToByte(this.green),i=oe.floatToByte(this.blue),o=oe.floatToByte(this.alpha);return d(e)?(e[0]=t,e[1]=n,e[2]=i,e[3]=o,e):[t,n,i,o]};oe.prototype.toRgba=function(){return Yf[0]=oe.floatToByte(this.red),Yf[1]=oe.floatToByte(this.green),Yf[2]=oe.floatToByte(this.blue),Yf[3]=oe.floatToByte(this.alpha),oB[0]};oe.prototype.brighten=function(e,t){return e=1-e,t.red=1-(1-this.red)*e,t.green=1-(1-this.green)*e,t.blue=1-(1-this.blue)*e,t.alpha=this.alpha,t};oe.prototype.darken=function(e,t){return e=1-e,t.red=this.red*e,t.green=this.green*e,t.blue=this.blue*e,t.alpha=this.alpha,t};oe.prototype.withAlpha=function(e,t){return oe.fromAlpha(this,e,t)};oe.add=function(e,t,n){return n.red=e.red+t.red,n.green=e.green+t.green,n.blue=e.blue+t.blue,n.alpha=e.alpha+t.alpha,n};oe.subtract=function(e,t,n){return n.red=e.red-t.red,n.green=e.green-t.green,n.blue=e.blue-t.blue,n.alpha=e.alpha-t.alpha,n};oe.multiply=function(e,t,n){return n.red=e.red*t.red,n.green=e.green*t.green,n.blue=e.blue*t.blue,n.alpha=e.alpha*t.alpha,n};oe.divide=function(e,t,n){return n.red=e.red/t.red,n.green=e.green/t.green,n.blue=e.blue/t.blue,n.alpha=e.alpha/t.alpha,n};oe.mod=function(e,t,n){return n.red=e.red%t.red,n.green=e.green%t.green,n.blue=e.blue%t.blue,n.alpha=e.alpha%t.alpha,n};oe.lerp=function(e,t,n,i){return i.red=W.lerp(e.red,t.red,n),i.green=W.lerp(e.green,t.green,n),i.blue=W.lerp(e.blue,t.blue,n),i.alpha=W.lerp(e.alpha,t.alpha,n),i};oe.multiplyByScalar=function(e,t,n){return n.red=e.red*t,n.green=e.green*t,n.blue=e.blue*t,n.alpha=e.alpha*t,n};oe.divideByScalar=function(e,t,n){return n.red=e.red/t,n.green=e.green/t,n.blue=e.blue/t,n.alpha=e.alpha/t,n};oe.ALICEBLUE=Object.freeze(oe.fromCssColorString("#F0F8FF"));oe.ANTIQUEWHITE=Object.freeze(oe.fromCssColorString("#FAEBD7"));oe.AQUA=Object.freeze(oe.fromCssColorString("#00FFFF"));oe.AQUAMARINE=Object.freeze(oe.fromCssColorString("#7FFFD4"));oe.AZURE=Object.freeze(oe.fromCssColorString("#F0FFFF"));oe.BEIGE=Object.freeze(oe.fromCssColorString("#F5F5DC"));oe.BISQUE=Object.freeze(oe.fromCssColorString("#FFE4C4"));oe.BLACK=Object.freeze(oe.fromCssColorString("#000000"));oe.BLANCHEDALMOND=Object.freeze(oe.fromCssColorString("#FFEBCD"));oe.BLUE=Object.freeze(oe.fromCssColorString("#0000FF"));oe.BLUEVIOLET=Object.freeze(oe.fromCssColorString("#8A2BE2"));oe.BROWN=Object.freeze(oe.fromCssColorString("#A52A2A"));oe.BURLYWOOD=Object.freeze(oe.fromCssColorString("#DEB887"));oe.CADETBLUE=Object.freeze(oe.fromCssColorString("#5F9EA0"));oe.CHARTREUSE=Object.freeze(oe.fromCssColorString("#7FFF00"));oe.CHOCOLATE=Object.freeze(oe.fromCssColorString("#D2691E"));oe.CORAL=Object.freeze(oe.fromCssColorString("#FF7F50"));oe.CORNFLOWERBLUE=Object.freeze(oe.fromCssColorString("#6495ED"));oe.CORNSILK=Object.freeze(oe.fromCssColorString("#FFF8DC"));oe.CRIMSON=Object.freeze(oe.fromCssColorString("#DC143C"));oe.CYAN=Object.freeze(oe.fromCssColorString("#00FFFF"));oe.DARKBLUE=Object.freeze(oe.fromCssColorString("#00008B"));oe.DARKCYAN=Object.freeze(oe.fromCssColorString("#008B8B"));oe.DARKGOLDENROD=Object.freeze(oe.fromCssColorString("#B8860B"));oe.DARKGRAY=Object.freeze(oe.fromCssColorString("#A9A9A9"));oe.DARKGREEN=Object.freeze(oe.fromCssColorString("#006400"));oe.DARKGREY=oe.DARKGRAY;oe.DARKKHAKI=Object.freeze(oe.fromCssColorString("#BDB76B"));oe.DARKMAGENTA=Object.freeze(oe.fromCssColorString("#8B008B"));oe.DARKOLIVEGREEN=Object.freeze(oe.fromCssColorString("#556B2F"));oe.DARKORANGE=Object.freeze(oe.fromCssColorString("#FF8C00"));oe.DARKORCHID=Object.freeze(oe.fromCssColorString("#9932CC"));oe.DARKRED=Object.freeze(oe.fromCssColorString("#8B0000"));oe.DARKSALMON=Object.freeze(oe.fromCssColorString("#E9967A"));oe.DARKSEAGREEN=Object.freeze(oe.fromCssColorString("#8FBC8F"));oe.DARKSLATEBLUE=Object.freeze(oe.fromCssColorString("#483D8B"));oe.DARKSLATEGRAY=Object.freeze(oe.fromCssColorString("#2F4F4F"));oe.DARKSLATEGREY=oe.DARKSLATEGRAY;oe.DARKTURQUOISE=Object.freeze(oe.fromCssColorString("#00CED1"));oe.DARKVIOLET=Object.freeze(oe.fromCssColorString("#9400D3"));oe.DEEPPINK=Object.freeze(oe.fromCssColorString("#FF1493"));oe.DEEPSKYBLUE=Object.freeze(oe.fromCssColorString("#00BFFF"));oe.DIMGRAY=Object.freeze(oe.fromCssColorString("#696969"));oe.DIMGREY=oe.DIMGRAY;oe.DODGERBLUE=Object.freeze(oe.fromCssColorString("#1E90FF"));oe.FIREBRICK=Object.freeze(oe.fromCssColorString("#B22222"));oe.FLORALWHITE=Object.freeze(oe.fromCssColorString("#FFFAF0"));oe.FORESTGREEN=Object.freeze(oe.fromCssColorString("#228B22"));oe.FUCHSIA=Object.freeze(oe.fromCssColorString("#FF00FF"));oe.GAINSBORO=Object.freeze(oe.fromCssColorString("#DCDCDC"));oe.GHOSTWHITE=Object.freeze(oe.fromCssColorString("#F8F8FF"));oe.GOLD=Object.freeze(oe.fromCssColorString("#FFD700"));oe.GOLDENROD=Object.freeze(oe.fromCssColorString("#DAA520"));oe.GRAY=Object.freeze(oe.fromCssColorString("#808080"));oe.GREEN=Object.freeze(oe.fromCssColorString("#008000"));oe.GREENYELLOW=Object.freeze(oe.fromCssColorString("#ADFF2F"));oe.GREY=oe.GRAY;oe.HONEYDEW=Object.freeze(oe.fromCssColorString("#F0FFF0"));oe.HOTPINK=Object.freeze(oe.fromCssColorString("#FF69B4"));oe.INDIANRED=Object.freeze(oe.fromCssColorString("#CD5C5C"));oe.INDIGO=Object.freeze(oe.fromCssColorString("#4B0082"));oe.IVORY=Object.freeze(oe.fromCssColorString("#FFFFF0"));oe.KHAKI=Object.freeze(oe.fromCssColorString("#F0E68C"));oe.LAVENDER=Object.freeze(oe.fromCssColorString("#E6E6FA"));oe.LAVENDAR_BLUSH=Object.freeze(oe.fromCssColorString("#FFF0F5"));oe.LAWNGREEN=Object.freeze(oe.fromCssColorString("#7CFC00"));oe.LEMONCHIFFON=Object.freeze(oe.fromCssColorString("#FFFACD"));oe.LIGHTBLUE=Object.freeze(oe.fromCssColorString("#ADD8E6"));oe.LIGHTCORAL=Object.freeze(oe.fromCssColorString("#F08080"));oe.LIGHTCYAN=Object.freeze(oe.fromCssColorString("#E0FFFF"));oe.LIGHTGOLDENRODYELLOW=Object.freeze(oe.fromCssColorString("#FAFAD2"));oe.LIGHTGRAY=Object.freeze(oe.fromCssColorString("#D3D3D3"));oe.LIGHTGREEN=Object.freeze(oe.fromCssColorString("#90EE90"));oe.LIGHTGREY=oe.LIGHTGRAY;oe.LIGHTPINK=Object.freeze(oe.fromCssColorString("#FFB6C1"));oe.LIGHTSEAGREEN=Object.freeze(oe.fromCssColorString("#20B2AA"));oe.LIGHTSKYBLUE=Object.freeze(oe.fromCssColorString("#87CEFA"));oe.LIGHTSLATEGRAY=Object.freeze(oe.fromCssColorString("#778899"));oe.LIGHTSLATEGREY=oe.LIGHTSLATEGRAY;oe.LIGHTSTEELBLUE=Object.freeze(oe.fromCssColorString("#B0C4DE"));oe.LIGHTYELLOW=Object.freeze(oe.fromCssColorString("#FFFFE0"));oe.LIME=Object.freeze(oe.fromCssColorString("#00FF00"));oe.LIMEGREEN=Object.freeze(oe.fromCssColorString("#32CD32"));oe.LINEN=Object.freeze(oe.fromCssColorString("#FAF0E6"));oe.MAGENTA=Object.freeze(oe.fromCssColorString("#FF00FF"));oe.MAROON=Object.freeze(oe.fromCssColorString("#800000"));oe.MEDIUMAQUAMARINE=Object.freeze(oe.fromCssColorString("#66CDAA"));oe.MEDIUMBLUE=Object.freeze(oe.fromCssColorString("#0000CD"));oe.MEDIUMORCHID=Object.freeze(oe.fromCssColorString("#BA55D3"));oe.MEDIUMPURPLE=Object.freeze(oe.fromCssColorString("#9370DB"));oe.MEDIUMSEAGREEN=Object.freeze(oe.fromCssColorString("#3CB371"));oe.MEDIUMSLATEBLUE=Object.freeze(oe.fromCssColorString("#7B68EE"));oe.MEDIUMSPRINGGREEN=Object.freeze(oe.fromCssColorString("#00FA9A"));oe.MEDIUMTURQUOISE=Object.freeze(oe.fromCssColorString("#48D1CC"));oe.MEDIUMVIOLETRED=Object.freeze(oe.fromCssColorString("#C71585"));oe.MIDNIGHTBLUE=Object.freeze(oe.fromCssColorString("#191970"));oe.MINTCREAM=Object.freeze(oe.fromCssColorString("#F5FFFA"));oe.MISTYROSE=Object.freeze(oe.fromCssColorString("#FFE4E1"));oe.MOCCASIN=Object.freeze(oe.fromCssColorString("#FFE4B5"));oe.NAVAJOWHITE=Object.freeze(oe.fromCssColorString("#FFDEAD"));oe.NAVY=Object.freeze(oe.fromCssColorString("#000080"));oe.OLDLACE=Object.freeze(oe.fromCssColorString("#FDF5E6"));oe.OLIVE=Object.freeze(oe.fromCssColorString("#808000"));oe.OLIVEDRAB=Object.freeze(oe.fromCssColorString("#6B8E23"));oe.ORANGE=Object.freeze(oe.fromCssColorString("#FFA500"));oe.ORANGERED=Object.freeze(oe.fromCssColorString("#FF4500"));oe.ORCHID=Object.freeze(oe.fromCssColorString("#DA70D6"));oe.PALEGOLDENROD=Object.freeze(oe.fromCssColorString("#EEE8AA"));oe.PALEGREEN=Object.freeze(oe.fromCssColorString("#98FB98"));oe.PALETURQUOISE=Object.freeze(oe.fromCssColorString("#AFEEEE"));oe.PALEVIOLETRED=Object.freeze(oe.fromCssColorString("#DB7093"));oe.PAPAYAWHIP=Object.freeze(oe.fromCssColorString("#FFEFD5"));oe.PEACHPUFF=Object.freeze(oe.fromCssColorString("#FFDAB9"));oe.PERU=Object.freeze(oe.fromCssColorString("#CD853F"));oe.PINK=Object.freeze(oe.fromCssColorString("#FFC0CB"));oe.PLUM=Object.freeze(oe.fromCssColorString("#DDA0DD"));oe.POWDERBLUE=Object.freeze(oe.fromCssColorString("#B0E0E6"));oe.PURPLE=Object.freeze(oe.fromCssColorString("#800080"));oe.RED=Object.freeze(oe.fromCssColorString("#FF0000"));oe.ROSYBROWN=Object.freeze(oe.fromCssColorString("#BC8F8F"));oe.ROYALBLUE=Object.freeze(oe.fromCssColorString("#4169E1"));oe.SADDLEBROWN=Object.freeze(oe.fromCssColorString("#8B4513"));oe.SALMON=Object.freeze(oe.fromCssColorString("#FA8072"));oe.SANDYBROWN=Object.freeze(oe.fromCssColorString("#F4A460"));oe.SEAGREEN=Object.freeze(oe.fromCssColorString("#2E8B57"));oe.SEASHELL=Object.freeze(oe.fromCssColorString("#FFF5EE"));oe.SIENNA=Object.freeze(oe.fromCssColorString("#A0522D"));oe.SILVER=Object.freeze(oe.fromCssColorString("#C0C0C0"));oe.SKYBLUE=Object.freeze(oe.fromCssColorString("#87CEEB"));oe.SLATEBLUE=Object.freeze(oe.fromCssColorString("#6A5ACD"));oe.SLATEGRAY=Object.freeze(oe.fromCssColorString("#708090"));oe.SLATEGREY=oe.SLATEGRAY;oe.SNOW=Object.freeze(oe.fromCssColorString("#FFFAFA"));oe.SPRINGGREEN=Object.freeze(oe.fromCssColorString("#00FF7F"));oe.STEELBLUE=Object.freeze(oe.fromCssColorString("#4682B4"));oe.TAN=Object.freeze(oe.fromCssColorString("#D2B48C"));oe.TEAL=Object.freeze(oe.fromCssColorString("#008080"));oe.THISTLE=Object.freeze(oe.fromCssColorString("#D8BFD8"));oe.TOMATO=Object.freeze(oe.fromCssColorString("#FF6347"));oe.TURQUOISE=Object.freeze(oe.fromCssColorString("#40E0D0"));oe.VIOLET=Object.freeze(oe.fromCssColorString("#EE82EE"));oe.WHEAT=Object.freeze(oe.fromCssColorString("#F5DEB3"));oe.WHITE=Object.freeze(oe.fromCssColorString("#FFFFFF"));oe.WHITESMOKE=Object.freeze(oe.fromCssColorString("#F5F5F5"));oe.YELLOW=Object.freeze(oe.fromCssColorString("#FFFF00"));oe.YELLOWGREEN=Object.freeze(oe.fromCssColorString("#9ACD32"));oe.TRANSPARENT=Object.freeze(new oe(0,0,0,0));var Y=oe;var W_t=T(S(),1);function _Te(){return!0}function TTe(e,t){t=g(t,"This object was destroyed, i.e., destroy() was called.");function n(){}for(let i in e)typeof e[i]=="function"&&(e[i]=n);e.isDestroyed=_Te}var ue=TTe;var F_t=T(S(),1);function Dl(e,t){e=g(e,0),this._near=e,t=g(t,Number.MAX_VALUE),this._far=t}Object.defineProperties(Dl.prototype,{near:{get:function(){return this._near},set:function(e){this._near=e}},far:{get:function(){return this._far},set:function(e){this._far=e}}});Dl.packedLength=2;Dl.pack=function(e,t,n){return n=g(n,0),t[n++]=e.near,t[n]=e.far,t};Dl.unpack=function(e,t,n){return t=g(t,0),d(n)||(n=new Dl),n.near=e[t++],n.far=e[t],n};Dl.equals=function(e,t){return e===t||d(e)&&d(t)&&e.near===t.near&&e.far===t.far};Dl.clone=function(e,t){if(d(e))return d(t)||(t=new Dl),t.near=e.near,t.far=e.far,t};Dl.prototype.clone=function(e){return Dl.clone(this,e)};Dl.prototype.equals=function(e){return Dl.equals(this,e)};var Gt=Dl;var U_t=T(S(),1);function Od(e,t,n,i){this.near=g(e,0),this.nearValue=g(t,0),this.far=g(n,1),this.farValue=g(i,0)}Od.clone=function(e,t){if(d(e))return d(t)?(t.near=e.near,t.nearValue=e.nearValue,t.far=e.far,t.farValue=e.farValue,t):new Od(e.near,e.nearValue,e.far,e.farValue)};Od.packedLength=4;Od.pack=function(e,t,n){return n=g(n,0),t[n++]=e.near,t[n++]=e.nearValue,t[n++]=e.far,t[n]=e.farValue,t};Od.unpack=function(e,t,n){return t=g(t,0),d(n)||(n=new Od),n.near=e[t++],n.nearValue=e[t++],n.far=e[t++],n.farValue=e[t],n};Od.equals=function(e,t){return e===t||d(e)&&d(t)&&e.near===t.near&&e.nearValue===t.nearValue&&e.far===t.far&&e.farValue===t.farValue};Od.prototype.clone=function(e){return Od.clone(this,e)};Od.prototype.equals=function(e){return Od.equals(this,e)};var It=Od;var D_t=T(S(),1),STe={NONE:0,CLAMP_TO_GROUND:1,RELATIVE_TO_GROUND:2},Oe=Object.freeze(STe);var Y_t=T(S(),1),CTe={CENTER:0,LEFT:1,RIGHT:-1},pi=Object.freeze(CTe);var K_t=T(S(),1),VTe={CENTER:0,BOTTOM:1,BASELINE:2,TOP:-1},In=Object.freeze(VTe);var z_t=T(S(),1),LTe={DONE:0,PENDING:1,FAILED:2},lt=Object.freeze(LTe);var $_t=T(S(),1);function em(){fe.throwInstantiationError()}Object.defineProperties(em.prototype,{isConstant:{get:fe.throwInstantiationError},definitionChanged:{get:fe.throwInstantiationError}});em.prototype.getValue=fe.throwInstantiationError;em.prototype.equals=fe.throwInstantiationError;em.equals=function(e,t){return e===t||d(e)&&e.equals(t)};em.arrayEquals=function(e,t){if(e===t)return!0;if(!d(e)||!d(t)||e.length!==t.length)return!1;let n=e.length;for(let i=0;i<n;i++)if(!em.equals(e[i],t[i]))return!1;return!0};em.isConstant=function(e){return!d(e)||e.isConstant};em.getValueOrUndefined=function(e,t,n){return d(e)?e.getValue(t,n):void 0};em.getValueOrDefault=function(e,t,n,i){return d(e)?g(e.getValue(t,i),n):n};em.getValueOrClonedDefault=function(e,t,n,i){let o;return d(e)&&(o=e.getValue(t,i)),d(o)||(o=n.clone(o)),o};var H=em;var RTe=Y.WHITE,ZTe=h.ZERO,GTe=Oe.NONE,ETe=D.ZERO,XTe=1,ITe=0,WTe=h.ZERO,PTe=pi.CENTER,vTe=In.CENTER,wTe=!1,FTe=new h,ATe=new Y,MTe=new h,NTe=new D,UTe=new It,kTe=new It,DTe=new It,BTe=new He,YTe=new Gt;function r7(e){this.entity=e,this.billboard=void 0,this.textureValue=void 0}function $0(e,t){t.collectionChanged.addEventListener($0.prototype._onCollectionChanged,this),this._cluster=e,this._entityCollection=t,this._items=new Tt,this._onCollectionChanged(t,t.values,[],[])}$0.prototype.update=function(e){let t=this._items.values,n=this._cluster;for(let i=0,o=t.length;i<o;i++){let r=t[i],s=r.entity,a=s._billboard,c,l=r.billboard,u=s.isShowing&&s.isAvailable(e)&&H.getValueOrDefault(a._show,e,!0),m;if(u&&(m=H.getValueOrUndefined(s._position,e,FTe),c=H.getValueOrUndefined(a._image,e),u=d(m)&&d(c)),!u){rB(r,s,n);continue}H.isConstant(s._position)||(n._clusterDirty=!0),d(l)||(l=n.getBillboard(s),l.id=s,l.image=void 0,r.billboard=l),l.show=u,(!d(l.image)||r.textureValue!==c)&&(l.image=c,r.textureValue=c),l.position=m,l.color=H.getValueOrDefault(a._color,e,RTe,ATe),l.eyeOffset=H.getValueOrDefault(a._eyeOffset,e,ZTe,MTe),l.heightReference=H.getValueOrDefault(a._heightReference,e,GTe),l.pixelOffset=H.getValueOrDefault(a._pixelOffset,e,ETe,NTe),l.scale=H.getValueOrDefault(a._scale,e,XTe),l.rotation=H.getValueOrDefault(a._rotation,e,ITe),l.alignedAxis=H.getValueOrDefault(a._alignedAxis,e,WTe),l.horizontalOrigin=H.getValueOrDefault(a._horizontalOrigin,e,PTe),l.verticalOrigin=H.getValueOrDefault(a._verticalOrigin,e,vTe),l.width=H.getValueOrUndefined(a._width,e),l.height=H.getValueOrUndefined(a._height,e),l.scaleByDistance=H.getValueOrUndefined(a._scaleByDistance,e,UTe),l.translucencyByDistance=H.getValueOrUndefined(a._translucencyByDistance,e,kTe),l.pixelOffsetScaleByDistance=H.getValueOrUndefined(a._pixelOffsetScaleByDistance,e,DTe),l.sizeInMeters=H.getValueOrDefault(a._sizeInMeters,e,wTe),l.distanceDisplayCondition=H.getValueOrUndefined(a._distanceDisplayCondition,e,YTe),l.disableDepthTestDistance=H.getValueOrUndefined(a._disableDepthTestDistance,e);let p=H.getValueOrUndefined(a._imageSubRegion,e,BTe);d(p)&&l.setImageSubRegion(l._imageId,p)}return!0};$0.prototype.getBoundingSphere=function(e,t){let n=this._items.get(e.id);if(!d(n)||!d(n.billboard))return lt.FAILED;let i=n.billboard;if(i.heightReference===Oe.NONE)t.center=h.clone(i.position,t.center);else{if(!d(i._clampedPosition))return lt.PENDING;t.center=h.clone(i._clampedPosition,t.center)}return t.radius=0,lt.DONE};$0.prototype.isDestroyed=function(){return!1};$0.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener($0.prototype._onCollectionChanged,this);let e=this._entityCollection.values;for(let t=0;t<e.length;t++)this._cluster.removeBillboard(e[t]);return ue(this)};$0.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s=this._items,a=this._cluster;for(o=t.length-1;o>-1;o--)r=t[o],d(r._billboard)&&d(r._position)&&s.set(r.id,new r7(r));for(o=i.length-1;o>-1;o--)r=i[o],d(r._billboard)&&d(r._position)?s.contains(r.id)||s.set(r.id,new r7(r)):(rB(s.get(r.id),r,a),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],rB(s.get(r.id),r,a),s.remove(r.id)};function rB(e,t,n){d(e)&&(e.billboard=void 0,n.removeBillboard(t))}var qV=$0;var yJt=T(S(),1);var GLt=T(S(),1);var tSt=T(S(),1);var gTt=T(S(),1);function OTe(e,t){this.start=g(e,0),this.stop=g(t,0)}var xc=OTe;var VTt=T(S(),1);function tt(e,t,n,i,o,r,s,a,c){this[0]=g(e,0),this[1]=g(i,0),this[2]=g(s,0),this[3]=g(t,0),this[4]=g(o,0),this[5]=g(a,0),this[6]=g(n,0),this[7]=g(r,0),this[8]=g(c,0)}tt.packedLength=9;tt.pack=function(e,t,n){return n=g(n,0),t[n++]=e[0],t[n++]=e[1],t[n++]=e[2],t[n++]=e[3],t[n++]=e[4],t[n++]=e[5],t[n++]=e[6],t[n++]=e[7],t[n++]=e[8],t};tt.unpack=function(e,t,n){return t=g(t,0),d(n)||(n=new tt),n[0]=e[t++],n[1]=e[t++],n[2]=e[t++],n[3]=e[t++],n[4]=e[t++],n[5]=e[t++],n[6]=e[t++],n[7]=e[t++],n[8]=e[t++],n};tt.packArray=function(e,t){let n=e.length,i=n*9;d(t)?!Array.isArray(t)&&t.length!==i||t.length!==i&&(t.length=i):t=new Array(i);for(let o=0;o<n;++o)tt.pack(e[o],t,o*9);return t};tt.unpackArray=function(e,t){let n=e.length;d(t)?t.length=n/9:t=new Array(n/9);for(let i=0;i<n;i+=9){let o=i/9;t[o]=tt.unpack(e,i,t[o])}return t};tt.clone=function(e,t){if(d(e))return d(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t):new tt(e[0],e[3],e[6],e[1],e[4],e[7],e[2],e[5],e[8])};tt.fromArray=tt.unpack;tt.fromColumnMajorArray=function(e,t){return tt.clone(e,t)};tt.fromRowMajorArray=function(e,t){return d(t)?(t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],t):new tt(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8])};tt.fromQuaternion=function(e,t){let n=e.x*e.x,i=e.x*e.y,o=e.x*e.z,r=e.x*e.w,s=e.y*e.y,a=e.y*e.z,c=e.y*e.w,l=e.z*e.z,u=e.z*e.w,m=e.w*e.w,p=n-s-l+m,y=2*(i-u),f=2*(o+c),x=2*(i+u),_=-n+s-l+m,C=2*(a-r),V=2*(o-c),L=2*(a+r),Z=-n-s+l+m;return d(t)?(t[0]=p,t[1]=x,t[2]=V,t[3]=y,t[4]=_,t[5]=L,t[6]=f,t[7]=C,t[8]=Z,t):new tt(p,y,f,x,_,C,V,L,Z)};tt.fromHeadingPitchRoll=function(e,t){let n=Math.cos(-e.pitch),i=Math.cos(-e.heading),o=Math.cos(e.roll),r=Math.sin(-e.pitch),s=Math.sin(-e.heading),a=Math.sin(e.roll),c=n*i,l=-o*s+a*r*i,u=a*s+o*r*i,m=n*s,p=o*i+a*r*s,y=-a*i+o*r*s,f=-r,x=a*n,_=o*n;return d(t)?(t[0]=c,t[1]=m,t[2]=f,t[3]=l,t[4]=p,t[5]=x,t[6]=u,t[7]=y,t[8]=_,t):new tt(c,l,u,m,p,y,f,x,_)};tt.fromScale=function(e,t){return d(t)?(t[0]=e.x,t[1]=0,t[2]=0,t[3]=0,t[4]=e.y,t[5]=0,t[6]=0,t[7]=0,t[8]=e.z,t):new tt(e.x,0,0,0,e.y,0,0,0,e.z)};tt.fromUniformScale=function(e,t){return d(t)?(t[0]=e,t[1]=0,t[2]=0,t[3]=0,t[4]=e,t[5]=0,t[6]=0,t[7]=0,t[8]=e,t):new tt(e,0,0,0,e,0,0,0,e)};tt.fromCrossProduct=function(e,t){return d(t)?(t[0]=0,t[1]=e.z,t[2]=-e.y,t[3]=-e.z,t[4]=0,t[5]=e.x,t[6]=e.y,t[7]=-e.x,t[8]=0,t):new tt(0,-e.z,e.y,e.z,0,-e.x,-e.y,e.x,0)};tt.fromRotationX=function(e,t){let n=Math.cos(e),i=Math.sin(e);return d(t)?(t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=n,t[5]=i,t[6]=0,t[7]=-i,t[8]=n,t):new tt(1,0,0,0,n,-i,0,i,n)};tt.fromRotationY=function(e,t){let n=Math.cos(e),i=Math.sin(e);return d(t)?(t[0]=n,t[1]=0,t[2]=-i,t[3]=0,t[4]=1,t[5]=0,t[6]=i,t[7]=0,t[8]=n,t):new tt(n,0,i,0,1,0,-i,0,n)};tt.fromRotationZ=function(e,t){let n=Math.cos(e),i=Math.sin(e);return d(t)?(t[0]=n,t[1]=i,t[2]=0,t[3]=-i,t[4]=n,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t):new tt(n,-i,0,i,n,0,0,0,1)};tt.toArray=function(e,t){return d(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t):[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8]]};tt.getElementIndex=function(e,t){return e*3+t};tt.getColumn=function(e,t,n){let i=t*3,o=e[i],r=e[i+1],s=e[i+2];return n.x=o,n.y=r,n.z=s,n};tt.setColumn=function(e,t,n,i){i=tt.clone(e,i);let o=t*3;return i[o]=n.x,i[o+1]=n.y,i[o+2]=n.z,i};tt.getRow=function(e,t,n){let i=e[t],o=e[t+3],r=e[t+6];return n.x=i,n.y=o,n.z=r,n};tt.setRow=function(e,t,n,i){return i=tt.clone(e,i),i[t]=n.x,i[t+3]=n.y,i[t+6]=n.z,i};var KTe=new h;tt.setScale=function(e,t,n){let i=tt.getScale(e,KTe),o=t.x/i.x,r=t.y/i.y,s=t.z/i.z;return n[0]=e[0]*o,n[1]=e[1]*o,n[2]=e[2]*o,n[3]=e[3]*r,n[4]=e[4]*r,n[5]=e[5]*r,n[6]=e[6]*s,n[7]=e[7]*s,n[8]=e[8]*s,n};var HTe=new h;tt.setUniformScale=function(e,t,n){let i=tt.getScale(e,HTe),o=t/i.x,r=t/i.y,s=t/i.z;return n[0]=e[0]*o,n[1]=e[1]*o,n[2]=e[2]*o,n[3]=e[3]*r,n[4]=e[4]*r,n[5]=e[5]*r,n[6]=e[6]*s,n[7]=e[7]*s,n[8]=e[8]*s,n};var sB=new h;tt.getScale=function(e,t){return t.x=h.magnitude(h.fromElements(e[0],e[1],e[2],sB)),t.y=h.magnitude(h.fromElements(e[3],e[4],e[5],sB)),t.z=h.magnitude(h.fromElements(e[6],e[7],e[8],sB)),t};var s7=new h;tt.getMaximumScale=function(e){return tt.getScale(e,s7),h.maximumComponent(s7)};var zTe=new h;tt.setRotation=function(e,t,n){let i=tt.getScale(e,zTe);return n[0]=t[0]*i.x,n[1]=t[1]*i.x,n[2]=t[2]*i.x,n[3]=t[3]*i.y,n[4]=t[4]*i.y,n[5]=t[5]*i.y,n[6]=t[6]*i.z,n[7]=t[7]*i.z,n[8]=t[8]*i.z,n};var JTe=new h;tt.getRotation=function(e,t){let n=tt.getScale(e,JTe);return t[0]=e[0]/n.x,t[1]=e[1]/n.x,t[2]=e[2]/n.x,t[3]=e[3]/n.y,t[4]=e[4]/n.y,t[5]=e[5]/n.y,t[6]=e[6]/n.z,t[7]=e[7]/n.z,t[8]=e[8]/n.z,t};tt.multiply=function(e,t,n){let i=e[0]*t[0]+e[3]*t[1]+e[6]*t[2],o=e[1]*t[0]+e[4]*t[1]+e[7]*t[2],r=e[2]*t[0]+e[5]*t[1]+e[8]*t[2],s=e[0]*t[3]+e[3]*t[4]+e[6]*t[5],a=e[1]*t[3]+e[4]*t[4]+e[7]*t[5],c=e[2]*t[3]+e[5]*t[4]+e[8]*t[5],l=e[0]*t[6]+e[3]*t[7]+e[6]*t[8],u=e[1]*t[6]+e[4]*t[7]+e[7]*t[8],m=e[2]*t[6]+e[5]*t[7]+e[8]*t[8];return n[0]=i,n[1]=o,n[2]=r,n[3]=s,n[4]=a,n[5]=c,n[6]=l,n[7]=u,n[8]=m,n};tt.add=function(e,t,n){return n[0]=e[0]+t[0],n[1]=e[1]+t[1],n[2]=e[2]+t[2],n[3]=e[3]+t[3],n[4]=e[4]+t[4],n[5]=e[5]+t[5],n[6]=e[6]+t[6],n[7]=e[7]+t[7],n[8]=e[8]+t[8],n};tt.subtract=function(e,t,n){return n[0]=e[0]-t[0],n[1]=e[1]-t[1],n[2]=e[2]-t[2],n[3]=e[3]-t[3],n[4]=e[4]-t[4],n[5]=e[5]-t[5],n[6]=e[6]-t[6],n[7]=e[7]-t[7],n[8]=e[8]-t[8],n};tt.multiplyByVector=function(e,t,n){let i=t.x,o=t.y,r=t.z,s=e[0]*i+e[3]*o+e[6]*r,a=e[1]*i+e[4]*o+e[7]*r,c=e[2]*i+e[5]*o+e[8]*r;return n.x=s,n.y=a,n.z=c,n};tt.multiplyByScalar=function(e,t,n){return n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3]*t,n[4]=e[4]*t,n[5]=e[5]*t,n[6]=e[6]*t,n[7]=e[7]*t,n[8]=e[8]*t,n};tt.multiplyByScale=function(e,t,n){return n[0]=e[0]*t.x,n[1]=e[1]*t.x,n[2]=e[2]*t.x,n[3]=e[3]*t.y,n[4]=e[4]*t.y,n[5]=e[5]*t.y,n[6]=e[6]*t.z,n[7]=e[7]*t.z,n[8]=e[8]*t.z,n};tt.multiplyByUniformScale=function(e,t,n){return n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3]*t,n[4]=e[4]*t,n[5]=e[5]*t,n[6]=e[6]*t,n[7]=e[7]*t,n[8]=e[8]*t,n};tt.negate=function(e,t){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t[4]=-e[4],t[5]=-e[5],t[6]=-e[6],t[7]=-e[7],t[8]=-e[8],t};tt.transpose=function(e,t){let n=e[0],i=e[3],o=e[6],r=e[1],s=e[4],a=e[7],c=e[2],l=e[5],u=e[8];return t[0]=n,t[1]=i,t[2]=o,t[3]=r,t[4]=s,t[5]=a,t[6]=c,t[7]=l,t[8]=u,t};function QTe(e){let t=0;for(let n=0;n<9;++n){let i=e[n];t+=i*i}return Math.sqrt(t)}var aB=[1,0,0],cB=[2,2,1];function jTe(e){let t=0;for(let n=0;n<3;++n){let i=e[tt.getElementIndex(cB[n],aB[n])];t+=2*i*i}return Math.sqrt(t)}function qTe(e,t){let n=W.EPSILON15,i=0,o=1;for(let l=0;l<3;++l){let u=Math.abs(e[tt.getElementIndex(cB[l],aB[l])]);u>i&&(o=l,i=u)}let r=1,s=0,a=aB[o],c=cB[o];if(Math.abs(e[tt.getElementIndex(c,a)])>n){let l=e[tt.getElementIndex(c,c)],u=e[tt.getElementIndex(a,a)],m=e[tt.getElementIndex(c,a)],p=(l-u)/2/m,y;p<0?y=-1/(-p+Math.sqrt(1+p*p)):y=1/(p+Math.sqrt(1+p*p)),r=1/Math.sqrt(1+y*y),s=y*r}return t=tt.clone(tt.IDENTITY,t),t[tt.getElementIndex(a,a)]=t[tt.getElementIndex(c,c)]=r,t[tt.getElementIndex(c,a)]=s,t[tt.getElementIndex(a,c)]=-s,t}var gA=new tt,a7=new tt;tt.computeEigenDecomposition=function(e,t){let n=W.EPSILON20,i=10,o=0,r=0;d(t)||(t={});let s=t.unitary=tt.clone(tt.IDENTITY,t.unitary),a=t.diagonal=tt.clone(e,t.diagonal),c=n*QTe(a);for(;r<i&&jTe(a)>c;)qTe(a,gA),tt.transpose(gA,a7),tt.multiply(a,gA,a),tt.multiply(a7,a,a),tt.multiply(s,gA,s),++o>2&&(++r,o=0);return t};tt.abs=function(e,t){return t[0]=Math.abs(e[0]),t[1]=Math.abs(e[1]),t[2]=Math.abs(e[2]),t[3]=Math.abs(e[3]),t[4]=Math.abs(e[4]),t[5]=Math.abs(e[5]),t[6]=Math.abs(e[6]),t[7]=Math.abs(e[7]),t[8]=Math.abs(e[8]),t};tt.determinant=function(e){let t=e[0],n=e[3],i=e[6],o=e[1],r=e[4],s=e[7],a=e[2],c=e[5],l=e[8];return t*(r*l-c*s)+o*(c*i-n*l)+a*(n*s-r*i)};tt.inverse=function(e,t){let n=e[0],i=e[1],o=e[2],r=e[3],s=e[4],a=e[5],c=e[6],l=e[7],u=e[8],m=tt.determinant(e);t[0]=s*u-l*a,t[1]=l*o-i*u,t[2]=i*a-s*o,t[3]=c*a-r*u,t[4]=n*u-c*o,t[5]=r*o-n*a,t[6]=r*l-c*s,t[7]=c*i-n*l,t[8]=n*s-r*i;let p=1/m;return tt.multiplyByScalar(t,p,t)};var $Te=new tt;tt.inverseTranspose=function(e,t){return tt.inverse(tt.transpose(e,$Te),t)};tt.equals=function(e,t){return e===t||d(e)&&d(t)&&e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]};tt.equalsEpsilon=function(e,t,n){return n=g(n,0),e===t||d(e)&&d(t)&&Math.abs(e[0]-t[0])<=n&&Math.abs(e[1]-t[1])<=n&&Math.abs(e[2]-t[2])<=n&&Math.abs(e[3]-t[3])<=n&&Math.abs(e[4]-t[4])<=n&&Math.abs(e[5]-t[5])<=n&&Math.abs(e[6]-t[6])<=n&&Math.abs(e[7]-t[7])<=n&&Math.abs(e[8]-t[8])<=n};tt.IDENTITY=Object.freeze(new tt(1,0,0,0,1,0,0,0,1));tt.ZERO=Object.freeze(new tt(0,0,0,0,0,0,0,0,0));tt.COLUMN0ROW0=0;tt.COLUMN0ROW1=1;tt.COLUMN0ROW2=2;tt.COLUMN1ROW0=3;tt.COLUMN1ROW1=4;tt.COLUMN1ROW2=5;tt.COLUMN2ROW0=6;tt.COLUMN2ROW1=7;tt.COLUMN2ROW2=8;Object.defineProperties(tt.prototype,{length:{get:function(){return tt.packedLength}}});tt.prototype.clone=function(e){return tt.clone(this,e)};tt.prototype.equals=function(e){return tt.equals(this,e)};tt.equalsArray=function(e,t,n){return e[0]===t[n]&&e[1]===t[n+1]&&e[2]===t[n+2]&&e[3]===t[n+3]&&e[4]===t[n+4]&&e[5]===t[n+5]&&e[6]===t[n+6]&&e[7]===t[n+7]&&e[8]===t[n+8]};tt.prototype.equalsEpsilon=function(e,t){return tt.equalsEpsilon(this,e,t)};tt.prototype.toString=function(){return`(${this[0]}, ${this[3]}, ${this[6]})
  74. (${this[1]}, ${this[4]}, ${this[7]})
  75. (${this[2]}, ${this[5]}, ${this[8]})`};var $=tt;var kTt=T(S(),1);var ETt=T(S(),1);function bt(e,t,n,i){this.x=g(e,0),this.y=g(t,0),this.z=g(n,0),this.w=g(i,0)}bt.fromElements=function(e,t,n,i,o){return d(o)?(o.x=e,o.y=t,o.z=n,o.w=i,o):new bt(e,t,n,i)};bt.fromColor=function(e,t){return d(t)?(t.x=e.red,t.y=e.green,t.z=e.blue,t.w=e.alpha,t):new bt(e.red,e.green,e.blue,e.alpha)};bt.clone=function(e,t){if(d(e))return d(t)?(t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,t):new bt(e.x,e.y,e.z,e.w)};bt.packedLength=4;bt.pack=function(e,t,n){return n=g(n,0),t[n++]=e.x,t[n++]=e.y,t[n++]=e.z,t[n]=e.w,t};bt.unpack=function(e,t,n){return t=g(t,0),d(n)||(n=new bt),n.x=e[t++],n.y=e[t++],n.z=e[t++],n.w=e[t],n};bt.packArray=function(e,t){let n=e.length,i=n*4;d(t)?!Array.isArray(t)&&t.length!==i||t.length!==i&&(t.length=i):t=new Array(i);for(let o=0;o<n;++o)bt.pack(e[o],t,o*4);return t};bt.unpackArray=function(e,t){let n=e.length;d(t)?t.length=n/4:t=new Array(n/4);for(let i=0;i<n;i+=4){let o=i/4;t[o]=bt.unpack(e,i,t[o])}return t};bt.fromArray=bt.unpack;bt.maximumComponent=function(e){return Math.max(e.x,e.y,e.z,e.w)};bt.minimumComponent=function(e){return Math.min(e.x,e.y,e.z,e.w)};bt.minimumByComponent=function(e,t,n){return n.x=Math.min(e.x,t.x),n.y=Math.min(e.y,t.y),n.z=Math.min(e.z,t.z),n.w=Math.min(e.w,t.w),n};bt.maximumByComponent=function(e,t,n){return n.x=Math.max(e.x,t.x),n.y=Math.max(e.y,t.y),n.z=Math.max(e.z,t.z),n.w=Math.max(e.w,t.w),n};bt.clamp=function(e,t,n,i){let o=W.clamp(e.x,t.x,n.x),r=W.clamp(e.y,t.y,n.y),s=W.clamp(e.z,t.z,n.z),a=W.clamp(e.w,t.w,n.w);return i.x=o,i.y=r,i.z=s,i.w=a,i};bt.magnitudeSquared=function(e){return e.x*e.x+e.y*e.y+e.z*e.z+e.w*e.w};bt.magnitude=function(e){return Math.sqrt(bt.magnitudeSquared(e))};var xA=new bt;bt.distance=function(e,t){return bt.subtract(e,t,xA),bt.magnitude(xA)};bt.distanceSquared=function(e,t){return bt.subtract(e,t,xA),bt.magnitudeSquared(xA)};bt.normalize=function(e,t){let n=bt.magnitude(e);return t.x=e.x/n,t.y=e.y/n,t.z=e.z/n,t.w=e.w/n,t};bt.dot=function(e,t){return e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w};bt.multiplyComponents=function(e,t,n){return n.x=e.x*t.x,n.y=e.y*t.y,n.z=e.z*t.z,n.w=e.w*t.w,n};bt.divideComponents=function(e,t,n){return n.x=e.x/t.x,n.y=e.y/t.y,n.z=e.z/t.z,n.w=e.w/t.w,n};bt.add=function(e,t,n){return n.x=e.x+t.x,n.y=e.y+t.y,n.z=e.z+t.z,n.w=e.w+t.w,n};bt.subtract=function(e,t,n){return n.x=e.x-t.x,n.y=e.y-t.y,n.z=e.z-t.z,n.w=e.w-t.w,n};bt.multiplyByScalar=function(e,t,n){return n.x=e.x*t,n.y=e.y*t,n.z=e.z*t,n.w=e.w*t,n};bt.divideByScalar=function(e,t,n){return n.x=e.x/t,n.y=e.y/t,n.z=e.z/t,n.w=e.w/t,n};bt.negate=function(e,t){return t.x=-e.x,t.y=-e.y,t.z=-e.z,t.w=-e.w,t};bt.abs=function(e,t){return t.x=Math.abs(e.x),t.y=Math.abs(e.y),t.z=Math.abs(e.z),t.w=Math.abs(e.w),t};var c7=new bt;bt.lerp=function(e,t,n,i){return bt.multiplyByScalar(t,n,c7),i=bt.multiplyByScalar(e,1-n,i),bt.add(c7,i,i)};var eSe=new bt;bt.mostOrthogonalAxis=function(e,t){let n=bt.normalize(e,eSe);return bt.abs(n,n),n.x<=n.y?n.x<=n.z?n.x<=n.w?t=bt.clone(bt.UNIT_X,t):t=bt.clone(bt.UNIT_W,t):n.z<=n.w?t=bt.clone(bt.UNIT_Z,t):t=bt.clone(bt.UNIT_W,t):n.y<=n.z?n.y<=n.w?t=bt.clone(bt.UNIT_Y,t):t=bt.clone(bt.UNIT_W,t):n.z<=n.w?t=bt.clone(bt.UNIT_Z,t):t=bt.clone(bt.UNIT_W,t),t};bt.equals=function(e,t){return e===t||d(e)&&d(t)&&e.x===t.x&&e.y===t.y&&e.z===t.z&&e.w===t.w};bt.equalsArray=function(e,t,n){return e.x===t[n]&&e.y===t[n+1]&&e.z===t[n+2]&&e.w===t[n+3]};bt.equalsEpsilon=function(e,t,n,i){return e===t||d(e)&&d(t)&&W.equalsEpsilon(e.x,t.x,n,i)&&W.equalsEpsilon(e.y,t.y,n,i)&&W.equalsEpsilon(e.z,t.z,n,i)&&W.equalsEpsilon(e.w,t.w,n,i)};bt.ZERO=Object.freeze(new bt(0,0,0,0));bt.ONE=Object.freeze(new bt(1,1,1,1));bt.UNIT_X=Object.freeze(new bt(1,0,0,0));bt.UNIT_Y=Object.freeze(new bt(0,1,0,0));bt.UNIT_Z=Object.freeze(new bt(0,0,1,0));bt.UNIT_W=Object.freeze(new bt(0,0,0,1));bt.prototype.clone=function(e){return bt.clone(this,e)};bt.prototype.equals=function(e){return bt.equals(this,e)};bt.prototype.equalsEpsilon=function(e,t,n){return bt.equalsEpsilon(this,e,t,n)};bt.prototype.toString=function(){return`(${this.x}, ${this.y}, ${this.z}, ${this.w})`};var lB=new Float32Array(1),Pa=new Uint8Array(lB.buffer),tSe=new Uint32Array([287454020]),nSe=new Uint8Array(tSe.buffer),l7=nSe[0]===68;bt.packFloat=function(e,t){return d(t)||(t=new bt),lB[0]=e,l7?(t.x=Pa[0],t.y=Pa[1],t.z=Pa[2],t.w=Pa[3]):(t.x=Pa[3],t.y=Pa[2],t.z=Pa[1],t.w=Pa[0]),t};bt.unpackFloat=function(e){return l7?(Pa[0]=e.x,Pa[1]=e.y,Pa[2]=e.z,Pa[3]=e.w):(Pa[0]=e.w,Pa[1]=e.z,Pa[2]=e.y,Pa[3]=e.x),lB[0]};var se=bt;var WTt=T(S(),1);function $V(e){this.name="RuntimeError",this.message=e;let t;try{throw new Error}catch(n){t=n.stack}this.stack=t}d(Object.create)&&($V.prototype=Object.create(Error.prototype),$V.prototype.constructor=$V);$V.prototype.toString=function(){let e=`${this.name}: ${this.message}`;return d(this.stack)&&(e+=`
  76. ${this.stack.toString()}`),e};var me=$V;function $e(e,t,n,i,o,r,s,a,c,l,u,m,p,y,f,x){this[0]=g(e,0),this[1]=g(o,0),this[2]=g(c,0),this[3]=g(p,0),this[4]=g(t,0),this[5]=g(r,0),this[6]=g(l,0),this[7]=g(y,0),this[8]=g(n,0),this[9]=g(s,0),this[10]=g(u,0),this[11]=g(f,0),this[12]=g(i,0),this[13]=g(a,0),this[14]=g(m,0),this[15]=g(x,0)}$e.packedLength=16;$e.pack=function(e,t,n){return n=g(n,0),t[n++]=e[0],t[n++]=e[1],t[n++]=e[2],t[n++]=e[3],t[n++]=e[4],t[n++]=e[5],t[n++]=e[6],t[n++]=e[7],t[n++]=e[8],t[n++]=e[9],t[n++]=e[10],t[n++]=e[11],t[n++]=e[12],t[n++]=e[13],t[n++]=e[14],t[n]=e[15],t};$e.unpack=function(e,t,n){return t=g(t,0),d(n)||(n=new $e),n[0]=e[t++],n[1]=e[t++],n[2]=e[t++],n[3]=e[t++],n[4]=e[t++],n[5]=e[t++],n[6]=e[t++],n[7]=e[t++],n[8]=e[t++],n[9]=e[t++],n[10]=e[t++],n[11]=e[t++],n[12]=e[t++],n[13]=e[t++],n[14]=e[t++],n[15]=e[t],n};$e.packArray=function(e,t){let n=e.length,i=n*16;d(t)?!Array.isArray(t)&&t.length!==i||t.length!==i&&(t.length=i):t=new Array(i);for(let o=0;o<n;++o)$e.pack(e[o],t,o*16);return t};$e.unpackArray=function(e,t){let n=e.length;d(t)?t.length=n/16:t=new Array(n/16);for(let i=0;i<n;i+=16){let o=i/16;t[o]=$e.unpack(e,i,t[o])}return t};$e.clone=function(e,t){if(d(e))return d(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t):new $e(e[0],e[4],e[8],e[12],e[1],e[5],e[9],e[13],e[2],e[6],e[10],e[14],e[3],e[7],e[11],e[15])};$e.fromArray=$e.unpack;$e.fromColumnMajorArray=function(e,t){return $e.clone(e,t)};$e.fromRowMajorArray=function(e,t){return d(t)?(t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15],t):new $e(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15])};$e.fromRotationTranslation=function(e,t,n){return t=g(t,h.ZERO),d(n)?(n[0]=e[0],n[1]=e[1],n[2]=e[2],n[3]=0,n[4]=e[3],n[5]=e[4],n[6]=e[5],n[7]=0,n[8]=e[6],n[9]=e[7],n[10]=e[8],n[11]=0,n[12]=t.x,n[13]=t.y,n[14]=t.z,n[15]=1,n):new $e(e[0],e[3],e[6],t.x,e[1],e[4],e[7],t.y,e[2],e[5],e[8],t.z,0,0,0,1)};$e.fromTranslationQuaternionRotationScale=function(e,t,n,i){d(i)||(i=new $e);let o=n.x,r=n.y,s=n.z,a=t.x*t.x,c=t.x*t.y,l=t.x*t.z,u=t.x*t.w,m=t.y*t.y,p=t.y*t.z,y=t.y*t.w,f=t.z*t.z,x=t.z*t.w,_=t.w*t.w,C=a-m-f+_,V=2*(c-x),L=2*(l+y),Z=2*(c+x),G=-a+m-f+_,X=2*(p-u),P=2*(l-y),v=2*(p+u),F=-a-m+f+_;return i[0]=C*o,i[1]=Z*o,i[2]=P*o,i[3]=0,i[4]=V*r,i[5]=G*r,i[6]=v*r,i[7]=0,i[8]=L*s,i[9]=X*s,i[10]=F*s,i[11]=0,i[12]=e.x,i[13]=e.y,i[14]=e.z,i[15]=1,i};$e.fromTranslationRotationScale=function(e,t){return $e.fromTranslationQuaternionRotationScale(e.translation,e.rotation,e.scale,t)};$e.fromTranslation=function(e,t){return $e.fromRotationTranslation($.IDENTITY,e,t)};$e.fromScale=function(e,t){return d(t)?(t[0]=e.x,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e.y,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e.z,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t):new $e(e.x,0,0,0,0,e.y,0,0,0,0,e.z,0,0,0,0,1)};$e.fromUniformScale=function(e,t){return d(t)?(t[0]=e,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t):new $e(e,0,0,0,0,e,0,0,0,0,e,0,0,0,0,1)};$e.fromRotation=function(e,t){return d(t)||(t=new $e),t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=0,t[4]=e[3],t[5]=e[4],t[6]=e[5],t[7]=0,t[8]=e[6],t[9]=e[7],t[10]=e[8],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t};var QT=new h,jT=new h,eL=new h;$e.fromCamera=function(e,t){let n=e.position,i=e.direction,o=e.up;h.normalize(i,QT),h.normalize(h.cross(QT,o,jT),jT),h.normalize(h.cross(jT,QT,eL),eL);let r=jT.x,s=jT.y,a=jT.z,c=QT.x,l=QT.y,u=QT.z,m=eL.x,p=eL.y,y=eL.z,f=n.x,x=n.y,_=n.z,C=r*-f+s*-x+a*-_,V=m*-f+p*-x+y*-_,L=c*f+l*x+u*_;return d(t)?(t[0]=r,t[1]=m,t[2]=-c,t[3]=0,t[4]=s,t[5]=p,t[6]=-l,t[7]=0,t[8]=a,t[9]=y,t[10]=-u,t[11]=0,t[12]=C,t[13]=V,t[14]=L,t[15]=1,t):new $e(r,s,a,C,m,p,y,V,-c,-l,-u,L,0,0,0,1)};$e.computePerspectiveFieldOfView=function(e,t,n,i,o){let s=1/Math.tan(e*.5),a=s/t,c=(i+n)/(n-i),l=2*i*n/(n-i);return o[0]=a,o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=s,o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=c,o[11]=-1,o[12]=0,o[13]=0,o[14]=l,o[15]=0,o};$e.computeOrthographicOffCenter=function(e,t,n,i,o,r,s){let a=1/(t-e),c=1/(i-n),l=1/(r-o),u=-(t+e)*a,m=-(i+n)*c,p=-(r+o)*l;return a*=2,c*=2,l*=-2,s[0]=a,s[1]=0,s[2]=0,s[3]=0,s[4]=0,s[5]=c,s[6]=0,s[7]=0,s[8]=0,s[9]=0,s[10]=l,s[11]=0,s[12]=u,s[13]=m,s[14]=p,s[15]=1,s};$e.computePerspectiveOffCenter=function(e,t,n,i,o,r,s){let a=2*o/(t-e),c=2*o/(i-n),l=(t+e)/(t-e),u=(i+n)/(i-n),m=-(r+o)/(r-o),p=-1,y=-2*r*o/(r-o);return s[0]=a,s[1]=0,s[2]=0,s[3]=0,s[4]=0,s[5]=c,s[6]=0,s[7]=0,s[8]=l,s[9]=u,s[10]=m,s[11]=p,s[12]=0,s[13]=0,s[14]=y,s[15]=0,s};$e.computeInfinitePerspectiveOffCenter=function(e,t,n,i,o,r){let s=2*o/(t-e),a=2*o/(i-n),c=(t+e)/(t-e),l=(i+n)/(i-n),u=-1,m=-1,p=-2*o;return r[0]=s,r[1]=0,r[2]=0,r[3]=0,r[4]=0,r[5]=a,r[6]=0,r[7]=0,r[8]=c,r[9]=l,r[10]=u,r[11]=m,r[12]=0,r[13]=0,r[14]=p,r[15]=0,r};$e.computeViewportTransformation=function(e,t,n,i){d(i)||(i=new $e),e=g(e,g.EMPTY_OBJECT);let o=g(e.x,0),r=g(e.y,0),s=g(e.width,0),a=g(e.height,0);t=g(t,0),n=g(n,1);let c=s*.5,l=a*.5,u=(n-t)*.5,m=c,p=l,y=u,f=o+c,x=r+l,_=t+u,C=1;return i[0]=m,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=p,i[6]=0,i[7]=0,i[8]=0,i[9]=0,i[10]=y,i[11]=0,i[12]=f,i[13]=x,i[14]=_,i[15]=C,i};$e.computeView=function(e,t,n,i,o){return o[0]=i.x,o[1]=n.x,o[2]=-t.x,o[3]=0,o[4]=i.y,o[5]=n.y,o[6]=-t.y,o[7]=0,o[8]=i.z,o[9]=n.z,o[10]=-t.z,o[11]=0,o[12]=-h.dot(i,e),o[13]=-h.dot(n,e),o[14]=h.dot(t,e),o[15]=1,o};$e.toArray=function(e,t){return d(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t):[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15]]};$e.getElementIndex=function(e,t){return e*4+t};$e.getColumn=function(e,t,n){let i=t*4,o=e[i],r=e[i+1],s=e[i+2],a=e[i+3];return n.x=o,n.y=r,n.z=s,n.w=a,n};$e.setColumn=function(e,t,n,i){i=$e.clone(e,i);let o=t*4;return i[o]=n.x,i[o+1]=n.y,i[o+2]=n.z,i[o+3]=n.w,i};$e.getRow=function(e,t,n){let i=e[t],o=e[t+4],r=e[t+8],s=e[t+12];return n.x=i,n.y=o,n.z=r,n.w=s,n};$e.setRow=function(e,t,n,i){return i=$e.clone(e,i),i[t]=n.x,i[t+4]=n.y,i[t+8]=n.z,i[t+12]=n.w,i};$e.setTranslation=function(e,t,n){return n[0]=e[0],n[1]=e[1],n[2]=e[2],n[3]=e[3],n[4]=e[4],n[5]=e[5],n[6]=e[6],n[7]=e[7],n[8]=e[8],n[9]=e[9],n[10]=e[10],n[11]=e[11],n[12]=t.x,n[13]=t.y,n[14]=t.z,n[15]=e[15],n};var iSe=new h;$e.setScale=function(e,t,n){let i=$e.getScale(e,iSe),o=t.x/i.x,r=t.y/i.y,s=t.z/i.z;return n[0]=e[0]*o,n[1]=e[1]*o,n[2]=e[2]*o,n[3]=e[3],n[4]=e[4]*r,n[5]=e[5]*r,n[6]=e[6]*r,n[7]=e[7],n[8]=e[8]*s,n[9]=e[9]*s,n[10]=e[10]*s,n[11]=e[11],n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],n};var oSe=new h;$e.setUniformScale=function(e,t,n){let i=$e.getScale(e,oSe),o=t/i.x,r=t/i.y,s=t/i.z;return n[0]=e[0]*o,n[1]=e[1]*o,n[2]=e[2]*o,n[3]=e[3],n[4]=e[4]*r,n[5]=e[5]*r,n[6]=e[6]*r,n[7]=e[7],n[8]=e[8]*s,n[9]=e[9]*s,n[10]=e[10]*s,n[11]=e[11],n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],n};var dB=new h;$e.getScale=function(e,t){return t.x=h.magnitude(h.fromElements(e[0],e[1],e[2],dB)),t.y=h.magnitude(h.fromElements(e[4],e[5],e[6],dB)),t.z=h.magnitude(h.fromElements(e[8],e[9],e[10],dB)),t};var d7=new h;$e.getMaximumScale=function(e){return $e.getScale(e,d7),h.maximumComponent(d7)};var rSe=new h;$e.setRotation=function(e,t,n){let i=$e.getScale(e,rSe);return n[0]=t[0]*i.x,n[1]=t[1]*i.x,n[2]=t[2]*i.x,n[3]=e[3],n[4]=t[3]*i.y,n[5]=t[4]*i.y,n[6]=t[5]*i.y,n[7]=e[7],n[8]=t[6]*i.z,n[9]=t[7]*i.z,n[10]=t[8]*i.z,n[11]=e[11],n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],n};var sSe=new h;$e.getRotation=function(e,t){let n=$e.getScale(e,sSe);return t[0]=e[0]/n.x,t[1]=e[1]/n.x,t[2]=e[2]/n.x,t[3]=e[4]/n.y,t[4]=e[5]/n.y,t[5]=e[6]/n.y,t[6]=e[8]/n.z,t[7]=e[9]/n.z,t[8]=e[10]/n.z,t};$e.multiply=function(e,t,n){let i=e[0],o=e[1],r=e[2],s=e[3],a=e[4],c=e[5],l=e[6],u=e[7],m=e[8],p=e[9],y=e[10],f=e[11],x=e[12],_=e[13],C=e[14],V=e[15],L=t[0],Z=t[1],G=t[2],X=t[3],P=t[4],v=t[5],F=t[6],M=t[7],b=t[8],R=t[9],E=t[10],I=t[11],w=t[12],N=t[13],B=t[14],k=t[15],O=i*L+a*Z+m*G+x*X,U=o*L+c*Z+p*G+_*X,J=r*L+l*Z+y*G+C*X,z=s*L+u*Z+f*G+V*X,ee=i*P+a*v+m*F+x*M,K=o*P+c*v+p*F+_*M,j=r*P+l*v+y*F+C*M,q=s*P+u*v+f*F+V*M,be=i*b+a*R+m*E+x*I,Te=o*b+c*R+p*E+_*I,ae=r*b+l*R+y*E+C*I,xe=s*b+u*R+f*E+V*I,_e=i*w+a*N+m*B+x*k,Ve=o*w+c*N+p*B+_*k,Ie=r*w+l*N+y*B+C*k,Me=s*w+u*N+f*B+V*k;return n[0]=O,n[1]=U,n[2]=J,n[3]=z,n[4]=ee,n[5]=K,n[6]=j,n[7]=q,n[8]=be,n[9]=Te,n[10]=ae,n[11]=xe,n[12]=_e,n[13]=Ve,n[14]=Ie,n[15]=Me,n};$e.add=function(e,t,n){return n[0]=e[0]+t[0],n[1]=e[1]+t[1],n[2]=e[2]+t[2],n[3]=e[3]+t[3],n[4]=e[4]+t[4],n[5]=e[5]+t[5],n[6]=e[6]+t[6],n[7]=e[7]+t[7],n[8]=e[8]+t[8],n[9]=e[9]+t[9],n[10]=e[10]+t[10],n[11]=e[11]+t[11],n[12]=e[12]+t[12],n[13]=e[13]+t[13],n[14]=e[14]+t[14],n[15]=e[15]+t[15],n};$e.subtract=function(e,t,n){return n[0]=e[0]-t[0],n[1]=e[1]-t[1],n[2]=e[2]-t[2],n[3]=e[3]-t[3],n[4]=e[4]-t[4],n[5]=e[5]-t[5],n[6]=e[6]-t[6],n[7]=e[7]-t[7],n[8]=e[8]-t[8],n[9]=e[9]-t[9],n[10]=e[10]-t[10],n[11]=e[11]-t[11],n[12]=e[12]-t[12],n[13]=e[13]-t[13],n[14]=e[14]-t[14],n[15]=e[15]-t[15],n};$e.multiplyTransformation=function(e,t,n){let i=e[0],o=e[1],r=e[2],s=e[4],a=e[5],c=e[6],l=e[8],u=e[9],m=e[10],p=e[12],y=e[13],f=e[14],x=t[0],_=t[1],C=t[2],V=t[4],L=t[5],Z=t[6],G=t[8],X=t[9],P=t[10],v=t[12],F=t[13],M=t[14],b=i*x+s*_+l*C,R=o*x+a*_+u*C,E=r*x+c*_+m*C,I=i*V+s*L+l*Z,w=o*V+a*L+u*Z,N=r*V+c*L+m*Z,B=i*G+s*X+l*P,k=o*G+a*X+u*P,O=r*G+c*X+m*P,U=i*v+s*F+l*M+p,J=o*v+a*F+u*M+y,z=r*v+c*F+m*M+f;return n[0]=b,n[1]=R,n[2]=E,n[3]=0,n[4]=I,n[5]=w,n[6]=N,n[7]=0,n[8]=B,n[9]=k,n[10]=O,n[11]=0,n[12]=U,n[13]=J,n[14]=z,n[15]=1,n};$e.multiplyByMatrix3=function(e,t,n){let i=e[0],o=e[1],r=e[2],s=e[4],a=e[5],c=e[6],l=e[8],u=e[9],m=e[10],p=t[0],y=t[1],f=t[2],x=t[3],_=t[4],C=t[5],V=t[6],L=t[7],Z=t[8],G=i*p+s*y+l*f,X=o*p+a*y+u*f,P=r*p+c*y+m*f,v=i*x+s*_+l*C,F=o*x+a*_+u*C,M=r*x+c*_+m*C,b=i*V+s*L+l*Z,R=o*V+a*L+u*Z,E=r*V+c*L+m*Z;return n[0]=G,n[1]=X,n[2]=P,n[3]=0,n[4]=v,n[5]=F,n[6]=M,n[7]=0,n[8]=b,n[9]=R,n[10]=E,n[11]=0,n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],n};$e.multiplyByTranslation=function(e,t,n){let i=t.x,o=t.y,r=t.z,s=i*e[0]+o*e[4]+r*e[8]+e[12],a=i*e[1]+o*e[5]+r*e[9]+e[13],c=i*e[2]+o*e[6]+r*e[10]+e[14];return n[0]=e[0],n[1]=e[1],n[2]=e[2],n[3]=e[3],n[4]=e[4],n[5]=e[5],n[6]=e[6],n[7]=e[7],n[8]=e[8],n[9]=e[9],n[10]=e[10],n[11]=e[11],n[12]=s,n[13]=a,n[14]=c,n[15]=e[15],n};$e.multiplyByScale=function(e,t,n){let i=t.x,o=t.y,r=t.z;return i===1&&o===1&&r===1?$e.clone(e,n):(n[0]=i*e[0],n[1]=i*e[1],n[2]=i*e[2],n[3]=e[3],n[4]=o*e[4],n[5]=o*e[5],n[6]=o*e[6],n[7]=e[7],n[8]=r*e[8],n[9]=r*e[9],n[10]=r*e[10],n[11]=e[11],n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],n)};$e.multiplyByUniformScale=function(e,t,n){return n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3],n[4]=e[4]*t,n[5]=e[5]*t,n[6]=e[6]*t,n[7]=e[7],n[8]=e[8]*t,n[9]=e[9]*t,n[10]=e[10]*t,n[11]=e[11],n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],n};$e.multiplyByVector=function(e,t,n){let i=t.x,o=t.y,r=t.z,s=t.w,a=e[0]*i+e[4]*o+e[8]*r+e[12]*s,c=e[1]*i+e[5]*o+e[9]*r+e[13]*s,l=e[2]*i+e[6]*o+e[10]*r+e[14]*s,u=e[3]*i+e[7]*o+e[11]*r+e[15]*s;return n.x=a,n.y=c,n.z=l,n.w=u,n};$e.multiplyByPointAsVector=function(e,t,n){let i=t.x,o=t.y,r=t.z,s=e[0]*i+e[4]*o+e[8]*r,a=e[1]*i+e[5]*o+e[9]*r,c=e[2]*i+e[6]*o+e[10]*r;return n.x=s,n.y=a,n.z=c,n};$e.multiplyByPoint=function(e,t,n){let i=t.x,o=t.y,r=t.z,s=e[0]*i+e[4]*o+e[8]*r+e[12],a=e[1]*i+e[5]*o+e[9]*r+e[13],c=e[2]*i+e[6]*o+e[10]*r+e[14];return n.x=s,n.y=a,n.z=c,n};$e.multiplyByScalar=function(e,t,n){return n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3]*t,n[4]=e[4]*t,n[5]=e[5]*t,n[6]=e[6]*t,n[7]=e[7]*t,n[8]=e[8]*t,n[9]=e[9]*t,n[10]=e[10]*t,n[11]=e[11]*t,n[12]=e[12]*t,n[13]=e[13]*t,n[14]=e[14]*t,n[15]=e[15]*t,n};$e.negate=function(e,t){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t[4]=-e[4],t[5]=-e[5],t[6]=-e[6],t[7]=-e[7],t[8]=-e[8],t[9]=-e[9],t[10]=-e[10],t[11]=-e[11],t[12]=-e[12],t[13]=-e[13],t[14]=-e[14],t[15]=-e[15],t};$e.transpose=function(e,t){let n=e[1],i=e[2],o=e[3],r=e[6],s=e[7],a=e[11];return t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=n,t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=i,t[9]=r,t[10]=e[10],t[11]=e[14],t[12]=o,t[13]=s,t[14]=a,t[15]=e[15],t};$e.abs=function(e,t){return t[0]=Math.abs(e[0]),t[1]=Math.abs(e[1]),t[2]=Math.abs(e[2]),t[3]=Math.abs(e[3]),t[4]=Math.abs(e[4]),t[5]=Math.abs(e[5]),t[6]=Math.abs(e[6]),t[7]=Math.abs(e[7]),t[8]=Math.abs(e[8]),t[9]=Math.abs(e[9]),t[10]=Math.abs(e[10]),t[11]=Math.abs(e[11]),t[12]=Math.abs(e[12]),t[13]=Math.abs(e[13]),t[14]=Math.abs(e[14]),t[15]=Math.abs(e[15]),t};$e.equals=function(e,t){return e===t||d(e)&&d(t)&&e[12]===t[12]&&e[13]===t[13]&&e[14]===t[14]&&e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[8]===t[8]&&e[9]===t[9]&&e[10]===t[10]&&e[3]===t[3]&&e[7]===t[7]&&e[11]===t[11]&&e[15]===t[15]};$e.equalsEpsilon=function(e,t,n){return n=g(n,0),e===t||d(e)&&d(t)&&Math.abs(e[0]-t[0])<=n&&Math.abs(e[1]-t[1])<=n&&Math.abs(e[2]-t[2])<=n&&Math.abs(e[3]-t[3])<=n&&Math.abs(e[4]-t[4])<=n&&Math.abs(e[5]-t[5])<=n&&Math.abs(e[6]-t[6])<=n&&Math.abs(e[7]-t[7])<=n&&Math.abs(e[8]-t[8])<=n&&Math.abs(e[9]-t[9])<=n&&Math.abs(e[10]-t[10])<=n&&Math.abs(e[11]-t[11])<=n&&Math.abs(e[12]-t[12])<=n&&Math.abs(e[13]-t[13])<=n&&Math.abs(e[14]-t[14])<=n&&Math.abs(e[15]-t[15])<=n};$e.getTranslation=function(e,t){return t.x=e[12],t.y=e[13],t.z=e[14],t};$e.getMatrix3=function(e,t){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[4],t[4]=e[5],t[5]=e[6],t[6]=e[8],t[7]=e[9],t[8]=e[10],t};var aSe=new $,cSe=new $,lSe=new se,dSe=new se(0,0,0,1);$e.inverse=function(e,t){let n=e[0],i=e[4],o=e[8],r=e[12],s=e[1],a=e[5],c=e[9],l=e[13],u=e[2],m=e[6],p=e[10],y=e[14],f=e[3],x=e[7],_=e[11],C=e[15],V=p*C,L=y*_,Z=m*C,G=y*x,X=m*_,P=p*x,v=u*C,F=y*f,M=u*_,b=p*f,R=u*x,E=m*f,I=V*a+G*c+X*l-(L*a+Z*c+P*l),w=L*s+v*c+b*l-(V*s+F*c+M*l),N=Z*s+F*a+R*l-(G*s+v*a+E*l),B=P*s+M*a+E*c-(X*s+b*a+R*c),k=L*i+Z*o+P*r-(V*i+G*o+X*r),O=V*n+F*o+M*r-(L*n+v*o+b*r),U=G*n+v*i+E*r-(Z*n+F*i+R*r),J=X*n+b*i+R*o-(P*n+M*i+E*o);V=o*l,L=r*c,Z=i*l,G=r*a,X=i*c,P=o*a,v=n*l,F=r*s,M=n*c,b=o*s,R=n*a,E=i*s;let z=V*x+G*_+X*C-(L*x+Z*_+P*C),ee=L*f+v*_+b*C-(V*f+F*_+M*C),K=Z*f+F*x+R*C-(G*f+v*x+E*C),j=P*f+M*x+E*_-(X*f+b*x+R*_),q=Z*p+P*y+L*m-(X*y+V*m+G*p),be=M*y+V*u+F*p-(v*p+b*y+L*u),Te=v*m+E*y+G*u-(R*y+Z*u+F*m),ae=R*p+X*u+b*m-(M*m+E*p+P*u),xe=n*I+i*w+o*N+r*B;if(Math.abs(xe)<W.EPSILON21){if($.equalsEpsilon($e.getMatrix3(e,aSe),cSe,W.EPSILON7)&&se.equals($e.getRow(e,3,lSe),dSe))return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=0,t[11]=0,t[12]=-e[12],t[13]=-e[13],t[14]=-e[14],t[15]=1,t;throw new me("matrix is not invertible because its determinate is zero.")}return xe=1/xe,t[0]=I*xe,t[1]=w*xe,t[2]=N*xe,t[3]=B*xe,t[4]=k*xe,t[5]=O*xe,t[6]=U*xe,t[7]=J*xe,t[8]=z*xe,t[9]=ee*xe,t[10]=K*xe,t[11]=j*xe,t[12]=q*xe,t[13]=be*xe,t[14]=Te*xe,t[15]=ae*xe,t};$e.inverseTransformation=function(e,t){let n=e[0],i=e[1],o=e[2],r=e[4],s=e[5],a=e[6],c=e[8],l=e[9],u=e[10],m=e[12],p=e[13],y=e[14],f=-n*m-i*p-o*y,x=-r*m-s*p-a*y,_=-c*m-l*p-u*y;return t[0]=n,t[1]=r,t[2]=c,t[3]=0,t[4]=i,t[5]=s,t[6]=l,t[7]=0,t[8]=o,t[9]=a,t[10]=u,t[11]=0,t[12]=f,t[13]=x,t[14]=_,t[15]=1,t};var uSe=new $e;$e.inverseTranspose=function(e,t){return $e.inverse($e.transpose(e,uSe),t)};$e.IDENTITY=Object.freeze(new $e(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1));$e.ZERO=Object.freeze(new $e(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0));$e.COLUMN0ROW0=0;$e.COLUMN0ROW1=1;$e.COLUMN0ROW2=2;$e.COLUMN0ROW3=3;$e.COLUMN1ROW0=4;$e.COLUMN1ROW1=5;$e.COLUMN1ROW2=6;$e.COLUMN1ROW3=7;$e.COLUMN2ROW0=8;$e.COLUMN2ROW1=9;$e.COLUMN2ROW2=10;$e.COLUMN2ROW3=11;$e.COLUMN3ROW0=12;$e.COLUMN3ROW1=13;$e.COLUMN3ROW2=14;$e.COLUMN3ROW3=15;Object.defineProperties($e.prototype,{length:{get:function(){return $e.packedLength}}});$e.prototype.clone=function(e){return $e.clone(this,e)};$e.prototype.equals=function(e){return $e.equals(this,e)};$e.equalsArray=function(e,t,n){return e[0]===t[n]&&e[1]===t[n+1]&&e[2]===t[n+2]&&e[3]===t[n+3]&&e[4]===t[n+4]&&e[5]===t[n+5]&&e[6]===t[n+6]&&e[7]===t[n+7]&&e[8]===t[n+8]&&e[9]===t[n+9]&&e[10]===t[n+10]&&e[11]===t[n+11]&&e[12]===t[n+12]&&e[13]===t[n+13]&&e[14]===t[n+14]&&e[15]===t[n+15]};$e.prototype.equalsEpsilon=function(e,t){return $e.equalsEpsilon(this,e,t)};$e.prototype.toString=function(){return`(${this[0]}, ${this[4]}, ${this[8]}, ${this[12]})
  77. (${this[1]}, ${this[5]}, ${this[9]}, ${this[13]})
  78. (${this[2]}, ${this[6]}, ${this[10]}, ${this[14]})
  79. (${this[3]}, ${this[7]}, ${this[11]}, ${this[15]})`};var A=$e;function pn(e,t){this.center=h.clone(g(e,h.ZERO)),this.radius=g(t,0)}var hB=new h,fB=new h,pB=new h,bB=new h,yB=new h,gB=new h,xB=new h,Ns=new h,_B=new h,TB=new h,SB=new h,CB=new h,mSe=4/3*W.PI;pn.fromPoints=function(e,t){if(d(t)||(t=new pn),!d(e)||e.length===0)return t.center=h.clone(h.ZERO,t.center),t.radius=0,t;let n=h.clone(e[0],xB),i=h.clone(n,hB),o=h.clone(n,fB),r=h.clone(n,pB),s=h.clone(n,bB),a=h.clone(n,yB),c=h.clone(n,gB),l=e.length,u;for(u=1;u<l;u++){h.clone(e[u],n);let v=n.x,F=n.y,M=n.z;v<i.x&&h.clone(n,i),v>s.x&&h.clone(n,s),F<o.y&&h.clone(n,o),F>a.y&&h.clone(n,a),M<r.z&&h.clone(n,r),M>c.z&&h.clone(n,c)}let m=h.magnitudeSquared(h.subtract(s,i,Ns)),p=h.magnitudeSquared(h.subtract(a,o,Ns)),y=h.magnitudeSquared(h.subtract(c,r,Ns)),f=i,x=s,_=m;p>_&&(_=p,f=o,x=a),y>_&&(_=y,f=r,x=c);let C=_B;C.x=(f.x+x.x)*.5,C.y=(f.y+x.y)*.5,C.z=(f.z+x.z)*.5;let V=h.magnitudeSquared(h.subtract(x,C,Ns)),L=Math.sqrt(V),Z=TB;Z.x=i.x,Z.y=o.y,Z.z=r.z;let G=SB;G.x=s.x,G.y=a.y,G.z=c.z;let X=h.midpoint(Z,G,CB),P=0;for(u=0;u<l;u++){h.clone(e[u],n);let v=h.magnitude(h.subtract(n,X,Ns));v>P&&(P=v);let F=h.magnitudeSquared(h.subtract(n,C,Ns));if(F>V){let M=Math.sqrt(F);L=(L+M)*.5,V=L*L;let b=M-L;C.x=(L*C.x+b*n.x)/M,C.y=(L*C.y+b*n.y)/M,C.z=(L*C.z+b*n.z)/M}}return L<P?(h.clone(C,t.center),t.radius=L):(h.clone(X,t.center),t.radius=P),t};var hSe=new Zi,fSe=new h,pSe=new h,uB=new he,mB=new he;pn.fromRectangle2D=function(e,t,n){return pn.fromRectangleWithHeights2D(e,t,0,0,n)};pn.fromRectangleWithHeights2D=function(e,t,n,i,o){if(d(o)||(o=new pn),!d(e))return o.center=h.clone(h.ZERO,o.center),o.radius=0,o;t=g(t,hSe),de.southwest(e,uB),uB.height=n,de.northeast(e,mB),mB.height=i;let r=t.project(uB,fSe),s=t.project(mB,pSe),a=s.x-r.x,c=s.y-r.y,l=s.z-r.z;o.radius=Math.sqrt(a*a+c*c+l*l)*.5;let u=o.center;return u.x=r.x+a*.5,u.y=r.y+c*.5,u.z=r.z+l*.5,o};var bSe=[];pn.fromRectangle3D=function(e,t,n,i){if(t=g(t,re.WGS84),n=g(n,0),d(i)||(i=new pn),!d(e))return i.center=h.clone(h.ZERO,i.center),i.radius=0,i;let o=de.subsample(e,t,n,bSe);return pn.fromPoints(o,i)};pn.fromVertices=function(e,t,n,i){if(d(i)||(i=new pn),!d(e)||e.length===0)return i.center=h.clone(h.ZERO,i.center),i.radius=0,i;t=g(t,h.ZERO),n=g(n,3);let o=xB;o.x=e[0]+t.x,o.y=e[1]+t.y,o.z=e[2]+t.z;let r=h.clone(o,hB),s=h.clone(o,fB),a=h.clone(o,pB),c=h.clone(o,bB),l=h.clone(o,yB),u=h.clone(o,gB),m=e.length,p;for(p=0;p<m;p+=n){let M=e[p]+t.x,b=e[p+1]+t.y,R=e[p+2]+t.z;o.x=M,o.y=b,o.z=R,M<r.x&&h.clone(o,r),M>c.x&&h.clone(o,c),b<s.y&&h.clone(o,s),b>l.y&&h.clone(o,l),R<a.z&&h.clone(o,a),R>u.z&&h.clone(o,u)}let y=h.magnitudeSquared(h.subtract(c,r,Ns)),f=h.magnitudeSquared(h.subtract(l,s,Ns)),x=h.magnitudeSquared(h.subtract(u,a,Ns)),_=r,C=c,V=y;f>V&&(V=f,_=s,C=l),x>V&&(V=x,_=a,C=u);let L=_B;L.x=(_.x+C.x)*.5,L.y=(_.y+C.y)*.5,L.z=(_.z+C.z)*.5;let Z=h.magnitudeSquared(h.subtract(C,L,Ns)),G=Math.sqrt(Z),X=TB;X.x=r.x,X.y=s.y,X.z=a.z;let P=SB;P.x=c.x,P.y=l.y,P.z=u.z;let v=h.midpoint(X,P,CB),F=0;for(p=0;p<m;p+=n){o.x=e[p]+t.x,o.y=e[p+1]+t.y,o.z=e[p+2]+t.z;let M=h.magnitude(h.subtract(o,v,Ns));M>F&&(F=M);let b=h.magnitudeSquared(h.subtract(o,L,Ns));if(b>Z){let R=Math.sqrt(b);G=(G+R)*.5,Z=G*G;let E=R-G;L.x=(G*L.x+E*o.x)/R,L.y=(G*L.y+E*o.y)/R,L.z=(G*L.z+E*o.z)/R}}return G<F?(h.clone(L,i.center),i.radius=G):(h.clone(v,i.center),i.radius=F),i};pn.fromEncodedCartesianVertices=function(e,t,n){if(d(n)||(n=new pn),!d(e)||!d(t)||e.length!==t.length||e.length===0)return n.center=h.clone(h.ZERO,n.center),n.radius=0,n;let i=xB;i.x=e[0]+t[0],i.y=e[1]+t[1],i.z=e[2]+t[2];let o=h.clone(i,hB),r=h.clone(i,fB),s=h.clone(i,pB),a=h.clone(i,bB),c=h.clone(i,yB),l=h.clone(i,gB),u=e.length,m;for(m=0;m<u;m+=3){let F=e[m]+t[m],M=e[m+1]+t[m+1],b=e[m+2]+t[m+2];i.x=F,i.y=M,i.z=b,F<o.x&&h.clone(i,o),F>a.x&&h.clone(i,a),M<r.y&&h.clone(i,r),M>c.y&&h.clone(i,c),b<s.z&&h.clone(i,s),b>l.z&&h.clone(i,l)}let p=h.magnitudeSquared(h.subtract(a,o,Ns)),y=h.magnitudeSquared(h.subtract(c,r,Ns)),f=h.magnitudeSquared(h.subtract(l,s,Ns)),x=o,_=a,C=p;y>C&&(C=y,x=r,_=c),f>C&&(C=f,x=s,_=l);let V=_B;V.x=(x.x+_.x)*.5,V.y=(x.y+_.y)*.5,V.z=(x.z+_.z)*.5;let L=h.magnitudeSquared(h.subtract(_,V,Ns)),Z=Math.sqrt(L),G=TB;G.x=o.x,G.y=r.y,G.z=s.z;let X=SB;X.x=a.x,X.y=c.y,X.z=l.z;let P=h.midpoint(G,X,CB),v=0;for(m=0;m<u;m+=3){i.x=e[m]+t[m],i.y=e[m+1]+t[m+1],i.z=e[m+2]+t[m+2];let F=h.magnitude(h.subtract(i,P,Ns));F>v&&(v=F);let M=h.magnitudeSquared(h.subtract(i,V,Ns));if(M>L){let b=Math.sqrt(M);Z=(Z+b)*.5,L=Z*Z;let R=b-Z;V.x=(Z*V.x+R*i.x)/b,V.y=(Z*V.y+R*i.y)/b,V.z=(Z*V.z+R*i.z)/b}}return Z<v?(h.clone(V,n.center),n.radius=Z):(h.clone(P,n.center),n.radius=v),n};pn.fromCornerPoints=function(e,t,n){d(n)||(n=new pn);let i=h.midpoint(e,t,n.center);return n.radius=h.distance(i,t),n};pn.fromEllipsoid=function(e,t){return d(t)||(t=new pn),h.clone(h.ZERO,t.center),t.radius=e.maximumRadius,t};var ySe=new h;pn.fromBoundingSpheres=function(e,t){if(d(t)||(t=new pn),!d(e)||e.length===0)return t.center=h.clone(h.ZERO,t.center),t.radius=0,t;let n=e.length;if(n===1)return pn.clone(e[0],t);if(n===2)return pn.union(e[0],e[1],t);let i=[],o;for(o=0;o<n;o++)i.push(e[o].center);t=pn.fromPoints(i,t);let r=t.center,s=t.radius;for(o=0;o<n;o++){let a=e[o];s=Math.max(s,h.distance(r,a.center,ySe)+a.radius)}return t.radius=s,t};var gSe=new h,xSe=new h,_Se=new h;pn.fromOrientedBoundingBox=function(e,t){d(t)||(t=new pn);let n=e.halfAxes,i=$.getColumn(n,0,gSe),o=$.getColumn(n,1,xSe),r=$.getColumn(n,2,_Se);return h.add(i,o,i),h.add(i,r,i),t.center=h.clone(e.center,t.center),t.radius=h.magnitude(i),t};var TSe=new h,SSe=new h;pn.fromTransformation=function(e,t){d(t)||(t=new pn);let n=A.getTranslation(e,TSe),i=A.getScale(e,SSe),o=.5*h.magnitude(i);return t.center=h.clone(n,t.center),t.radius=o,t};pn.clone=function(e,t){if(d(e))return d(t)?(t.center=h.clone(e.center,t.center),t.radius=e.radius,t):new pn(e.center,e.radius)};pn.packedLength=4;pn.pack=function(e,t,n){n=g(n,0);let i=e.center;return t[n++]=i.x,t[n++]=i.y,t[n++]=i.z,t[n]=e.radius,t};pn.unpack=function(e,t,n){t=g(t,0),d(n)||(n=new pn);let i=n.center;return i.x=e[t++],i.y=e[t++],i.z=e[t++],n.radius=e[t],n};var CSe=new h,VSe=new h;pn.union=function(e,t,n){d(n)||(n=new pn);let i=e.center,o=e.radius,r=t.center,s=t.radius,a=h.subtract(r,i,CSe),c=h.magnitude(a);if(o>=c+s)return e.clone(n),n;if(s>=c+o)return t.clone(n),n;let l=(o+c+s)*.5,u=h.multiplyByScalar(a,(-o+l)/c,VSe);return h.add(u,i,u),h.clone(u,n.center),n.radius=l,n};var LSe=new h;pn.expand=function(e,t,n){n=pn.clone(e,n);let i=h.magnitude(h.subtract(t,n.center,LSe));return i>n.radius&&(n.radius=i),n};pn.intersectPlane=function(e,t){let n=e.center,i=e.radius,o=t.normal,r=h.dot(o,n)+t.distance;return r<-i?qt.OUTSIDE:r<i?qt.INTERSECTING:qt.INSIDE};pn.transform=function(e,t,n){return d(n)||(n=new pn),n.center=A.multiplyByPoint(t,e.center,n.center),n.radius=A.getMaximumScale(t)*e.radius,n};var RSe=new h;pn.distanceSquaredTo=function(e,t){let n=h.subtract(e.center,t,RSe),i=h.magnitude(n)-e.radius;return i<=0?0:i*i};pn.transformWithoutScale=function(e,t,n){return d(n)||(n=new pn),n.center=A.multiplyByPoint(t,e.center,n.center),n.radius=e.radius,n};var ZSe=new h;pn.computePlaneDistances=function(e,t,n,i){d(i)||(i=new xc);let o=h.subtract(e.center,t,ZSe),r=h.dot(n,o);return i.start=r-e.radius,i.stop=r+e.radius,i};var u7=new h,GSe=new h,ESe=new h,XSe=new h,ISe=new h,WSe=new he,m7=new Array(8);for(let e=0;e<8;++e)m7[e]=new h;var PSe=new Zi;pn.projectTo2D=function(e,t,n){t=g(t,PSe);let i=t.ellipsoid,o=e.center,r=e.radius,s;h.equals(o,h.ZERO)?s=h.clone(h.UNIT_X,u7):s=i.geodeticSurfaceNormal(o,u7);let a=h.cross(h.UNIT_Z,s,GSe);h.normalize(a,a);let c=h.cross(s,a,ESe);h.normalize(c,c),h.multiplyByScalar(s,r,s),h.multiplyByScalar(c,r,c),h.multiplyByScalar(a,r,a);let l=h.negate(c,ISe),u=h.negate(a,XSe),m=m7,p=m[0];h.add(s,c,p),h.add(p,a,p),p=m[1],h.add(s,c,p),h.add(p,u,p),p=m[2],h.add(s,l,p),h.add(p,u,p),p=m[3],h.add(s,l,p),h.add(p,a,p),h.negate(s,s),p=m[4],h.add(s,c,p),h.add(p,a,p),p=m[5],h.add(s,c,p),h.add(p,u,p),p=m[6],h.add(s,l,p),h.add(p,u,p),p=m[7],h.add(s,l,p),h.add(p,a,p);let y=m.length;for(let C=0;C<y;++C){let V=m[C];h.add(o,V,V);let L=i.cartesianToCartographic(V,WSe);t.project(L,V)}n=pn.fromPoints(m,n),o=n.center;let f=o.x,x=o.y,_=o.z;return o.x=_,o.y=f,o.z=x,n};pn.isOccluded=function(e,t){return!t.isBoundingSphereVisible(e)};pn.equals=function(e,t){return e===t||d(e)&&d(t)&&h.equals(e.center,t.center)&&e.radius===t.radius};pn.prototype.intersectPlane=function(e){return pn.intersectPlane(this,e)};pn.prototype.distanceSquaredTo=function(e){return pn.distanceSquaredTo(this,e)};pn.prototype.computePlaneDistances=function(e,t,n){return pn.computePlaneDistances(this,e,t,n)};pn.prototype.isOccluded=function(e){return pn.isOccluded(this,e)};pn.prototype.equals=function(e){return pn.equals(this,e)};pn.prototype.clone=function(e){return pn.clone(this,e)};pn.prototype.volume=function(){let e=this.radius;return mSe*e*e*e};var ce=pn;var cSt=T(S(),1);var iSt=T(S(),1),vSe={DEPTH_BUFFER_BIT:256,STENCIL_BUFFER_BIT:1024,COLOR_BUFFER_BIT:16384,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,ZERO:0,ONE:1,SRC_COLOR:768,ONE_MINUS_SRC_COLOR:769,SRC_ALPHA:770,ONE_MINUS_SRC_ALPHA:771,DST_ALPHA:772,ONE_MINUS_DST_ALPHA:773,DST_COLOR:774,ONE_MINUS_DST_COLOR:775,SRC_ALPHA_SATURATE:776,FUNC_ADD:32774,BLEND_EQUATION:32777,BLEND_EQUATION_RGB:32777,BLEND_EQUATION_ALPHA:34877,FUNC_SUBTRACT:32778,FUNC_REVERSE_SUBTRACT:32779,BLEND_DST_RGB:32968,BLEND_SRC_RGB:32969,BLEND_DST_ALPHA:32970,BLEND_SRC_ALPHA:32971,CONSTANT_COLOR:32769,ONE_MINUS_CONSTANT_COLOR:32770,CONSTANT_ALPHA:32771,ONE_MINUS_CONSTANT_ALPHA:32772,BLEND_COLOR:32773,ARRAY_BUFFER:34962,ELEMENT_ARRAY_BUFFER:34963,ARRAY_BUFFER_BINDING:34964,ELEMENT_ARRAY_BUFFER_BINDING:34965,STREAM_DRAW:35040,STATIC_DRAW:35044,DYNAMIC_DRAW:35048,BUFFER_SIZE:34660,BUFFER_USAGE:34661,CURRENT_VERTEX_ATTRIB:34342,FRONT:1028,BACK:1029,FRONT_AND_BACK:1032,CULL_FACE:2884,BLEND:3042,DITHER:3024,STENCIL_TEST:2960,DEPTH_TEST:2929,SCISSOR_TEST:3089,POLYGON_OFFSET_FILL:32823,SAMPLE_ALPHA_TO_COVERAGE:32926,SAMPLE_COVERAGE:32928,NO_ERROR:0,INVALID_ENUM:1280,INVALID_VALUE:1281,INVALID_OPERATION:1282,OUT_OF_MEMORY:1285,CW:2304,CCW:2305,LINE_WIDTH:2849,ALIASED_POINT_SIZE_RANGE:33901,ALIASED_LINE_WIDTH_RANGE:33902,CULL_FACE_MODE:2885,FRONT_FACE:2886,DEPTH_RANGE:2928,DEPTH_WRITEMASK:2930,DEPTH_CLEAR_VALUE:2931,DEPTH_FUNC:2932,STENCIL_CLEAR_VALUE:2961,STENCIL_FUNC:2962,STENCIL_FAIL:2964,STENCIL_PASS_DEPTH_FAIL:2965,STENCIL_PASS_DEPTH_PASS:2966,STENCIL_REF:2967,STENCIL_VALUE_MASK:2963,STENCIL_WRITEMASK:2968,STENCIL_BACK_FUNC:34816,STENCIL_BACK_FAIL:34817,STENCIL_BACK_PASS_DEPTH_FAIL:34818,STENCIL_BACK_PASS_DEPTH_PASS:34819,STENCIL_BACK_REF:36003,STENCIL_BACK_VALUE_MASK:36004,STENCIL_BACK_WRITEMASK:36005,VIEWPORT:2978,SCISSOR_BOX:3088,COLOR_CLEAR_VALUE:3106,COLOR_WRITEMASK:3107,UNPACK_ALIGNMENT:3317,PACK_ALIGNMENT:3333,MAX_TEXTURE_SIZE:3379,MAX_VIEWPORT_DIMS:3386,SUBPIXEL_BITS:3408,RED_BITS:3410,GREEN_BITS:3411,BLUE_BITS:3412,ALPHA_BITS:3413,DEPTH_BITS:3414,STENCIL_BITS:3415,POLYGON_OFFSET_UNITS:10752,POLYGON_OFFSET_FACTOR:32824,TEXTURE_BINDING_2D:32873,SAMPLE_BUFFERS:32936,SAMPLES:32937,SAMPLE_COVERAGE_VALUE:32938,SAMPLE_COVERAGE_INVERT:32939,COMPRESSED_TEXTURE_FORMATS:34467,DONT_CARE:4352,FASTEST:4353,NICEST:4354,GENERATE_MIPMAP_HINT:33170,BYTE:5120,UNSIGNED_BYTE:5121,SHORT:5122,UNSIGNED_SHORT:5123,INT:5124,UNSIGNED_INT:5125,FLOAT:5126,DEPTH_COMPONENT:6402,ALPHA:6406,RGB:6407,RGBA:6408,LUMINANCE:6409,LUMINANCE_ALPHA:6410,UNSIGNED_SHORT_4_4_4_4:32819,UNSIGNED_SHORT_5_5_5_1:32820,UNSIGNED_SHORT_5_6_5:33635,FRAGMENT_SHADER:35632,VERTEX_SHADER:35633,MAX_VERTEX_ATTRIBS:34921,MAX_VERTEX_UNIFORM_VECTORS:36347,MAX_VARYING_VECTORS:36348,MAX_COMBINED_TEXTURE_IMAGE_UNITS:35661,MAX_VERTEX_TEXTURE_IMAGE_UNITS:35660,MAX_TEXTURE_IMAGE_UNITS:34930,MAX_FRAGMENT_UNIFORM_VECTORS:36349,SHADER_TYPE:35663,DELETE_STATUS:35712,LINK_STATUS:35714,VALIDATE_STATUS:35715,ATTACHED_SHADERS:35717,ACTIVE_UNIFORMS:35718,ACTIVE_ATTRIBUTES:35721,SHADING_LANGUAGE_VERSION:35724,CURRENT_PROGRAM:35725,NEVER:512,LESS:513,EQUAL:514,LEQUAL:515,GREATER:516,NOTEQUAL:517,GEQUAL:518,ALWAYS:519,KEEP:7680,REPLACE:7681,INCR:7682,DECR:7683,INVERT:5386,INCR_WRAP:34055,DECR_WRAP:34056,VENDOR:7936,RENDERER:7937,VERSION:7938,NEAREST:9728,LINEAR:9729,NEAREST_MIPMAP_NEAREST:9984,LINEAR_MIPMAP_NEAREST:9985,NEAREST_MIPMAP_LINEAR:9986,LINEAR_MIPMAP_LINEAR:9987,TEXTURE_MAG_FILTER:10240,TEXTURE_MIN_FILTER:10241,TEXTURE_WRAP_S:10242,TEXTURE_WRAP_T:10243,TEXTURE_2D:3553,TEXTURE:5890,TEXTURE_CUBE_MAP:34067,TEXTURE_BINDING_CUBE_MAP:34068,TEXTURE_CUBE_MAP_POSITIVE_X:34069,TEXTURE_CUBE_MAP_NEGATIVE_X:34070,TEXTURE_CUBE_MAP_POSITIVE_Y:34071,TEXTURE_CUBE_MAP_NEGATIVE_Y:34072,TEXTURE_CUBE_MAP_POSITIVE_Z:34073,TEXTURE_CUBE_MAP_NEGATIVE_Z:34074,MAX_CUBE_MAP_TEXTURE_SIZE:34076,TEXTURE0:33984,TEXTURE1:33985,TEXTURE2:33986,TEXTURE3:33987,TEXTURE4:33988,TEXTURE5:33989,TEXTURE6:33990,TEXTURE7:33991,TEXTURE8:33992,TEXTURE9:33993,TEXTURE10:33994,TEXTURE11:33995,TEXTURE12:33996,TEXTURE13:33997,TEXTURE14:33998,TEXTURE15:33999,TEXTURE16:34e3,TEXTURE17:34001,TEXTURE18:34002,TEXTURE19:34003,TEXTURE20:34004,TEXTURE21:34005,TEXTURE22:34006,TEXTURE23:34007,TEXTURE24:34008,TEXTURE25:34009,TEXTURE26:34010,TEXTURE27:34011,TEXTURE28:34012,TEXTURE29:34013,TEXTURE30:34014,TEXTURE31:34015,ACTIVE_TEXTURE:34016,REPEAT:10497,CLAMP_TO_EDGE:33071,MIRRORED_REPEAT:33648,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,INT_VEC2:35667,INT_VEC3:35668,INT_VEC4:35669,BOOL:35670,BOOL_VEC2:35671,BOOL_VEC3:35672,BOOL_VEC4:35673,FLOAT_MAT2:35674,FLOAT_MAT3:35675,FLOAT_MAT4:35676,SAMPLER_2D:35678,SAMPLER_CUBE:35680,VERTEX_ATTRIB_ARRAY_ENABLED:34338,VERTEX_ATTRIB_ARRAY_SIZE:34339,VERTEX_ATTRIB_ARRAY_STRIDE:34340,VERTEX_ATTRIB_ARRAY_TYPE:34341,VERTEX_ATTRIB_ARRAY_NORMALIZED:34922,VERTEX_ATTRIB_ARRAY_POINTER:34373,VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:34975,IMPLEMENTATION_COLOR_READ_TYPE:35738,IMPLEMENTATION_COLOR_READ_FORMAT:35739,COMPILE_STATUS:35713,LOW_FLOAT:36336,MEDIUM_FLOAT:36337,HIGH_FLOAT:36338,LOW_INT:36339,MEDIUM_INT:36340,HIGH_INT:36341,FRAMEBUFFER:36160,RENDERBUFFER:36161,RGBA4:32854,RGB5_A1:32855,RGB565:36194,DEPTH_COMPONENT16:33189,STENCIL_INDEX:6401,STENCIL_INDEX8:36168,DEPTH_STENCIL:34041,RENDERBUFFER_WIDTH:36162,RENDERBUFFER_HEIGHT:36163,RENDERBUFFER_INTERNAL_FORMAT:36164,RENDERBUFFER_RED_SIZE:36176,RENDERBUFFER_GREEN_SIZE:36177,RENDERBUFFER_BLUE_SIZE:36178,RENDERBUFFER_ALPHA_SIZE:36179,RENDERBUFFER_DEPTH_SIZE:36180,RENDERBUFFER_STENCIL_SIZE:36181,FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:36048,FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:36049,FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:36050,FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:36051,COLOR_ATTACHMENT0:36064,DEPTH_ATTACHMENT:36096,STENCIL_ATTACHMENT:36128,DEPTH_STENCIL_ATTACHMENT:33306,NONE:0,FRAMEBUFFER_COMPLETE:36053,FRAMEBUFFER_INCOMPLETE_ATTACHMENT:36054,FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:36055,FRAMEBUFFER_INCOMPLETE_DIMENSIONS:36057,FRAMEBUFFER_UNSUPPORTED:36061,FRAMEBUFFER_BINDING:36006,RENDERBUFFER_BINDING:36007,MAX_RENDERBUFFER_SIZE:34024,INVALID_FRAMEBUFFER_OPERATION:1286,UNPACK_FLIP_Y_WEBGL:37440,UNPACK_PREMULTIPLY_ALPHA_WEBGL:37441,CONTEXT_LOST_WEBGL:37442,UNPACK_COLORSPACE_CONVERSION_WEBGL:37443,BROWSER_DEFAULT_WEBGL:37444,COMPRESSED_RGB_S3TC_DXT1_EXT:33776,COMPRESSED_RGBA_S3TC_DXT1_EXT:33777,COMPRESSED_RGBA_S3TC_DXT3_EXT:33778,COMPRESSED_RGBA_S3TC_DXT5_EXT:33779,COMPRESSED_RGB_PVRTC_4BPPV1_IMG:35840,COMPRESSED_RGB_PVRTC_2BPPV1_IMG:35841,COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:35842,COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:35843,COMPRESSED_RGBA_ASTC_4x4_WEBGL:37808,COMPRESSED_RGB_ETC1_WEBGL:36196,COMPRESSED_RGBA_BPTC_UNORM:36492,HALF_FLOAT_OES:36193,DOUBLE:5130,READ_BUFFER:3074,UNPACK_ROW_LENGTH:3314,UNPACK_SKIP_ROWS:3315,UNPACK_SKIP_PIXELS:3316,PACK_ROW_LENGTH:3330,PACK_SKIP_ROWS:3331,PACK_SKIP_PIXELS:3332,COLOR:6144,DEPTH:6145,STENCIL:6146,RED:6403,RGB8:32849,RGBA8:32856,RGB10_A2:32857,TEXTURE_BINDING_3D:32874,UNPACK_SKIP_IMAGES:32877,UNPACK_IMAGE_HEIGHT:32878,TEXTURE_3D:32879,TEXTURE_WRAP_R:32882,MAX_3D_TEXTURE_SIZE:32883,UNSIGNED_INT_2_10_10_10_REV:33640,MAX_ELEMENTS_VERTICES:33e3,MAX_ELEMENTS_INDICES:33001,TEXTURE_MIN_LOD:33082,TEXTURE_MAX_LOD:33083,TEXTURE_BASE_LEVEL:33084,TEXTURE_MAX_LEVEL:33085,MIN:32775,MAX:32776,DEPTH_COMPONENT24:33190,MAX_TEXTURE_LOD_BIAS:34045,TEXTURE_COMPARE_MODE:34892,TEXTURE_COMPARE_FUNC:34893,CURRENT_QUERY:34917,QUERY_RESULT:34918,QUERY_RESULT_AVAILABLE:34919,STREAM_READ:35041,STREAM_COPY:35042,STATIC_READ:35045,STATIC_COPY:35046,DYNAMIC_READ:35049,DYNAMIC_COPY:35050,MAX_DRAW_BUFFERS:34852,DRAW_BUFFER0:34853,DRAW_BUFFER1:34854,DRAW_BUFFER2:34855,DRAW_BUFFER3:34856,DRAW_BUFFER4:34857,DRAW_BUFFER5:34858,DRAW_BUFFER6:34859,DRAW_BUFFER7:34860,DRAW_BUFFER8:34861,DRAW_BUFFER9:34862,DRAW_BUFFER10:34863,DRAW_BUFFER11:34864,DRAW_BUFFER12:34865,DRAW_BUFFER13:34866,DRAW_BUFFER14:34867,DRAW_BUFFER15:34868,MAX_FRAGMENT_UNIFORM_COMPONENTS:35657,MAX_VERTEX_UNIFORM_COMPONENTS:35658,SAMPLER_3D:35679,SAMPLER_2D_SHADOW:35682,FRAGMENT_SHADER_DERIVATIVE_HINT:35723,PIXEL_PACK_BUFFER:35051,PIXEL_UNPACK_BUFFER:35052,PIXEL_PACK_BUFFER_BINDING:35053,PIXEL_UNPACK_BUFFER_BINDING:35055,FLOAT_MAT2x3:35685,FLOAT_MAT2x4:35686,FLOAT_MAT3x2:35687,FLOAT_MAT3x4:35688,FLOAT_MAT4x2:35689,FLOAT_MAT4x3:35690,SRGB:35904,SRGB8:35905,SRGB8_ALPHA8:35907,COMPARE_REF_TO_TEXTURE:34894,RGBA32F:34836,RGB32F:34837,RGBA16F:34842,RGB16F:34843,VERTEX_ATTRIB_ARRAY_INTEGER:35069,MAX_ARRAY_TEXTURE_LAYERS:35071,MIN_PROGRAM_TEXEL_OFFSET:35076,MAX_PROGRAM_TEXEL_OFFSET:35077,MAX_VARYING_COMPONENTS:35659,TEXTURE_2D_ARRAY:35866,TEXTURE_BINDING_2D_ARRAY:35869,R11F_G11F_B10F:35898,UNSIGNED_INT_10F_11F_11F_REV:35899,RGB9_E5:35901,UNSIGNED_INT_5_9_9_9_REV:35902,TRANSFORM_FEEDBACK_BUFFER_MODE:35967,MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:35968,TRANSFORM_FEEDBACK_VARYINGS:35971,TRANSFORM_FEEDBACK_BUFFER_START:35972,TRANSFORM_FEEDBACK_BUFFER_SIZE:35973,TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:35976,RASTERIZER_DISCARD:35977,MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:35978,MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:35979,INTERLEAVED_ATTRIBS:35980,SEPARATE_ATTRIBS:35981,TRANSFORM_FEEDBACK_BUFFER:35982,TRANSFORM_FEEDBACK_BUFFER_BINDING:35983,RGBA32UI:36208,RGB32UI:36209,RGBA16UI:36214,RGB16UI:36215,RGBA8UI:36220,RGB8UI:36221,RGBA32I:36226,RGB32I:36227,RGBA16I:36232,RGB16I:36233,RGBA8I:36238,RGB8I:36239,RED_INTEGER:36244,RGB_INTEGER:36248,RGBA_INTEGER:36249,SAMPLER_2D_ARRAY:36289,SAMPLER_2D_ARRAY_SHADOW:36292,SAMPLER_CUBE_SHADOW:36293,UNSIGNED_INT_VEC2:36294,UNSIGNED_INT_VEC3:36295,UNSIGNED_INT_VEC4:36296,INT_SAMPLER_2D:36298,INT_SAMPLER_3D:36299,INT_SAMPLER_CUBE:36300,INT_SAMPLER_2D_ARRAY:36303,UNSIGNED_INT_SAMPLER_2D:36306,UNSIGNED_INT_SAMPLER_3D:36307,UNSIGNED_INT_SAMPLER_CUBE:36308,UNSIGNED_INT_SAMPLER_2D_ARRAY:36311,DEPTH_COMPONENT32F:36012,DEPTH32F_STENCIL8:36013,FLOAT_32_UNSIGNED_INT_24_8_REV:36269,FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:33296,FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:33297,FRAMEBUFFER_ATTACHMENT_RED_SIZE:33298,FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:33299,FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:33300,FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:33301,FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:33302,FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:33303,FRAMEBUFFER_DEFAULT:33304,UNSIGNED_INT_24_8:34042,DEPTH24_STENCIL8:35056,UNSIGNED_NORMALIZED:35863,DRAW_FRAMEBUFFER_BINDING:36006,READ_FRAMEBUFFER:36008,DRAW_FRAMEBUFFER:36009,READ_FRAMEBUFFER_BINDING:36010,RENDERBUFFER_SAMPLES:36011,FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:36052,MAX_COLOR_ATTACHMENTS:36063,COLOR_ATTACHMENT1:36065,COLOR_ATTACHMENT2:36066,COLOR_ATTACHMENT3:36067,COLOR_ATTACHMENT4:36068,COLOR_ATTACHMENT5:36069,COLOR_ATTACHMENT6:36070,COLOR_ATTACHMENT7:36071,COLOR_ATTACHMENT8:36072,COLOR_ATTACHMENT9:36073,COLOR_ATTACHMENT10:36074,COLOR_ATTACHMENT11:36075,COLOR_ATTACHMENT12:36076,COLOR_ATTACHMENT13:36077,COLOR_ATTACHMENT14:36078,COLOR_ATTACHMENT15:36079,FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:36182,MAX_SAMPLES:36183,HALF_FLOAT:5131,RG:33319,RG_INTEGER:33320,R8:33321,RG8:33323,R16F:33325,R32F:33326,RG16F:33327,RG32F:33328,R8I:33329,R8UI:33330,R16I:33331,R16UI:33332,R32I:33333,R32UI:33334,RG8I:33335,RG8UI:33336,RG16I:33337,RG16UI:33338,RG32I:33339,RG32UI:33340,VERTEX_ARRAY_BINDING:34229,R8_SNORM:36756,RG8_SNORM:36757,RGB8_SNORM:36758,RGBA8_SNORM:36759,SIGNED_NORMALIZED:36764,COPY_READ_BUFFER:36662,COPY_WRITE_BUFFER:36663,COPY_READ_BUFFER_BINDING:36662,COPY_WRITE_BUFFER_BINDING:36663,UNIFORM_BUFFER:35345,UNIFORM_BUFFER_BINDING:35368,UNIFORM_BUFFER_START:35369,UNIFORM_BUFFER_SIZE:35370,MAX_VERTEX_UNIFORM_BLOCKS:35371,MAX_FRAGMENT_UNIFORM_BLOCKS:35373,MAX_COMBINED_UNIFORM_BLOCKS:35374,MAX_UNIFORM_BUFFER_BINDINGS:35375,MAX_UNIFORM_BLOCK_SIZE:35376,MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:35377,MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:35379,UNIFORM_BUFFER_OFFSET_ALIGNMENT:35380,ACTIVE_UNIFORM_BLOCKS:35382,UNIFORM_TYPE:35383,UNIFORM_SIZE:35384,UNIFORM_BLOCK_INDEX:35386,UNIFORM_OFFSET:35387,UNIFORM_ARRAY_STRIDE:35388,UNIFORM_MATRIX_STRIDE:35389,UNIFORM_IS_ROW_MAJOR:35390,UNIFORM_BLOCK_BINDING:35391,UNIFORM_BLOCK_DATA_SIZE:35392,UNIFORM_BLOCK_ACTIVE_UNIFORMS:35394,UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:35395,UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:35396,UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:35398,INVALID_INDEX:4294967295,MAX_VERTEX_OUTPUT_COMPONENTS:37154,MAX_FRAGMENT_INPUT_COMPONENTS:37157,MAX_SERVER_WAIT_TIMEOUT:37137,OBJECT_TYPE:37138,SYNC_CONDITION:37139,SYNC_STATUS:37140,SYNC_FLAGS:37141,SYNC_FENCE:37142,SYNC_GPU_COMMANDS_COMPLETE:37143,UNSIGNALED:37144,SIGNALED:37145,ALREADY_SIGNALED:37146,TIMEOUT_EXPIRED:37147,CONDITION_SATISFIED:37148,WAIT_FAILED:37149,SYNC_FLUSH_COMMANDS_BIT:1,VERTEX_ATTRIB_ARRAY_DIVISOR:35070,ANY_SAMPLES_PASSED:35887,ANY_SAMPLES_PASSED_CONSERVATIVE:36202,SAMPLER_BINDING:35097,RGB10_A2UI:36975,INT_2_10_10_10_REV:36255,TRANSFORM_FEEDBACK:36386,TRANSFORM_FEEDBACK_PAUSED:36387,TRANSFORM_FEEDBACK_ACTIVE:36388,TRANSFORM_FEEDBACK_BINDING:36389,COMPRESSED_R11_EAC:37488,COMPRESSED_SIGNED_R11_EAC:37489,COMPRESSED_RG11_EAC:37490,COMPRESSED_SIGNED_RG11_EAC:37491,COMPRESSED_RGB8_ETC2:37492,COMPRESSED_SRGB8_ETC2:37493,COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:37494,COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:37495,COMPRESSED_RGBA8_ETC2_EAC:37496,COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:37497,TEXTURE_IMMUTABLE_FORMAT:37167,MAX_ELEMENT_INDEX:36203,TEXTURE_IMMUTABLE_LEVELS:33503,MAX_TEXTURE_MAX_ANISOTROPY_EXT:34047},ne=Object.freeze(vSe);var Rn={BYTE:ne.BYTE,UNSIGNED_BYTE:ne.UNSIGNED_BYTE,SHORT:ne.SHORT,UNSIGNED_SHORT:ne.UNSIGNED_SHORT,INT:ne.INT,UNSIGNED_INT:ne.UNSIGNED_INT,FLOAT:ne.FLOAT,DOUBLE:ne.DOUBLE};Rn.getSizeInBytes=function(e){switch(e){case Rn.BYTE:return Int8Array.BYTES_PER_ELEMENT;case Rn.UNSIGNED_BYTE:return Uint8Array.BYTES_PER_ELEMENT;case Rn.SHORT:return Int16Array.BYTES_PER_ELEMENT;case Rn.UNSIGNED_SHORT:return Uint16Array.BYTES_PER_ELEMENT;case Rn.INT:return Int32Array.BYTES_PER_ELEMENT;case Rn.UNSIGNED_INT:return Uint32Array.BYTES_PER_ELEMENT;case Rn.FLOAT:return Float32Array.BYTES_PER_ELEMENT;case Rn.DOUBLE:return Float64Array.BYTES_PER_ELEMENT}};Rn.fromTypedArray=function(e){if(e instanceof Int8Array)return Rn.BYTE;if(e instanceof Uint8Array)return Rn.UNSIGNED_BYTE;if(e instanceof Int16Array)return Rn.SHORT;if(e instanceof Uint16Array)return Rn.UNSIGNED_SHORT;if(e instanceof Int32Array)return Rn.INT;if(e instanceof Uint32Array)return Rn.UNSIGNED_INT;if(e instanceof Float32Array)return Rn.FLOAT;if(e instanceof Float64Array)return Rn.DOUBLE};Rn.validate=function(e){return d(e)&&(e===Rn.BYTE||e===Rn.UNSIGNED_BYTE||e===Rn.SHORT||e===Rn.UNSIGNED_SHORT||e===Rn.INT||e===Rn.UNSIGNED_INT||e===Rn.FLOAT||e===Rn.DOUBLE)};Rn.createTypedArray=function(e,t){switch(e){case Rn.BYTE:return new Int8Array(t);case Rn.UNSIGNED_BYTE:return new Uint8Array(t);case Rn.SHORT:return new Int16Array(t);case Rn.UNSIGNED_SHORT:return new Uint16Array(t);case Rn.INT:return new Int32Array(t);case Rn.UNSIGNED_INT:return new Uint32Array(t);case Rn.FLOAT:return new Float32Array(t);case Rn.DOUBLE:return new Float64Array(t)}};Rn.createArrayBufferView=function(e,t,n,i){switch(n=g(n,0),i=g(i,(t.byteLength-n)/Rn.getSizeInBytes(e)),e){case Rn.BYTE:return new Int8Array(t,n,i);case Rn.UNSIGNED_BYTE:return new Uint8Array(t,n,i);case Rn.SHORT:return new Int16Array(t,n,i);case Rn.UNSIGNED_SHORT:return new Uint16Array(t,n,i);case Rn.INT:return new Int32Array(t,n,i);case Rn.UNSIGNED_INT:return new Uint32Array(t,n,i);case Rn.FLOAT:return new Float32Array(t,n,i);case Rn.DOUBLE:return new Float64Array(t,n,i)}};Rn.fromName=function(e){switch(e){case"BYTE":return Rn.BYTE;case"UNSIGNED_BYTE":return Rn.UNSIGNED_BYTE;case"SHORT":return Rn.SHORT;case"UNSIGNED_SHORT":return Rn.UNSIGNED_SHORT;case"INT":return Rn.INT;case"UNSIGNED_INT":return Rn.UNSIGNED_INT;case"FLOAT":return Rn.FLOAT;case"DOUBLE":return Rn.DOUBLE}};var Q=Object.freeze(Rn);var iLt=T(S(),1);var dSt=T(S(),1),wSe={NONE:0,TRIANGLES:1,LINES:2,POLYLINES:3},Kd=Object.freeze(wSe);var pSt=T(S(),1);function zt(e,t,n,i){this[0]=g(e,0),this[1]=g(n,0),this[2]=g(t,0),this[3]=g(i,0)}zt.packedLength=4;zt.pack=function(e,t,n){return n=g(n,0),t[n++]=e[0],t[n++]=e[1],t[n++]=e[2],t[n++]=e[3],t};zt.unpack=function(e,t,n){return t=g(t,0),d(n)||(n=new zt),n[0]=e[t++],n[1]=e[t++],n[2]=e[t++],n[3]=e[t++],n};zt.packArray=function(e,t){let n=e.length,i=n*4;d(t)?!Array.isArray(t)&&t.length!==i||t.length!==i&&(t.length=i):t=new Array(i);for(let o=0;o<n;++o)zt.pack(e[o],t,o*4);return t};zt.unpackArray=function(e,t){let n=e.length;d(t)?t.length=n/4:t=new Array(n/4);for(let i=0;i<n;i+=4){let o=i/4;t[o]=zt.unpack(e,i,t[o])}return t};zt.clone=function(e,t){if(d(e))return d(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t):new zt(e[0],e[2],e[1],e[3])};zt.fromArray=zt.unpack;zt.fromColumnMajorArray=function(e,t){return zt.clone(e,t)};zt.fromRowMajorArray=function(e,t){return d(t)?(t[0]=e[0],t[1]=e[2],t[2]=e[1],t[3]=e[3],t):new zt(e[0],e[1],e[2],e[3])};zt.fromScale=function(e,t){return d(t)?(t[0]=e.x,t[1]=0,t[2]=0,t[3]=e.y,t):new zt(e.x,0,0,e.y)};zt.fromUniformScale=function(e,t){return d(t)?(t[0]=e,t[1]=0,t[2]=0,t[3]=e,t):new zt(e,0,0,e)};zt.fromRotation=function(e,t){let n=Math.cos(e),i=Math.sin(e);return d(t)?(t[0]=n,t[1]=i,t[2]=-i,t[3]=n,t):new zt(n,-i,i,n)};zt.toArray=function(e,t){return d(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t):[e[0],e[1],e[2],e[3]]};zt.getElementIndex=function(e,t){return e*2+t};zt.getColumn=function(e,t,n){let i=t*2,o=e[i],r=e[i+1];return n.x=o,n.y=r,n};zt.setColumn=function(e,t,n,i){i=zt.clone(e,i);let o=t*2;return i[o]=n.x,i[o+1]=n.y,i};zt.getRow=function(e,t,n){let i=e[t],o=e[t+2];return n.x=i,n.y=o,n};zt.setRow=function(e,t,n,i){return i=zt.clone(e,i),i[t]=n.x,i[t+2]=n.y,i};var FSe=new D;zt.setScale=function(e,t,n){let i=zt.getScale(e,FSe),o=t.x/i.x,r=t.y/i.y;return n[0]=e[0]*o,n[1]=e[1]*o,n[2]=e[2]*r,n[3]=e[3]*r,n};var ASe=new D;zt.setUniformScale=function(e,t,n){let i=zt.getScale(e,ASe),o=t/i.x,r=t/i.y;return n[0]=e[0]*o,n[1]=e[1]*o,n[2]=e[2]*r,n[3]=e[3]*r,n};var h7=new D;zt.getScale=function(e,t){return t.x=D.magnitude(D.fromElements(e[0],e[1],h7)),t.y=D.magnitude(D.fromElements(e[2],e[3],h7)),t};var f7=new D;zt.getMaximumScale=function(e){return zt.getScale(e,f7),D.maximumComponent(f7)};var MSe=new D;zt.setRotation=function(e,t,n){let i=zt.getScale(e,MSe);return n[0]=t[0]*i.x,n[1]=t[1]*i.x,n[2]=t[2]*i.y,n[3]=t[3]*i.y,n};var NSe=new D;zt.getRotation=function(e,t){let n=zt.getScale(e,NSe);return t[0]=e[0]/n.x,t[1]=e[1]/n.x,t[2]=e[2]/n.y,t[3]=e[3]/n.y,t};zt.multiply=function(e,t,n){let i=e[0]*t[0]+e[2]*t[1],o=e[0]*t[2]+e[2]*t[3],r=e[1]*t[0]+e[3]*t[1],s=e[1]*t[2]+e[3]*t[3];return n[0]=i,n[1]=r,n[2]=o,n[3]=s,n};zt.add=function(e,t,n){return n[0]=e[0]+t[0],n[1]=e[1]+t[1],n[2]=e[2]+t[2],n[3]=e[3]+t[3],n};zt.subtract=function(e,t,n){return n[0]=e[0]-t[0],n[1]=e[1]-t[1],n[2]=e[2]-t[2],n[3]=e[3]-t[3],n};zt.multiplyByVector=function(e,t,n){let i=e[0]*t.x+e[2]*t.y,o=e[1]*t.x+e[3]*t.y;return n.x=i,n.y=o,n};zt.multiplyByScalar=function(e,t,n){return n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3]*t,n};zt.multiplyByScale=function(e,t,n){return n[0]=e[0]*t.x,n[1]=e[1]*t.x,n[2]=e[2]*t.y,n[3]=e[3]*t.y,n};zt.multiplyByUniformScale=function(e,t,n){return n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3]*t,n};zt.negate=function(e,t){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t};zt.transpose=function(e,t){let n=e[0],i=e[2],o=e[1],r=e[3];return t[0]=n,t[1]=i,t[2]=o,t[3]=r,t};zt.abs=function(e,t){return t[0]=Math.abs(e[0]),t[1]=Math.abs(e[1]),t[2]=Math.abs(e[2]),t[3]=Math.abs(e[3]),t};zt.equals=function(e,t){return e===t||d(e)&&d(t)&&e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]};zt.equalsArray=function(e,t,n){return e[0]===t[n]&&e[1]===t[n+1]&&e[2]===t[n+2]&&e[3]===t[n+3]};zt.equalsEpsilon=function(e,t,n){return n=g(n,0),e===t||d(e)&&d(t)&&Math.abs(e[0]-t[0])<=n&&Math.abs(e[1]-t[1])<=n&&Math.abs(e[2]-t[2])<=n&&Math.abs(e[3]-t[3])<=n};zt.IDENTITY=Object.freeze(new zt(1,0,0,1));zt.ZERO=Object.freeze(new zt(0,0,0,0));zt.COLUMN0ROW0=0;zt.COLUMN0ROW1=1;zt.COLUMN1ROW0=2;zt.COLUMN1ROW1=3;Object.defineProperties(zt.prototype,{length:{get:function(){return zt.packedLength}}});zt.prototype.clone=function(e){return zt.clone(this,e)};zt.prototype.equals=function(e){return zt.equals(this,e)};zt.prototype.equalsEpsilon=function(e,t){return zt.equalsEpsilon(this,e,t)};zt.prototype.toString=function(){return`(${this[0]}, ${this[2]})
  80. (${this[1]}, ${this[3]})`};var $i=zt;var gSt=T(S(),1);var la={POINTS:ne.POINTS,LINES:ne.LINES,LINE_LOOP:ne.LINE_LOOP,LINE_STRIP:ne.LINE_STRIP,TRIANGLES:ne.TRIANGLES,TRIANGLE_STRIP:ne.TRIANGLE_STRIP,TRIANGLE_FAN:ne.TRIANGLE_FAN};la.isLines=function(e){return e===la.LINES||e===la.LINE_LOOP||e===la.LINE_STRIP};la.isTriangles=function(e){return e===la.TRIANGLES||e===la.TRIANGLE_STRIP||e===la.TRIANGLE_FAN};la.validate=function(e){return e===la.POINTS||e===la.LINES||e===la.LINE_LOOP||e===la.LINE_STRIP||e===la.TRIANGLES||e===la.TRIANGLE_STRIP||e===la.TRIANGLE_FAN};var Fe=Object.freeze(la);var RSt=T(S(),1);function it(e,t,n,i){this.x=g(e,0),this.y=g(t,0),this.z=g(n,0),this.w=g(i,0)}var tL=new h;it.fromAxisAngle=function(e,t,n){let i=t/2,o=Math.sin(i);tL=h.normalize(e,tL);let r=tL.x*o,s=tL.y*o,a=tL.z*o,c=Math.cos(i);return d(n)?(n.x=r,n.y=s,n.z=a,n.w=c,n):new it(r,s,a,c)};var USe=[1,2,0],kSe=new Array(3);it.fromRotationMatrix=function(e,t){let n,i,o,r,s,a=e[$.COLUMN0ROW0],c=e[$.COLUMN1ROW1],l=e[$.COLUMN2ROW2],u=a+c+l;if(u>0)n=Math.sqrt(u+1),s=.5*n,n=.5/n,i=(e[$.COLUMN1ROW2]-e[$.COLUMN2ROW1])*n,o=(e[$.COLUMN2ROW0]-e[$.COLUMN0ROW2])*n,r=(e[$.COLUMN0ROW1]-e[$.COLUMN1ROW0])*n;else{let m=USe,p=0;c>a&&(p=1),l>a&&l>c&&(p=2);let y=m[p],f=m[y];n=Math.sqrt(e[$.getElementIndex(p,p)]-e[$.getElementIndex(y,y)]-e[$.getElementIndex(f,f)]+1);let x=kSe;x[p]=.5*n,n=.5/n,s=(e[$.getElementIndex(f,y)]-e[$.getElementIndex(y,f)])*n,x[y]=(e[$.getElementIndex(y,p)]+e[$.getElementIndex(p,y)])*n,x[f]=(e[$.getElementIndex(f,p)]+e[$.getElementIndex(p,f)])*n,i=-x[0],o=-x[1],r=-x[2]}return d(t)?(t.x=i,t.y=o,t.z=r,t.w=s,t):new it(i,o,r,s)};var p7=new it,b7=new it,VB=new it,y7=new it;it.fromHeadingPitchRoll=function(e,t){return y7=it.fromAxisAngle(h.UNIT_X,e.roll,p7),VB=it.fromAxisAngle(h.UNIT_Y,-e.pitch,t),t=it.multiply(VB,y7,VB),b7=it.fromAxisAngle(h.UNIT_Z,-e.heading,p7),it.multiply(b7,t,t)};var _A=new h,LB=new h,tm=new it,g7=new it,TA=new it;it.packedLength=4;it.pack=function(e,t,n){return n=g(n,0),t[n++]=e.x,t[n++]=e.y,t[n++]=e.z,t[n]=e.w,t};it.unpack=function(e,t,n){return t=g(t,0),d(n)||(n=new it),n.x=e[t],n.y=e[t+1],n.z=e[t+2],n.w=e[t+3],n};it.packedInterpolationLength=3;it.convertPackedArrayForInterpolation=function(e,t,n,i){it.unpack(e,n*4,TA),it.conjugate(TA,TA);for(let o=0,r=n-t+1;o<r;o++){let s=o*3;it.unpack(e,(t+o)*4,tm),it.multiply(tm,TA,tm),tm.w<0&&it.negate(tm,tm),it.computeAxis(tm,_A);let a=it.computeAngle(tm);d(i)||(i=[]),i[s]=_A.x*a,i[s+1]=_A.y*a,i[s+2]=_A.z*a}};it.unpackInterpolationResult=function(e,t,n,i,o){d(o)||(o=new it),h.fromArray(e,0,LB);let r=h.magnitude(LB);return it.unpack(t,i*4,g7),r===0?it.clone(it.IDENTITY,tm):it.fromAxisAngle(LB,r,tm),it.multiply(tm,g7,o)};it.clone=function(e,t){if(d(e))return d(t)?(t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,t):new it(e.x,e.y,e.z,e.w)};it.conjugate=function(e,t){return t.x=-e.x,t.y=-e.y,t.z=-e.z,t.w=e.w,t};it.magnitudeSquared=function(e){return e.x*e.x+e.y*e.y+e.z*e.z+e.w*e.w};it.magnitude=function(e){return Math.sqrt(it.magnitudeSquared(e))};it.normalize=function(e,t){let n=1/it.magnitude(e),i=e.x*n,o=e.y*n,r=e.z*n,s=e.w*n;return t.x=i,t.y=o,t.z=r,t.w=s,t};it.inverse=function(e,t){let n=it.magnitudeSquared(e);return t=it.conjugate(e,t),it.multiplyByScalar(t,1/n,t)};it.add=function(e,t,n){return n.x=e.x+t.x,n.y=e.y+t.y,n.z=e.z+t.z,n.w=e.w+t.w,n};it.subtract=function(e,t,n){return n.x=e.x-t.x,n.y=e.y-t.y,n.z=e.z-t.z,n.w=e.w-t.w,n};it.negate=function(e,t){return t.x=-e.x,t.y=-e.y,t.z=-e.z,t.w=-e.w,t};it.dot=function(e,t){return e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w};it.multiply=function(e,t,n){let i=e.x,o=e.y,r=e.z,s=e.w,a=t.x,c=t.y,l=t.z,u=t.w,m=s*a+i*u+o*l-r*c,p=s*c-i*l+o*u+r*a,y=s*l+i*c-o*a+r*u,f=s*u-i*a-o*c-r*l;return n.x=m,n.y=p,n.z=y,n.w=f,n};it.multiplyByScalar=function(e,t,n){return n.x=e.x*t,n.y=e.y*t,n.z=e.z*t,n.w=e.w*t,n};it.divideByScalar=function(e,t,n){return n.x=e.x/t,n.y=e.y/t,n.z=e.z/t,n.w=e.w/t,n};it.computeAxis=function(e,t){let n=e.w;if(Math.abs(n-1)<W.EPSILON6)return t.x=t.y=t.z=0,t;let i=1/Math.sqrt(1-n*n);return t.x=e.x*i,t.y=e.y*i,t.z=e.z*i,t};it.computeAngle=function(e){return Math.abs(e.w-1)<W.EPSILON6?0:2*Math.acos(e.w)};var RB=new it;it.lerp=function(e,t,n,i){return RB=it.multiplyByScalar(t,n,RB),i=it.multiplyByScalar(e,1-n,i),it.add(RB,i,i)};var x7=new it,ZB=new it,GB=new it;it.slerp=function(e,t,n,i){let o=it.dot(e,t),r=t;if(o<0&&(o=-o,r=x7=it.negate(t,x7)),1-o<W.EPSILON6)return it.lerp(e,r,n,i);let s=Math.acos(o);return ZB=it.multiplyByScalar(e,Math.sin((1-n)*s),ZB),GB=it.multiplyByScalar(r,Math.sin(n*s),GB),i=it.add(ZB,GB,i),it.multiplyByScalar(i,1/Math.sin(s),i)};it.log=function(e,t){let n=W.acosClamped(e.w),i=0;return n!==0&&(i=n/Math.sin(n)),h.multiplyByScalar(e,i,t)};it.exp=function(e,t){let n=h.magnitude(e),i=0;return n!==0&&(i=Math.sin(n)/n),t.x=e.x*i,t.y=e.y*i,t.z=e.z*i,t.w=Math.cos(n),t};var DSe=new h,BSe=new h,nL=new it,qT=new it;it.computeInnerQuadrangle=function(e,t,n,i){let o=it.conjugate(t,nL);it.multiply(o,n,qT);let r=it.log(qT,DSe);it.multiply(o,e,qT);let s=it.log(qT,BSe);return h.add(r,s,r),h.multiplyByScalar(r,.25,r),h.negate(r,r),it.exp(r,nL),it.multiply(t,nL,i)};it.squad=function(e,t,n,i,o,r){let s=it.slerp(e,t,o,nL),a=it.slerp(n,i,o,qT);return it.slerp(s,a,2*o*(1-o),r)};var YSe=new it,_7=1.9011074535173003,SA=Mt.supportsTypedArrays()?new Float32Array(8):[],CA=Mt.supportsTypedArrays()?new Float32Array(8):[],Of=Mt.supportsTypedArrays()?new Float32Array(8):[],Kf=Mt.supportsTypedArrays()?new Float32Array(8):[];for(let e=0;e<7;++e){let t=e+1,n=2*t+1;SA[e]=1/(t*n),CA[e]=t/n}SA[7]=_7/(8*17);CA[7]=_7*8/17;it.fastSlerp=function(e,t,n,i){let o=it.dot(e,t),r;o>=0?r=1:(r=-1,o=-o);let s=o-1,a=1-n,c=n*n,l=a*a;for(let y=7;y>=0;--y)Of[y]=(SA[y]*c-CA[y])*s,Kf[y]=(SA[y]*l-CA[y])*s;let u=r*n*(1+Of[0]*(1+Of[1]*(1+Of[2]*(1+Of[3]*(1+Of[4]*(1+Of[5]*(1+Of[6]*(1+Of[7])))))))),m=a*(1+Kf[0]*(1+Kf[1]*(1+Kf[2]*(1+Kf[3]*(1+Kf[4]*(1+Kf[5]*(1+Kf[6]*(1+Kf[7])))))))),p=it.multiplyByScalar(e,m,YSe);return it.multiplyByScalar(t,u,i),it.add(p,i,i)};it.fastSquad=function(e,t,n,i,o,r){let s=it.fastSlerp(e,t,o,nL),a=it.fastSlerp(n,i,o,qT);return it.fastSlerp(s,a,2*o*(1-o),r)};it.equals=function(e,t){return e===t||d(e)&&d(t)&&e.x===t.x&&e.y===t.y&&e.z===t.z&&e.w===t.w};it.equalsEpsilon=function(e,t,n){return n=g(n,0),e===t||d(e)&&d(t)&&Math.abs(e.x-t.x)<=n&&Math.abs(e.y-t.y)<=n&&Math.abs(e.z-t.z)<=n&&Math.abs(e.w-t.w)<=n};it.ZERO=Object.freeze(new it(0,0,0,0));it.IDENTITY=Object.freeze(new it(0,0,0,1));it.prototype.clone=function(e){return it.clone(this,e)};it.prototype.equals=function(e){return it.equals(this,e)};it.prototype.equalsEpsilon=function(e,t){return it.equalsEpsilon(this,e,t)};it.prototype.toString=function(){return`(${this.x}, ${this.y}, ${this.z}, ${this.w})`};var Ae=it;var DVt=T(S(),1);var $1t=T(S(),1);var GSt=T(S(),1);function OSe(e,t,n){let i=0,o=e.length-1,r,s;for(;i<=o;){if(r=~~((i+o)/2),s=n(e[r],t),s<0){i=r+1;continue}if(s>0){o=r-1;continue}return r}return~(o+1)}var Lo=OSe;var XSt=T(S(),1);function KSe(e,t,n,i,o){this.xPoleWander=e,this.yPoleWander=t,this.xPoleOffset=n,this.yPoleOffset=i,this.ut1MinusUtc=o}var eb=KSe;var QSt=T(S(),1);var WSt=T(S(),1);function HSe(e,t,n,i,o,r,s,a){this.year=e,this.month=t,this.day=n,this.hour=i,this.minute=o,this.second=r,this.millisecond=s,this.isLeapSecond=a}var Hf=HSe;var vSt=T(S(),1);function zSe(e){return e%4===0&&e%100!==0||e%400===0}var zf=zSe;var FSt=T(S(),1);function JSe(e,t){this.julianDate=e,this.offset=t}var Ui=JSe;var MSt=T(S(),1),QSe={SECONDS_PER_MILLISECOND:.001,SECONDS_PER_MINUTE:60,MINUTES_PER_HOUR:60,HOURS_PER_DAY:24,SECONDS_PER_HOUR:3600,MINUTES_PER_DAY:1440,SECONDS_PER_DAY:86400,DAYS_PER_JULIAN_CENTURY:36525,PICOSECOND:1e-9,MODIFIED_JULIAN_DATE_DIFFERENCE:24000005e-1},Qn=Object.freeze(QSe);var USt=T(S(),1),jSe={UTC:0,TAI:1},Jn=Object.freeze(jSe);var S7=new Hf,EB=[31,28,31,30,31,30,31,31,30,31,30,31],XB=29;function IB(e,t){return Lt.compare(e.julianDate,t.julianDate)}var $T=new Ui;function LA(e){$T.julianDate=e;let t=Lt.leapSeconds,n=Lo(t,$T,IB);n<0&&(n=~n),n>=t.length&&(n=t.length-1);let i=t[n].offset;n>0&&Lt.secondsDifference(t[n].julianDate,e)>i&&(n--,i=t[n].offset),Lt.addSeconds(e,i,e)}function T7(e,t){$T.julianDate=e;let n=Lt.leapSeconds,i=Lo(n,$T,IB);if(i<0&&(i=~i),i===0)return Lt.addSeconds(e,-n[0].offset,t);if(i>=n.length)return Lt.addSeconds(e,-n[i-1].offset,t);let o=Lt.secondsDifference(n[i].julianDate,e);if(o===0)return Lt.addSeconds(e,-n[i].offset,t);if(!(o<=1))return Lt.addSeconds(e,-n[--i].offset,t)}function tb(e,t,n){let i=t/Qn.SECONDS_PER_DAY|0;return e+=i,t-=Qn.SECONDS_PER_DAY*i,t<0&&(e--,t+=Qn.SECONDS_PER_DAY),n.dayNumber=e,n.secondsOfDay=t,n}function WB(e,t,n,i,o,r,s){let a=(t-14)/12|0,c=e+4800+a,l=(1461*c/4|0)+(367*(t-2-12*a)/12|0)-(3*((c+100)/100|0)/4|0)+n-32075;i=i-12,i<0&&(i+=24);let u=r+(i*Qn.SECONDS_PER_HOUR+o*Qn.SECONDS_PER_MINUTE+s*Qn.SECONDS_PER_MILLISECOND);return u>=43200&&(l-=1),[l,u]}var qSe=/^(\d{4})$/,$Se=/^(\d{4})-(\d{2})$/,eCe=/^(\d{4})-?(\d{3})$/,tCe=/^(\d{4})-?W(\d{2})-?(\d{1})?$/,nCe=/^(\d{4})-?(\d{2})-?(\d{2})$/,PB=/([Z+\-])?(\d{2})?:?(\d{2})?$/,iCe=/^(\d{2})(\.\d+)?/.source+PB.source,oCe=/^(\d{2}):?(\d{2})(\.\d+)?/.source+PB.source,rCe=/^(\d{2}):?(\d{2}):?(\d{2})(\.\d+)?/.source+PB.source;function Lt(e,t,n){this.dayNumber=void 0,this.secondsOfDay=void 0,e=g(e,0),t=g(t,0),n=g(n,Jn.UTC);let i=e|0;t=t+(e-i)*Qn.SECONDS_PER_DAY,tb(i,t,this),n===Jn.UTC&&LA(this)}Lt.fromGregorianDate=function(e,t){let n=WB(e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond);return d(t)?(tb(n[0],n[1],t),LA(t),t):new Lt(n[0],n[1],Jn.UTC)};Lt.fromDate=function(e,t){let n=WB(e.getUTCFullYear(),e.getUTCMonth()+1,e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds());return d(t)?(tb(n[0],n[1],t),LA(t),t):new Lt(n[0],n[1],Jn.UTC)};Lt.fromIso8601=function(e,t){e=e.replace(",",".");let n=e.split("T"),i,o=1,r=1,s=0,a=0,c=0,l=0,u=n[0],m=n[1],p,y;if(n=u.match(nCe),n!==null)i=+n[1],o=+n[2],r=+n[3];else if(n=u.match($Se),n!==null)i=+n[1],o=+n[2];else if(n=u.match(qSe),n!==null)i=+n[1];else{let C;if(n=u.match(eCe),n!==null)i=+n[1],C=+n[2],y=zf(i);else if(n=u.match(tCe),n!==null){i=+n[1];let V=+n[2],L=+n[3]||0,Z=new Date(Date.UTC(i,0,4));C=V*7+L-Z.getUTCDay()-3}p=new Date(Date.UTC(i,0,1)),p.setUTCDate(C),o=p.getUTCMonth()+1,r=p.getUTCDate()}y=zf(i);let f;if(d(m)){n=m.match(rCe),n!==null?(s=+n[1],a=+n[2],c=+n[3],l=+(n[4]||0)*1e3,f=5):(n=m.match(oCe),n!==null?(s=+n[1],a=+n[2],c=+(n[3]||0)*60,f=4):(n=m.match(iCe),n!==null&&(s=+n[1],a=+(n[2]||0)*60,f=3)));let C=n[f],V=+n[f+1],L=+(n[f+2]||0);switch(C){case"+":s=s-V,a=a-L;break;case"-":s=s+V,a=a+L;break;case"Z":break;default:a=a+new Date(Date.UTC(i,o-1,r,s,a)).getTimezoneOffset();break}}let x=c===60;for(x&&c--;a>=60;)a-=60,s++;for(;s>=24;)s-=24,r++;for(p=y&&o===2?XB:EB[o-1];r>p;)r-=p,o++,o>12&&(o-=12,i++),p=y&&o===2?XB:EB[o-1];for(;a<0;)a+=60,s--;for(;s<0;)s+=24,r--;for(;r<1;)o--,o<1&&(o+=12,i--),p=y&&o===2?XB:EB[o-1],r+=p;let _=WB(i,o,r,s,a,c,l);return d(t)?(tb(_[0],_[1],t),LA(t)):t=new Lt(_[0],_[1],Jn.UTC),x&&Lt.addSeconds(t,1,t),t};Lt.now=function(e){return Lt.fromDate(new Date,e)};var VA=new Lt(0,0,Jn.TAI);Lt.toGregorianDate=function(e,t){let n=!1,i=T7(e,VA);d(i)||(Lt.addSeconds(e,-1,VA),i=T7(VA,VA),n=!0);let o=i.dayNumber,r=i.secondsOfDay;r>=43200&&(o+=1);let s=o+68569|0,a=4*s/146097|0;s=s-((146097*a+3)/4|0)|0;let c=4e3*(s+1)/1461001|0;s=s-(1461*c/4|0)+31|0;let l=80*s/2447|0,u=s-(2447*l/80|0)|0;s=l/11|0;let m=l+2-12*s|0,p=100*(a-49)+c+s|0,y=r/Qn.SECONDS_PER_HOUR|0,f=r-y*Qn.SECONDS_PER_HOUR,x=f/Qn.SECONDS_PER_MINUTE|0;f=f-x*Qn.SECONDS_PER_MINUTE;let _=f|0,C=(f-_)/Qn.SECONDS_PER_MILLISECOND;return y+=12,y>23&&(y-=24),n&&(_+=1),d(t)?(t.year=p,t.month=m,t.day=u,t.hour=y,t.minute=x,t.second=_,t.millisecond=C,t.isLeapSecond=n,t):new Hf(p,m,u,y,x,_,C,n)};Lt.toDate=function(e){let t=Lt.toGregorianDate(e,S7),n=t.second;return t.isLeapSecond&&(n-=1),new Date(Date.UTC(t.year,t.month-1,t.day,t.hour,t.minute,n,t.millisecond))};Lt.toIso8601=function(e,t){let n=Lt.toGregorianDate(e,S7),i=n.year,o=n.month,r=n.day,s=n.hour,a=n.minute,c=n.second,l=n.millisecond;i===1e4&&o===1&&r===1&&s===0&&a===0&&c===0&&l===0&&(i=9999,o=12,r=31,s=24);let u;return!d(t)&&l!==0?(u=(l*.01).toString().replace(".",""),`${i.toString().padStart(4,"0")}-${o.toString().padStart(2,"0")}-${r.toString().padStart(2,"0")}T${s.toString().padStart(2,"0")}:${a.toString().padStart(2,"0")}:${c.toString().padStart(2,"0")}.${u}Z`):!d(t)||t===0?`${i.toString().padStart(4,"0")}-${o.toString().padStart(2,"0")}-${r.toString().padStart(2,"0")}T${s.toString().padStart(2,"0")}:${a.toString().padStart(2,"0")}:${c.toString().padStart(2,"0")}Z`:(u=(l*.01).toFixed(t).replace(".","").slice(0,t),`${i.toString().padStart(4,"0")}-${o.toString().padStart(2,"0")}-${r.toString().padStart(2,"0")}T${s.toString().padStart(2,"0")}:${a.toString().padStart(2,"0")}:${c.toString().padStart(2,"0")}.${u}Z`)};Lt.clone=function(e,t){if(d(e))return d(t)?(t.dayNumber=e.dayNumber,t.secondsOfDay=e.secondsOfDay,t):new Lt(e.dayNumber,e.secondsOfDay,Jn.TAI)};Lt.compare=function(e,t){let n=e.dayNumber-t.dayNumber;return n!==0?n:e.secondsOfDay-t.secondsOfDay};Lt.equals=function(e,t){return e===t||d(e)&&d(t)&&e.dayNumber===t.dayNumber&&e.secondsOfDay===t.secondsOfDay};Lt.equalsEpsilon=function(e,t,n){return n=g(n,0),e===t||d(e)&&d(t)&&Math.abs(Lt.secondsDifference(e,t))<=n};Lt.totalDays=function(e){return e.dayNumber+e.secondsOfDay/Qn.SECONDS_PER_DAY};Lt.secondsDifference=function(e,t){return(e.dayNumber-t.dayNumber)*Qn.SECONDS_PER_DAY+(e.secondsOfDay-t.secondsOfDay)};Lt.daysDifference=function(e,t){let n=e.dayNumber-t.dayNumber,i=(e.secondsOfDay-t.secondsOfDay)/Qn.SECONDS_PER_DAY;return n+i};Lt.computeTaiMinusUtc=function(e){$T.julianDate=e;let t=Lt.leapSeconds,n=Lo(t,$T,IB);return n<0&&(n=~n,--n,n<0&&(n=0)),t[n].offset};Lt.addSeconds=function(e,t,n){return tb(e.dayNumber,e.secondsOfDay+t,n)};Lt.addMinutes=function(e,t,n){let i=e.secondsOfDay+t*Qn.SECONDS_PER_MINUTE;return tb(e.dayNumber,i,n)};Lt.addHours=function(e,t,n){let i=e.secondsOfDay+t*Qn.SECONDS_PER_HOUR;return tb(e.dayNumber,i,n)};Lt.addDays=function(e,t,n){let i=e.dayNumber+t;return tb(i,e.secondsOfDay,n)};Lt.lessThan=function(e,t){return Lt.compare(e,t)<0};Lt.lessThanOrEquals=function(e,t){return Lt.compare(e,t)<=0};Lt.greaterThan=function(e,t){return Lt.compare(e,t)>0};Lt.greaterThanOrEquals=function(e,t){return Lt.compare(e,t)>=0};Lt.prototype.clone=function(e){return Lt.clone(this,e)};Lt.prototype.equals=function(e){return Lt.equals(this,e)};Lt.prototype.equalsEpsilon=function(e,t){return Lt.equalsEpsilon(this,e,t)};Lt.prototype.toString=function(){return Lt.toIso8601(this)};Lt.leapSeconds=[new Ui(new Lt(2441317,43210,Jn.TAI),10),new Ui(new Lt(2441499,43211,Jn.TAI),11),new Ui(new Lt(2441683,43212,Jn.TAI),12),new Ui(new Lt(2442048,43213,Jn.TAI),13),new Ui(new Lt(2442413,43214,Jn.TAI),14),new Ui(new Lt(2442778,43215,Jn.TAI),15),new Ui(new Lt(2443144,43216,Jn.TAI),16),new Ui(new Lt(2443509,43217,Jn.TAI),17),new Ui(new Lt(2443874,43218,Jn.TAI),18),new Ui(new Lt(2444239,43219,Jn.TAI),19),new Ui(new Lt(2444786,43220,Jn.TAI),20),new Ui(new Lt(2445151,43221,Jn.TAI),21),new Ui(new Lt(2445516,43222,Jn.TAI),22),new Ui(new Lt(2446247,43223,Jn.TAI),23),new Ui(new Lt(2447161,43224,Jn.TAI),24),new Ui(new Lt(2447892,43225,Jn.TAI),25),new Ui(new Lt(2448257,43226,Jn.TAI),26),new Ui(new Lt(2448804,43227,Jn.TAI),27),new Ui(new Lt(2449169,43228,Jn.TAI),28),new Ui(new Lt(2449534,43229,Jn.TAI),29),new Ui(new Lt(2450083,43230,Jn.TAI),30),new Ui(new Lt(2450630,43231,Jn.TAI),31),new Ui(new Lt(2451179,43232,Jn.TAI),32),new Ui(new Lt(2453736,43233,Jn.TAI),33),new Ui(new Lt(2454832,43234,Jn.TAI),34),new Ui(new Lt(2456109,43235,Jn.TAI),35),new Ui(new Lt(2457204,43236,Jn.TAI),36),new Ui(new Lt(2457754,43237,Jn.TAI),37)];var te=Lt;var k1t=T(S(),1),D7=T(Bl(),1);var nCt=T(S(),1);function sCe(e){return(e.length===0||e[e.length-1]!=="/")&&(e=`${e}/`),e}var iL=sCe;var rCt=T(S(),1);function E7(e,t){if(e===null||typeof e!="object")return e;t=g(t,!1);let n=new e.constructor;for(let i in e)if(e.hasOwnProperty(i)){let o=e[i];t&&(o=E7(o,t)),n[i]=o}return n}var Ke=E7;var lCt=T(S(),1);function X7(e,t,n){n=g(n,!1);let i={},o=d(e),r=d(t),s,a,c;if(o)for(s in e)e.hasOwnProperty(s)&&(a=e[s],r&&n&&typeof a=="object"&&t.hasOwnProperty(s)?(c=t[s],typeof c=="object"?i[s]=X7(a,c,n):i[s]=a):i[s]=a);if(r)for(s in t)t.hasOwnProperty(s)&&!i.hasOwnProperty(s)&&(c=t[s],i[s]=c);return i}var xt=X7;var uCt=T(S(),1);function aCe(){let e,t,n=new Promise(function(i,o){e=i,t=o});return{resolve:e,reject:t,promise:n}}var il=aCe;var pCt=T(S(),1),I7=T(Bl(),1);function vB(e,t){let n;return typeof document<"u"&&(n=document),vB._implementation(e,t,n)}vB._implementation=function(e,t,n){if(!d(t)){if(typeof n>"u")return e;t=g(n.baseURI,n.location.href)}let i=new I7.default(e);return i.scheme()!==""?i.toString():i.absoluteTo(t).toString()};var Vh=vB;var yCt=T(S(),1),W7=T(Bl(),1);function cCe(e,t){let n="",i=e.lastIndexOf("/");return i!==-1&&(n=e.substring(0,i+1)),t&&(e=new W7.default(e),e.query().length!==0&&(n+=`?${e.query()}`),e.fragment().length!==0&&(n+=`#${e.fragment()}`)),n}var oL=cCe;var xCt=T(S(),1),P7=T(Bl(),1);function lCe(e){let t=new P7.default(e);t.normalize();let n=t.path(),i=n.lastIndexOf("/");return i!==-1&&(n=n.substr(i+1)),i=n.lastIndexOf("."),i===-1?n="":n=n.substr(i+1),n}var Cg=lCe;var SCt=T(S(),1);var v7={};function dCe(e,t,n){d(t)||(t=e.width),d(n)||(n=e.height);let i=v7[t];d(i)||(i={},v7[t]=i);let o=i[n];if(!d(o)){let r=document.createElement("canvas");r.width=t,r.height=n,o=r.getContext("2d",{willReadFrequently:!0}),o.globalCompositeOperation="copy",i[n]=o}return o.drawImage(e,0,0,t,n),o.getImageData(0,0,t,n).data}var nm=dCe;var VCt=T(S(),1);var uCe=/^blob:/i;function mCe(e){return uCe.test(e)}var Vg=mCe;var ZCt=T(S(),1);var Lh;function hCe(e){d(Lh)||(Lh=document.createElement("a")),Lh.href=window.location.href;let t=Lh.host,n=Lh.protocol;return Lh.href=e,Lh.href=Lh.href,n!==Lh.protocol||t!==Lh.host}var Lg=hCe;var ECt=T(S(),1);var fCe=/^data:/i;function pCe(e){return fCe.test(e)}var Jf=pCe;var ICt=T(S(),1);function bCe(e){let t=document.createElement("script");return t.async=!0,t.src=e,new Promise((n,i)=>{window.crossOriginIsolated&&t.setAttribute("crossorigin","anonymous");let o=document.getElementsByTagName("head")[0];t.onload=function(){t.onload=void 0,o.removeChild(t),n()},t.onerror=function(r){i(r)},o.appendChild(t)})}var Rg=bCe;var PCt=T(S(),1);function yCe(e){let t="";for(let n in e)if(e.hasOwnProperty(n)){let i=e[n],o=`${encodeURIComponent(n)}=`;if(Array.isArray(i))for(let r=0,s=i.length;r<s;++r)t+=`${o+encodeURIComponent(i[r])}&`;else t+=`${o+encodeURIComponent(i)}&`}return t=t.slice(0,-1),t}var Zg=yCe;var FCt=T(S(),1);function gCe(e){let t={};if(e==="")return t;let n=e.replace(/\+/g,"%20").split(/[&;]/);for(let i=0,o=n.length;i<o;++i){let r=n[i].split("="),s=decodeURIComponent(r[0]),a=r[1];d(a)?a=decodeURIComponent(a):a="";let c=t[s];typeof c=="string"?t[s]=[c,a]:Array.isArray(c)?c.push(a):t[s]=a}return t}var Yl=gCe;var KCt=T(S(),1);var MCt=T(S(),1),xCe={UNISSUED:0,ISSUED:1,ACTIVE:2,RECEIVED:3,CANCELLED:4,FAILED:5},$n=Object.freeze(xCe);var UCt=T(S(),1),_Ce={TERRAIN:0,IMAGERY:1,TILES3D:2,OTHER:3},Hr=Object.freeze(_Ce);function EA(e){e=g(e,g.EMPTY_OBJECT);let t=g(e.throttleByServer,!1),n=g(e.throttle,!1);this.url=e.url,this.requestFunction=e.requestFunction,this.cancelFunction=e.cancelFunction,this.priorityFunction=e.priorityFunction,this.priority=g(e.priority,0),this.throttle=n,this.throttleByServer=t,this.type=g(e.type,Hr.OTHER),this.serverKey=e.serverKey,this.state=$n.UNISSUED,this.deferred=void 0,this.cancelled=!1}EA.prototype.cancel=function(){this.cancelled=!0};EA.prototype.clone=function(e){return d(e)?(e.url=this.url,e.requestFunction=this.requestFunction,e.cancelFunction=this.cancelFunction,e.priorityFunction=this.priorityFunction,e.priority=this.priority,e.throttle=this.throttle,e.throttleByServer=this.throttleByServer,e.type=this.type,e.serverKey=this.serverKey,e.state=$n.UNISSUED,e.deferred=void 0,e.cancelled=!1,e):new EA(this)};var Uo=EA;var qCt=T(S(),1);var zCt=T(S(),1);function TCe(e){let t={};if(!e)return t;let n=e.split(`\r
  81. `);for(let i=0;i<n.length;++i){let o=n[i],r=o.indexOf(": ");if(r>0){let s=o.substring(0,r),a=o.substring(r+2);t[s]=a}}return t}var rL=TCe;function w7(e,t,n){this.statusCode=e,this.response=t,this.responseHeaders=n,typeof this.responseHeaders=="string"&&(this.responseHeaders=rL(this.responseHeaders))}w7.prototype.toString=function(){let e="Request has failed.";return d(this.statusCode)&&(e+=` Status Code: ${this.statusCode}`),e};var Rh=w7;var m1t=T(S(),1),XA=T(Bl(),1);var n1t=T(S(),1);function Gg(e){this._comparator=e.comparator,this._array=[],this._length=0,this._maximumLength=void 0}Object.defineProperties(Gg.prototype,{length:{get:function(){return this._length}},internalArray:{get:function(){return this._array}},maximumLength:{get:function(){return this._maximumLength},set:function(e){let t=this._length;if(e<t){let n=this._array;for(let i=e;i<t;++i)n[i]=void 0;this._length=e,n.length=e}this._maximumLength=e}},comparator:{get:function(){return this._comparator}}});function wB(e,t,n){let i=e[t];e[t]=e[n],e[n]=i}Gg.prototype.reserve=function(e){e=g(e,this._length),this._array.length=e};Gg.prototype.heapify=function(e){e=g(e,0);let t=this._length,n=this._comparator,i=this._array,o=-1,r=!0;for(;r;){let s=2*(e+1),a=s-1;a<t&&n(i[a],i[e])<0?o=a:o=e,s<t&&n(i[s],i[o])<0&&(o=s),o!==e?(wB(i,o,e),e=o):r=!1}};Gg.prototype.resort=function(){let e=this._length;for(let t=Math.ceil(e/2);t>=0;--t)this.heapify(t)};Gg.prototype.insert=function(e){let t=this._array,n=this._comparator,i=this._maximumLength,o=this._length++;for(o<t.length?t[o]=e:t.push(e);o!==0;){let s=Math.floor((o-1)/2);if(n(t[o],t[s])<0)wB(t,o,s),o=s;else break}let r;return d(i)&&this._length>i&&(r=t[i],this._length=i),r};Gg.prototype.pop=function(e){if(e=g(e,0),this._length===0)return;let t=this._array,n=t[e];return wB(t,e,--this._length),this.heapify(e),t[this._length]=void 0,n};var sL=Gg;function SCe(e,t){return e.priority-t.priority}var eo={numberOfAttemptedRequests:0,numberOfActiveRequests:0,numberOfCancelledRequests:0,numberOfCancelledActiveRequests:0,numberOfFailedRequests:0,numberOfActiveRequestsEver:0,lastNumberOfActiveRequests:0},nS=20,va=new sL({comparator:SCe});va.maximumLength=nS;va.reserve(nS);var Zh=[],Qf={},CCe=typeof document<"u"?new XA.default(document.location.href):new XA.default,IA=new ye;function Do(){}Do.maximumRequests=50;Do.maximumRequestsPerServer=6;Do.requestsByServer={"api.cesium.com:443":18,"assets.ion.cesium.com:443":18,"ibasemaps-api.arcgis.com:443":18,"tile.googleapis.com:443":18,"tile.openstreetmap.org:443":18};Do.throttleRequests=!0;Do.debugShowStatistics=!1;Do.requestCompletedEvent=IA;Object.defineProperties(Do,{statistics:{get:function(){return eo}},priorityHeapLength:{get:function(){return nS},set:function(e){if(e<nS)for(;va.length>e;){let t=va.pop();Eg(t)}nS=e,va.maximumLength=e,va.reserve(e)}}});function F7(e){d(e.priorityFunction)&&(e.priority=e.priorityFunction())}Do.serverHasOpenSlots=function(e,t){t=g(t,1);let n=g(Do.requestsByServer[e],Do.maximumRequestsPerServer);return Qf[e]+t<=n};Do.heapHasOpenSlots=function(e){return va.length+e<=nS};function A7(e){return e.state===$n.UNISSUED&&(e.state=$n.ISSUED,e.deferred=il()),e.deferred.promise}function VCe(e){return function(t){if(e.state===$n.CANCELLED)return;let n=e.deferred;--eo.numberOfActiveRequests,--Qf[e.serverKey],IA.raiseEvent(),e.state=$n.RECEIVED,e.deferred=void 0,n.resolve(t)}}function LCe(e){return function(t){e.state!==$n.CANCELLED&&(++eo.numberOfFailedRequests,--eo.numberOfActiveRequests,--Qf[e.serverKey],IA.raiseEvent(t),e.state=$n.FAILED,e.deferred.reject(t))}}function M7(e){let t=A7(e);return e.state=$n.ACTIVE,Zh.push(e),++eo.numberOfActiveRequests,++eo.numberOfActiveRequestsEver,++Qf[e.serverKey],e.requestFunction().then(VCe(e)).catch(LCe(e)),t}function Eg(e){let t=e.state===$n.ACTIVE;if(e.state=$n.CANCELLED,++eo.numberOfCancelledRequests,d(e.deferred)){let n=e.deferred;e.deferred=void 0,n.reject()}t&&(--eo.numberOfActiveRequests,--Qf[e.serverKey],++eo.numberOfCancelledActiveRequests),d(e.cancelFunction)&&e.cancelFunction()}Do.update=function(){let e,t,n=0,i=Zh.length;for(e=0;e<i;++e){if(t=Zh[e],t.cancelled&&Eg(t),t.state!==$n.ACTIVE){++n;continue}n>0&&(Zh[e-n]=t)}Zh.length-=n;let o=va.internalArray,r=va.length;for(e=0;e<r;++e)F7(o[e]);va.resort();let s=Math.max(Do.maximumRequests-Zh.length,0),a=0;for(;a<s&&va.length>0;){if(t=va.pop(),t.cancelled){Eg(t);continue}if(t.throttleByServer&&!Do.serverHasOpenSlots(t.serverKey)){Eg(t);continue}M7(t),++a}RCe()};Do.getServerKey=function(e){let t=new XA.default(e);t.scheme()===""&&(t=t.absoluteTo(CCe),t.normalize());let n=t.authority();/:/.test(n)||(n=`${n}:${t.scheme()==="https"?"443":"80"}`);let i=Qf[n];return d(i)||(Qf[n]=0),n};Do.request=function(e){if(Jf(e.url)||Vg(e.url))return IA.raiseEvent(),e.state=$n.RECEIVED,e.requestFunction();if(++eo.numberOfAttemptedRequests,d(e.serverKey)||(e.serverKey=Do.getServerKey(e.url)),Do.throttleRequests&&e.throttleByServer&&!Do.serverHasOpenSlots(e.serverKey))return;if(!Do.throttleRequests||!e.throttle)return M7(e);if(Zh.length>=Do.maximumRequests)return;F7(e);let t=va.insert(e);if(d(t)){if(t===e)return;Eg(t)}return A7(e)};function RCe(){Do.debugShowStatistics&&(eo.numberOfActiveRequests===0&&eo.lastNumberOfActiveRequests>0&&(eo.numberOfAttemptedRequests>0&&(console.log(`Number of attempted requests: ${eo.numberOfAttemptedRequests}`),eo.numberOfAttemptedRequests=0),eo.numberOfCancelledRequests>0&&(console.log(`Number of cancelled requests: ${eo.numberOfCancelledRequests}`),eo.numberOfCancelledRequests=0),eo.numberOfCancelledActiveRequests>0&&(console.log(`Number of cancelled active requests: ${eo.numberOfCancelledActiveRequests}`),eo.numberOfCancelledActiveRequests=0),eo.numberOfFailedRequests>0&&(console.log(`Number of failed requests: ${eo.numberOfFailedRequests}`),eo.numberOfFailedRequests=0)),eo.lastNumberOfActiveRequests=eo.numberOfActiveRequests)}Do.clearForSpecs=function(){for(;va.length>0;){let t=va.pop();Eg(t)}let e=Zh.length;for(let t=0;t<e;++t)Eg(Zh[t]);Zh.length=0,Qf={},eo.numberOfAttemptedRequests=0,eo.numberOfActiveRequests=0,eo.numberOfCancelledRequests=0,eo.numberOfCancelledActiveRequests=0,eo.numberOfFailedRequests=0,eo.numberOfActiveRequestsEver=0,eo.lastNumberOfActiveRequests=0};Do.numberOfActiveRequestsByServer=function(e){return Qf[e]};Do.requestHeap=va;var wa=Do;var p1t=T(S(),1),N7=T(Bl(),1);var aL={},iS={};aL.add=function(e,t){let n=`${e.toLowerCase()}:${t}`;d(iS[n])||(iS[n]=!0)};aL.remove=function(e,t){let n=`${e.toLowerCase()}:${t}`;d(iS[n])&&delete iS[n]};function ZCe(e){let t=new N7.default(e);t.normalize();let n=t.authority();if(n.length!==0){if(t.authority(n),n.indexOf("@")!==-1&&(n=n.split("@")[1]),n.indexOf(":")===-1){let i=t.scheme();if(i.length===0&&(i=window.location.protocol,i=i.substring(0,i.length-1)),i==="http")n+=":80";else if(i==="https")n+=":443";else return}return n}}aL.contains=function(e){let t=ZCe(e);return!!(d(t)&&d(iS[t]))};aL.clear=function(){iS={}};var oS=aL;var B7=function(){try{let e=new XMLHttpRequest;return e.open("GET","#",!0),e.responseType="blob",e.responseType==="blob"}catch{return!1}}();function Vt(e){e=g(e,g.EMPTY_OBJECT),typeof e=="string"&&(e={url:e}),this._url=void 0,this._templateValues=Gh(e.templateValues,{}),this._queryParameters=Gh(e.queryParameters,{}),this.headers=Gh(e.headers,{}),this.request=g(e.request,new Uo),this.proxy=e.proxy,this.retryCallback=e.retryCallback,this.retryAttempts=g(e.retryAttempts,0),this._retryCount=0,g(e.parseUrl,!0)?this.parseUrl(e.url,!0,!0):this._url=e.url,this._credits=e.credits}function Gh(e,t){return d(e)?Ke(e):t}Vt.createIfNeeded=function(e){return e instanceof Vt?e.getDerivedResource({request:e.request}):typeof e!="string"?e:new Vt({url:e})};var rS;Vt.supportsImageBitmapOptions=function(){if(d(rS))return rS;if(typeof createImageBitmap!="function")return rS=Promise.resolve(!1),rS;let e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAABGdBTUEAAE4g3rEiDgAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADElEQVQI12Ng6GAAAAEUAIngE3ZiAAAAAElFTkSuQmCC";return rS=Vt.fetchBlob({url:e}).then(function(t){let n={imageOrientation:"flipY",premultiplyAlpha:"none",colorSpaceConversion:"none"};return Promise.all([createImageBitmap(t,n),createImageBitmap(t)])}).then(function(t){let n=nm(t[0]),i=nm(t[1]);return n[1]!==i[1]}).catch(function(){return!1}),rS};Object.defineProperties(Vt,{isBlobSupported:{get:function(){return B7}}});Object.defineProperties(Vt.prototype,{queryParameters:{get:function(){return this._queryParameters}},templateValues:{get:function(){return this._templateValues}},url:{get:function(){return this.getUrlComponent(!0,!0)},set:function(e){this.parseUrl(e,!1,!1)}},extension:{get:function(){return Cg(this._url)}},isDataUri:{get:function(){return Jf(this._url)}},isBlobUri:{get:function(){return Vg(this._url)}},isCrossOriginUrl:{get:function(){return Lg(this._url)}},hasHeaders:{get:function(){return Object.keys(this.headers).length>0}},credits:{get:function(){return this._credits}}});Vt.prototype.toString=function(){return this.getUrlComponent(!0,!0)};Vt.prototype.parseUrl=function(e,t,n,i){let o=new D7.default(e),r=GCe(o.query());this._queryParameters=t?PA(r,this.queryParameters,n):r,o.search(""),o.fragment(""),d(i)&&o.scheme()===""&&(o=o.absoluteTo(Vh(i))),this._url=o.toString()};function GCe(e){return e.length===0?{}:e.indexOf("=")===-1?{[e]:void 0}:Yl(e)}function PA(e,t,n){if(!n)return xt(e,t);let i=Ke(e,!0);for(let o in t)if(t.hasOwnProperty(o)){let r=i[o],s=t[o];d(r)?(Array.isArray(r)||(r=i[o]=[r]),i[o]=r.concat(s)):i[o]=Array.isArray(s)?s.slice():s}return i}Vt.prototype.getUrlComponent=function(e,t){if(this.isDataUri)return this._url;let n=this._url;e&&(n=`${n}${ECe(this.queryParameters)}`),n=n.replace(/%7B/g,"{").replace(/%7D/g,"}");let i=this._templateValues;return Object.keys(i).length>0&&(n=n.replace(/{(.*?)}/g,function(o,r){let s=i[r];return d(s)?encodeURIComponent(s):o})),t&&d(this.proxy)&&(n=this.proxy.getURL(n)),n};function ECe(e){let t=Object.keys(e);return t.length===0?"":t.length===1&&!d(e[t[0]])?`?${t[0]}`:`?${Zg(e)}`}Vt.prototype.setQueryParameters=function(e,t){t?this._queryParameters=PA(this._queryParameters,e,!1):this._queryParameters=PA(e,this._queryParameters,!1)};Vt.prototype.appendQueryParameters=function(e){this._queryParameters=PA(e,this._queryParameters,!0)};Vt.prototype.setTemplateValues=function(e,t){t?this._templateValues=xt(this._templateValues,e):this._templateValues=xt(e,this._templateValues)};Vt.prototype.getDerivedResource=function(e){let t=this.clone();if(t._retryCount=0,d(e.url)){let n=g(e.preserveQueryParameters,!1);t.parseUrl(e.url,!0,n,this._url)}return d(e.queryParameters)&&(t._queryParameters=xt(e.queryParameters,t.queryParameters)),d(e.templateValues)&&(t._templateValues=xt(e.templateValues,t.templateValues)),d(e.headers)&&(t.headers=xt(e.headers,t.headers)),d(e.proxy)&&(t.proxy=e.proxy),d(e.request)&&(t.request=e.request),d(e.retryCallback)&&(t.retryCallback=e.retryCallback),d(e.retryAttempts)&&(t.retryAttempts=e.retryAttempts),t};Vt.prototype.retryOnError=function(e){let t=this.retryCallback;if(typeof t!="function"||this._retryCount>=this.retryAttempts)return Promise.resolve(!1);let n=this;return Promise.resolve(t(this,e)).then(function(i){return++n._retryCount,i})};Vt.prototype.clone=function(e){return d(e)?(e._url=this._url,e._queryParameters=Ke(this._queryParameters),e._templateValues=Ke(this._templateValues),e.headers=Ke(this.headers),e.proxy=this.proxy,e.retryCallback=this.retryCallback,e.retryAttempts=this.retryAttempts,e._retryCount=0,e.request=this.request.clone(),e):new Vt({url:this._url,queryParameters:this.queryParameters,templateValues:this.templateValues,headers:this.headers,proxy:this.proxy,retryCallback:this.retryCallback,retryAttempts:this.retryAttempts,request:this.request.clone(),parseUrl:!1,credits:d(this.credits)?this.credits.slice():void 0})};Vt.prototype.getBaseUri=function(e){return oL(this.getUrlComponent(e),e)};Vt.prototype.appendForwardSlash=function(){this._url=iL(this._url)};Vt.prototype.fetchArrayBuffer=function(){return this.fetch({responseType:"arraybuffer"})};Vt.fetchArrayBuffer=function(e){return new Vt(e).fetchArrayBuffer()};Vt.prototype.fetchBlob=function(){return this.fetch({responseType:"blob"})};Vt.fetchBlob=function(e){return new Vt(e).fetchBlob()};Vt.prototype.fetchImage=function(e){e=g(e,g.EMPTY_OBJECT);let t=g(e.preferImageBitmap,!1),n=g(e.preferBlob,!1),i=g(e.flipY,!1),o=g(e.skipColorSpaceConversion,!1);if(AB(this.request),!B7||this.isDataUri||this.isBlobUri||!this.hasHeaders&&!n)return FB({resource:this,flipY:i,skipColorSpaceConversion:o,preferImageBitmap:t});let r=this.fetchBlob();if(!d(r))return;let s,a,c,l;return Vt.supportsImageBitmapOptions().then(function(u){return s=u,a=s&&t,r}).then(function(u){if(!d(u))return;if(l=u,a)return Vt.createImageBitmapFromBlob(u,{flipY:i,premultiplyAlpha:!1,skipColorSpaceConversion:o});let m=window.URL.createObjectURL(u);return c=new Vt({url:m}),FB({resource:c,flipY:i,skipColorSpaceConversion:o,preferImageBitmap:!1})}).then(function(u){if(d(u))return u.blob=l,a||window.URL.revokeObjectURL(c.url),u}).catch(function(u){return d(c)&&window.URL.revokeObjectURL(c.url),u.blob=l,Promise.reject(u)})};function FB(e){let t=e.resource,n=e.flipY,i=e.skipColorSpaceConversion,o=e.preferImageBitmap,r=t.request;r.url=t.url,r.requestFunction=function(){let a=!1;!t.isDataUri&&!t.isBlobUri&&(a=t.isCrossOriginUrl);let c=il();return Vt._Implementations.createImage(r,a,c,n,i,o),c.promise};let s=wa.request(r);if(d(s))return s.catch(function(a){return r.state!==$n.FAILED?Promise.reject(a):t.retryOnError(a).then(function(c){return c?(r.state=$n.UNISSUED,r.deferred=void 0,FB({resource:t,flipY:n,skipColorSpaceConversion:i,preferImageBitmap:o})):Promise.reject(a)})})}Vt.fetchImage=function(e){return new Vt(e).fetchImage({flipY:e.flipY,skipColorSpaceConversion:e.skipColorSpaceConversion,preferBlob:e.preferBlob,preferImageBitmap:e.preferImageBitmap})};Vt.prototype.fetchText=function(){return this.fetch({responseType:"text"})};Vt.fetchText=function(e){return new Vt(e).fetchText()};Vt.prototype.fetchJson=function(){let e=this.fetch({responseType:"text",headers:{Accept:"application/json,*/*;q=0.01"}});if(d(e))return e.then(function(t){if(d(t))return JSON.parse(t)})};Vt.fetchJson=function(e){return new Vt(e).fetchJson()};Vt.prototype.fetchXML=function(){return this.fetch({responseType:"document",overrideMimeType:"text/xml"})};Vt.fetchXML=function(e){return new Vt(e).fetchXML()};Vt.prototype.fetchJsonp=function(e){e=g(e,"callback"),AB(this.request);let t;do t=`loadJsonp${W.nextRandomNumber().toString().substring(2,8)}`;while(d(window[t]));return Y7(this,e,t)};function Y7(e,t,n){let i={};i[t]=n,e.setQueryParameters(i);let o=e.request,r=e.url;o.url=r,o.requestFunction=function(){let a=il();return window[n]=function(c){a.resolve(c);try{delete window[n]}catch{window[n]=void 0}},Vt._Implementations.loadAndExecuteScript(r,n,a),a.promise};let s=wa.request(o);if(d(s))return s.catch(function(a){return o.state!==$n.FAILED?Promise.reject(a):e.retryOnError(a).then(function(c){return c?(o.state=$n.UNISSUED,o.deferred=void 0,Y7(e,t,n)):Promise.reject(a)})})}Vt.fetchJsonp=function(e){return new Vt(e).fetchJsonp(e.callbackParameterName)};Vt.prototype._makeRequest=function(e){let t=this;AB(t.request);let n=t.request,i=t.url;n.url=i,n.requestFunction=function(){let r=e.responseType,s=xt(e.headers,t.headers),a=e.overrideMimeType,c=e.method,l=e.data,u=il(),m=Vt._Implementations.loadWithXhr(i,r,c,l,s,u,a);return d(m)&&d(m.abort)&&(n.cancelFunction=function(){m.abort()}),u.promise};let o=wa.request(n);if(d(o))return o.then(function(r){return n.cancelFunction=void 0,r}).catch(function(r){return n.cancelFunction=void 0,n.state!==$n.FAILED?Promise.reject(r):t.retryOnError(r).then(function(s){return s?(n.state=$n.UNISSUED,n.deferred=void 0,t.fetch(e)):Promise.reject(r)})})};function AB(e){if(e.state===$n.ISSUED||e.state===$n.ACTIVE)throw new me("The Resource is already being fetched.");e.state=$n.UNISSUED,e.deferred=void 0}var XCe=/^data:(.*?)(;base64)?,(.*)$/;function WA(e,t){let n=decodeURIComponent(t);return e?atob(n):n}function U7(e,t){let n=WA(e,t),i=new ArrayBuffer(n.length),o=new Uint8Array(i);for(let r=0;r<n.length;r++)o[r]=n.charCodeAt(r);return i}function ICe(e,t){t=g(t,"");let n=e[1],i=!!e[2],o=e[3],r,s;switch(t){case"":case"text":return WA(i,o);case"arraybuffer":return U7(i,o);case"blob":return r=U7(i,o),new Blob([r],{type:n});case"document":return s=new DOMParser,s.parseFromString(WA(i,o),n);case"json":return JSON.parse(WA(i,o));default:}}Vt.prototype.fetch=function(e){return e=Gh(e,{}),e.method="GET",this._makeRequest(e)};Vt.fetch=function(e){return new Vt(e).fetch({responseType:e.responseType,overrideMimeType:e.overrideMimeType})};Vt.prototype.delete=function(e){return e=Gh(e,{}),e.method="DELETE",this._makeRequest(e)};Vt.delete=function(e){return new Vt(e).delete({responseType:e.responseType,overrideMimeType:e.overrideMimeType,data:e.data})};Vt.prototype.head=function(e){return e=Gh(e,{}),e.method="HEAD",this._makeRequest(e)};Vt.head=function(e){return new Vt(e).head({responseType:e.responseType,overrideMimeType:e.overrideMimeType})};Vt.prototype.options=function(e){return e=Gh(e,{}),e.method="OPTIONS",this._makeRequest(e)};Vt.options=function(e){return new Vt(e).options({responseType:e.responseType,overrideMimeType:e.overrideMimeType})};Vt.prototype.post=function(e,t){return tl.defined("data",e),t=Gh(t,{}),t.method="POST",t.data=e,this._makeRequest(t)};Vt.post=function(e){return new Vt(e).post(e.data,{responseType:e.responseType,overrideMimeType:e.overrideMimeType})};Vt.prototype.put=function(e,t){return tl.defined("data",e),t=Gh(t,{}),t.method="PUT",t.data=e,this._makeRequest(t)};Vt.put=function(e){return new Vt(e).put(e.data,{responseType:e.responseType,overrideMimeType:e.overrideMimeType})};Vt.prototype.patch=function(e,t){return tl.defined("data",e),t=Gh(t,{}),t.method="PATCH",t.data=e,this._makeRequest(t)};Vt.patch=function(e){return new Vt(e).patch(e.data,{responseType:e.responseType,overrideMimeType:e.overrideMimeType})};Vt._Implementations={};Vt._Implementations.loadImageElement=function(e,t,n){let i=new Image;i.onload=function(){i.naturalWidth===0&&i.naturalHeight===0&&i.width===0&&i.height===0&&(i.width=300,i.height=150),n.resolve(i)},i.onerror=function(o){n.reject(o)},t&&(oS.contains(e)?i.crossOrigin="use-credentials":i.crossOrigin=""),i.src=e};Vt._Implementations.createImage=function(e,t,n,i,o,r){let s=e.url;Vt.supportsImageBitmapOptions().then(function(a){if(!(a&&r)){Vt._Implementations.loadImageElement(s,t,n);return}let c="blob",l="GET",u=il(),m=Vt._Implementations.loadWithXhr(s,c,l,void 0,void 0,u,void 0,void 0,void 0);return d(m)&&d(m.abort)&&(e.cancelFunction=function(){m.abort()}),u.promise.then(function(p){if(!d(p)){n.reject(new me(`Successfully retrieved ${s} but it contained no content.`));return}return Vt.createImageBitmapFromBlob(p,{flipY:i,premultiplyAlpha:!1,skipColorSpaceConversion:o})}).then(function(p){n.resolve(p)})}).catch(function(a){n.reject(a)})};Vt.createImageBitmapFromBlob=function(e,t){return tl.defined("options",t),tl.typeOf.bool("options.flipY",t.flipY),tl.typeOf.bool("options.premultiplyAlpha",t.premultiplyAlpha),tl.typeOf.bool("options.skipColorSpaceConversion",t.skipColorSpaceConversion),createImageBitmap(e,{imageOrientation:t.flipY?"flipY":"none",premultiplyAlpha:t.premultiplyAlpha?"premultiply":"none",colorSpaceConversion:t.skipColorSpaceConversion?"none":"default"})};function k7(e,t){switch(t){case"text":return e.toString("utf8");case"json":return JSON.parse(e.toString("utf8"));default:return new Uint8Array(e).buffer}}function WCe(e,t,n,i,o,r,s){let a,c;Promise.all([import("url"),import("zlib")]).then(([l,u])=>(a=l.parse(e),c=u,a.protocol==="https:"?import("https"):import("http"))).then(l=>{let u={protocol:a.protocol,hostname:a.hostname,port:a.port,path:a.path,query:a.query,method:n,headers:o};l.request(u).on("response",function(m){if(m.statusCode<200||m.statusCode>=300){r.reject(new Rh(m.statusCode,m,m.headers));return}let p=[];m.on("data",function(y){p.push(y)}),m.on("end",function(){let y=Buffer.concat(p);m.headers["content-encoding"]==="gzip"?c.gunzip(y,function(f,x){f?r.reject(new me("Error decompressing response.")):r.resolve(k7(x,t))}):r.resolve(k7(y,t))})}).on("error",function(m){r.reject(new Rh)}).end()})}var PCe=typeof XMLHttpRequest>"u";Vt._Implementations.loadWithXhr=function(e,t,n,i,o,r,s){let a=XCe.exec(e);if(a!==null){r.resolve(ICe(a,t));return}if(PCe){WCe(e,t,n,i,o,r,s);return}let c=new XMLHttpRequest;if(oS.contains(e)&&(c.withCredentials=!0),c.open(n,e,!0),d(s)&&d(c.overrideMimeType)&&c.overrideMimeType(s),d(o))for(let u in o)o.hasOwnProperty(u)&&c.setRequestHeader(u,o[u]);d(t)&&(c.responseType=t);let l=!1;return typeof e=="string"&&(l=e.indexOf("file://")===0||typeof window<"u"&&window.location.origin==="file://"),c.onload=function(){if((c.status<200||c.status>=300)&&!(l&&c.status===0)){r.reject(new Rh(c.status,c.response,c.getAllResponseHeaders()));return}let u=c.response,m=c.responseType;if(n==="HEAD"||n==="OPTIONS"){let y=c.getAllResponseHeaders().trim().split(/[\r\n]+/),f={};y.forEach(function(x){let _=x.split(": "),C=_.shift();f[C]=_.join(": ")}),r.resolve(f);return}if(c.status===204)r.resolve();else if(d(u)&&(!d(t)||m===t))r.resolve(u);else if(t==="json"&&typeof u=="string")try{r.resolve(JSON.parse(u))}catch(p){r.reject(p)}else(m===""||m==="document")&&d(c.responseXML)&&c.responseXML.hasChildNodes()?r.resolve(c.responseXML):(m===""||m==="text")&&d(c.responseText)?r.resolve(c.responseText):r.reject(new me("Invalid XMLHttpRequest response type."))},c.onerror=function(u){r.reject(new Rh)},c.send(i),c};Vt._Implementations.loadAndExecuteScript=function(e,t,n){return Rg(e,t).catch(function(i){n.reject(i)})};Vt._DefaultImplementations={};Vt._DefaultImplementations.createImage=Vt._Implementations.createImage;Vt._DefaultImplementations.loadWithXhr=Vt._Implementations.loadWithXhr;Vt._DefaultImplementations.loadAndExecuteScript=Vt._Implementations.loadAndExecuteScript;Vt.DEFAULT=Object.freeze(new Vt({url:typeof document>"u"?"":document.location.href.split("?")[0]}));var Ee=Vt;function lL(e){e=g(e,g.EMPTY_OBJECT),this._dates=void 0,this._samples=void 0,this._dateColumn=-1,this._xPoleWanderRadiansColumn=-1,this._yPoleWanderRadiansColumn=-1,this._ut1MinusUtcSecondsColumn=-1,this._xCelestialPoleOffsetRadiansColumn=-1,this._yCelestialPoleOffsetRadiansColumn=-1,this._taiMinusUtcSecondsColumn=-1,this._columnCount=0,this._lastIndex=-1,this._addNewLeapSeconds=g(e.addNewLeapSeconds,!0),d(e.data)?O7(this,e.data):O7(this,{columnNames:["dateIso8601","modifiedJulianDateUtc","xPoleWanderRadians","yPoleWanderRadians","ut1MinusUtcSeconds","lengthOfDayCorrectionSeconds","xCelestialPoleOffsetRadians","yCelestialPoleOffsetRadians","taiMinusUtcSeconds"],samples:[]})}lL.fromUrl=async function(e,t){t=g(t,g.EMPTY_OBJECT);let n=Ee.createIfNeeded(e),i;try{i=await n.fetchJson()}catch{throw new me(`An error occurred while retrieving the EOP data from the URL ${n.url}.`)}return new lL({addNewLeapSeconds:t.addNewLeapSeconds,data:i})};lL.NONE=Object.freeze({compute:function(e,t){return d(t)?(t.xPoleWander=0,t.yPoleWander=0,t.xPoleOffset=0,t.yPoleOffset=0,t.ut1MinusUtc=0):t=new eb(0,0,0,0,0),t}});lL.prototype.compute=function(e,t){if(!d(this._samples))return;if(d(t)||(t=new eb(0,0,0,0,0)),this._samples.length===0)return t.xPoleWander=0,t.yPoleWander=0,t.xPoleOffset=0,t.yPoleOffset=0,t.ut1MinusUtc=0,t;let n=this._dates,i=this._lastIndex,o=0,r=0;if(d(i)){let a=n[i],c=n[i+1],l=te.lessThanOrEquals(a,e),u=!d(c),m=u||te.greaterThanOrEquals(c,e);if(l&&m)return o=i,!u&&c.equals(e)&&++o,r=o+1,H7(this,n,this._samples,e,o,r,t),t}let s=Lo(n,e,te.compare,this._dateColumn);return s>=0?(s<n.length-1&&n[s+1].equals(e)&&++s,o=s,r=s):(r=~s,o=r-1,o<0&&(o=0)),this._lastIndex=o,H7(this,n,this._samples,e,o,r,t),t};function vCe(e,t){return te.compare(e.julianDate,t)}function O7(e,t){if(!d(t.columnNames))throw new me("Error in loaded EOP data: The columnNames property is required.");if(!d(t.samples))throw new me("Error in loaded EOP data: The samples property is required.");let n=t.columnNames.indexOf("modifiedJulianDateUtc"),i=t.columnNames.indexOf("xPoleWanderRadians"),o=t.columnNames.indexOf("yPoleWanderRadians"),r=t.columnNames.indexOf("ut1MinusUtcSeconds"),s=t.columnNames.indexOf("xCelestialPoleOffsetRadians"),a=t.columnNames.indexOf("yCelestialPoleOffsetRadians"),c=t.columnNames.indexOf("taiMinusUtcSeconds");if(n<0||i<0||o<0||r<0||s<0||a<0||c<0)throw new me("Error in loaded EOP data: The columnNames property must include modifiedJulianDateUtc, xPoleWanderRadians, yPoleWanderRadians, ut1MinusUtcSeconds, xCelestialPoleOffsetRadians, yCelestialPoleOffsetRadians, and taiMinusUtcSeconds columns");let l=e._samples=t.samples,u=e._dates=[];e._dateColumn=n,e._xPoleWanderRadiansColumn=i,e._yPoleWanderRadiansColumn=o,e._ut1MinusUtcSecondsColumn=r,e._xCelestialPoleOffsetRadiansColumn=s,e._yCelestialPoleOffsetRadiansColumn=a,e._taiMinusUtcSecondsColumn=c,e._columnCount=t.columnNames.length,e._lastIndex=void 0;let m,p=e._addNewLeapSeconds;for(let y=0,f=l.length;y<f;y+=e._columnCount){let x=l[y+n],_=l[y+c],C=x+Qn.MODIFIED_JULIAN_DATE_DIFFERENCE,V=new te(C,_,Jn.TAI);if(u.push(V),p){if(_!==m&&d(m)){let L=te.leapSeconds,Z=Lo(L,V,vCe);if(Z<0){let G=new Ui(V,_);L.splice(~Z,0,G)}}m=_}}}function K7(e,t,n,i,o){let r=n*i;o.xPoleWander=t[r+e._xPoleWanderRadiansColumn],o.yPoleWander=t[r+e._yPoleWanderRadiansColumn],o.xPoleOffset=t[r+e._xCelestialPoleOffsetRadiansColumn],o.yPoleOffset=t[r+e._yCelestialPoleOffsetRadiansColumn],o.ut1MinusUtc=t[r+e._ut1MinusUtcSecondsColumn]}function cL(e,t,n){return t+e*(n-t)}function H7(e,t,n,i,o,r,s){let a=e._columnCount;if(r>t.length-1)return s.xPoleWander=0,s.yPoleWander=0,s.xPoleOffset=0,s.yPoleOffset=0,s.ut1MinusUtc=0,s;let c=t[o],l=t[r];if(c.equals(l)||i.equals(c))return K7(e,n,o,a,s),s;if(i.equals(l))return K7(e,n,r,a,s),s;let u=te.secondsDifference(i,c)/te.secondsDifference(l,c),m=o*a,p=r*a,y=n[m+e._ut1MinusUtcSecondsColumn],f=n[p+e._ut1MinusUtcSecondsColumn],x=f-y;if(x>.5||x<-.5){let _=n[m+e._taiMinusUtcSecondsColumn],C=n[p+e._taiMinusUtcSecondsColumn];_!==C&&(l.equals(i)?y=f:f-=C-_)}return s.xPoleWander=cL(u,n[m+e._xPoleWanderRadiansColumn],n[p+e._xPoleWanderRadiansColumn]),s.yPoleWander=cL(u,n[m+e._yPoleWanderRadiansColumn],n[p+e._yPoleWanderRadiansColumn]),s.xPoleOffset=cL(u,n[m+e._xCelestialPoleOffsetRadiansColumn],n[p+e._xCelestialPoleOffsetRadiansColumn]),s.yPoleOffset=cL(u,n[m+e._yCelestialPoleOffsetRadiansColumn],n[p+e._yCelestialPoleOffsetRadiansColumn]),s.ut1MinusUtc=cL(u,y,f),s}var dL=lL;var oVt=T(S(),1);function Fa(e,t,n){this.heading=g(e,0),this.pitch=g(t,0),this.roll=g(n,0)}Fa.fromQuaternion=function(e,t){d(t)||(t=new Fa);let n=2*(e.w*e.y-e.z*e.x),i=1-2*(e.x*e.x+e.y*e.y),o=2*(e.w*e.x+e.y*e.z),r=1-2*(e.y*e.y+e.z*e.z),s=2*(e.w*e.z+e.x*e.y);return t.heading=-Math.atan2(s,r),t.roll=Math.atan2(o,i),t.pitch=-W.asinClamped(n),t};Fa.fromDegrees=function(e,t,n,i){return d(i)||(i=new Fa),i.heading=e*W.RADIANS_PER_DEGREE,i.pitch=t*W.RADIANS_PER_DEGREE,i.roll=n*W.RADIANS_PER_DEGREE,i};Fa.clone=function(e,t){if(d(e))return d(t)?(t.heading=e.heading,t.pitch=e.pitch,t.roll=e.roll,t):new Fa(e.heading,e.pitch,e.roll)};Fa.equals=function(e,t){return e===t||d(e)&&d(t)&&e.heading===t.heading&&e.pitch===t.pitch&&e.roll===t.roll};Fa.equalsEpsilon=function(e,t,n,i){return e===t||d(e)&&d(t)&&W.equalsEpsilon(e.heading,t.heading,n,i)&&W.equalsEpsilon(e.pitch,t.pitch,n,i)&&W.equalsEpsilon(e.roll,t.roll,n,i)};Fa.prototype.clone=function(e){return Fa.clone(this,e)};Fa.prototype.equals=function(e){return Fa.equals(this,e)};Fa.prototype.equalsEpsilon=function(e,t,n){return Fa.equalsEpsilon(this,e,t,n)};Fa.prototype.toString=function(){return`(${this.heading}, ${this.pitch}, ${this.roll})`};var Aa=Fa;var TVt=T(S(),1);var lVt=T(S(),1);var z7={};var J7=/((?:.*\/)|^)Cesium\.js(?:\?|\#|$)/;function wCe(){let e=document.getElementsByTagName("script");for(let t=0,n=e.length;t<n;++t){let i=e[t].getAttribute("src"),o=J7.exec(i);if(o!==null)return o[1]}}var vA;function Q7(e){return typeof document>"u"?e:(d(vA)||(vA=document.createElement("a")),vA.href=e,vA.href)}var Xg;function j7(){if(d(Xg))return Xg;let e;return typeof CESIUM_BASE_URL<"u"?e=CESIUM_BASE_URL:d(z7?.url)?e=Vh(".",z7.url):typeof define=="object"&&d(define.amd)&&!define.amd.toUrlUndefined&&d(Q0.toUrl)?e=Vh("..",Ig("Core/buildModuleUrl.js")):e=wCe(),Xg=new Ee({url:Q7(e)}),Xg.appendForwardSlash(),Xg}function FCe(e){return Q7(Q0.toUrl(`../${e}`))}function q7(e){return j7().getDerivedResource({url:e}).url}var wA;function Ig(e){return d(wA)||(typeof define=="object"&&d(define.amd)&&!define.amd.toUrlUndefined&&d(Q0.toUrl)?wA=FCe:wA=q7),wA(e)}Ig._cesiumScriptRegex=J7;Ig._buildModuleUrlFromBaseUrl=q7;Ig._clearBaseResource=function(){Xg=void 0};Ig.setBaseUrl=function(e){Xg=Ee.DEFAULT.getDerivedResource({url:e})};Ig.getCesiumBaseUrl=j7;var $t=Ig;var mVt=T(S(),1);function ACe(e,t,n){this.x=e,this.y=t,this.s=n}var Wg=ACe;function UB(e){e=g(e,g.EMPTY_OBJECT),this._xysFileUrlTemplate=Ee.createIfNeeded(e.xysFileUrlTemplate),this._interpolationOrder=g(e.interpolationOrder,9),this._sampleZeroJulianEphemerisDate=g(e.sampleZeroJulianEphemerisDate,24423965e-1),this._sampleZeroDateTT=new te(this._sampleZeroJulianEphemerisDate,0,Jn.TAI),this._stepSizeDays=g(e.stepSizeDays,1),this._samplesPerXysFile=g(e.samplesPerXysFile,1e3),this._totalSamples=g(e.totalSamples,27426),this._samples=new Array(this._totalSamples*3),this._chunkDownloadsInProgress=[];let t=this._interpolationOrder,n=this._denominators=new Array(t+1),i=this._xTable=new Array(t+1),o=Math.pow(this._stepSizeDays,t);for(let r=0;r<=t;++r){n[r]=o,i[r]=r*this._stepSizeDays;for(let s=0;s<=t;++s)s!==r&&(n[r]*=r-s);n[r]=1/n[r]}this._work=new Array(t+1),this._coef=new Array(t+1)}var MCe=new te(0,0,Jn.TAI);function MB(e,t,n){let i=MCe;return i.dayNumber=t,i.secondsOfDay=n,te.daysDifference(i,e._sampleZeroDateTT)}UB.prototype.preload=function(e,t,n,i){let o=MB(this,e,t),r=MB(this,n,i),s=o/this._stepSizeDays-this._interpolationOrder/2|0;s<0&&(s=0);let a=r/this._stepSizeDays-this._interpolationOrder/2|0+this._interpolationOrder;a>=this._totalSamples&&(a=this._totalSamples-1);let c=s/this._samplesPerXysFile|0,l=a/this._samplesPerXysFile|0,u=[];for(let m=c;m<=l;++m)u.push(NB(this,m));return Promise.all(u)};UB.prototype.computeXysRadians=function(e,t,n){let i=MB(this,e,t);if(i<0)return;let o=i/this._stepSizeDays|0;if(o>=this._totalSamples)return;let r=this._interpolationOrder,s=o-(r/2|0);s<0&&(s=0);let a=s+r;a>=this._totalSamples&&(a=this._totalSamples-1,s=a-r,s<0&&(s=0));let c=!1,l=this._samples;if(d(l[s*3])||(NB(this,s/this._samplesPerXysFile|0),c=!0),d(l[a*3])||(NB(this,a/this._samplesPerXysFile|0),c=!0),c)return;d(n)?(n.x=0,n.y=0,n.s=0):n=new Wg(0,0,0);let u=i-s*this._stepSizeDays,m=this._work,p=this._denominators,y=this._coef,f=this._xTable,x,_;for(x=0;x<=r;++x)m[x]=u-f[x];for(x=0;x<=r;++x){for(y[x]=1,_=0;_<=r;++_)_!==x&&(y[x]*=m[_]);y[x]*=p[x];let C=(s+x)*3;n.x+=y[x]*l[C++],n.y+=y[x]*l[C++],n.s+=y[x]*l[C]}return n};function NB(e,t){if(e._chunkDownloadsInProgress[t])return e._chunkDownloadsInProgress[t];let n,i=e._xysFileUrlTemplate;d(i)?n=i.getDerivedResource({templateValues:{0:t}}):n=new Ee({url:$t(`Assets/IAU2006_XYS/IAU2006_XYS_${t}.json`)});let o=n.fetchJson().then(function(r){e._chunkDownloadsInProgress[t]=!1;let s=e._samples,a=r.samples,c=t*e._samplesPerXysFile*3;for(let l=0,u=a.length;l<u;++l)s[c+l]=a[l]});return e._chunkDownloadsInProgress[t]=o,o}var uL=UB;var Hi={},kB={up:{south:"east",north:"west",west:"south",east:"north"},down:{south:"west",north:"east",west:"north",east:"south"},south:{up:"west",down:"east",west:"down",east:"up"},north:{up:"east",down:"west",west:"up",east:"down"},west:{up:"north",down:"south",north:"down",south:"up"},east:{up:"south",down:"north",north:"up",south:"down"}},sS={north:[-1,0,0],east:[0,1,0],up:[0,0,1],south:[1,0,0],west:[0,-1,0],down:[0,0,-1]},DB={},ol={east:new h,north:new h,up:new h,west:new h,south:new h,down:new h},nb=new h,ib=new h,ob=new h;Hi.localFrameToFixedFrameGenerator=function(e,t){if(!kB.hasOwnProperty(e)||!kB[e].hasOwnProperty(t))throw new fe("firstAxis and secondAxis must be east, north, up, west, south or down.");let n=kB[e][t],i,o=e+t;return d(DB[o])?i=DB[o]:(i=function(r,s,a){if(d(a)||(a=new A),h.equalsEpsilon(r,h.ZERO,W.EPSILON14))h.unpack(sS[e],0,nb),h.unpack(sS[t],0,ib),h.unpack(sS[n],0,ob);else if(W.equalsEpsilon(r.x,0,W.EPSILON14)&&W.equalsEpsilon(r.y,0,W.EPSILON14)){let c=W.sign(r.z);h.unpack(sS[e],0,nb),e!=="east"&&e!=="west"&&h.multiplyByScalar(nb,c,nb),h.unpack(sS[t],0,ib),t!=="east"&&t!=="west"&&h.multiplyByScalar(ib,c,ib),h.unpack(sS[n],0,ob),n!=="east"&&n!=="west"&&h.multiplyByScalar(ob,c,ob)}else{s=g(s,re.WGS84),s.geodeticSurfaceNormal(r,ol.up);let c=ol.up,l=ol.east;l.x=-r.y,l.y=r.x,l.z=0,h.normalize(l,ol.east),h.cross(c,l,ol.north),h.multiplyByScalar(ol.up,-1,ol.down),h.multiplyByScalar(ol.east,-1,ol.west),h.multiplyByScalar(ol.north,-1,ol.south),nb=ol[e],ib=ol[t],ob=ol[n]}return a[0]=nb.x,a[1]=nb.y,a[2]=nb.z,a[3]=0,a[4]=ib.x,a[5]=ib.y,a[6]=ib.z,a[7]=0,a[8]=ob.x,a[9]=ob.y,a[10]=ob.z,a[11]=0,a[12]=r.x,a[13]=r.y,a[14]=r.z,a[15]=1,a},DB[o]=i),i};Hi.eastNorthUpToFixedFrame=Hi.localFrameToFixedFrameGenerator("east","north");Hi.northEastDownToFixedFrame=Hi.localFrameToFixedFrameGenerator("north","east");Hi.northUpEastToFixedFrame=Hi.localFrameToFixedFrameGenerator("north","up");Hi.northWestUpToFixedFrame=Hi.localFrameToFixedFrameGenerator("north","west");var NCe=new Ae,UCe=new h(1,1,1),kCe=new A;Hi.headingPitchRollToFixedFrame=function(e,t,n,i,o){i=g(i,Hi.eastNorthUpToFixedFrame);let r=Ae.fromHeadingPitchRoll(t,NCe),s=A.fromTranslationQuaternionRotationScale(h.ZERO,r,UCe,kCe);return o=i(e,n,o),A.multiply(o,s,o)};var DCe=new A,BCe=new $;Hi.headingPitchRollQuaternion=function(e,t,n,i,o){let r=Hi.headingPitchRollToFixedFrame(e,t,n,i,DCe),s=A.getMatrix3(r,BCe);return Ae.fromRotationMatrix(s,o)};var YCe=new h(1,1,1),OCe=new h,$7=new A,KCe=new A,HCe=new $,zCe=new Ae;Hi.fixedFrameToHeadingPitchRoll=function(e,t,n,i){t=g(t,re.WGS84),n=g(n,Hi.eastNorthUpToFixedFrame),d(i)||(i=new Aa);let o=A.getTranslation(e,OCe);if(h.equals(o,h.ZERO))return i.heading=0,i.pitch=0,i.roll=0,i;let r=A.inverseTransformation(n(o,t,$7),$7),s=A.setScale(e,YCe,KCe);s=A.setTranslation(s,h.ZERO,s),r=A.multiply(r,s,r);let a=Ae.fromRotationMatrix(A.getMatrix3(r,HCe),zCe);return a=Ae.normalize(a,a),Aa.fromQuaternion(a,i)};var JCe=6*3600+41*60+50.54841,QCe=8640184812866e-6,jCe=.093104,qCe=-62e-7,$Ce=11772758384668e-32,e1e=72921158553e-15,t1e=W.TWO_PI/86400,FA=new te;Hi.computeTemeToPseudoFixedMatrix=function(e,t){FA=te.addSeconds(e,-te.computeTaiMinusUtc(e),FA);let n=FA.dayNumber,i=FA.secondsOfDay,o,r=n-2451545;i>=43200?o=(r+.5)/Qn.DAYS_PER_JULIAN_CENTURY:o=(r-.5)/Qn.DAYS_PER_JULIAN_CENTURY;let a=(JCe+o*(QCe+o*(jCe+o*qCe)))*t1e%W.TWO_PI,c=e1e+$Ce*(n-24515455e-1),l=(i+Qn.SECONDS_PER_DAY*.5)%Qn.SECONDS_PER_DAY,u=a+c*l,m=Math.cos(u),p=Math.sin(u);return d(t)?(t[0]=m,t[1]=-p,t[2]=0,t[3]=p,t[4]=m,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t):new $(m,p,0,-p,m,0,0,0,1)};Hi.iau2006XysData=new uL;Hi.earthOrientationParameters=dL.NONE;var OB=32.184,n1e=2451545;Hi.preloadIcrfFixed=function(e){let t=e.start.dayNumber,n=e.start.secondsOfDay+OB,i=e.stop.dayNumber,o=e.stop.secondsOfDay+OB;return Hi.iau2006XysData.preload(t,n,i,o)};Hi.computeIcrfToFixedMatrix=function(e,t){d(t)||(t=new $);let n=Hi.computeFixedToIcrfMatrix(e,t);if(d(n))return $.transpose(n,t)};var i1e=new Wg(0,0,0),o1e=new eb(0,0,0,0,0,0),BB=new $,YB=new $;Hi.computeFixedToIcrfMatrix=function(e,t){d(t)||(t=new $);let n=Hi.earthOrientationParameters.compute(e,o1e);if(!d(n))return;let i=e.dayNumber,o=e.secondsOfDay+OB,r=Hi.iau2006XysData.computeXysRadians(i,o,i1e);if(!d(r))return;let s=r.x+n.xPoleOffset,a=r.y+n.yPoleOffset,c=1/(1+Math.sqrt(1-s*s-a*a)),l=BB;l[0]=1-c*s*s,l[3]=-c*s*a,l[6]=s,l[1]=-c*s*a,l[4]=1-c*a*a,l[7]=a,l[2]=-s,l[5]=-a,l[8]=1-c*(s*s+a*a);let u=$.fromRotationZ(-r.s,YB),m=$.multiply(l,u,BB),p=e.dayNumber,y=e.secondsOfDay-te.computeTaiMinusUtc(e)+n.ut1MinusUtc,f=p-2451545,x=y/Qn.SECONDS_PER_DAY,_=.779057273264+x+.00273781191135448*(f+x);_=_%1*W.TWO_PI;let C=$.fromRotationZ(_,YB),V=$.multiply(m,C,BB),L=Math.cos(n.xPoleWander),Z=Math.cos(n.yPoleWander),G=Math.sin(n.xPoleWander),X=Math.sin(n.yPoleWander),P=i-n1e+o/Qn.SECONDS_PER_DAY;P/=36525;let v=-47e-6*P*W.RADIANS_PER_DEGREE/3600,F=Math.cos(v),M=Math.sin(v),b=YB;return b[0]=L*F,b[1]=L*M,b[2]=G,b[3]=-Z*M+X*G*F,b[4]=Z*F+X*G*M,b[5]=-X*L,b[6]=-X*M-Z*G*F,b[7]=X*F-Z*G*M,b[8]=Z*L,$.multiply(V,b,t)};var r1e=new se;Hi.pointToWindowCoordinates=function(e,t,n,i){return i=Hi.pointToGLWindowCoordinates(e,t,n,i),i.y=2*t[5]-i.y,i};Hi.pointToGLWindowCoordinates=function(e,t,n,i){d(i)||(i=new D);let o=r1e;return A.multiplyByVector(e,se.fromElements(n.x,n.y,n.z,1,o),o),se.multiplyByScalar(o,1/o.w,o),A.multiplyByVector(t,o,o),D.fromCartesian4(o,i)};var s1e=new h,a1e=new h,c1e=new h;Hi.rotationMatrixFromPositionVelocity=function(e,t,n,i){let o=g(n,re.WGS84).geodeticSurfaceNormal(e,s1e),r=h.cross(t,o,a1e);h.equalsEpsilon(r,h.ZERO,W.EPSILON6)&&(r=h.clone(h.UNIT_X,r));let s=h.cross(r,t,c1e);return h.normalize(s,s),h.cross(t,s,r),h.negate(r,r),h.normalize(r,r),d(i)||(i=new $),i[0]=t.x,i[1]=t.y,i[2]=t.z,i[3]=r.x,i[4]=r.y,i[5]=r.z,i[6]=s.x,i[7]=s.y,i[8]=s.z,i};var e6=new A(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1),t6=new he,n6=new h,l1e=new h,d1e=new $,KB=new A,i6=new A;Hi.basisTo2D=function(e,t,n){let i=A.getTranslation(t,l1e),o=e.ellipsoid,r=o.cartesianToCartographic(i,t6),s=e.project(r,n6);h.fromElements(s.z,s.x,s.y,s);let a=Hi.eastNorthUpToFixedFrame(i,o,KB),c=A.inverseTransformation(a,i6),l=A.getMatrix3(t,d1e),u=A.multiplyByMatrix3(c,l,n);return A.multiply(e6,u,n),A.setTranslation(n,s,n),n};Hi.wgs84To2DModelMatrix=function(e,t,n){let i=e.ellipsoid,o=Hi.eastNorthUpToFixedFrame(t,i,KB),r=A.inverseTransformation(o,i6),s=i.cartesianToCartographic(t,t6),a=e.project(s,n6);h.fromElements(a.z,a.x,a.y,a);let c=A.fromTranslation(a,KB);return A.multiply(e6,r,n),A.multiply(c,n,n),n};var vt=Hi;function HB(e){e=g(e,g.EMPTY_OBJECT),this.attributes=e.attributes,this.indices=e.indices,this.primitiveType=g(e.primitiveType,Fe.TRIANGLES),this.boundingSphere=e.boundingSphere,this.geometryType=g(e.geometryType,Kd.NONE),this.boundingSphereCV=e.boundingSphereCV,this.offsetAttribute=e.offsetAttribute}HB.computeNumberOfVertices=function(e){let t=-1;for(let n in e.attributes)if(e.attributes.hasOwnProperty(n)&&d(e.attributes[n])&&d(e.attributes[n].values)){let i=e.attributes[n];t=i.values.length/i.componentsPerAttribute}return t};var u1e=new he,m1e=new h,o6=new A,h1e=[new he,new he,new he],f1e=[new D,new D,new D],p1e=[new D,new D,new D],b1e=new h,y1e=new Ae,g1e=new A,x1e=new $i;HB._textureCoordinateRotationPoints=function(e,t,n,i){let o,r=de.center(i,u1e),s=he.toCartesian(r,n,m1e),a=vt.eastNorthUpToFixedFrame(s,n,o6),c=A.inverse(a,o6),l=f1e,u=h1e;u[0].longitude=i.west,u[0].latitude=i.south,u[1].longitude=i.west,u[1].latitude=i.north,u[2].longitude=i.east,u[2].latitude=i.south;let m=b1e;for(o=0;o<3;o++)he.toCartesian(u[o],n,m),m=A.multiplyByPointAsVector(c,m,m),l[o].x=m.x,l[o].y=m.y;let p=Ae.fromAxisAngle(h.UNIT_Z,-t,y1e),y=$.fromQuaternion(p,g1e),f=e.length,x=Number.POSITIVE_INFINITY,_=Number.POSITIVE_INFINITY,C=Number.NEGATIVE_INFINITY,V=Number.NEGATIVE_INFINITY;for(o=0;o<f;o++)m=A.multiplyByPointAsVector(c,e[o],m),m=$.multiplyByVector(y,m,m),x=Math.min(x,m.x),_=Math.min(_,m.y),C=Math.max(C,m.x),V=Math.max(V,m.y);let L=$i.fromRotation(t,x1e),Z=p1e;Z[0].x=x,Z[0].y=_,Z[1].x=x,Z[1].y=V,Z[2].x=C,Z[2].y=_;let G=l[0],X=l[2].x-G.x,P=l[1].y-G.y;for(o=0;o<3;o++){let R=Z[o];$i.multiplyByVector(L,R,R),R.x=(R.x-G.x)/X,R.y=(R.y-G.y)/P}let v=Z[0],F=Z[1],M=Z[2],b=new Array(6);return D.pack(v,b),D.pack(F,b,2),D.pack(M,b,4),b};var dt=HB;var sLt=T(S(),1);function _1e(e){e=g(e,g.EMPTY_OBJECT),this.componentDatatype=e.componentDatatype,this.componentsPerAttribute=e.componentsPerAttribute,this.normalize=g(e.normalize,!1),this.values=e.values}var Ze=_1e;var lLt=T(S(),1);function T1e(e){e=g(e,g.EMPTY_OBJECT),this.position=e.position,this.normal=e.normal,this.st=e.st,this.bitangent=e.bitangent,this.tangent=e.tangent,this.color=e.color}var hn=T1e;var uLt=T(S(),1),S1e={NONE:0,TOP:1,ALL:2},on=Object.freeze(S1e);var pLt=T(S(),1);function zr(e){e=g(e,g.EMPTY_OBJECT),this.position=g(e.position,!1),this.normal=g(e.normal,!1),this.st=g(e.st,!1),this.bitangent=g(e.bitangent,!1),this.tangent=g(e.tangent,!1),this.color=g(e.color,!1)}zr.POSITION_ONLY=Object.freeze(new zr({position:!0}));zr.POSITION_AND_NORMAL=Object.freeze(new zr({position:!0,normal:!0}));zr.POSITION_NORMAL_AND_ST=Object.freeze(new zr({position:!0,normal:!0,st:!0}));zr.POSITION_AND_ST=Object.freeze(new zr({position:!0,st:!0}));zr.POSITION_AND_COLOR=Object.freeze(new zr({position:!0,color:!0}));zr.ALL=Object.freeze(new zr({position:!0,normal:!0,st:!0,tangent:!0,bitangent:!0}));zr.DEFAULT=zr.POSITION_NORMAL_AND_ST;zr.packedLength=6;zr.pack=function(e,t,n){return n=g(n,0),t[n++]=e.position?1:0,t[n++]=e.normal?1:0,t[n++]=e.st?1:0,t[n++]=e.tangent?1:0,t[n++]=e.bitangent?1:0,t[n]=e.color?1:0,t};zr.unpack=function(e,t,n){return t=g(t,0),d(n)||(n=new zr),n.position=e[t++]===1,n.normal=e[t++]===1,n.st=e[t++]===1,n.tangent=e[t++]===1,n.bitangent=e[t++]===1,n.color=e[t]===1,n};zr.clone=function(e,t){if(d(e))return d(t)||(t=new zr),t.position=e.position,t.normal=e.normal,t.st=e.st,t.tangent=e.tangent,t.bitangent=e.bitangent,t.color=e.color,t};var We=zr;var C1e=new h;function Ol(e){e=g(e,g.EMPTY_OBJECT);let t=e.minimum,n=e.maximum,i=g(e.vertexFormat,We.DEFAULT);this._minimum=h.clone(t),this._maximum=h.clone(n),this._vertexFormat=i,this._offsetAttribute=e.offsetAttribute,this._workerName="createBoxGeometry"}Ol.fromDimensions=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.dimensions,n=h.multiplyByScalar(t,.5,new h);return new Ol({minimum:h.negate(n,new h),maximum:n,vertexFormat:e.vertexFormat,offsetAttribute:e.offsetAttribute})};Ol.fromAxisAlignedBoundingBox=function(e){return new Ol({minimum:e.minimum,maximum:e.maximum})};Ol.packedLength=2*h.packedLength+We.packedLength+1;Ol.pack=function(e,t,n){return n=g(n,0),h.pack(e._minimum,t,n),h.pack(e._maximum,t,n+h.packedLength),We.pack(e._vertexFormat,t,n+2*h.packedLength),t[n+2*h.packedLength+We.packedLength]=g(e._offsetAttribute,-1),t};var s6=new h,a6=new h,c6=new We,r6={minimum:s6,maximum:a6,vertexFormat:c6,offsetAttribute:void 0};Ol.unpack=function(e,t,n){t=g(t,0);let i=h.unpack(e,t,s6),o=h.unpack(e,t+h.packedLength,a6),r=We.unpack(e,t+2*h.packedLength,c6),s=e[t+2*h.packedLength+We.packedLength];return d(n)?(n._minimum=h.clone(i,n._minimum),n._maximum=h.clone(o,n._maximum),n._vertexFormat=We.clone(r,n._vertexFormat),n._offsetAttribute=s===-1?void 0:s,n):(r6.offsetAttribute=s===-1?void 0:s,new Ol(r6))};Ol.createGeometry=function(e){let t=e._minimum,n=e._maximum,i=e._vertexFormat;if(h.equals(t,n))return;let o=new hn,r,s;if(i.position&&(i.st||i.normal||i.tangent||i.bitangent)){if(i.position&&(s=new Float64Array(6*4*3),s[0]=t.x,s[1]=t.y,s[2]=n.z,s[3]=n.x,s[4]=t.y,s[5]=n.z,s[6]=n.x,s[7]=n.y,s[8]=n.z,s[9]=t.x,s[10]=n.y,s[11]=n.z,s[12]=t.x,s[13]=t.y,s[14]=t.z,s[15]=n.x,s[16]=t.y,s[17]=t.z,s[18]=n.x,s[19]=n.y,s[20]=t.z,s[21]=t.x,s[22]=n.y,s[23]=t.z,s[24]=n.x,s[25]=t.y,s[26]=t.z,s[27]=n.x,s[28]=n.y,s[29]=t.z,s[30]=n.x,s[31]=n.y,s[32]=n.z,s[33]=n.x,s[34]=t.y,s[35]=n.z,s[36]=t.x,s[37]=t.y,s[38]=t.z,s[39]=t.x,s[40]=n.y,s[41]=t.z,s[42]=t.x,s[43]=n.y,s[44]=n.z,s[45]=t.x,s[46]=t.y,s[47]=n.z,s[48]=t.x,s[49]=n.y,s[50]=t.z,s[51]=n.x,s[52]=n.y,s[53]=t.z,s[54]=n.x,s[55]=n.y,s[56]=n.z,s[57]=t.x,s[58]=n.y,s[59]=n.z,s[60]=t.x,s[61]=t.y,s[62]=t.z,s[63]=n.x,s[64]=t.y,s[65]=t.z,s[66]=n.x,s[67]=t.y,s[68]=n.z,s[69]=t.x,s[70]=t.y,s[71]=n.z,o.position=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:s})),i.normal){let l=new Float32Array(72);l[0]=0,l[1]=0,l[2]=1,l[3]=0,l[4]=0,l[5]=1,l[6]=0,l[7]=0,l[8]=1,l[9]=0,l[10]=0,l[11]=1,l[12]=0,l[13]=0,l[14]=-1,l[15]=0,l[16]=0,l[17]=-1,l[18]=0,l[19]=0,l[20]=-1,l[21]=0,l[22]=0,l[23]=-1,l[24]=1,l[25]=0,l[26]=0,l[27]=1,l[28]=0,l[29]=0,l[30]=1,l[31]=0,l[32]=0,l[33]=1,l[34]=0,l[35]=0,l[36]=-1,l[37]=0,l[38]=0,l[39]=-1,l[40]=0,l[41]=0,l[42]=-1,l[43]=0,l[44]=0,l[45]=-1,l[46]=0,l[47]=0,l[48]=0,l[49]=1,l[50]=0,l[51]=0,l[52]=1,l[53]=0,l[54]=0,l[55]=1,l[56]=0,l[57]=0,l[58]=1,l[59]=0,l[60]=0,l[61]=-1,l[62]=0,l[63]=0,l[64]=-1,l[65]=0,l[66]=0,l[67]=-1,l[68]=0,l[69]=0,l[70]=-1,l[71]=0,o.normal=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:l})}if(i.st){let l=new Float32Array(48);l[0]=0,l[1]=0,l[2]=1,l[3]=0,l[4]=1,l[5]=1,l[6]=0,l[7]=1,l[8]=1,l[9]=0,l[10]=0,l[11]=0,l[12]=0,l[13]=1,l[14]=1,l[15]=1,l[16]=0,l[17]=0,l[18]=1,l[19]=0,l[20]=1,l[21]=1,l[22]=0,l[23]=1,l[24]=1,l[25]=0,l[26]=0,l[27]=0,l[28]=0,l[29]=1,l[30]=1,l[31]=1,l[32]=1,l[33]=0,l[34]=0,l[35]=0,l[36]=0,l[37]=1,l[38]=1,l[39]=1,l[40]=0,l[41]=0,l[42]=1,l[43]=0,l[44]=1,l[45]=1,l[46]=0,l[47]=1,o.st=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:l})}if(i.tangent){let l=new Float32Array(72);l[0]=1,l[1]=0,l[2]=0,l[3]=1,l[4]=0,l[5]=0,l[6]=1,l[7]=0,l[8]=0,l[9]=1,l[10]=0,l[11]=0,l[12]=-1,l[13]=0,l[14]=0,l[15]=-1,l[16]=0,l[17]=0,l[18]=-1,l[19]=0,l[20]=0,l[21]=-1,l[22]=0,l[23]=0,l[24]=0,l[25]=1,l[26]=0,l[27]=0,l[28]=1,l[29]=0,l[30]=0,l[31]=1,l[32]=0,l[33]=0,l[34]=1,l[35]=0,l[36]=0,l[37]=-1,l[38]=0,l[39]=0,l[40]=-1,l[41]=0,l[42]=0,l[43]=-1,l[44]=0,l[45]=0,l[46]=-1,l[47]=0,l[48]=-1,l[49]=0,l[50]=0,l[51]=-1,l[52]=0,l[53]=0,l[54]=-1,l[55]=0,l[56]=0,l[57]=-1,l[58]=0,l[59]=0,l[60]=1,l[61]=0,l[62]=0,l[63]=1,l[64]=0,l[65]=0,l[66]=1,l[67]=0,l[68]=0,l[69]=1,l[70]=0,l[71]=0,o.tangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:l})}if(i.bitangent){let l=new Float32Array(72);l[0]=0,l[1]=1,l[2]=0,l[3]=0,l[4]=1,l[5]=0,l[6]=0,l[7]=1,l[8]=0,l[9]=0,l[10]=1,l[11]=0,l[12]=0,l[13]=1,l[14]=0,l[15]=0,l[16]=1,l[17]=0,l[18]=0,l[19]=1,l[20]=0,l[21]=0,l[22]=1,l[23]=0,l[24]=0,l[25]=0,l[26]=1,l[27]=0,l[28]=0,l[29]=1,l[30]=0,l[31]=0,l[32]=1,l[33]=0,l[34]=0,l[35]=1,l[36]=0,l[37]=0,l[38]=1,l[39]=0,l[40]=0,l[41]=1,l[42]=0,l[43]=0,l[44]=1,l[45]=0,l[46]=0,l[47]=1,l[48]=0,l[49]=0,l[50]=1,l[51]=0,l[52]=0,l[53]=1,l[54]=0,l[55]=0,l[56]=1,l[57]=0,l[58]=0,l[59]=1,l[60]=0,l[61]=0,l[62]=1,l[63]=0,l[64]=0,l[65]=1,l[66]=0,l[67]=0,l[68]=1,l[69]=0,l[70]=0,l[71]=1,o.bitangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:l})}r=new Uint16Array(6*2*3),r[0]=0,r[1]=1,r[2]=2,r[3]=0,r[4]=2,r[5]=3,r[6]=6,r[7]=5,r[8]=4,r[9]=7,r[10]=6,r[11]=4,r[12]=8,r[13]=9,r[14]=10,r[15]=8,r[16]=10,r[17]=11,r[18]=14,r[19]=13,r[20]=12,r[21]=15,r[22]=14,r[23]=12,r[24]=18,r[25]=17,r[26]=16,r[27]=19,r[28]=18,r[29]=16,r[30]=20,r[31]=21,r[32]=22,r[33]=20,r[34]=22,r[35]=23}else s=new Float64Array(8*3),s[0]=t.x,s[1]=t.y,s[2]=t.z,s[3]=n.x,s[4]=t.y,s[5]=t.z,s[6]=n.x,s[7]=n.y,s[8]=t.z,s[9]=t.x,s[10]=n.y,s[11]=t.z,s[12]=t.x,s[13]=t.y,s[14]=n.z,s[15]=n.x,s[16]=t.y,s[17]=n.z,s[18]=n.x,s[19]=n.y,s[20]=n.z,s[21]=t.x,s[22]=n.y,s[23]=n.z,o.position=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:s}),r=new Uint16Array(6*2*3),r[0]=4,r[1]=5,r[2]=6,r[3]=4,r[4]=6,r[5]=7,r[6]=1,r[7]=0,r[8]=3,r[9]=1,r[10]=3,r[11]=2,r[12]=1,r[13]=6,r[14]=5,r[15]=1,r[16]=2,r[17]=6,r[18]=2,r[19]=3,r[20]=7,r[21]=2,r[22]=7,r[23]=6,r[24]=3,r[25]=0,r[26]=4,r[27]=3,r[28]=4,r[29]=7,r[30]=0,r[31]=1,r[32]=5,r[33]=0,r[34]=5,r[35]=4;let a=h.subtract(n,t,C1e),c=h.magnitude(a)*.5;if(d(e._offsetAttribute)){let l=s.length,u=e._offsetAttribute===on.NONE?0:1,m=new Uint8Array(l/3).fill(u);o.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:m})}return new dt({attributes:o,indices:r,primitiveType:Fe.TRIANGLES,boundingSphere:new ce(h.ZERO,c),offsetAttribute:e._offsetAttribute})};var zB;Ol.getUnitBox=function(){return d(zB)||(zB=Ol.createGeometry(Ol.fromDimensions({dimensions:new h(1,1,1),vertexFormat:We.POSITION_ONLY}))),zB};var rl=Ol;var ULt=T(S(),1);var V1e=new h;function Eh(e){e=g(e,g.EMPTY_OBJECT);let t=e.minimum,n=e.maximum;this._min=h.clone(t),this._max=h.clone(n),this._offsetAttribute=e.offsetAttribute,this._workerName="createBoxOutlineGeometry"}Eh.fromDimensions=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.dimensions,n=h.multiplyByScalar(t,.5,new h);return new Eh({minimum:h.negate(n,new h),maximum:n,offsetAttribute:e.offsetAttribute})};Eh.fromAxisAlignedBoundingBox=function(e){return new Eh({minimum:e.minimum,maximum:e.maximum})};Eh.packedLength=2*h.packedLength+1;Eh.pack=function(e,t,n){return n=g(n,0),h.pack(e._min,t,n),h.pack(e._max,t,n+h.packedLength),t[n+h.packedLength*2]=g(e._offsetAttribute,-1),t};var d6=new h,u6=new h,l6={minimum:d6,maximum:u6,offsetAttribute:void 0};Eh.unpack=function(e,t,n){t=g(t,0);let i=h.unpack(e,t,d6),o=h.unpack(e,t+h.packedLength,u6),r=e[t+h.packedLength*2];return d(n)?(n._min=h.clone(i,n._min),n._max=h.clone(o,n._max),n._offsetAttribute=r===-1?void 0:r,n):(l6.offsetAttribute=r===-1?void 0:r,new Eh(l6))};Eh.createGeometry=function(e){let t=e._min,n=e._max;if(h.equals(t,n))return;let i=new hn,o=new Uint16Array(12*2),r=new Float64Array(8*3);r[0]=t.x,r[1]=t.y,r[2]=t.z,r[3]=n.x,r[4]=t.y,r[5]=t.z,r[6]=n.x,r[7]=n.y,r[8]=t.z,r[9]=t.x,r[10]=n.y,r[11]=t.z,r[12]=t.x,r[13]=t.y,r[14]=n.z,r[15]=n.x,r[16]=t.y,r[17]=n.z,r[18]=n.x,r[19]=n.y,r[20]=n.z,r[21]=t.x,r[22]=n.y,r[23]=n.z,i.position=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:r}),o[0]=4,o[1]=5,o[2]=5,o[3]=6,o[4]=6,o[5]=7,o[6]=7,o[7]=4,o[8]=0,o[9]=1,o[10]=1,o[11]=2,o[12]=2,o[13]=3,o[14]=3,o[15]=0,o[16]=0,o[17]=4,o[18]=1,o[19]=5,o[20]=2,o[21]=6,o[22]=3,o[23]=7;let s=h.subtract(n,t,V1e),a=h.magnitude(s)*.5;if(d(e._offsetAttribute)){let c=r.length,l=e._offsetAttribute===on.NONE?0:1,u=new Uint8Array(c/3).fill(l);i.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:u})}return new dt({attributes:i,indices:o,primitiveType:Fe.LINES,boundingSphere:new ce(h.ZERO,a),offsetAttribute:e._offsetAttribute})};var im=Eh;var KLt=T(S(),1);function aS(e,t,n,i){e=g(e,1),t=g(t,1),n=g(n,1),i=g(i,1),this.value=new Uint8Array([Y.floatToByte(e),Y.floatToByte(t),Y.floatToByte(n),Y.floatToByte(i)])}Object.defineProperties(aS.prototype,{componentDatatype:{get:function(){return Q.UNSIGNED_BYTE}},componentsPerAttribute:{get:function(){return 4}},normalize:{get:function(){return!0}}});aS.fromColor=function(e){return new aS(e.red,e.green,e.blue,e.alpha)};aS.toValue=function(e,t){return d(t)?e.toBytes(t):new Uint8Array(e.toBytes())};aS.equals=function(e,t){return e===t||d(e)&&d(t)&&e.value[0]===t.value[0]&&e.value[1]===t.value[1]&&e.value[2]===t.value[2]&&e.value[3]===t.value[3]};var Ut=aS;var jLt=T(S(),1);function mL(e,t){e=g(e,0),t=g(t,Number.MAX_VALUE),this.value=new Float32Array([e,t])}Object.defineProperties(mL.prototype,{componentDatatype:{get:function(){return Q.FLOAT}},componentsPerAttribute:{get:function(){return 2}},normalize:{get:function(){return!1}}});mL.fromDistanceDisplayCondition=function(e){return new mL(e.near,e.far)};mL.toValue=function(e,t){return d(t)?(t[0]=e.near,t[1]=e.far,t):new Float32Array([e.near,e.far])};var Un=mL;var tRt=T(S(),1);function L1e(e){e=g(e,g.EMPTY_OBJECT),this.geometry=e.geometry,this.modelMatrix=A.clone(g(e.modelMatrix,A.IDENTITY)),this.id=e.id,this.pickPrimitive=e.pickPrimitive,this.attributes=g(e.attributes,{}),this.westHemisphereGeometry=void 0,this.eastHemisphereGeometry=void 0}var _t=L1e;var uRt=T(S(),1);var aRt=T(S(),1);function Bo(e){e=g(e,g.EMPTY_OBJECT),this.start=d(e.start)?te.clone(e.start):new te,this.stop=d(e.stop)?te.clone(e.stop):new te,this.data=e.data,this.isStartIncluded=g(e.isStartIncluded,!0),this.isStopIncluded=g(e.isStopIncluded,!0)}Object.defineProperties(Bo.prototype,{isEmpty:{get:function(){let e=te.compare(this.stop,this.start);return e<0||e===0&&(!this.isStartIncluded||!this.isStopIncluded)}}});var cS={start:void 0,stop:void 0,isStartIncluded:void 0,isStopIncluded:void 0,data:void 0};Bo.fromIso8601=function(e,t){let n=e.iso8601.split("/");if(n.length!==2)throw new fe("options.iso8601 is an invalid ISO 8601 interval.");let i=te.fromIso8601(n[0]),o=te.fromIso8601(n[1]),r=g(e.isStartIncluded,!0),s=g(e.isStopIncluded,!0),a=e.data;return d(t)?(t.start=i,t.stop=o,t.isStartIncluded=r,t.isStopIncluded=s,t.data=a,t):(cS.start=i,cS.stop=o,cS.isStartIncluded=r,cS.isStopIncluded=s,cS.data=a,new Bo(cS))};Bo.toIso8601=function(e,t){return`${te.toIso8601(e.start,t)}/${te.toIso8601(e.stop,t)}`};Bo.clone=function(e,t){if(d(e))return d(t)?(t.start=e.start,t.stop=e.stop,t.isStartIncluded=e.isStartIncluded,t.isStopIncluded=e.isStopIncluded,t.data=e.data,t):new Bo(e)};Bo.equals=function(e,t,n){return e===t||d(e)&&d(t)&&(e.isEmpty&&t.isEmpty||e.isStartIncluded===t.isStartIncluded&&e.isStopIncluded===t.isStopIncluded&&te.equals(e.start,t.start)&&te.equals(e.stop,t.stop)&&(e.data===t.data||d(n)&&n(e.data,t.data)))};Bo.equalsEpsilon=function(e,t,n,i){return n=g(n,0),e===t||d(e)&&d(t)&&(e.isEmpty&&t.isEmpty||e.isStartIncluded===t.isStartIncluded&&e.isStopIncluded===t.isStopIncluded&&te.equalsEpsilon(e.start,t.start,n)&&te.equalsEpsilon(e.stop,t.stop,n)&&(e.data===t.data||d(i)&&i(e.data,t.data)))};Bo.intersect=function(e,t,n,i){if(!d(t))return Bo.clone(Bo.EMPTY,n);let o=e.start,r=e.stop,s=t.start,a=t.stop,c=te.greaterThanOrEquals(s,o)&&te.greaterThanOrEquals(r,s),l=!c&&te.lessThanOrEquals(s,o)&&te.lessThanOrEquals(o,a);if(!c&&!l)return Bo.clone(Bo.EMPTY,n);let u=e.isStartIncluded,m=e.isStopIncluded,p=t.isStartIncluded,y=t.isStopIncluded,f=te.lessThan(r,a);return d(n)||(n=new Bo),n.start=c?s:o,n.isStartIncluded=u&&p||!te.equals(s,o)&&(c&&p||l&&u),n.stop=f?r:a,n.isStopIncluded=f?m:m&&y||!te.equals(a,r)&&y,n.data=d(i)?i(e.data,t.data):e.data,n};Bo.contains=function(e,t){if(e.isEmpty)return!1;let n=te.compare(e.start,t);if(n===0)return e.isStartIncluded;let i=te.compare(t,e.stop);return i===0?e.isStopIncluded:n<0&&i<0};Bo.prototype.clone=function(e){return Bo.clone(this,e)};Bo.prototype.equals=function(e,t){return Bo.equals(this,e,t)};Bo.prototype.equalsEpsilon=function(e,t,n){return Bo.equalsEpsilon(this,e,t,n)};Bo.prototype.toString=function(){return Bo.toIso8601(this)};Bo.EMPTY=Object.freeze(new Bo({start:new te,stop:new te,isStartIncluded:!1,isStopIncluded:!1}));var Tn=Bo;var m6=Object.freeze(te.fromIso8601("0000-01-01T00:00:00Z")),h6=Object.freeze(te.fromIso8601("9999-12-31T24:00:00Z")),R1e=Object.freeze(new Tn({start:m6,stop:h6})),Z1e={MINIMUM_VALUE:m6,MAXIMUM_VALUE:h6,MAXIMUM_INTERVAL:R1e},Be=Z1e;var bRt=T(S(),1);function hL(e,t,n){e=g(e,0),t=g(t,0),n=g(n,0),this.value=new Float32Array([e,t,n])}Object.defineProperties(hL.prototype,{componentDatatype:{get:function(){return Q.FLOAT}},componentsPerAttribute:{get:function(){return 3}},normalize:{get:function(){return!1}}});hL.fromCartesian3=function(e){return new hL(e.x,e.y,e.z)};hL.toValue=function(e,t){return d(t)||(t=new Float32Array([e.x,e.y,e.z])),t[0]=e.x,t[1]=e.y,t[2]=e.z,t};var zi=hL;var TRt=T(S(),1);function AA(e){e=g(e,!0),this.value=AA.toValue(e)}Object.defineProperties(AA.prototype,{componentDatatype:{get:function(){return Q.UNSIGNED_BYTE}},componentsPerAttribute:{get:function(){return 1}},normalize:{get:function(){return!1}}});AA.toValue=function(e,t){return d(t)?(t[0]=e,t):new Uint8Array([e])};var gn=AA;var uXt=T(S(),1);var CRt=T(S(),1),fL=`in vec3 v_positionEC;
  82. in vec3 v_normalEC;
  83. in vec3 v_tangentEC;
  84. in vec3 v_bitangentEC;
  85. in vec2 v_st;
  86. void main()
  87. {
  88. vec3 positionToEyeEC = -v_positionEC;
  89. mat3 tangentToEyeMatrix = czm_tangentToEyeSpaceMatrix(v_normalEC, v_tangentEC, v_bitangentEC);
  90. vec3 normalEC = normalize(v_normalEC);
  91. #ifdef FACE_FORWARD
  92. normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);
  93. #endif
  94. czm_materialInput materialInput;
  95. materialInput.normalEC = normalEC;
  96. materialInput.tangentToEyeMatrix = tangentToEyeMatrix;
  97. materialInput.positionToEyeEC = positionToEyeEC;
  98. materialInput.st = v_st;
  99. czm_material material = czm_getMaterial(materialInput);
  100. #ifdef FLAT
  101. out_FragColor = vec4(material.diffuse + material.emission, material.alpha);
  102. #else
  103. out_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);
  104. #endif
  105. }
  106. `;var LRt=T(S(),1),pL=`in vec3 position3DHigh;
  107. in vec3 position3DLow;
  108. in vec3 normal;
  109. in vec3 tangent;
  110. in vec3 bitangent;
  111. in vec2 st;
  112. in float batchId;
  113. out vec3 v_positionEC;
  114. out vec3 v_normalEC;
  115. out vec3 v_tangentEC;
  116. out vec3 v_bitangentEC;
  117. out vec2 v_st;
  118. void main()
  119. {
  120. vec4 p = czm_computePosition();
  121. v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates
  122. v_normalEC = czm_normal * normal; // normal in eye coordinates
  123. v_tangentEC = czm_normal * tangent; // tangent in eye coordinates
  124. v_bitangentEC = czm_normal * bitangent; // bitangent in eye coordinates
  125. v_st = st;
  126. gl_Position = czm_modelViewProjectionRelativeToEye * p;
  127. }
  128. `;var ZRt=T(S(),1),bL=`in vec3 v_positionEC;
  129. in vec3 v_normalEC;
  130. void main()
  131. {
  132. vec3 positionToEyeEC = -v_positionEC;
  133. vec3 normalEC = normalize(v_normalEC);
  134. #ifdef FACE_FORWARD
  135. normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);
  136. #endif
  137. czm_materialInput materialInput;
  138. materialInput.normalEC = normalEC;
  139. materialInput.positionToEyeEC = positionToEyeEC;
  140. czm_material material = czm_getMaterial(materialInput);
  141. #ifdef FLAT
  142. out_FragColor = vec4(material.diffuse + material.emission, material.alpha);
  143. #else
  144. out_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);
  145. #endif
  146. }
  147. `;var ERt=T(S(),1),yL=`in vec3 position3DHigh;
  148. in vec3 position3DLow;
  149. in vec3 normal;
  150. in float batchId;
  151. out vec3 v_positionEC;
  152. out vec3 v_normalEC;
  153. void main()
  154. {
  155. vec4 p = czm_computePosition();
  156. v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates
  157. v_normalEC = czm_normal * normal; // normal in eye coordinates
  158. gl_Position = czm_modelViewProjectionRelativeToEye * p;
  159. }
  160. `;var IRt=T(S(),1),gL=`in vec3 v_positionEC;
  161. in vec3 v_normalEC;
  162. in vec2 v_st;
  163. void main()
  164. {
  165. vec3 positionToEyeEC = -v_positionEC;
  166. vec3 normalEC = normalize(v_normalEC);
  167. #ifdef FACE_FORWARD
  168. normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);
  169. #endif
  170. czm_materialInput materialInput;
  171. materialInput.normalEC = normalEC;
  172. materialInput.positionToEyeEC = positionToEyeEC;
  173. materialInput.st = v_st;
  174. czm_material material = czm_getMaterial(materialInput);
  175. #ifdef FLAT
  176. out_FragColor = vec4(material.diffuse + material.emission, material.alpha);
  177. #else
  178. out_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);
  179. #endif
  180. }
  181. `;var PRt=T(S(),1),xL=`in vec3 position3DHigh;
  182. in vec3 position3DLow;
  183. in vec3 normal;
  184. in vec2 st;
  185. in float batchId;
  186. out vec3 v_positionEC;
  187. out vec3 v_normalEC;
  188. out vec2 v_st;
  189. void main()
  190. {
  191. vec4 p = czm_computePosition();
  192. v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates
  193. v_normalEC = czm_normal * normal; // normal in eye coordinates
  194. v_st = st;
  195. gl_Position = czm_modelViewProjectionRelativeToEye * p;
  196. }
  197. `;var eZt=T(S(),1);var BRt=T(S(),1);var FRt=T(S(),1);var G1e={ADD:ne.FUNC_ADD,SUBTRACT:ne.FUNC_SUBTRACT,REVERSE_SUBTRACT:ne.FUNC_REVERSE_SUBTRACT,MIN:ne.MIN,MAX:ne.MAX},da=Object.freeze(G1e);var NRt=T(S(),1);var E1e={ZERO:ne.ZERO,ONE:ne.ONE,SOURCE_COLOR:ne.SRC_COLOR,ONE_MINUS_SOURCE_COLOR:ne.ONE_MINUS_SRC_COLOR,DESTINATION_COLOR:ne.DST_COLOR,ONE_MINUS_DESTINATION_COLOR:ne.ONE_MINUS_DST_COLOR,SOURCE_ALPHA:ne.SRC_ALPHA,ONE_MINUS_SOURCE_ALPHA:ne.ONE_MINUS_SRC_ALPHA,DESTINATION_ALPHA:ne.DST_ALPHA,ONE_MINUS_DESTINATION_ALPHA:ne.ONE_MINUS_DST_ALPHA,CONSTANT_COLOR:ne.CONSTANT_COLOR,ONE_MINUS_CONSTANT_COLOR:ne.ONE_MINUS_CONSTANT_COLOR,CONSTANT_ALPHA:ne.CONSTANT_ALPHA,ONE_MINUS_CONSTANT_ALPHA:ne.ONE_MINUS_CONSTANT_ALPHA,SOURCE_ALPHA_SATURATE:ne.SRC_ALPHA_SATURATE},_o=Object.freeze(E1e);var X1e={DISABLED:Object.freeze({enabled:!1}),ALPHA_BLEND:Object.freeze({enabled:!0,equationRgb:da.ADD,equationAlpha:da.ADD,functionSourceRgb:_o.SOURCE_ALPHA,functionSourceAlpha:_o.ONE,functionDestinationRgb:_o.ONE_MINUS_SOURCE_ALPHA,functionDestinationAlpha:_o.ONE_MINUS_SOURCE_ALPHA}),PRE_MULTIPLIED_ALPHA_BLEND:Object.freeze({enabled:!0,equationRgb:da.ADD,equationAlpha:da.ADD,functionSourceRgb:_o.ONE,functionSourceAlpha:_o.ONE,functionDestinationRgb:_o.ONE_MINUS_SOURCE_ALPHA,functionDestinationAlpha:_o.ONE_MINUS_SOURCE_ALPHA}),ADDITIVE_BLEND:Object.freeze({enabled:!0,equationRgb:da.ADD,equationAlpha:da.ADD,functionSourceRgb:_o.SOURCE_ALPHA,functionSourceAlpha:_o.ONE,functionDestinationRgb:_o.ONE,functionDestinationAlpha:_o.ONE})},dn=Object.freeze(X1e);var KRt=T(S(),1);var I1e={FRONT:ne.FRONT,BACK:ne.BACK,FRONT_AND_BACK:ne.FRONT_AND_BACK},bi=Object.freeze(I1e);function lS(e){e=g(e,g.EMPTY_OBJECT),this.material=e.material,this.translucent=g(e.translucent,!0),this._vertexShaderSource=e.vertexShaderSource,this._fragmentShaderSource=e.fragmentShaderSource,this._renderState=e.renderState,this._closed=g(e.closed,!1)}Object.defineProperties(lS.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}}});lS.prototype.getFragmentShaderSource=function(){let e=[];return this.flat&&e.push("#define FLAT"),this.faceForward&&e.push("#define FACE_FORWARD"),d(this.material)&&e.push(this.material.shaderSource),e.push(this.fragmentShaderSource),e.join(`
  198. `)};lS.prototype.isTranslucent=function(){return d(this.material)&&this.material.isTranslucent()||!d(this.material)&&this.translucent};lS.prototype.getRenderState=function(){let e=this.isTranslucent(),t=Ke(this.renderState,!1);return e?(t.depthMask=!1,t.blending=dn.ALPHA_BLEND):t.depthMask=!0,t};lS.getDefaultRenderState=function(e,t,n){let i={depthTest:{enabled:!0}};return e&&(i.depthMask=!1,i.blending=dn.ALPHA_BLEND),t&&(i.cull={enabled:!0,face:bi.BACK}),d(n)&&(i=xt(n,i,!0)),i};var to=lS;var qEt=T(S(),1);var nZt=T(S(),1);function W1e(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}var Yn=W1e;var ZZt=T(S(),1);var CZt=T(S(),1);var rZt=T(S(),1);function dS(e,t,n,i,o){this._format=e,this._datatype=t,this._width=n,this._height=i,this._buffer=o}Object.defineProperties(dS.prototype,{internalFormat:{get:function(){return this._format}},pixelDatatype:{get:function(){return this._datatype}},width:{get:function(){return this._width}},height:{get:function(){return this._height}},bufferView:{get:function(){return this._buffer}}});dS.clone=function(e){if(d(e))return new dS(e._format,e._datatype,e._width,e._height,e._buffer)};dS.prototype.clone=function(){return dS.clone(this)};var _L=dS;var yZt=T(S(),1),f6=T(Bl(),1);function p6(){if(!d(ua._canTransferArrayBuffer)){let e=jB("transferTypedArrayTest");e.postMessage=g(e.webkitPostMessage,e.postMessage);let t=99,n=new Int8Array([t]);try{e.postMessage({array:n},[n.buffer])}catch{return ua._canTransferArrayBuffer=!1,ua._canTransferArrayBuffer}ua._canTransferArrayBuffer=new Promise(i=>{e.onmessage=function(o){let r=o.data.array,s=d(r)&&r[0]===t;i(s),e.terminate(),ua._canTransferArrayBuffer=s}})}return ua._canTransferArrayBuffer}var QB=new ye;function JB(e){let t;try{t=new Blob([e],{type:"application/javascript"})}catch{let o=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,r=new o;r.append(e),t=r.getBlob("application/javascript")}return(window.URL||window.webkitURL).createObjectURL(t)}function jB(e){let t=new f6.default(e),n=t.scheme().length!==0&&t.fragment().length===0,i={},o;if(Lg(e)){let s=`importScripts("${e}");`;return o=JB(s),new Worker(o,i)}let r=e.replace(/\.js$/,"");if(!n&&typeof CESIUM_WORKERS<"u"){let s=`
  199. importScripts("${JB(CESIUM_WORKERS)}");
  200. CesiumWorkers["${r}"]();
  201. `;return o=JB(s),new Worker(o,i)}if(o=e,n||(o=$t(`${ua._workerModulePrefix+r}.js`)),!Mt.supportsEsmWebWorkers())throw new me("This browser is not supported. Please update your browser to continue.");return i.type="module",new Worker(o,i)}async function P1e(e,t){let n={modulePath:void 0,wasmBinaryFile:void 0,wasmBinary:void 0};if(!Mt.supportsWebAssembly()){if(!d(t.fallbackModulePath))throw new me(`This browser does not support Web Assembly, and no backup module was provided for ${e._workerPath}`);return n.modulePath=$t(t.fallbackModulePath),n}n.wasmBinaryFile=$t(t.wasmBinaryFile);let i=await Ee.fetchArrayBuffer({url:n.wasmBinaryFile});return n.wasmBinary=i,n}function ua(e,t){this._workerPath=e,this._maximumActiveTasks=g(t,Number.POSITIVE_INFINITY),this._activeTasks=0,this._nextID=0,this._webAssemblyPromise=void 0}var v1e=(e,t,n,i)=>{let o=({data:r})=>{if(r.id===t){if(d(r.error)){let s=r.error;s.name==="RuntimeError"?(s=new me(r.error.message),s.stack=r.error.stack):s.name==="DeveloperError"?(s=new fe(r.error.message),s.stack=r.error.stack):s.name==="Error"&&(s=new Error(r.error.message),s.stack=r.error.stack),QB.raiseEvent(s),i(s)}else QB.raiseEvent(),n(r.result);e.removeEventListener("message",o)}};return o},w1e=[];async function F1e(e,t,n){let i=await Promise.resolve(p6());d(n)?i||(n.length=0):n=w1e;let o=e._nextID++,r=new Promise((s,a)=>{e._worker.addEventListener("message",v1e(e._worker,o,s,a))});return e._worker.postMessage({id:o,baseUrl:$t.getCesiumBaseUrl().url,parameters:t,canTransferArrayBuffer:i},n),r}async function A1e(e,t,n){++e._activeTasks;try{let i=await F1e(e,t,n);return--e._activeTasks,i}catch(i){throw--e._activeTasks,i}}ua.prototype.scheduleTask=function(e,t){if(d(this._worker)||(this._worker=jB(this._workerPath)),!(this._activeTasks>=this._maximumActiveTasks))return A1e(this,e,t)};ua.prototype.initWebAssemblyModule=async function(e){if(d(this._webAssemblyPromise))return this._webAssemblyPromise;let t=async()=>{let n=this._worker=jB(this._workerPath),i=await P1e(this,e),o=await Promise.resolve(p6()),r,s=i.wasmBinary;d(s)&&o&&(r=[s]);let a=new Promise((c,l)=>{n.onmessage=function({data:u}){d(u)?c(u.result):l(new me("Could not configure wasm module"))}});return n.postMessage({canTransferArrayBuffer:o,parameters:{webAssemblyConfig:i}},r),a};return this._webAssemblyPromise=t(),this._webAssemblyPromise};ua.prototype.isDestroyed=function(){return!1};ua.prototype.destroy=function(){return d(this._worker)&&this._worker.terminate(),ue(this)};ua.taskCompletedEvent=QB;ua._defaultWorkerModulePrefix="Workers/";ua._workerModulePrefix=ua._defaultWorkerModulePrefix;ua._canTransferArrayBuffer=void 0;var yi=ua;function jf(){}jf._transcodeTaskProcessor=new yi("transcodeKTX2",Number.POSITIVE_INFINITY);jf._readyPromise=void 0;function M1e(){let e=jf._transcodeTaskProcessor.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/basis_transcoder.wasm"}).then(function(t){if(t)return jf._transcodeTaskProcessor;throw new me("KTX2 transcoder could not be initialized.")});jf._readyPromise=e}jf.transcode=function(e,t){return d(jf._readyPromise)||M1e(),jf._readyPromise.then(function(n){let i;if(e instanceof ArrayBuffer){let o=new Uint8Array(e);return i={supportedTargetFormats:t,ktx2Buffer:o},n.scheduleTask(i,[e])}return i={supportedTargetFormats:t,ktx2Buffer:e},n.scheduleTask(i,[e.buffer])}).then(function(n){let i=n.length,o=Object.keys(n[0]),r=o.length,s;for(s=0;s<i;s++){let a=n[s];for(let c=0;c<r;c++){let l=a[o[c]];a[o[c]]=new _L(l.internalFormat,l.datatype,l.width,l.height,l.levelBuffer)}}if(r===1){for(s=0;s<i;++s)n[s]=n[s][o[0]];i===1&&(n=n[0])}return n}).catch(function(n){throw n})};var TL=jf;var b6;y6.setKTX2SupportedFormats=function(e,t,n,i,o,r){b6={s3tc:e,pvrtc:t,astc:n,etc:i,etc1:o,bc7:r}};function y6(e){let t;return e instanceof ArrayBuffer||ArrayBuffer.isView(e)?t=Promise.resolve(e):t=Ee.createIfNeeded(e).fetchArrayBuffer(),t.then(function(n){return TL.transcode(n,b6)})}var sl=y6;var xGt=T(S(),1);var vZt=T(S(),1);var XZt=T(S(),1);var Gi={UNSIGNED_BYTE:ne.UNSIGNED_BYTE,UNSIGNED_SHORT:ne.UNSIGNED_SHORT,UNSIGNED_INT:ne.UNSIGNED_INT,FLOAT:ne.FLOAT,HALF_FLOAT:ne.HALF_FLOAT_OES,UNSIGNED_INT_24_8:ne.UNSIGNED_INT_24_8,UNSIGNED_SHORT_4_4_4_4:ne.UNSIGNED_SHORT_4_4_4_4,UNSIGNED_SHORT_5_5_5_1:ne.UNSIGNED_SHORT_5_5_5_1,UNSIGNED_SHORT_5_6_5:ne.UNSIGNED_SHORT_5_6_5};Gi.toWebGLConstant=function(e,t){switch(e){case Gi.UNSIGNED_BYTE:return ne.UNSIGNED_BYTE;case Gi.UNSIGNED_SHORT:return ne.UNSIGNED_SHORT;case Gi.UNSIGNED_INT:return ne.UNSIGNED_INT;case Gi.FLOAT:return ne.FLOAT;case Gi.HALF_FLOAT:return t.webgl2?ne.HALF_FLOAT:ne.HALF_FLOAT_OES;case Gi.UNSIGNED_INT_24_8:return ne.UNSIGNED_INT_24_8;case Gi.UNSIGNED_SHORT_4_4_4_4:return ne.UNSIGNED_SHORT_4_4_4_4;case Gi.UNSIGNED_SHORT_5_5_5_1:return ne.UNSIGNED_SHORT_5_5_5_1;case Gi.UNSIGNED_SHORT_5_6_5:return Gi.UNSIGNED_SHORT_5_6_5}};Gi.isPacked=function(e){return e===Gi.UNSIGNED_INT_24_8||e===Gi.UNSIGNED_SHORT_4_4_4_4||e===Gi.UNSIGNED_SHORT_5_5_5_1||e===Gi.UNSIGNED_SHORT_5_6_5};Gi.sizeInBytes=function(e){switch(e){case Gi.UNSIGNED_BYTE:return 1;case Gi.UNSIGNED_SHORT:case Gi.UNSIGNED_SHORT_4_4_4_4:case Gi.UNSIGNED_SHORT_5_5_5_1:case Gi.UNSIGNED_SHORT_5_6_5:case Gi.HALF_FLOAT:return 2;case Gi.UNSIGNED_INT:case Gi.FLOAT:case Gi.UNSIGNED_INT_24_8:return 4}};Gi.validate=function(e){return e===Gi.UNSIGNED_BYTE||e===Gi.UNSIGNED_SHORT||e===Gi.UNSIGNED_INT||e===Gi.FLOAT||e===Gi.HALF_FLOAT||e===Gi.UNSIGNED_INT_24_8||e===Gi.UNSIGNED_SHORT_4_4_4_4||e===Gi.UNSIGNED_SHORT_5_5_5_1||e===Gi.UNSIGNED_SHORT_5_6_5};var Je=Object.freeze(Gi);var rt={DEPTH_COMPONENT:ne.DEPTH_COMPONENT,DEPTH_STENCIL:ne.DEPTH_STENCIL,ALPHA:ne.ALPHA,RED:ne.RED,RG:ne.RG,RGB:ne.RGB,RGBA:ne.RGBA,LUMINANCE:ne.LUMINANCE,LUMINANCE_ALPHA:ne.LUMINANCE_ALPHA,RGB_DXT1:ne.COMPRESSED_RGB_S3TC_DXT1_EXT,RGBA_DXT1:ne.COMPRESSED_RGBA_S3TC_DXT1_EXT,RGBA_DXT3:ne.COMPRESSED_RGBA_S3TC_DXT3_EXT,RGBA_DXT5:ne.COMPRESSED_RGBA_S3TC_DXT5_EXT,RGB_PVRTC_4BPPV1:ne.COMPRESSED_RGB_PVRTC_4BPPV1_IMG,RGB_PVRTC_2BPPV1:ne.COMPRESSED_RGB_PVRTC_2BPPV1_IMG,RGBA_PVRTC_4BPPV1:ne.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,RGBA_PVRTC_2BPPV1:ne.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,RGBA_ASTC:ne.COMPRESSED_RGBA_ASTC_4x4_WEBGL,RGB_ETC1:ne.COMPRESSED_RGB_ETC1_WEBGL,RGB8_ETC2:ne.COMPRESSED_RGB8_ETC2,RGBA8_ETC2_EAC:ne.COMPRESSED_RGBA8_ETC2_EAC,RGBA_BC7:ne.COMPRESSED_RGBA_BPTC_UNORM};rt.componentsLength=function(e){switch(e){case rt.RGB:return 3;case rt.RGBA:return 4;case rt.LUMINANCE_ALPHA:case rt.RG:return 2;case rt.ALPHA:case rt.RED:case rt.LUMINANCE:return 1;default:return 1}};rt.validate=function(e){return e===rt.DEPTH_COMPONENT||e===rt.DEPTH_STENCIL||e===rt.ALPHA||e===rt.RED||e===rt.RG||e===rt.RGB||e===rt.RGBA||e===rt.LUMINANCE||e===rt.LUMINANCE_ALPHA||e===rt.RGB_DXT1||e===rt.RGBA_DXT1||e===rt.RGBA_DXT3||e===rt.RGBA_DXT5||e===rt.RGB_PVRTC_4BPPV1||e===rt.RGB_PVRTC_2BPPV1||e===rt.RGBA_PVRTC_4BPPV1||e===rt.RGBA_PVRTC_2BPPV1||e===rt.RGBA_ASTC||e===rt.RGB_ETC1||e===rt.RGB8_ETC2||e===rt.RGBA8_ETC2_EAC||e===rt.RGBA_BC7};rt.isColorFormat=function(e){return e===rt.ALPHA||e===rt.RGB||e===rt.RGBA||e===rt.LUMINANCE||e===rt.LUMINANCE_ALPHA};rt.isDepthFormat=function(e){return e===rt.DEPTH_COMPONENT||e===rt.DEPTH_STENCIL};rt.isCompressedFormat=function(e){return e===rt.RGB_DXT1||e===rt.RGBA_DXT1||e===rt.RGBA_DXT3||e===rt.RGBA_DXT5||e===rt.RGB_PVRTC_4BPPV1||e===rt.RGB_PVRTC_2BPPV1||e===rt.RGBA_PVRTC_4BPPV1||e===rt.RGBA_PVRTC_2BPPV1||e===rt.RGBA_ASTC||e===rt.RGB_ETC1||e===rt.RGB8_ETC2||e===rt.RGBA8_ETC2_EAC||e===rt.RGBA_BC7};rt.isDXTFormat=function(e){return e===rt.RGB_DXT1||e===rt.RGBA_DXT1||e===rt.RGBA_DXT3||e===rt.RGBA_DXT5};rt.isPVRTCFormat=function(e){return e===rt.RGB_PVRTC_4BPPV1||e===rt.RGB_PVRTC_2BPPV1||e===rt.RGBA_PVRTC_4BPPV1||e===rt.RGBA_PVRTC_2BPPV1};rt.isASTCFormat=function(e){return e===rt.RGBA_ASTC};rt.isETC1Format=function(e){return e===rt.RGB_ETC1};rt.isETC2Format=function(e){return e===rt.RGB8_ETC2||e===rt.RGBA8_ETC2_EAC};rt.isBC7Format=function(e){return e===rt.RGBA_BC7};rt.compressedTextureSizeInBytes=function(e,t,n){switch(e){case rt.RGB_DXT1:case rt.RGBA_DXT1:case rt.RGB_ETC1:case rt.RGB8_ETC2:return Math.floor((t+3)/4)*Math.floor((n+3)/4)*8;case rt.RGBA_DXT3:case rt.RGBA_DXT5:case rt.RGBA_ASTC:case rt.RGBA8_ETC2_EAC:return Math.floor((t+3)/4)*Math.floor((n+3)/4)*16;case rt.RGB_PVRTC_4BPPV1:case rt.RGBA_PVRTC_4BPPV1:return Math.floor((Math.max(t,8)*Math.max(n,8)*4+7)/8);case rt.RGB_PVRTC_2BPPV1:case rt.RGBA_PVRTC_2BPPV1:return Math.floor((Math.max(t,16)*Math.max(n,8)*2+7)/8);case rt.RGBA_BC7:return Math.ceil(t/4)*Math.ceil(n/4)*16;default:return 0}};rt.textureSizeInBytes=function(e,t,n,i){let o=rt.componentsLength(e);return Je.isPacked(t)&&(o=1),o*Je.sizeInBytes(t)*n*i};rt.alignmentInBytes=function(e,t,n){let i=rt.textureSizeInBytes(e,t,n,1)%4;return i===0?4:i===2?2:1};rt.createTypedArray=function(e,t,n,i){let o,r=Je.sizeInBytes(t);r===Uint8Array.BYTES_PER_ELEMENT?o=Uint8Array:r===Uint16Array.BYTES_PER_ELEMENT?o=Uint16Array:r===Float32Array.BYTES_PER_ELEMENT&&t===Je.FLOAT?o=Float32Array:o=Uint32Array;let s=rt.componentsLength(e)*n*i;return new o(s)};rt.flipY=function(e,t,n,i,o){if(o===1)return e;let r=rt.createTypedArray(t,n,i,o),s=rt.componentsLength(t),a=i*s;for(let c=0;c<o;++c){let l=c*i*s,u=(o-c-1)*i*s;for(let m=0;m<a;++m)r[u+m]=e[l+m]}return r};rt.toInternalFormat=function(e,t,n){if(!n.webgl2)return e;if(e===rt.DEPTH_STENCIL)return ne.DEPTH24_STENCIL8;if(e===rt.DEPTH_COMPONENT){if(t===Je.UNSIGNED_SHORT)return ne.DEPTH_COMPONENT16;if(t===Je.UNSIGNED_INT)return ne.DEPTH_COMPONENT24}if(t===Je.FLOAT)switch(e){case rt.RGBA:return ne.RGBA32F;case rt.RGB:return ne.RGB32F;case rt.RG:return ne.RG32F;case rt.RED:return ne.R32F}if(t===Je.HALF_FLOAT)switch(e){case rt.RGBA:return ne.RGBA16F;case rt.RGB:return ne.RGB16F;case rt.RG:return ne.RG16F;case rt.RED:return ne.R16F}return e};var st=Object.freeze(rt);var FZt=T(S(),1),dr={_maximumCombinedTextureImageUnits:0,_maximumCubeMapSize:0,_maximumFragmentUniformVectors:0,_maximumTextureImageUnits:0,_maximumRenderbufferSize:0,_maximumTextureSize:0,_maximumVaryingVectors:0,_maximumVertexAttributes:0,_maximumVertexTextureImageUnits:0,_maximumVertexUniformVectors:0,_minimumAliasedLineWidth:0,_maximumAliasedLineWidth:0,_minimumAliasedPointSize:0,_maximumAliasedPointSize:0,_maximumViewportWidth:0,_maximumViewportHeight:0,_maximumTextureFilterAnisotropy:0,_maximumDrawBuffers:0,_maximumColorAttachments:0,_maximumSamples:0,_highpFloatSupported:!1,_highpIntSupported:!1};Object.defineProperties(dr,{maximumCombinedTextureImageUnits:{get:function(){return dr._maximumCombinedTextureImageUnits}},maximumCubeMapSize:{get:function(){return dr._maximumCubeMapSize}},maximumFragmentUniformVectors:{get:function(){return dr._maximumFragmentUniformVectors}},maximumTextureImageUnits:{get:function(){return dr._maximumTextureImageUnits}},maximumRenderbufferSize:{get:function(){return dr._maximumRenderbufferSize}},maximumTextureSize:{get:function(){return dr._maximumTextureSize}},maximumVaryingVectors:{get:function(){return dr._maximumVaryingVectors}},maximumVertexAttributes:{get:function(){return dr._maximumVertexAttributes}},maximumVertexTextureImageUnits:{get:function(){return dr._maximumVertexTextureImageUnits}},maximumVertexUniformVectors:{get:function(){return dr._maximumVertexUniformVectors}},minimumAliasedLineWidth:{get:function(){return dr._minimumAliasedLineWidth}},maximumAliasedLineWidth:{get:function(){return dr._maximumAliasedLineWidth}},minimumAliasedPointSize:{get:function(){return dr._minimumAliasedPointSize}},maximumAliasedPointSize:{get:function(){return dr._maximumAliasedPointSize}},maximumViewportWidth:{get:function(){return dr._maximumViewportWidth}},maximumViewportHeight:{get:function(){return dr._maximumViewportHeight}},maximumTextureFilterAnisotropy:{get:function(){return dr._maximumTextureFilterAnisotropy}},maximumDrawBuffers:{get:function(){return dr._maximumDrawBuffers}},maximumColorAttachments:{get:function(){return dr._maximumColorAttachments}},maximumSamples:{get:function(){return dr._maximumSamples}},highpFloatSupported:{get:function(){return dr._highpFloatSupported}},highpIntSupported:{get:function(){return dr._highpIntSupported}}});var kt=dr;var DZt=T(S(),1);function MA(e,t,n,i,o,r,s,a,c,l,u){this._context=e,this._texture=t,this._textureTarget=n,this._targetFace=i,this._pixelDatatype=s,this._internalFormat=o,this._pixelFormat=r,this._size=a,this._preMultiplyAlpha=c,this._flipY=l,this._initialized=u}Object.defineProperties(MA.prototype,{pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},_target:{get:function(){return this._targetFace}}});MA.prototype.copyFrom=function(e){let t=g(e.xOffset,0),n=g(e.yOffset,0),i=e.source,o=this._context._gl,r=this._textureTarget,s=this._targetFace;o.activeTexture(o.TEXTURE0),o.bindTexture(r,this._texture);let a=i.width,c=i.height,l=i.arrayBufferView,u=this._size,m=this._pixelFormat,p=this._internalFormat,y=this._pixelDatatype,f=this._preMultiplyAlpha,x=this._flipY,_=g(e.skipColorSpaceConversion,!1),C=4;d(l)&&(C=st.alignmentInBytes(m,y,a)),o.pixelStorei(o.UNPACK_ALIGNMENT,C),_?o.pixelStorei(o.UNPACK_COLORSPACE_CONVERSION_WEBGL,o.NONE):o.pixelStorei(o.UNPACK_COLORSPACE_CONVERSION_WEBGL,o.BROWSER_DEFAULT_WEBGL);let V=!1;if(!this._initialized){if(t===0&&n===0&&a===u&&c===u)d(l)?(o.pixelStorei(o.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),o.pixelStorei(o.UNPACK_FLIP_Y_WEBGL,!1),x&&(l=st.flipY(l,m,y,u,u)),o.texImage2D(s,0,p,u,u,0,m,Je.toWebGLConstant(y,this._context),l)):(o.pixelStorei(o.UNPACK_PREMULTIPLY_ALPHA_WEBGL,f),o.pixelStorei(o.UNPACK_FLIP_Y_WEBGL,x),o.texImage2D(s,0,p,m,Je.toWebGLConstant(y,this._context),i)),V=!0;else{o.pixelStorei(o.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),o.pixelStorei(o.UNPACK_FLIP_Y_WEBGL,!1);let L=st.createTypedArray(m,y,u,u);o.texImage2D(s,0,p,u,u,0,m,Je.toWebGLConstant(y,this._context),L)}this._initialized=!0}V||(d(l)?(o.pixelStorei(o.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),o.pixelStorei(o.UNPACK_FLIP_Y_WEBGL,!1),x&&(l=st.flipY(l,m,y,a,c)),o.texSubImage2D(s,0,t,n,a,c,m,Je.toWebGLConstant(y,this._context),l)):(o.pixelStorei(o.UNPACK_PREMULTIPLY_ALPHA_WEBGL,f),o.pixelStorei(o.UNPACK_FLIP_Y_WEBGL,x),o.texSubImage2D(s,0,t,n,m,Je.toWebGLConstant(y,this._context),i))),o.bindTexture(r,null)};MA.prototype.copyFromFramebuffer=function(e,t,n,i,o,r){e=g(e,0),t=g(t,0),n=g(n,0),i=g(i,0),o=g(o,this._size),r=g(r,this._size);let s=this._context._gl,a=this._textureTarget;s.activeTexture(s.TEXTURE0),s.bindTexture(a,this._texture),s.copyTexSubImage2D(this._targetFace,0,e,t,n,i,o,r),s.bindTexture(a,null),this._initialized=!0};var Xh=MA;var OZt=T(S(),1);var NA={DONT_CARE:ne.DONT_CARE,FASTEST:ne.FASTEST,NICEST:ne.NICEST,validate:function(e){return e===NA.DONT_CARE||e===NA.FASTEST||e===NA.NICEST}},Ih=Object.freeze(NA);var aGt=T(S(),1);var zZt=T(S(),1);var UA={NEAREST:ne.NEAREST,LINEAR:ne.LINEAR};UA.validate=function(e){return e===UA.NEAREST||e===UA.LINEAR};var Ti=Object.freeze(UA);var jZt=T(S(),1);var rb={NEAREST:ne.NEAREST,LINEAR:ne.LINEAR,NEAREST_MIPMAP_NEAREST:ne.NEAREST_MIPMAP_NEAREST,LINEAR_MIPMAP_NEAREST:ne.LINEAR_MIPMAP_NEAREST,NEAREST_MIPMAP_LINEAR:ne.NEAREST_MIPMAP_LINEAR,LINEAR_MIPMAP_LINEAR:ne.LINEAR_MIPMAP_LINEAR};rb.validate=function(e){return e===rb.NEAREST||e===rb.LINEAR||e===rb.NEAREST_MIPMAP_NEAREST||e===rb.LINEAR_MIPMAP_NEAREST||e===rb.NEAREST_MIPMAP_LINEAR||e===rb.LINEAR_MIPMAP_LINEAR};var cn=Object.freeze(rb);var eGt=T(S(),1);var kA={CLAMP_TO_EDGE:ne.CLAMP_TO_EDGE,REPEAT:ne.REPEAT,MIRRORED_REPEAT:ne.MIRRORED_REPEAT,validate:function(e){return e===kA.CLAMP_TO_EDGE||e===kA.REPEAT||e===kA.MIRRORED_REPEAT}},Gn=Object.freeze(kA);function SL(e){e=g(e,g.EMPTY_OBJECT);let t=g(e.wrapS,Gn.CLAMP_TO_EDGE),n=g(e.wrapT,Gn.CLAMP_TO_EDGE),i=g(e.minificationFilter,cn.LINEAR),o=g(e.magnificationFilter,Ti.LINEAR),r=d(e.maximumAnisotropy)?e.maximumAnisotropy:1;this._wrapS=t,this._wrapT=n,this._minificationFilter=i,this._magnificationFilter=o,this._maximumAnisotropy=r}Object.defineProperties(SL.prototype,{wrapS:{get:function(){return this._wrapS}},wrapT:{get:function(){return this._wrapT}},minificationFilter:{get:function(){return this._minificationFilter}},magnificationFilter:{get:function(){return this._magnificationFilter}},maximumAnisotropy:{get:function(){return this._maximumAnisotropy}}});SL.equals=function(e,t){return e===t||d(e)&&d(t)&&e._wrapS===t._wrapS&&e._wrapT===t._wrapT&&e._minificationFilter===t._minificationFilter&&e._magnificationFilter===t._magnificationFilter&&e._maximumAnisotropy===t._maximumAnisotropy};SL.NEAREST=Object.freeze(new SL({wrapS:Gn.CLAMP_TO_EDGE,wrapT:Gn.CLAMP_TO_EDGE,minificationFilter:cn.NEAREST,magnificationFilter:Ti.NEAREST}));var un=SL;function CL(e){e=g(e,g.EMPTY_OBJECT);let t=e.context,n=e.source,i,o;if(d(n)){let V=[n.positiveX,n.negativeX,n.positiveY,n.negativeY,n.positiveZ,n.negativeZ];i=V[0].width,o=V[0].height}else i=e.width,o=e.height;let r=i,s=g(e.pixelDatatype,Je.UNSIGNED_BYTE),a=g(e.pixelFormat,st.RGBA),c=st.toInternalFormat(a,s,t),l=st.textureSizeInBytes(a,s,r,r)*6,u=e.preMultiplyAlpha||a===st.RGB||a===st.LUMINANCE,m=g(e.flipY,!0),p=g(e.skipColorSpaceConversion,!1),y=t._gl,f=y.TEXTURE_CUBE_MAP,x=y.createTexture();y.activeTexture(y.TEXTURE0),y.bindTexture(f,x);function _(V,L,Z,G,X){let P=L.arrayBufferView;d(P)||(P=L.bufferView);let v=4;d(P)&&(v=st.alignmentInBytes(a,s,i)),y.pixelStorei(y.UNPACK_ALIGNMENT,v),X?y.pixelStorei(y.UNPACK_COLORSPACE_CONVERSION_WEBGL,y.NONE):y.pixelStorei(y.UNPACK_COLORSPACE_CONVERSION_WEBGL,y.BROWSER_DEFAULT_WEBGL),d(P)?(y.pixelStorei(y.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),y.pixelStorei(y.UNPACK_FLIP_Y_WEBGL,!1),G&&(P=st.flipY(P,a,s,r,r)),y.texImage2D(V,0,c,r,r,0,a,Je.toWebGLConstant(s,t),P)):(y.pixelStorei(y.UNPACK_PREMULTIPLY_ALPHA_WEBGL,Z),y.pixelStorei(y.UNPACK_FLIP_Y_WEBGL,G),y.texImage2D(V,0,c,a,Je.toWebGLConstant(s,t),L))}d(n)?(_(y.TEXTURE_CUBE_MAP_POSITIVE_X,n.positiveX,u,m,p),_(y.TEXTURE_CUBE_MAP_NEGATIVE_X,n.negativeX,u,m,p),_(y.TEXTURE_CUBE_MAP_POSITIVE_Y,n.positiveY,u,m,p),_(y.TEXTURE_CUBE_MAP_NEGATIVE_Y,n.negativeY,u,m,p),_(y.TEXTURE_CUBE_MAP_POSITIVE_Z,n.positiveZ,u,m,p),_(y.TEXTURE_CUBE_MAP_NEGATIVE_Z,n.negativeZ,u,m,p)):(y.texImage2D(y.TEXTURE_CUBE_MAP_POSITIVE_X,0,c,r,r,0,a,Je.toWebGLConstant(s,t),null),y.texImage2D(y.TEXTURE_CUBE_MAP_NEGATIVE_X,0,c,r,r,0,a,Je.toWebGLConstant(s,t),null),y.texImage2D(y.TEXTURE_CUBE_MAP_POSITIVE_Y,0,c,r,r,0,a,Je.toWebGLConstant(s,t),null),y.texImage2D(y.TEXTURE_CUBE_MAP_NEGATIVE_Y,0,c,r,r,0,a,Je.toWebGLConstant(s,t),null),y.texImage2D(y.TEXTURE_CUBE_MAP_POSITIVE_Z,0,c,r,r,0,a,Je.toWebGLConstant(s,t),null),y.texImage2D(y.TEXTURE_CUBE_MAP_NEGATIVE_Z,0,c,r,r,0,a,Je.toWebGLConstant(s,t),null)),y.bindTexture(f,null),this._context=t,this._textureFilterAnisotropic=t._textureFilterAnisotropic,this._textureTarget=f,this._texture=x,this._pixelFormat=a,this._pixelDatatype=s,this._size=r,this._hasMipmap=!1,this._sizeInBytes=l,this._preMultiplyAlpha=u,this._flipY=m,this._sampler=void 0;let C=d(n);this._positiveX=new Xh(t,x,f,y.TEXTURE_CUBE_MAP_POSITIVE_X,c,a,s,r,u,m,C),this._negativeX=new Xh(t,x,f,y.TEXTURE_CUBE_MAP_NEGATIVE_X,c,a,s,r,u,m,C),this._positiveY=new Xh(t,x,f,y.TEXTURE_CUBE_MAP_POSITIVE_Y,c,a,s,r,u,m,C),this._negativeY=new Xh(t,x,f,y.TEXTURE_CUBE_MAP_NEGATIVE_Y,c,a,s,r,u,m,C),this._positiveZ=new Xh(t,x,f,y.TEXTURE_CUBE_MAP_POSITIVE_Z,c,a,s,r,u,m,C),this._negativeZ=new Xh(t,x,f,y.TEXTURE_CUBE_MAP_NEGATIVE_Z,c,a,s,r,u,m,C),this.sampler=d(e.sampler)?e.sampler:new un}Object.defineProperties(CL.prototype,{positiveX:{get:function(){return this._positiveX}},negativeX:{get:function(){return this._negativeX}},positiveY:{get:function(){return this._positiveY}},negativeY:{get:function(){return this._negativeY}},positiveZ:{get:function(){return this._positiveZ}},negativeZ:{get:function(){return this._negativeZ}},sampler:{get:function(){return this._sampler},set:function(e){let t=e.minificationFilter,n=e.magnificationFilter,i=t===cn.NEAREST_MIPMAP_NEAREST||t===cn.NEAREST_MIPMAP_LINEAR||t===cn.LINEAR_MIPMAP_NEAREST||t===cn.LINEAR_MIPMAP_LINEAR,o=this._context,r=this._pixelDatatype;(r===Je.FLOAT&&!o.textureFloatLinear||r===Je.HALF_FLOAT&&!o.textureHalfFloatLinear)&&(t=i?cn.NEAREST_MIPMAP_NEAREST:cn.NEAREST,n=Ti.NEAREST);let s=o._gl,a=this._textureTarget;s.activeTexture(s.TEXTURE0),s.bindTexture(a,this._texture),s.texParameteri(a,s.TEXTURE_MIN_FILTER,t),s.texParameteri(a,s.TEXTURE_MAG_FILTER,n),s.texParameteri(a,s.TEXTURE_WRAP_S,e.wrapS),s.texParameteri(a,s.TEXTURE_WRAP_T,e.wrapT),d(this._textureFilterAnisotropic)&&s.texParameteri(a,this._textureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,e.maximumAnisotropy),s.bindTexture(a,null),this._sampler=e}},pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},width:{get:function(){return this._size}},height:{get:function(){return this._size}},sizeInBytes:{get:function(){return this._hasMipmap?Math.floor(this._sizeInBytes*4/3):this._sizeInBytes}},preMultiplyAlpha:{get:function(){return this._preMultiplyAlpha}},flipY:{get:function(){return this._flipY}},_target:{get:function(){return this._textureTarget}}});CL.prototype.generateMipmap=function(e){e=g(e,Ih.DONT_CARE),this._hasMipmap=!0;let t=this._context._gl,n=this._textureTarget;t.hint(t.GENERATE_MIPMAP_HINT,e),t.activeTexture(t.TEXTURE0),t.bindTexture(n,this._texture),t.generateMipmap(n),t.bindTexture(n,null)};CL.prototype.isDestroyed=function(){return!1};CL.prototype.destroy=function(){return this._context._gl.deleteTexture(this._texture),this._positiveX=ue(this._positiveX),this._negativeX=ue(this._negativeX),this._positiveY=ue(this._positiveY),this._negativeY=ue(this._negativeY),this._positiveZ=ue(this._positiveZ),this._negativeZ=ue(this._negativeZ),ue(this)};var Ma=CL;var WGt=T(S(),1);function om(e){e=g(e,g.EMPTY_OBJECT);let t=e.context,n=e.width,i=e.height,o=e.source;d(o)&&(d(n)||(n=g(o.videoWidth,o.width)),d(i)||(i=g(o.videoHeight,o.height)));let r=g(e.pixelFormat,st.RGBA),s=g(e.pixelDatatype,Je.UNSIGNED_BYTE),a=st.toInternalFormat(r,s,t),c=st.isCompressedFormat(a),l=e.preMultiplyAlpha||r===st.RGB||r===st.LUMINANCE,u=g(e.flipY,!0),m=g(e.skipColorSpaceConversion,!1),p=!0,y=t._gl,f=y.TEXTURE_2D,x=y.createTexture();y.activeTexture(y.TEXTURE0),y.bindTexture(f,x);let _=4;if(d(o)&&d(o.arrayBufferView)&&!c&&(_=st.alignmentInBytes(r,s,n)),y.pixelStorei(y.UNPACK_ALIGNMENT,_),m?y.pixelStorei(y.UNPACK_COLORSPACE_CONVERSION_WEBGL,y.NONE):y.pixelStorei(y.UNPACK_COLORSPACE_CONVERSION_WEBGL,y.BROWSER_DEFAULT_WEBGL),d(o))if(d(o.arrayBufferView)){y.pixelStorei(y.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),y.pixelStorei(y.UNPACK_FLIP_Y_WEBGL,!1);let V=o.arrayBufferView,L,Z,G;if(c){if(y.compressedTexImage2D(f,0,a,n,i,0,V),d(o.mipLevels))for(Z=n,G=i,L=0;L<o.mipLevels.length;++L)Z=Math.floor(Z/2)|0,Z<1&&(Z=1),G=Math.floor(G/2)|0,G<1&&(G=1),y.compressedTexImage2D(f,L+1,a,Z,G,0,o.mipLevels[L])}else if(u&&(V=st.flipY(V,r,s,n,i)),y.texImage2D(f,0,a,n,i,0,r,Je.toWebGLConstant(s,t),V),d(o.mipLevels))for(Z=n,G=i,L=0;L<o.mipLevels.length;++L)Z=Math.floor(Z/2)|0,Z<1&&(Z=1),G=Math.floor(G/2)|0,G<1&&(G=1),y.texImage2D(f,L+1,a,Z,G,0,r,Je.toWebGLConstant(s,t),o.mipLevels[L])}else d(o.framebuffer)?(y.pixelStorei(y.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),y.pixelStorei(y.UNPACK_FLIP_Y_WEBGL,!1),o.framebuffer!==t.defaultFramebuffer&&o.framebuffer._bind(),y.copyTexImage2D(f,0,a,o.xOffset,o.yOffset,n,i,0),o.framebuffer!==t.defaultFramebuffer&&o.framebuffer._unBind()):(y.pixelStorei(y.UNPACK_PREMULTIPLY_ALPHA_WEBGL,l),y.pixelStorei(y.UNPACK_FLIP_Y_WEBGL,u),y.texImage2D(f,0,a,r,Je.toWebGLConstant(s,t),o));else y.texImage2D(f,0,a,n,i,0,r,Je.toWebGLConstant(s,t),null),p=!1;y.bindTexture(f,null);let C;c?C=st.compressedTextureSizeInBytes(r,n,i):C=st.textureSizeInBytes(r,s,n,i),this._id=Yn(),this._context=t,this._textureFilterAnisotropic=t._textureFilterAnisotropic,this._textureTarget=f,this._texture=x,this._internalFormat=a,this._pixelFormat=r,this._pixelDatatype=s,this._width=n,this._height=i,this._dimensions=new D(n,i),this._hasMipmap=!1,this._sizeInBytes=C,this._preMultiplyAlpha=l,this._flipY=u,this._initialized=p,this._sampler=void 0,this.sampler=d(e.sampler)?e.sampler:new un}om.create=function(e){return new om(e)};om.fromFramebuffer=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.context,n=t._gl,i=g(e.pixelFormat,st.RGB),o=g(e.framebufferXOffset,0),r=g(e.framebufferYOffset,0),s=g(e.width,n.drawingBufferWidth),a=g(e.height,n.drawingBufferHeight),c=e.framebuffer;return new om({context:t,width:s,height:a,pixelFormat:i,source:{framebuffer:d(c)?c:t.defaultFramebuffer,xOffset:o,yOffset:r,width:s,height:a}})};Object.defineProperties(om.prototype,{id:{get:function(){return this._id}},sampler:{get:function(){return this._sampler},set:function(e){let t=e.minificationFilter,n=e.magnificationFilter,i=this._context,o=this._pixelFormat,r=this._pixelDatatype,s=t===cn.NEAREST_MIPMAP_NEAREST||t===cn.NEAREST_MIPMAP_LINEAR||t===cn.LINEAR_MIPMAP_NEAREST||t===cn.LINEAR_MIPMAP_LINEAR;(r===Je.FLOAT&&!i.textureFloatLinear||r===Je.HALF_FLOAT&&!i.textureHalfFloatLinear)&&(t=s?cn.NEAREST_MIPMAP_NEAREST:cn.NEAREST,n=Ti.NEAREST),i.webgl2&&st.isDepthFormat(o)&&(t=cn.NEAREST,n=Ti.NEAREST);let a=i._gl,c=this._textureTarget;a.activeTexture(a.TEXTURE0),a.bindTexture(c,this._texture),a.texParameteri(c,a.TEXTURE_MIN_FILTER,t),a.texParameteri(c,a.TEXTURE_MAG_FILTER,n),a.texParameteri(c,a.TEXTURE_WRAP_S,e.wrapS),a.texParameteri(c,a.TEXTURE_WRAP_T,e.wrapT),d(this._textureFilterAnisotropic)&&a.texParameteri(c,this._textureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,e.maximumAnisotropy),a.bindTexture(c,null),this._sampler=e}},pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},dimensions:{get:function(){return this._dimensions}},preMultiplyAlpha:{get:function(){return this._preMultiplyAlpha}},flipY:{get:function(){return this._flipY}},width:{get:function(){return this._width}},height:{get:function(){return this._height}},sizeInBytes:{get:function(){return this._hasMipmap?Math.floor(this._sizeInBytes*4/3):this._sizeInBytes}},_target:{get:function(){return this._textureTarget}}});om.prototype.copyFrom=function(e){let t=g(e.xOffset,0),n=g(e.yOffset,0),i=e.source,o=this._context,r=o._gl,s=this._textureTarget;r.activeTexture(r.TEXTURE0),r.bindTexture(s,this._texture);let a=i.width,c=i.height,l=i.arrayBufferView,u=this._width,m=this._height,p=this._internalFormat,y=this._pixelFormat,f=this._pixelDatatype,x=this._preMultiplyAlpha,_=this._flipY,C=g(e.skipColorSpaceConversion,!1),V=4;d(l)&&(V=st.alignmentInBytes(y,f,a)),r.pixelStorei(r.UNPACK_ALIGNMENT,V),C?r.pixelStorei(r.UNPACK_COLORSPACE_CONVERSION_WEBGL,r.NONE):r.pixelStorei(r.UNPACK_COLORSPACE_CONVERSION_WEBGL,r.BROWSER_DEFAULT_WEBGL);let L=!1;if(!this._initialized){if(t===0&&n===0&&a===u&&c===m)d(l)?(r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,!1),_&&(l=st.flipY(l,y,f,u,m)),r.texImage2D(s,0,p,u,m,0,y,Je.toWebGLConstant(f,o),l)):(r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,x),r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,_),r.texImage2D(s,0,p,y,Je.toWebGLConstant(f,o),i)),L=!0;else{r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,!1);let Z=st.createTypedArray(y,f,u,m);r.texImage2D(s,0,p,u,m,0,y,Je.toWebGLConstant(f,o),Z)}this._initialized=!0}L||(d(l)?(r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,!1),_&&(l=st.flipY(l,y,f,a,c)),r.texSubImage2D(s,0,t,n,a,c,y,Je.toWebGLConstant(f,o),l)):(r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,x),r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,_),r.texSubImage2D(s,0,t,n,y,Je.toWebGLConstant(f,o),i))),r.bindTexture(s,null)};om.prototype.copyFromFramebuffer=function(e,t,n,i,o,r){e=g(e,0),t=g(t,0),n=g(n,0),i=g(i,0),o=g(o,this._width),r=g(r,this._height);let s=this._context._gl,a=this._textureTarget;s.activeTexture(s.TEXTURE0),s.bindTexture(a,this._texture),s.copyTexSubImage2D(a,0,e,t,n,i,o,r),s.bindTexture(a,null),this._initialized=!0};om.prototype.generateMipmap=function(e){e=g(e,Ih.DONT_CARE),this._hasMipmap=!0;let t=this._context._gl,n=this._textureTarget;t.hint(t.GENERATE_MIPMAP_HINT,e),t.activeTexture(t.TEXTURE0),t.bindTexture(n,this._texture),t.generateMipmap(n),t.bindTexture(n,null)};om.prototype.isDestroyed=function(){return!1};om.prototype.destroy=function(){return this._context._gl.deleteTexture(this._texture),ue(this)};var Wt=om;var vGt=T(S(),1),VL=`uniform sampler2D image;
  202. czm_material czm_getMaterial(czm_materialInput materialInput)
  203. {
  204. czm_material material = czm_getDefaultMaterial(materialInput);
  205. vec4 rampColor = texture(image, vec2(materialInput.aspect / (2.0 * czm_pi), 0.5));
  206. rampColor = czm_gammaCorrect(rampColor);
  207. material.diffuse = rampColor.rgb;
  208. material.alpha = rampColor.a;
  209. return material;
  210. }
  211. `;var FGt=T(S(),1),LL=`uniform sampler2D image;
  212. uniform float strength;
  213. uniform vec2 repeat;
  214. czm_material czm_getMaterial(czm_materialInput materialInput)
  215. {
  216. czm_material material = czm_getDefaultMaterial(materialInput);
  217. vec2 st = materialInput.st;
  218. vec2 centerPixel = fract(repeat * st);
  219. float centerBump = texture(image, centerPixel).channel;
  220. float imageWidth = float(imageDimensions.x);
  221. vec2 rightPixel = fract(repeat * (st + vec2(1.0 / imageWidth, 0.0)));
  222. float rightBump = texture(image, rightPixel).channel;
  223. float imageHeight = float(imageDimensions.y);
  224. vec2 leftPixel = fract(repeat * (st + vec2(0.0, 1.0 / imageHeight)));
  225. float topBump = texture(image, leftPixel).channel;
  226. vec3 normalTangentSpace = normalize(vec3(centerBump - rightBump, centerBump - topBump, clamp(1.0 - strength, 0.1, 1.0)));
  227. vec3 normalEC = materialInput.tangentToEyeMatrix * normalTangentSpace;
  228. material.normal = normalEC;
  229. material.diffuse = vec3(0.01);
  230. return material;
  231. }
  232. `;var MGt=T(S(),1),RL=`uniform vec4 lightColor;
  233. uniform vec4 darkColor;
  234. uniform vec2 repeat;
  235. czm_material czm_getMaterial(czm_materialInput materialInput)
  236. {
  237. czm_material material = czm_getDefaultMaterial(materialInput);
  238. vec2 st = materialInput.st;
  239. // From Stefan Gustavson's Procedural Textures in GLSL in OpenGL Insights
  240. float b = mod(floor(repeat.s * st.s) + floor(repeat.t * st.t), 2.0); // 0.0 or 1.0
  241. // Find the distance from the closest separator (region between two colors)
  242. float scaledWidth = fract(repeat.s * st.s);
  243. scaledWidth = abs(scaledWidth - floor(scaledWidth + 0.5));
  244. float scaledHeight = fract(repeat.t * st.t);
  245. scaledHeight = abs(scaledHeight - floor(scaledHeight + 0.5));
  246. float value = min(scaledWidth, scaledHeight);
  247. vec4 currentColor = mix(lightColor, darkColor, b);
  248. vec4 color = czm_antialias(lightColor, darkColor, currentColor, value, 0.03);
  249. color = czm_gammaCorrect(color);
  250. material.diffuse = color.rgb;
  251. material.alpha = color.a;
  252. return material;
  253. }
  254. `;var UGt=T(S(),1),ZL=`uniform vec4 lightColor;
  255. uniform vec4 darkColor;
  256. uniform vec2 repeat;
  257. czm_material czm_getMaterial(czm_materialInput materialInput)
  258. {
  259. czm_material material = czm_getDefaultMaterial(materialInput);
  260. // From Stefan Gustavson's Procedural Textures in GLSL in OpenGL Insights
  261. float b = smoothstep(0.3, 0.32, length(fract(repeat * materialInput.st) - 0.5)); // 0.0 or 1.0
  262. vec4 color = mix(lightColor, darkColor, b);
  263. color = czm_gammaCorrect(color);
  264. material.diffuse = color.rgb;
  265. material.alpha = color.a;
  266. return material;
  267. }
  268. `;var DGt=T(S(),1),GL=`uniform sampler2D heights;
  269. uniform sampler2D colors;
  270. // This material expects heights to be sorted from lowest to highest.
  271. float getHeight(int idx, float invTexSize)
  272. {
  273. vec2 uv = vec2((float(idx) + 0.5) * invTexSize, 0.5);
  274. #ifdef OES_texture_float
  275. return texture(heights, uv).x;
  276. #else
  277. return czm_unpackFloat(texture(heights, uv));
  278. #endif
  279. }
  280. czm_material czm_getMaterial(czm_materialInput materialInput)
  281. {
  282. czm_material material = czm_getDefaultMaterial(materialInput);
  283. float height = materialInput.height;
  284. float invTexSize = 1.0 / float(heightsDimensions.x);
  285. float minHeight = getHeight(0, invTexSize);
  286. float maxHeight = getHeight(heightsDimensions.x - 1, invTexSize);
  287. // early-out when outside the height range
  288. if (height < minHeight || height > maxHeight) {
  289. material.diffuse = vec3(0.0);
  290. material.alpha = 0.0;
  291. return material;
  292. }
  293. // Binary search to find heights above and below.
  294. int idxBelow = 0;
  295. int idxAbove = heightsDimensions.x;
  296. float heightBelow = minHeight;
  297. float heightAbove = maxHeight;
  298. // while loop not allowed, so use for loop with max iterations.
  299. // maxIterations of 16 supports a texture size up to 65536 (2^16).
  300. const int maxIterations = 16;
  301. for (int i = 0; i < maxIterations; i++) {
  302. if (idxBelow >= idxAbove - 1) {
  303. break;
  304. }
  305. int idxMid = (idxBelow + idxAbove) / 2;
  306. float heightTex = getHeight(idxMid, invTexSize);
  307. if (height > heightTex) {
  308. idxBelow = idxMid;
  309. heightBelow = heightTex;
  310. } else {
  311. idxAbove = idxMid;
  312. heightAbove = heightTex;
  313. }
  314. }
  315. float lerper = heightBelow == heightAbove ? 1.0 : (height - heightBelow) / (heightAbove - heightBelow);
  316. vec2 colorUv = vec2(invTexSize * (float(idxBelow) + 0.5 + lerper), 0.5);
  317. vec4 color = texture(colors, colorUv);
  318. // undo preumultiplied alpha
  319. if (color.a > 0.0)
  320. {
  321. color.rgb /= color.a;
  322. }
  323. color.rgb = czm_gammaCorrect(color.rgb);
  324. material.diffuse = color.rgb;
  325. material.alpha = color.a;
  326. return material;
  327. }
  328. `;var YGt=T(S(),1),EL=`uniform vec4 color;
  329. uniform float spacing;
  330. uniform float width;
  331. czm_material czm_getMaterial(czm_materialInput materialInput)
  332. {
  333. czm_material material = czm_getDefaultMaterial(materialInput);
  334. float distanceToContour = mod(materialInput.height, spacing);
  335. #if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives))
  336. float dxc = abs(dFdx(materialInput.height));
  337. float dyc = abs(dFdy(materialInput.height));
  338. float dF = max(dxc, dyc) * czm_pixelRatio * width;
  339. float alpha = (distanceToContour < dF) ? 1.0 : 0.0;
  340. #else
  341. // If no derivatives available (IE 10?), use pixel ratio
  342. float alpha = (distanceToContour < (czm_pixelRatio * width)) ? 1.0 : 0.0;
  343. #endif
  344. vec4 outColor = czm_gammaCorrect(vec4(color.rgb, alpha * color.a));
  345. material.diffuse = outColor.rgb;
  346. material.alpha = outColor.a;
  347. return material;
  348. }
  349. `;var KGt=T(S(),1),XL=`uniform sampler2D image;
  350. uniform float minimumHeight;
  351. uniform float maximumHeight;
  352. czm_material czm_getMaterial(czm_materialInput materialInput)
  353. {
  354. czm_material material = czm_getDefaultMaterial(materialInput);
  355. float scaledHeight = clamp((materialInput.height - minimumHeight) / (maximumHeight - minimumHeight), 0.0, 1.0);
  356. vec4 rampColor = texture(image, vec2(scaledHeight, 0.5));
  357. rampColor = czm_gammaCorrect(rampColor);
  358. material.diffuse = rampColor.rgb;
  359. material.alpha = rampColor.a;
  360. return material;
  361. }
  362. `;var zGt=T(S(),1),IL=`uniform vec4 fadeInColor;
  363. uniform vec4 fadeOutColor;
  364. uniform float maximumDistance;
  365. uniform bool repeat;
  366. uniform vec2 fadeDirection;
  367. uniform vec2 time;
  368. float getTime(float t, float coord)
  369. {
  370. float scalar = 1.0 / maximumDistance;
  371. float q = distance(t, coord) * scalar;
  372. if (repeat)
  373. {
  374. float r = distance(t, coord + 1.0) * scalar;
  375. float s = distance(t, coord - 1.0) * scalar;
  376. q = min(min(r, s), q);
  377. }
  378. return clamp(q, 0.0, 1.0);
  379. }
  380. czm_material czm_getMaterial(czm_materialInput materialInput)
  381. {
  382. czm_material material = czm_getDefaultMaterial(materialInput);
  383. vec2 st = materialInput.st;
  384. float s = getTime(time.x, st.s) * fadeDirection.s;
  385. float t = getTime(time.y, st.t) * fadeDirection.t;
  386. float u = length(vec2(s, t));
  387. vec4 color = mix(fadeInColor, fadeOutColor, u);
  388. color = czm_gammaCorrect(color);
  389. material.emission = color.rgb;
  390. material.alpha = color.a;
  391. return material;
  392. }
  393. `;var QGt=T(S(),1),WL=`uniform vec4 color;
  394. uniform float cellAlpha;
  395. uniform vec2 lineCount;
  396. uniform vec2 lineThickness;
  397. uniform vec2 lineOffset;
  398. czm_material czm_getMaterial(czm_materialInput materialInput)
  399. {
  400. czm_material material = czm_getDefaultMaterial(materialInput);
  401. vec2 st = materialInput.st;
  402. float scaledWidth = fract(lineCount.s * st.s - lineOffset.s);
  403. scaledWidth = abs(scaledWidth - floor(scaledWidth + 0.5));
  404. float scaledHeight = fract(lineCount.t * st.t - lineOffset.t);
  405. scaledHeight = abs(scaledHeight - floor(scaledHeight + 0.5));
  406. float value;
  407. // Fuzz Factor - Controls blurriness of lines
  408. #if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives))
  409. const float fuzz = 1.2;
  410. vec2 thickness = (lineThickness * czm_pixelRatio) - 1.0;
  411. // From "3D Engine Design for Virtual Globes" by Cozzi and Ring, Listing 4.13.
  412. vec2 dx = abs(dFdx(st));
  413. vec2 dy = abs(dFdy(st));
  414. vec2 dF = vec2(max(dx.s, dy.s), max(dx.t, dy.t)) * lineCount;
  415. value = min(
  416. smoothstep(dF.s * thickness.s, dF.s * (fuzz + thickness.s), scaledWidth),
  417. smoothstep(dF.t * thickness.t, dF.t * (fuzz + thickness.t), scaledHeight));
  418. #else
  419. // If no derivatives available (IE 10?), revert to view-dependent fuzz
  420. const float fuzz = 0.05;
  421. vec2 range = 0.5 - (lineThickness * 0.05);
  422. value = min(
  423. 1.0 - smoothstep(range.s, range.s + fuzz, scaledWidth),
  424. 1.0 - smoothstep(range.t, range.t + fuzz, scaledHeight));
  425. #endif
  426. // Edges taken from RimLightingMaterial.glsl
  427. // See http://www.fundza.com/rman_shaders/surface/fake_rim/fake_rim1.html
  428. float dRim = 1.0 - abs(dot(materialInput.normalEC, normalize(materialInput.positionToEyeEC)));
  429. float sRim = smoothstep(0.8, 1.0, dRim);
  430. value *= (1.0 - sRim);
  431. vec4 halfColor;
  432. halfColor.rgb = color.rgb * 0.5;
  433. halfColor.a = color.a * (1.0 - ((1.0 - cellAlpha) * value));
  434. halfColor = czm_gammaCorrect(halfColor);
  435. material.diffuse = halfColor.rgb;
  436. material.emission = halfColor.rgb;
  437. material.alpha = halfColor.a;
  438. return material;
  439. }
  440. `;var qGt=T(S(),1),PL=`uniform sampler2D image;
  441. uniform float strength;
  442. uniform vec2 repeat;
  443. czm_material czm_getMaterial(czm_materialInput materialInput)
  444. {
  445. czm_material material = czm_getDefaultMaterial(materialInput);
  446. vec4 textureValue = texture(image, fract(repeat * materialInput.st));
  447. vec3 normalTangentSpace = textureValue.channels;
  448. normalTangentSpace.xy = normalTangentSpace.xy * 2.0 - 1.0;
  449. normalTangentSpace.z = clamp(1.0 - strength, 0.1, 1.0);
  450. normalTangentSpace = normalize(normalTangentSpace);
  451. vec3 normalEC = materialInput.tangentToEyeMatrix * normalTangentSpace;
  452. material.normal = normalEC;
  453. return material;
  454. }
  455. `;var eEt=T(S(),1),vL=`uniform vec4 color;
  456. float getPointOnLine(vec2 p0, vec2 p1, float x)
  457. {
  458. float slope = (p0.y - p1.y) / (p0.x - p1.x);
  459. return slope * (x - p0.x) + p0.y;
  460. }
  461. czm_material czm_getMaterial(czm_materialInput materialInput)
  462. {
  463. czm_material material = czm_getDefaultMaterial(materialInput);
  464. vec2 st = materialInput.st;
  465. #if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives))
  466. float base = 1.0 - abs(fwidth(st.s)) * 10.0 * czm_pixelRatio;
  467. #else
  468. // If no derivatives available (IE 10?), 2.5% of the line will be the arrow head
  469. float base = 0.975;
  470. #endif
  471. vec2 center = vec2(1.0, 0.5);
  472. float ptOnUpperLine = getPointOnLine(vec2(base, 1.0), center, st.s);
  473. float ptOnLowerLine = getPointOnLine(vec2(base, 0.0), center, st.s);
  474. float halfWidth = 0.15;
  475. float s = step(0.5 - halfWidth, st.t);
  476. s *= 1.0 - step(0.5 + halfWidth, st.t);
  477. s *= 1.0 - step(base, st.s);
  478. float t = step(base, materialInput.st.s);
  479. t *= 1.0 - step(ptOnUpperLine, st.t);
  480. t *= step(ptOnLowerLine, st.t);
  481. // Find the distance from the closest separator (region between two colors)
  482. float dist;
  483. if (st.s < base)
  484. {
  485. float d1 = abs(st.t - (0.5 - halfWidth));
  486. float d2 = abs(st.t - (0.5 + halfWidth));
  487. dist = min(d1, d2);
  488. }
  489. else
  490. {
  491. float d1 = czm_infinity;
  492. if (st.t < 0.5 - halfWidth && st.t > 0.5 + halfWidth)
  493. {
  494. d1 = abs(st.s - base);
  495. }
  496. float d2 = abs(st.t - ptOnUpperLine);
  497. float d3 = abs(st.t - ptOnLowerLine);
  498. dist = min(min(d1, d2), d3);
  499. }
  500. vec4 outsideColor = vec4(0.0);
  501. vec4 currentColor = mix(outsideColor, color, clamp(s + t, 0.0, 1.0));
  502. vec4 outColor = czm_antialias(outsideColor, color, currentColor, dist);
  503. outColor = czm_gammaCorrect(outColor);
  504. material.diffuse = outColor.rgb;
  505. material.alpha = outColor.a;
  506. return material;
  507. }
  508. `;var nEt=T(S(),1),wL=`uniform vec4 color;
  509. uniform vec4 gapColor;
  510. uniform float dashLength;
  511. uniform float dashPattern;
  512. in float v_polylineAngle;
  513. const float maskLength = 16.0;
  514. mat2 rotate(float rad) {
  515. float c = cos(rad);
  516. float s = sin(rad);
  517. return mat2(
  518. c, s,
  519. -s, c
  520. );
  521. }
  522. czm_material czm_getMaterial(czm_materialInput materialInput)
  523. {
  524. czm_material material = czm_getDefaultMaterial(materialInput);
  525. vec2 pos = rotate(v_polylineAngle) * gl_FragCoord.xy;
  526. // Get the relative position within the dash from 0 to 1
  527. float dashPosition = fract(pos.x / (dashLength * czm_pixelRatio));
  528. // Figure out the mask index.
  529. float maskIndex = floor(dashPosition * maskLength);
  530. // Test the bit mask.
  531. float maskTest = floor(dashPattern / pow(2.0, maskIndex));
  532. vec4 fragColor = (mod(maskTest, 2.0) < 1.0) ? gapColor : color;
  533. if (fragColor.a < 0.005) { // matches 0/255 and 1/255
  534. discard;
  535. }
  536. fragColor = czm_gammaCorrect(fragColor);
  537. material.emission = fragColor.rgb;
  538. material.alpha = fragColor.a;
  539. return material;
  540. }
  541. `;var oEt=T(S(),1),FL=`uniform vec4 color;
  542. uniform float glowPower;
  543. uniform float taperPower;
  544. czm_material czm_getMaterial(czm_materialInput materialInput)
  545. {
  546. czm_material material = czm_getDefaultMaterial(materialInput);
  547. vec2 st = materialInput.st;
  548. float glow = glowPower / abs(st.t - 0.5) - (glowPower / 0.5);
  549. if (taperPower <= 0.99999) {
  550. glow *= min(1.0, taperPower / (0.5 - st.s * 0.5) - (taperPower / 0.5));
  551. }
  552. vec4 fragColor;
  553. fragColor.rgb = max(vec3(glow - 1.0 + color.rgb), color.rgb);
  554. fragColor.a = clamp(0.0, 1.0, glow) * color.a;
  555. fragColor = czm_gammaCorrect(fragColor);
  556. material.emission = fragColor.rgb;
  557. material.alpha = fragColor.a;
  558. return material;
  559. }
  560. `;var sEt=T(S(),1),AL=`uniform vec4 color;
  561. uniform vec4 outlineColor;
  562. uniform float outlineWidth;
  563. in float v_width;
  564. czm_material czm_getMaterial(czm_materialInput materialInput)
  565. {
  566. czm_material material = czm_getDefaultMaterial(materialInput);
  567. vec2 st = materialInput.st;
  568. float halfInteriorWidth = 0.5 * (v_width - outlineWidth) / v_width;
  569. float b = step(0.5 - halfInteriorWidth, st.t);
  570. b *= 1.0 - step(0.5 + halfInteriorWidth, st.t);
  571. // Find the distance from the closest separator (region between two colors)
  572. float d1 = abs(st.t - (0.5 - halfInteriorWidth));
  573. float d2 = abs(st.t - (0.5 + halfInteriorWidth));
  574. float dist = min(d1, d2);
  575. vec4 currentColor = mix(outlineColor, color, b);
  576. vec4 outColor = czm_antialias(outlineColor, color, currentColor, dist);
  577. outColor = czm_gammaCorrect(outColor);
  578. material.diffuse = outColor.rgb;
  579. material.alpha = outColor.a;
  580. return material;
  581. }
  582. `;var cEt=T(S(),1),ML=`uniform vec4 color;
  583. uniform vec4 rimColor;
  584. uniform float width;
  585. czm_material czm_getMaterial(czm_materialInput materialInput)
  586. {
  587. czm_material material = czm_getDefaultMaterial(materialInput);
  588. // See http://www.fundza.com/rman_shaders/surface/fake_rim/fake_rim1.html
  589. float d = 1.0 - dot(materialInput.normalEC, normalize(materialInput.positionToEyeEC));
  590. float s = smoothstep(1.0 - width, 1.0, d);
  591. vec4 outColor = czm_gammaCorrect(color);
  592. vec4 outRimColor = czm_gammaCorrect(rimColor);
  593. material.diffuse = outColor.rgb;
  594. material.emission = outRimColor.rgb * s;
  595. material.alpha = mix(outColor.a, outRimColor.a, s);
  596. return material;
  597. }
  598. `;var dEt=T(S(),1),NL=`uniform sampler2D image;
  599. czm_material czm_getMaterial(czm_materialInput materialInput)
  600. {
  601. czm_material material = czm_getDefaultMaterial(materialInput);
  602. vec4 rampColor = texture(image, vec2(materialInput.slope / (czm_pi / 2.0), 0.5));
  603. rampColor = czm_gammaCorrect(rampColor);
  604. material.diffuse = rampColor.rgb;
  605. material.alpha = rampColor.a;
  606. return material;
  607. }
  608. `;var mEt=T(S(),1),UL=`uniform vec4 evenColor;
  609. uniform vec4 oddColor;
  610. uniform float offset;
  611. uniform float repeat;
  612. uniform bool horizontal;
  613. czm_material czm_getMaterial(czm_materialInput materialInput)
  614. {
  615. czm_material material = czm_getDefaultMaterial(materialInput);
  616. // Based on the Stripes Fragment Shader in the Orange Book (11.1.2)
  617. float coord = mix(materialInput.st.s, materialInput.st.t, float(horizontal));
  618. float value = fract((coord - offset) * (repeat * 0.5));
  619. float dist = min(value, min(abs(value - 0.5), 1.0 - value));
  620. vec4 currentColor = mix(evenColor, oddColor, step(0.5, value));
  621. vec4 color = czm_antialias(evenColor, oddColor, currentColor, dist);
  622. color = czm_gammaCorrect(color);
  623. material.diffuse = color.rgb;
  624. material.alpha = color.a;
  625. return material;
  626. }
  627. `;var fEt=T(S(),1),kL=`// Thanks for the contribution Jonas
  628. // http://29a.ch/2012/7/19/webgl-terrain-rendering-water-fog
  629. uniform sampler2D specularMap;
  630. uniform sampler2D normalMap;
  631. uniform vec4 baseWaterColor;
  632. uniform vec4 blendColor;
  633. uniform float frequency;
  634. uniform float animationSpeed;
  635. uniform float amplitude;
  636. uniform float specularIntensity;
  637. uniform float fadeFactor;
  638. czm_material czm_getMaterial(czm_materialInput materialInput)
  639. {
  640. czm_material material = czm_getDefaultMaterial(materialInput);
  641. float time = czm_frameNumber * animationSpeed;
  642. // fade is a function of the distance from the fragment and the frequency of the waves
  643. float fade = max(1.0, (length(materialInput.positionToEyeEC) / 10000000000.0) * frequency * fadeFactor);
  644. float specularMapValue = texture(specularMap, materialInput.st).r;
  645. // note: not using directional motion at this time, just set the angle to 0.0;
  646. vec4 noise = czm_getWaterNoise(normalMap, materialInput.st * frequency, time, 0.0);
  647. vec3 normalTangentSpace = noise.xyz * vec3(1.0, 1.0, (1.0 / amplitude));
  648. // fade out the normal perturbation as we move further from the water surface
  649. normalTangentSpace.xy /= fade;
  650. // attempt to fade out the normal perturbation as we approach non water areas (low specular map value)
  651. normalTangentSpace = mix(vec3(0.0, 0.0, 50.0), normalTangentSpace, specularMapValue);
  652. normalTangentSpace = normalize(normalTangentSpace);
  653. // get ratios for alignment of the new normal vector with a vector perpendicular to the tangent plane
  654. float tsPerturbationRatio = clamp(dot(normalTangentSpace, vec3(0.0, 0.0, 1.0)), 0.0, 1.0);
  655. // fade out water effect as specular map value decreases
  656. material.alpha = mix(blendColor.a, baseWaterColor.a, specularMapValue) * specularMapValue;
  657. // base color is a blend of the water and non-water color based on the value from the specular map
  658. // may need a uniform blend factor to better control this
  659. material.diffuse = mix(blendColor.rgb, baseWaterColor.rgb, specularMapValue);
  660. // diffuse highlights are based on how perturbed the normal is
  661. material.diffuse += (0.1 * tsPerturbationRatio);
  662. material.diffuse = material.diffuse;
  663. material.normal = normalize(materialInput.tangentToEyeMatrix * normalTangentSpace);
  664. material.specular = specularIntensity;
  665. material.shininess = 10.0;
  666. return material;
  667. }
  668. `;function ze(e){this.type=void 0,this.shaderSource=void 0,this.materials=void 0,this.uniforms=void 0,this._uniforms=void 0,this.translucent=void 0,this._minificationFilter=g(e.minificationFilter,cn.LINEAR),this._magnificationFilter=g(e.magnificationFilter,Ti.LINEAR),this._strict=void 0,this._template=void 0,this._count=void 0,this._texturePaths={},this._loadedImages=[],this._loadedCubeMaps=[],this._textures={},this._updateFunctions=[],this._defaultTexture=void 0,N1e(e,this),Object.defineProperties(this,{type:{value:this.type,writable:!1}}),d(ze._uniformList[this.type])||(ze._uniformList[this.type]=Object.keys(this._uniforms))}ze._uniformList={};ze.fromType=function(e,t){let n=new ze({fabric:{type:e}});if(d(t))for(let i in t)t.hasOwnProperty(i)&&(n.uniforms[i]=t[i]);return n};ze.prototype.isTranslucent=function(){if(d(this.translucent))return typeof this.translucent=="function"?this.translucent():this.translucent;let e=!0,t=this._translucentFunctions,n=t.length;for(let i=0;i<n;++i){let o=t[i];if(typeof o=="function"?e=e&&o():e=e&&o,!e)break}return e};ze.prototype.update=function(e){this._defaultTexture=e.defaultTexture;let t,n,i=this._loadedImages,o=i.length;for(t=0;t<o;++t){let c=i[t];n=c.id;let l=c.image,u;Array.isArray(l)&&(u=l.slice(1,l.length).map(function(x){return x.bufferView}),l=l[0]);let m=new un({minificationFilter:this._minificationFilter,magnificationFilter:this._magnificationFilter}),p;d(l.internalFormat)?p=new Wt({context:e,pixelFormat:l.internalFormat,width:l.width,height:l.height,source:{arrayBufferView:l.bufferView,mipLevels:u},sampler:m}):p=new Wt({context:e,source:l,sampler:m});let y=this._textures[n];d(y)&&y!==this._defaultTexture&&y.destroy(),this._textures[n]=p;let f=`${n}Dimensions`;if(this.uniforms.hasOwnProperty(f)){let x=this.uniforms[f];x.x=p._width,x.y=p._height}}i.length=0;let r=this._loadedCubeMaps;for(o=r.length,t=0;t<o;++t){let c=r[t];n=c.id;let l=c.images,u=new Ma({context:e,source:{positiveX:l[0],negativeX:l[1],positiveY:l[2],negativeY:l[3],positiveZ:l[4],negativeZ:l[5]},sampler:new un({minificationFilter:this._minificationFilter,magnificationFilter:this._magnificationFilter})});this._textures[n]=u}r.length=0;let s=this._updateFunctions;for(o=s.length,t=0;t<o;++t)s[t](this,e);let a=this.materials;for(let c in a)a.hasOwnProperty(c)&&a[c].update(e)};ze.prototype.isDestroyed=function(){return!1};ze.prototype.destroy=function(){let e=this._textures;for(let n in e)if(e.hasOwnProperty(n)){let i=e[n];i!==this._defaultTexture&&i.destroy()}let t=this.materials;for(let n in t)t.hasOwnProperty(n)&&t[n].destroy();return ue(this)};function N1e(e,t){e=g(e,g.EMPTY_OBJECT),t._strict=g(e.strict,!1),t._count=g(e.count,0),t._template=Ke(g(e.fabric,g.EMPTY_OBJECT)),t._template.uniforms=Ke(g(t._template.uniforms,g.EMPTY_OBJECT)),t._template.materials=Ke(g(t._template.materials,g.EMPTY_OBJECT)),t.type=d(t._template.type)?t._template.type:Yn(),t.shaderSource="",t.materials={},t.uniforms={},t._uniforms={},t._translucentFunctions=[];let n,i=ze._materialCache.getMaterial(t.type);if(d(i)){let r=Ke(i.fabric,!0);t._template=xt(t._template,r,!0),n=i.translucent}B1e(t),d(i)||ze._materialCache.addMaterial(t.type,t),O1e(t),J1e(t),j1e(t);let o=t._translucentFunctions.length===0?!0:void 0;if(n=g(n,o),n=g(e.translucent,n),d(n))if(typeof n=="function"){let r=function(){return n(t)};t._translucentFunctions.push(r)}else t._translucentFunctions.push(n)}function qB(e,t,n,i){if(d(e)){for(let o in e)if(e.hasOwnProperty(o)){let r=t.indexOf(o)!==-1;(i&&!r||!i&&r)&&n(o,t)}}}function g6(e,t){}function U1e(e,t){}var k1e=["type","materials","uniforms","components","source"],D1e=["diffuse","specular","shininess","normal","emission","alpha"];function B1e(e){let t=e._template,n=t.uniforms,i=t.materials,o=t.components;qB(t,k1e,g6,!0),qB(o,D1e,g6,!0);let r=[];for(let s in i)i.hasOwnProperty(s)&&r.push(s);qB(n,r,U1e,!1)}function Y1e(e,t){let n=t._template.materials;for(let i in n)if(n.hasOwnProperty(i)&&e.indexOf(i)>-1)return!0;return!1}function O1e(e){let t=e._template.components,n=e._template.source;if(d(n))e.shaderSource+=`${n}
  669. `;else{if(e.shaderSource+=`czm_material czm_getMaterial(czm_materialInput materialInput)
  670. {
  671. `,e.shaderSource+=`czm_material material = czm_getDefaultMaterial(materialInput);
  672. `,d(t)){let i=Object.keys(e._template.materials).length>0;for(let o in t)if(t.hasOwnProperty(o))if(o==="diffuse"||o==="emission"){let s=i&&Y1e(t[o],e)?t[o]:`czm_gammaCorrect(${t[o]})`;e.shaderSource+=`material.${o} = ${s};
  673. `}else o==="alpha"?e.shaderSource+=`material.alpha = ${t.alpha};
  674. `:e.shaderSource+=`material.${o} = ${t[o]};
  675. `}e.shaderSource+=`return material;
  676. }
  677. `}}var x6={mat2:$i,mat3:$,mat4:A},K1e=/\.ktx2$/i;function H1e(e){let t;return function(n,i){let o=n.uniforms,r=o[e],s=t!==r,a=!d(r)||r===ze.DefaultImageId;t=r;let c=n._textures[e],l,u;if(r instanceof HTMLVideoElement){if(r.readyState>=2){if(s&&d(c)&&(c!==i.defaultTexture&&c.destroy(),c=void 0),!d(c)||c===i.defaultTexture){let p=new un({minificationFilter:n._minificationFilter,magnificationFilter:n._magnificationFilter});c=new Wt({context:i,source:r,sampler:p}),n._textures[e]=c;return}c.copyFrom({source:r})}else d(c)||(n._textures[e]=i.defaultTexture);return}if(r instanceof Wt&&r!==c){n._texturePaths[e]=void 0;let p=n._textures[e];d(p)&&p!==n._defaultTexture&&p.destroy(),n._textures[e]=r,l=`${e}Dimensions`,o.hasOwnProperty(l)&&(u=o[l],u.x=r._width,u.y=r._height);return}if(s&&d(c)&&a&&(c!==n._defaultTexture&&c.destroy(),c=void 0),d(c)||(n._texturePaths[e]=void 0,c=n._textures[e]=n._defaultTexture,l=`${e}Dimensions`,o.hasOwnProperty(l)&&(u=o[l],u.x=c._width,u.y=c._height)),a)return;let m=r instanceof Ee;if(!d(n._texturePaths[e])||m&&r.url!==n._texturePaths[e].url||!m&&r!==n._texturePaths[e]){if(typeof r=="string"||m){let p=m?r:Ee.createIfNeeded(r),y;K1e.test(p.url)?y=sl(p.url):y=p.fetchImage(),Promise.resolve(y).then(function(f){n._loadedImages.push({id:e,image:f})}).catch(function(){d(c)&&c!==n._defaultTexture&&c.destroy(),n._textures[e]=n._defaultTexture})}else(r instanceof HTMLCanvasElement||r instanceof HTMLImageElement)&&n._loadedImages.push({id:e,image:r});n._texturePaths[e]=r}}}function z1e(e){return function(t,n){let i=t.uniforms[e];if(i instanceof Ma){let r=t._textures[e];r!==t._defaultTexture&&r.destroy(),t._texturePaths[e]=void 0,t._textures[e]=i;return}if(d(t._textures[e])||(t._texturePaths[e]=void 0,t._textures[e]=n.defaultCubeMap),i===ze.DefaultCubeMapId)return;let o=i.positiveX+i.negativeX+i.positiveY+i.negativeY+i.positiveZ+i.negativeZ;if(o!==t._texturePaths[e]){let r=[Ee.createIfNeeded(i.positiveX).fetchImage(),Ee.createIfNeeded(i.negativeX).fetchImage(),Ee.createIfNeeded(i.positiveY).fetchImage(),Ee.createIfNeeded(i.negativeY).fetchImage(),Ee.createIfNeeded(i.positiveZ).fetchImage(),Ee.createIfNeeded(i.negativeZ).fetchImage()];Promise.all(r).then(function(s){t._loadedCubeMaps.push({id:e,images:s})}),t._texturePaths[e]=o}}}function J1e(e){let t=e._template.uniforms;for(let n in t)t.hasOwnProperty(n)&&_6(e,n)}function _6(e,t){let n=e._strict,i=e._template.uniforms,o=i[t],r=Q1e(o),s;if(r==="channels")s=DL(e,t,o,!1);else{if(r==="sampler2D"){let l=`${t}Dimensions`;q1e(e,l)>0&&(i[l]={type:"ivec3",x:1,y:1},_6(e,l))}if(!new RegExp(`uniform\\s+${r}\\s+${t}\\s*;`).test(e.shaderSource)){let l=`uniform ${r} ${t};`;e.shaderSource=l+e.shaderSource}let c=`${t}_${e._count++}`;if(s=DL(e,t,c),e.uniforms[t]=o,r==="sampler2D")e._uniforms[c]=function(){return e._textures[t]},e._updateFunctions.push(H1e(t));else if(r==="samplerCube")e._uniforms[c]=function(){return e._textures[t]},e._updateFunctions.push(z1e(t));else if(r.indexOf("mat")!==-1){let l=new x6[r];e._uniforms[c]=function(){return x6[r].fromColumnMajorArray(e.uniforms[t],l)}}else e._uniforms[c]=function(){return e.uniforms[t]}}}function Q1e(e){let t=e.type;if(!d(t)){let n=typeof e;if(n==="number")t="float";else if(n==="boolean")t="bool";else if(n==="string"||e instanceof Ee||e instanceof HTMLCanvasElement||e instanceof HTMLImageElement)/^([rgba]){1,4}$/i.test(e)?t="channels":e===ze.DefaultCubeMapId?t="samplerCube":t="sampler2D";else if(n==="object")if(Array.isArray(e))(e.length===4||e.length===9||e.length===16)&&(t=`mat${Math.sqrt(e.length)}`);else{let i=0;for(let o in e)e.hasOwnProperty(o)&&(i+=1);i>=2&&i<=4?t=`vec${i}`:i===6&&(t="samplerCube")}}return t}function j1e(e){let t=e._strict,n=e._template.materials;for(let i in n)if(n.hasOwnProperty(i)){let o=new ze({strict:t,fabric:n[i],count:e._count});e._count=o._count,e._uniforms=xt(e._uniforms,o._uniforms,!0),e.materials[i]=o,e._translucentFunctions=e._translucentFunctions.concat(o._translucentFunctions);let r="czm_getMaterial",s=`${r}_${e._count++}`;DL(o,r,s),e.shaderSource=o.shaderSource+e.shaderSource;let a=`${s}(materialInput)`,c=DL(e,i,a)}}function DL(e,t,n,i){i=g(i,!0);let o=0,r="([\\w])?",s=`([\\w${i?".":""}])?`,a=new RegExp(s+t+r,"g");return e.shaderSource=e.shaderSource.replace(a,function(c,l,u){return l||u?c:(o+=1,n)}),o}function q1e(e,t,n){return DL(e,t,t,n)}ze._materialCache={_materials:{},addMaterial:function(e,t){this._materials[e]=t},getMaterial:function(e){return this._materials[e]}};ze.DefaultImageId="czm_defaultImage";ze.DefaultCubeMapId="czm_defaultCubeMap";ze.ColorType="Color";ze._materialCache.addMaterial(ze.ColorType,{fabric:{type:ze.ColorType,uniforms:{color:new Y(1,0,0,.5)},components:{diffuse:"color.rgb",alpha:"color.a"}},translucent:function(e){return e.uniforms.color.alpha<1}});ze.ImageType="Image";ze._materialCache.addMaterial(ze.ImageType,{fabric:{type:ze.ImageType,uniforms:{image:ze.DefaultImageId,repeat:new D(1,1),color:new Y(1,1,1,1)},components:{diffuse:"texture(image, fract(repeat * materialInput.st)).rgb * color.rgb",alpha:"texture(image, fract(repeat * materialInput.st)).a * color.a"}},translucent:function(e){return e.uniforms.color.alpha<1}});ze.DiffuseMapType="DiffuseMap";ze._materialCache.addMaterial(ze.DiffuseMapType,{fabric:{type:ze.DiffuseMapType,uniforms:{image:ze.DefaultImageId,channels:"rgb",repeat:new D(1,1)},components:{diffuse:"texture(image, fract(repeat * materialInput.st)).channels"}},translucent:!1});ze.AlphaMapType="AlphaMap";ze._materialCache.addMaterial(ze.AlphaMapType,{fabric:{type:ze.AlphaMapType,uniforms:{image:ze.DefaultImageId,channel:"a",repeat:new D(1,1)},components:{alpha:"texture(image, fract(repeat * materialInput.st)).channel"}},translucent:!0});ze.SpecularMapType="SpecularMap";ze._materialCache.addMaterial(ze.SpecularMapType,{fabric:{type:ze.SpecularMapType,uniforms:{image:ze.DefaultImageId,channel:"r",repeat:new D(1,1)},components:{specular:"texture(image, fract(repeat * materialInput.st)).channel"}},translucent:!1});ze.EmissionMapType="EmissionMap";ze._materialCache.addMaterial(ze.EmissionMapType,{fabric:{type:ze.EmissionMapType,uniforms:{image:ze.DefaultImageId,channels:"rgb",repeat:new D(1,1)},components:{emission:"texture(image, fract(repeat * materialInput.st)).channels"}},translucent:!1});ze.BumpMapType="BumpMap";ze._materialCache.addMaterial(ze.BumpMapType,{fabric:{type:ze.BumpMapType,uniforms:{image:ze.DefaultImageId,channel:"r",strength:.8,repeat:new D(1,1)},source:LL},translucent:!1});ze.NormalMapType="NormalMap";ze._materialCache.addMaterial(ze.NormalMapType,{fabric:{type:ze.NormalMapType,uniforms:{image:ze.DefaultImageId,channels:"rgb",strength:.8,repeat:new D(1,1)},source:PL},translucent:!1});ze.GridType="Grid";ze._materialCache.addMaterial(ze.GridType,{fabric:{type:ze.GridType,uniforms:{color:new Y(0,1,0,1),cellAlpha:.1,lineCount:new D(8,8),lineThickness:new D(1,1),lineOffset:new D(0,0)},source:WL},translucent:function(e){let t=e.uniforms;return t.color.alpha<1||t.cellAlpha<1}});ze.StripeType="Stripe";ze._materialCache.addMaterial(ze.StripeType,{fabric:{type:ze.StripeType,uniforms:{horizontal:!0,evenColor:new Y(1,1,1,.5),oddColor:new Y(0,0,1,.5),offset:0,repeat:5},source:UL},translucent:function(e){let t=e.uniforms;return t.evenColor.alpha<1||t.oddColor.alpha<1}});ze.CheckerboardType="Checkerboard";ze._materialCache.addMaterial(ze.CheckerboardType,{fabric:{type:ze.CheckerboardType,uniforms:{lightColor:new Y(1,1,1,.5),darkColor:new Y(0,0,0,.5),repeat:new D(5,5)},source:RL},translucent:function(e){let t=e.uniforms;return t.lightColor.alpha<1||t.darkColor.alpha<1}});ze.DotType="Dot";ze._materialCache.addMaterial(ze.DotType,{fabric:{type:ze.DotType,uniforms:{lightColor:new Y(1,1,0,.75),darkColor:new Y(0,1,1,.75),repeat:new D(5,5)},source:ZL},translucent:function(e){let t=e.uniforms;return t.lightColor.alpha<1||t.darkColor.alpha<1}});ze.WaterType="Water";ze._materialCache.addMaterial(ze.WaterType,{fabric:{type:ze.WaterType,uniforms:{baseWaterColor:new Y(.2,.3,.6,1),blendColor:new Y(0,1,.699,1),specularMap:ze.DefaultImageId,normalMap:ze.DefaultImageId,frequency:10,animationSpeed:.01,amplitude:1,specularIntensity:.5,fadeFactor:1},source:kL},translucent:function(e){let t=e.uniforms;return t.baseWaterColor.alpha<1||t.blendColor.alpha<1}});ze.RimLightingType="RimLighting";ze._materialCache.addMaterial(ze.RimLightingType,{fabric:{type:ze.RimLightingType,uniforms:{color:new Y(1,0,0,.7),rimColor:new Y(1,1,1,.4),width:.3},source:ML},translucent:function(e){let t=e.uniforms;return t.color.alpha<1||t.rimColor.alpha<1}});ze.FadeType="Fade";ze._materialCache.addMaterial(ze.FadeType,{fabric:{type:ze.FadeType,uniforms:{fadeInColor:new Y(1,0,0,1),fadeOutColor:new Y(0,0,0,0),maximumDistance:.5,repeat:!0,fadeDirection:{x:!0,y:!0},time:new D(.5,.5)},source:IL},translucent:function(e){let t=e.uniforms;return t.fadeInColor.alpha<1||t.fadeOutColor.alpha<1}});ze.PolylineArrowType="PolylineArrow";ze._materialCache.addMaterial(ze.PolylineArrowType,{fabric:{type:ze.PolylineArrowType,uniforms:{color:new Y(1,1,1,1)},source:vL},translucent:!0});ze.PolylineDashType="PolylineDash";ze._materialCache.addMaterial(ze.PolylineDashType,{fabric:{type:ze.PolylineDashType,uniforms:{color:new Y(1,0,1,1),gapColor:new Y(0,0,0,0),dashLength:16,dashPattern:255},source:wL},translucent:!0});ze.PolylineGlowType="PolylineGlow";ze._materialCache.addMaterial(ze.PolylineGlowType,{fabric:{type:ze.PolylineGlowType,uniforms:{color:new Y(0,.5,1,1),glowPower:.25,taperPower:1},source:FL},translucent:!0});ze.PolylineOutlineType="PolylineOutline";ze._materialCache.addMaterial(ze.PolylineOutlineType,{fabric:{type:ze.PolylineOutlineType,uniforms:{color:new Y(1,1,1,1),outlineColor:new Y(1,0,0,1),outlineWidth:1},source:AL},translucent:function(e){let t=e.uniforms;return t.color.alpha<1||t.outlineColor.alpha<1}});ze.ElevationContourType="ElevationContour";ze._materialCache.addMaterial(ze.ElevationContourType,{fabric:{type:ze.ElevationContourType,uniforms:{spacing:100,color:new Y(1,0,0,1),width:1},source:EL},translucent:!1});ze.ElevationRampType="ElevationRamp";ze._materialCache.addMaterial(ze.ElevationRampType,{fabric:{type:ze.ElevationRampType,uniforms:{image:ze.DefaultImageId,minimumHeight:0,maximumHeight:1e4},source:XL},translucent:!1});ze.SlopeRampMaterialType="SlopeRamp";ze._materialCache.addMaterial(ze.SlopeRampMaterialType,{fabric:{type:ze.SlopeRampMaterialType,uniforms:{image:ze.DefaultImageId},source:NL},translucent:!1});ze.AspectRampMaterialType="AspectRamp";ze._materialCache.addMaterial(ze.AspectRampMaterialType,{fabric:{type:ze.AspectRampMaterialType,uniforms:{image:ze.DefaultImageId},source:VL},translucent:!1});ze.ElevationBandType="ElevationBand";ze._materialCache.addMaterial(ze.ElevationBandType,{fabric:{type:ze.ElevationBandType,uniforms:{heights:ze.DefaultImageId,colors:ze.DefaultImageId},source:GL},translucent:!0});var ki=ze;function Pg(e){e=g(e,g.EMPTY_OBJECT);let t=g(e.translucent,!0),n=g(e.closed,!1),i=g(e.materialSupport,Pg.MaterialSupport.TEXTURED);this.material=d(e.material)?e.material:ki.fromType(ki.ColorType),this.translucent=t,this._vertexShaderSource=g(e.vertexShaderSource,i.vertexShaderSource),this._fragmentShaderSource=g(e.fragmentShaderSource,i.fragmentShaderSource),this._renderState=to.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._materialSupport=i,this._vertexFormat=i.vertexFormat,this._flat=g(e.flat,!1),this._faceForward=g(e.faceForward,!n)}Object.defineProperties(Pg.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},materialSupport:{get:function(){return this._materialSupport}},vertexFormat:{get:function(){return this._vertexFormat}},flat:{get:function(){return this._flat}},faceForward:{get:function(){return this._faceForward}}});Pg.prototype.getFragmentShaderSource=to.prototype.getFragmentShaderSource;Pg.prototype.isTranslucent=to.prototype.isTranslucent;Pg.prototype.getRenderState=to.prototype.getRenderState;Pg.MaterialSupport={BASIC:Object.freeze({vertexFormat:We.POSITION_AND_NORMAL,vertexShaderSource:yL,fragmentShaderSource:bL}),TEXTURED:Object.freeze({vertexFormat:We.POSITION_NORMAL_AND_ST,vertexShaderSource:xL,fragmentShaderSource:gL}),ALL:Object.freeze({vertexFormat:We.ALL,vertexShaderSource:pL,fragmentShaderSource:fL})};var so=Pg;var GXt=T(S(),1);var hXt=T(S(),1),BL=`in vec3 v_positionEC;
  678. in vec3 v_normalEC;
  679. in vec4 v_color;
  680. void main()
  681. {
  682. vec3 positionToEyeEC = -v_positionEC;
  683. vec3 normalEC = normalize(v_normalEC);
  684. #ifdef FACE_FORWARD
  685. normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);
  686. #endif
  687. vec4 color = czm_gammaCorrect(v_color);
  688. czm_materialInput materialInput;
  689. materialInput.normalEC = normalEC;
  690. materialInput.positionToEyeEC = positionToEyeEC;
  691. czm_material material = czm_getDefaultMaterial(materialInput);
  692. material.diffuse = color.rgb;
  693. material.alpha = color.a;
  694. out_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);
  695. }
  696. `;var pXt=T(S(),1),YL=`in vec3 position3DHigh;
  697. in vec3 position3DLow;
  698. in vec3 normal;
  699. in vec4 color;
  700. in float batchId;
  701. out vec3 v_positionEC;
  702. out vec3 v_normalEC;
  703. out vec4 v_color;
  704. void main()
  705. {
  706. vec4 p = czm_computePosition();
  707. v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates
  708. v_normalEC = czm_normal * normal; // normal in eye coordinates
  709. v_color = color;
  710. gl_Position = czm_modelViewProjectionRelativeToEye * p;
  711. }
  712. `;var yXt=T(S(),1),vg=`in vec4 v_color;
  713. void main()
  714. {
  715. out_FragColor = czm_gammaCorrect(v_color);
  716. }
  717. `;var xXt=T(S(),1),OL=`in vec3 position3DHigh;
  718. in vec3 position3DLow;
  719. in vec4 color;
  720. in float batchId;
  721. out vec4 v_color;
  722. void main()
  723. {
  724. vec4 p = czm_computePosition();
  725. v_color = color;
  726. gl_Position = czm_modelViewProjectionRelativeToEye * p;
  727. }
  728. `;function qf(e){e=g(e,g.EMPTY_OBJECT);let t=g(e.translucent,!0),n=g(e.closed,!1),i=g(e.flat,!1),o=i?OL:YL,r=i?vg:BL,s=i?qf.FLAT_VERTEX_FORMAT:qf.VERTEX_FORMAT;this.material=void 0,this.translucent=t,this._vertexShaderSource=g(e.vertexShaderSource,o),this._fragmentShaderSource=g(e.fragmentShaderSource,r),this._renderState=to.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._vertexFormat=s,this._flat=i,this._faceForward=g(e.faceForward,!n)}Object.defineProperties(qf.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},vertexFormat:{get:function(){return this._vertexFormat}},flat:{get:function(){return this._flat}},faceForward:{get:function(){return this._faceForward}}});qf.VERTEX_FORMAT=We.POSITION_AND_NORMAL;qf.FLAT_VERTEX_FORMAT=We.POSITION_ONLY;qf.prototype.getFragmentShaderSource=to.prototype.getFragmentShaderSource;qf.prototype.isTranslucent=to.prototype.isTranslucent;qf.prototype.getRenderState=to.prototype.getRenderState;var rn=qf;var wXt=T(S(),1);function uS(e){this._definitionChanged=new ye,this._color=void 0,this._colorSubscription=void 0,this.color=e}Object.defineProperties(uS.prototype,{isConstant:{get:function(){return H.isConstant(this._color)}},definitionChanged:{get:function(){return this._definitionChanged}},color:le("color")});uS.prototype.getType=function(e){return"Color"};uS.prototype.getValue=function(e,t){return d(t)||(t={}),t.color=H.getValueOrClonedDefault(this._color,e,Y.WHITE,t.color),t};uS.prototype.equals=function(e){return this===e||e instanceof uS&&H.equals(this._color,e._color)};var At=uS;var rBt=T(S(),1);var NDt=T(S(),1);var iIt=T(S(),1);var YXt=T(S(),1);function sb(e){e=g(e,g.EMPTY_OBJECT),this._ellipsoid=g(e.ellipsoid,re.WGS84),this._rectangle=g(e.rectangle,de.MAX_VALUE),this._projection=new Zi(this._ellipsoid),this._numberOfLevelZeroTilesX=g(e.numberOfLevelZeroTilesX,2),this._numberOfLevelZeroTilesY=g(e.numberOfLevelZeroTilesY,1)}Object.defineProperties(sb.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},rectangle:{get:function(){return this._rectangle}},projection:{get:function(){return this._projection}}});sb.prototype.getNumberOfXTilesAtLevel=function(e){return this._numberOfLevelZeroTilesX<<e};sb.prototype.getNumberOfYTilesAtLevel=function(e){return this._numberOfLevelZeroTilesY<<e};sb.prototype.rectangleToNativeRectangle=function(e,t){let n=W.toDegrees(e.west),i=W.toDegrees(e.south),o=W.toDegrees(e.east),r=W.toDegrees(e.north);return d(t)?(t.west=n,t.south=i,t.east=o,t.north=r,t):new de(n,i,o,r)};sb.prototype.tileXYToNativeRectangle=function(e,t,n,i){let o=this.tileXYToRectangle(e,t,n,i);return o.west=W.toDegrees(o.west),o.south=W.toDegrees(o.south),o.east=W.toDegrees(o.east),o.north=W.toDegrees(o.north),o};sb.prototype.tileXYToRectangle=function(e,t,n,i){let o=this._rectangle,r=this.getNumberOfXTilesAtLevel(n),s=this.getNumberOfYTilesAtLevel(n),a=o.width/r,c=e*a+o.west,l=(e+1)*a+o.west,u=o.height/s,m=o.north-t*u,p=o.north-(t+1)*u;return d(i)||(i=new de(c,p,l,m)),i.west=c,i.south=p,i.east=l,i.north=m,i};sb.prototype.positionToTileXY=function(e,t,n){let i=this._rectangle;if(!de.contains(i,e))return;let o=this.getNumberOfXTilesAtLevel(t),r=this.getNumberOfYTilesAtLevel(t),s=i.width/o,a=i.height/r,c=e.longitude;i.east<i.west&&(c+=W.TWO_PI);let l=(c-i.west)/s|0;l>=o&&(l=o-1);let u=(i.north-e.latitude)/a|0;return u>=r&&(u=r-1),d(n)?(n.x=l,n.y=u,n):new D(l,u)};var Di=sb;var T6=new h,S6=new h,C6=new he,$B=new h,$1e=new h,V6=new ce,eVe=new Di,KL=[new he,new he,new he,new he],HL=new D,vr={};vr.initialize=function(){let e=vr._initPromise;return d(e)||(e=Ee.fetchJson($t("Assets/approximateTerrainHeights.json")).then(function(t){vr._terrainHeights=t}),vr._initPromise=e),e};vr.getMinimumMaximumHeights=function(e,t){t=g(t,re.WGS84);let n=L6(e),i=vr._defaultMinTerrainHeight,o=vr._defaultMaxTerrainHeight;if(d(n)){let r=`${n.level}-${n.x}-${n.y}`,s=vr._terrainHeights[r];d(s)&&(i=s[0],o=s[1]),t.cartographicToCartesian(de.northeast(e,C6),T6),t.cartographicToCartesian(de.southwest(e,C6),S6),h.midpoint(S6,T6,$B);let a=t.scaleToGeodeticSurface($B,$1e);if(d(a)){let c=h.distance($B,a);i=Math.min(i,-c)}else i=vr._defaultMinTerrainHeight}return i=Math.max(vr._defaultMinTerrainHeight,i),{minimumTerrainHeight:i,maximumTerrainHeight:o}};vr.getBoundingSphere=function(e,t){t=g(t,re.WGS84);let n=L6(e),i=vr._defaultMaxTerrainHeight;if(d(n)){let r=`${n.level}-${n.x}-${n.y}`,s=vr._terrainHeights[r];d(s)&&(i=s[1])}let o=ce.fromRectangle3D(e,t,0);return ce.fromRectangle3D(e,t,i,V6),ce.union(o,V6,o)};function L6(e){he.fromRadians(e.east,e.north,0,KL[0]),he.fromRadians(e.west,e.north,0,KL[1]),he.fromRadians(e.east,e.south,0,KL[2]),he.fromRadians(e.west,e.south,0,KL[3]);let t=0,n=0,i=0,o=0,r=vr._terrainHeightsMaxLevel,s;for(s=0;s<=r;++s){let a=!1;for(let c=0;c<4;++c){let l=KL[c];if(eVe.positionToTileXY(l,s,HL),c===0)i=HL.x,o=HL.y;else if(i!==HL.x||o!==HL.y){a=!0;break}}if(a)break;t=i,n=o}if(s!==0)return{x:t,y:n,level:s>r?r:s-1}}vr._terrainHeightsMaxLevel=6;vr._defaultMaxTerrainHeight=9e3;vr._defaultMinTerrainHeight=-1e5;vr._terrainHeights=void 0;vr._initPromise=void 0;Object.defineProperties(vr,{initialized:{get:function(){return d(vr._terrainHeights)}}});var li=vr;var _Wt=T(S(),1);var iWt=T(S(),1);var lIt=T(S(),1);function _c(e,t,n){this.minimum=h.clone(g(e,h.ZERO)),this.maximum=h.clone(g(t,h.ZERO)),d(n)?n=h.clone(n):n=h.midpoint(this.minimum,this.maximum,new h),this.center=n}_c.fromCorners=function(e,t,n){return d(n)||(n=new _c),n.minimum=h.clone(e,n.minimum),n.maximum=h.clone(t,n.maximum),n.center=h.midpoint(e,t,n.center),n};_c.fromPoints=function(e,t){if(d(t)||(t=new _c),!d(e)||e.length===0)return t.minimum=h.clone(h.ZERO,t.minimum),t.maximum=h.clone(h.ZERO,t.maximum),t.center=h.clone(h.ZERO,t.center),t;let n=e[0].x,i=e[0].y,o=e[0].z,r=e[0].x,s=e[0].y,a=e[0].z,c=e.length;for(let m=1;m<c;m++){let p=e[m],y=p.x,f=p.y,x=p.z;n=Math.min(y,n),r=Math.max(y,r),i=Math.min(f,i),s=Math.max(f,s),o=Math.min(x,o),a=Math.max(x,a)}let l=t.minimum;l.x=n,l.y=i,l.z=o;let u=t.maximum;return u.x=r,u.y=s,u.z=a,t.center=h.midpoint(l,u,t.center),t};_c.clone=function(e,t){if(d(e))return d(t)?(t.minimum=h.clone(e.minimum,t.minimum),t.maximum=h.clone(e.maximum,t.maximum),t.center=h.clone(e.center,t.center),t):new _c(e.minimum,e.maximum,e.center)};_c.equals=function(e,t){return e===t||d(e)&&d(t)&&h.equals(e.center,t.center)&&h.equals(e.minimum,t.minimum)&&h.equals(e.maximum,t.maximum)};var DA=new h;_c.intersectPlane=function(e,t){DA=h.subtract(e.maximum,e.minimum,DA);let n=h.multiplyByScalar(DA,.5,DA),i=t.normal,o=n.x*Math.abs(i.x)+n.y*Math.abs(i.y)+n.z*Math.abs(i.z),r=h.dot(e.center,i)+t.distance;return r-o>0?qt.INSIDE:r+o<0?qt.OUTSIDE:qt.INTERSECTING};_c.prototype.clone=function(e){return _c.clone(this,e)};_c.prototype.intersectPlane=function(e){return _c.intersectPlane(this,e)};_c.prototype.equals=function(e){return _c.equals(this,e)};var ab=_c;var AIt=T(S(),1);var mIt=T(S(),1);var e3={};e3.computeDiscriminant=function(e,t,n){return t*t-4*e*n};function R6(e,t,n){let i=e+t;return W.sign(e)!==W.sign(t)&&Math.abs(i/Math.max(Math.abs(e),Math.abs(t)))<n?0:i}e3.computeRealRoots=function(e,t,n){let i;if(e===0)return t===0?[]:[-n/t];if(t===0){if(n===0)return[0,0];let c=Math.abs(n),l=Math.abs(e);if(c<l&&c/l<W.EPSILON14)return[0,0];if(c>l&&l/c<W.EPSILON14)return[];if(i=-n/e,i<0)return[];let u=Math.sqrt(i);return[-u,u]}else if(n===0)return i=-t/e,i<0?[i,0]:[0,i];let o=t*t,r=4*e*n,s=R6(o,-r,W.EPSILON14);if(s<0)return[];let a=-.5*R6(t,W.sign(t)*Math.sqrt(s),W.EPSILON14);return t>0?[a/e,n/a]:[n/a,a/e]};var Tc=e3;var _It=T(S(),1);var pIt=T(S(),1);var n3={};n3.computeDiscriminant=function(e,t,n,i){let o=e*e,r=t*t,s=n*n,a=i*i;return 18*e*t*n*i+r*s-27*o*a-4*(e*s*n+r*t*i)};function t3(e,t,n,i){let o=e,r=t/3,s=n/3,a=i,c=o*s,l=r*a,u=r*r,m=s*s,p=o*s-u,y=o*a-r*s,f=r*a-m,x=4*p*f-y*y,_,C;if(x<0){let J,z,ee;u*l>=c*m?(J=o,z=p,ee=-2*r*p+o*y):(J=a,z=f,ee=-a*y+2*s*f);let j=-(ee<0?-1:1)*Math.abs(J)*Math.sqrt(-x);C=-ee+j;let q=C/2,be=q<0?-Math.pow(-q,1/3):Math.pow(q,1/3),Te=C===j?-be:-z/be;return _=z<=0?be+Te:-ee/(be*be+Te*Te+z),u*l>=c*m?[(_-r)/o]:[-a/(_+s)]}let V=p,L=-2*r*p+o*y,Z=f,G=-a*y+2*s*f,X=Math.sqrt(x),P=Math.sqrt(3)/2,v=Math.abs(Math.atan2(o*X,-L)/3);_=2*Math.sqrt(-V);let F=Math.cos(v);C=_*F;let M=_*(-F/2-P*Math.sin(v)),b=C+M>2*r?C-r:M-r,R=o,E=b/R;v=Math.abs(Math.atan2(a*X,-G)/3),_=2*Math.sqrt(-Z),F=Math.cos(v),C=_*F,M=_*(-F/2-P*Math.sin(v));let I=-a,w=C+M<2*s?C+s:M+s,N=I/w,B=R*w,k=-b*w-R*I,O=b*I,U=(s*k-r*O)/(-r*k+s*B);return E<=U?E<=N?U<=N?[E,U,N]:[E,N,U]:[N,E,U]:E<=N?[U,E,N]:U<=N?[U,N,E]:[N,U,E]}n3.computeRealRoots=function(e,t,n,i){let o,r;if(e===0)return Tc.computeRealRoots(t,n,i);if(t===0){if(n===0){if(i===0)return[0,0,0];r=-i/e;let s=r<0?-Math.pow(-r,1/3):Math.pow(r,1/3);return[s,s,s]}else if(i===0)return o=Tc.computeRealRoots(e,0,n),o.Length===0?[0]:[o[0],0,o[1]];return t3(e,0,n,i)}else{if(n===0)return i===0?(r=-t/e,r<0?[r,0,0]:[0,0,r]):t3(e,t,0,i);if(i===0)return o=Tc.computeRealRoots(e,t,n),o.length===0?[0]:o[1]<=0?[o[0],o[1],0]:o[0]>=0?[0,o[0],o[1]]:[o[0],0,o[1]]}return t3(e,t,n,i)};var wg=n3;var i3={};i3.computeDiscriminant=function(e,t,n,i,o){let r=e*e,s=r*e,a=t*t,c=a*t,l=n*n,u=l*n,m=i*i,p=m*i,y=o*o,f=y*o;return a*l*m-4*c*p-4*e*u*m+18*e*t*n*p-27*r*m*m+256*s*f+o*(18*c*n*i-4*a*u+16*e*l*l-80*e*t*l*i-6*e*a*m+144*r*n*m)+y*(144*e*a*n-27*a*a-128*r*l-192*r*t*i)};function rm(e,t,n,i){let o=e*e,r=t-3*o/8,s=n-t*e/2+o*e/8,a=i-n*e/4+t*o/16-3*o*o/256,c=wg.computeRealRoots(1,2*r,r*r-4*a,-s*s);if(c.length>0){let l=-e/4,u=c[c.length-1];if(Math.abs(u)<W.EPSILON14){let m=Tc.computeRealRoots(1,r,a);if(m.length===2){let p=m[0],y=m[1],f;if(p>=0&&y>=0){let x=Math.sqrt(p),_=Math.sqrt(y);return[l-_,l-x,l+x,l+_]}else{if(p>=0&&y<0)return f=Math.sqrt(p),[l-f,l+f];if(p<0&&y>=0)return f=Math.sqrt(y),[l-f,l+f]}}return[]}else if(u>0){let m=Math.sqrt(u),p=(r+u-s/m)/2,y=(r+u+s/m)/2,f=Tc.computeRealRoots(1,m,p),x=Tc.computeRealRoots(1,-m,y);return f.length!==0?(f[0]+=l,f[1]+=l,x.length!==0?(x[0]+=l,x[1]+=l,f[1]<=x[0]?[f[0],f[1],x[0],x[1]]:x[1]<=f[0]?[x[0],x[1],f[0],f[1]]:f[0]>=x[0]&&f[1]<=x[1]?[x[0],f[0],f[1],x[1]]:x[0]>=f[0]&&x[1]<=f[1]?[f[0],x[0],x[1],f[1]]:f[0]>x[0]&&f[0]<x[1]?[x[0],f[0],x[1],f[1]]:[f[0],x[0],f[1],x[1]]):f):x.length!==0?(x[0]+=l,x[1]+=l,x):[]}}return[]}function zL(e,t,n,i){let o=n*n,r=t*t,s=e*e,a=-2*t,c=n*e+r-4*i,l=s*i-n*t*e+o,u=wg.computeRealRoots(1,a,c,l);if(u.length>0){let m=u[0],p=t-m,y=p*p,f=e/2,x=p/2,_=y-4*i,C=y+4*Math.abs(i),V=s-4*m,L=s+4*Math.abs(m),Z,G;if(m<0||_*L<V*C){let R=Math.sqrt(V);Z=R/2,G=R===0?0:(e*x-n)/R}else{let R=Math.sqrt(_);Z=R===0?0:(e*x-n)/R,G=R/2}let X,P;f===0&&Z===0?(X=0,P=0):W.sign(f)===W.sign(Z)?(X=f+Z,P=m/X):(P=f-Z,X=m/P);let v,F;x===0&&G===0?(v=0,F=0):W.sign(x)===W.sign(G)?(v=x+G,F=i/v):(F=x-G,v=i/F);let M=Tc.computeRealRoots(1,X,v),b=Tc.computeRealRoots(1,P,F);if(M.length!==0)return b.length!==0?M[1]<=b[0]?[M[0],M[1],b[0],b[1]]:b[1]<=M[0]?[b[0],b[1],M[0],M[1]]:M[0]>=b[0]&&M[1]<=b[1]?[b[0],M[0],M[1],b[1]]:b[0]>=M[0]&&b[1]<=M[1]?[M[0],b[0],b[1],M[1]]:M[0]>b[0]&&M[0]<b[1]?[b[0],M[0],b[1],M[1]]:[M[0],b[0],M[1],b[1]]:M;if(b.length!==0)return b}return[]}i3.computeRealRoots=function(e,t,n,i,o){if(Math.abs(e)<W.EPSILON15)return wg.computeRealRoots(t,n,i,o);let r=t/e,s=n/e,a=i/e,c=o/e,l=r<0?1:0;switch(l+=s<0?l+1:l,l+=a<0?l+1:l,l+=c<0?l+1:l,l){case 0:return rm(r,s,a,c);case 1:return zL(r,s,a,c);case 2:return zL(r,s,a,c);case 3:return rm(r,s,a,c);case 4:return rm(r,s,a,c);case 5:return zL(r,s,a,c);case 6:return rm(r,s,a,c);case 7:return rm(r,s,a,c);case 8:return zL(r,s,a,c);case 9:return rm(r,s,a,c);case 10:return rm(r,s,a,c);case 11:return zL(r,s,a,c);case 12:return rm(r,s,a,c);case 13:return rm(r,s,a,c);case 14:return rm(r,s,a,c);case 15:return rm(r,s,a,c);default:return}};var JL=i3;var LIt=T(S(),1);function BA(e,t){t=h.clone(g(t,h.ZERO)),h.equals(t,h.ZERO)||h.normalize(t,t),this.origin=h.clone(g(e,h.ZERO)),this.direction=t}BA.clone=function(e,t){if(d(e))return d(t)?(t.origin=h.clone(e.origin),t.direction=h.clone(e.direction),t):new BA(e.origin,e.direction)};BA.getPoint=function(e,t,n){return d(n)||(n=new h),n=h.multiplyByScalar(e.direction,t,n),h.add(e.origin,n,n)};var Sn=BA;var er={};er.rayPlane=function(e,t,n){d(n)||(n=new h);let i=e.origin,o=e.direction,r=t.normal,s=h.dot(r,o);if(Math.abs(s)<W.EPSILON15)return;let a=(-t.distance-h.dot(r,i))/s;if(!(a<0))return n=h.multiplyByScalar(o,a,n),h.add(i,n,n)};var tVe=new h,nVe=new h,v6=new h,Z6=new h,G6=new h;er.rayTriangleParametric=function(e,t,n,i,o){o=g(o,!1);let r=e.origin,s=e.direction,a=h.subtract(n,t,tVe),c=h.subtract(i,t,nVe),l=h.cross(s,c,v6),u=h.dot(a,l),m,p,y,f,x;if(o){if(u<W.EPSILON6||(m=h.subtract(r,t,Z6),y=h.dot(m,l),y<0||y>u)||(p=h.cross(m,a,G6),f=h.dot(s,p),f<0||y+f>u))return;x=h.dot(c,p)/u}else{if(Math.abs(u)<W.EPSILON6)return;let _=1/u;if(m=h.subtract(r,t,Z6),y=h.dot(m,l)*_,y<0||y>1||(p=h.cross(m,a,G6),f=h.dot(s,p)*_,f<0||y+f>1))return;x=h.dot(c,p)*_}return x};er.rayTriangle=function(e,t,n,i,o,r){let s=er.rayTriangleParametric(e,t,n,i,o);if(!(!d(s)||s<0))return d(r)||(r=new h),h.multiplyByScalar(e.direction,s,r),h.add(e.origin,r,r)};var iVe=new Sn;er.lineSegmentTriangle=function(e,t,n,i,o,r,s){let a=iVe;h.clone(e,a.origin),h.subtract(t,e,a.direction),h.normalize(a.direction,a.direction);let c=er.rayTriangleParametric(a,n,i,o,r);if(!(!d(c)||c<0||c>h.distance(e,t)))return d(s)||(s=new h),h.multiplyByScalar(a.direction,c,s),h.add(a.origin,s,s)};function oVe(e,t,n,i){let o=t*t-4*e*n;if(o<0)return;if(o>0){let s=1/(2*e),a=Math.sqrt(o),c=(-t+a)*s,l=(-t-a)*s;return c<l?(i.root0=c,i.root1=l):(i.root0=l,i.root1=c),i}let r=-t/(2*e);if(r!==0)return i.root0=i.root1=r,i}var rVe={root0:0,root1:0};function w6(e,t,n){d(n)||(n=new xc);let i=e.origin,o=e.direction,r=t.center,s=t.radius*t.radius,a=h.subtract(i,r,v6),c=h.dot(o,o),l=2*h.dot(o,a),u=h.magnitudeSquared(a)-s,m=oVe(c,l,u,rVe);if(d(m))return n.start=m.root0,n.stop=m.root1,n}er.raySphere=function(e,t,n){if(n=w6(e,t,n),!(!d(n)||n.stop<0))return n.start=Math.max(n.start,0),n};var sVe=new Sn;er.lineSegmentSphere=function(e,t,n,i){let o=sVe;h.clone(e,o.origin);let r=h.subtract(t,e,o.direction),s=h.magnitude(r);if(h.normalize(r,r),i=w6(o,n,i),!(!d(i)||i.stop<0||i.start>s))return i.start=Math.max(i.start,0),i.stop=Math.min(i.stop,s),i};var aVe=new h,cVe=new h;er.rayEllipsoid=function(e,t){let n=t.oneOverRadii,i=h.multiplyComponents(n,e.origin,aVe),o=h.multiplyComponents(n,e.direction,cVe),r=h.magnitudeSquared(i),s=h.dot(i,o),a,c,l,u,m;if(r>1){if(s>=0)return;let p=s*s;if(a=r-1,c=h.magnitudeSquared(o),l=c*a,p<l)return;if(p>l){u=s*s-l,m=-s+Math.sqrt(u);let f=m/c,x=a/m;return f<x?new xc(f,x):{start:x,stop:f}}let y=Math.sqrt(a/c);return new xc(y,y)}else if(r<1)return a=r-1,c=h.magnitudeSquared(o),l=c*a,u=s*s-l,m=-s+Math.sqrt(u),new xc(0,m/c);if(s<0)return c=h.magnitudeSquared(o),new xc(0,-s/c)};function Fg(e,t,n){let i=e+t;return W.sign(e)!==W.sign(t)&&Math.abs(i/Math.max(Math.abs(e),Math.abs(t)))<n?0:i}function lVe(e,t,n,i,o){let r=i*i,s=o*o,a=(e[$.COLUMN1ROW1]-e[$.COLUMN2ROW2])*s,c=o*(i*Fg(e[$.COLUMN1ROW0],e[$.COLUMN0ROW1],W.EPSILON15)+t.y),l=e[$.COLUMN0ROW0]*r+e[$.COLUMN2ROW2]*s+i*t.x+n,u=s*Fg(e[$.COLUMN2ROW1],e[$.COLUMN1ROW2],W.EPSILON15),m=o*(i*Fg(e[$.COLUMN2ROW0],e[$.COLUMN0ROW2])+t.z),p,y=[];if(m===0&&u===0){if(p=Tc.computeRealRoots(a,c,l),p.length===0)return y;let v=p[0],F=Math.sqrt(Math.max(1-v*v,0));if(y.push(new h(i,o*v,o*-F)),y.push(new h(i,o*v,o*F)),p.length===2){let M=p[1],b=Math.sqrt(Math.max(1-M*M,0));y.push(new h(i,o*M,o*-b)),y.push(new h(i,o*M,o*b))}return y}let f=m*m,x=u*u,_=a*a,C=m*u,V=_+x,L=2*(c*a+C),Z=2*l*a+c*c-x+f,G=2*(l*c-C),X=l*l-f;if(V===0&&L===0&&Z===0&&G===0)return y;p=JL.computeRealRoots(V,L,Z,G,X);let P=p.length;if(P===0)return y;for(let v=0;v<P;++v){let F=p[v],M=F*F,b=Math.max(1-M,0),R=Math.sqrt(b),E;W.sign(a)===W.sign(l)?E=Fg(a*M+l,c*F,W.EPSILON12):W.sign(l)===W.sign(c*F)?E=Fg(a*M,c*F+l,W.EPSILON12):E=Fg(a*M+c*F,l,W.EPSILON12);let I=Fg(u*F,m,W.EPSILON15),w=E*I;w<0?y.push(new h(i,o*F,o*R)):w>0?y.push(new h(i,o*F,o*-R)):R!==0?(y.push(new h(i,o*F,o*-R)),y.push(new h(i,o*F,o*R)),++v):y.push(new h(i,o*F,o*R))}return y}var o3=new h,E6=new h,X6=new h,YA=new h,dVe=new h,uVe=new $,mVe=new $,hVe=new $,fVe=new $,pVe=new $,I6=new $,W6=new $,P6=new h,bVe=new h,yVe=new he;er.grazingAltitudeLocation=function(e,t){let n=e.origin,i=e.direction;if(!h.equals(n,h.ZERO)){let X=t.geodeticSurfaceNormal(n,o3);if(h.dot(i,X)>=0)return n}let o=d(this.rayEllipsoid(e,t)),r=t.transformPositionToScaledSpace(i,o3),s=h.normalize(r,r),a=h.mostOrthogonalAxis(r,YA),c=h.normalize(h.cross(a,s,E6),E6),l=h.normalize(h.cross(s,c,X6),X6),u=uVe;u[0]=s.x,u[1]=s.y,u[2]=s.z,u[3]=c.x,u[4]=c.y,u[5]=c.z,u[6]=l.x,u[7]=l.y,u[8]=l.z;let m=$.transpose(u,mVe),p=$.fromScale(t.radii,hVe),y=$.fromScale(t.oneOverRadii,fVe),f=pVe;f[0]=0,f[1]=-i.z,f[2]=i.y,f[3]=i.z,f[4]=0,f[5]=-i.x,f[6]=-i.y,f[7]=i.x,f[8]=0;let x=$.multiply($.multiply(m,y,I6),f,I6),_=$.multiply($.multiply(x,p,W6),u,W6),C=$.multiplyByVector(x,n,dVe),V=lVe(_,h.negate(C,o3),0,0,1),L,Z,G=V.length;if(G>0){let X=h.clone(h.ZERO,bVe),P=Number.NEGATIVE_INFINITY;for(let F=0;F<G;++F){L=$.multiplyByVector(p,$.multiplyByVector(u,V[F],P6),P6);let M=h.normalize(h.subtract(L,n,YA),YA),b=h.dot(M,i);b>P&&(P=b,X=h.clone(L,X))}let v=t.cartesianToCartographic(X,yVe);return P=W.clamp(P,0,1),Z=h.magnitude(h.subtract(X,n,YA))*Math.sqrt(1-P*P),Z=o?-Z:Z,v.height=Z,t.cartographicToCartesian(v,new h)}};var gVe=new h;er.lineSegmentPlane=function(e,t,n,i){d(i)||(i=new h);let o=h.subtract(t,e,gVe),r=n.normal,s=h.dot(r,o);if(Math.abs(s)<W.EPSILON6)return;let a=h.dot(r,e),c=-(n.distance+a)/s;if(!(c<0||c>1))return h.multiplyByScalar(o,c,i),h.add(e,i,i),i};er.trianglePlaneIntersection=function(e,t,n,i){let o=i.normal,r=i.distance,s=h.dot(o,e)+r<0,a=h.dot(o,t)+r<0,c=h.dot(o,n)+r<0,l=0;l+=s?1:0,l+=a?1:0,l+=c?1:0;let u,m;if((l===1||l===2)&&(u=new h,m=new h),l===1){if(s)return er.lineSegmentPlane(e,t,i,u),er.lineSegmentPlane(e,n,i,m),{positions:[e,t,n,u,m],indices:[0,3,4,1,2,4,1,4,3]};if(a)return er.lineSegmentPlane(t,n,i,u),er.lineSegmentPlane(t,e,i,m),{positions:[e,t,n,u,m],indices:[1,3,4,2,0,4,2,4,3]};if(c)return er.lineSegmentPlane(n,e,i,u),er.lineSegmentPlane(n,t,i,m),{positions:[e,t,n,u,m],indices:[2,3,4,0,1,4,0,4,3]}}else if(l===2)if(s)if(a){if(!c)return er.lineSegmentPlane(e,n,i,u),er.lineSegmentPlane(t,n,i,m),{positions:[e,t,n,u,m],indices:[0,1,4,0,4,3,2,3,4]}}else return er.lineSegmentPlane(n,t,i,u),er.lineSegmentPlane(e,t,i,m),{positions:[e,t,n,u,m],indices:[2,0,4,2,4,3,1,3,4]};else return er.lineSegmentPlane(t,e,i,u),er.lineSegmentPlane(n,e,i,m),{positions:[e,t,n,u,m],indices:[1,2,4,1,4,3,0,3,4]}};var Si=er;var BIt=T(S(),1);function gs(e,t){this.normal=h.clone(e),this.distance=t}gs.fromPointNormal=function(e,t,n){let i=-h.dot(t,e);return d(n)?(h.clone(t,n.normal),n.distance=i,n):new gs(t,i)};var xVe=new h;gs.fromCartesian4=function(e,t){let n=h.fromCartesian4(e,xVe),i=e.w;return d(t)?(h.clone(n,t.normal),t.distance=i,t):new gs(n,i)};gs.getPointDistance=function(e,t){return h.dot(e.normal,t)+e.distance};var _Ve=new h;gs.projectPointOntoPlane=function(e,t,n){d(n)||(n=new h);let i=gs.getPointDistance(e,t),o=h.multiplyByScalar(e.normal,i,_Ve);return h.subtract(t,o,n)};var TVe=new A,SVe=new se,CVe=new h;gs.transform=function(e,t,n){let i=e.normal,o=e.distance,r=A.inverseTranspose(t,TVe),s=se.fromElements(i.x,i.y,i.z,o,SVe);s=A.multiplyByVector(r,s,s);let a=h.fromCartesian4(s,CVe);return s=se.divideByScalar(s,h.magnitude(a),s),gs.fromCartesian4(s,n)};gs.clone=function(e,t){return d(t)?(h.clone(e.normal,t.normal),t.distance=e.distance,t):new gs(e.normal,e.distance)};gs.equals=function(e,t){return e.distance===t.distance&&h.equals(e.normal,t.normal)};gs.ORIGIN_XY_PLANE=Object.freeze(new gs(h.UNIT_Z,0));gs.ORIGIN_YZ_PLANE=Object.freeze(new gs(h.UNIT_X,0));gs.ORIGIN_ZX_PLANE=Object.freeze(new gs(h.UNIT_Y,0));var sn=gs;var r3=new se;function Wh(e,t){t=g(t,re.WGS84),e=t.scaleToGeodeticSurface(e);let n=vt.eastNorthUpToFixedFrame(e,t);this._ellipsoid=t,this._origin=e,this._xAxis=h.fromCartesian4(A.getColumn(n,0,r3)),this._yAxis=h.fromCartesian4(A.getColumn(n,1,r3));let i=h.fromCartesian4(A.getColumn(n,2,r3));this._plane=sn.fromPointNormal(e,i)}Object.defineProperties(Wh.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},origin:{get:function(){return this._origin}},plane:{get:function(){return this._plane}},xAxis:{get:function(){return this._xAxis}},yAxis:{get:function(){return this._yAxis}},zAxis:{get:function(){return this._plane.normal}}});var VVe=new ab;Wh.fromPoints=function(e,t){let n=ab.fromPoints(e,VVe);return new Wh(n.center,t)};var F6=new Sn,OA=new h;Wh.prototype.projectPointOntoPlane=function(e,t){let n=F6;n.origin=e,h.normalize(e,n.direction);let i=Si.rayPlane(n,this._plane,OA);if(d(i)||(h.negate(n.direction,n.direction),i=Si.rayPlane(n,this._plane,OA)),d(i)){let o=h.subtract(i,this._origin,i),r=h.dot(this._xAxis,o),s=h.dot(this._yAxis,o);return d(t)?(t.x=r,t.y=s,t):new D(r,s)}};Wh.prototype.projectPointsOntoPlane=function(e,t){d(t)||(t=[]);let n=0,i=e.length;for(let o=0;o<i;o++){let r=this.projectPointOntoPlane(e[o],t[n]);d(r)&&(t[n]=r,n++)}return t.length=n,t};Wh.prototype.projectPointToNearestOnPlane=function(e,t){d(t)||(t=new D);let n=F6;n.origin=e,h.clone(this._plane.normal,n.direction);let i=Si.rayPlane(n,this._plane,OA);d(i)||(h.negate(n.direction,n.direction),i=Si.rayPlane(n,this._plane,OA));let o=h.subtract(i,this._origin,i),r=h.dot(this._xAxis,o),s=h.dot(this._yAxis,o);return t.x=r,t.y=s,t};Wh.prototype.projectPointsToNearestOnPlane=function(e,t){d(t)||(t=[]);let n=e.length;t.length=n;for(let i=0;i<n;i++)t[i]=this.projectPointToNearestOnPlane(e[i],t[i]);return t};var LVe=new h;Wh.prototype.projectPointOntoEllipsoid=function(e,t){d(t)||(t=new h);let n=this._ellipsoid,i=this._origin,o=this._xAxis,r=this._yAxis,s=LVe;return h.multiplyByScalar(o,e.x,s),t=h.add(i,s,t),h.multiplyByScalar(r,e.y,s),h.add(t,s,t),n.scaleToGeocentricSurface(t,t),t};Wh.prototype.projectPointsOntoEllipsoid=function(e,t){let n=e.length;d(t)?t.length=n:t=new Array(n);for(let i=0;i<n;++i)t[i]=this.projectPointOntoEllipsoid(e[i],t[i]);return t};var wr=Wh;function Fi(e,t){this.center=h.clone(g(e,h.ZERO)),this.halfAxes=$.clone(g(t,$.ZERO))}Fi.packedLength=h.packedLength+$.packedLength;Fi.pack=function(e,t,n){return n=g(n,0),h.pack(e.center,t,n),$.pack(e.halfAxes,t,n+h.packedLength),t};Fi.unpack=function(e,t,n){return t=g(t,0),d(n)||(n=new Fi),h.unpack(e,t,n.center),$.unpack(e,t+h.packedLength,n.halfAxes),n};var RVe=new h,ZVe=new h,GVe=new h,EVe=new h,XVe=new h,IVe=new h,WVe=new $,PVe={unitary:new $,diagonal:new $};Fi.fromPoints=function(e,t){if(d(t)||(t=new Fi),!d(e)||e.length===0)return t.halfAxes=$.ZERO,t.center=h.ZERO,t;let n,i=e.length,o=h.clone(e[0],RVe);for(n=1;n<i;n++)h.add(o,e[n],o);let r=1/i;h.multiplyByScalar(o,r,o);let s=0,a=0,c=0,l=0,u=0,m=0,p;for(n=0;n<i;n++)p=h.subtract(e[n],o,ZVe),s+=p.x*p.x,a+=p.x*p.y,c+=p.x*p.z,l+=p.y*p.y,u+=p.y*p.z,m+=p.z*p.z;s*=r,a*=r,c*=r,l*=r,u*=r,m*=r;let y=WVe;y[0]=s,y[1]=a,y[2]=c,y[3]=a,y[4]=l,y[5]=u,y[6]=c,y[7]=u,y[8]=m;let f=$.computeEigenDecomposition(y,PVe),x=$.clone(f.unitary,t.halfAxes),_=$.getColumn(x,0,EVe),C=$.getColumn(x,1,XVe),V=$.getColumn(x,2,IVe),L=-Number.MAX_VALUE,Z=-Number.MAX_VALUE,G=-Number.MAX_VALUE,X=Number.MAX_VALUE,P=Number.MAX_VALUE,v=Number.MAX_VALUE;for(n=0;n<i;n++)p=e[n],L=Math.max(h.dot(_,p),L),Z=Math.max(h.dot(C,p),Z),G=Math.max(h.dot(V,p),G),X=Math.min(h.dot(_,p),X),P=Math.min(h.dot(C,p),P),v=Math.min(h.dot(V,p),v);_=h.multiplyByScalar(_,.5*(X+L),_),C=h.multiplyByScalar(C,.5*(P+Z),C),V=h.multiplyByScalar(V,.5*(v+G),V);let F=h.add(_,C,t.center);h.add(F,V,F);let M=GVe;return M.x=L-X,M.y=Z-P,M.z=G-v,h.multiplyByScalar(M,.5,M),$.multiplyByScale(t.halfAxes,M,t.halfAxes),t};var D6=new h,vVe=new h;function A6(e,t,n,i,o,r,s,a,c,l,u){d(u)||(u=new Fi);let m=u.halfAxes;$.setColumn(m,0,t,m),$.setColumn(m,1,n,m),$.setColumn(m,2,i,m);let p=D6;p.x=(o+r)/2,p.y=(s+a)/2,p.z=(c+l)/2;let y=vVe;y.x=(r-o)/2,y.y=(a-s)/2,y.z=(l-c)/2;let f=u.center;return p=$.multiplyByVector(m,p,p),h.add(e,p,f),$.multiplyByScale(m,y,m),u}var M6=new he,wVe=new h,FVe=new he,AVe=new he,MVe=new he,NVe=new he,UVe=new he,kVe=new h,N6=new h,DVe=new h,U6=new h,BVe=new h,YVe=new D,OVe=new D,KVe=new D,HVe=new D,zVe=new D,JVe=new h,QVe=new h,jVe=new h,qVe=new h,$Ve=new D,eLe=new h,tLe=new h,nLe=new h,iLe=new sn(h.UNIT_X,0);Fi.fromRectangle=function(e,t,n,i,o){t=g(t,0),n=g(n,0),i=g(i,re.WGS84);let r,s,a,c,l,u,m;if(e.width<=W.PI){let P=de.center(e,M6),v=i.cartographicToCartesian(P,wVe),F=new wr(v,i);m=F.plane;let M=P.longitude,b=e.south<0&&e.north>0?0:P.latitude,R=he.fromRadians(M,e.north,n,FVe),E=he.fromRadians(e.west,e.north,n,AVe),I=he.fromRadians(e.west,b,n,MVe),w=he.fromRadians(e.west,e.south,n,NVe),N=he.fromRadians(M,e.south,n,UVe),B=i.cartographicToCartesian(R,kVe),k=i.cartographicToCartesian(E,N6),O=i.cartographicToCartesian(I,DVe),U=i.cartographicToCartesian(w,U6),J=i.cartographicToCartesian(N,BVe),z=F.projectPointToNearestOnPlane(B,YVe),ee=F.projectPointToNearestOnPlane(k,OVe),K=F.projectPointToNearestOnPlane(O,KVe),j=F.projectPointToNearestOnPlane(U,HVe),q=F.projectPointToNearestOnPlane(J,zVe);return r=Math.min(ee.x,K.x,j.x),s=-r,c=Math.max(ee.y,z.y),a=Math.min(j.y,q.y),E.height=w.height=t,k=i.cartographicToCartesian(E,N6),U=i.cartographicToCartesian(w,U6),l=Math.min(sn.getPointDistance(m,k),sn.getPointDistance(m,U)),u=n,A6(F.origin,F.xAxis,F.yAxis,F.zAxis,r,s,a,c,l,u,o)}let p=e.south>0,y=e.north<0,f=p?e.south:y?e.north:0,x=de.center(e,M6).longitude,_=h.fromRadians(x,f,n,i,JVe);_.z=0;let V=Math.abs(_.x)<W.EPSILON10&&Math.abs(_.y)<W.EPSILON10?h.UNIT_X:h.normalize(_,QVe),L=h.UNIT_Z,Z=h.cross(V,L,jVe);m=sn.fromPointNormal(_,V,iLe);let G=h.fromRadians(x+W.PI_OVER_TWO,f,n,i,qVe);s=h.dot(sn.projectPointOntoPlane(m,G,$Ve),Z),r=-s,c=h.fromRadians(0,e.north,y?t:n,i,eLe).z,a=h.fromRadians(0,e.south,p?t:n,i,tLe).z;let X=h.fromRadians(e.east,f,n,i,nLe);return l=sn.getPointDistance(m,X),u=0,A6(_,Z,L,V,r,s,a,c,l,u,o)};Fi.fromTransformation=function(e,t){return d(t)||(t=new Fi),t.center=A.getTranslation(e,t.center),t.halfAxes=A.getMatrix3(e,t.halfAxes),t.halfAxes=$.multiplyByScalar(t.halfAxes,.5,t.halfAxes),t};Fi.clone=function(e,t){if(d(e))return d(t)?(h.clone(e.center,t.center),$.clone(e.halfAxes,t.halfAxes),t):new Fi(e.center,e.halfAxes)};Fi.intersectPlane=function(e,t){let n=e.center,i=t.normal,o=e.halfAxes,r=i.x,s=i.y,a=i.z,c=Math.abs(r*o[$.COLUMN0ROW0]+s*o[$.COLUMN0ROW1]+a*o[$.COLUMN0ROW2])+Math.abs(r*o[$.COLUMN1ROW0]+s*o[$.COLUMN1ROW1]+a*o[$.COLUMN1ROW2])+Math.abs(r*o[$.COLUMN2ROW0]+s*o[$.COLUMN2ROW1]+a*o[$.COLUMN2ROW2]),l=h.dot(i,n)+t.distance;return l<=-c?qt.OUTSIDE:l>=c?qt.INSIDE:qt.INTERSECTING};var B6=new h,Y6=new h,O6=new h,oLe=new h,k6=new h,rLe=new h;Fi.distanceSquaredTo=function(e,t){let n=h.subtract(t,e.center,D6),i=e.halfAxes,o=$.getColumn(i,0,B6),r=$.getColumn(i,1,Y6),s=$.getColumn(i,2,O6),a=h.magnitude(o),c=h.magnitude(r),l=h.magnitude(s),u=!0,m=!0,p=!0;a>0?h.divideByScalar(o,a,o):u=!1,c>0?h.divideByScalar(r,c,r):m=!1,l>0?h.divideByScalar(s,l,s):p=!1;let y=!u+!m+!p,f,x,_;if(y===1){let Z=o;f=r,x=s,m?p||(Z=s,x=o):(Z=r,f=o),_=h.cross(f,x,k6),Z===o?o=_:Z===r?r=_:Z===s&&(s=_)}else if(y===2){f=o,m?f=r:p&&(f=s);let Z=h.UNIT_Y;Z.equalsEpsilon(f,W.EPSILON3)&&(Z=h.UNIT_X),x=h.cross(f,Z,oLe),h.normalize(x,x),_=h.cross(f,x,k6),h.normalize(_,_),f===o?(r=x,s=_):f===r?(s=x,o=_):f===s&&(o=x,r=_)}else y===3&&(o=h.UNIT_X,r=h.UNIT_Y,s=h.UNIT_Z);let C=rLe;C.x=h.dot(n,o),C.y=h.dot(n,r),C.z=h.dot(n,s);let V=0,L;return C.x<-a?(L=C.x+a,V+=L*L):C.x>a&&(L=C.x-a,V+=L*L),C.y<-c?(L=C.y+c,V+=L*L):C.y>c&&(L=C.y-c,V+=L*L),C.z<-l?(L=C.z+l,V+=L*L):C.z>l&&(L=C.z-l,V+=L*L),V};var sLe=new h,aLe=new h;Fi.computePlaneDistances=function(e,t,n,i){d(i)||(i=new xc);let o=Number.POSITIVE_INFINITY,r=Number.NEGATIVE_INFINITY,s=e.center,a=e.halfAxes,c=$.getColumn(a,0,B6),l=$.getColumn(a,1,Y6),u=$.getColumn(a,2,O6),m=h.add(c,l,sLe);h.add(m,u,m),h.add(m,s,m);let p=h.subtract(m,t,aLe),y=h.dot(n,p);return o=Math.min(y,o),r=Math.max(y,r),h.add(s,c,m),h.add(m,l,m),h.subtract(m,u,m),h.subtract(m,t,p),y=h.dot(n,p),o=Math.min(y,o),r=Math.max(y,r),h.add(s,c,m),h.subtract(m,l,m),h.add(m,u,m),h.subtract(m,t,p),y=h.dot(n,p),o=Math.min(y,o),r=Math.max(y,r),h.add(s,c,m),h.subtract(m,l,m),h.subtract(m,u,m),h.subtract(m,t,p),y=h.dot(n,p),o=Math.min(y,o),r=Math.max(y,r),h.subtract(s,c,m),h.add(m,l,m),h.add(m,u,m),h.subtract(m,t,p),y=h.dot(n,p),o=Math.min(y,o),r=Math.max(y,r),h.subtract(s,c,m),h.add(m,l,m),h.subtract(m,u,m),h.subtract(m,t,p),y=h.dot(n,p),o=Math.min(y,o),r=Math.max(y,r),h.subtract(s,c,m),h.subtract(m,l,m),h.add(m,u,m),h.subtract(m,t,p),y=h.dot(n,p),o=Math.min(y,o),r=Math.max(y,r),h.subtract(s,c,m),h.subtract(m,l,m),h.subtract(m,u,m),h.subtract(m,t,p),y=h.dot(n,p),o=Math.min(y,o),r=Math.max(y,r),i.start=o,i.stop=r,i};var cLe=new h,lLe=new h,dLe=new h;Fi.computeCorners=function(e,t){d(t)||(t=[new h,new h,new h,new h,new h,new h,new h,new h]);let n=e.center,i=e.halfAxes,o=$.getColumn(i,0,cLe),r=$.getColumn(i,1,lLe),s=$.getColumn(i,2,dLe);return h.clone(n,t[0]),h.subtract(t[0],o,t[0]),h.subtract(t[0],r,t[0]),h.subtract(t[0],s,t[0]),h.clone(n,t[1]),h.subtract(t[1],o,t[1]),h.subtract(t[1],r,t[1]),h.add(t[1],s,t[1]),h.clone(n,t[2]),h.subtract(t[2],o,t[2]),h.add(t[2],r,t[2]),h.subtract(t[2],s,t[2]),h.clone(n,t[3]),h.subtract(t[3],o,t[3]),h.add(t[3],r,t[3]),h.add(t[3],s,t[3]),h.clone(n,t[4]),h.add(t[4],o,t[4]),h.subtract(t[4],r,t[4]),h.subtract(t[4],s,t[4]),h.clone(n,t[5]),h.add(t[5],o,t[5]),h.subtract(t[5],r,t[5]),h.add(t[5],s,t[5]),h.clone(n,t[6]),h.add(t[6],o,t[6]),h.add(t[6],r,t[6]),h.subtract(t[6],s,t[6]),h.clone(n,t[7]),h.add(t[7],o,t[7]),h.add(t[7],r,t[7]),h.add(t[7],s,t[7]),t};var uLe=new $;Fi.computeTransformation=function(e,t){d(t)||(t=new A);let n=e.center,i=$.multiplyByUniformScale(e.halfAxes,2,uLe);return A.fromRotationTranslation(i,n,t)};var mLe=new ce;Fi.isOccluded=function(e,t){let n=ce.fromOrientedBoundingBox(e,mLe);return!t.isBoundingSphereVisible(n)};Fi.prototype.intersectPlane=function(e){return Fi.intersectPlane(this,e)};Fi.prototype.distanceSquaredTo=function(e){return Fi.distanceSquaredTo(this,e)};Fi.prototype.computePlaneDistances=function(e,t,n){return Fi.computePlaneDistances(this,e,t,n)};Fi.prototype.computeCorners=function(e){return Fi.computeCorners(this,e)};Fi.prototype.computeTransformation=function(e){return Fi.computeTransformation(this,e)};Fi.prototype.isOccluded=function(e){return Fi.isOccluded(this,e)};Fi.equals=function(e,t){return e===t||d(e)&&d(t)&&h.equals(e.center,t.center)&&$.equals(e.halfAxes,t.halfAxes)};Fi.prototype.clone=function(e){return Fi.clone(this,e)};Fi.prototype.equals=function(e){return Fi.equals(this,e)};var Wn=Fi;var CWt=T(S(),1);var KA={};KA.getHeight=function(e,t,n){return(e-n)*t+n};var hLe=new h;KA.getPosition=function(e,t,n,i,o){let r=t.cartesianToCartographic(e,hLe),s=KA.getHeight(r.height,n,i);return h.fromRadians(r.longitude,r.latitude,s,t,o)};var Sc=KA;var TDt=T(S(),1);var GWt=T(S(),1);var ur={CULL:1,OCCLUDE:2,EXECUTE_IN_CLOSEST_FRUSTUM:4,DEBUG_SHOW_BOUNDING_VOLUME:8,CAST_SHADOWS:16,RECEIVE_SHADOWS:32,PICK_ONLY:64,DEPTH_FOR_TRANSLUCENT_CLASSIFICATION:128};function QL(e){e=g(e,g.EMPTY_OBJECT),this._boundingVolume=e.boundingVolume,this._orientedBoundingBox=e.orientedBoundingBox,this._modelMatrix=e.modelMatrix,this._primitiveType=g(e.primitiveType,Fe.TRIANGLES),this._vertexArray=e.vertexArray,this._count=e.count,this._offset=g(e.offset,0),this._instanceCount=g(e.instanceCount,0),this._shaderProgram=e.shaderProgram,this._uniformMap=e.uniformMap,this._renderState=e.renderState,this._framebuffer=e.framebuffer,this._pass=e.pass,this._owner=e.owner,this._debugOverlappingFrustums=0,this._pickId=e.pickId,this._flags=0,this.cull=g(e.cull,!0),this.occlude=g(e.occlude,!0),this.executeInClosestFrustum=g(e.executeInClosestFrustum,!1),this.debugShowBoundingVolume=g(e.debugShowBoundingVolume,!1),this.castShadows=g(e.castShadows,!1),this.receiveShadows=g(e.receiveShadows,!1),this.pickOnly=g(e.pickOnly,!1),this.depthForTranslucentClassification=g(e.depthForTranslucentClassification,!1),this.dirty=!0,this.lastDirtyTime=0,this.derivedCommands={}}function Na(e,t){return(e._flags&t)===t}function cb(e,t,n){n?e._flags|=t:e._flags&=~t}Object.defineProperties(QL.prototype,{boundingVolume:{get:function(){return this._boundingVolume},set:function(e){this._boundingVolume!==e&&(this._boundingVolume=e,this.dirty=!0)}},orientedBoundingBox:{get:function(){return this._orientedBoundingBox},set:function(e){this._orientedBoundingBox!==e&&(this._orientedBoundingBox=e,this.dirty=!0)}},cull:{get:function(){return Na(this,ur.CULL)},set:function(e){Na(this,ur.CULL)!==e&&(cb(this,ur.CULL,e),this.dirty=!0)}},occlude:{get:function(){return Na(this,ur.OCCLUDE)},set:function(e){Na(this,ur.OCCLUDE)!==e&&(cb(this,ur.OCCLUDE,e),this.dirty=!0)}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._modelMatrix!==e&&(this._modelMatrix=e,this.dirty=!0)}},primitiveType:{get:function(){return this._primitiveType},set:function(e){this._primitiveType!==e&&(this._primitiveType=e,this.dirty=!0)}},vertexArray:{get:function(){return this._vertexArray},set:function(e){this._vertexArray!==e&&(this._vertexArray=e,this.dirty=!0)}},count:{get:function(){return this._count},set:function(e){this._count!==e&&(this._count=e,this.dirty=!0)}},offset:{get:function(){return this._offset},set:function(e){this._offset!==e&&(this._offset=e,this.dirty=!0)}},instanceCount:{get:function(){return this._instanceCount},set:function(e){this._instanceCount!==e&&(this._instanceCount=e,this.dirty=!0)}},shaderProgram:{get:function(){return this._shaderProgram},set:function(e){this._shaderProgram!==e&&(this._shaderProgram=e,this.dirty=!0)}},castShadows:{get:function(){return Na(this,ur.CAST_SHADOWS)},set:function(e){Na(this,ur.CAST_SHADOWS)!==e&&(cb(this,ur.CAST_SHADOWS,e),this.dirty=!0)}},receiveShadows:{get:function(){return Na(this,ur.RECEIVE_SHADOWS)},set:function(e){Na(this,ur.RECEIVE_SHADOWS)!==e&&(cb(this,ur.RECEIVE_SHADOWS,e),this.dirty=!0)}},uniformMap:{get:function(){return this._uniformMap},set:function(e){this._uniformMap!==e&&(this._uniformMap=e,this.dirty=!0)}},renderState:{get:function(){return this._renderState},set:function(e){this._renderState!==e&&(this._renderState=e,this.dirty=!0)}},framebuffer:{get:function(){return this._framebuffer},set:function(e){this._framebuffer!==e&&(this._framebuffer=e,this.dirty=!0)}},pass:{get:function(){return this._pass},set:function(e){this._pass!==e&&(this._pass=e,this.dirty=!0)}},executeInClosestFrustum:{get:function(){return Na(this,ur.EXECUTE_IN_CLOSEST_FRUSTUM)},set:function(e){Na(this,ur.EXECUTE_IN_CLOSEST_FRUSTUM)!==e&&(cb(this,ur.EXECUTE_IN_CLOSEST_FRUSTUM,e),this.dirty=!0)}},owner:{get:function(){return this._owner},set:function(e){this._owner!==e&&(this._owner=e,this.dirty=!0)}},debugShowBoundingVolume:{get:function(){return Na(this,ur.DEBUG_SHOW_BOUNDING_VOLUME)},set:function(e){Na(this,ur.DEBUG_SHOW_BOUNDING_VOLUME)!==e&&(cb(this,ur.DEBUG_SHOW_BOUNDING_VOLUME,e),this.dirty=!0)}},debugOverlappingFrustums:{get:function(){return this._debugOverlappingFrustums},set:function(e){this._debugOverlappingFrustums!==e&&(this._debugOverlappingFrustums=e,this.dirty=!0)}},pickId:{get:function(){return this._pickId},set:function(e){this._pickId!==e&&(this._pickId=e,this.dirty=!0)}},pickOnly:{get:function(){return Na(this,ur.PICK_ONLY)},set:function(e){Na(this,ur.PICK_ONLY)!==e&&(cb(this,ur.PICK_ONLY,e),this.dirty=!0)}},depthForTranslucentClassification:{get:function(){return Na(this,ur.DEPTH_FOR_TRANSLUCENT_CLASSIFICATION)},set:function(e){Na(this,ur.DEPTH_FOR_TRANSLUCENT_CLASSIFICATION)!==e&&(cb(this,ur.DEPTH_FOR_TRANSLUCENT_CLASSIFICATION,e),this.dirty=!0)}}});QL.shallowClone=function(e,t){if(d(e))return d(t)||(t=new QL),t._boundingVolume=e._boundingVolume,t._orientedBoundingBox=e._orientedBoundingBox,t._modelMatrix=e._modelMatrix,t._primitiveType=e._primitiveType,t._vertexArray=e._vertexArray,t._count=e._count,t._offset=e._offset,t._instanceCount=e._instanceCount,t._shaderProgram=e._shaderProgram,t._uniformMap=e._uniformMap,t._renderState=e._renderState,t._framebuffer=e._framebuffer,t._pass=e._pass,t._owner=e._owner,t._debugOverlappingFrustums=e._debugOverlappingFrustums,t._pickId=e._pickId,t._flags=e._flags,t.dirty=!0,t.lastDirtyTime=0,t};QL.prototype.execute=function(e,t){e.draw(this,t)};var nt=QL;var XWt=T(S(),1),fLe={ENVIRONMENT:0,COMPUTE:1,GLOBE:2,TERRAIN_CLASSIFICATION:3,CESIUM_3D_TILE:4,CESIUM_3D_TILE_CLASSIFICATION:5,CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW:6,OPAQUE:7,TRANSLUCENT:8,VOXELS:9,OVERLAY:10,NUMBER_OF_PASSES:11},Re=Object.freeze(fLe);var BWt=T(S(),1);var PWt=T(S(),1);var HA={CLOCKWISE:ne.CW,COUNTER_CLOCKWISE:ne.CCW};HA.validate=function(e){return e===HA.CLOCKWISE||e===HA.COUNTER_CLOCKWISE};var Jr=Object.freeze(HA);var wWt=T(S(),1);function K6(e){if(typeof e!="object"||e===null)return e;let t,n=Object.keys(e);for(let i=0;i<n.length;i++)t=n[i],e.hasOwnProperty(t)&&t!=="_applyFunctions"&&(e[t]=K6(e[t]));return Object.freeze(e)}var s3=K6;function vh(e){let t=g(e,g.EMPTY_OBJECT),n=g(t.cull,g.EMPTY_OBJECT),i=g(t.polygonOffset,g.EMPTY_OBJECT),o=g(t.scissorTest,g.EMPTY_OBJECT),r=g(o.rectangle,g.EMPTY_OBJECT),s=g(t.depthRange,g.EMPTY_OBJECT),a=g(t.depthTest,g.EMPTY_OBJECT),c=g(t.colorMask,g.EMPTY_OBJECT),l=g(t.blending,g.EMPTY_OBJECT),u=g(l.color,g.EMPTY_OBJECT),m=g(t.stencilTest,g.EMPTY_OBJECT),p=g(m.frontOperation,g.EMPTY_OBJECT),y=g(m.backOperation,g.EMPTY_OBJECT),f=g(t.sampleCoverage,g.EMPTY_OBJECT),x=t.viewport;this.frontFace=g(t.frontFace,Jr.COUNTER_CLOCKWISE),this.cull={enabled:g(n.enabled,!1),face:g(n.face,ne.BACK)},this.lineWidth=g(t.lineWidth,1),this.polygonOffset={enabled:g(i.enabled,!1),factor:g(i.factor,0),units:g(i.units,0)},this.scissorTest={enabled:g(o.enabled,!1),rectangle:He.clone(r)},this.depthRange={near:g(s.near,0),far:g(s.far,1)},this.depthTest={enabled:g(a.enabled,!1),func:g(a.func,ne.LESS)},this.colorMask={red:g(c.red,!0),green:g(c.green,!0),blue:g(c.blue,!0),alpha:g(c.alpha,!0)},this.depthMask=g(t.depthMask,!0),this.stencilMask=g(t.stencilMask,-1),this.blending={enabled:g(l.enabled,!1),color:new Y(g(u.red,0),g(u.green,0),g(u.blue,0),g(u.alpha,0)),equationRgb:g(l.equationRgb,ne.FUNC_ADD),equationAlpha:g(l.equationAlpha,ne.FUNC_ADD),functionSourceRgb:g(l.functionSourceRgb,ne.ONE),functionSourceAlpha:g(l.functionSourceAlpha,ne.ONE),functionDestinationRgb:g(l.functionDestinationRgb,ne.ZERO),functionDestinationAlpha:g(l.functionDestinationAlpha,ne.ZERO)},this.stencilTest={enabled:g(m.enabled,!1),frontFunction:g(m.frontFunction,ne.ALWAYS),backFunction:g(m.backFunction,ne.ALWAYS),reference:g(m.reference,0),mask:g(m.mask,-1),frontOperation:{fail:g(p.fail,ne.KEEP),zFail:g(p.zFail,ne.KEEP),zPass:g(p.zPass,ne.KEEP)},backOperation:{fail:g(y.fail,ne.KEEP),zFail:g(y.zFail,ne.KEEP),zPass:g(y.zPass,ne.KEEP)}},this.sampleCoverage={enabled:g(f.enabled,!1),value:g(f.value,1),invert:g(f.invert,!1)},this.viewport=d(x)?new He(x.x,x.y,x.width,x.height):void 0,this.id=0,this._applyFunctions=[]}var pLe=0,Ph={};vh.fromCache=function(e){let t=JSON.stringify(e),n=Ph[t];if(d(n))return++n.referenceCount,n.state;let i=new vh(e),o=JSON.stringify(i);return n=Ph[o],d(n)||(i.id=pLe++,n={referenceCount:0,state:i},Ph[o]=n),++n.referenceCount,Ph[t]={referenceCount:1,state:n.state},n.state};vh.removeFromCache=function(e){let t=new vh(e),n=JSON.stringify(t),i=Ph[n],o=JSON.stringify(e),r=Ph[o];d(r)&&(--r.referenceCount,r.referenceCount===0&&(delete Ph[o],d(i)&&--i.referenceCount)),d(i)&&i.referenceCount===0&&delete Ph[n]};vh.getCache=function(){return Ph};vh.clearCache=function(){Ph={}};function Ag(e,t,n){n?e.enable(t):e.disable(t)}function H6(e,t){e.frontFace(t.frontFace)}function z6(e,t){let n=t.cull,i=n.enabled;Ag(e,e.CULL_FACE,i),i&&e.cullFace(n.face)}function J6(e,t){e.lineWidth(t.lineWidth)}function Q6(e,t){let n=t.polygonOffset,i=n.enabled;Ag(e,e.POLYGON_OFFSET_FILL,i),i&&e.polygonOffset(n.factor,n.units)}function j6(e,t,n){let i=t.scissorTest,o=d(n.scissorTest)?n.scissorTest.enabled:i.enabled;if(Ag(e,e.SCISSOR_TEST,o),o){let r=d(n.scissorTest)?n.scissorTest.rectangle:i.rectangle;e.scissor(r.x,r.y,r.width,r.height)}}function q6(e,t){let n=t.depthRange;e.depthRange(n.near,n.far)}function $6(e,t){let n=t.depthTest,i=n.enabled;Ag(e,e.DEPTH_TEST,i),i&&e.depthFunc(n.func)}function eq(e,t){let n=t.colorMask;e.colorMask(n.red,n.green,n.blue,n.alpha)}function tq(e,t){e.depthMask(t.depthMask)}function nq(e,t){e.stencilMask(t.stencilMask)}function bLe(e,t){e.blendColor(t.red,t.green,t.blue,t.alpha)}function iq(e,t,n){let i=t.blending,o=d(n.blendingEnabled)?n.blendingEnabled:i.enabled;Ag(e,e.BLEND,o),o&&(bLe(e,i.color),e.blendEquationSeparate(i.equationRgb,i.equationAlpha),e.blendFuncSeparate(i.functionSourceRgb,i.functionDestinationRgb,i.functionSourceAlpha,i.functionDestinationAlpha))}function oq(e,t){let n=t.stencilTest,i=n.enabled;if(Ag(e,e.STENCIL_TEST,i),i){let o=n.frontFunction,r=n.backFunction,s=n.reference,a=n.mask;e.stencilFunc(o,s,a),e.stencilFuncSeparate(e.BACK,r,s,a),e.stencilFuncSeparate(e.FRONT,o,s,a);let c=n.frontOperation,l=c.fail,u=c.zFail,m=c.zPass;e.stencilOpSeparate(e.FRONT,l,u,m);let p=n.backOperation,y=p.fail,f=p.zFail,x=p.zPass;e.stencilOpSeparate(e.BACK,y,f,x)}}function rq(e,t){let n=t.sampleCoverage,i=n.enabled;Ag(e,e.SAMPLE_COVERAGE,i),i&&e.sampleCoverage(n.value,n.invert)}var yLe=new He;function sq(e,t,n){let i=g(t.viewport,n.viewport);d(i)||(i=yLe,i.width=n.context.drawingBufferWidth,i.height=n.context.drawingBufferHeight),n.context.uniformState.viewport=i,e.viewport(i.x,i.y,i.width,i.height)}vh.apply=function(e,t,n){H6(e,t),z6(e,t),J6(e,t),Q6(e,t),q6(e,t),$6(e,t),eq(e,t),tq(e,t),nq(e,t),oq(e,t),rq(e,t),j6(e,t,n),iq(e,t,n),sq(e,t,n)};function gLe(e,t){let n=[];return e.frontFace!==t.frontFace&&n.push(H6),(e.cull.enabled!==t.cull.enabled||e.cull.face!==t.cull.face)&&n.push(z6),e.lineWidth!==t.lineWidth&&n.push(J6),(e.polygonOffset.enabled!==t.polygonOffset.enabled||e.polygonOffset.factor!==t.polygonOffset.factor||e.polygonOffset.units!==t.polygonOffset.units)&&n.push(Q6),(e.depthRange.near!==t.depthRange.near||e.depthRange.far!==t.depthRange.far)&&n.push(q6),(e.depthTest.enabled!==t.depthTest.enabled||e.depthTest.func!==t.depthTest.func)&&n.push($6),(e.colorMask.red!==t.colorMask.red||e.colorMask.green!==t.colorMask.green||e.colorMask.blue!==t.colorMask.blue||e.colorMask.alpha!==t.colorMask.alpha)&&n.push(eq),e.depthMask!==t.depthMask&&n.push(tq),e.stencilMask!==t.stencilMask&&n.push(nq),(e.stencilTest.enabled!==t.stencilTest.enabled||e.stencilTest.frontFunction!==t.stencilTest.frontFunction||e.stencilTest.backFunction!==t.stencilTest.backFunction||e.stencilTest.reference!==t.stencilTest.reference||e.stencilTest.mask!==t.stencilTest.mask||e.stencilTest.frontOperation.fail!==t.stencilTest.frontOperation.fail||e.stencilTest.frontOperation.zFail!==t.stencilTest.frontOperation.zFail||e.stencilTest.backOperation.fail!==t.stencilTest.backOperation.fail||e.stencilTest.backOperation.zFail!==t.stencilTest.backOperation.zFail||e.stencilTest.backOperation.zPass!==t.stencilTest.backOperation.zPass)&&n.push(oq),(e.sampleCoverage.enabled!==t.sampleCoverage.enabled||e.sampleCoverage.value!==t.sampleCoverage.value||e.sampleCoverage.invert!==t.sampleCoverage.invert)&&n.push(rq),n}vh.partialApply=function(e,t,n,i,o,r){if(t!==n){let u=n._applyFunctions[t.id];d(u)||(u=gLe(t,n),n._applyFunctions[t.id]=u);let m=u.length;for(let p=0;p<m;++p)u[p](e,n)}let s=d(i.scissorTest)?i.scissorTest:t.scissorTest,a=d(o.scissorTest)?o.scissorTest:n.scissorTest;(s!==a||r)&&j6(e,n,o);let c=d(i.blendingEnabled)?i.blendingEnabled:t.blending.enabled,l=d(o.blendingEnabled)?o.blendingEnabled:n.blending.enabled;(c!==l||l&&t.blending!==n.blending)&&iq(e,n,o),(t!==n||i!==o||i.context!==o.context)&&sq(e,n,o)};vh.getState=function(e){return{frontFace:e.frontFace,cull:{enabled:e.cull.enabled,face:e.cull.face},lineWidth:e.lineWidth,polygonOffset:{enabled:e.polygonOffset.enabled,factor:e.polygonOffset.factor,units:e.polygonOffset.units},scissorTest:{enabled:e.scissorTest.enabled,rectangle:He.clone(e.scissorTest.rectangle)},depthRange:{near:e.depthRange.near,far:e.depthRange.far},depthTest:{enabled:e.depthTest.enabled,func:e.depthTest.func},colorMask:{red:e.colorMask.red,green:e.colorMask.green,blue:e.colorMask.blue,alpha:e.colorMask.alpha},depthMask:e.depthMask,stencilMask:e.stencilMask,blending:{enabled:e.blending.enabled,color:Y.clone(e.blending.color),equationRgb:e.blending.equationRgb,equationAlpha:e.blending.equationAlpha,functionSourceRgb:e.blending.functionSourceRgb,functionSourceAlpha:e.blending.functionSourceAlpha,functionDestinationRgb:e.blending.functionDestinationRgb,functionDestinationAlpha:e.blending.functionDestinationAlpha},stencilTest:{enabled:e.stencilTest.enabled,frontFunction:e.stencilTest.frontFunction,backFunction:e.stencilTest.backFunction,reference:e.stencilTest.reference,mask:e.stencilTest.mask,frontOperation:{fail:e.stencilTest.frontOperation.fail,zFail:e.stencilTest.frontOperation.zFail,zPass:e.stencilTest.frontOperation.zPass},backOperation:{fail:e.stencilTest.backOperation.fail,zFail:e.stencilTest.backOperation.zFail,zPass:e.stencilTest.backOperation.zPass}},sampleCoverage:{enabled:e.sampleCoverage.enabled,value:e.sampleCoverage.value,invert:e.sampleCoverage.invert},viewport:d(e.viewport)?He.clone(e.viewport):void 0}};var De=vh;var R2t=T(S(),1);var zWt=T(S(),1);var xLe=new h;function Yt(e){this._size=e.size,this._datatype=e.datatype,this.getValue=e.getValue}var Us={};Us[ne.FLOAT]="float";Us[ne.FLOAT_VEC2]="vec2";Us[ne.FLOAT_VEC3]="vec3";Us[ne.FLOAT_VEC4]="vec4";Us[ne.INT]="int";Us[ne.INT_VEC2]="ivec2";Us[ne.INT_VEC3]="ivec3";Us[ne.INT_VEC4]="ivec4";Us[ne.BOOL]="bool";Us[ne.BOOL_VEC2]="bvec2";Us[ne.BOOL_VEC3]="bvec3";Us[ne.BOOL_VEC4]="bvec4";Us[ne.FLOAT_MAT2]="mat2";Us[ne.FLOAT_MAT3]="mat3";Us[ne.FLOAT_MAT4]="mat4";Us[ne.SAMPLER_2D]="sampler2D";Us[ne.SAMPLER_CUBE]="samplerCube";Yt.prototype.getDeclaration=function(e){let t=`uniform ${Us[this._datatype]} ${e}`,n=this._size;return n===1?t+=";":t+=`[${n.toString()}];`,t};var _Le={czm_viewport:new Yt({size:1,datatype:ne.FLOAT_VEC4,getValue:function(e){return e.viewportCartesian4}}),czm_viewportOrthographic:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.viewportOrthographic}}),czm_viewportTransformation:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.viewportTransformation}}),czm_globeDepthTexture:new Yt({size:1,datatype:ne.SAMPLER_2D,getValue:function(e){return e.globeDepthTexture}}),czm_model:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.model}}),czm_inverseModel:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseModel}}),czm_view:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.view}}),czm_view3D:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.view3D}}),czm_viewRotation:new Yt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.viewRotation}}),czm_viewRotation3D:new Yt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.viewRotation3D}}),czm_inverseView:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseView}}),czm_inverseView3D:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseView3D}}),czm_inverseViewRotation:new Yt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.inverseViewRotation}}),czm_inverseViewRotation3D:new Yt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.inverseViewRotation3D}}),czm_projection:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.projection}}),czm_inverseProjection:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseProjection}}),czm_infiniteProjection:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.infiniteProjection}}),czm_modelView:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.modelView}}),czm_modelView3D:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.modelView3D}}),czm_modelViewRelativeToEye:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.modelViewRelativeToEye}}),czm_inverseModelView:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseModelView}}),czm_inverseModelView3D:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseModelView3D}}),czm_viewProjection:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.viewProjection}}),czm_inverseViewProjection:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseViewProjection}}),czm_modelViewProjection:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.modelViewProjection}}),czm_inverseModelViewProjection:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.inverseModelViewProjection}}),czm_modelViewProjectionRelativeToEye:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.modelViewProjectionRelativeToEye}}),czm_modelViewInfiniteProjection:new Yt({size:1,datatype:ne.FLOAT_MAT4,getValue:function(e){return e.modelViewInfiniteProjection}}),czm_orthographicIn3D:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.orthographicIn3D?1:0}}),czm_normal:new Yt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.normal}}),czm_normal3D:new Yt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.normal3D}}),czm_inverseNormal:new Yt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.inverseNormal}}),czm_inverseNormal3D:new Yt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.inverseNormal3D}}),czm_eyeHeight:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.eyeHeight}}),czm_eyeHeight2D:new Yt({size:1,datatype:ne.FLOAT_VEC2,getValue:function(e){return e.eyeHeight2D}}),czm_entireFrustum:new Yt({size:1,datatype:ne.FLOAT_VEC2,getValue:function(e){return e.entireFrustum}}),czm_currentFrustum:new Yt({size:1,datatype:ne.FLOAT_VEC2,getValue:function(e){return e.currentFrustum}}),czm_frustumPlanes:new Yt({size:1,datatype:ne.FLOAT_VEC4,getValue:function(e){return e.frustumPlanes}}),czm_farDepthFromNearPlusOne:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.farDepthFromNearPlusOne}}),czm_log2FarDepthFromNearPlusOne:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.log2FarDepthFromNearPlusOne}}),czm_oneOverLog2FarDepthFromNearPlusOne:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.oneOverLog2FarDepthFromNearPlusOne}}),czm_sunPositionWC:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.sunPositionWC}}),czm_sunPositionColumbusView:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.sunPositionColumbusView}}),czm_sunDirectionEC:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.sunDirectionEC}}),czm_sunDirectionWC:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.sunDirectionWC}}),czm_moonDirectionEC:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.moonDirectionEC}}),czm_lightDirectionEC:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.lightDirectionEC}}),czm_lightDirectionWC:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.lightDirectionWC}}),czm_lightColor:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.lightColor}}),czm_lightColorHdr:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.lightColorHdr}}),czm_encodedCameraPositionMCHigh:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.encodedCameraPositionMCHigh}}),czm_encodedCameraPositionMCLow:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.encodedCameraPositionMCLow}}),czm_viewerPositionWC:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return A.getTranslation(e.inverseView,xLe)}}),czm_frameNumber:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.frameState.frameNumber}}),czm_morphTime:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.frameState.morphTime}}),czm_sceneMode:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.frameState.mode}}),czm_pass:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.pass}}),czm_backgroundColor:new Yt({size:1,datatype:ne.FLOAT_VEC4,getValue:function(e){return e.backgroundColor}}),czm_brdfLut:new Yt({size:1,datatype:ne.SAMPLER_2D,getValue:function(e){return e.brdfLut}}),czm_environmentMap:new Yt({size:1,datatype:ne.SAMPLER_CUBE,getValue:function(e){return e.environmentMap}}),czm_specularEnvironmentMaps:new Yt({size:1,datatype:ne.SAMPLER_2D,getValue:function(e){return e.specularEnvironmentMaps}}),czm_specularEnvironmentMapSize:new Yt({size:1,datatype:ne.FLOAT_VEC2,getValue:function(e){return e.specularEnvironmentMapsDimensions}}),czm_specularEnvironmentMapsMaximumLOD:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.specularEnvironmentMapsMaximumLOD}}),czm_sphericalHarmonicCoefficients:new Yt({size:9,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.sphericalHarmonicCoefficients}}),czm_temeToPseudoFixed:new Yt({size:1,datatype:ne.FLOAT_MAT3,getValue:function(e){return e.temeToPseudoFixedMatrix}}),czm_pixelRatio:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.pixelRatio}}),czm_fogDensity:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.fogDensity}}),czm_splitPosition:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.splitPosition}}),czm_geometricToleranceOverMeter:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.geometricToleranceOverMeter}}),czm_minimumDisableDepthTestDistance:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.minimumDisableDepthTestDistance}}),czm_invertClassificationColor:new Yt({size:1,datatype:ne.FLOAT_VEC4,getValue:function(e){return e.invertClassificationColor}}),czm_gamma:new Yt({size:1,datatype:ne.FLOAT,getValue:function(e){return e.gamma}}),czm_ellipsoidRadii:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.ellipsoid.radii}}),czm_ellipsoidInverseRadii:new Yt({size:1,datatype:ne.FLOAT_VEC3,getValue:function(e){return e.ellipsoid.oneOverRadii}})},$f=_Le;var r2t=T(S(),1);function TLe(e,t,n,i){switch(t.type){case e.FLOAT:return new aq(e,t,n,i);case e.FLOAT_VEC2:return new cq(e,t,n,i);case e.FLOAT_VEC3:return new lq(e,t,n,i);case e.FLOAT_VEC4:return new dq(e,t,n,i);case e.SAMPLER_2D:case e.SAMPLER_CUBE:return new a3(e,t,n,i);case e.INT:case e.BOOL:return new uq(e,t,n,i);case e.INT_VEC2:case e.BOOL_VEC2:return new mq(e,t,n,i);case e.INT_VEC3:case e.BOOL_VEC3:return new hq(e,t,n,i);case e.INT_VEC4:case e.BOOL_VEC4:return new fq(e,t,n,i);case e.FLOAT_MAT2:return new pq(e,t,n,i);case e.FLOAT_MAT3:return new bq(e,t,n,i);case e.FLOAT_MAT4:return new yq(e,t,n,i);default:throw new me(`Unrecognized uniform type: ${t.type} for uniform "${n}".`)}}function aq(e,t,n,i){this.name=n,this.value=void 0,this._value=0,this._gl=e,this._location=i}aq.prototype.set=function(){this.value!==this._value&&(this._value=this.value,this._gl.uniform1f(this._location,this.value))};function cq(e,t,n,i){this.name=n,this.value=void 0,this._value=new D,this._gl=e,this._location=i}cq.prototype.set=function(){let e=this.value;D.equals(e,this._value)||(D.clone(e,this._value),this._gl.uniform2f(this._location,e.x,e.y))};function lq(e,t,n,i){this.name=n,this.value=void 0,this._value=void 0,this._gl=e,this._location=i}lq.prototype.set=function(){let e=this.value;d(e.red)?Y.equals(e,this._value)||(this._value=Y.clone(e,this._value),this._gl.uniform3f(this._location,e.red,e.green,e.blue)):d(e.x)&&(h.equals(e,this._value)||(this._value=h.clone(e,this._value),this._gl.uniform3f(this._location,e.x,e.y,e.z)))};function dq(e,t,n,i){this.name=n,this.value=void 0,this._value=void 0,this._gl=e,this._location=i}dq.prototype.set=function(){let e=this.value;d(e.red)?Y.equals(e,this._value)||(this._value=Y.clone(e,this._value),this._gl.uniform4f(this._location,e.red,e.green,e.blue,e.alpha)):d(e.x)&&(se.equals(e,this._value)||(this._value=se.clone(e,this._value),this._gl.uniform4f(this._location,e.x,e.y,e.z,e.w)))};function a3(e,t,n,i){this.name=n,this.value=void 0,this._gl=e,this._location=i,this.textureUnitIndex=void 0}a3.prototype.set=function(){let e=this._gl;e.activeTexture(e.TEXTURE0+this.textureUnitIndex);let t=this.value;e.bindTexture(t._target,t._texture)};a3.prototype._setSampler=function(e){return this.textureUnitIndex=e,this._gl.uniform1i(this._location,e),e+1};function uq(e,t,n,i){this.name=n,this.value=void 0,this._value=0,this._gl=e,this._location=i}uq.prototype.set=function(){this.value!==this._value&&(this._value=this.value,this._gl.uniform1i(this._location,this.value))};function mq(e,t,n,i){this.name=n,this.value=void 0,this._value=new D,this._gl=e,this._location=i}mq.prototype.set=function(){let e=this.value;D.equals(e,this._value)||(D.clone(e,this._value),this._gl.uniform2i(this._location,e.x,e.y))};function hq(e,t,n,i){this.name=n,this.value=void 0,this._value=new h,this._gl=e,this._location=i}hq.prototype.set=function(){let e=this.value;h.equals(e,this._value)||(h.clone(e,this._value),this._gl.uniform3i(this._location,e.x,e.y,e.z))};function fq(e,t,n,i){this.name=n,this.value=void 0,this._value=new se,this._gl=e,this._location=i}fq.prototype.set=function(){let e=this.value;se.equals(e,this._value)||(se.clone(e,this._value),this._gl.uniform4i(this._location,e.x,e.y,e.z,e.w))};var SLe=new Float32Array(4);function pq(e,t,n,i){this.name=n,this.value=void 0,this._value=new $i,this._gl=e,this._location=i}pq.prototype.set=function(){if(!$i.equalsArray(this.value,this._value,0)){$i.clone(this.value,this._value);let e=$i.toArray(this.value,SLe);this._gl.uniformMatrix2fv(this._location,!1,e)}};var CLe=new Float32Array(9);function bq(e,t,n,i){this.name=n,this.value=void 0,this._value=new $,this._gl=e,this._location=i}bq.prototype.set=function(){if(!$.equalsArray(this.value,this._value,0)){$.clone(this.value,this._value);let e=$.toArray(this.value,CLe);this._gl.uniformMatrix3fv(this._location,!1,e)}};var VLe=new Float32Array(16);function yq(e,t,n,i){this.name=n,this.value=void 0,this._value=new A,this._gl=e,this._location=i}yq.prototype.set=function(){if(!A.equalsArray(this.value,this._value,0)){A.clone(this.value,this._value);let e=A.toArray(this.value,VLe);this._gl.uniformMatrix4fv(this._location,!1,e)}};var jL=TLe;var b2t=T(S(),1);function LLe(e,t,n,i){switch(t.type){case e.FLOAT:return new gq(e,t,n,i);case e.FLOAT_VEC2:return new xq(e,t,n,i);case e.FLOAT_VEC3:return new _q(e,t,n,i);case e.FLOAT_VEC4:return new Tq(e,t,n,i);case e.SAMPLER_2D:case e.SAMPLER_CUBE:return new c3(e,t,n,i);case e.INT:case e.BOOL:return new Sq(e,t,n,i);case e.INT_VEC2:case e.BOOL_VEC2:return new Cq(e,t,n,i);case e.INT_VEC3:case e.BOOL_VEC3:return new Vq(e,t,n,i);case e.INT_VEC4:case e.BOOL_VEC4:return new Lq(e,t,n,i);case e.FLOAT_MAT2:return new Rq(e,t,n,i);case e.FLOAT_MAT3:return new Zq(e,t,n,i);case e.FLOAT_MAT4:return new Gq(e,t,n,i);default:throw new me(`Unrecognized uniform type: ${t.type} for uniform "${n}".`)}}function gq(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o),this._gl=e,this._location=i[0]}gq.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1;for(let o=0;o<t;++o){let r=e[o];r!==n[o]&&(n[o]=r,i=!0)}i&&this._gl.uniform1fv(this._location,n)};function xq(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o*2),this._gl=e,this._location=i[0]}xq.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];D.equalsArray(s,n,o)||(D.pack(s,n,o),i=!0),o+=2}i&&this._gl.uniform2fv(this._location,n)};function _q(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o*3),this._gl=e,this._location=i[0]}_q.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];d(s.red)?(s.red!==n[o]||s.green!==n[o+1]||s.blue!==n[o+2])&&(n[o]=s.red,n[o+1]=s.green,n[o+2]=s.blue,i=!0):d(s.x)&&(h.equalsArray(s,n,o)||(h.pack(s,n,o),i=!0)),o+=3}i&&this._gl.uniform3fv(this._location,n)};function Tq(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o*4),this._gl=e,this._location=i[0]}Tq.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];d(s.red)?Y.equalsArray(s,n,o)||(Y.pack(s,n,o),i=!0):d(s.x)&&(se.equalsArray(s,n,o)||(se.pack(s,n,o),i=!0)),o+=4}i&&this._gl.uniform4fv(this._location,n)};function c3(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o),this._gl=e,this._locations=i,this.textureUnitIndex=void 0}c3.prototype.set=function(){let e=this._gl,t=e.TEXTURE0+this.textureUnitIndex,n=this.value,i=n.length;for(let o=0;o<i;++o){let r=n[o];e.activeTexture(t+o),e.bindTexture(r._target,r._texture)}};c3.prototype._setSampler=function(e){this.textureUnitIndex=e;let t=this._locations,n=t.length;for(let i=0;i<n;++i){let o=e+i;this._gl.uniform1i(t[i],o)}return e+n};function Sq(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Int32Array(o),this._gl=e,this._location=i[0]}Sq.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1;for(let o=0;o<t;++o){let r=e[o];r!==n[o]&&(n[o]=r,i=!0)}i&&this._gl.uniform1iv(this._location,n)};function Cq(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Int32Array(o*2),this._gl=e,this._location=i[0]}Cq.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];D.equalsArray(s,n,o)||(D.pack(s,n,o),i=!0),o+=2}i&&this._gl.uniform2iv(this._location,n)};function Vq(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Int32Array(o*3),this._gl=e,this._location=i[0]}Vq.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];h.equalsArray(s,n,o)||(h.pack(s,n,o),i=!0),o+=3}i&&this._gl.uniform3iv(this._location,n)};function Lq(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Int32Array(o*4),this._gl=e,this._location=i[0]}Lq.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];se.equalsArray(s,n,o)||(se.pack(s,n,o),i=!0),o+=4}i&&this._gl.uniform4iv(this._location,n)};function Rq(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o*4),this._gl=e,this._location=i[0]}Rq.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];$i.equalsArray(s,n,o)||($i.pack(s,n,o),i=!0),o+=4}i&&this._gl.uniformMatrix2fv(this._location,!1,n)};function Zq(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o*9),this._gl=e,this._location=i[0]}Zq.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];$.equalsArray(s,n,o)||($.pack(s,n,o),i=!0),o+=9}i&&this._gl.uniformMatrix3fv(this._location,!1,n)};function Gq(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o*16),this._gl=e,this._location=i[0]}Gq.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];A.equalsArray(s,n,o)||(A.pack(s,n,o),i=!0),o+=16}i&&this._gl.uniformMatrix4fv(this._location,!1,n)};var qL=LLe;var RLe=0;function ep(e){let t=e.vertexShaderText,n=e.fragmentShaderText;typeof spector<"u"&&(t=t.replace(/^#line/gm,"//#line"),n=n.replace(/^#line/gm,"//#line"));let i=ZLe(t,n);this._gl=e.gl,this._logShaderCompilation=e.logShaderCompilation,this._debugShaders=e.debugShaders,this._attributeLocations=e.attributeLocations,this._program=void 0,this._numberOfVertexAttributes=void 0,this._vertexAttributes=void 0,this._uniformsByName=void 0,this._uniforms=void 0,this._automaticUniforms=void 0,this._manualUniforms=void 0,this._duplicateUniformNames=i.duplicateUniformNames,this._cachedShader=void 0,this.maximumTextureUnitIndex=void 0,this._vertexShaderSource=e.vertexShaderSource,this._vertexShaderText=e.vertexShaderText,this._fragmentShaderSource=e.fragmentShaderSource,this._fragmentShaderText=i.fragmentShaderText,this.id=RLe++}ep.fromCache=function(e){return e=g(e,g.EMPTY_OBJECT),e.context.shaderCache.getShaderProgram(e)};ep.replaceCache=function(e){return e=g(e,g.EMPTY_OBJECT),e.context.shaderCache.replaceShaderProgram(e)};Object.defineProperties(ep.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},vertexAttributes:{get:function(){return zA(this),this._vertexAttributes}},numberOfVertexAttributes:{get:function(){return zA(this),this._numberOfVertexAttributes}},allUniforms:{get:function(){return zA(this),this._uniformsByName}}});function Eq(e){let t=[],n=e.match(/uniform.*?(?![^{]*})(?=[=\[;])/g);if(d(n)){let i=n.length;for(let o=0;o<i;o++){let r=n[o].trim(),s=r.slice(r.lastIndexOf(" ")+1);t.push(s)}}return t}function ZLe(e,t){let n={};if(!kt.highpFloatSupported||!kt.highpIntSupported){let i,o,r,s,a=Eq(e),c=Eq(t),l=a.length,u=c.length;for(i=0;i<l;i++)for(o=0;o<u;o++)if(a[i]===c[o]){r=a[i],s=`czm_mediump_${r}`;let m=new RegExp(`${r}\\b`,"g");t=t.replace(m,s),n[s]=r}}return{fragmentShaderText:t,duplicateUniformNames:n}}var wh="[Cesium WebGL] ";function GLe(e,t){let n=t._vertexShaderText,i=t._fragmentShaderText,o=e.createShader(e.VERTEX_SHADER);e.shaderSource(o,n),e.compileShader(o);let r=e.createShader(e.FRAGMENT_SHADER);e.shaderSource(r,i),e.compileShader(r);let s=e.createProgram();e.attachShader(s,o),e.attachShader(s,r);let a=t._attributeLocations;if(d(a))for(let p in a)a.hasOwnProperty(p)&&e.bindAttribLocation(s,a[p],p);e.linkProgram(s);let c;if(e.getProgramParameter(s,e.LINK_STATUS))return t._logShaderCompilation&&(c=e.getShaderInfoLog(o),d(c)&&c.length>0&&console.log(`${wh}Vertex shader compile log: ${c}`),c=e.getShaderInfoLog(r),d(c)&&c.length>0&&console.log(`${wh}Fragment shader compile log: ${c}`),c=e.getProgramInfoLog(s),d(c)&&c.length>0&&console.log(`${wh}Shader program link log: ${c}`)),e.deleteShader(o),e.deleteShader(r),s;let l,u=t._debugShaders;throw e.getShaderParameter(r,e.COMPILE_STATUS)?e.getShaderParameter(o,e.COMPILE_STATUS)?(c=e.getProgramInfoLog(s),console.error(`${wh}Shader program link log: ${c}`),m(o,"vertex"),m(r,"fragment"),l=`Program failed to link. Link log: ${c}`):(c=e.getShaderInfoLog(o),console.error(`${wh}Vertex shader compile log: ${c}`),console.error(`${wh} Vertex shader source:
  729. ${n}`),l=`Vertex shader failed to compile. Compile log: ${c}`):(c=e.getShaderInfoLog(r),console.error(`${wh}Fragment shader compile log: ${c}`),console.error(`${wh} Fragment shader source:
  730. ${i}`),l=`Fragment shader failed to compile. Compile log: ${c}`),e.deleteShader(o),e.deleteShader(r),e.deleteProgram(s),new me(l);function m(p,y){if(!d(u))return;let f=u.getTranslatedShaderSource(p);if(f===""){console.error(`${wh}${y} shader translation failed.`);return}console.error(`${wh}Translated ${y} shaderSource:
  731. ${f}`)}}function ELe(e,t,n){let i={};for(let o=0;o<n;++o){let r=e.getActiveAttrib(t,o),s=e.getAttribLocation(t,r.name);i[r.name]={name:r.name,type:r.type,index:s}}return i}function XLe(e,t){let n={},i=[],o=[],r=e.getProgramParameter(t,e.ACTIVE_UNIFORMS);for(let s=0;s<r;++s){let a=e.getActiveUniform(t,s),c="[0]",l=a.name.indexOf(c,a.name.length-c.length)!==-1?a.name.slice(0,a.name.length-3):a.name;if(l.indexOf("gl_")!==0)if(a.name.indexOf("[")<0){let u=e.getUniformLocation(t,l);if(u!==null){let m=jL(e,a,l,u);n[l]=m,i.push(m),m._setSampler&&o.push(m)}}else{let u,m,p,y,f=l.indexOf("[");if(f>=0){if(u=n[l.slice(0,f)],!d(u))continue;m=u._locations,m.length<=1&&(p=u.value,y=e.getUniformLocation(t,l),y!==null&&(m.push(y),p.push(e.getUniform(t,y))))}else{m=[];for(let x=0;x<a.size;++x)y=e.getUniformLocation(t,`${l}[${x}]`),y!==null&&m.push(y);u=qL(e,a,l,m),n[l]=u,i.push(u),u._setSampler&&o.push(u)}}}return{uniformsByName:n,uniforms:i,samplerUniforms:o}}function ILe(e,t){let n=[],i=[];for(let o in t)if(t.hasOwnProperty(o)){let r=t[o],s=o,a=e._duplicateUniformNames[s];d(a)&&(r.name=a,s=a);let c=$f[s];d(c)?n.push({uniform:r,automaticUniform:c}):i.push(r)}return{automaticUniforms:n,manualUniforms:i}}function WLe(e,t,n){e.useProgram(t);let i=0,o=n.length;for(let r=0;r<o;++r)i=n[r]._setSampler(i);return e.useProgram(null),i}function zA(e){d(e._program)||Xq(e)}function Xq(e){let t=e._program,n=e._gl,i=GLe(n,e,e._debugShaders),o=n.getProgramParameter(i,n.ACTIVE_ATTRIBUTES),r=XLe(n,i),s=ILe(e,r.uniformsByName);e._program=i,e._numberOfVertexAttributes=o,e._vertexAttributes=ELe(n,i,o),e._uniformsByName=r.uniformsByName,e._uniforms=r.uniforms,e._automaticUniforms=s.automaticUniforms,e._manualUniforms=s.manualUniforms,e.maximumTextureUnitIndex=WLe(n,i,r.samplerUniforms),t&&e._gl.deleteProgram(t),typeof spector<"u"&&(e._program.__SPECTOR_rebuildProgram=function(a,c,l,u){let m=e._vertexShaderText,p=e._fragmentShaderText,y=/ ! = /g;e._vertexShaderText=a.replace(y," != "),e._fragmentShaderText=c.replace(y," != ");try{Xq(e),l(e._program)}catch(f){e._vertexShaderText=m,e._fragmentShaderText=p;let _=/(?:Compile|Link) error: ([^]*)/.exec(f.message);u(_?_[1]:f.message)}})}ep.prototype._bind=function(){zA(this),this._gl.useProgram(this._program)};ep.prototype._setUniforms=function(e,t,n){let i,o;if(d(e)){let a=this._manualUniforms;for(i=a.length,o=0;o<i;++o){let c=a[o];c.value=e[c.name]()}}let r=this._automaticUniforms;for(i=r.length,o=0;o<i;++o){let a=r[o];a.uniform.value=a.automaticUniform.getValue(t)}let s=this._uniforms;for(i=s.length,o=0;o<i;++o)s[o].set();if(n){let a=this._gl,c=this._program;a.validateProgram(c)}};ep.prototype.isDestroyed=function(){return!1};ep.prototype.destroy=function(){this._cachedShader.cache.releaseShaderProgram(this)};ep.prototype.finalDestroy=function(){return this._gl.deleteProgram(this._program),ue(this)};var Qt=ep;var qMt=T(S(),1);var BMt=T(S(),1);var G2t=T(S(),1),$L=`/**
  732. * A built-in GLSL floating-point constant for converting radians to degrees.
  733. *
  734. * @alias czm_degreesPerRadian
  735. * @glslConstant
  736. *
  737. * @see CesiumMath.DEGREES_PER_RADIAN
  738. *
  739. * @example
  740. * // GLSL declaration
  741. * const float czm_degreesPerRadian = ...;
  742. *
  743. * // Example
  744. * float deg = czm_degreesPerRadian * rad;
  745. */
  746. const float czm_degreesPerRadian = 57.29577951308232;
  747. `;var X2t=T(S(),1),eR=`/**
  748. * A built-in GLSL vec2 constant for defining the depth range.
  749. * This is a workaround to a bug where IE11 does not implement gl_DepthRange.
  750. *
  751. * @alias czm_depthRange
  752. * @glslConstant
  753. *
  754. * @example
  755. * // GLSL declaration
  756. * float depthRangeNear = czm_depthRange.near;
  757. * float depthRangeFar = czm_depthRange.far;
  758. *
  759. */
  760. const czm_depthRangeStruct czm_depthRange = czm_depthRangeStruct(0.0, 1.0);
  761. `;var W2t=T(S(),1),tR=`/**
  762. * 0.1
  763. *
  764. * @name czm_epsilon1
  765. * @glslConstant
  766. */
  767. const float czm_epsilon1 = 0.1;
  768. `;var v2t=T(S(),1),nR=`/**
  769. * 0.01
  770. *
  771. * @name czm_epsilon2
  772. * @glslConstant
  773. */
  774. const float czm_epsilon2 = 0.01;
  775. `;var F2t=T(S(),1),iR=`/**
  776. * 0.001
  777. *
  778. * @name czm_epsilon3
  779. * @glslConstant
  780. */
  781. const float czm_epsilon3 = 0.001;
  782. `;var M2t=T(S(),1),oR=`/**
  783. * 0.0001
  784. *
  785. * @name czm_epsilon4
  786. * @glslConstant
  787. */
  788. const float czm_epsilon4 = 0.0001;
  789. `;var U2t=T(S(),1),rR=`/**
  790. * 0.00001
  791. *
  792. * @name czm_epsilon5
  793. * @glslConstant
  794. */
  795. const float czm_epsilon5 = 0.00001;
  796. `;var D2t=T(S(),1),sR=`/**
  797. * 0.000001
  798. *
  799. * @name czm_epsilon6
  800. * @glslConstant
  801. */
  802. const float czm_epsilon6 = 0.000001;
  803. `;var Y2t=T(S(),1),aR=`/**
  804. * 0.0000001
  805. *
  806. * @name czm_epsilon7
  807. * @glslConstant
  808. */
  809. const float czm_epsilon7 = 0.0000001;
  810. `;var K2t=T(S(),1),cR=`/**
  811. * DOC_TBA
  812. *
  813. * @name czm_infinity
  814. * @glslConstant
  815. */
  816. const float czm_infinity = 5906376272000.0; // Distance from the Sun to Pluto in meters. TODO: What is best given lowp, mediump, and highp?
  817. `;var z2t=T(S(),1),lR=`/**
  818. * A built-in GLSL floating-point constant for <code>1/pi</code>.
  819. *
  820. * @alias czm_oneOverPi
  821. * @glslConstant
  822. *
  823. * @see CesiumMath.ONE_OVER_PI
  824. *
  825. * @example
  826. * // GLSL declaration
  827. * const float czm_oneOverPi = ...;
  828. *
  829. * // Example
  830. * float pi = 1.0 / czm_oneOverPi;
  831. */
  832. const float czm_oneOverPi = 0.3183098861837907;
  833. `;var Q2t=T(S(),1),dR=`/**
  834. * A built-in GLSL floating-point constant for <code>1/2pi</code>.
  835. *
  836. * @alias czm_oneOverTwoPi
  837. * @glslConstant
  838. *
  839. * @see CesiumMath.ONE_OVER_TWO_PI
  840. *
  841. * @example
  842. * // GLSL declaration
  843. * const float czm_oneOverTwoPi = ...;
  844. *
  845. * // Example
  846. * float pi = 2.0 * czm_oneOverTwoPi;
  847. */
  848. const float czm_oneOverTwoPi = 0.15915494309189535;
  849. `;var q2t=T(S(),1),uR=`/**
  850. * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE}
  851. *
  852. * @name czm_passCesium3DTile
  853. * @glslConstant
  854. *
  855. * @see czm_pass
  856. */
  857. const float czm_passCesium3DTile = 4.0;
  858. `;var ePt=T(S(),1),mR=`/**
  859. * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE_CLASSIFICATION}
  860. *
  861. * @name czm_passCesium3DTileClassification
  862. * @glslConstant
  863. *
  864. * @see czm_pass
  865. */
  866. const float czm_passCesium3DTileClassification = 5.0;
  867. `;var nPt=T(S(),1),hR=`/**
  868. * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW}
  869. *
  870. * @name czm_passCesium3DTileClassificationIgnoreShow
  871. * @glslConstant
  872. *
  873. * @see czm_pass
  874. */
  875. const float czm_passCesium3DTileClassificationIgnoreShow = 6.0;
  876. `;var oPt=T(S(),1),fR=`/**
  877. * The automatic GLSL constant for {@link Pass#CLASSIFICATION}
  878. *
  879. * @name czm_passClassification
  880. * @glslConstant
  881. *
  882. * @see czm_pass
  883. */
  884. const float czm_passClassification = 7.0;
  885. `;var sPt=T(S(),1),pR=`/**
  886. * The automatic GLSL constant for {@link Pass#COMPUTE}
  887. *
  888. * @name czm_passCompute
  889. * @glslConstant
  890. *
  891. * @see czm_pass
  892. */
  893. const float czm_passCompute = 1.0;
  894. `;var cPt=T(S(),1),bR=`/**
  895. * The automatic GLSL constant for {@link Pass#ENVIRONMENT}
  896. *
  897. * @name czm_passEnvironment
  898. * @glslConstant
  899. *
  900. * @see czm_pass
  901. */
  902. const float czm_passEnvironment = 0.0;
  903. `;var dPt=T(S(),1),yR=`/**
  904. * The automatic GLSL constant for {@link Pass#GLOBE}
  905. *
  906. * @name czm_passGlobe
  907. * @glslConstant
  908. *
  909. * @see czm_pass
  910. */
  911. const float czm_passGlobe = 2.0;
  912. `;var mPt=T(S(),1),gR=`/**
  913. * The automatic GLSL constant for {@link Pass#OPAQUE}
  914. *
  915. * @name czm_passOpaque
  916. * @glslConstant
  917. *
  918. * @see czm_pass
  919. */
  920. const float czm_passOpaque = 7.0;
  921. `;var fPt=T(S(),1),xR=`/**
  922. * The automatic GLSL constant for {@link Pass#OVERLAY}
  923. *
  924. * @name czm_passOverlay
  925. * @glslConstant
  926. *
  927. * @see czm_pass
  928. */
  929. const float czm_passOverlay = 10.0;
  930. `;var bPt=T(S(),1),_R=`/**
  931. * The automatic GLSL constant for {@link Pass#TERRAIN_CLASSIFICATION}
  932. *
  933. * @name czm_passTerrainClassification
  934. * @glslConstant
  935. *
  936. * @see czm_pass
  937. */
  938. const float czm_passTerrainClassification = 3.0;
  939. `;var gPt=T(S(),1),TR=`/**
  940. * The automatic GLSL constant for {@link Pass#TRANSLUCENT}
  941. *
  942. * @name czm_passTranslucent
  943. * @glslConstant
  944. *
  945. * @see czm_pass
  946. */
  947. const float czm_passTranslucent = 8.0;
  948. `;var _Pt=T(S(),1),SR=`/**
  949. * The automatic GLSL constant for {@link Pass#VOXELS}
  950. *
  951. * @name czm_passVoxels
  952. * @glslConstant
  953. *
  954. * @see czm_pass
  955. */
  956. const float czm_passVoxels = 9.0;
  957. `;var SPt=T(S(),1),CR=`/**
  958. * A built-in GLSL floating-point constant for <code>Math.PI</code>.
  959. *
  960. * @alias czm_pi
  961. * @glslConstant
  962. *
  963. * @see CesiumMath.PI
  964. *
  965. * @example
  966. * // GLSL declaration
  967. * const float czm_pi = ...;
  968. *
  969. * // Example
  970. * float twoPi = 2.0 * czm_pi;
  971. */
  972. const float czm_pi = 3.141592653589793;
  973. `;var VPt=T(S(),1),VR=`/**
  974. * A built-in GLSL floating-point constant for <code>pi/4</code>.
  975. *
  976. * @alias czm_piOverFour
  977. * @glslConstant
  978. *
  979. * @see CesiumMath.PI_OVER_FOUR
  980. *
  981. * @example
  982. * // GLSL declaration
  983. * const float czm_piOverFour = ...;
  984. *
  985. * // Example
  986. * float pi = 4.0 * czm_piOverFour;
  987. */
  988. const float czm_piOverFour = 0.7853981633974483;
  989. `;var RPt=T(S(),1),LR=`/**
  990. * A built-in GLSL floating-point constant for <code>pi/6</code>.
  991. *
  992. * @alias czm_piOverSix
  993. * @glslConstant
  994. *
  995. * @see CesiumMath.PI_OVER_SIX
  996. *
  997. * @example
  998. * // GLSL declaration
  999. * const float czm_piOverSix = ...;
  1000. *
  1001. * // Example
  1002. * float pi = 6.0 * czm_piOverSix;
  1003. */
  1004. const float czm_piOverSix = 0.5235987755982988;
  1005. `;var GPt=T(S(),1),RR=`/**
  1006. * A built-in GLSL floating-point constant for <code>pi/3</code>.
  1007. *
  1008. * @alias czm_piOverThree
  1009. * @glslConstant
  1010. *
  1011. * @see CesiumMath.PI_OVER_THREE
  1012. *
  1013. * @example
  1014. * // GLSL declaration
  1015. * const float czm_piOverThree = ...;
  1016. *
  1017. * // Example
  1018. * float pi = 3.0 * czm_piOverThree;
  1019. */
  1020. const float czm_piOverThree = 1.0471975511965976;
  1021. `;var XPt=T(S(),1),ZR=`/**
  1022. * A built-in GLSL floating-point constant for <code>pi/2</code>.
  1023. *
  1024. * @alias czm_piOverTwo
  1025. * @glslConstant
  1026. *
  1027. * @see CesiumMath.PI_OVER_TWO
  1028. *
  1029. * @example
  1030. * // GLSL declaration
  1031. * const float czm_piOverTwo = ...;
  1032. *
  1033. * // Example
  1034. * float pi = 2.0 * czm_piOverTwo;
  1035. */
  1036. const float czm_piOverTwo = 1.5707963267948966;
  1037. `;var WPt=T(S(),1),GR=`/**
  1038. * A built-in GLSL floating-point constant for converting degrees to radians.
  1039. *
  1040. * @alias czm_radiansPerDegree
  1041. * @glslConstant
  1042. *
  1043. * @see CesiumMath.RADIANS_PER_DEGREE
  1044. *
  1045. * @example
  1046. * // GLSL declaration
  1047. * const float czm_radiansPerDegree = ...;
  1048. *
  1049. * // Example
  1050. * float rad = czm_radiansPerDegree * deg;
  1051. */
  1052. const float czm_radiansPerDegree = 0.017453292519943295;
  1053. `;var vPt=T(S(),1),ER=`/**
  1054. * The constant identifier for the 2D {@link SceneMode}
  1055. *
  1056. * @name czm_sceneMode2D
  1057. * @glslConstant
  1058. * @see czm_sceneMode
  1059. * @see czm_sceneModeColumbusView
  1060. * @see czm_sceneMode3D
  1061. * @see czm_sceneModeMorphing
  1062. */
  1063. const float czm_sceneMode2D = 2.0;
  1064. `;var FPt=T(S(),1),XR=`/**
  1065. * The constant identifier for the 3D {@link SceneMode}
  1066. *
  1067. * @name czm_sceneMode3D
  1068. * @glslConstant
  1069. * @see czm_sceneMode
  1070. * @see czm_sceneMode2D
  1071. * @see czm_sceneModeColumbusView
  1072. * @see czm_sceneModeMorphing
  1073. */
  1074. const float czm_sceneMode3D = 3.0;
  1075. `;var MPt=T(S(),1),IR=`/**
  1076. * The constant identifier for the Columbus View {@link SceneMode}
  1077. *
  1078. * @name czm_sceneModeColumbusView
  1079. * @glslConstant
  1080. * @see czm_sceneMode
  1081. * @see czm_sceneMode2D
  1082. * @see czm_sceneMode3D
  1083. * @see czm_sceneModeMorphing
  1084. */
  1085. const float czm_sceneModeColumbusView = 1.0;
  1086. `;var UPt=T(S(),1),WR=`/**
  1087. * The constant identifier for the Morphing {@link SceneMode}
  1088. *
  1089. * @name czm_sceneModeMorphing
  1090. * @glslConstant
  1091. * @see czm_sceneMode
  1092. * @see czm_sceneMode2D
  1093. * @see czm_sceneModeColumbusView
  1094. * @see czm_sceneMode3D
  1095. */
  1096. const float czm_sceneModeMorphing = 0.0;
  1097. `;var DPt=T(S(),1),PR=`/**
  1098. * A built-in GLSL floating-point constant for one solar radius.
  1099. *
  1100. * @alias czm_solarRadius
  1101. * @glslConstant
  1102. *
  1103. * @see CesiumMath.SOLAR_RADIUS
  1104. *
  1105. * @example
  1106. * // GLSL declaration
  1107. * const float czm_solarRadius = ...;
  1108. */
  1109. const float czm_solarRadius = 695500000.0;
  1110. `;var YPt=T(S(),1),vR=`/**
  1111. * A built-in GLSL floating-point constant for <code>3pi/2</code>.
  1112. *
  1113. * @alias czm_threePiOver2
  1114. * @glslConstant
  1115. *
  1116. * @see CesiumMath.THREE_PI_OVER_TWO
  1117. *
  1118. * @example
  1119. * // GLSL declaration
  1120. * const float czm_threePiOver2 = ...;
  1121. *
  1122. * // Example
  1123. * float pi = (2.0 / 3.0) * czm_threePiOver2;
  1124. */
  1125. const float czm_threePiOver2 = 4.71238898038469;
  1126. `;var KPt=T(S(),1),wR=`/**
  1127. * A built-in GLSL floating-point constant for <code>2pi</code>.
  1128. *
  1129. * @alias czm_twoPi
  1130. * @glslConstant
  1131. *
  1132. * @see CesiumMath.TWO_PI
  1133. *
  1134. * @example
  1135. * // GLSL declaration
  1136. * const float czm_twoPi = ...;
  1137. *
  1138. * // Example
  1139. * float pi = czm_twoPi / 2.0;
  1140. */
  1141. const float czm_twoPi = 6.283185307179586;
  1142. `;var zPt=T(S(),1),FR=`/**
  1143. * The maximum latitude, in radians, both North and South, supported by a Web Mercator
  1144. * (EPSG:3857) projection. Technically, the Mercator projection is defined
  1145. * for any latitude up to (but not including) 90 degrees, but it makes sense
  1146. * to cut it off sooner because it grows exponentially with increasing latitude.
  1147. * The logic behind this particular cutoff value, which is the one used by
  1148. * Google Maps, Bing Maps, and Esri, is that it makes the projection
  1149. * square. That is, the rectangle is equal in the X and Y directions.
  1150. *
  1151. * The constant value is computed as follows:
  1152. * czm_pi * 0.5 - (2.0 * atan(exp(-czm_pi)))
  1153. *
  1154. * @name czm_webMercatorMaxLatitude
  1155. * @glslConstant
  1156. */
  1157. const float czm_webMercatorMaxLatitude = 1.4844222297453324;
  1158. `;var QPt=T(S(),1),AR=`/**
  1159. * @name czm_depthRangeStruct
  1160. * @glslStruct
  1161. */
  1162. struct czm_depthRangeStruct
  1163. {
  1164. float near;
  1165. float far;
  1166. };
  1167. `;var qPt=T(S(),1),MR=`/**
  1168. * Holds material information that can be used for lighting. Returned by all czm_getMaterial functions.
  1169. *
  1170. * @name czm_material
  1171. * @glslStruct
  1172. *
  1173. * @property {vec3} diffuse Incoming light that scatters evenly in all directions.
  1174. * @property {float} specular Intensity of incoming light reflecting in a single direction.
  1175. * @property {float} shininess The sharpness of the specular reflection. Higher values create a smaller, more focused specular highlight.
  1176. * @property {vec3} normal Surface's normal in eye coordinates. It is used for effects such as normal mapping. The default is the surface's unmodified normal.
  1177. * @property {vec3} emission Light emitted by the material equally in all directions. The default is vec3(0.0), which emits no light.
  1178. * @property {float} alpha Alpha of this material. 0.0 is completely transparent; 1.0 is completely opaque.
  1179. */
  1180. struct czm_material
  1181. {
  1182. vec3 diffuse;
  1183. float specular;
  1184. float shininess;
  1185. vec3 normal;
  1186. vec3 emission;
  1187. float alpha;
  1188. };
  1189. `;var evt=T(S(),1),NR=`/**
  1190. * Used as input to every material's czm_getMaterial function.
  1191. *
  1192. * @name czm_materialInput
  1193. * @glslStruct
  1194. *
  1195. * @property {float} s 1D texture coordinates.
  1196. * @property {vec2} st 2D texture coordinates.
  1197. * @property {vec3} str 3D texture coordinates.
  1198. * @property {vec3} normalEC Unperturbed surface normal in eye coordinates.
  1199. * @property {mat3} tangentToEyeMatrix Matrix for converting a tangent space normal to eye space.
  1200. * @property {vec3} positionToEyeEC Vector from the fragment to the eye in eye coordinates. The magnitude is the distance in meters from the fragment to the eye.
  1201. * @property {float} height The height of the terrain in meters above or below the WGS84 ellipsoid. Only available for globe materials.
  1202. * @property {float} slope The slope of the terrain in radians. 0 is flat; pi/2 is vertical. Only available for globe materials.
  1203. * @property {float} aspect The aspect of the terrain in radians. 0 is East, pi/2 is North, pi is West, 3pi/2 is South. Only available for globe materials.
  1204. */
  1205. struct czm_materialInput
  1206. {
  1207. float s;
  1208. vec2 st;
  1209. vec3 str;
  1210. vec3 normalEC;
  1211. mat3 tangentToEyeMatrix;
  1212. vec3 positionToEyeEC;
  1213. float height;
  1214. float slope;
  1215. float aspect;
  1216. };
  1217. `;var nvt=T(S(),1),UR=`/**
  1218. * Struct for representing a material for a {@link Model}. The model
  1219. * rendering pipeline will pass this struct between material, custom shaders,
  1220. * and lighting stages. This is not to be confused with {@link czm_material}
  1221. * which is used by the older Fabric materials system, although they are similar.
  1222. * <p>
  1223. * All color values (diffuse, specular, emissive) are in linear color space.
  1224. * </p>
  1225. *
  1226. * @name czm_modelMaterial
  1227. * @glslStruct
  1228. *
  1229. * @property {vec3} diffuse Incoming light that scatters evenly in all directions.
  1230. * @property {float} alpha Alpha of this material. 0.0 is completely transparent; 1.0 is completely opaque.
  1231. * @property {vec3} specular Color of reflected light at normal incidence in PBR materials. This is sometimes referred to as f0 in the literature.
  1232. * @property {float} roughness A number from 0.0 to 1.0 representing how rough the surface is. Values near 0.0 produce glossy surfaces, while values near 1.0 produce rough surfaces.
  1233. * @property {vec3} normalEC Surface's normal in eye coordinates. It is used for effects such as normal mapping. The default is the surface's unmodified normal.
  1234. * @property {float} occlusion Ambient occlusion recieved at this point on the material. 1.0 means fully lit, 0.0 means fully occluded.
  1235. * @property {vec3} emissive Light emitted by the material equally in all directions. The default is vec3(0.0), which emits no light.
  1236. */
  1237. struct czm_modelMaterial {
  1238. vec3 diffuse;
  1239. float alpha;
  1240. vec3 specular;
  1241. float roughness;
  1242. vec3 normalEC;
  1243. float occlusion;
  1244. vec3 emissive;
  1245. };
  1246. `;var ovt=T(S(),1),kR=`/**
  1247. * Struct for representing the output of a custom vertex shader.
  1248. *
  1249. * @name czm_modelVertexOutput
  1250. * @glslStruct
  1251. *
  1252. * @see {@link CustomShader}
  1253. * @see {@link Model}
  1254. *
  1255. * @property {vec3} positionMC The position of the vertex in model coordinates
  1256. * @property {float} pointSize A custom value for gl_PointSize. This is only used for point primitives.
  1257. */
  1258. struct czm_modelVertexOutput {
  1259. vec3 positionMC;
  1260. float pointSize;
  1261. };
  1262. `;var svt=T(S(),1),DR=`/**
  1263. * Parameters for {@link czm_pbrLighting}
  1264. *
  1265. * @name czm_material
  1266. * @glslStruct
  1267. *
  1268. * @property {vec3} diffuseColor the diffuse color of the material for the lambert term of the rendering equation
  1269. * @property {float} roughness a value from 0.0 to 1.0 that indicates how rough the surface of the material is.
  1270. * @property {vec3} f0 The reflectance of the material at normal incidence
  1271. */
  1272. struct czm_pbrParameters
  1273. {
  1274. vec3 diffuseColor;
  1275. float roughness;
  1276. vec3 f0;
  1277. };
  1278. `;var cvt=T(S(),1),BR=`/**
  1279. * DOC_TBA
  1280. *
  1281. * @name czm_ray
  1282. * @glslStruct
  1283. */
  1284. struct czm_ray
  1285. {
  1286. vec3 origin;
  1287. vec3 direction;
  1288. };
  1289. `;var dvt=T(S(),1),YR=`/**
  1290. * DOC_TBA
  1291. *
  1292. * @name czm_raySegment
  1293. * @glslStruct
  1294. */
  1295. struct czm_raySegment
  1296. {
  1297. float start;
  1298. float stop;
  1299. };
  1300. /**
  1301. * DOC_TBA
  1302. *
  1303. * @name czm_emptyRaySegment
  1304. * @glslConstant
  1305. */
  1306. const czm_raySegment czm_emptyRaySegment = czm_raySegment(-czm_infinity, -czm_infinity);
  1307. /**
  1308. * DOC_TBA
  1309. *
  1310. * @name czm_fullRaySegment
  1311. * @glslConstant
  1312. */
  1313. const czm_raySegment czm_fullRaySegment = czm_raySegment(0.0, czm_infinity);
  1314. `;var mvt=T(S(),1),OR=`struct czm_shadowParameters
  1315. {
  1316. #ifdef USE_CUBE_MAP_SHADOW
  1317. vec3 texCoords;
  1318. #else
  1319. vec2 texCoords;
  1320. #endif
  1321. float depthBias;
  1322. float depth;
  1323. float nDotL;
  1324. vec2 texelStepSize;
  1325. float normalShadingSmooth;
  1326. float darkness;
  1327. };
  1328. `;var fvt=T(S(),1),KR=`/**
  1329. * Converts an HSB color (hue, saturation, brightness) to RGB
  1330. * HSB <-> RGB conversion with minimal branching: {@link http://lolengine.net/blog/2013/07/27/rgb-to-hsv-in-glsl}
  1331. *
  1332. * @name czm_HSBToRGB
  1333. * @glslFunction
  1334. *
  1335. * @param {vec3} hsb The color in HSB.
  1336. *
  1337. * @returns {vec3} The color in RGB.
  1338. *
  1339. * @example
  1340. * vec3 hsb = czm_RGBToHSB(rgb);
  1341. * hsb.z *= 0.1;
  1342. * rgb = czm_HSBToRGB(hsb);
  1343. */
  1344. const vec4 K_HSB2RGB = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
  1345. vec3 czm_HSBToRGB(vec3 hsb)
  1346. {
  1347. vec3 p = abs(fract(hsb.xxx + K_HSB2RGB.xyz) * 6.0 - K_HSB2RGB.www);
  1348. return hsb.z * mix(K_HSB2RGB.xxx, clamp(p - K_HSB2RGB.xxx, 0.0, 1.0), hsb.y);
  1349. }
  1350. `;var bvt=T(S(),1),HR=`/**
  1351. * Converts an HSL color (hue, saturation, lightness) to RGB
  1352. * HSL <-> RGB conversion: {@link http://www.chilliant.com/rgb2hsv.html}
  1353. *
  1354. * @name czm_HSLToRGB
  1355. * @glslFunction
  1356. *
  1357. * @param {vec3} rgb The color in HSL.
  1358. *
  1359. * @returns {vec3} The color in RGB.
  1360. *
  1361. * @example
  1362. * vec3 hsl = czm_RGBToHSL(rgb);
  1363. * hsl.z *= 0.1;
  1364. * rgb = czm_HSLToRGB(hsl);
  1365. */
  1366. vec3 hueToRGB(float hue)
  1367. {
  1368. float r = abs(hue * 6.0 - 3.0) - 1.0;
  1369. float g = 2.0 - abs(hue * 6.0 - 2.0);
  1370. float b = 2.0 - abs(hue * 6.0 - 4.0);
  1371. return clamp(vec3(r, g, b), 0.0, 1.0);
  1372. }
  1373. vec3 czm_HSLToRGB(vec3 hsl)
  1374. {
  1375. vec3 rgb = hueToRGB(hsl.x);
  1376. float c = (1.0 - abs(2.0 * hsl.z - 1.0)) * hsl.y;
  1377. return (rgb - 0.5) * c + hsl.z;
  1378. }
  1379. `;var gvt=T(S(),1),zR=`/**
  1380. * Converts an RGB color to HSB (hue, saturation, brightness)
  1381. * HSB <-> RGB conversion with minimal branching: {@link http://lolengine.net/blog/2013/07/27/rgb-to-hsv-in-glsl}
  1382. *
  1383. * @name czm_RGBToHSB
  1384. * @glslFunction
  1385. *
  1386. * @param {vec3} rgb The color in RGB.
  1387. *
  1388. * @returns {vec3} The color in HSB.
  1389. *
  1390. * @example
  1391. * vec3 hsb = czm_RGBToHSB(rgb);
  1392. * hsb.z *= 0.1;
  1393. * rgb = czm_HSBToRGB(hsb);
  1394. */
  1395. const vec4 K_RGB2HSB = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
  1396. vec3 czm_RGBToHSB(vec3 rgb)
  1397. {
  1398. vec4 p = mix(vec4(rgb.bg, K_RGB2HSB.wz), vec4(rgb.gb, K_RGB2HSB.xy), step(rgb.b, rgb.g));
  1399. vec4 q = mix(vec4(p.xyw, rgb.r), vec4(rgb.r, p.yzx), step(p.x, rgb.r));
  1400. float d = q.x - min(q.w, q.y);
  1401. return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + czm_epsilon7)), d / (q.x + czm_epsilon7), q.x);
  1402. }
  1403. `;var _vt=T(S(),1),JR=`/**
  1404. * Converts an RGB color to HSL (hue, saturation, lightness)
  1405. * HSL <-> RGB conversion: {@link http://www.chilliant.com/rgb2hsv.html}
  1406. *
  1407. * @name czm_RGBToHSL
  1408. * @glslFunction
  1409. *
  1410. * @param {vec3} rgb The color in RGB.
  1411. *
  1412. * @returns {vec3} The color in HSL.
  1413. *
  1414. * @example
  1415. * vec3 hsl = czm_RGBToHSL(rgb);
  1416. * hsl.z *= 0.1;
  1417. * rgb = czm_HSLToRGB(hsl);
  1418. */
  1419. vec3 RGBtoHCV(vec3 rgb)
  1420. {
  1421. // Based on work by Sam Hocevar and Emil Persson
  1422. vec4 p = (rgb.g < rgb.b) ? vec4(rgb.bg, -1.0, 2.0 / 3.0) : vec4(rgb.gb, 0.0, -1.0 / 3.0);
  1423. vec4 q = (rgb.r < p.x) ? vec4(p.xyw, rgb.r) : vec4(rgb.r, p.yzx);
  1424. float c = q.x - min(q.w, q.y);
  1425. float h = abs((q.w - q.y) / (6.0 * c + czm_epsilon7) + q.z);
  1426. return vec3(h, c, q.x);
  1427. }
  1428. vec3 czm_RGBToHSL(vec3 rgb)
  1429. {
  1430. vec3 hcv = RGBtoHCV(rgb);
  1431. float l = hcv.z - hcv.y * 0.5;
  1432. float s = hcv.y / (1.0 - abs(l * 2.0 - 1.0) + czm_epsilon7);
  1433. return vec3(hcv.x, s, l);
  1434. }
  1435. `;var Svt=T(S(),1),QR=`/**
  1436. * Converts an RGB color to CIE Yxy.
  1437. * <p>The conversion is described in
  1438. * {@link http://content.gpwiki.org/index.php/D3DBook:High-Dynamic_Range_Rendering#Luminance_Transform|Luminance Transform}
  1439. * </p>
  1440. *
  1441. * @name czm_RGBToXYZ
  1442. * @glslFunction
  1443. *
  1444. * @param {vec3} rgb The color in RGB.
  1445. *
  1446. * @returns {vec3} The color in CIE Yxy.
  1447. *
  1448. * @example
  1449. * vec3 xyz = czm_RGBToXYZ(rgb);
  1450. * xyz.x = max(xyz.x - luminanceThreshold, 0.0);
  1451. * rgb = czm_XYZToRGB(xyz);
  1452. */
  1453. vec3 czm_RGBToXYZ(vec3 rgb)
  1454. {
  1455. const mat3 RGB2XYZ = mat3(0.4124, 0.2126, 0.0193,
  1456. 0.3576, 0.7152, 0.1192,
  1457. 0.1805, 0.0722, 0.9505);
  1458. vec3 xyz = RGB2XYZ * rgb;
  1459. vec3 Yxy;
  1460. Yxy.r = xyz.g;
  1461. float temp = dot(vec3(1.0), xyz);
  1462. Yxy.gb = xyz.rg / temp;
  1463. return Yxy;
  1464. }
  1465. `;var Vvt=T(S(),1),jR=`/**
  1466. * Converts a CIE Yxy color to RGB.
  1467. * <p>The conversion is described in
  1468. * {@link http://content.gpwiki.org/index.php/D3DBook:High-Dynamic_Range_Rendering#Luminance_Transform|Luminance Transform}
  1469. * </p>
  1470. *
  1471. * @name czm_XYZToRGB
  1472. * @glslFunction
  1473. *
  1474. * @param {vec3} Yxy The color in CIE Yxy.
  1475. *
  1476. * @returns {vec3} The color in RGB.
  1477. *
  1478. * @example
  1479. * vec3 xyz = czm_RGBToXYZ(rgb);
  1480. * xyz.x = max(xyz.x - luminanceThreshold, 0.0);
  1481. * rgb = czm_XYZToRGB(xyz);
  1482. */
  1483. vec3 czm_XYZToRGB(vec3 Yxy)
  1484. {
  1485. const mat3 XYZ2RGB = mat3( 3.2405, -0.9693, 0.0556,
  1486. -1.5371, 1.8760, -0.2040,
  1487. -0.4985, 0.0416, 1.0572);
  1488. vec3 xyz;
  1489. xyz.r = Yxy.r * Yxy.g / Yxy.b;
  1490. xyz.g = Yxy.r;
  1491. xyz.b = Yxy.r * (1.0 - Yxy.g - Yxy.b) / Yxy.b;
  1492. return XYZ2RGB * xyz;
  1493. }
  1494. `;var Rvt=T(S(),1),qR=`// See:
  1495. // https://knarkowicz.wordpress.com/2016/01/06/aces-filmic-tone-mapping-curve/
  1496. vec3 czm_acesTonemapping(vec3 color) {
  1497. float g = 0.985;
  1498. float a = 0.065;
  1499. float b = 0.0001;
  1500. float c = 0.433;
  1501. float d = 0.238;
  1502. color = (color * (color + a) - b) / (color * (g * color + c) + d);
  1503. color = clamp(color, 0.0, 1.0);
  1504. return color;
  1505. }
  1506. `;var Gvt=T(S(),1),$R=`/**
  1507. * @private
  1508. */
  1509. float czm_alphaWeight(float a)
  1510. {
  1511. float z = (gl_FragCoord.z - czm_viewportTransformation[3][2]) / czm_viewportTransformation[2][2];
  1512. // See Weighted Blended Order-Independent Transparency for examples of different weighting functions:
  1513. // http://jcgt.org/published/0002/02/09/
  1514. return pow(a + 0.01, 4.0) + max(1e-2, min(3.0 * 1e3, 0.003 / (1e-5 + pow(abs(z) / 200.0, 4.0))));
  1515. }
  1516. `;var Xvt=T(S(),1),eZ=`/**
  1517. * Procedural anti-aliasing by blurring two colors that meet at a sharp edge.
  1518. *
  1519. * @name czm_antialias
  1520. * @glslFunction
  1521. *
  1522. * @param {vec4} color1 The color on one side of the edge.
  1523. * @param {vec4} color2 The color on the other side of the edge.
  1524. * @param {vec4} currentcolor The current color, either <code>color1</code> or <code>color2</code>.
  1525. * @param {float} dist The distance to the edge in texture coordinates.
  1526. * @param {float} [fuzzFactor=0.1] Controls the blurriness between the two colors.
  1527. * @returns {vec4} The anti-aliased color.
  1528. *
  1529. * @example
  1530. * // GLSL declarations
  1531. * vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist, float fuzzFactor);
  1532. * vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist);
  1533. *
  1534. * // get the color for a material that has a sharp edge at the line y = 0.5 in texture space
  1535. * float dist = abs(textureCoordinates.t - 0.5);
  1536. * vec4 currentColor = mix(bottomColor, topColor, step(0.5, textureCoordinates.t));
  1537. * vec4 color = czm_antialias(bottomColor, topColor, currentColor, dist, 0.1);
  1538. */
  1539. vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist, float fuzzFactor)
  1540. {
  1541. float val1 = clamp(dist / fuzzFactor, 0.0, 1.0);
  1542. float val2 = clamp((dist - 0.5) / fuzzFactor, 0.0, 1.0);
  1543. val1 = val1 * (1.0 - val2);
  1544. val1 = val1 * val1 * (3.0 - (2.0 * val1));
  1545. val1 = pow(val1, 0.5); //makes the transition nicer
  1546. vec4 midColor = (color1 + color2) * 0.5;
  1547. return mix(midColor, currentColor, val1);
  1548. }
  1549. vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist)
  1550. {
  1551. return czm_antialias(color1, color2, currentColor, dist, 0.1);
  1552. }
  1553. `;var Wvt=T(S(),1),tZ=`/**
  1554. * Approximately computes spherical coordinates given a normal.
  1555. * Uses approximate inverse trigonometry for speed and consistency,
  1556. * since inverse trigonometry can differ from vendor-to-vendor and when compared with the CPU.
  1557. *
  1558. * @name czm_approximateSphericalCoordinates
  1559. * @glslFunction
  1560. *
  1561. * @param {vec3} normal arbitrary-length normal.
  1562. *
  1563. * @returns {vec2} Approximate latitude and longitude spherical coordinates.
  1564. */
  1565. vec2 czm_approximateSphericalCoordinates(vec3 normal) {
  1566. // Project into plane with vertical for latitude
  1567. float latitudeApproximation = czm_fastApproximateAtan(sqrt(normal.x * normal.x + normal.y * normal.y), normal.z);
  1568. float longitudeApproximation = czm_fastApproximateAtan(normal.x, normal.y);
  1569. return vec2(latitudeApproximation, longitudeApproximation);
  1570. }
  1571. `;var vvt=T(S(),1),nZ=`/**
  1572. * Determines if the fragment is back facing
  1573. *
  1574. * @name czm_backFacing
  1575. * @glslFunction
  1576. *
  1577. * @returns {bool} <code>true</code> if the fragment is back facing; otherwise, <code>false</code>.
  1578. */
  1579. bool czm_backFacing()
  1580. {
  1581. // !gl_FrontFacing doesn't work as expected on Mac/Intel so use the more verbose form instead. See https://github.com/CesiumGS/cesium/pull/8494.
  1582. return gl_FrontFacing == false;
  1583. }
  1584. `;var Fvt=T(S(),1),iZ=`/**
  1585. * Branchless ternary operator to be used when it's inexpensive to explicitly
  1586. * evaluate both possibilities for a float expression.
  1587. *
  1588. * @name czm_branchFreeTernary
  1589. * @glslFunction
  1590. *
  1591. * @param {bool} comparison A comparison statement
  1592. * @param {float} a Value to return if the comparison is true.
  1593. * @param {float} b Value to return if the comparison is false.
  1594. *
  1595. * @returns {float} equivalent of comparison ? a : b
  1596. */
  1597. float czm_branchFreeTernary(bool comparison, float a, float b) {
  1598. float useA = float(comparison);
  1599. return a * useA + b * (1.0 - useA);
  1600. }
  1601. /**
  1602. * Branchless ternary operator to be used when it's inexpensive to explicitly
  1603. * evaluate both possibilities for a vec2 expression.
  1604. *
  1605. * @name czm_branchFreeTernary
  1606. * @glslFunction
  1607. *
  1608. * @param {bool} comparison A comparison statement
  1609. * @param {vec2} a Value to return if the comparison is true.
  1610. * @param {vec2} b Value to return if the comparison is false.
  1611. *
  1612. * @returns {vec2} equivalent of comparison ? a : b
  1613. */
  1614. vec2 czm_branchFreeTernary(bool comparison, vec2 a, vec2 b) {
  1615. float useA = float(comparison);
  1616. return a * useA + b * (1.0 - useA);
  1617. }
  1618. /**
  1619. * Branchless ternary operator to be used when it's inexpensive to explicitly
  1620. * evaluate both possibilities for a vec3 expression.
  1621. *
  1622. * @name czm_branchFreeTernary
  1623. * @glslFunction
  1624. *
  1625. * @param {bool} comparison A comparison statement
  1626. * @param {vec3} a Value to return if the comparison is true.
  1627. * @param {vec3} b Value to return if the comparison is false.
  1628. *
  1629. * @returns {vec3} equivalent of comparison ? a : b
  1630. */
  1631. vec3 czm_branchFreeTernary(bool comparison, vec3 a, vec3 b) {
  1632. float useA = float(comparison);
  1633. return a * useA + b * (1.0 - useA);
  1634. }
  1635. /**
  1636. * Branchless ternary operator to be used when it's inexpensive to explicitly
  1637. * evaluate both possibilities for a vec4 expression.
  1638. *
  1639. * @name czm_branchFreeTernary
  1640. * @glslFunction
  1641. *
  1642. * @param {bool} comparison A comparison statement
  1643. * @param {vec3} a Value to return if the comparison is true.
  1644. * @param {vec3} b Value to return if the comparison is false.
  1645. *
  1646. * @returns {vec3} equivalent of comparison ? a : b
  1647. */
  1648. vec4 czm_branchFreeTernary(bool comparison, vec4 a, vec4 b) {
  1649. float useA = float(comparison);
  1650. return a * useA + b * (1.0 - useA);
  1651. }
  1652. `;var Mvt=T(S(),1),oZ=`
  1653. vec4 czm_cascadeColor(vec4 weights)
  1654. {
  1655. return vec4(1.0, 0.0, 0.0, 1.0) * weights.x +
  1656. vec4(0.0, 1.0, 0.0, 1.0) * weights.y +
  1657. vec4(0.0, 0.0, 1.0, 1.0) * weights.z +
  1658. vec4(1.0, 0.0, 1.0, 1.0) * weights.w;
  1659. }
  1660. `;var Uvt=T(S(),1),rZ=`
  1661. uniform vec4 shadowMap_cascadeDistances;
  1662. float czm_cascadeDistance(vec4 weights)
  1663. {
  1664. return dot(shadowMap_cascadeDistances, weights);
  1665. }
  1666. `;var Dvt=T(S(),1),sZ=`
  1667. uniform mat4 shadowMap_cascadeMatrices[4];
  1668. mat4 czm_cascadeMatrix(vec4 weights)
  1669. {
  1670. return shadowMap_cascadeMatrices[0] * weights.x +
  1671. shadowMap_cascadeMatrices[1] * weights.y +
  1672. shadowMap_cascadeMatrices[2] * weights.z +
  1673. shadowMap_cascadeMatrices[3] * weights.w;
  1674. }
  1675. `;var Yvt=T(S(),1),aZ=`
  1676. uniform vec4 shadowMap_cascadeSplits[2];
  1677. vec4 czm_cascadeWeights(float depthEye)
  1678. {
  1679. // One component is set to 1.0 and all others set to 0.0.
  1680. vec4 near = step(shadowMap_cascadeSplits[0], vec4(depthEye));
  1681. vec4 far = step(depthEye, shadowMap_cascadeSplits[1]);
  1682. return near * far;
  1683. }
  1684. `;var Kvt=T(S(),1),cZ=`/**
  1685. * DOC_TBA
  1686. *
  1687. * @name czm_columbusViewMorph
  1688. * @glslFunction
  1689. */
  1690. vec4 czm_columbusViewMorph(vec4 position2D, vec4 position3D, float time)
  1691. {
  1692. // Just linear for now.
  1693. vec3 p = mix(position2D.xyz, position3D.xyz, time);
  1694. return vec4(p, 1.0);
  1695. }
  1696. `;var zvt=T(S(),1),lZ=`/**
  1697. * Returns a position in model coordinates relative to eye taking into
  1698. * account the current scene mode: 3D, 2D, or Columbus view.
  1699. * <p>
  1700. * This uses standard position attributes, <code>position3DHigh</code>,
  1701. * <code>position3DLow</code>, <code>position2DHigh</code>, and <code>position2DLow</code>,
  1702. * and should be used when writing a vertex shader for an {@link Appearance}.
  1703. * </p>
  1704. *
  1705. * @name czm_computePosition
  1706. * @glslFunction
  1707. *
  1708. * @returns {vec4} The position relative to eye.
  1709. *
  1710. * @example
  1711. * vec4 p = czm_computePosition();
  1712. * v_positionEC = (czm_modelViewRelativeToEye * p).xyz;
  1713. * gl_Position = czm_modelViewProjectionRelativeToEye * p;
  1714. *
  1715. * @see czm_translateRelativeToEye
  1716. */
  1717. vec4 czm_computePosition();
  1718. `;var Qvt=T(S(),1),dZ=`/**
  1719. * @private
  1720. */
  1721. vec2 cordic(float angle)
  1722. {
  1723. // Scale the vector by the appropriate factor for the 24 iterations to follow.
  1724. vec2 vector = vec2(6.0725293500888267e-1, 0.0);
  1725. // Iteration 1
  1726. float sense = (angle < 0.0) ? -1.0 : 1.0;
  1727. // float factor = sense * 1.0; // 2^-0
  1728. mat2 rotation = mat2(1.0, sense, -sense, 1.0);
  1729. vector = rotation * vector;
  1730. angle -= sense * 7.8539816339744828e-1; // atan(2^-0)
  1731. // Iteration 2
  1732. sense = (angle < 0.0) ? -1.0 : 1.0;
  1733. float factor = sense * 5.0e-1; // 2^-1
  1734. rotation[0][1] = factor;
  1735. rotation[1][0] = -factor;
  1736. vector = rotation * vector;
  1737. angle -= sense * 4.6364760900080609e-1; // atan(2^-1)
  1738. // Iteration 3
  1739. sense = (angle < 0.0) ? -1.0 : 1.0;
  1740. factor = sense * 2.5e-1; // 2^-2
  1741. rotation[0][1] = factor;
  1742. rotation[1][0] = -factor;
  1743. vector = rotation * vector;
  1744. angle -= sense * 2.4497866312686414e-1; // atan(2^-2)
  1745. // Iteration 4
  1746. sense = (angle < 0.0) ? -1.0 : 1.0;
  1747. factor = sense * 1.25e-1; // 2^-3
  1748. rotation[0][1] = factor;
  1749. rotation[1][0] = -factor;
  1750. vector = rotation * vector;
  1751. angle -= sense * 1.2435499454676144e-1; // atan(2^-3)
  1752. // Iteration 5
  1753. sense = (angle < 0.0) ? -1.0 : 1.0;
  1754. factor = sense * 6.25e-2; // 2^-4
  1755. rotation[0][1] = factor;
  1756. rotation[1][0] = -factor;
  1757. vector = rotation * vector;
  1758. angle -= sense * 6.2418809995957350e-2; // atan(2^-4)
  1759. // Iteration 6
  1760. sense = (angle < 0.0) ? -1.0 : 1.0;
  1761. factor = sense * 3.125e-2; // 2^-5
  1762. rotation[0][1] = factor;
  1763. rotation[1][0] = -factor;
  1764. vector = rotation * vector;
  1765. angle -= sense * 3.1239833430268277e-2; // atan(2^-5)
  1766. // Iteration 7
  1767. sense = (angle < 0.0) ? -1.0 : 1.0;
  1768. factor = sense * 1.5625e-2; // 2^-6
  1769. rotation[0][1] = factor;
  1770. rotation[1][0] = -factor;
  1771. vector = rotation * vector;
  1772. angle -= sense * 1.5623728620476831e-2; // atan(2^-6)
  1773. // Iteration 8
  1774. sense = (angle < 0.0) ? -1.0 : 1.0;
  1775. factor = sense * 7.8125e-3; // 2^-7
  1776. rotation[0][1] = factor;
  1777. rotation[1][0] = -factor;
  1778. vector = rotation * vector;
  1779. angle -= sense * 7.8123410601011111e-3; // atan(2^-7)
  1780. // Iteration 9
  1781. sense = (angle < 0.0) ? -1.0 : 1.0;
  1782. factor = sense * 3.90625e-3; // 2^-8
  1783. rotation[0][1] = factor;
  1784. rotation[1][0] = -factor;
  1785. vector = rotation * vector;
  1786. angle -= sense * 3.9062301319669718e-3; // atan(2^-8)
  1787. // Iteration 10
  1788. sense = (angle < 0.0) ? -1.0 : 1.0;
  1789. factor = sense * 1.953125e-3; // 2^-9
  1790. rotation[0][1] = factor;
  1791. rotation[1][0] = -factor;
  1792. vector = rotation * vector;
  1793. angle -= sense * 1.9531225164788188e-3; // atan(2^-9)
  1794. // Iteration 11
  1795. sense = (angle < 0.0) ? -1.0 : 1.0;
  1796. factor = sense * 9.765625e-4; // 2^-10
  1797. rotation[0][1] = factor;
  1798. rotation[1][0] = -factor;
  1799. vector = rotation * vector;
  1800. angle -= sense * 9.7656218955931946e-4; // atan(2^-10)
  1801. // Iteration 12
  1802. sense = (angle < 0.0) ? -1.0 : 1.0;
  1803. factor = sense * 4.8828125e-4; // 2^-11
  1804. rotation[0][1] = factor;
  1805. rotation[1][0] = -factor;
  1806. vector = rotation * vector;
  1807. angle -= sense * 4.8828121119489829e-4; // atan(2^-11)
  1808. // Iteration 13
  1809. sense = (angle < 0.0) ? -1.0 : 1.0;
  1810. factor = sense * 2.44140625e-4; // 2^-12
  1811. rotation[0][1] = factor;
  1812. rotation[1][0] = -factor;
  1813. vector = rotation * vector;
  1814. angle -= sense * 2.4414062014936177e-4; // atan(2^-12)
  1815. // Iteration 14
  1816. sense = (angle < 0.0) ? -1.0 : 1.0;
  1817. factor = sense * 1.220703125e-4; // 2^-13
  1818. rotation[0][1] = factor;
  1819. rotation[1][0] = -factor;
  1820. vector = rotation * vector;
  1821. angle -= sense * 1.2207031189367021e-4; // atan(2^-13)
  1822. // Iteration 15
  1823. sense = (angle < 0.0) ? -1.0 : 1.0;
  1824. factor = sense * 6.103515625e-5; // 2^-14
  1825. rotation[0][1] = factor;
  1826. rotation[1][0] = -factor;
  1827. vector = rotation * vector;
  1828. angle -= sense * 6.1035156174208773e-5; // atan(2^-14)
  1829. // Iteration 16
  1830. sense = (angle < 0.0) ? -1.0 : 1.0;
  1831. factor = sense * 3.0517578125e-5; // 2^-15
  1832. rotation[0][1] = factor;
  1833. rotation[1][0] = -factor;
  1834. vector = rotation * vector;
  1835. angle -= sense * 3.0517578115526096e-5; // atan(2^-15)
  1836. // Iteration 17
  1837. sense = (angle < 0.0) ? -1.0 : 1.0;
  1838. factor = sense * 1.52587890625e-5; // 2^-16
  1839. rotation[0][1] = factor;
  1840. rotation[1][0] = -factor;
  1841. vector = rotation * vector;
  1842. angle -= sense * 1.5258789061315762e-5; // atan(2^-16)
  1843. // Iteration 18
  1844. sense = (angle < 0.0) ? -1.0 : 1.0;
  1845. factor = sense * 7.62939453125e-6; // 2^-17
  1846. rotation[0][1] = factor;
  1847. rotation[1][0] = -factor;
  1848. vector = rotation * vector;
  1849. angle -= sense * 7.6293945311019700e-6; // atan(2^-17)
  1850. // Iteration 19
  1851. sense = (angle < 0.0) ? -1.0 : 1.0;
  1852. factor = sense * 3.814697265625e-6; // 2^-18
  1853. rotation[0][1] = factor;
  1854. rotation[1][0] = -factor;
  1855. vector = rotation * vector;
  1856. angle -= sense * 3.8146972656064961e-6; // atan(2^-18)
  1857. // Iteration 20
  1858. sense = (angle < 0.0) ? -1.0 : 1.0;
  1859. factor = sense * 1.9073486328125e-6; // 2^-19
  1860. rotation[0][1] = factor;
  1861. rotation[1][0] = -factor;
  1862. vector = rotation * vector;
  1863. angle -= sense * 1.9073486328101870e-6; // atan(2^-19)
  1864. // Iteration 21
  1865. sense = (angle < 0.0) ? -1.0 : 1.0;
  1866. factor = sense * 9.5367431640625e-7; // 2^-20
  1867. rotation[0][1] = factor;
  1868. rotation[1][0] = -factor;
  1869. vector = rotation * vector;
  1870. angle -= sense * 9.5367431640596084e-7; // atan(2^-20)
  1871. // Iteration 22
  1872. sense = (angle < 0.0) ? -1.0 : 1.0;
  1873. factor = sense * 4.76837158203125e-7; // 2^-21
  1874. rotation[0][1] = factor;
  1875. rotation[1][0] = -factor;
  1876. vector = rotation * vector;
  1877. angle -= sense * 4.7683715820308884e-7; // atan(2^-21)
  1878. // Iteration 23
  1879. sense = (angle < 0.0) ? -1.0 : 1.0;
  1880. factor = sense * 2.384185791015625e-7; // 2^-22
  1881. rotation[0][1] = factor;
  1882. rotation[1][0] = -factor;
  1883. vector = rotation * vector;
  1884. angle -= sense * 2.3841857910155797e-7; // atan(2^-22)
  1885. // Iteration 24
  1886. sense = (angle < 0.0) ? -1.0 : 1.0;
  1887. factor = sense * 1.1920928955078125e-7; // 2^-23
  1888. rotation[0][1] = factor;
  1889. rotation[1][0] = -factor;
  1890. vector = rotation * vector;
  1891. // angle -= sense * 1.1920928955078068e-7; // atan(2^-23)
  1892. return vector;
  1893. }
  1894. /**
  1895. * Computes the cosine and sine of the provided angle using the CORDIC algorithm.
  1896. *
  1897. * @name czm_cosineAndSine
  1898. * @glslFunction
  1899. *
  1900. * @param {float} angle The angle in radians.
  1901. *
  1902. * @returns {vec2} The resulting cosine of the angle (as the x coordinate) and sine of the angle (as the y coordinate).
  1903. *
  1904. * @example
  1905. * vec2 v = czm_cosineAndSine(czm_piOverSix);
  1906. * float cosine = v.x;
  1907. * float sine = v.y;
  1908. */
  1909. vec2 czm_cosineAndSine(float angle)
  1910. {
  1911. if (angle < -czm_piOverTwo || angle > czm_piOverTwo)
  1912. {
  1913. if (angle < 0.0)
  1914. {
  1915. return -cordic(angle + czm_pi);
  1916. }
  1917. else
  1918. {
  1919. return -cordic(angle - czm_pi);
  1920. }
  1921. }
  1922. else
  1923. {
  1924. return cordic(angle);
  1925. }
  1926. }
  1927. `;var qvt=T(S(),1),uZ=`/**
  1928. * Decompresses texture coordinates that were packed into a single float.
  1929. *
  1930. * @name czm_decompressTextureCoordinates
  1931. * @glslFunction
  1932. *
  1933. * @param {float} encoded The compressed texture coordinates.
  1934. * @returns {vec2} The decompressed texture coordinates.
  1935. */
  1936. vec2 czm_decompressTextureCoordinates(float encoded)
  1937. {
  1938. float temp = encoded / 4096.0;
  1939. float xZeroTo4095 = floor(temp);
  1940. float stx = xZeroTo4095 / 4095.0;
  1941. float sty = (encoded - xZeroTo4095 * 4096.0) / 4095.0;
  1942. return vec2(stx, sty);
  1943. }
  1944. `;var ewt=T(S(),1),mZ=`/**
  1945. * Get default parameters for physically based rendering. These defaults
  1946. * describe a rough dielectric (non-metal) surface (e.g. rough plastic).
  1947. *
  1948. * @return {czm_pbrParameters} Default parameters for {@link czm_pbrLighting}
  1949. */
  1950. czm_pbrParameters czm_defaultPbrMaterial()
  1951. {
  1952. czm_pbrParameters results;
  1953. results.diffuseColor = vec3(1.0);
  1954. results.roughness = 1.0;
  1955. const vec3 REFLECTANCE_DIELECTRIC = vec3(0.04);
  1956. results.f0 = REFLECTANCE_DIELECTRIC;
  1957. return results;
  1958. }
  1959. `;var nwt=T(S(),1),hZ=`// emulated noperspective
  1960. #if (__VERSION__ == 300 || defined(GL_EXT_frag_depth)) && !defined(LOG_DEPTH)
  1961. out float v_WindowZ;
  1962. #endif
  1963. /**
  1964. * Emulates GL_DEPTH_CLAMP, which is not available in WebGL 1 or 2.
  1965. * GL_DEPTH_CLAMP clamps geometry that is outside the near and far planes,
  1966. * capping the shadow volume. More information here:
  1967. * https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_depth_clamp.txt.
  1968. *
  1969. * When GL_EXT_frag_depth is available we emulate GL_DEPTH_CLAMP by ensuring
  1970. * no geometry gets clipped by setting the clip space z value to 0.0 and then
  1971. * sending the unaltered screen space z value (using emulated noperspective
  1972. * interpolation) to the frag shader where it is clamped to [0,1] and then
  1973. * written with gl_FragDepth (see czm_writeDepthClamp). This technique is based on:
  1974. * https://stackoverflow.com/questions/5960757/how-to-emulate-gl-depth-clamp-nv.
  1975. *
  1976. * When GL_EXT_frag_depth is not available, which is the case on some mobile
  1977. * devices, we must attempt to fix this only in the vertex shader.
  1978. * The approach is to clamp the z value to the far plane, which closes the
  1979. * shadow volume but also distorts the geometry, so there can still be artifacts
  1980. * on frustum seams.
  1981. *
  1982. * @name czm_depthClamp
  1983. * @glslFunction
  1984. *
  1985. * @param {vec4} coords The vertex in clip coordinates.
  1986. * @returns {vec4} The modified vertex.
  1987. *
  1988. * @example
  1989. * gl_Position = czm_depthClamp(czm_modelViewProjection * vec4(position, 1.0));
  1990. *
  1991. * @see czm_writeDepthClamp
  1992. */
  1993. vec4 czm_depthClamp(vec4 coords)
  1994. {
  1995. #ifndef LOG_DEPTH
  1996. #if __VERSION__ == 300 || defined(GL_EXT_frag_depth)
  1997. v_WindowZ = (0.5 * (coords.z / coords.w) + 0.5) * coords.w;
  1998. coords.z = 0.0;
  1999. #else
  2000. coords.z = min(coords.z, coords.w);
  2001. #endif
  2002. #endif
  2003. return coords;
  2004. }
  2005. `;var owt=T(S(),1),fZ=`/**
  2006. * Computes a 3x3 rotation matrix that transforms vectors from an ellipsoid's east-north-up coordinate system
  2007. * to eye coordinates. In east-north-up coordinates, x points east, y points north, and z points along the
  2008. * surface normal. East-north-up can be used as an ellipsoid's tangent space for operations such as bump mapping.
  2009. * <br /><br />
  2010. * The ellipsoid is assumed to be centered at the model coordinate's origin.
  2011. *
  2012. * @name czm_eastNorthUpToEyeCoordinates
  2013. * @glslFunction
  2014. *
  2015. * @param {vec3} positionMC The position on the ellipsoid in model coordinates.
  2016. * @param {vec3} normalEC The normalized ellipsoid surface normal, at <code>positionMC</code>, in eye coordinates.
  2017. *
  2018. * @returns {mat3} A 3x3 rotation matrix that transforms vectors from the east-north-up coordinate system to eye coordinates.
  2019. *
  2020. * @example
  2021. * // Transform a vector defined in the east-north-up coordinate
  2022. * // system, (0, 0, 1) which is the surface normal, to eye
  2023. * // coordinates.
  2024. * mat3 m = czm_eastNorthUpToEyeCoordinates(positionMC, normalEC);
  2025. * vec3 normalEC = m * vec3(0.0, 0.0, 1.0);
  2026. */
  2027. mat3 czm_eastNorthUpToEyeCoordinates(vec3 positionMC, vec3 normalEC)
  2028. {
  2029. vec3 tangentMC = normalize(vec3(-positionMC.y, positionMC.x, 0.0)); // normalized surface tangent in model coordinates
  2030. vec3 tangentEC = normalize(czm_normal3D * tangentMC); // normalized surface tangent in eye coordinates
  2031. vec3 bitangentEC = normalize(cross(normalEC, tangentEC)); // normalized surface bitangent in eye coordinates
  2032. return mat3(
  2033. tangentEC.x, tangentEC.y, tangentEC.z,
  2034. bitangentEC.x, bitangentEC.y, bitangentEC.z,
  2035. normalEC.x, normalEC.y, normalEC.z);
  2036. }
  2037. `;var swt=T(S(),1),pZ=`/**
  2038. * DOC_TBA
  2039. *
  2040. * @name czm_ellipsoidContainsPoint
  2041. * @glslFunction
  2042. *
  2043. */
  2044. bool czm_ellipsoidContainsPoint(vec3 ellipsoid_inverseRadii, vec3 point)
  2045. {
  2046. vec3 scaled = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(point, 1.0)).xyz;
  2047. return (dot(scaled, scaled) <= 1.0);
  2048. }
  2049. `;var cwt=T(S(),1),bZ=`/**
  2050. * DOC_TBA
  2051. *
  2052. * @name czm_ellipsoidWgs84TextureCoordinates
  2053. * @glslFunction
  2054. */
  2055. vec2 czm_ellipsoidWgs84TextureCoordinates(vec3 normal)
  2056. {
  2057. return vec2(atan(normal.y, normal.x) * czm_oneOverTwoPi + 0.5, asin(normal.z) * czm_oneOverPi + 0.5);
  2058. }
  2059. `;var dwt=T(S(),1),yZ=`/**
  2060. * Compares <code>left</code> and <code>right</code> componentwise. Returns <code>true</code>
  2061. * if they are within <code>epsilon</code> and <code>false</code> otherwise. The inputs
  2062. * <code>left</code> and <code>right</code> can be <code>float</code>s, <code>vec2</code>s,
  2063. * <code>vec3</code>s, or <code>vec4</code>s.
  2064. *
  2065. * @name czm_equalsEpsilon
  2066. * @glslFunction
  2067. *
  2068. * @param {} left The first vector.
  2069. * @param {} right The second vector.
  2070. * @param {float} epsilon The epsilon to use for equality testing.
  2071. * @returns {bool} <code>true</code> if the components are within <code>epsilon</code> and <code>false</code> otherwise.
  2072. *
  2073. * @example
  2074. * // GLSL declarations
  2075. * bool czm_equalsEpsilon(float left, float right, float epsilon);
  2076. * bool czm_equalsEpsilon(vec2 left, vec2 right, float epsilon);
  2077. * bool czm_equalsEpsilon(vec3 left, vec3 right, float epsilon);
  2078. * bool czm_equalsEpsilon(vec4 left, vec4 right, float epsilon);
  2079. */
  2080. bool czm_equalsEpsilon(vec4 left, vec4 right, float epsilon) {
  2081. return all(lessThanEqual(abs(left - right), vec4(epsilon)));
  2082. }
  2083. bool czm_equalsEpsilon(vec3 left, vec3 right, float epsilon) {
  2084. return all(lessThanEqual(abs(left - right), vec3(epsilon)));
  2085. }
  2086. bool czm_equalsEpsilon(vec2 left, vec2 right, float epsilon) {
  2087. return all(lessThanEqual(abs(left - right), vec2(epsilon)));
  2088. }
  2089. bool czm_equalsEpsilon(float left, float right, float epsilon) {
  2090. return (abs(left - right) <= epsilon);
  2091. }
  2092. `;var mwt=T(S(),1),gZ=`/**
  2093. * DOC_TBA
  2094. *
  2095. * @name czm_eyeOffset
  2096. * @glslFunction
  2097. *
  2098. * @param {vec4} positionEC DOC_TBA.
  2099. * @param {vec3} eyeOffset DOC_TBA.
  2100. *
  2101. * @returns {vec4} DOC_TBA.
  2102. */
  2103. vec4 czm_eyeOffset(vec4 positionEC, vec3 eyeOffset)
  2104. {
  2105. // This equation is approximate in x and y.
  2106. vec4 p = positionEC;
  2107. vec4 zEyeOffset = normalize(p) * eyeOffset.z;
  2108. p.xy += eyeOffset.xy + zEyeOffset.xy;
  2109. p.z += zEyeOffset.z;
  2110. return p;
  2111. }
  2112. `;var fwt=T(S(),1),xZ=`/**
  2113. * Transforms a position from eye to window coordinates. The transformation
  2114. * from eye to clip coordinates is done using {@link czm_projection}.
  2115. * The transform from normalized device coordinates to window coordinates is
  2116. * done using {@link czm_viewportTransformation}, which assumes a depth range
  2117. * of <code>near = 0</code> and <code>far = 1</code>.
  2118. * <br /><br />
  2119. * This transform is useful when there is a need to manipulate window coordinates
  2120. * in a vertex shader as done by {@link BillboardCollection}.
  2121. *
  2122. * @name czm_eyeToWindowCoordinates
  2123. * @glslFunction
  2124. *
  2125. * @param {vec4} position The position in eye coordinates to transform.
  2126. *
  2127. * @returns {vec4} The transformed position in window coordinates.
  2128. *
  2129. * @see czm_modelToWindowCoordinates
  2130. * @see czm_projection
  2131. * @see czm_viewportTransformation
  2132. * @see BillboardCollection
  2133. *
  2134. * @example
  2135. * vec4 positionWC = czm_eyeToWindowCoordinates(positionEC);
  2136. */
  2137. vec4 czm_eyeToWindowCoordinates(vec4 positionEC)
  2138. {
  2139. vec4 q = czm_projection * positionEC; // clip coordinates
  2140. q.xyz /= q.w; // normalized device coordinates
  2141. q.xyz = (czm_viewportTransformation * vec4(q.xyz, 1.0)).xyz; // window coordinates
  2142. return q;
  2143. }
  2144. `;var bwt=T(S(),1),_Z=`/**
  2145. * Approxiamtes atan over the range [0, 1]. Safe to flip output for negative input.
  2146. *
  2147. * Based on Michal Drobot's approximation from ShaderFastLibs, which in turn is based on
  2148. * "Efficient approximations for the arctangent function," Rajan, S. Sichun Wang Inkol, R. Joyal, A., May 2006.
  2149. * Adapted from ShaderFastLibs under MIT License.
  2150. *
  2151. * Chosen for the following characteristics over range [0, 1]:
  2152. * - basically no error at 0 and 1, important for getting around range limit (naive atan2 via atan requires infinite range atan)
  2153. * - no visible artifacts from first-derivative discontinuities, unlike latitude via range-reduced sqrt asin approximations (at equator)
  2154. *
  2155. * The original code is x * (-0.1784 * abs(x) - 0.0663 * x * x + 1.0301);
  2156. * Removed the abs() in here because it isn't needed, the input range is guaranteed as [0, 1] by how we're approximating atan2.
  2157. *
  2158. * @name czm_fastApproximateAtan
  2159. * @glslFunction
  2160. *
  2161. * @param {float} x Value between 0 and 1 inclusive.
  2162. *
  2163. * @returns {float} Approximation of atan(x)
  2164. */
  2165. float czm_fastApproximateAtan(float x) {
  2166. return x * (-0.1784 * x - 0.0663 * x * x + 1.0301);
  2167. }
  2168. /**
  2169. * Approximation of atan2.
  2170. *
  2171. * Range reduction math based on nvidia's cg reference implementation for atan2: http://developer.download.nvidia.com/cg/atan2.html
  2172. * However, we replaced their atan curve with Michael Drobot's (see above).
  2173. *
  2174. * @name czm_fastApproximateAtan
  2175. * @glslFunction
  2176. *
  2177. * @param {float} x Value between -1 and 1 inclusive.
  2178. * @param {float} y Value between -1 and 1 inclusive.
  2179. *
  2180. * @returns {float} Approximation of atan2(x, y)
  2181. */
  2182. float czm_fastApproximateAtan(float x, float y) {
  2183. // atan approximations are usually only reliable over [-1, 1], or, in our case, [0, 1] due to modifications.
  2184. // So range-reduce using abs and by flipping whether x or y is on top.
  2185. float t = abs(x); // t used as swap and atan result.
  2186. float opposite = abs(y);
  2187. float adjacent = max(t, opposite);
  2188. opposite = min(t, opposite);
  2189. t = czm_fastApproximateAtan(opposite / adjacent);
  2190. // Undo range reduction
  2191. t = czm_branchFreeTernary(abs(y) > abs(x), czm_piOverTwo - t, t);
  2192. t = czm_branchFreeTernary(x < 0.0, czm_pi - t, t);
  2193. t = czm_branchFreeTernary(y < 0.0, -t, t);
  2194. return t;
  2195. }
  2196. `;var gwt=T(S(),1),TZ=`/**
  2197. * Gets the color with fog at a distance from the camera.
  2198. *
  2199. * @name czm_fog
  2200. * @glslFunction
  2201. *
  2202. * @param {float} distanceToCamera The distance to the camera in meters.
  2203. * @param {vec3} color The original color.
  2204. * @param {vec3} fogColor The color of the fog.
  2205. *
  2206. * @returns {vec3} The color adjusted for fog at the distance from the camera.
  2207. */
  2208. vec3 czm_fog(float distanceToCamera, vec3 color, vec3 fogColor)
  2209. {
  2210. float scalar = distanceToCamera * czm_fogDensity;
  2211. float fog = 1.0 - exp(-(scalar * scalar));
  2212. return mix(color, fogColor, fog);
  2213. }
  2214. /**
  2215. * Gets the color with fog at a distance from the camera.
  2216. *
  2217. * @name czm_fog
  2218. * @glslFunction
  2219. *
  2220. * @param {float} distanceToCamera The distance to the camera in meters.
  2221. * @param {vec3} color The original color.
  2222. * @param {vec3} fogColor The color of the fog.
  2223. * @param {float} fogModifierConstant A constant to modify the appearance of fog.
  2224. *
  2225. * @returns {vec3} The color adjusted for fog at the distance from the camera.
  2226. */
  2227. vec3 czm_fog(float distanceToCamera, vec3 color, vec3 fogColor, float fogModifierConstant)
  2228. {
  2229. float scalar = distanceToCamera * czm_fogDensity;
  2230. float fog = 1.0 - exp(-((fogModifierConstant * scalar + fogModifierConstant) * (scalar * (1.0 + fogModifierConstant))));
  2231. return mix(color, fogColor, fog);
  2232. }
  2233. `;var _wt=T(S(),1),SZ=`/**
  2234. * Converts a color from RGB space to linear space.
  2235. *
  2236. * @name czm_gammaCorrect
  2237. * @glslFunction
  2238. *
  2239. * @param {vec3} color The color in RGB space.
  2240. * @returns {vec3} The color in linear space.
  2241. */
  2242. vec3 czm_gammaCorrect(vec3 color) {
  2243. #ifdef HDR
  2244. color = pow(color, vec3(czm_gamma));
  2245. #endif
  2246. return color;
  2247. }
  2248. vec4 czm_gammaCorrect(vec4 color) {
  2249. #ifdef HDR
  2250. color.rgb = pow(color.rgb, vec3(czm_gamma));
  2251. #endif
  2252. return color;
  2253. }
  2254. `;var Swt=T(S(),1),CZ=`/**
  2255. * DOC_TBA
  2256. *
  2257. * @name czm_geodeticSurfaceNormal
  2258. * @glslFunction
  2259. *
  2260. * @param {vec3} positionOnEllipsoid DOC_TBA
  2261. * @param {vec3} ellipsoidCenter DOC_TBA
  2262. * @param {vec3} oneOverEllipsoidRadiiSquared DOC_TBA
  2263. *
  2264. * @returns {vec3} DOC_TBA.
  2265. */
  2266. vec3 czm_geodeticSurfaceNormal(vec3 positionOnEllipsoid, vec3 ellipsoidCenter, vec3 oneOverEllipsoidRadiiSquared)
  2267. {
  2268. return normalize((positionOnEllipsoid - ellipsoidCenter) * oneOverEllipsoidRadiiSquared);
  2269. }
  2270. `;var Vwt=T(S(),1),VZ=`/**
  2271. * An czm_material with default values. Every material's czm_getMaterial
  2272. * should use this default material as a base for the material it returns.
  2273. * The default normal value is given by materialInput.normalEC.
  2274. *
  2275. * @name czm_getDefaultMaterial
  2276. * @glslFunction
  2277. *
  2278. * @param {czm_materialInput} input The input used to construct the default material.
  2279. *
  2280. * @returns {czm_material} The default material.
  2281. *
  2282. * @see czm_materialInput
  2283. * @see czm_material
  2284. * @see czm_getMaterial
  2285. */
  2286. czm_material czm_getDefaultMaterial(czm_materialInput materialInput)
  2287. {
  2288. czm_material material;
  2289. material.diffuse = vec3(0.0);
  2290. material.specular = 0.0;
  2291. material.shininess = 1.0;
  2292. material.normal = materialInput.normalEC;
  2293. material.emission = vec3(0.0);
  2294. material.alpha = 1.0;
  2295. return material;
  2296. }
  2297. `;var Rwt=T(S(),1),LZ=`/**
  2298. * Calculates the intensity of diffusely reflected light.
  2299. *
  2300. * @name czm_getLambertDiffuse
  2301. * @glslFunction
  2302. *
  2303. * @param {vec3} lightDirectionEC Unit vector pointing to the light source in eye coordinates.
  2304. * @param {vec3} normalEC The surface normal in eye coordinates.
  2305. *
  2306. * @returns {float} The intensity of the diffuse reflection.
  2307. *
  2308. * @see czm_phong
  2309. *
  2310. * @example
  2311. * float diffuseIntensity = czm_getLambertDiffuse(lightDirectionEC, normalEC);
  2312. * float specularIntensity = czm_getSpecular(lightDirectionEC, toEyeEC, normalEC, 200);
  2313. * vec3 color = (diffuseColor * diffuseIntensity) + (specularColor * specularIntensity);
  2314. */
  2315. float czm_getLambertDiffuse(vec3 lightDirectionEC, vec3 normalEC)
  2316. {
  2317. return max(dot(lightDirectionEC, normalEC), 0.0);
  2318. }
  2319. `;var Gwt=T(S(),1),RZ=`/**
  2320. * Calculates the specular intensity of reflected light.
  2321. *
  2322. * @name czm_getSpecular
  2323. * @glslFunction
  2324. *
  2325. * @param {vec3} lightDirectionEC Unit vector pointing to the light source in eye coordinates.
  2326. * @param {vec3} toEyeEC Unit vector pointing to the eye position in eye coordinates.
  2327. * @param {vec3} normalEC The surface normal in eye coordinates.
  2328. * @param {float} shininess The sharpness of the specular reflection. Higher values create a smaller, more focused specular highlight.
  2329. *
  2330. * @returns {float} The intensity of the specular highlight.
  2331. *
  2332. * @see czm_phong
  2333. *
  2334. * @example
  2335. * float diffuseIntensity = czm_getLambertDiffuse(lightDirectionEC, normalEC);
  2336. * float specularIntensity = czm_getSpecular(lightDirectionEC, toEyeEC, normalEC, 200);
  2337. * vec3 color = (diffuseColor * diffuseIntensity) + (specularColor * specularIntensity);
  2338. */
  2339. float czm_getSpecular(vec3 lightDirectionEC, vec3 toEyeEC, vec3 normalEC, float shininess)
  2340. {
  2341. vec3 toReflectedLight = reflect(-lightDirectionEC, normalEC);
  2342. float specular = max(dot(toReflectedLight, toEyeEC), 0.0);
  2343. // pow has undefined behavior if both parameters <= 0.
  2344. // Prevent this by making sure shininess is at least czm_epsilon2.
  2345. return pow(specular, max(shininess, czm_epsilon2));
  2346. }
  2347. `;var Xwt=T(S(),1),ZZ=`/**
  2348. * @private
  2349. */
  2350. vec4 czm_getWaterNoise(sampler2D normalMap, vec2 uv, float time, float angleInRadians)
  2351. {
  2352. float cosAngle = cos(angleInRadians);
  2353. float sinAngle = sin(angleInRadians);
  2354. // time dependent sampling directions
  2355. vec2 s0 = vec2(1.0/17.0, 0.0);
  2356. vec2 s1 = vec2(-1.0/29.0, 0.0);
  2357. vec2 s2 = vec2(1.0/101.0, 1.0/59.0);
  2358. vec2 s3 = vec2(-1.0/109.0, -1.0/57.0);
  2359. // rotate sampling direction by specified angle
  2360. s0 = vec2((cosAngle * s0.x) - (sinAngle * s0.y), (sinAngle * s0.x) + (cosAngle * s0.y));
  2361. s1 = vec2((cosAngle * s1.x) - (sinAngle * s1.y), (sinAngle * s1.x) + (cosAngle * s1.y));
  2362. s2 = vec2((cosAngle * s2.x) - (sinAngle * s2.y), (sinAngle * s2.x) + (cosAngle * s2.y));
  2363. s3 = vec2((cosAngle * s3.x) - (sinAngle * s3.y), (sinAngle * s3.x) + (cosAngle * s3.y));
  2364. vec2 uv0 = (uv/103.0) + (time * s0);
  2365. vec2 uv1 = uv/107.0 + (time * s1) + vec2(0.23);
  2366. vec2 uv2 = uv/vec2(897.0, 983.0) + (time * s2) + vec2(0.51);
  2367. vec2 uv3 = uv/vec2(991.0, 877.0) + (time * s3) + vec2(0.71);
  2368. uv0 = fract(uv0);
  2369. uv1 = fract(uv1);
  2370. uv2 = fract(uv2);
  2371. uv3 = fract(uv3);
  2372. vec4 noise = (texture(normalMap, uv0)) +
  2373. (texture(normalMap, uv1)) +
  2374. (texture(normalMap, uv2)) +
  2375. (texture(normalMap, uv3));
  2376. // average and scale to between -1 and 1
  2377. return ((noise / 4.0) - 0.5) * 2.0;
  2378. }
  2379. `;var Wwt=T(S(),1),GZ=`/**
  2380. * Adjusts the hue of a color.
  2381. *
  2382. * @name czm_hue
  2383. * @glslFunction
  2384. *
  2385. * @param {vec3} rgb The color.
  2386. * @param {float} adjustment The amount to adjust the hue of the color in radians.
  2387. *
  2388. * @returns {float} The color with the hue adjusted.
  2389. *
  2390. * @example
  2391. * vec3 adjustHue = czm_hue(color, czm_pi); // The same as czm_hue(color, -czm_pi)
  2392. */
  2393. vec3 czm_hue(vec3 rgb, float adjustment)
  2394. {
  2395. const mat3 toYIQ = mat3(0.299, 0.587, 0.114,
  2396. 0.595716, -0.274453, -0.321263,
  2397. 0.211456, -0.522591, 0.311135);
  2398. const mat3 toRGB = mat3(1.0, 0.9563, 0.6210,
  2399. 1.0, -0.2721, -0.6474,
  2400. 1.0, -1.107, 1.7046);
  2401. vec3 yiq = toYIQ * rgb;
  2402. float hue = atan(yiq.z, yiq.y) + adjustment;
  2403. float chroma = sqrt(yiq.z * yiq.z + yiq.y * yiq.y);
  2404. vec3 color = vec3(yiq.x, chroma * cos(hue), chroma * sin(hue));
  2405. return toRGB * color;
  2406. }
  2407. `;var vwt=T(S(),1),EZ=`/**
  2408. * Converts a color in linear space to RGB space.
  2409. *
  2410. * @name czm_inverseGamma
  2411. * @glslFunction
  2412. *
  2413. * @param {vec3} color The color in linear space.
  2414. * @returns {vec3} The color in RGB space.
  2415. */
  2416. vec3 czm_inverseGamma(vec3 color) {
  2417. return pow(color, vec3(1.0 / czm_gamma));
  2418. }
  2419. `;var Fwt=T(S(),1),XZ=`/**
  2420. * Determines if a time interval is empty.
  2421. *
  2422. * @name czm_isEmpty
  2423. * @glslFunction
  2424. *
  2425. * @param {czm_raySegment} interval The interval to test.
  2426. *
  2427. * @returns {bool} <code>true</code> if the time interval is empty; otherwise, <code>false</code>.
  2428. *
  2429. * @example
  2430. * bool b0 = czm_isEmpty(czm_emptyRaySegment); // true
  2431. * bool b1 = czm_isEmpty(czm_raySegment(0.0, 1.0)); // false
  2432. * bool b2 = czm_isEmpty(czm_raySegment(1.0, 1.0)); // false, contains 1.0.
  2433. */
  2434. bool czm_isEmpty(czm_raySegment interval)
  2435. {
  2436. return (interval.stop < 0.0);
  2437. }
  2438. `;var Mwt=T(S(),1),IZ=`/**
  2439. * Determines if a time interval is empty.
  2440. *
  2441. * @name czm_isFull
  2442. * @glslFunction
  2443. *
  2444. * @param {czm_raySegment} interval The interval to test.
  2445. *
  2446. * @returns {bool} <code>true</code> if the time interval is empty; otherwise, <code>false</code>.
  2447. *
  2448. * @example
  2449. * bool b0 = czm_isEmpty(czm_emptyRaySegment); // true
  2450. * bool b1 = czm_isEmpty(czm_raySegment(0.0, 1.0)); // false
  2451. * bool b2 = czm_isEmpty(czm_raySegment(1.0, 1.0)); // false, contains 1.0.
  2452. */
  2453. bool czm_isFull(czm_raySegment interval)
  2454. {
  2455. return (interval.start == 0.0 && interval.stop == czm_infinity);
  2456. }
  2457. `;var Uwt=T(S(),1),WZ=`/**
  2458. * Computes the fraction of a Web Wercator rectangle at which a given geodetic latitude is located.
  2459. *
  2460. * @name czm_latitudeToWebMercatorFraction
  2461. * @glslFunction
  2462. *
  2463. * @param {float} latitude The geodetic latitude, in radians.
  2464. * @param {float} southMercatorY The Web Mercator coordinate of the southern boundary of the rectangle.
  2465. * @param {float} oneOverMercatorHeight The total height of the rectangle in Web Mercator coordinates.
  2466. *
  2467. * @returns {float} The fraction of the rectangle at which the latitude occurs. If the latitude is the southern
  2468. * boundary of the rectangle, the return value will be zero. If it is the northern boundary, the return
  2469. * value will be 1.0. Latitudes in between are mapped according to the Web Mercator projection.
  2470. */
  2471. float czm_latitudeToWebMercatorFraction(float latitude, float southMercatorY, float oneOverMercatorHeight)
  2472. {
  2473. float sinLatitude = sin(latitude);
  2474. float mercatorY = 0.5 * log((1.0 + sinLatitude) / (1.0 - sinLatitude));
  2475. return (mercatorY - southMercatorY) * oneOverMercatorHeight;
  2476. }
  2477. `;var Dwt=T(S(),1),PZ=`/**
  2478. * Computes distance from an point in 2D to a line in 2D.
  2479. *
  2480. * @name czm_lineDistance
  2481. * @glslFunction
  2482. *
  2483. * param {vec2} point1 A point along the line.
  2484. * param {vec2} point2 A point along the line.
  2485. * param {vec2} point A point that may or may not be on the line.
  2486. * returns {float} The distance from the point to the line.
  2487. */
  2488. float czm_lineDistance(vec2 point1, vec2 point2, vec2 point) {
  2489. return abs((point2.y - point1.y) * point.x - (point2.x - point1.x) * point.y + point2.x * point1.y - point2.y * point1.x) / distance(point2, point1);
  2490. }
  2491. `;var Ywt=T(S(),1),vZ=`/**
  2492. * Converts a linear RGB color to an sRGB color.
  2493. *
  2494. * @param {vec3|vec4} linearIn The color in linear color space.
  2495. * @returns {vec3|vec4} The color in sRGB color space. The vector type matches the input.
  2496. */
  2497. vec3 czm_linearToSrgb(vec3 linearIn)
  2498. {
  2499. return pow(linearIn, vec3(1.0/2.2));
  2500. }
  2501. vec4 czm_linearToSrgb(vec4 linearIn)
  2502. {
  2503. vec3 srgbOut = pow(linearIn.rgb, vec3(1.0/2.2));
  2504. return vec4(srgbOut, linearIn.a);
  2505. }
  2506. `;var Kwt=T(S(),1),wZ=`/**
  2507. * Computes the luminance of a color.
  2508. *
  2509. * @name czm_luminance
  2510. * @glslFunction
  2511. *
  2512. * @param {vec3} rgb The color.
  2513. *
  2514. * @returns {float} The luminance.
  2515. *
  2516. * @example
  2517. * float light = czm_luminance(vec3(0.0)); // 0.0
  2518. * float dark = czm_luminance(vec3(1.0)); // ~1.0
  2519. */
  2520. float czm_luminance(vec3 rgb)
  2521. {
  2522. // Algorithm from Chapter 10 of Graphics Shaders.
  2523. const vec3 W = vec3(0.2125, 0.7154, 0.0721);
  2524. return dot(rgb, W);
  2525. }
  2526. `;var zwt=T(S(),1),FZ=`/**
  2527. * Computes the size of a pixel in meters at a distance from the eye.
  2528. * <p>
  2529. * Use this version when passing in a custom pixel ratio. For example, passing in 1.0 will return meters per native device pixel.
  2530. * </p>
  2531. * @name czm_metersPerPixel
  2532. * @glslFunction
  2533. *
  2534. * @param {vec3} positionEC The position to get the meters per pixel in eye coordinates.
  2535. * @param {float} pixelRatio The scaling factor from pixel space to coordinate space
  2536. *
  2537. * @returns {float} The meters per pixel at positionEC.
  2538. */
  2539. float czm_metersPerPixel(vec4 positionEC, float pixelRatio)
  2540. {
  2541. float width = czm_viewport.z;
  2542. float height = czm_viewport.w;
  2543. float pixelWidth;
  2544. float pixelHeight;
  2545. float top = czm_frustumPlanes.x;
  2546. float bottom = czm_frustumPlanes.y;
  2547. float left = czm_frustumPlanes.z;
  2548. float right = czm_frustumPlanes.w;
  2549. if (czm_sceneMode == czm_sceneMode2D || czm_orthographicIn3D == 1.0)
  2550. {
  2551. float frustumWidth = right - left;
  2552. float frustumHeight = top - bottom;
  2553. pixelWidth = frustumWidth / width;
  2554. pixelHeight = frustumHeight / height;
  2555. }
  2556. else
  2557. {
  2558. float distanceToPixel = -positionEC.z;
  2559. float inverseNear = 1.0 / czm_currentFrustum.x;
  2560. float tanTheta = top * inverseNear;
  2561. pixelHeight = 2.0 * distanceToPixel * tanTheta / height;
  2562. tanTheta = right * inverseNear;
  2563. pixelWidth = 2.0 * distanceToPixel * tanTheta / width;
  2564. }
  2565. return max(pixelWidth, pixelHeight) * pixelRatio;
  2566. }
  2567. /**
  2568. * Computes the size of a pixel in meters at a distance from the eye.
  2569. * <p>
  2570. * Use this version when scaling by pixel ratio.
  2571. * </p>
  2572. * @name czm_metersPerPixel
  2573. * @glslFunction
  2574. *
  2575. * @param {vec3} positionEC The position to get the meters per pixel in eye coordinates.
  2576. *
  2577. * @returns {float} The meters per pixel at positionEC.
  2578. */
  2579. float czm_metersPerPixel(vec4 positionEC)
  2580. {
  2581. return czm_metersPerPixel(positionEC, czm_pixelRatio);
  2582. }
  2583. `;var Qwt=T(S(),1),AZ=`/**
  2584. * Transforms a position from model to window coordinates. The transformation
  2585. * from model to clip coordinates is done using {@link czm_modelViewProjection}.
  2586. * The transform from normalized device coordinates to window coordinates is
  2587. * done using {@link czm_viewportTransformation}, which assumes a depth range
  2588. * of <code>near = 0</code> and <code>far = 1</code>.
  2589. * <br /><br />
  2590. * This transform is useful when there is a need to manipulate window coordinates
  2591. * in a vertex shader as done by {@link BillboardCollection}.
  2592. * <br /><br />
  2593. * This function should not be confused with {@link czm_viewportOrthographic},
  2594. * which is an orthographic projection matrix that transforms from window
  2595. * coordinates to clip coordinates.
  2596. *
  2597. * @name czm_modelToWindowCoordinates
  2598. * @glslFunction
  2599. *
  2600. * @param {vec4} position The position in model coordinates to transform.
  2601. *
  2602. * @returns {vec4} The transformed position in window coordinates.
  2603. *
  2604. * @see czm_eyeToWindowCoordinates
  2605. * @see czm_modelViewProjection
  2606. * @see czm_viewportTransformation
  2607. * @see czm_viewportOrthographic
  2608. * @see BillboardCollection
  2609. *
  2610. * @example
  2611. * vec4 positionWC = czm_modelToWindowCoordinates(positionMC);
  2612. */
  2613. vec4 czm_modelToWindowCoordinates(vec4 position)
  2614. {
  2615. vec4 q = czm_modelViewProjection * position; // clip coordinates
  2616. q.xyz /= q.w; // normalized device coordinates
  2617. q.xyz = (czm_viewportTransformation * vec4(q.xyz, 1.0)).xyz; // window coordinates
  2618. return q;
  2619. }
  2620. `;var qwt=T(S(),1),MZ=`/**
  2621. * DOC_TBA
  2622. *
  2623. * @name czm_multiplyWithColorBalance
  2624. * @glslFunction
  2625. */
  2626. vec3 czm_multiplyWithColorBalance(vec3 left, vec3 right)
  2627. {
  2628. // Algorithm from Chapter 10 of Graphics Shaders.
  2629. const vec3 W = vec3(0.2125, 0.7154, 0.0721);
  2630. vec3 target = left * right;
  2631. float leftLuminance = dot(left, W);
  2632. float rightLuminance = dot(right, W);
  2633. float targetLuminance = dot(target, W);
  2634. return ((leftLuminance + rightLuminance) / (2.0 * targetLuminance)) * target;
  2635. }
  2636. `;var eFt=T(S(),1),NZ=`/**
  2637. * Computes a value that scales with distance. The scaling is clamped at the near and
  2638. * far distances, and does not extrapolate. This function works with the
  2639. * {@link NearFarScalar} JavaScript class.
  2640. *
  2641. * @name czm_nearFarScalar
  2642. * @glslFunction
  2643. *
  2644. * @param {vec4} nearFarScalar A vector with 4 components: Near distance (x), Near value (y), Far distance (z), Far value (w).
  2645. * @param {float} cameraDistSq The square of the current distance from the camera.
  2646. *
  2647. * @returns {float} The value at this distance.
  2648. */
  2649. float czm_nearFarScalar(vec4 nearFarScalar, float cameraDistSq)
  2650. {
  2651. float valueAtMin = nearFarScalar.y;
  2652. float valueAtMax = nearFarScalar.w;
  2653. float nearDistanceSq = nearFarScalar.x * nearFarScalar.x;
  2654. float farDistanceSq = nearFarScalar.z * nearFarScalar.z;
  2655. float t = (cameraDistSq - nearDistanceSq) / (farDistanceSq - nearDistanceSq);
  2656. t = pow(clamp(t, 0.0, 1.0), 0.2);
  2657. return mix(valueAtMin, valueAtMax, t);
  2658. }
  2659. `;var nFt=T(S(),1),UZ=` /**
  2660. * Decodes a unit-length vector in 'oct' encoding to a normalized 3-component Cartesian vector.
  2661. * The 'oct' encoding is described in "A Survey of Efficient Representations of Independent Unit Vectors",
  2662. * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/
  2663. *
  2664. * @name czm_octDecode
  2665. * @param {vec2} encoded The oct-encoded, unit-length vector
  2666. * @param {float} range The maximum value of the SNORM range. The encoded vector is stored in log2(rangeMax+1) bits.
  2667. * @returns {vec3} The decoded and normalized vector
  2668. */
  2669. vec3 czm_octDecode(vec2 encoded, float range)
  2670. {
  2671. if (encoded.x == 0.0 && encoded.y == 0.0) {
  2672. return vec3(0.0, 0.0, 0.0);
  2673. }
  2674. encoded = encoded / range * 2.0 - 1.0;
  2675. vec3 v = vec3(encoded.x, encoded.y, 1.0 - abs(encoded.x) - abs(encoded.y));
  2676. if (v.z < 0.0)
  2677. {
  2678. v.xy = (1.0 - abs(v.yx)) * czm_signNotZero(v.xy);
  2679. }
  2680. return normalize(v);
  2681. }
  2682. /**
  2683. * Decodes a unit-length vector in 'oct' encoding to a normalized 3-component Cartesian vector.
  2684. * The 'oct' encoding is described in "A Survey of Efficient Representations of Independent Unit Vectors",
  2685. * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/
  2686. *
  2687. * @name czm_octDecode
  2688. * @param {vec2} encoded The oct-encoded, unit-length vector
  2689. * @returns {vec3} The decoded and normalized vector
  2690. */
  2691. vec3 czm_octDecode(vec2 encoded)
  2692. {
  2693. return czm_octDecode(encoded, 255.0);
  2694. }
  2695. /**
  2696. * Decodes a unit-length vector in 'oct' encoding packed into a floating-point number to a normalized 3-component Cartesian vector.
  2697. * The 'oct' encoding is described in "A Survey of Efficient Representations of Independent Unit Vectors",
  2698. * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/
  2699. *
  2700. * @name czm_octDecode
  2701. * @param {float} encoded The oct-encoded, unit-length vector
  2702. * @returns {vec3} The decoded and normalized vector
  2703. */
  2704. vec3 czm_octDecode(float encoded)
  2705. {
  2706. float temp = encoded / 256.0;
  2707. float x = floor(temp);
  2708. float y = (temp - x) * 256.0;
  2709. return czm_octDecode(vec2(x, y));
  2710. }
  2711. /**
  2712. * Decodes three unit-length vectors in 'oct' encoding packed into two floating-point numbers to normalized 3-component Cartesian vectors.
  2713. * The 'oct' encoding is described in "A Survey of Efficient Representations of Independent Unit Vectors",
  2714. * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/
  2715. *
  2716. * @name czm_octDecode
  2717. * @param {vec2} encoded The packed oct-encoded, unit-length vectors.
  2718. * @param {vec3} vector1 One decoded and normalized vector.
  2719. * @param {vec3} vector2 One decoded and normalized vector.
  2720. * @param {vec3} vector3 One decoded and normalized vector.
  2721. */
  2722. void czm_octDecode(vec2 encoded, out vec3 vector1, out vec3 vector2, out vec3 vector3)
  2723. {
  2724. float temp = encoded.x / 65536.0;
  2725. float x = floor(temp);
  2726. float encodedFloat1 = (temp - x) * 65536.0;
  2727. temp = encoded.y / 65536.0;
  2728. float y = floor(temp);
  2729. float encodedFloat2 = (temp - y) * 65536.0;
  2730. vector1 = czm_octDecode(encodedFloat1);
  2731. vector2 = czm_octDecode(encodedFloat2);
  2732. vector3 = czm_octDecode(vec2(x, y));
  2733. }
  2734. `;var oFt=T(S(),1),kZ=`/**
  2735. * Packs a depth value into a vec3 that can be represented by unsigned bytes.
  2736. *
  2737. * @name czm_packDepth
  2738. * @glslFunction
  2739. *
  2740. * @param {float} depth The floating-point depth.
  2741. * @returns {vec3} The packed depth.
  2742. */
  2743. vec4 czm_packDepth(float depth)
  2744. {
  2745. // See Aras Pranckevi\u010Dius' post Encoding Floats to RGBA
  2746. // http://aras-p.info/blog/2009/07/30/encoding-floats-to-rgba-the-final/
  2747. vec4 enc = vec4(1.0, 255.0, 65025.0, 16581375.0) * depth;
  2748. enc = fract(enc);
  2749. enc -= enc.yzww * vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0);
  2750. return enc;
  2751. }
  2752. `;var sFt=T(S(),1),DZ=`vec3 lambertianDiffuse(vec3 diffuseColor)
  2753. {
  2754. return diffuseColor / czm_pi;
  2755. }
  2756. vec3 fresnelSchlick2(vec3 f0, vec3 f90, float VdotH)
  2757. {
  2758. return f0 + (f90 - f0) * pow(clamp(1.0 - VdotH, 0.0, 1.0), 5.0);
  2759. }
  2760. float smithVisibilityG1(float NdotV, float roughness)
  2761. {
  2762. // this is the k value for direct lighting.
  2763. // for image based lighting it will be roughness^2 / 2
  2764. float k = (roughness + 1.0) * (roughness + 1.0) / 8.0;
  2765. return NdotV / (NdotV * (1.0 - k) + k);
  2766. }
  2767. float smithVisibilityGGX(float roughness, float NdotL, float NdotV)
  2768. {
  2769. return (
  2770. smithVisibilityG1(NdotL, roughness) *
  2771. smithVisibilityG1(NdotV, roughness)
  2772. );
  2773. }
  2774. float GGX(float roughness, float NdotH)
  2775. {
  2776. float roughnessSquared = roughness * roughness;
  2777. float f = (NdotH * roughnessSquared - NdotH) * NdotH + 1.0;
  2778. return roughnessSquared / (czm_pi * f * f);
  2779. }
  2780. /**
  2781. * Compute the diffuse and specular contributions using physically based
  2782. * rendering. This function only handles direct lighting.
  2783. * <p>
  2784. * This function only handles the lighting calculations. Metallic/roughness
  2785. * and specular/glossy must be handled separately. See {@czm_pbrMetallicRoughnessMaterial}, {@czm_pbrSpecularGlossinessMaterial} and {@czm_defaultPbrMaterial}
  2786. * </p>
  2787. *
  2788. * @name czm_pbrlighting
  2789. * @glslFunction
  2790. *
  2791. * @param {vec3} positionEC The position of the fragment in eye coordinates
  2792. * @param {vec3} normalEC The surface normal in eye coordinates
  2793. * @param {vec3} lightDirectionEC Unit vector pointing to the light source in eye coordinates.
  2794. * @param {vec3} lightColorHdr radiance of the light source. This is a HDR value.
  2795. * @param {czm_pbrParameters} The computed PBR parameters.
  2796. * @return {vec3} The computed HDR color
  2797. *
  2798. * @example
  2799. * czm_pbrParameters pbrParameters = czm_pbrMetallicRoughnessMaterial(
  2800. * baseColor,
  2801. * metallic,
  2802. * roughness
  2803. * );
  2804. * vec3 color = czm_pbrlighting(
  2805. * positionEC,
  2806. * normalEC,
  2807. * lightDirectionEC,
  2808. * lightColorHdr,
  2809. * pbrParameters);
  2810. */
  2811. vec3 czm_pbrLighting(
  2812. vec3 positionEC,
  2813. vec3 normalEC,
  2814. vec3 lightDirectionEC,
  2815. vec3 lightColorHdr,
  2816. czm_pbrParameters pbrParameters
  2817. )
  2818. {
  2819. vec3 v = -normalize(positionEC);
  2820. vec3 l = normalize(lightDirectionEC);
  2821. vec3 h = normalize(v + l);
  2822. vec3 n = normalEC;
  2823. float NdotL = clamp(dot(n, l), 0.001, 1.0);
  2824. float NdotV = abs(dot(n, v)) + 0.001;
  2825. float NdotH = clamp(dot(n, h), 0.0, 1.0);
  2826. float LdotH = clamp(dot(l, h), 0.0, 1.0);
  2827. float VdotH = clamp(dot(v, h), 0.0, 1.0);
  2828. vec3 f0 = pbrParameters.f0;
  2829. float reflectance = max(max(f0.r, f0.g), f0.b);
  2830. vec3 f90 = vec3(clamp(reflectance * 25.0, 0.0, 1.0));
  2831. vec3 F = fresnelSchlick2(f0, f90, VdotH);
  2832. float alpha = pbrParameters.roughness;
  2833. float G = smithVisibilityGGX(alpha, NdotL, NdotV);
  2834. float D = GGX(alpha, NdotH);
  2835. vec3 specularContribution = F * G * D / (4.0 * NdotL * NdotV);
  2836. vec3 diffuseColor = pbrParameters.diffuseColor;
  2837. // F here represents the specular contribution
  2838. vec3 diffuseContribution = (1.0 - F) * lambertianDiffuse(diffuseColor);
  2839. // Lo = (diffuse + specular) * Li * NdotL
  2840. return (diffuseContribution + specularContribution) * NdotL * lightColorHdr;
  2841. }
  2842. `;var cFt=T(S(),1),BZ=`/**
  2843. * Compute parameters for physically based rendering using the
  2844. * metallic/roughness workflow. All inputs are linear; sRGB texture values must
  2845. * be decoded beforehand
  2846. *
  2847. * @name czm_pbrMetallicRoughnessMaterial
  2848. * @glslFunction
  2849. *
  2850. * @param {vec3} baseColor For dielectrics, this is the base color. For metals, this is the f0 value (reflectance at normal incidence)
  2851. * @param {float} metallic 0.0 indicates dielectric. 1.0 indicates metal. Values in between are allowed (e.g. to model rust or dirt);
  2852. * @param {float} roughness A value between 0.0 and 1.0
  2853. * @return {czm_pbrParameters} parameters to pass into {@link czm_pbrLighting}
  2854. */
  2855. czm_pbrParameters czm_pbrMetallicRoughnessMaterial(
  2856. vec3 baseColor,
  2857. float metallic,
  2858. float roughness
  2859. )
  2860. {
  2861. czm_pbrParameters results;
  2862. // roughness is authored as perceptual roughness
  2863. // square it to get material roughness
  2864. roughness = clamp(roughness, 0.0, 1.0);
  2865. results.roughness = roughness * roughness;
  2866. // dielectrics use f0 = 0.04, metals use albedo as f0
  2867. metallic = clamp(metallic, 0.0, 1.0);
  2868. const vec3 REFLECTANCE_DIELECTRIC = vec3(0.04);
  2869. vec3 f0 = mix(REFLECTANCE_DIELECTRIC, baseColor, metallic);
  2870. results.f0 = f0;
  2871. // diffuse only applies to dielectrics.
  2872. results.diffuseColor = baseColor * (1.0 - f0) * (1.0 - metallic);
  2873. return results;
  2874. }
  2875. `;var dFt=T(S(),1),YZ=`/**
  2876. * Compute parameters for physically based rendering using the
  2877. * specular/glossy workflow. All inputs are linear; sRGB texture values must
  2878. * be decoded beforehand
  2879. *
  2880. * @name czm_pbrSpecularGlossinessMaterial
  2881. * @glslFunction
  2882. *
  2883. * @param {vec3} diffuse The diffuse color for dielectrics (non-metals)
  2884. * @param {vec3} specular The reflectance at normal incidence (f0)
  2885. * @param {float} glossiness A number from 0.0 to 1.0 indicating how smooth the surface is.
  2886. * @return {czm_pbrParameters} parameters to pass into {@link czm_pbrLighting}
  2887. */
  2888. czm_pbrParameters czm_pbrSpecularGlossinessMaterial(
  2889. vec3 diffuse,
  2890. vec3 specular,
  2891. float glossiness
  2892. )
  2893. {
  2894. czm_pbrParameters results;
  2895. // glossiness is the opposite of roughness, but easier for artists to use.
  2896. float roughness = 1.0 - glossiness;
  2897. results.roughness = roughness * roughness;
  2898. results.diffuseColor = diffuse * (1.0 - max(max(specular.r, specular.g), specular.b));
  2899. results.f0 = specular;
  2900. return results;
  2901. }
  2902. `;var mFt=T(S(),1),OZ=`float czm_private_getLambertDiffuseOfMaterial(vec3 lightDirectionEC, czm_material material)
  2903. {
  2904. return czm_getLambertDiffuse(lightDirectionEC, material.normal);
  2905. }
  2906. float czm_private_getSpecularOfMaterial(vec3 lightDirectionEC, vec3 toEyeEC, czm_material material)
  2907. {
  2908. return czm_getSpecular(lightDirectionEC, toEyeEC, material.normal, material.shininess);
  2909. }
  2910. /**
  2911. * Computes a color using the Phong lighting model.
  2912. *
  2913. * @name czm_phong
  2914. * @glslFunction
  2915. *
  2916. * @param {vec3} toEye A normalized vector from the fragment to the eye in eye coordinates.
  2917. * @param {czm_material} material The fragment's material.
  2918. *
  2919. * @returns {vec4} The computed color.
  2920. *
  2921. * @example
  2922. * vec3 positionToEyeEC = // ...
  2923. * czm_material material = // ...
  2924. * vec3 lightDirectionEC = // ...
  2925. * out_FragColor = czm_phong(normalize(positionToEyeEC), material, lightDirectionEC);
  2926. *
  2927. * @see czm_getMaterial
  2928. */
  2929. vec4 czm_phong(vec3 toEye, czm_material material, vec3 lightDirectionEC)
  2930. {
  2931. // Diffuse from directional light sources at eye (for top-down)
  2932. float diffuse = czm_private_getLambertDiffuseOfMaterial(vec3(0.0, 0.0, 1.0), material);
  2933. if (czm_sceneMode == czm_sceneMode3D) {
  2934. // (and horizon views in 3D)
  2935. diffuse += czm_private_getLambertDiffuseOfMaterial(vec3(0.0, 1.0, 0.0), material);
  2936. }
  2937. float specular = czm_private_getSpecularOfMaterial(lightDirectionEC, toEye, material);
  2938. // Temporary workaround for adding ambient.
  2939. vec3 materialDiffuse = material.diffuse * 0.5;
  2940. vec3 ambient = materialDiffuse;
  2941. vec3 color = ambient + material.emission;
  2942. color += materialDiffuse * diffuse * czm_lightColor;
  2943. color += material.specular * specular * czm_lightColor;
  2944. return vec4(color, material.alpha);
  2945. }
  2946. vec4 czm_private_phong(vec3 toEye, czm_material material, vec3 lightDirectionEC)
  2947. {
  2948. float diffuse = czm_private_getLambertDiffuseOfMaterial(lightDirectionEC, material);
  2949. float specular = czm_private_getSpecularOfMaterial(lightDirectionEC, toEye, material);
  2950. vec3 ambient = vec3(0.0);
  2951. vec3 color = ambient + material.emission;
  2952. color += material.diffuse * diffuse * czm_lightColor;
  2953. color += material.specular * specular * czm_lightColor;
  2954. return vec4(color, material.alpha);
  2955. }
  2956. `;var fFt=T(S(),1),KZ=`/**
  2957. * Computes distance from a point to a plane.
  2958. *
  2959. * @name czm_planeDistance
  2960. * @glslFunction
  2961. *
  2962. * param {vec4} plane A Plane in Hessian Normal Form. See Plane.js
  2963. * param {vec3} point A point in the same space as the plane.
  2964. * returns {float} The distance from the point to the plane.
  2965. */
  2966. float czm_planeDistance(vec4 plane, vec3 point) {
  2967. return (dot(plane.xyz, point) + plane.w);
  2968. }
  2969. /**
  2970. * Computes distance from a point to a plane.
  2971. *
  2972. * @name czm_planeDistance
  2973. * @glslFunction
  2974. *
  2975. * param {vec3} planeNormal Normal for a plane in Hessian Normal Form. See Plane.js
  2976. * param {float} planeDistance Distance for a plane in Hessian Normal form. See Plane.js
  2977. * param {vec3} point A point in the same space as the plane.
  2978. * returns {float} The distance from the point to the plane.
  2979. */
  2980. float czm_planeDistance(vec3 planeNormal, float planeDistance, vec3 point) {
  2981. return (dot(planeNormal, point) + planeDistance);
  2982. }
  2983. `;var bFt=T(S(),1),HZ=`/**
  2984. * Computes the point along a ray at the given time. <code>time</code> can be positive, negative, or zero.
  2985. *
  2986. * @name czm_pointAlongRay
  2987. * @glslFunction
  2988. *
  2989. * @param {czm_ray} ray The ray to compute the point along.
  2990. * @param {float} time The time along the ray.
  2991. *
  2992. * @returns {vec3} The point along the ray at the given time.
  2993. *
  2994. * @example
  2995. * czm_ray ray = czm_ray(vec3(0.0), vec3(1.0, 0.0, 0.0)); // origin, direction
  2996. * vec3 v = czm_pointAlongRay(ray, 2.0); // (2.0, 0.0, 0.0)
  2997. */
  2998. vec3 czm_pointAlongRay(czm_ray ray, float time)
  2999. {
  3000. return ray.origin + (time * ray.direction);
  3001. }
  3002. `;var gFt=T(S(),1),zZ=`/**
  3003. * DOC_TBA
  3004. *
  3005. * @name czm_rayEllipsoidIntersectionInterval
  3006. * @glslFunction
  3007. */
  3008. czm_raySegment czm_rayEllipsoidIntersectionInterval(czm_ray ray, vec3 ellipsoid_center, vec3 ellipsoid_inverseRadii)
  3009. {
  3010. // ray and ellipsoid center in eye coordinates. radii in model coordinates.
  3011. vec3 q = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(ray.origin, 1.0)).xyz;
  3012. vec3 w = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(ray.direction, 0.0)).xyz;
  3013. q = q - ellipsoid_inverseRadii * (czm_inverseModelView * vec4(ellipsoid_center, 1.0)).xyz;
  3014. float q2 = dot(q, q);
  3015. float qw = dot(q, w);
  3016. if (q2 > 1.0) // Outside ellipsoid.
  3017. {
  3018. if (qw >= 0.0) // Looking outward or tangent (0 intersections).
  3019. {
  3020. return czm_emptyRaySegment;
  3021. }
  3022. else // qw < 0.0.
  3023. {
  3024. float qw2 = qw * qw;
  3025. float difference = q2 - 1.0; // Positively valued.
  3026. float w2 = dot(w, w);
  3027. float product = w2 * difference;
  3028. if (qw2 < product) // Imaginary roots (0 intersections).
  3029. {
  3030. return czm_emptyRaySegment;
  3031. }
  3032. else if (qw2 > product) // Distinct roots (2 intersections).
  3033. {
  3034. float discriminant = qw * qw - product;
  3035. float temp = -qw + sqrt(discriminant); // Avoid cancellation.
  3036. float root0 = temp / w2;
  3037. float root1 = difference / temp;
  3038. if (root0 < root1)
  3039. {
  3040. czm_raySegment i = czm_raySegment(root0, root1);
  3041. return i;
  3042. }
  3043. else
  3044. {
  3045. czm_raySegment i = czm_raySegment(root1, root0);
  3046. return i;
  3047. }
  3048. }
  3049. else // qw2 == product. Repeated roots (2 intersections).
  3050. {
  3051. float root = sqrt(difference / w2);
  3052. czm_raySegment i = czm_raySegment(root, root);
  3053. return i;
  3054. }
  3055. }
  3056. }
  3057. else if (q2 < 1.0) // Inside ellipsoid (2 intersections).
  3058. {
  3059. float difference = q2 - 1.0; // Negatively valued.
  3060. float w2 = dot(w, w);
  3061. float product = w2 * difference; // Negatively valued.
  3062. float discriminant = qw * qw - product;
  3063. float temp = -qw + sqrt(discriminant); // Positively valued.
  3064. czm_raySegment i = czm_raySegment(0.0, temp / w2);
  3065. return i;
  3066. }
  3067. else // q2 == 1.0. On ellipsoid.
  3068. {
  3069. if (qw < 0.0) // Looking inward.
  3070. {
  3071. float w2 = dot(w, w);
  3072. czm_raySegment i = czm_raySegment(0.0, -qw / w2);
  3073. return i;
  3074. }
  3075. else // qw >= 0.0. Looking outward or tangent.
  3076. {
  3077. return czm_emptyRaySegment;
  3078. }
  3079. }
  3080. }
  3081. `;var _Ft=T(S(),1),JZ=`/**
  3082. * Compute the intersection interval of a ray with a sphere.
  3083. *
  3084. * @name czm_raySphereIntersectionInterval
  3085. * @glslFunction
  3086. *
  3087. * @param {czm_ray} ray The ray.
  3088. * @param {vec3} center The center of the sphere.
  3089. * @param {float} radius The radius of the sphere.
  3090. * @return {czm_raySegment} The intersection interval of the ray with the sphere.
  3091. */
  3092. czm_raySegment czm_raySphereIntersectionInterval(czm_ray ray, vec3 center, float radius)
  3093. {
  3094. vec3 o = ray.origin;
  3095. vec3 d = ray.direction;
  3096. vec3 oc = o - center;
  3097. float a = dot(d, d);
  3098. float b = 2.0 * dot(d, oc);
  3099. float c = dot(oc, oc) - (radius * radius);
  3100. float det = (b * b) - (4.0 * a * c);
  3101. if (det < 0.0) {
  3102. return czm_emptyRaySegment;
  3103. }
  3104. float sqrtDet = sqrt(det);
  3105. float t0 = (-b - sqrtDet) / (2.0 * a);
  3106. float t1 = (-b + sqrtDet) / (2.0 * a);
  3107. czm_raySegment result = czm_raySegment(t0, t1);
  3108. return result;
  3109. }
  3110. `;var SFt=T(S(),1),QZ=`float czm_readDepth(sampler2D depthTexture, vec2 texCoords)
  3111. {
  3112. return czm_reverseLogDepth(texture(depthTexture, texCoords).r);
  3113. }
  3114. `;var VFt=T(S(),1),jZ=`/**
  3115. * Reads a value previously transformed with {@link czm_writeNonPerspective}
  3116. * by dividing it by \`w\`, the value used in the perspective divide.
  3117. * This function is intended to be called in a fragment shader to access a
  3118. * \`varying\` that should not be subject to perspective interpolation.
  3119. * For example, screen-space texture coordinates. The value should have been
  3120. * previously written in the vertex shader with a call to
  3121. * {@link czm_writeNonPerspective}.
  3122. *
  3123. * @name czm_readNonPerspective
  3124. * @glslFunction
  3125. *
  3126. * @param {float|vec2|vec3|vec4} value The non-perspective value to be read.
  3127. * @param {float} oneOverW One over the perspective divide value, \`w\`. Usually this is simply \`gl_FragCoord.w\`.
  3128. * @returns {float|vec2|vec3|vec4} The usable value.
  3129. */
  3130. float czm_readNonPerspective(float value, float oneOverW) {
  3131. return value * oneOverW;
  3132. }
  3133. vec2 czm_readNonPerspective(vec2 value, float oneOverW) {
  3134. return value * oneOverW;
  3135. }
  3136. vec3 czm_readNonPerspective(vec3 value, float oneOverW) {
  3137. return value * oneOverW;
  3138. }
  3139. vec4 czm_readNonPerspective(vec4 value, float oneOverW) {
  3140. return value * oneOverW;
  3141. }
  3142. `;var RFt=T(S(),1),qZ=`float czm_reverseLogDepth(float logZ)
  3143. {
  3144. #ifdef LOG_DEPTH
  3145. float near = czm_currentFrustum.x;
  3146. float far = czm_currentFrustum.y;
  3147. float log2Depth = logZ * czm_log2FarDepthFromNearPlusOne;
  3148. float depthFromNear = pow(2.0, log2Depth) - 1.0;
  3149. return far * (1.0 - near / (depthFromNear + near)) / (far - near);
  3150. #endif
  3151. return logZ;
  3152. }
  3153. `;var GFt=T(S(),1),$Z=`/**
  3154. * Round a floating point value. This function exists because round() doesn't
  3155. * exist in GLSL 1.00.
  3156. *
  3157. * @param {float|vec2|vec3|vec4} value The value to round
  3158. * @param {float|vec2|vec3|vec3} The rounded value. The type matches the input.
  3159. */
  3160. float czm_round(float value) {
  3161. return floor(value + 0.5);
  3162. }
  3163. vec2 czm_round(vec2 value) {
  3164. return floor(value + 0.5);
  3165. }
  3166. vec3 czm_round(vec3 value) {
  3167. return floor(value + 0.5);
  3168. }
  3169. vec4 czm_round(vec4 value) {
  3170. return floor(value + 0.5);
  3171. }
  3172. `;var XFt=T(S(),1),eG=`/**
  3173. * Samples the 4 neighboring pixels and return the weighted average.
  3174. *
  3175. * @private
  3176. */
  3177. vec3 czm_sampleOctahedralProjectionWithFiltering(sampler2D projectedMap, vec2 textureSize, vec3 direction, float lod)
  3178. {
  3179. direction /= dot(vec3(1.0), abs(direction));
  3180. vec2 rev = abs(direction.zx) - vec2(1.0);
  3181. vec2 neg = vec2(direction.x < 0.0 ? rev.x : -rev.x,
  3182. direction.z < 0.0 ? rev.y : -rev.y);
  3183. vec2 uv = direction.y < 0.0 ? neg : direction.xz;
  3184. vec2 coord = 0.5 * uv + vec2(0.5);
  3185. vec2 pixel = 1.0 / textureSize;
  3186. if (lod > 0.0)
  3187. {
  3188. // Each subseqeuent mip level is half the size
  3189. float scale = 1.0 / pow(2.0, lod);
  3190. float offset = ((textureSize.y + 1.0) / textureSize.x);
  3191. coord.x *= offset;
  3192. coord *= scale;
  3193. coord.x += offset + pixel.x;
  3194. coord.y += (1.0 - (1.0 / pow(2.0, lod - 1.0))) + pixel.y * (lod - 1.0) * 2.0;
  3195. }
  3196. else
  3197. {
  3198. coord.x *= (textureSize.y / textureSize.x);
  3199. }
  3200. // Do bilinear filtering
  3201. #ifndef OES_texture_float_linear
  3202. vec3 color1 = texture(projectedMap, coord + vec2(0.0, pixel.y)).rgb;
  3203. vec3 color2 = texture(projectedMap, coord + vec2(pixel.x, 0.0)).rgb;
  3204. vec3 color3 = texture(projectedMap, coord + pixel).rgb;
  3205. vec3 color4 = texture(projectedMap, coord).rgb;
  3206. vec2 texturePosition = coord * textureSize;
  3207. float fu = fract(texturePosition.x);
  3208. float fv = fract(texturePosition.y);
  3209. vec3 average1 = mix(color4, color2, fu);
  3210. vec3 average2 = mix(color1, color3, fu);
  3211. vec3 color = mix(average1, average2, fv);
  3212. #else
  3213. vec3 color = texture(projectedMap, coord).rgb;
  3214. #endif
  3215. return color;
  3216. }
  3217. /**
  3218. * Samples from a cube map that has been projected using an octahedral projection from the given direction.
  3219. *
  3220. * @name czm_sampleOctahedralProjection
  3221. * @glslFunction
  3222. *
  3223. * @param {sampler2D} projectedMap The texture with the octahedral projected cube map.
  3224. * @param {vec2} textureSize The width and height dimensions in pixels of the projected map.
  3225. * @param {vec3} direction The normalized direction used to sample the cube map.
  3226. * @param {float} lod The level of detail to sample.
  3227. * @param {float} maxLod The maximum level of detail.
  3228. * @returns {vec3} The color of the cube map at the direction.
  3229. */
  3230. vec3 czm_sampleOctahedralProjection(sampler2D projectedMap, vec2 textureSize, vec3 direction, float lod, float maxLod) {
  3231. float currentLod = floor(lod + 0.5);
  3232. float nextLod = min(currentLod + 1.0, maxLod);
  3233. vec3 colorCurrentLod = czm_sampleOctahedralProjectionWithFiltering(projectedMap, textureSize, direction, currentLod);
  3234. vec3 colorNextLod = czm_sampleOctahedralProjectionWithFiltering(projectedMap, textureSize, direction, nextLod);
  3235. return mix(colorNextLod, colorCurrentLod, nextLod - lod);
  3236. }
  3237. `;var WFt=T(S(),1),tG=`/**
  3238. * Adjusts the saturation of a color.
  3239. *
  3240. * @name czm_saturation
  3241. * @glslFunction
  3242. *
  3243. * @param {vec3} rgb The color.
  3244. * @param {float} adjustment The amount to adjust the saturation of the color.
  3245. *
  3246. * @returns {float} The color with the saturation adjusted.
  3247. *
  3248. * @example
  3249. * vec3 greyScale = czm_saturation(color, 0.0);
  3250. * vec3 doubleSaturation = czm_saturation(color, 2.0);
  3251. */
  3252. vec3 czm_saturation(vec3 rgb, float adjustment)
  3253. {
  3254. // Algorithm from Chapter 16 of OpenGL Shading Language
  3255. const vec3 W = vec3(0.2125, 0.7154, 0.0721);
  3256. vec3 intensity = vec3(dot(rgb, W));
  3257. return mix(intensity, rgb, adjustment);
  3258. }
  3259. `;var vFt=T(S(),1),nG=`
  3260. float czm_sampleShadowMap(highp samplerCube shadowMap, vec3 d)
  3261. {
  3262. return czm_unpackDepth(czm_textureCube(shadowMap, d));
  3263. }
  3264. float czm_sampleShadowMap(highp sampler2D shadowMap, vec2 uv)
  3265. {
  3266. #ifdef USE_SHADOW_DEPTH_TEXTURE
  3267. return texture(shadowMap, uv).r;
  3268. #else
  3269. return czm_unpackDepth(texture(shadowMap, uv));
  3270. #endif
  3271. }
  3272. float czm_shadowDepthCompare(samplerCube shadowMap, vec3 uv, float depth)
  3273. {
  3274. return step(depth, czm_sampleShadowMap(shadowMap, uv));
  3275. }
  3276. float czm_shadowDepthCompare(sampler2D shadowMap, vec2 uv, float depth)
  3277. {
  3278. return step(depth, czm_sampleShadowMap(shadowMap, uv));
  3279. }
  3280. `;var FFt=T(S(),1),iG=`
  3281. float czm_private_shadowVisibility(float visibility, float nDotL, float normalShadingSmooth, float darkness)
  3282. {
  3283. #ifdef USE_NORMAL_SHADING
  3284. #ifdef USE_NORMAL_SHADING_SMOOTH
  3285. float strength = clamp(nDotL / normalShadingSmooth, 0.0, 1.0);
  3286. #else
  3287. float strength = step(0.0, nDotL);
  3288. #endif
  3289. visibility *= strength;
  3290. #endif
  3291. visibility = max(visibility, darkness);
  3292. return visibility;
  3293. }
  3294. #ifdef USE_CUBE_MAP_SHADOW
  3295. float czm_shadowVisibility(samplerCube shadowMap, czm_shadowParameters shadowParameters)
  3296. {
  3297. float depthBias = shadowParameters.depthBias;
  3298. float depth = shadowParameters.depth;
  3299. float nDotL = shadowParameters.nDotL;
  3300. float normalShadingSmooth = shadowParameters.normalShadingSmooth;
  3301. float darkness = shadowParameters.darkness;
  3302. vec3 uvw = shadowParameters.texCoords;
  3303. depth -= depthBias;
  3304. float visibility = czm_shadowDepthCompare(shadowMap, uvw, depth);
  3305. return czm_private_shadowVisibility(visibility, nDotL, normalShadingSmooth, darkness);
  3306. }
  3307. #else
  3308. float czm_shadowVisibility(sampler2D shadowMap, czm_shadowParameters shadowParameters)
  3309. {
  3310. float depthBias = shadowParameters.depthBias;
  3311. float depth = shadowParameters.depth;
  3312. float nDotL = shadowParameters.nDotL;
  3313. float normalShadingSmooth = shadowParameters.normalShadingSmooth;
  3314. float darkness = shadowParameters.darkness;
  3315. vec2 uv = shadowParameters.texCoords;
  3316. depth -= depthBias;
  3317. #ifdef USE_SOFT_SHADOWS
  3318. vec2 texelStepSize = shadowParameters.texelStepSize;
  3319. float radius = 1.0;
  3320. float dx0 = -texelStepSize.x * radius;
  3321. float dy0 = -texelStepSize.y * radius;
  3322. float dx1 = texelStepSize.x * radius;
  3323. float dy1 = texelStepSize.y * radius;
  3324. float visibility = (
  3325. czm_shadowDepthCompare(shadowMap, uv, depth) +
  3326. czm_shadowDepthCompare(shadowMap, uv + vec2(dx0, dy0), depth) +
  3327. czm_shadowDepthCompare(shadowMap, uv + vec2(0.0, dy0), depth) +
  3328. czm_shadowDepthCompare(shadowMap, uv + vec2(dx1, dy0), depth) +
  3329. czm_shadowDepthCompare(shadowMap, uv + vec2(dx0, 0.0), depth) +
  3330. czm_shadowDepthCompare(shadowMap, uv + vec2(dx1, 0.0), depth) +
  3331. czm_shadowDepthCompare(shadowMap, uv + vec2(dx0, dy1), depth) +
  3332. czm_shadowDepthCompare(shadowMap, uv + vec2(0.0, dy1), depth) +
  3333. czm_shadowDepthCompare(shadowMap, uv + vec2(dx1, dy1), depth)
  3334. ) * (1.0 / 9.0);
  3335. #else
  3336. float visibility = czm_shadowDepthCompare(shadowMap, uv, depth);
  3337. #endif
  3338. return czm_private_shadowVisibility(visibility, nDotL, normalShadingSmooth, darkness);
  3339. }
  3340. #endif
  3341. `;var MFt=T(S(),1),oG=`/**
  3342. * Returns 1.0 if the given value is positive or zero, and -1.0 if it is negative. This is similar to the GLSL
  3343. * built-in function <code>sign</code> except that returns 1.0 instead of 0.0 when the input value is 0.0.
  3344. *
  3345. * @name czm_signNotZero
  3346. * @glslFunction
  3347. *
  3348. * @param {} value The value for which to determine the sign.
  3349. * @returns {} 1.0 if the value is positive or zero, -1.0 if the value is negative.
  3350. */
  3351. float czm_signNotZero(float value)
  3352. {
  3353. return value >= 0.0 ? 1.0 : -1.0;
  3354. }
  3355. vec2 czm_signNotZero(vec2 value)
  3356. {
  3357. return vec2(czm_signNotZero(value.x), czm_signNotZero(value.y));
  3358. }
  3359. vec3 czm_signNotZero(vec3 value)
  3360. {
  3361. return vec3(czm_signNotZero(value.x), czm_signNotZero(value.y), czm_signNotZero(value.z));
  3362. }
  3363. vec4 czm_signNotZero(vec4 value)
  3364. {
  3365. return vec4(czm_signNotZero(value.x), czm_signNotZero(value.y), czm_signNotZero(value.z), czm_signNotZero(value.w));
  3366. }
  3367. `;var UFt=T(S(),1),rG=`/**
  3368. * Computes a color from the third order spherical harmonic coefficients and a normalized direction vector.
  3369. * <p>
  3370. * The order of the coefficients is [L00, L1_1, L10, L11, L2_2, L2_1, L20, L21, L22].
  3371. * </p>
  3372. *
  3373. * @name czm_sphericalHarmonics
  3374. * @glslFunction
  3375. *
  3376. * @param {vec3} normal The normalized direction.
  3377. * @param {vec3[9]} coefficients The third order spherical harmonic coefficients.
  3378. * @returns {vec3} The color at the direction.
  3379. *
  3380. * @see https://graphics.stanford.edu/papers/envmap/envmap.pdf
  3381. */
  3382. vec3 czm_sphericalHarmonics(vec3 normal, vec3 coefficients[9])
  3383. {
  3384. vec3 L00 = coefficients[0];
  3385. vec3 L1_1 = coefficients[1];
  3386. vec3 L10 = coefficients[2];
  3387. vec3 L11 = coefficients[3];
  3388. vec3 L2_2 = coefficients[4];
  3389. vec3 L2_1 = coefficients[5];
  3390. vec3 L20 = coefficients[6];
  3391. vec3 L21 = coefficients[7];
  3392. vec3 L22 = coefficients[8];
  3393. float x = normal.x;
  3394. float y = normal.y;
  3395. float z = normal.z;
  3396. return
  3397. L00
  3398. + L1_1 * y
  3399. + L10 * z
  3400. + L11 * x
  3401. + L2_2 * (y * x)
  3402. + L2_1 * (y * z)
  3403. + L20 * (3.0 * z * z - 1.0)
  3404. + L21 * (z * x)
  3405. + L22 * (x * x - y * y);
  3406. }
  3407. `;var DFt=T(S(),1),sG=`/**
  3408. * Converts an sRGB color to a linear RGB color.
  3409. *
  3410. * @param {vec3|vec4} srgbIn The color in sRGB space
  3411. * @returns {vec3|vec4} The color in linear color space. The vector type matches the input.
  3412. */
  3413. vec3 czm_srgbToLinear(vec3 srgbIn)
  3414. {
  3415. return pow(srgbIn, vec3(2.2));
  3416. }
  3417. vec4 czm_srgbToLinear(vec4 srgbIn)
  3418. {
  3419. vec3 linearOut = pow(srgbIn.rgb, vec3(2.2));
  3420. return vec4(linearOut, srgbIn.a);
  3421. }
  3422. `;var YFt=T(S(),1),aG=`/**
  3423. * Creates a matrix that transforms vectors from tangent space to eye space.
  3424. *
  3425. * @name czm_tangentToEyeSpaceMatrix
  3426. * @glslFunction
  3427. *
  3428. * @param {vec3} normalEC The normal vector in eye coordinates.
  3429. * @param {vec3} tangentEC The tangent vector in eye coordinates.
  3430. * @param {vec3} bitangentEC The bitangent vector in eye coordinates.
  3431. *
  3432. * @returns {mat3} The matrix that transforms from tangent space to eye space.
  3433. *
  3434. * @example
  3435. * mat3 tangentToEye = czm_tangentToEyeSpaceMatrix(normalEC, tangentEC, bitangentEC);
  3436. * vec3 normal = tangentToEye * texture(normalMap, st).xyz;
  3437. */
  3438. mat3 czm_tangentToEyeSpaceMatrix(vec3 normalEC, vec3 tangentEC, vec3 bitangentEC)
  3439. {
  3440. vec3 normal = normalize(normalEC);
  3441. vec3 tangent = normalize(tangentEC);
  3442. vec3 bitangent = normalize(bitangentEC);
  3443. return mat3(tangent.x , tangent.y , tangent.z,
  3444. bitangent.x, bitangent.y, bitangent.z,
  3445. normal.x , normal.y , normal.z);
  3446. }
  3447. `;var KFt=T(S(),1),cG=`/**
  3448. * A wrapper around the texture (WebGL2) / textureCube (WebGL1)
  3449. * function to allow for WebGL 1 support.
  3450. *
  3451. * @name czm_textureCube
  3452. * @glslFunction
  3453. *
  3454. * @param {samplerCube} sampler The sampler.
  3455. * @param {vec3} p The coordinates to sample the texture at.
  3456. */
  3457. vec4 czm_textureCube(samplerCube sampler, vec3 p) {
  3458. #if __VERSION__ == 300
  3459. return texture(sampler, p);
  3460. #else
  3461. return textureCube(sampler, p);
  3462. #endif
  3463. }`;var zFt=T(S(),1),lG=`/**
  3464. * Transforms a plane.
  3465. *
  3466. * @name czm_transformPlane
  3467. * @glslFunction
  3468. *
  3469. * @param {vec4} plane The plane in Hessian Normal Form.
  3470. * @param {mat4} transform The inverse-transpose of a transformation matrix.
  3471. */
  3472. vec4 czm_transformPlane(vec4 plane, mat4 transform) {
  3473. vec4 transformedPlane = transform * plane;
  3474. // Convert the transformed plane to Hessian Normal Form
  3475. float normalMagnitude = length(transformedPlane.xyz);
  3476. return transformedPlane / normalMagnitude;
  3477. }
  3478. `;var QFt=T(S(),1),dG=`/**
  3479. * Translates a position (or any <code>vec3</code>) that was encoded with {@link EncodedCartesian3},
  3480. * and then provided to the shader as separate <code>high</code> and <code>low</code> bits to
  3481. * be relative to the eye. As shown in the example, the position can then be transformed in eye
  3482. * or clip coordinates using {@link czm_modelViewRelativeToEye} or {@link czm_modelViewProjectionRelativeToEye},
  3483. * respectively.
  3484. * <p>
  3485. * This technique, called GPU RTE, eliminates jittering artifacts when using large coordinates as
  3486. * described in {@link http://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm|Precisions, Precisions}.
  3487. * </p>
  3488. *
  3489. * @name czm_translateRelativeToEye
  3490. * @glslFunction
  3491. *
  3492. * @param {vec3} high The position's high bits.
  3493. * @param {vec3} low The position's low bits.
  3494. * @returns {vec3} The position translated to be relative to the camera's position.
  3495. *
  3496. * @example
  3497. * in vec3 positionHigh;
  3498. * in vec3 positionLow;
  3499. *
  3500. * void main()
  3501. * {
  3502. * vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);
  3503. * gl_Position = czm_modelViewProjectionRelativeToEye * p;
  3504. * }
  3505. *
  3506. * @see czm_modelViewRelativeToEye
  3507. * @see czm_modelViewProjectionRelativeToEye
  3508. * @see czm_computePosition
  3509. * @see EncodedCartesian3
  3510. */
  3511. vec4 czm_translateRelativeToEye(vec3 high, vec3 low)
  3512. {
  3513. vec3 highDifference = high - czm_encodedCameraPositionMCHigh;
  3514. vec3 lowDifference = low - czm_encodedCameraPositionMCLow;
  3515. return vec4(highDifference + lowDifference, 1.0);
  3516. }
  3517. `;var qFt=T(S(),1),uG=`/**
  3518. * @private
  3519. */
  3520. vec4 czm_translucentPhong(vec3 toEye, czm_material material, vec3 lightDirectionEC)
  3521. {
  3522. // Diffuse from directional light sources at eye (for top-down and horizon views)
  3523. float diffuse = czm_getLambertDiffuse(vec3(0.0, 0.0, 1.0), material.normal);
  3524. if (czm_sceneMode == czm_sceneMode3D) {
  3525. // (and horizon views in 3D)
  3526. diffuse += czm_getLambertDiffuse(vec3(0.0, 1.0, 0.0), material.normal);
  3527. }
  3528. diffuse = clamp(diffuse, 0.0, 1.0);
  3529. float specular = czm_getSpecular(lightDirectionEC, toEye, material.normal, material.shininess);
  3530. // Temporary workaround for adding ambient.
  3531. vec3 materialDiffuse = material.diffuse * 0.5;
  3532. vec3 ambient = materialDiffuse;
  3533. vec3 color = ambient + material.emission;
  3534. color += materialDiffuse * diffuse * czm_lightColor;
  3535. color += material.specular * specular * czm_lightColor;
  3536. return vec4(color, material.alpha);
  3537. }
  3538. `;var e9t=T(S(),1),mG=`/**
  3539. * Returns the transpose of the matrix. The input <code>matrix</code> can be
  3540. * a <code>mat2</code>, <code>mat3</code>, or <code>mat4</code>.
  3541. *
  3542. * @name czm_transpose
  3543. * @glslFunction
  3544. *
  3545. * @param {} matrix The matrix to transpose.
  3546. *
  3547. * @returns {} The transposed matrix.
  3548. *
  3549. * @example
  3550. * // GLSL declarations
  3551. * mat2 czm_transpose(mat2 matrix);
  3552. * mat3 czm_transpose(mat3 matrix);
  3553. * mat4 czm_transpose(mat4 matrix);
  3554. *
  3555. * // Transpose a 3x3 rotation matrix to find its inverse.
  3556. * mat3 eastNorthUpToEye = czm_eastNorthUpToEyeCoordinates(
  3557. * positionMC, normalEC);
  3558. * mat3 eyeToEastNorthUp = czm_transpose(eastNorthUpToEye);
  3559. */
  3560. mat2 czm_transpose(mat2 matrix)
  3561. {
  3562. return mat2(
  3563. matrix[0][0], matrix[1][0],
  3564. matrix[0][1], matrix[1][1]);
  3565. }
  3566. mat3 czm_transpose(mat3 matrix)
  3567. {
  3568. return mat3(
  3569. matrix[0][0], matrix[1][0], matrix[2][0],
  3570. matrix[0][1], matrix[1][1], matrix[2][1],
  3571. matrix[0][2], matrix[1][2], matrix[2][2]);
  3572. }
  3573. mat4 czm_transpose(mat4 matrix)
  3574. {
  3575. return mat4(
  3576. matrix[0][0], matrix[1][0], matrix[2][0], matrix[3][0],
  3577. matrix[0][1], matrix[1][1], matrix[2][1], matrix[3][1],
  3578. matrix[0][2], matrix[1][2], matrix[2][2], matrix[3][2],
  3579. matrix[0][3], matrix[1][3], matrix[2][3], matrix[3][3]);
  3580. }
  3581. `;var n9t=T(S(),1),hG=`/**
  3582. * Unpacks a vec4 depth value to a float in [0, 1) range.
  3583. *
  3584. * @name czm_unpackDepth
  3585. * @glslFunction
  3586. *
  3587. * @param {vec4} packedDepth The packed depth.
  3588. *
  3589. * @returns {float} The floating-point depth in [0, 1) range.
  3590. */
  3591. float czm_unpackDepth(vec4 packedDepth)
  3592. {
  3593. // See Aras Pranckevi\u010Dius' post Encoding Floats to RGBA
  3594. // http://aras-p.info/blog/2009/07/30/encoding-floats-to-rgba-the-final/
  3595. return dot(packedDepth, vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0));
  3596. }
  3597. `;var o9t=T(S(),1),fG=`/**
  3598. * Unpack an IEEE 754 single-precision float that is packed as a little-endian unsigned normalized vec4.
  3599. *
  3600. * @name czm_unpackFloat
  3601. * @glslFunction
  3602. *
  3603. * @param {vec4} packedFloat The packed float.
  3604. *
  3605. * @returns {float} The floating-point depth in arbitrary range.
  3606. */
  3607. float czm_unpackFloat(vec4 packedFloat)
  3608. {
  3609. // Convert to [0.0, 255.0] and round to integer
  3610. packedFloat = floor(packedFloat * 255.0 + 0.5);
  3611. float sign = 1.0 - step(128.0, packedFloat[3]) * 2.0;
  3612. float exponent = 2.0 * mod(packedFloat[3], 128.0) + step(128.0, packedFloat[2]) - 127.0;
  3613. if (exponent == -127.0)
  3614. {
  3615. return 0.0;
  3616. }
  3617. float mantissa = mod(packedFloat[2], 128.0) * 65536.0 + packedFloat[1] * 256.0 + packedFloat[0] + float(0x800000);
  3618. float result = sign * exp2(exponent - 23.0) * mantissa;
  3619. return result;
  3620. }
  3621. `;var s9t=T(S(),1),pG=`/**
  3622. * Unpack unsigned integers of 1-4 bytes. in WebGL 1, there is no uint type,
  3623. * so the return value is an int.
  3624. * <p>
  3625. * There are also precision limitations in WebGL 1. highp int is still limited
  3626. * to 24 bits. Above the value of 2^24 = 16777216, precision loss may occur.
  3627. * </p>
  3628. *
  3629. * @param {float|vec2|vec3|vec4} packed The packed value. For vectors, the components are listed in little-endian order.
  3630. *
  3631. * @return {int} The unpacked value.
  3632. */
  3633. int czm_unpackUint(float packedValue) {
  3634. float rounded = czm_round(packedValue * 255.0);
  3635. return int(rounded);
  3636. }
  3637. int czm_unpackUint(vec2 packedValue) {
  3638. vec2 rounded = czm_round(packedValue * 255.0);
  3639. return int(dot(rounded, vec2(1.0, 256.0)));
  3640. }
  3641. int czm_unpackUint(vec3 packedValue) {
  3642. vec3 rounded = czm_round(packedValue * 255.0);
  3643. return int(dot(rounded, vec3(1.0, 256.0, 65536.0)));
  3644. }
  3645. int czm_unpackUint(vec4 packedValue) {
  3646. vec4 rounded = czm_round(packedValue * 255.0);
  3647. return int(dot(rounded, vec4(1.0, 256.0, 65536.0, 16777216.0)));
  3648. }
  3649. `;var c9t=T(S(),1),bG=`/**
  3650. * Transform metadata values following the EXT_structural_metadata spec
  3651. * by multiplying by scale and adding the offset. Operations are always
  3652. * performed component-wise, even for matrices.
  3653. *
  3654. * @param {float|vec2|vec3|vec4|mat2|mat3|mat4} offset The offset to add
  3655. * @param {float|vec2|vec3|vec4|mat2|mat3|mat4} scale The scale factor to multiply
  3656. * @param {float|vec2|vec3|vec4|mat2|mat3|mat4} value The original value.
  3657. *
  3658. * @return {float|vec2|vec3|vec4|mat2|mat3|mat4} The transformed value of the same scalar/vector/matrix type as the input.
  3659. */
  3660. float czm_valueTransform(float offset, float scale, float value) {
  3661. return scale * value + offset;
  3662. }
  3663. vec2 czm_valueTransform(vec2 offset, vec2 scale, vec2 value) {
  3664. return scale * value + offset;
  3665. }
  3666. vec3 czm_valueTransform(vec3 offset, vec3 scale, vec3 value) {
  3667. return scale * value + offset;
  3668. }
  3669. vec4 czm_valueTransform(vec4 offset, vec4 scale, vec4 value) {
  3670. return scale * value + offset;
  3671. }
  3672. mat2 czm_valueTransform(mat2 offset, mat2 scale, mat2 value) {
  3673. return matrixCompMult(scale, value) + offset;
  3674. }
  3675. mat3 czm_valueTransform(mat3 offset, mat3 scale, mat3 value) {
  3676. return matrixCompMult(scale, value) + offset;
  3677. }
  3678. mat4 czm_valueTransform(mat4 offset, mat4 scale, mat4 value) {
  3679. return matrixCompMult(scale, value) + offset;
  3680. }
  3681. `;var d9t=T(S(),1),yG=`#ifdef LOG_DEPTH
  3682. // 1.0 at the near plane, increasing linearly from there.
  3683. out float v_depthFromNearPlusOne;
  3684. #ifdef SHADOW_MAP
  3685. out vec3 v_logPositionEC;
  3686. #endif
  3687. #endif
  3688. vec4 czm_updatePositionDepth(vec4 coords) {
  3689. #if defined(LOG_DEPTH)
  3690. #ifdef SHADOW_MAP
  3691. vec3 logPositionEC = (czm_inverseProjection * coords).xyz;
  3692. v_logPositionEC = logPositionEC;
  3693. #endif
  3694. // With the very high far/near ratios used with the logarithmic depth
  3695. // buffer, floating point rounding errors can cause linear depth values
  3696. // to end up on the wrong side of the far plane, even for vertices that
  3697. // are really nowhere near it. Since we always write a correct logarithmic
  3698. // depth value in the fragment shader anyway, we just need to make sure
  3699. // such errors don't cause the primitive to be clipped entirely before
  3700. // we even get to the fragment shader.
  3701. coords.z = clamp(coords.z / coords.w, -1.0, 1.0) * coords.w;
  3702. #endif
  3703. return coords;
  3704. }
  3705. /**
  3706. * Writes the logarithmic depth to gl_Position using the already computed gl_Position.
  3707. *
  3708. * @name czm_vertexLogDepth
  3709. * @glslFunction
  3710. */
  3711. void czm_vertexLogDepth()
  3712. {
  3713. #ifdef LOG_DEPTH
  3714. v_depthFromNearPlusOne = (gl_Position.w - czm_currentFrustum.x) + 1.0;
  3715. gl_Position = czm_updatePositionDepth(gl_Position);
  3716. #endif
  3717. }
  3718. /**
  3719. * Writes the logarithmic depth to gl_Position using the provided clip coordinates.
  3720. * <p>
  3721. * An example use case for this function would be moving the vertex in window coordinates
  3722. * before converting back to clip coordinates. Use the original vertex clip coordinates.
  3723. * </p>
  3724. * @name czm_vertexLogDepth
  3725. * @glslFunction
  3726. *
  3727. * @param {vec4} clipCoords The vertex in clip coordinates.
  3728. *
  3729. * @example
  3730. * czm_vertexLogDepth(czm_projection * vec4(positionEyeCoordinates, 1.0));
  3731. */
  3732. void czm_vertexLogDepth(vec4 clipCoords)
  3733. {
  3734. #ifdef LOG_DEPTH
  3735. v_depthFromNearPlusOne = (clipCoords.w - czm_currentFrustum.x) + 1.0;
  3736. czm_updatePositionDepth(clipCoords);
  3737. #endif
  3738. }
  3739. `;var m9t=T(S(),1),gG=`vec4 czm_screenToEyeCoordinates(vec4 screenCoordinate)
  3740. {
  3741. // Reconstruct NDC coordinates
  3742. float x = 2.0 * screenCoordinate.x - 1.0;
  3743. float y = 2.0 * screenCoordinate.y - 1.0;
  3744. float z = (screenCoordinate.z - czm_viewportTransformation[3][2]) / czm_viewportTransformation[2][2];
  3745. vec4 q = vec4(x, y, z, 1.0);
  3746. // Reverse the perspective division to obtain clip coordinates.
  3747. q /= screenCoordinate.w;
  3748. // Reverse the projection transformation to obtain eye coordinates.
  3749. if (!(czm_inverseProjection == mat4(0.0))) // IE and Edge sometimes do something weird with != between mat4s
  3750. {
  3751. q = czm_inverseProjection * q;
  3752. }
  3753. else
  3754. {
  3755. float top = czm_frustumPlanes.x;
  3756. float bottom = czm_frustumPlanes.y;
  3757. float left = czm_frustumPlanes.z;
  3758. float right = czm_frustumPlanes.w;
  3759. float near = czm_currentFrustum.x;
  3760. float far = czm_currentFrustum.y;
  3761. q.x = (q.x * (right - left) + left + right) * 0.5;
  3762. q.y = (q.y * (top - bottom) + bottom + top) * 0.5;
  3763. q.z = (q.z * (near - far) - near - far) * 0.5;
  3764. q.w = 1.0;
  3765. }
  3766. return q;
  3767. }
  3768. /**
  3769. * Transforms a position from window to eye coordinates.
  3770. * The transform from window to normalized device coordinates is done using components
  3771. * of (@link czm_viewport} and {@link czm_viewportTransformation} instead of calculating
  3772. * the inverse of <code>czm_viewportTransformation</code>. The transformation from
  3773. * normalized device coordinates to clip coordinates is done using <code>fragmentCoordinate.w</code>,
  3774. * which is expected to be the scalar used in the perspective divide. The transformation
  3775. * from clip to eye coordinates is done using {@link czm_inverseProjection}.
  3776. *
  3777. * @name czm_windowToEyeCoordinates
  3778. * @glslFunction
  3779. *
  3780. * @param {vec4} fragmentCoordinate The position in window coordinates to transform.
  3781. *
  3782. * @returns {vec4} The transformed position in eye coordinates.
  3783. *
  3784. * @see czm_modelToWindowCoordinates
  3785. * @see czm_eyeToWindowCoordinates
  3786. * @see czm_inverseProjection
  3787. * @see czm_viewport
  3788. * @see czm_viewportTransformation
  3789. *
  3790. * @example
  3791. * vec4 positionEC = czm_windowToEyeCoordinates(gl_FragCoord);
  3792. */
  3793. vec4 czm_windowToEyeCoordinates(vec4 fragmentCoordinate)
  3794. {
  3795. vec2 screenCoordXY = (fragmentCoordinate.xy - czm_viewport.xy) / czm_viewport.zw;
  3796. return czm_screenToEyeCoordinates(vec4(screenCoordXY, fragmentCoordinate.zw));
  3797. }
  3798. vec4 czm_screenToEyeCoordinates(vec2 screenCoordinateXY, float depthOrLogDepth)
  3799. {
  3800. // See reverseLogDepth.glsl. This is separate to re-use the pow.
  3801. #if defined(LOG_DEPTH) || defined(LOG_DEPTH_READ_ONLY)
  3802. float near = czm_currentFrustum.x;
  3803. float far = czm_currentFrustum.y;
  3804. float log2Depth = depthOrLogDepth * czm_log2FarDepthFromNearPlusOne;
  3805. float depthFromNear = pow(2.0, log2Depth) - 1.0;
  3806. float depthFromCamera = depthFromNear + near;
  3807. vec4 screenCoord = vec4(screenCoordinateXY, far * (1.0 - near / depthFromCamera) / (far - near), 1.0);
  3808. vec4 eyeCoordinate = czm_screenToEyeCoordinates(screenCoord);
  3809. eyeCoordinate.w = 1.0 / depthFromCamera; // Better precision
  3810. return eyeCoordinate;
  3811. #else
  3812. vec4 screenCoord = vec4(screenCoordinateXY, depthOrLogDepth, 1.0);
  3813. vec4 eyeCoordinate = czm_screenToEyeCoordinates(screenCoord);
  3814. #endif
  3815. return eyeCoordinate;
  3816. }
  3817. /**
  3818. * Transforms a position given as window x/y and a depth or a log depth from window to eye coordinates.
  3819. * This function produces more accurate results for window positions with log depth than
  3820. * conventionally unpacking the log depth using czm_reverseLogDepth and using the standard version
  3821. * of czm_windowToEyeCoordinates.
  3822. *
  3823. * @name czm_windowToEyeCoordinates
  3824. * @glslFunction
  3825. *
  3826. * @param {vec2} fragmentCoordinateXY The XY position in window coordinates to transform.
  3827. * @param {float} depthOrLogDepth A depth or log depth for the fragment.
  3828. *
  3829. * @see czm_modelToWindowCoordinates
  3830. * @see czm_eyeToWindowCoordinates
  3831. * @see czm_inverseProjection
  3832. * @see czm_viewport
  3833. * @see czm_viewportTransformation
  3834. *
  3835. * @returns {vec4} The transformed position in eye coordinates.
  3836. */
  3837. vec4 czm_windowToEyeCoordinates(vec2 fragmentCoordinateXY, float depthOrLogDepth)
  3838. {
  3839. vec2 screenCoordXY = (fragmentCoordinateXY.xy - czm_viewport.xy) / czm_viewport.zw;
  3840. return czm_screenToEyeCoordinates(screenCoordXY, depthOrLogDepth);
  3841. }
  3842. `;var f9t=T(S(),1),xG=`// emulated noperspective
  3843. #if !defined(LOG_DEPTH)
  3844. in float v_WindowZ;
  3845. #endif
  3846. /**
  3847. * Emulates GL_DEPTH_CLAMP. Clamps a fragment to the near and far plane
  3848. * by writing the fragment's depth. See czm_depthClamp for more details.
  3849. *
  3850. * @name czm_writeDepthClamp
  3851. * @glslFunction
  3852. *
  3853. * @example
  3854. * out_FragColor = color;
  3855. * czm_writeDepthClamp();
  3856. *
  3857. * @see czm_depthClamp
  3858. */
  3859. void czm_writeDepthClamp()
  3860. {
  3861. #if (!defined(LOG_DEPTH) && (__VERSION__ == 300 || defined(GL_EXT_frag_depth)))
  3862. gl_FragDepth = clamp(v_WindowZ * gl_FragCoord.w, 0.0, 1.0);
  3863. #endif
  3864. }
  3865. `;var b9t=T(S(),1),_G=`#ifdef LOG_DEPTH
  3866. in float v_depthFromNearPlusOne;
  3867. #ifdef POLYGON_OFFSET
  3868. uniform vec2 u_polygonOffset;
  3869. #endif
  3870. #endif
  3871. /**
  3872. * Writes the fragment depth to the logarithmic depth buffer.
  3873. * <p>
  3874. * Use this when the vertex shader does not call {@link czm_vertexlogDepth}, for example, when
  3875. * ray-casting geometry using a full screen quad.
  3876. * </p>
  3877. * @name czm_writeLogDepth
  3878. * @glslFunction
  3879. *
  3880. * @param {float} depth The depth coordinate, where 1.0 is on the near plane and
  3881. * depth increases in eye-space units from there
  3882. *
  3883. * @example
  3884. * czm_writeLogDepth((czm_projection * v_positionEyeCoordinates).w + 1.0);
  3885. */
  3886. void czm_writeLogDepth(float depth)
  3887. {
  3888. #if (defined(LOG_DEPTH) && (__VERSION__ == 300 || defined(GL_EXT_frag_depth)))
  3889. // Discard the vertex if it's not between the near and far planes.
  3890. // We allow a bit of epsilon on the near plane comparison because a 1.0
  3891. // from the vertex shader (indicating the vertex should be _on_ the near
  3892. // plane) will not necessarily come here as exactly 1.0.
  3893. if (depth <= 0.9999999 || depth > czm_farDepthFromNearPlusOne) {
  3894. discard;
  3895. }
  3896. #ifdef POLYGON_OFFSET
  3897. // Polygon offset: m * factor + r * units
  3898. float factor = u_polygonOffset[0];
  3899. float units = u_polygonOffset[1];
  3900. #if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives))
  3901. // This factor doesn't work in IE 10
  3902. if (factor != 0.0) {
  3903. // m = sqrt(dZdX^2 + dZdY^2);
  3904. float x = dFdx(depth);
  3905. float y = dFdy(depth);
  3906. float m = sqrt(x * x + y * y);
  3907. // Apply the factor before computing the log depth.
  3908. depth += m * factor;
  3909. }
  3910. #endif
  3911. #endif
  3912. gl_FragDepth = log2(depth) * czm_oneOverLog2FarDepthFromNearPlusOne;
  3913. #ifdef POLYGON_OFFSET
  3914. // Apply the units after the log depth.
  3915. gl_FragDepth += czm_epsilon7 * units;
  3916. #endif
  3917. #endif
  3918. }
  3919. /**
  3920. * Writes the fragment depth to the logarithmic depth buffer.
  3921. * <p>
  3922. * Use this when the vertex shader calls {@link czm_vertexlogDepth}.
  3923. * </p>
  3924. *
  3925. * @name czm_writeLogDepth
  3926. * @glslFunction
  3927. */
  3928. void czm_writeLogDepth() {
  3929. #ifdef LOG_DEPTH
  3930. czm_writeLogDepth(v_depthFromNearPlusOne);
  3931. #endif
  3932. }
  3933. `;var g9t=T(S(),1),TG=`/**
  3934. * Transforms a value for non-perspective interpolation by multiplying
  3935. * it by w, the value used in the perspective divide. This function is
  3936. * intended to be called in a vertex shader to compute the value of a
  3937. * \`varying\` that should not be subject to perspective interpolation.
  3938. * For example, screen-space texture coordinates. The fragment shader
  3939. * must call {@link czm_readNonPerspective} to retrieve the final
  3940. * non-perspective value.
  3941. *
  3942. * @name czm_writeNonPerspective
  3943. * @glslFunction
  3944. *
  3945. * @param {float|vec2|vec3|vec4} value The value to be interpolated without accounting for perspective.
  3946. * @param {float} w The perspective divide value. Usually this is the computed \`gl_Position.w\`.
  3947. * @returns {float|vec2|vec3|vec4} The transformed value, intended to be stored in a \`varying\` and read in the
  3948. * fragment shader with {@link czm_readNonPerspective}.
  3949. */
  3950. float czm_writeNonPerspective(float value, float w) {
  3951. return value * w;
  3952. }
  3953. vec2 czm_writeNonPerspective(vec2 value, float w) {
  3954. return value * w;
  3955. }
  3956. vec3 czm_writeNonPerspective(vec3 value, float w) {
  3957. return value * w;
  3958. }
  3959. vec4 czm_writeNonPerspective(vec4 value, float w) {
  3960. return value * w;
  3961. }
  3962. `;var Mg={czm_degreesPerRadian:$L,czm_depthRange:eR,czm_epsilon1:tR,czm_epsilon2:nR,czm_epsilon3:iR,czm_epsilon4:oR,czm_epsilon5:rR,czm_epsilon6:sR,czm_epsilon7:aR,czm_infinity:cR,czm_oneOverPi:lR,czm_oneOverTwoPi:dR,czm_passCesium3DTile:uR,czm_passCesium3DTileClassification:mR,czm_passCesium3DTileClassificationIgnoreShow:hR,czm_passClassification:fR,czm_passCompute:pR,czm_passEnvironment:bR,czm_passGlobe:yR,czm_passOpaque:gR,czm_passOverlay:xR,czm_passTerrainClassification:_R,czm_passTranslucent:TR,czm_passVoxels:SR,czm_pi:CR,czm_piOverFour:VR,czm_piOverSix:LR,czm_piOverThree:RR,czm_piOverTwo:ZR,czm_radiansPerDegree:GR,czm_sceneMode2D:ER,czm_sceneMode3D:XR,czm_sceneModeColumbusView:IR,czm_sceneModeMorphing:WR,czm_solarRadius:PR,czm_threePiOver2:vR,czm_twoPi:wR,czm_webMercatorMaxLatitude:FR,czm_depthRangeStruct:AR,czm_material:MR,czm_materialInput:NR,czm_modelMaterial:UR,czm_modelVertexOutput:kR,czm_pbrParameters:DR,czm_ray:BR,czm_raySegment:YR,czm_shadowParameters:OR,czm_HSBToRGB:KR,czm_HSLToRGB:HR,czm_RGBToHSB:zR,czm_RGBToHSL:JR,czm_RGBToXYZ:QR,czm_XYZToRGB:jR,czm_acesTonemapping:qR,czm_alphaWeight:$R,czm_antialias:eZ,czm_approximateSphericalCoordinates:tZ,czm_backFacing:nZ,czm_branchFreeTernary:iZ,czm_cascadeColor:oZ,czm_cascadeDistance:rZ,czm_cascadeMatrix:sZ,czm_cascadeWeights:aZ,czm_columbusViewMorph:cZ,czm_computePosition:lZ,czm_cosineAndSine:dZ,czm_decompressTextureCoordinates:uZ,czm_defaultPbrMaterial:mZ,czm_depthClamp:hZ,czm_eastNorthUpToEyeCoordinates:fZ,czm_ellipsoidContainsPoint:pZ,czm_ellipsoidWgs84TextureCoordinates:bZ,czm_equalsEpsilon:yZ,czm_eyeOffset:gZ,czm_eyeToWindowCoordinates:xZ,czm_fastApproximateAtan:_Z,czm_fog:TZ,czm_gammaCorrect:SZ,czm_geodeticSurfaceNormal:CZ,czm_getDefaultMaterial:VZ,czm_getLambertDiffuse:LZ,czm_getSpecular:RZ,czm_getWaterNoise:ZZ,czm_hue:GZ,czm_inverseGamma:EZ,czm_isEmpty:XZ,czm_isFull:IZ,czm_latitudeToWebMercatorFraction:WZ,czm_lineDistance:PZ,czm_linearToSrgb:vZ,czm_luminance:wZ,czm_metersPerPixel:FZ,czm_modelToWindowCoordinates:AZ,czm_multiplyWithColorBalance:MZ,czm_nearFarScalar:NZ,czm_octDecode:UZ,czm_packDepth:kZ,czm_pbrLighting:DZ,czm_pbrMetallicRoughnessMaterial:BZ,czm_pbrSpecularGlossinessMaterial:YZ,czm_phong:OZ,czm_planeDistance:KZ,czm_pointAlongRay:HZ,czm_rayEllipsoidIntersectionInterval:zZ,czm_raySphereIntersectionInterval:JZ,czm_readDepth:QZ,czm_readNonPerspective:jZ,czm_reverseLogDepth:qZ,czm_round:$Z,czm_sampleOctahedralProjection:eG,czm_saturation:tG,czm_shadowDepthCompare:nG,czm_shadowVisibility:iG,czm_signNotZero:oG,czm_sphericalHarmonics:rG,czm_srgbToLinear:sG,czm_tangentToEyeSpaceMatrix:aG,czm_textureCube:cG,czm_transformPlane:lG,czm_translateRelativeToEye:dG,czm_translucentPhong:uG,czm_transpose:mG,czm_unpackDepth:hG,czm_unpackFloat:fG,czm_unpackUint:pG,czm_valueTransform:bG,czm_vertexLogDepth:yG,czm_windowToEyeCoordinates:gG,czm_writeDepthClamp:xG,czm_writeLogDepth:_G,czm_writeNonPerspective:TG};var OMt=T(S(),1);function PLe(e,t){let n=e;return n=n.replaceAll("version 300 es",""),n=n.replaceAll(/(texture\()/g,"texture2D("),t?(n=n.replaceAll(/(in)\s+(vec\d|mat\d|float)/g,"varying $2"),/out_FragData_(\d+)/.test(n)&&(n=`#extension GL_EXT_draw_buffers : enable
  3963. ${n}`,n=n.replaceAll(/layout\s+\(location\s*=\s*\d+\)\s*out\s+vec4\s+out_FragData_\d+;/g,""),n=n.replaceAll(/out_FragData_(\d+)/g,"gl_FragData[$1]")),n=n.replaceAll(/layout\s+\(location\s*=\s*0\)\s*out\s+vec4\s+out_FragColor;/g,""),n=n.replaceAll(/out_FragColor/g,"gl_FragColor"),n=n.replaceAll(/out_FragColor\[(\d+)\]/g,"gl_FragColor[$1]"),/gl_FragDepth/.test(n)&&(n=`#extension GL_EXT_frag_depth : enable
  3964. ${n}`,n=n.replaceAll(/gl_FragDepth/g,"gl_FragDepthEXT")),n=`#ifdef GL_OES_standard_derivatives
  3965. #extension GL_OES_standard_derivatives : enable
  3966. #endif
  3967. ${n}`):(n=n.replaceAll(/(in)\s+(vec\d|mat\d|float)/g,"attribute $2"),n=n.replaceAll(/(out)\s+(vec\d|mat\d|float)\s+([\w]+);/g,"varying $2 $3;")),n=`#version 100
  3968. ${n}`,n}var SG=PLe;function Iq(e){return e=e.replace(/\/\/.*/g,""),e.replace(/\/\*\*[\s\S]*?\*\//gm,function(t){let n=t.match(/\n/gm).length,i="";for(let o=0;o<n;++o)i+=`
  3969. `;return i})}function Wq(e,t,n){let i;for(let o=0;o<n.length;++o)n[o].name===e&&(i=n[o]);return d(i)||(t=Iq(t),i={name:e,glslSource:t,dependsOn:[],requiredBy:[],evaluated:!1},n.push(i)),i}function Pq(e,t){if(e.evaluated)return;e.evaluated=!0;let n=e.glslSource.match(/\bczm_[a-zA-Z0-9_]*/g);d(n)&&n!==null&&(n=n.filter(function(i,o){return n.indexOf(i)===o}),n.forEach(function(i){if(i!==e.name&&xs._czmBuiltinsAndUniforms.hasOwnProperty(i)){let o=Wq(i,xs._czmBuiltinsAndUniforms[i],t);e.dependsOn.push(o),o.requiredBy.push(e),Pq(o,t)}}))}function vLe(e){let t=[],n=[];for(;e.length>0;){let o=e.pop();n.push(o),o.requiredBy.length===0&&t.push(o)}for(;t.length>0;){let o=t.shift();e.push(o);for(let r=0;r<o.dependsOn.length;++r){let s=o.dependsOn[r],a=s.requiredBy.indexOf(o);s.requiredBy.splice(a,1),s.requiredBy.length===0&&t.push(s)}}let i=[];for(let o=0;o<n.length;++o)n[o].requiredBy.length!==0&&i.push(n[o])}function wLe(e){let t=[],n=Wq("main",e,t);Pq(n,t),vLe(t);let i="";for(let o=t.length-1;o>=0;--o)i=`${i+t[o].glslSource}
  3970. `;return i.replace(n.glslSource,"")}function vq(e,t,n){let i,o,r="",s=e.sources;if(d(s))for(i=0,o=s.length;i<o;++i)r+=`
  3971. #line 0
  3972. ${s[i]}`;r=Iq(r);let a;r=r.replace(/#version\s+(.*?)\n/gm,function(x,_){return a=_,`
  3973. `});let c=[];r=r.replace(/#extension.*\n/gm,function(x){return c.push(x),`
  3974. `}),r=r.replace(/precision\s(lowp|mediump|highp)\s(float|int);/,"");let l=e.pickColorQualifier;d(l)&&(r=xs.createPickFragmentShaderSource(r,l));let u="",m=c.length;for(i=0;i<m;i++)u+=c[i];t&&(u+=`#ifdef GL_FRAGMENT_PRECISION_HIGH
  3975. precision highp float;
  3976. precision highp int;
  3977. #else
  3978. precision mediump float;
  3979. precision mediump int;
  3980. #define highp mediump
  3981. #endif
  3982. `);let p=e.defines;if(d(p))for(i=0,o=p.length;i<o;++i){let x=p[i];x.length!==0&&(u+=`#define ${x}
  3983. `)}n.textureFloatLinear&&(u+=`#define OES_texture_float_linear
  3984. `),n.floatingPointTexture&&(u+=`#define OES_texture_float
  3985. `);let y="";e.includeBuiltIns&&(y=wLe(r)),u+=`
  3986. #line 0
  3987. `;let f=y+r;return n.webgl2&&t&&!/layout\s*\(location\s*=\s*0\)\s*out\s+vec4\s+out_FragColor;/g.test(f)&&!/czm_out_FragColor/g.test(f)&&/out_FragColor/g.test(f)&&(u+=`layout(location = 0) out vec4 out_FragColor;
  3988. `),u+=y,u+=r,n.webgl2?u=`#version 300 es
  3989. ${u}`:u=SG(u,t),u}function xs(e){e=g(e,g.EMPTY_OBJECT);let t=e.pickColorQualifier;this.defines=d(e.defines)?e.defines.slice(0):[],this.sources=d(e.sources)?e.sources.slice(0):[],this.pickColorQualifier=t,this.includeBuiltIns=g(e.includeBuiltIns,!0)}xs.prototype.clone=function(){return new xs({sources:this.sources,defines:this.defines,pickColorQualifier:this.pickColorQualifier,includeBuiltIns:this.includeBuiltIns})};xs.replaceMain=function(e,t){return t=`void ${t}()`,e.replace(/void\s+main\s*\(\s*(?:void)?\s*\)/g,t)};xs.prototype.getCacheKey=function(){let t=this.defines.slice().sort().join(","),n=this.pickColorQualifier,i=this.includeBuiltIns,o=this.sources.join(`
  3990. `);return`${t}:${n}:${i}:${o}`};xs.prototype.createCombinedVertexShader=function(e){return vq(this,!1,e)};xs.prototype.createCombinedFragmentShader=function(e){return vq(this,!0,e)};xs._czmBuiltinsAndUniforms={};for(let e in Mg)Mg.hasOwnProperty(e)&&(xs._czmBuiltinsAndUniforms[e]=Mg[e]);for(let e in $f)if($f.hasOwnProperty(e)){let t=$f[e];typeof t.getDeclaration=="function"&&(xs._czmBuiltinsAndUniforms[e]=t.getDeclaration(e))}xs.createPickVertexShaderSource=function(e){return`${xs.replaceMain(e,"czm_old_main")}
  3991. in vec4 pickColor;
  3992. out vec4 czm_pickColor;
  3993. void main()
  3994. {
  3995. czm_old_main();
  3996. czm_pickColor = pickColor;
  3997. }`};xs.createPickFragmentShaderSource=function(e,t){let n=xs.replaceMain(e,"czm_old_main"),i=`${t} vec4 czm_pickColor;
  3998. void main()
  3999. {
  4000. czm_old_main();
  4001. if (out_FragColor.a == 0.0) {
  4002. discard;
  4003. }
  4004. out_FragColor = czm_pickColor;
  4005. }`;return`${n}
  4006. ${i}`};function FLe(e,t){let n=e.defines,i=n.length;for(let o=0;o<i;++o)if(n[o]===t)return!0;return!1}function wq(e,t){let n=e.sources,i=n.length;for(let o=0;o<i;++o)if(n[o].indexOf(t)!==-1)return!0;return!1}function Fq(e,t){let n=t.length;for(let i=0;i<n;++i){let o=t[i];if(wq(e,o))return o}}var ALe=["v_normalEC","v_normal"];xs.findNormalVarying=function(e){return wq(e,"#ifdef HAS_NORMALS")?FLe(e,"HAS_NORMALS")?"v_normalEC":void 0:Fq(e,ALe)};var MLe=["v_positionEC"];xs.findPositionVarying=function(e){return Fq(e,MLe)};var Ye=xs;var eNt=T(S(),1),CG=`in vec3 position3DHigh;
  4007. in vec3 position3DLow;
  4008. in float batchId;
  4009. #ifdef EXTRUDED_GEOMETRY
  4010. in vec3 extrudeDirection;
  4011. uniform float u_globeMinimumAltitude;
  4012. #endif // EXTRUDED_GEOMETRY
  4013. #ifdef PER_INSTANCE_COLOR
  4014. out vec4 v_color;
  4015. #endif // PER_INSTANCE_COLOR
  4016. #ifdef TEXTURE_COORDINATES
  4017. #ifdef SPHERICAL
  4018. out vec4 v_sphericalExtents;
  4019. #else // SPHERICAL
  4020. out vec2 v_inversePlaneExtents;
  4021. out vec4 v_westPlane;
  4022. out vec4 v_southPlane;
  4023. #endif // SPHERICAL
  4024. out vec3 v_uvMinAndSphericalLongitudeRotation;
  4025. out vec3 v_uMaxAndInverseDistance;
  4026. out vec3 v_vMaxAndInverseDistance;
  4027. #endif // TEXTURE_COORDINATES
  4028. void main()
  4029. {
  4030. vec4 position = czm_computePosition();
  4031. #ifdef EXTRUDED_GEOMETRY
  4032. float delta = min(u_globeMinimumAltitude, czm_geometricToleranceOverMeter * length(position.xyz));
  4033. delta *= czm_sceneMode == czm_sceneMode3D ? 1.0 : 0.0;
  4034. //extrudeDirection is zero for the top layer
  4035. position = position + vec4(extrudeDirection * delta, 0.0);
  4036. #endif
  4037. #ifdef TEXTURE_COORDINATES
  4038. #ifdef SPHERICAL
  4039. v_sphericalExtents = czm_batchTable_sphericalExtents(batchId);
  4040. v_uvMinAndSphericalLongitudeRotation.z = czm_batchTable_longitudeRotation(batchId);
  4041. #else // SPHERICAL
  4042. #ifdef COLUMBUS_VIEW_2D
  4043. vec4 planes2D_high = czm_batchTable_planes2D_HIGH(batchId);
  4044. vec4 planes2D_low = czm_batchTable_planes2D_LOW(batchId);
  4045. // If the primitive is split across the IDL (planes2D_high.x > planes2D_high.w):
  4046. // - If this vertex is on the east side of the IDL (position3DLow.y > 0.0, comparison with position3DHigh may produce artifacts)
  4047. // - existing "east" is on the wrong side of the world, far away (planes2D_high/low.w)
  4048. // - so set "east" as beyond the eastmost extent of the projection (idlSplitNewPlaneHiLow)
  4049. vec2 idlSplitNewPlaneHiLow = vec2(EAST_MOST_X_HIGH - (WEST_MOST_X_HIGH - planes2D_high.w), EAST_MOST_X_LOW - (WEST_MOST_X_LOW - planes2D_low.w));
  4050. bool idlSplit = planes2D_high.x > planes2D_high.w && position3DLow.y > 0.0;
  4051. planes2D_high.w = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.x, planes2D_high.w);
  4052. planes2D_low.w = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.y, planes2D_low.w);
  4053. // - else, if this vertex is on the west side of the IDL (position3DLow.y < 0.0)
  4054. // - existing "west" is on the wrong side of the world, far away (planes2D_high/low.x)
  4055. // - so set "west" as beyond the westmost extent of the projection (idlSplitNewPlaneHiLow)
  4056. idlSplit = planes2D_high.x > planes2D_high.w && position3DLow.y < 0.0;
  4057. idlSplitNewPlaneHiLow = vec2(WEST_MOST_X_HIGH - (EAST_MOST_X_HIGH - planes2D_high.x), WEST_MOST_X_LOW - (EAST_MOST_X_LOW - planes2D_low.x));
  4058. planes2D_high.x = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.x, planes2D_high.x);
  4059. planes2D_low.x = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.y, planes2D_low.x);
  4060. vec3 southWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.xy), vec3(0.0, planes2D_low.xy))).xyz;
  4061. vec3 northWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.x, planes2D_high.z), vec3(0.0, planes2D_low.x, planes2D_low.z))).xyz;
  4062. vec3 southEastCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.w, planes2D_high.y), vec3(0.0, planes2D_low.w, planes2D_low.y))).xyz;
  4063. #else // COLUMBUS_VIEW_2D
  4064. // 3D case has smaller "plane extents," so planes encoded as a 64 bit position and 2 vec3s for distances/direction
  4065. vec3 southWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(czm_batchTable_southWest_HIGH(batchId), czm_batchTable_southWest_LOW(batchId))).xyz;
  4066. vec3 northWestCorner = czm_normal * czm_batchTable_northward(batchId) + southWestCorner;
  4067. vec3 southEastCorner = czm_normal * czm_batchTable_eastward(batchId) + southWestCorner;
  4068. #endif // COLUMBUS_VIEW_2D
  4069. vec3 eastWard = southEastCorner - southWestCorner;
  4070. float eastExtent = length(eastWard);
  4071. eastWard /= eastExtent;
  4072. vec3 northWard = northWestCorner - southWestCorner;
  4073. float northExtent = length(northWard);
  4074. northWard /= northExtent;
  4075. v_westPlane = vec4(eastWard, -dot(eastWard, southWestCorner));
  4076. v_southPlane = vec4(northWard, -dot(northWard, southWestCorner));
  4077. v_inversePlaneExtents = vec2(1.0 / eastExtent, 1.0 / northExtent);
  4078. #endif // SPHERICAL
  4079. vec4 uvMinAndExtents = czm_batchTable_uvMinAndExtents(batchId);
  4080. vec4 uMaxVmax = czm_batchTable_uMaxVmax(batchId);
  4081. v_uMaxAndInverseDistance = vec3(uMaxVmax.xy, uvMinAndExtents.z);
  4082. v_vMaxAndInverseDistance = vec3(uMaxVmax.zw, uvMinAndExtents.w);
  4083. v_uvMinAndSphericalLongitudeRotation.xy = uvMinAndExtents.xy;
  4084. #endif // TEXTURE_COORDINATES
  4085. #ifdef PER_INSTANCE_COLOR
  4086. v_color = czm_batchTable_color(batchId);
  4087. #endif
  4088. gl_Position = czm_depthClamp(czm_modelViewProjectionRelativeToEye * position);
  4089. }
  4090. `;var nNt=T(S(),1),lb=`#ifdef VECTOR_TILE
  4091. uniform vec4 u_highlightColor;
  4092. #endif
  4093. void main(void)
  4094. {
  4095. #ifdef VECTOR_TILE
  4096. out_FragColor = czm_gammaCorrect(u_highlightColor);
  4097. #else
  4098. out_FragColor = vec4(1.0);
  4099. #endif
  4100. czm_writeDepthClamp();
  4101. }
  4102. `;var oNt=T(S(),1),Aq={TERRAIN:0,CESIUM_3D_TILE:1,BOTH:2};Aq.NUMBER_OF_CLASSIFICATION_TYPES=3;var kn=Object.freeze(Aq);var aNt=T(S(),1);var NLe={NEVER:ne.NEVER,LESS:ne.LESS,EQUAL:ne.EQUAL,LESS_OR_EQUAL:ne.LEQUAL,GREATER:ne.GREATER,NOT_EQUAL:ne.NOTEQUAL,GREATER_OR_EQUAL:ne.GEQUAL,ALWAYS:ne.ALWAYS},Ua=Object.freeze(NLe);var ykt=T(S(),1);var uNt=T(S(),1);function Fh(){this.high=h.clone(h.ZERO),this.low=h.clone(h.ZERO)}Fh.encode=function(e,t){d(t)||(t={high:0,low:0});let n;return e>=0?(n=Math.floor(e/65536)*65536,t.high=n,t.low=e-n):(n=Math.floor(-e/65536)*65536,t.high=-n,t.low=e+n),t};var tp={high:0,low:0};Fh.fromCartesian=function(e,t){d(t)||(t=new Fh);let n=t.high,i=t.low;return Fh.encode(e.x,tp),n.x=tp.high,i.x=tp.low,Fh.encode(e.y,tp),n.y=tp.high,i.y=tp.low,Fh.encode(e.z,tp),n.z=tp.high,i.z=tp.low,t};var l3=new Fh;Fh.writeElements=function(e,t,n){Fh.fromCartesian(e,l3);let i=l3.high,o=l3.low;t[n]=i.x,t[n+1]=i.y,t[n+2]=i.z,t[n+3]=o.x,t[n+4]=o.y,t[n+5]=o.z};var On=Fh;var hNt=T(S(),1);function ULe(e,t){let n=[],i=e.length,o=0;for(;o<i;){let r=Math.ceil((i-o)/t--);n.push(e.slice(o,o+r)),o+=r}return n}var VG=ULe;var bNt=T(S(),1);var JA={STREAM_DRAW:ne.STREAM_DRAW,STATIC_DRAW:ne.STATIC_DRAW,DYNAMIC_DRAW:ne.DYNAMIC_DRAW,validate:function(e){return e===JA.STREAM_DRAW||e===JA.STATIC_DRAW||e===JA.DYNAMIC_DRAW}},Ne=Object.freeze(JA);var DNt=T(S(),1);var TNt=T(S(),1);var _s={UNSIGNED_BYTE:ne.UNSIGNED_BYTE,UNSIGNED_SHORT:ne.UNSIGNED_SHORT,UNSIGNED_INT:ne.UNSIGNED_INT};_s.getSizeInBytes=function(e){switch(e){case _s.UNSIGNED_BYTE:return Uint8Array.BYTES_PER_ELEMENT;case _s.UNSIGNED_SHORT:return Uint16Array.BYTES_PER_ELEMENT;case _s.UNSIGNED_INT:return Uint32Array.BYTES_PER_ELEMENT}};_s.fromSizeInBytes=function(e){switch(e){case 2:return _s.UNSIGNED_SHORT;case 4:return _s.UNSIGNED_INT;case 1:return _s.UNSIGNED_BYTE}};_s.validate=function(e){return d(e)&&(e===_s.UNSIGNED_BYTE||e===_s.UNSIGNED_SHORT||e===_s.UNSIGNED_INT)};_s.createTypedArray=function(e,t){return e>=W.SIXTY_FOUR_KILOBYTES?new Uint32Array(t):new Uint16Array(t)};_s.createTypedArrayFromArrayBuffer=function(e,t,n,i){return e>=W.SIXTY_FOUR_KILOBYTES?new Uint32Array(t,n,i):new Uint16Array(t,n,i)};_s.fromTypedArray=function(e){if(e instanceof Uint8Array)return _s.UNSIGNED_BYTE;if(e instanceof Uint16Array)return _s.UNSIGNED_SHORT;if(e instanceof Uint32Array)return _s.UNSIGNED_INT};var Ue=Object.freeze(_s);var ENt=T(S(),1);function Hd(e){e=g(e,g.EMPTY_OBJECT);let t=e.context._gl,n=e.bufferTarget,i=e.typedArray,o=e.sizeInBytes,r=e.usage,s=d(i);s&&(o=i.byteLength);let a=t.createBuffer();t.bindBuffer(n,a),t.bufferData(n,s?i:o,r),t.bindBuffer(n,null),this._id=Yn(),this._gl=t,this._webgl2=e.context._webgl2,this._bufferTarget=n,this._sizeInBytes=o,this._usage=r,this._buffer=a,this.vertexArrayDestroyable=!0}Hd.createVertexBuffer=function(e){return new Hd({context:e.context,bufferTarget:ne.ARRAY_BUFFER,typedArray:e.typedArray,sizeInBytes:e.sizeInBytes,usage:e.usage})};Hd.createIndexBuffer=function(e){let t=e.context,n=e.indexDatatype,i=Ue.getSizeInBytes(n),o=new Hd({context:t,bufferTarget:ne.ELEMENT_ARRAY_BUFFER,typedArray:e.typedArray,sizeInBytes:e.sizeInBytes,usage:e.usage}),r=o.sizeInBytes/i;return Object.defineProperties(o,{indexDatatype:{get:function(){return n}},bytesPerIndex:{get:function(){return i}},numberOfIndices:{get:function(){return r}}}),o};Object.defineProperties(Hd.prototype,{sizeInBytes:{get:function(){return this._sizeInBytes}},usage:{get:function(){return this._usage}}});Hd.prototype._getBuffer=function(){return this._buffer};Hd.prototype.copyFromArrayView=function(e,t){t=g(t,0);let n=this._gl,i=this._bufferTarget;n.bindBuffer(i,this._buffer),n.bufferSubData(i,t,e),n.bindBuffer(i,null)};Hd.prototype.copyFromBuffer=function(e,t,n,i){let o=ne.COPY_READ_BUFFER,r=ne.COPY_WRITE_BUFFER,s=this._gl;s.bindBuffer(r,this._buffer),s.bindBuffer(o,e._buffer),s.copyBufferSubData(o,r,t,n,i),s.bindBuffer(r,null),s.bindBuffer(o,null)};Hd.prototype.getBufferData=function(e,t,n,i){t=g(t,0),n=g(n,0);let o=this._gl,r=ne.COPY_READ_BUFFER;o.bindBuffer(r,this._buffer),o.getBufferSubData(r,t,e,n,i),o.bindBuffer(r,null)};Hd.prototype.isDestroyed=function(){return!1};Hd.prototype.destroy=function(){return this._gl.deleteBuffer(this._buffer),ue(this)};var mt=Hd;function kLe(e,t,n,i){let o=d(t.vertexBuffer),r=d(t.value),s=t.value?t.value.length:t.componentsPerAttribute,a={index:g(t.index,n),enabled:g(t.enabled,!0),vertexBuffer:t.vertexBuffer,value:r?t.value.slice(0):void 0,componentsPerAttribute:s,componentDatatype:g(t.componentDatatype,Q.FLOAT),normalize:g(t.normalize,!1),offsetInBytes:g(t.offsetInBytes,0),strideInBytes:g(t.strideInBytes,0),instanceDivisor:g(t.instanceDivisor,0)};if(o)a.vertexAttrib=function(c){let l=this.index;c.bindBuffer(c.ARRAY_BUFFER,this.vertexBuffer._getBuffer()),c.vertexAttribPointer(l,this.componentsPerAttribute,this.componentDatatype,this.normalize,this.strideInBytes,this.offsetInBytes),c.enableVertexAttribArray(l),this.instanceDivisor>0&&(i.glVertexAttribDivisor(l,this.instanceDivisor),i._vertexAttribDivisors[l]=this.instanceDivisor,i._previousDrawInstanced=!0)},a.disableVertexAttribArray=function(c){c.disableVertexAttribArray(this.index),this.instanceDivisor>0&&i.glVertexAttribDivisor(n,0)};else{switch(a.componentsPerAttribute){case 1:a.vertexAttrib=function(c){c.vertexAttrib1fv(this.index,this.value)};break;case 2:a.vertexAttrib=function(c){c.vertexAttrib2fv(this.index,this.value)};break;case 3:a.vertexAttrib=function(c){c.vertexAttrib3fv(this.index,this.value)};break;case 4:a.vertexAttrib=function(c){c.vertexAttrib4fv(this.index,this.value)};break}a.disableVertexAttribArray=function(c){}}e.push(a)}function Nq(e,t,n){for(let i=0;i<t.length;++i){let o=t[i];o.enabled&&o.vertexAttrib(e)}d(n)&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n._getBuffer())}function np(e){e=g(e,g.EMPTY_OBJECT);let t=e.context,n=t._gl,i=e.attributes,o=e.indexBuffer,r,s=[],a=1,c=!1,l=!1,u=i.length;for(r=0;r<u;++r)kLe(s,i[r],r,t);for(u=s.length,r=0;r<u;++r){let p=s[r];if(d(p.vertexBuffer)&&p.instanceDivisor===0){let y=p.strideInBytes||p.componentsPerAttribute*Q.getSizeInBytes(p.componentDatatype);a=p.vertexBuffer.sizeInBytes/y;break}}for(r=0;r<u;++r)s[r].instanceDivisor>0&&(c=!0),d(s[r].value)&&(l=!0);let m;t.vertexArrayObject&&(m=t.glCreateVertexArray(),t.glBindVertexArray(m),Nq(n,s,o),t.glBindVertexArray(null)),this._numberOfVertices=a,this._hasInstancedAttributes=c,this._hasConstantAttributes=l,this._context=t,this._gl=n,this._vao=m,this._attributes=s,this._indexBuffer=o}function Mq(e){return e.values.length/e.componentsPerAttribute}function DLe(e){return Q.getSizeInBytes(e.componentDatatype)*e.componentsPerAttribute}function BLe(e){let t,n,i,o=[];for(n in e)e.hasOwnProperty(n)&&d(e[n])&&d(e[n].values)&&(o.push(n),e[n].componentDatatype===Q.DOUBLE&&(e[n].componentDatatype=Q.FLOAT,e[n].values=Q.createTypedArray(Q.FLOAT,e[n].values)));let r,s=o.length;if(s>0)for(r=Mq(e[o[0]]),t=1;t<s;++t){let l=Mq(e[o[t]]);if(l!==r)throw new me(`Each attribute list must have the same number of vertices. Attribute ${o[t]} has a different number of vertices (${l.toString()}) than attribute ${o[0]} (${r.toString()}).`)}o.sort(function(l,u){return Q.getSizeInBytes(e[u].componentDatatype)-Q.getSizeInBytes(e[l].componentDatatype)});let a=0,c={};for(t=0;t<s;++t)n=o[t],i=e[n],c[n]=a,a+=DLe(i);if(a>0){let l=Q.getSizeInBytes(e[o[0]].componentDatatype),u=a%l;u!==0&&(a+=l-u);let m=r*a,p=new ArrayBuffer(m),y={};for(t=0;t<s;++t){n=o[t];let f=Q.getSizeInBytes(e[n].componentDatatype);y[n]={pointer:Q.createTypedArray(e[n].componentDatatype,p),index:c[n]/f,strideInComponentType:a/f}}for(t=0;t<r;++t)for(let f=0;f<s;++f){n=o[f],i=e[n];let x=i.values,_=y[n],C=_.pointer,V=i.componentsPerAttribute;for(let L=0;L<V;++L)C[_.index+L]=x[t*V+L];_.index+=_.strideInComponentType}return{buffer:p,offsetsInBytes:c,vertexSizeInBytes:a}}}np.fromGeometry=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.context,n=g(e.geometry,g.EMPTY_OBJECT),i=g(e.bufferUsage,Ne.DYNAMIC_DRAW),o=g(e.attributeLocations,g.EMPTY_OBJECT),r=g(e.interleave,!1),s=e.vertexArrayAttributes,a,c,l,u=d(s)?s:[],m=n.attributes;if(r){let f=BLe(m);if(d(f)){l=mt.createVertexBuffer({context:t,typedArray:f.buffer,usage:i});let x=f.offsetsInBytes,_=f.vertexSizeInBytes;for(a in m)m.hasOwnProperty(a)&&d(m[a])&&(c=m[a],d(c.values)?u.push({index:o[a],vertexBuffer:l,componentDatatype:c.componentDatatype,componentsPerAttribute:c.componentsPerAttribute,normalize:c.normalize,offsetInBytes:x[a],strideInBytes:_}):u.push({index:o[a],value:c.value,componentDatatype:c.componentDatatype,normalize:c.normalize}))}}else for(a in m)if(m.hasOwnProperty(a)&&d(m[a])){c=m[a];let f=c.componentDatatype;f===Q.DOUBLE&&(f=Q.FLOAT),l=void 0,d(c.values)&&(l=mt.createVertexBuffer({context:t,typedArray:Q.createTypedArray(f,c.values),usage:i})),u.push({index:o[a],vertexBuffer:l,value:c.value,componentDatatype:f,componentsPerAttribute:c.componentsPerAttribute,normalize:c.normalize})}let p,y=n.indices;return d(y)&&(dt.computeNumberOfVertices(n)>=W.SIXTY_FOUR_KILOBYTES&&t.elementIndexUint?p=mt.createIndexBuffer({context:t,typedArray:new Uint32Array(y),usage:i,indexDatatype:Ue.UNSIGNED_INT}):p=mt.createIndexBuffer({context:t,typedArray:new Uint16Array(y),usage:i,indexDatatype:Ue.UNSIGNED_SHORT})),new np({context:t,attributes:u,indexBuffer:p})};Object.defineProperties(np.prototype,{numberOfAttributes:{get:function(){return this._attributes.length}},numberOfVertices:{get:function(){return this._numberOfVertices}},indexBuffer:{get:function(){return this._indexBuffer}}});np.prototype.getAttribute=function(e){return this._attributes[e]};function YLe(e){let t=e._context,n=e._hasInstancedAttributes;if(!n&&!t._previousDrawInstanced)return;t._previousDrawInstanced=n;let i=t._vertexAttribDivisors,o=e._attributes,r=kt.maximumVertexAttributes,s;if(n){let a=o.length;for(s=0;s<a;++s){let c=o[s];if(c.enabled){let l=c.instanceDivisor,u=c.index;l!==i[u]&&(t.glVertexAttribDivisor(u,l),i[u]=l)}}}else for(s=0;s<r;++s)i[s]>0&&(t.glVertexAttribDivisor(s,0),i[s]=0)}function OLe(e,t){let n=e._attributes,i=n.length;for(let o=0;o<i;++o){let r=n[o];r.enabled&&d(r.value)&&r.vertexAttrib(t)}}np.prototype._bind=function(){d(this._vao)?(this._context.glBindVertexArray(this._vao),this._context.instancedArrays&&YLe(this),this._hasConstantAttributes&&OLe(this,this._gl)):Nq(this._gl,this._attributes,this._indexBuffer)};np.prototype._unBind=function(){if(d(this._vao))this._context.glBindVertexArray(null);else{let e=this._attributes,t=this._gl;for(let n=0;n<e.length;++n){let i=e[n];i.enabled&&i.disableVertexAttribArray(t)}this._indexBuffer&&t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null)}};np.prototype.isDestroyed=function(){return!1};np.prototype.destroy=function(){let e=this._attributes;for(let n=0;n<e.length;++n){let i=e[n].vertexBuffer;d(i)&&!i.isDestroyed()&&i.vertexArrayDestroyable&&i.destroy()}let t=this._indexBuffer;return d(t)&&!t.isDestroyed()&&t.vertexArrayDestroyable&&t.destroy(),d(this._vao)&&this._context.glDeleteVertexArray(this._vao),ue(this)};var ti=np;var n5t=T(S(),1);function ip(e,t,n){if(this._attributes=t,this._numberOfInstances=n,t.length===0)return;let i=KLe(t),o=e.floatingPointTexture,r=i===Je.FLOAT&&!o,s=HLe(t,r),a=zLe(s,t,r),c=Math.floor(kt.maximumTextureSize/a),l=Math.min(n,c),u=a*l,m=Math.ceil(n/l),p=1/u,y=p*.5,f=1/m,x=f*.5;this._textureDimensions=new D(u,m),this._textureStep=new se(p,y,f,x),this._pixelDatatype=r?Je.UNSIGNED_BYTE:i,this._packFloats=r,this._offsets=s,this._stride=a,this._texture=void 0;let _=4*u*m;this._batchValues=i===Je.FLOAT&&!r?new Float32Array(_):new Uint8Array(_),this._batchValuesDirty=!1}Object.defineProperties(ip.prototype,{attributes:{get:function(){return this._attributes}},numberOfInstances:{get:function(){return this._numberOfInstances}}});function KLe(e){let t=!1,n=e.length;for(let i=0;i<n;++i)if(e[i].componentDatatype!==Q.UNSIGNED_BYTE){t=!0;break}return t?Je.FLOAT:Je.UNSIGNED_BYTE}function kq(e,t){let n=e[t].componentsPerAttribute;return n===2?D:n===3?h:n===4?se:Number}function HLe(e,t){let n=new Array(e.length),i=0,o=e.length;for(let r=0;r<o;++r){let a=e[r].componentDatatype;n[r]=i,a!==Q.UNSIGNED_BYTE&&t?i+=4:++i}return n}function zLe(e,t,n){let i=e.length,o=e[i-1];return t[i-1].componentDatatype!==Q.UNSIGNED_BYTE&&n?o+4:o+1}var LG=new se;function JLe(e,t,n){let i=se.unpack(e,t,LG),o=se.unpackFloat(i);i=se.unpack(e,t+4,LG);let r=se.unpackFloat(i);i=se.unpack(e,t+8,LG);let s=se.unpackFloat(i);i=se.unpack(e,t+12,LG);let a=se.unpackFloat(i);return se.fromElements(o,r,s,a,n)}function QLe(e,t,n){let i=se.packFloat(e.x,LG);se.pack(i,t,n),i=se.packFloat(e.y,i),se.pack(i,t,n+4),i=se.packFloat(e.z,i),se.pack(i,t,n+8),i=se.packFloat(e.w,i),se.pack(i,t,n+12)}var Uq=new se;ip.prototype.getBatchedAttribute=function(e,t,n){let i=this._attributes,o=this._offsets[t],s=4*this._stride*e+4*o,a;this._packFloats&&i[t].componentDatatype!==Je.UNSIGNED_BYTE?a=JLe(this._batchValues,s,Uq):a=se.unpack(this._batchValues,s,Uq);let c=kq(i,t);return d(c.fromCartesian4)?c.fromCartesian4(a,n):d(c.clone)?c.clone(a,n):a.x};var jLe=[void 0,void 0,new D,new h,new se],qLe=new se;ip.prototype.setBatchedAttribute=function(e,t,n){let i=this._attributes,o=jLe[i[t].componentsPerAttribute],r=this.getBatchedAttribute(e,t,o),s=kq(this._attributes,t);if(d(s.equals)?s.equals(r,n):r===n)return;let c=qLe;c.x=d(n.x)?n.x:n,c.y=d(n.y)?n.y:0,c.z=d(n.z)?n.z:0,c.w=d(n.w)?n.w:0;let l=this._offsets[t],m=4*this._stride*e+4*l;this._packFloats&&i[t].componentDatatype!==Je.UNSIGNED_BYTE?QLe(c,this._batchValues,m):se.pack(c,this._batchValues,m),this._batchValuesDirty=!0};function $Le(e,t){let n=e._textureDimensions;e._texture=new Wt({context:t,pixelFormat:st.RGBA,pixelDatatype:e._pixelDatatype,width:n.x,height:n.y,sampler:un.NEAREST,flipY:!1})}function eRe(e){let t=e._textureDimensions;e._texture.copyFrom({source:{width:t.x,height:t.y,arrayBufferView:e._batchValues}})}ip.prototype.update=function(e){d(this._texture)&&!this._batchValuesDirty||this._attributes.length===0||(this._batchValuesDirty=!1,d(this._texture)||$Le(this,e.context),eRe(this))};ip.prototype.getUniformMapCallback=function(){let e=this;return function(t){return e._attributes.length===0?t:xt(t,{batchTexture:function(){return e._texture},batchTextureDimensions:function(){return e._textureDimensions},batchTextureStep:function(){return e._textureStep}})}};function tRe(e){let t=e._stride;return e._textureDimensions.y===1?`uniform vec4 batchTextureStep;
  4103. vec2 computeSt(float batchId)
  4104. {
  4105. float stepX = batchTextureStep.x;
  4106. float centerX = batchTextureStep.y;
  4107. float numberOfAttributes = float(${t});
  4108. return vec2(centerX + (batchId * numberOfAttributes * stepX), 0.5);
  4109. }
  4110. `:`uniform vec4 batchTextureStep;
  4111. uniform vec2 batchTextureDimensions;
  4112. vec2 computeSt(float batchId)
  4113. {
  4114. float stepX = batchTextureStep.x;
  4115. float centerX = batchTextureStep.y;
  4116. float stepY = batchTextureStep.z;
  4117. float centerY = batchTextureStep.w;
  4118. float numberOfAttributes = float(${t});
  4119. float xId = mod(batchId * numberOfAttributes, batchTextureDimensions.x);
  4120. float yId = floor(batchId * numberOfAttributes / batchTextureDimensions.x);
  4121. return vec2(centerX + (xId * stepX), centerY + (yId * stepY));
  4122. }
  4123. `}function nRe(e){return e===1?"float":`vec${e}`}function iRe(e){return e===1?".x":e===2?".xy":e===3?".xyz":""}function oRe(e,t){let i=e._attributes[t],o=i.componentsPerAttribute,r=i.functionName,s=nRe(o),a=iRe(o),c=e._offsets[t],l=`${s} ${r}(float batchId)
  4124. {
  4125. vec2 st = computeSt(batchId);
  4126. st.x += batchTextureStep.x * float(${c});
  4127. `;return e._packFloats&&i.componentDatatype!==Je.UNSIGNED_BYTE?l+=`vec4 textureValue;
  4128. textureValue.x = czm_unpackFloat(texture(batchTexture, st));
  4129. textureValue.y = czm_unpackFloat(texture(batchTexture, st + vec2(batchTextureStep.x, 0.0)));
  4130. textureValue.z = czm_unpackFloat(texture(batchTexture, st + vec2(batchTextureStep.x * 2.0, 0.0)));
  4131. textureValue.w = czm_unpackFloat(texture(batchTexture, st + vec2(batchTextureStep.x * 3.0, 0.0)));
  4132. `:l+=` vec4 textureValue = texture(batchTexture, st);
  4133. `,l+=` ${s} value = textureValue${a};
  4134. `,e._pixelDatatype===Je.UNSIGNED_BYTE&&i.componentDatatype===Q.UNSIGNED_BYTE&&!i.normalize?l+=`value *= 255.0;
  4135. `:e._pixelDatatype===Je.FLOAT&&i.componentDatatype===Q.UNSIGNED_BYTE&&i.normalize&&(l+=`value /= 255.0;
  4136. `),l+=` return value;
  4137. }
  4138. `,l}ip.prototype.getVertexShaderCallback=function(){let e=this._attributes;if(e.length===0)return function(i){return i};let t=`uniform highp sampler2D batchTexture;
  4139. `;t+=`${tRe(this)}
  4140. `;let n=e.length;for(let i=0;i<n;++i)t+=oRe(this,i);return function(i){let o=i.indexOf("void main"),r=i.substring(0,o),s=i.substring(o);return`${r}
  4141. ${t}
  4142. ${s}`}};ip.prototype.isDestroyed=function(){return!1};ip.prototype.destroy=function(){return this._texture=this._texture&&this._texture.destroy(),ue(this)};var Ng=ip;var VUt=T(S(),1);var eUt=T(S(),1);var g5t=T(S(),1);var d5t=T(S(),1);var no={SCALAR:"SCALAR",VEC2:"VEC2",VEC3:"VEC3",VEC4:"VEC4",MAT2:"MAT2",MAT3:"MAT3",MAT4:"MAT4"};no.getMathType=function(e){switch(e){case no.SCALAR:return Number;case no.VEC2:return D;case no.VEC3:return h;case no.VEC4:return se;case no.MAT2:return $i;case no.MAT3:return $;case no.MAT4:return A}};no.getNumberOfComponents=function(e){switch(e){case no.SCALAR:return 1;case no.VEC2:return 2;case no.VEC3:return 3;case no.VEC4:case no.MAT2:return 4;case no.MAT3:return 9;case no.MAT4:return 16}};no.getAttributeLocationCount=function(e){switch(e){case no.SCALAR:case no.VEC2:case no.VEC3:case no.VEC4:return 1;case no.MAT2:return 2;case no.MAT3:return 3;case no.MAT4:return 4}};no.getGlslType=function(e){switch(e){case no.SCALAR:return"float";case no.VEC2:return"vec2";case no.VEC3:return"vec3";case no.VEC4:return"vec4";case no.MAT2:return"mat2";case no.MAT3:return"mat3";case no.MAT4:return"mat4"}};var an=Object.freeze(no);var Dq=1/256,Bq=256,yo={};yo.octEncodeInRange=function(e,t,n){if(n.x=e.x/(Math.abs(e.x)+Math.abs(e.y)+Math.abs(e.z)),n.y=e.y/(Math.abs(e.x)+Math.abs(e.y)+Math.abs(e.z)),e.z<0){let i=n.x,o=n.y;n.x=(1-Math.abs(o))*W.signNotZero(i),n.y=(1-Math.abs(i))*W.signNotZero(o)}return n.x=W.toSNorm(n.x,t),n.y=W.toSNorm(n.y,t),n};yo.octEncode=function(e,t){return yo.octEncodeInRange(e,255,t)};var RG=new D,Yq=new Uint8Array(1);function QA(e){return Yq[0]=e,Yq[0]}yo.octEncodeToCartesian4=function(e,t){return yo.octEncodeInRange(e,65535,RG),t.x=QA(RG.x*Dq),t.y=QA(RG.x),t.z=QA(RG.y*Dq),t.w=QA(RG.y),t};yo.octDecodeInRange=function(e,t,n,i){if(i.x=W.fromSNorm(e,n),i.y=W.fromSNorm(t,n),i.z=1-(Math.abs(i.x)+Math.abs(i.y)),i.z<0){let o=i.x;i.x=(1-Math.abs(i.y))*W.signNotZero(o),i.y=(1-Math.abs(o))*W.signNotZero(i.y)}return h.normalize(i,i)};yo.octDecode=function(e,t,n){return yo.octDecodeInRange(e,t,255,n)};yo.octDecodeFromCartesian4=function(e,t){let n=e.x,i=e.y,o=e.z,r=e.w,s=n*Bq+i,a=o*Bq+r;return yo.octDecodeInRange(s,a,65535,t)};yo.octPackFloat=function(e){return 256*e.x+e.y};var u3=new D;yo.octEncodeFloat=function(e){return yo.octEncode(e,u3),yo.octPackFloat(u3)};yo.octDecodeFloat=function(e,t){let n=e/256,i=Math.floor(n),o=(n-i)*256;return yo.octDecode(i,o,t)};yo.octPack=function(e,t,n,i){let o=yo.octEncodeFloat(e),r=yo.octEncodeFloat(t),s=yo.octEncode(n,u3);return i.x=65536*s.x+o,i.y=65536*s.y+r,i};yo.octUnpack=function(e,t,n,i){let o=e.x/65536,r=Math.floor(o),s=(o-r)*65536;o=e.y/65536;let a=Math.floor(o),c=(o-a)*65536;yo.octDecodeFloat(s,t),yo.octDecodeFloat(c,n),yo.octDecode(r,a,i)};yo.compressTextureCoordinates=function(e){let t=e.x*4095|0,n=e.y*4095|0;return 4096*t+n};yo.decompressTextureCoordinates=function(e,t){let n=e/4096,i=Math.floor(n);return t.x=i/4095,t.y=(e-i*4096)/4095,t};function d3(e){return e>>1^-(e&1)}yo.zigZagDeltaDecode=function(e,t,n){let i=e.length,o=0,r=0,s=0;for(let a=0;a<i;++a)o+=d3(e[a]),r+=d3(t[a]),e[a]=o,t[a]=r,d(n)&&(s+=d3(n[a]),n[a]=s)};yo.dequantize=function(e,t,n,i){let o=an.getNumberOfComponents(n),r;switch(t){case Q.BYTE:r=127;break;case Q.UNSIGNED_BYTE:r=255;break;case Q.SHORT:r=32767;break;case Q.UNSIGNED_SHORT:r=65535;break;case Q.INT:r=2147483647;break;case Q.UNSIGNED_INT:r=4294967295;break}let s=new Float32Array(i*o);for(let a=0;a<i;a++)for(let c=0;c<o;c++){let l=a*o+c;s[l]=Math.max(e[l]/r,-1)}return s};yo.decodeRGB565=function(e,t){let n=e.length;d(t)||(t=new Float32Array(n*3));let i=31,o=63,r=1/31,s=1/63;for(let a=0;a<n;a++){let c=e[a],l=c>>11,u=c>>5&o,m=c&i,p=3*a;t[p]=l*r,t[p+1]=u*s,t[p+2]=m*r}return t};var Kn=yo;var V5t=T(S(),1);var Oq=new h,Kq=new h,Hq=new h;function rRe(e,t,n,i,o){d(o)||(o=new h);let r,s,a,c,l,u,m,p;if(d(t.z)){if(h.equalsEpsilon(e,t,W.EPSILON14))return h.clone(h.UNIT_X,o);if(h.equalsEpsilon(e,n,W.EPSILON14))return h.clone(h.UNIT_Y,o);if(h.equalsEpsilon(e,i,W.EPSILON14))return h.clone(h.UNIT_Z,o);r=h.subtract(n,t,Oq),s=h.subtract(i,t,Kq),a=h.subtract(e,t,Hq),c=h.dot(r,r),l=h.dot(r,s),u=h.dot(r,a),m=h.dot(s,s),p=h.dot(s,a)}else{if(D.equalsEpsilon(e,t,W.EPSILON14))return h.clone(h.UNIT_X,o);if(D.equalsEpsilon(e,n,W.EPSILON14))return h.clone(h.UNIT_Y,o);if(D.equalsEpsilon(e,i,W.EPSILON14))return h.clone(h.UNIT_Z,o);r=D.subtract(n,t,Oq),s=D.subtract(i,t,Kq),a=D.subtract(e,t,Hq),c=D.dot(r,r),l=D.dot(r,s),u=D.dot(r,a),m=D.dot(s,s),p=D.dot(s,a)}o.y=m*u-l*p,o.z=c*p-l*u;let y=c*m-l*l;if(y!==0)return o.y/=y,o.z/=y,o.x=1-o.y-o.z,o}var Ug=rRe;var G5t=T(S(),1);var m3={};m3.calculateACMR=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.indices,n=e.maximumIndex,i=g(e.cacheSize,24),o=t.length;if(!d(n)){n=0;let a=0,c=t[a];for(;a<o;)c>n&&(n=c),++a,c=t[a]}let r=[];for(let a=0;a<n+1;a++)r[a]=0;let s=i+1;for(let a=0;a<o;++a)s-r[t[a]]>i&&(r[t[a]]=s,++s);return(s-i+1)/(o/3)};m3.tipsify=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.indices,n=e.maximumIndex,i=g(e.cacheSize,24),o;function r(b,R,E,I){for(;R.length>=1;){let w=R[R.length-1];if(R.splice(R.length-1,1),b[w].numLiveTriangles>0)return w}for(;o<I;){if(b[o].numLiveTriangles>0)return++o,o-1;++o}return-1}function s(b,R,E,I,w,N,B){let k=-1,O,U=-1,J=0;for(;J<E.length;){let z=E[J];I[z].numLiveTriangles&&(O=0,w-I[z].timeStamp+2*I[z].numLiveTriangles<=R&&(O=w-I[z].timeStamp),(O>U||U===-1)&&(U=O,k=z)),++J}return k===-1?r(I,N,b,B):k}let a=t.length,c=0,l=0,u=t[l],m=a;if(d(n))c=n+1;else{for(;l<m;)u>c&&(c=u),++l,u=t[l];if(c===-1)return 0;++c}let p=[],y;for(y=0;y<c;y++)p[y]={numLiveTriangles:0,timeStamp:0,vertexTriangles:[]};l=0;let f=0;for(;l<m;)p[t[l]].vertexTriangles.push(f),++p[t[l]].numLiveTriangles,p[t[l+1]].vertexTriangles.push(f),++p[t[l+1]].numLiveTriangles,p[t[l+2]].vertexTriangles.push(f),++p[t[l+2]].numLiveTriangles,++f,l+=3;let x=0,_=i+1;o=1;let C=[],V=[],L,Z,G=0,X=[],P=a/3,v=[];for(y=0;y<P;y++)v[y]=!1;let F,M;for(;x!==-1;){C=[],Z=p[x],M=Z.vertexTriangles.length;for(let b=0;b<M;++b)if(f=Z.vertexTriangles[b],!v[f]){v[f]=!0,l=f+f+f;for(let R=0;R<3;++R)F=t[l],C.push(F),V.push(F),X[G]=F,++G,L=p[F],--L.numLiveTriangles,_-L.timeStamp>i&&(L.timeStamp=_,++_),++l}x=s(t,i,C,p,_,V,c)}return X};var ZG=m3;var Cc={};function iM(e,t,n,i,o){e[t++]=n,e[t++]=i,e[t++]=i,e[t++]=o,e[t++]=o,e[t]=n}function sRe(e){let t=e.length,n=t/3*6,i=Ue.createTypedArray(t,n),o=0;for(let r=0;r<t;r+=3,o+=6)iM(i,o,e[r],e[r+1],e[r+2]);return i}function aRe(e){let t=e.length;if(t>=3){let n=(t-2)*6,i=Ue.createTypedArray(t,n);iM(i,0,e[0],e[1],e[2]);let o=6;for(let r=3;r<t;++r,o+=6)iM(i,o,e[r-1],e[r],e[r-2]);return i}return new Uint16Array}function cRe(e){if(e.length>0){let t=e.length-1,n=(t-1)*6,i=Ue.createTypedArray(t,n),o=e[0],r=0;for(let s=1;s<t;++s,r+=6)iM(i,r,o,e[s],e[s+1]);return i}return new Uint16Array}Cc.toWireframe=function(e){let t=e.indices;if(d(t)){switch(e.primitiveType){case Fe.TRIANGLES:e.indices=sRe(t);break;case Fe.TRIANGLE_STRIP:e.indices=aRe(t);break;case Fe.TRIANGLE_FAN:e.indices=cRe(t);break}e.primitiveType=Fe.LINES}return e};Cc.createLineSegmentsForVectors=function(e,t,n){t=g(t,"normal"),n=g(n,1e4);let i=e.attributes.position.values,o=e.attributes[t].values,r=i.length,s=new Float64Array(2*r),a=0;for(let u=0;u<r;u+=3)s[a++]=i[u],s[a++]=i[u+1],s[a++]=i[u+2],s[a++]=i[u]+o[u]*n,s[a++]=i[u+1]+o[u+1]*n,s[a++]=i[u+2]+o[u+2]*n;let c,l=e.boundingSphere;return d(l)&&(c=new ce(l.center,l.radius+n)),new dt({attributes:{position:new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:s})},primitiveType:Fe.LINES,boundingSphere:c})};Cc.createAttributeLocations=function(e){let t=["position","positionHigh","positionLow","position3DHigh","position3DLow","position2DHigh","position2DLow","pickColor","normal","st","tangent","bitangent","extrudeDirection","compressedAttributes"],n=e.attributes,i={},o=0,r,s=t.length;for(r=0;r<s;++r){let a=t[r];d(n[a])&&(i[a]=o++)}for(let a in n)n.hasOwnProperty(a)&&!d(i[a])&&(i[a]=o++);return i};Cc.reorderForPreVertexCache=function(e){let t=dt.computeNumberOfVertices(e),n=e.indices;if(d(n)){let i=new Int32Array(t);for(let p=0;p<t;p++)i[p]=-1;let o=n,r=o.length,s=Ue.createTypedArray(t,r),a=0,c=0,l=0,u;for(;a<r;)u=i[o[a]],u!==-1?s[c]=u:(u=o[a],i[u]=l,s[c]=l,++l),++a,++c;e.indices=s;let m=e.attributes;for(let p in m)if(m.hasOwnProperty(p)&&d(m[p])&&d(m[p].values)){let y=m[p],f=y.values,x=0,_=y.componentsPerAttribute,C=Q.createTypedArray(y.componentDatatype,l*_);for(;x<t;){let V=i[x];if(V!==-1)for(let L=0;L<_;L++)C[_*V+L]=f[_*x+L];++x}y.values=C}}return e};Cc.reorderForPostVertexCache=function(e,t){let n=e.indices;if(e.primitiveType===Fe.TRIANGLES&&d(n)){let i=n.length,o=0;for(let r=0;r<i;r++)n[r]>o&&(o=n[r]);e.indices=ZG.tipsify({indices:n,maximumIndex:o,cacheSize:t})}return e};function zq(e){let t={};for(let n in e)if(e.hasOwnProperty(n)&&d(e[n])&&d(e[n].values)){let i=e[n];t[n]=new Ze({componentDatatype:i.componentDatatype,componentsPerAttribute:i.componentsPerAttribute,normalize:i.normalize,values:[]})}return t}function lRe(e,t,n){for(let i in t)if(t.hasOwnProperty(i)&&d(t[i])&&d(t[i].values)){let o=t[i];for(let r=0;r<o.componentsPerAttribute;++r)e[i].values.push(o.values[n*o.componentsPerAttribute+r])}}Cc.fitToUnsignedShortIndices=function(e){let t=[],n=dt.computeNumberOfVertices(e);if(d(e.indices)&&n>=W.SIXTY_FOUR_KILOBYTES){let i=[],o=[],r=0,s=zq(e.attributes),a=e.indices,c=a.length,l;e.primitiveType===Fe.TRIANGLES?l=3:e.primitiveType===Fe.LINES?l=2:e.primitiveType===Fe.POINTS&&(l=1);for(let u=0;u<c;u+=l){for(let m=0;m<l;++m){let p=a[u+m],y=i[p];d(y)||(y=r++,i[p]=y,lRe(s,e.attributes,p)),o.push(y)}r+l>=W.SIXTY_FOUR_KILOBYTES&&(t.push(new dt({attributes:s,indices:o,primitiveType:e.primitiveType,boundingSphere:e.boundingSphere,boundingSphereCV:e.boundingSphereCV})),i=[],o=[],r=0,s=zq(e.attributes))}o.length!==0&&t.push(new dt({attributes:s,indices:o,primitiveType:e.primitiveType,boundingSphere:e.boundingSphere,boundingSphereCV:e.boundingSphereCV}))}else t.push(e);return t};var Jq=new h,dRe=new he;Cc.projectTo2D=function(e,t,n,i,o){let r=e.attributes[t];o=d(o)?o:new Zi;let s=o.ellipsoid,a=r.values,c=new Float64Array(a.length),l=0;for(let u=0;u<a.length;u+=3){let m=h.fromArray(a,u,Jq),p=s.cartesianToCartographic(m,dRe),y=o.project(p,Jq);c[l++]=y.x,c[l++]=y.y,c[l++]=y.z}return e.attributes[n]=r,e.attributes[i]=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:c}),delete e.attributes[t],e};var h3={high:0,low:0};Cc.encodeAttribute=function(e,t,n,i){let o=e.attributes[t],r=o.values,s=r.length,a=new Float32Array(s),c=new Float32Array(s);for(let u=0;u<s;++u)On.encode(r[u],h3),a[u]=h3.high,c[u]=h3.low;let l=o.componentsPerAttribute;return e.attributes[n]=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:l,values:a}),e.attributes[i]=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:l,values:c}),delete e.attributes[t],e};var am=new h;function f3(e,t){if(d(t)){let n=t.values,i=n.length;for(let o=0;o<i;o+=3)h.unpack(n,o,am),A.multiplyByPoint(e,am,am),h.pack(am,n,o)}}function p3(e,t){if(d(t)){let n=t.values,i=n.length;for(let o=0;o<i;o+=3)h.unpack(n,o,am),$.multiplyByVector(e,am,am),am=h.normalize(am,am),h.pack(am,n,o)}}var jA=new A,qA=new $;Cc.transformToWorldCoordinates=function(e){let t=e.modelMatrix;if(A.equals(t,A.IDENTITY))return e;let n=e.geometry.attributes;f3(t,n.position),f3(t,n.prevPosition),f3(t,n.nextPosition),(d(n.normal)||d(n.tangent)||d(n.bitangent))&&(A.inverse(t,jA),A.transpose(jA,jA),A.getMatrix3(jA,qA),p3(qA,n.normal),p3(qA,n.tangent),p3(qA,n.bitangent));let i=e.geometry.boundingSphere;return d(i)&&(e.geometry.boundingSphere=ce.transform(i,t,i)),e.modelMatrix=A.clone(A.IDENTITY),e};function uRe(e,t){let n=e.length,i={},o=e[0][t].attributes,r;for(r in o)if(o.hasOwnProperty(r)&&d(o[r])&&d(o[r].values)){let s=o[r],a=s.values.length,c=!0;for(let l=1;l<n;++l){let u=e[l][t].attributes[r];if(!d(u)||s.componentDatatype!==u.componentDatatype||s.componentsPerAttribute!==u.componentsPerAttribute||s.normalize!==u.normalize){c=!1;break}a+=u.values.length}c&&(i[r]=new Ze({componentDatatype:s.componentDatatype,componentsPerAttribute:s.componentsPerAttribute,normalize:s.normalize,values:Q.createTypedArray(s.componentDatatype,a)}))}return i}var mRe=new h;function b3(e,t){let n=e.length,i,o,r,s,a=e[0].modelMatrix,c=d(e[0][t].indices),l=e[0][t].primitiveType,u=uRe(e,t),m,p,y;for(i in u)if(u.hasOwnProperty(i))for(m=u[i].values,s=0,o=0;o<n;++o)for(p=e[o][t].attributes[i].values,y=p.length,r=0;r<y;++r)m[s++]=p[r];let f;if(c){let V=0;for(o=0;o<n;++o)V+=e[o][t].indices.length;let L=dt.computeNumberOfVertices(new dt({attributes:u,primitiveType:Fe.POINTS})),Z=Ue.createTypedArray(L,V),G=0,X=0;for(o=0;o<n;++o){let P=e[o][t].indices,v=P.length;for(s=0;s<v;++s)Z[G++]=X+P[s];X+=dt.computeNumberOfVertices(e[o][t])}f=Z}let x=new h,_=0,C;for(o=0;o<n;++o){if(C=e[o][t].boundingSphere,!d(C)){x=void 0;break}h.add(C.center,x,x)}if(d(x))for(h.divideByScalar(x,n,x),o=0;o<n;++o){C=e[o][t].boundingSphere;let V=h.magnitude(h.subtract(C.center,x,mRe))+C.radius;V>_&&(_=V)}return new dt({attributes:u,indices:f,primitiveType:l,boundingSphere:d(x)?new ce(x,_):void 0})}Cc.combineInstances=function(e){let t=[],n=[],i=e.length;for(let r=0;r<i;++r){let s=e[r];d(s.geometry)?t.push(s):d(s.westHemisphereGeometry)&&d(s.eastHemisphereGeometry)&&n.push(s)}let o=[];return t.length>0&&o.push(b3(t,"geometry")),n.length>0&&(o.push(b3(n,"westHemisphereGeometry")),o.push(b3(n,"eastHemisphereGeometry"))),o};var zd=new h,GG=new h,mS=new h,hS=new h;Cc.computeNormal=function(e){let t=e.indices,n=e.attributes,i=n.position.values,o=n.position.values.length/3,r=t.length,s=new Array(o),a=new Array(r/3),c=new Array(r),l;for(l=0;l<o;l++)s[l]={indexOffset:0,count:0,currentCount:0};let u=0;for(l=0;l<r;l+=3){let f=t[l],x=t[l+1],_=t[l+2],C=f*3,V=x*3,L=_*3;GG.x=i[C],GG.y=i[C+1],GG.z=i[C+2],mS.x=i[V],mS.y=i[V+1],mS.z=i[V+2],hS.x=i[L],hS.y=i[L+1],hS.z=i[L+2],s[f].count++,s[x].count++,s[_].count++,h.subtract(mS,GG,mS),h.subtract(hS,GG,hS),a[u]=h.cross(mS,hS,new h),u++}let m=0;for(l=0;l<o;l++)s[l].indexOffset+=m,m+=s[l].count;u=0;let p;for(l=0;l<r;l+=3){p=s[t[l]];let f=p.indexOffset+p.currentCount;c[f]=u,p.currentCount++,p=s[t[l+1]],f=p.indexOffset+p.currentCount,c[f]=u,p.currentCount++,p=s[t[l+2]],f=p.indexOffset+p.currentCount,c[f]=u,p.currentCount++,u++}let y=new Float32Array(o*3);for(l=0;l<o;l++){let f=l*3;if(p=s[l],h.clone(h.ZERO,zd),p.count>0){for(u=0;u<p.count;u++)h.add(zd,a[c[p.indexOffset+u]],zd);h.equalsEpsilon(h.ZERO,zd,W.EPSILON10)&&h.clone(a[c[p.indexOffset]],zd)}h.equalsEpsilon(h.ZERO,zd,W.EPSILON10)&&(zd.z=1),h.normalize(zd,zd),y[f]=zd.x,y[f+1]=zd.y,y[f+2]=zd.z}return e.attributes.normal=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:y}),e};var hRe=new h,Qq=new h,fRe=new h;Cc.computeTangentAndBitangent=function(e){let t=e.attributes,n=e.indices,i=e.attributes.position.values,o=e.attributes.normal.values,r=e.attributes.st.values,s=e.attributes.position.values.length/3,a=n.length,c=new Array(s*3),l;for(l=0;l<c.length;l++)c[l]=0;let u,m,p;for(l=0;l<a;l+=3){let x=n[l],_=n[l+1],C=n[l+2];u=x*3,m=_*3,p=C*3;let V=x*2,L=_*2,Z=C*2,G=i[u],X=i[u+1],P=i[u+2],v=r[V],F=r[V+1],M=r[L+1]-F,b=r[Z+1]-F,R=1/((r[L]-v)*b-(r[Z]-v)*M),E=(b*(i[m]-G)-M*(i[p]-G))*R,I=(b*(i[m+1]-X)-M*(i[p+1]-X))*R,w=(b*(i[m+2]-P)-M*(i[p+2]-P))*R;c[u]+=E,c[u+1]+=I,c[u+2]+=w,c[m]+=E,c[m+1]+=I,c[m+2]+=w,c[p]+=E,c[p+1]+=I,c[p+2]+=w}let y=new Float32Array(s*3),f=new Float32Array(s*3);for(l=0;l<s;l++){u=l*3,m=u+1,p=u+2;let x=h.fromArray(o,u,hRe),_=h.fromArray(c,u,fRe),C=h.dot(x,_);h.multiplyByScalar(x,C,Qq),h.normalize(h.subtract(_,Qq,_),_),y[u]=_.x,y[m]=_.y,y[p]=_.z,h.normalize(h.cross(x,_,_),_),f[u]=_.x,f[m]=_.y,f[p]=_.z}return e.attributes.tangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:y}),e.attributes.bitangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:f}),e};var EG=new D,sm=new h,jq=new h,qq=new h,$A=new D;Cc.compressVertices=function(e){let t=e.attributes.extrudeDirection,n,i;if(d(t)){let X=t.values;i=X.length/3;let P=new Float32Array(i*2),v=0;for(n=0;n<i;++n){if(h.fromArray(X,n*3,sm),h.equals(sm,h.ZERO)){v+=2;continue}$A=Kn.octEncodeInRange(sm,65535,$A),P[v++]=$A.x,P[v++]=$A.y}return e.attributes.compressedAttributes=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:P}),delete e.attributes.extrudeDirection,e}let o=e.attributes.normal,r=e.attributes.st,s=d(o),a=d(r);if(!s&&!a)return e;let c=e.attributes.tangent,l=e.attributes.bitangent,u=d(c),m=d(l),p,y,f,x;s&&(p=o.values),a&&(y=r.values),u&&(f=c.values),m&&(x=l.values),i=(s?p.length:y.length)/(s?3:2);let V=i,L=a&&s?2:1;L+=u||m?1:0,V*=L;let Z=new Float32Array(V),G=0;for(n=0;n<i;++n){a&&(D.fromArray(y,n*2,EG),Z[G++]=Kn.compressTextureCoordinates(EG));let X=n*3;s&&d(f)&&d(x)?(h.fromArray(p,X,sm),h.fromArray(f,X,jq),h.fromArray(x,X,qq),Kn.octPack(sm,jq,qq,EG),Z[G++]=EG.x,Z[G++]=EG.y):(s&&(h.fromArray(p,X,sm),Z[G++]=Kn.octEncodeFloat(sm)),u&&(h.fromArray(f,X,sm),Z[G++]=Kn.octEncodeFloat(sm)),m&&(h.fromArray(x,X,sm),Z[G++]=Kn.octEncodeFloat(sm)))}return e.attributes.compressedAttributes=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:L,values:Z}),s&&delete e.attributes.normal,a&&delete e.attributes.st,m&&delete e.attributes.bitangent,u&&delete e.attributes.tangent,e};function pRe(e){if(d(e.indices))return e;let t=dt.computeNumberOfVertices(e),n=Ue.createTypedArray(t,t);for(let i=0;i<t;++i)n[i]=i;return e.indices=n,e}function bRe(e){let t=dt.computeNumberOfVertices(e),n=Ue.createTypedArray(t,(t-2)*3);n[0]=1,n[1]=0,n[2]=2;let i=3;for(let o=3;o<t;++o)n[i++]=o-1,n[i++]=0,n[i++]=o;return e.indices=n,e.primitiveType=Fe.TRIANGLES,e}function yRe(e){let t=dt.computeNumberOfVertices(e),n=Ue.createTypedArray(t,(t-2)*3);n[0]=0,n[1]=1,n[2]=2,t>3&&(n[3]=0,n[4]=2,n[5]=3);let i=6;for(let o=3;o<t-1;o+=2)n[i++]=o,n[i++]=o-1,n[i++]=o+1,o+2<t&&(n[i++]=o,n[i++]=o+1,n[i++]=o+2);return e.indices=n,e.primitiveType=Fe.TRIANGLES,e}function gRe(e){if(d(e.indices))return e;let t=dt.computeNumberOfVertices(e),n=Ue.createTypedArray(t,t);for(let i=0;i<t;++i)n[i]=i;return e.indices=n,e}function xRe(e){let t=dt.computeNumberOfVertices(e),n=Ue.createTypedArray(t,(t-1)*2);n[0]=0,n[1]=1;let i=2;for(let o=2;o<t;++o)n[i++]=o-1,n[i++]=o;return e.indices=n,e.primitiveType=Fe.LINES,e}function _Re(e){let t=dt.computeNumberOfVertices(e),n=Ue.createTypedArray(t,t*2);n[0]=0,n[1]=1;let i=2;for(let o=2;o<t;++o)n[i++]=o-1,n[i++]=o;return n[i++]=t-1,n[i]=0,e.indices=n,e.primitiveType=Fe.LINES,e}function TRe(e){switch(e.primitiveType){case Fe.TRIANGLE_FAN:return bRe(e);case Fe.TRIANGLE_STRIP:return yRe(e);case Fe.TRIANGLES:return pRe(e);case Fe.LINE_STRIP:return xRe(e);case Fe.LINE_LOOP:return _Re(e);case Fe.LINES:return gRe(e)}return e}function db(e,t){Math.abs(e.y)<W.EPSILON6&&(t?e.y=-W.EPSILON6:e.y=W.EPSILON6)}function SRe(e,t,n){if(e.y!==0&&t.y!==0&&n.y!==0){db(e,e.y<0),db(t,t.y<0),db(n,n.y<0);return}let i=Math.abs(e.y),o=Math.abs(t.y),r=Math.abs(n.y),s;i>o?i>r?s=W.sign(e.y):s=W.sign(n.y):o>r?s=W.sign(t.y):s=W.sign(n.y);let a=s<0;db(e,a),db(t,a),db(n,a)}var $q=new h;function Jd(e,t,n,i){h.add(e,h.multiplyByScalar(h.subtract(t,e,$q),e.y/(e.y-t.y),$q),n),h.clone(n,i),db(n,!0),db(i,!1)}var kg=new h,Dg=new h,Bg=new h,Yg=new h,y3={positions:new Array(7),indices:new Array(3*3)};function CRe(e,t,n){if(e.x>=0||t.x>=0||n.x>=0)return;SRe(e,t,n);let i=e.y<0,o=t.y<0,r=n.y<0,s=0;s+=i?1:0,s+=o?1:0,s+=r?1:0;let a=y3.indices;s===1?(a[1]=3,a[2]=4,a[5]=6,a[7]=6,a[8]=5,i?(Jd(e,t,kg,Bg),Jd(e,n,Dg,Yg),a[0]=0,a[3]=1,a[4]=2,a[6]=1):o?(Jd(t,n,kg,Bg),Jd(t,e,Dg,Yg),a[0]=1,a[3]=2,a[4]=0,a[6]=2):r&&(Jd(n,e,kg,Bg),Jd(n,t,Dg,Yg),a[0]=2,a[3]=0,a[4]=1,a[6]=0)):s===2&&(a[2]=4,a[4]=4,a[5]=3,a[7]=5,a[8]=6,i?o?r||(Jd(n,e,kg,Bg),Jd(n,t,Dg,Yg),a[0]=0,a[1]=1,a[3]=0,a[6]=2):(Jd(t,n,kg,Bg),Jd(t,e,Dg,Yg),a[0]=2,a[1]=0,a[3]=2,a[6]=1):(Jd(e,t,kg,Bg),Jd(e,n,Dg,Yg),a[0]=1,a[1]=2,a[3]=1,a[6]=0));let c=y3.positions;return c[0]=e,c[1]=t,c[2]=n,c.length=3,(s===1||s===2)&&(c[3]=kg,c[4]=Dg,c[5]=Bg,c[6]=Yg,c.length=7),y3}function e$(e,t){let n=e.attributes;if(n.position.values.length===0)return;for(let o in n)if(n.hasOwnProperty(o)&&d(n[o])&&d(n[o].values)){let r=n[o];r.values=Q.createTypedArray(r.componentDatatype,r.values)}let i=dt.computeNumberOfVertices(e);return e.indices=Ue.createTypedArray(i,e.indices),t&&(e.boundingSphere=ce.fromVertices(n.position.values)),e}function pS(e){let t=e.attributes,n={};for(let i in t)if(t.hasOwnProperty(i)&&d(t[i])&&d(t[i].values)){let o=t[i];n[i]=new Ze({componentDatatype:o.componentDatatype,componentsPerAttribute:o.componentsPerAttribute,normalize:o.normalize,values:[]})}return new dt({attributes:n,indices:[],primitiveType:e.primitiveType})}function T3(e,t,n){let i=d(e.geometry.boundingSphere);t=e$(t,i),n=e$(n,i),d(n)&&!d(t)?e.geometry=n:!d(n)&&d(t)?e.geometry=t:(e.westHemisphereGeometry=t,e.eastHemisphereGeometry=n,e.geometry=void 0)}function S3(e,t){let n=new e,i=new e,o=new e;return function(r,s,a,c,l,u,m,p){let y=e.fromArray(l,r*t,n),f=e.fromArray(l,s*t,i),x=e.fromArray(l,a*t,o);e.multiplyByScalar(y,c.x,y),e.multiplyByScalar(f,c.y,f),e.multiplyByScalar(x,c.z,x);let _=e.add(y,f,y);e.add(_,x,_),p&&e.normalize(_,_),e.pack(_,u,m*t)}}var VRe=S3(se,4),nM=S3(h,3),s$=S3(D,2),LRe=function(e,t,n,i,o,r,s){let a=o[e]*i.x,c=o[t]*i.y,l=o[n]*i.z;r[s]=a+c+l>W.EPSILON6?1:0},XG=new h,g3=new h,x3=new h,RRe=new h;function eM(e,t,n,i,o,r,s,a,c,l,u,m,p,y,f,x){if(!d(r)&&!d(s)&&!d(a)&&!d(c)&&!d(l)&&y===0)return;let _=h.fromArray(o,e*3,XG),C=h.fromArray(o,t*3,g3),V=h.fromArray(o,n*3,x3),L=Ug(i,_,C,V,RRe);if(d(L)){if(d(r)&&nM(e,t,n,L,r,m.normal.values,x,!0),d(l)){let Z=h.fromArray(l,e*3,XG),G=h.fromArray(l,t*3,g3),X=h.fromArray(l,n*3,x3);h.multiplyByScalar(Z,L.x,Z),h.multiplyByScalar(G,L.y,G),h.multiplyByScalar(X,L.z,X);let P;!h.equals(Z,h.ZERO)||!h.equals(G,h.ZERO)||!h.equals(X,h.ZERO)?(P=h.add(Z,G,Z),h.add(P,X,P),h.normalize(P,P)):(P=XG,P.x=0,P.y=0,P.z=0),h.pack(P,m.extrudeDirection.values,x*3)}if(d(u)&&LRe(e,t,n,L,u,m.applyOffset.values,x),d(s)&&nM(e,t,n,L,s,m.tangent.values,x,!0),d(a)&&nM(e,t,n,L,a,m.bitangent.values,x,!0),d(c)&&s$(e,t,n,L,c,m.st.values,x),y>0)for(let Z=0;Z<y;Z++){let G=p[Z];ZRe(e,t,n,L,x,f[G],m[G])}}}function ZRe(e,t,n,i,o,r,s){let a=r.componentsPerAttribute,c=r.values,l=s.values;switch(a){case 4:VRe(e,t,n,i,c,l,o,!1);break;case 3:nM(e,t,n,i,c,l,o,!1);break;case 2:s$(e,t,n,i,c,l,o,!1);break;default:l[o]=c[e]*i.x+c[t]*i.y+c[n]*i.z}}function Ah(e,t,n,i,o,r){let s=e.position.values.length/3;if(o!==-1){let a=i[o],c=n[a];return c===-1?(n[a]=s,e.position.values.push(r.x,r.y,r.z),t.push(s),s):(t.push(c),c)}return e.position.values.push(r.x,r.y,r.z),t.push(s),s}var GRe={position:!0,normal:!0,bitangent:!0,tangent:!0,st:!0,extrudeDirection:!0,applyOffset:!0};function t$(e){let t=e.geometry,n=t.attributes,i=n.position.values,o=d(n.normal)?n.normal.values:void 0,r=d(n.bitangent)?n.bitangent.values:void 0,s=d(n.tangent)?n.tangent.values:void 0,a=d(n.st)?n.st.values:void 0,c=d(n.extrudeDirection)?n.extrudeDirection.values:void 0,l=d(n.applyOffset)?n.applyOffset.values:void 0,u=t.indices,m=[];for(let P in n)n.hasOwnProperty(P)&&!GRe[P]&&d(n[P])&&m.push(P);let p=m.length,y=pS(t),f=pS(t),x,_,C,V,L,Z=[];Z.length=i.length/3;let G=[];for(G.length=i.length/3,L=0;L<Z.length;++L)Z[L]=-1,G[L]=-1;let X=u.length;for(L=0;L<X;L+=3){let P=u[L],v=u[L+1],F=u[L+2],M=h.fromArray(i,P*3),b=h.fromArray(i,v*3),R=h.fromArray(i,F*3),E=CRe(M,b,R);if(d(E)&&E.positions.length>3){let I=E.positions,w=E.indices,N=w.length;for(let B=0;B<N;++B){let k=w[B],O=I[k];O.y<0?(x=f.attributes,_=f.indices,C=Z):(x=y.attributes,_=y.indices,C=G),V=Ah(x,_,C,u,k<3?L+k:-1,O),eM(P,v,F,O,i,o,s,r,a,c,l,x,m,p,n,V)}}else d(E)&&(M=E.positions[0],b=E.positions[1],R=E.positions[2]),M.y<0?(x=f.attributes,_=f.indices,C=Z):(x=y.attributes,_=y.indices,C=G),V=Ah(x,_,C,u,L,M),eM(P,v,F,M,i,o,s,r,a,c,l,x,m,p,n,V),V=Ah(x,_,C,u,L+1,b),eM(P,v,F,b,i,o,s,r,a,c,l,x,m,p,n,V),V=Ah(x,_,C,u,L+2,R),eM(P,v,F,R,i,o,s,r,a,c,l,x,m,p,n,V)}T3(e,f,y)}var a$=sn.fromPointNormal(h.ZERO,h.UNIT_Y),ERe=new h,XRe=new h;function fS(e,t,n,i,o,r,s){if(!d(s))return;let a=h.fromArray(i,e*3,XG);h.equalsEpsilon(a,n,W.EPSILON10)?r.applyOffset.values[o]=s[e]:r.applyOffset.values[o]=s[t]}function n$(e){let t=e.geometry,n=t.attributes,i=n.position.values,o=d(n.applyOffset)?n.applyOffset.values:void 0,r=t.indices,s=pS(t),a=pS(t),c,l=r.length,u=[];u.length=i.length/3;let m=[];for(m.length=i.length/3,c=0;c<u.length;++c)u[c]=-1,m[c]=-1;for(c=0;c<l;c+=2){let p=r[c],y=r[c+1],f=h.fromArray(i,p*3,XG),x=h.fromArray(i,y*3,g3),_;Math.abs(f.y)<W.EPSILON6&&(f.y<0?f.y=-W.EPSILON6:f.y=W.EPSILON6),Math.abs(x.y)<W.EPSILON6&&(x.y<0?x.y=-W.EPSILON6:x.y=W.EPSILON6);let C=s.attributes,V=s.indices,L=m,Z=a.attributes,G=a.indices,X=u,P=Si.lineSegmentPlane(f,x,a$,x3);if(d(P)){let v=h.multiplyByScalar(h.UNIT_Y,5*W.EPSILON9,ERe);f.y<0&&(h.negate(v,v),C=a.attributes,V=a.indices,L=u,Z=s.attributes,G=s.indices,X=m);let F=h.add(P,v,XRe);_=Ah(C,V,L,r,c,f),fS(p,y,f,i,_,C,o),_=Ah(C,V,L,r,-1,F),fS(p,y,F,i,_,C,o),h.negate(v,v),h.add(P,v,F),_=Ah(Z,G,X,r,-1,F),fS(p,y,F,i,_,Z,o),_=Ah(Z,G,X,r,c+1,x),fS(p,y,x,i,_,Z,o)}else{let v,F,M;f.y<0?(v=a.attributes,F=a.indices,M=u):(v=s.attributes,F=s.indices,M=m),_=Ah(v,F,M,r,c,f),fS(p,y,f,i,_,v,o),_=Ah(v,F,M,r,c+1,x),fS(p,y,x,i,_,v,o)}}T3(e,a,s)}var i$=new D,IRe=new D,c$=new h,l$=new h,_3=new h,WRe=new h,PRe=new h,vRe=new h,o$=new se;function r$(e){let t=e.attributes,n=t.position.values,i=t.prevPosition.values,o=t.nextPosition.values,r=n.length;for(let s=0;s<r;s+=3){let a=h.unpack(n,s,c$);if(a.x>0)continue;let c=h.unpack(i,s,l$);(a.y<0&&c.y>0||a.y>0&&c.y<0)&&(s-3>0?(i[s]=n[s-3],i[s+1]=n[s-2],i[s+2]=n[s-1]):h.pack(a,i,s));let l=h.unpack(o,s,_3);(a.y<0&&l.y>0||a.y>0&&l.y<0)&&(s+3<r?(o[s]=n[s+3],o[s+1]=n[s+4],o[s+2]=n[s+5]):h.pack(a,o,s))}}var wRe=5*W.EPSILON9,tM=W.EPSILON6;function FRe(e){let t=e.geometry,n=t.attributes,i=n.position.values,o=n.prevPosition.values,r=n.nextPosition.values,s=n.expandAndWidth.values,a=d(n.st)?n.st.values:void 0,c=d(n.color)?n.color.values:void 0,l=pS(t),u=pS(t),m,p,y,f=!1,x=i.length/3;for(m=0;m<x;m+=4){let _=m,C=m+2,V=h.fromArray(i,_*3,c$),L=h.fromArray(i,C*3,l$);if(Math.abs(V.y)<tM)for(V.y=tM*(L.y<0?-1:1),i[m*3+1]=V.y,i[(m+1)*3+1]=V.y,p=_*3;p<_*3+4*3;p+=3)o[p]=i[m*3],o[p+1]=i[m*3+1],o[p+2]=i[m*3+2];if(Math.abs(L.y)<tM)for(L.y=tM*(V.y<0?-1:1),i[(m+2)*3+1]=L.y,i[(m+3)*3+1]=L.y,p=_*3;p<_*3+4*3;p+=3)r[p]=i[(m+2)*3],r[p+1]=i[(m+2)*3+1],r[p+2]=i[(m+2)*3+2];let Z=l.attributes,G=l.indices,X=u.attributes,P=u.indices,v=Si.lineSegmentPlane(V,L,a$,WRe);if(d(v)){f=!0;let F=h.multiplyByScalar(h.UNIT_Y,wRe,PRe);V.y<0&&(h.negate(F,F),Z=u.attributes,G=u.indices,X=l.attributes,P=l.indices);let M=h.add(v,F,vRe);Z.position.values.push(V.x,V.y,V.z,V.x,V.y,V.z),Z.position.values.push(M.x,M.y,M.z),Z.position.values.push(M.x,M.y,M.z),Z.prevPosition.values.push(o[_*3],o[_*3+1],o[_*3+2]),Z.prevPosition.values.push(o[_*3+3],o[_*3+4],o[_*3+5]),Z.prevPosition.values.push(V.x,V.y,V.z,V.x,V.y,V.z),Z.nextPosition.values.push(M.x,M.y,M.z),Z.nextPosition.values.push(M.x,M.y,M.z),Z.nextPosition.values.push(M.x,M.y,M.z),Z.nextPosition.values.push(M.x,M.y,M.z),h.negate(F,F),h.add(v,F,M),X.position.values.push(M.x,M.y,M.z),X.position.values.push(M.x,M.y,M.z),X.position.values.push(L.x,L.y,L.z,L.x,L.y,L.z),X.prevPosition.values.push(M.x,M.y,M.z),X.prevPosition.values.push(M.x,M.y,M.z),X.prevPosition.values.push(M.x,M.y,M.z),X.prevPosition.values.push(M.x,M.y,M.z),X.nextPosition.values.push(L.x,L.y,L.z,L.x,L.y,L.z),X.nextPosition.values.push(r[C*3],r[C*3+1],r[C*3+2]),X.nextPosition.values.push(r[C*3+3],r[C*3+4],r[C*3+5]);let b=D.fromArray(s,_*2,i$),R=Math.abs(b.y);Z.expandAndWidth.values.push(-1,R,1,R),Z.expandAndWidth.values.push(-1,-R,1,-R),X.expandAndWidth.values.push(-1,R,1,R),X.expandAndWidth.values.push(-1,-R,1,-R);let E=h.magnitudeSquared(h.subtract(v,V,_3));if(E/=h.magnitudeSquared(h.subtract(L,V,_3)),d(c)){let I=se.fromArray(c,_*4,o$),w=se.fromArray(c,C*4,o$),N=W.lerp(I.x,w.x,E),B=W.lerp(I.y,w.y,E),k=W.lerp(I.z,w.z,E),O=W.lerp(I.w,w.w,E);for(p=_*4;p<_*4+2*4;++p)Z.color.values.push(c[p]);for(Z.color.values.push(N,B,k,O),Z.color.values.push(N,B,k,O),X.color.values.push(N,B,k,O),X.color.values.push(N,B,k,O),p=C*4;p<C*4+2*4;++p)X.color.values.push(c[p])}if(d(a)){let I=D.fromArray(a,_*2,i$),w=D.fromArray(a,(m+3)*2,IRe),N=W.lerp(I.x,w.x,E);for(p=_*2;p<_*2+2*2;++p)Z.st.values.push(a[p]);for(Z.st.values.push(N,I.y),Z.st.values.push(N,w.y),X.st.values.push(N,I.y),X.st.values.push(N,w.y),p=C*2;p<C*2+2*2;++p)X.st.values.push(a[p])}y=Z.position.values.length/3-4,G.push(y,y+2,y+1),G.push(y+1,y+2,y+3),y=X.position.values.length/3-4,P.push(y,y+2,y+1),P.push(y+1,y+2,y+3)}else{let F,M;for(V.y<0?(F=u.attributes,M=u.indices):(F=l.attributes,M=l.indices),F.position.values.push(V.x,V.y,V.z),F.position.values.push(V.x,V.y,V.z),F.position.values.push(L.x,L.y,L.z),F.position.values.push(L.x,L.y,L.z),p=m*3;p<m*3+4*3;++p)F.prevPosition.values.push(o[p]),F.nextPosition.values.push(r[p]);for(p=m*2;p<m*2+4*2;++p)F.expandAndWidth.values.push(s[p]),d(a)&&F.st.values.push(a[p]);if(d(c))for(p=m*4;p<m*4+4*4;++p)F.color.values.push(c[p]);y=F.position.values.length/3-4,M.push(y,y+2,y+1),M.push(y+1,y+2,y+3)}}f&&(r$(u),r$(l)),T3(e,u,l)}Cc.splitLongitude=function(e){let t=e.geometry,n=t.boundingSphere;if(d(n)&&(n.center.x-n.radius>0||ce.intersectPlane(n,sn.ORIGIN_ZX_PLANE)!==qt.INTERSECTING))return e;if(t.geometryType!==Kd.NONE)switch(t.geometryType){case Kd.POLYLINES:FRe(e);break;case Kd.TRIANGLES:t$(e);break;case Kd.LINES:n$(e);break}else TRe(t),t.primitiveType===Fe.TRIANGLES?t$(e):t.primitiveType===Fe.LINES&&n$(e);return e};var An=Cc;var cUt=T(S(),1);function al(e){this._ellipsoid=g(e,re.WGS84),this._semimajorAxis=this._ellipsoid.maximumRadius,this._oneOverSemimajorAxis=1/this._semimajorAxis}Object.defineProperties(al.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});al.mercatorAngleToGeodeticLatitude=function(e){return W.PI_OVER_TWO-2*Math.atan(Math.exp(-e))};al.geodeticLatitudeToMercatorAngle=function(e){e>al.MaximumLatitude?e=al.MaximumLatitude:e<-al.MaximumLatitude&&(e=-al.MaximumLatitude);let t=Math.sin(e);return .5*Math.log((1+t)/(1-t))};al.MaximumLatitude=al.mercatorAngleToGeodeticLatitude(Math.PI);al.prototype.project=function(e,t){let n=this._semimajorAxis,i=e.longitude*n,o=al.geodeticLatitudeToMercatorAngle(e.latitude)*n,r=e.height;return d(t)?(t.x=i,t.y=o,t.z=r,t):new h(i,o,r)};al.prototype.unproject=function(e,t){let n=this._oneOverSemimajorAxis,i=e.x*n,o=al.mercatorAngleToGeodeticLatitude(e.y*n),r=e.z;return d(t)?(t.longitude=i,t.latitude=o,t.height=r,t):new he(i,o,r)};var Ei=al;function ARe(e,t,n){let i=!n,o=e.length,r;if(!i&&o>1){let s=e[0].modelMatrix;for(r=1;r<o;++r)if(!A.equals(s,e[r].modelMatrix)){i=!0;break}}if(i)for(r=0;r<o;++r)d(e[r].geometry)&&An.transformToWorldCoordinates(e[r]);else A.multiplyTransformation(t,e[0].modelMatrix,t)}function C3(e,t){let n=e.attributes,i=n.position,o=i.values.length/i.componentsPerAttribute;n.batchId=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:1,values:new Float32Array(o)});let r=n.batchId.values;for(let s=0;s<o;++s)r[s]=t}function MRe(e){let t=e.length;for(let n=0;n<t;++n){let i=e[n];d(i.geometry)?C3(i.geometry,n):d(i.westHemisphereGeometry)&&d(i.eastHemisphereGeometry)&&(C3(i.westHemisphereGeometry,n),C3(i.eastHemisphereGeometry,n))}}function NRe(e){let t=e.instances,n=e.projection,i=e.elementIndexUintSupported,o=e.scene3DOnly,r=e.vertexCacheOptimize,s=e.compressVertices,a=e.modelMatrix,c,l,u,m=t.length;for(c=0;c<m;++c)if(d(t[c].geometry)){u=t[c].geometry.primitiveType;break}if(ARe(t,a,o),!o)for(c=0;c<m;++c)d(t[c].geometry)&&An.splitLongitude(t[c]);if(MRe(t),r)for(c=0;c<m;++c){let y=t[c];d(y.geometry)?(An.reorderForPostVertexCache(y.geometry),An.reorderForPreVertexCache(y.geometry)):d(y.westHemisphereGeometry)&&d(y.eastHemisphereGeometry)&&(An.reorderForPostVertexCache(y.westHemisphereGeometry),An.reorderForPreVertexCache(y.westHemisphereGeometry),An.reorderForPostVertexCache(y.eastHemisphereGeometry),An.reorderForPreVertexCache(y.eastHemisphereGeometry))}let p=An.combineInstances(t);for(m=p.length,c=0;c<m;++c){l=p[c];let y=l.attributes;if(o)for(let f in y)y.hasOwnProperty(f)&&y[f].componentDatatype===Q.DOUBLE&&An.encodeAttribute(l,f,`${f}3DHigh`,`${f}3DLow`);else for(let f in y)if(y.hasOwnProperty(f)&&y[f].componentDatatype===Q.DOUBLE){let x=`${f}3D`,_=`${f}2D`;An.projectTo2D(l,f,x,_,n),d(l.boundingSphere)&&f==="position"&&(l.boundingSphereCV=ce.fromVertices(l.attributes.position2D.values)),An.encodeAttribute(l,x,`${x}High`,`${x}Low`),An.encodeAttribute(l,_,`${_}High`,`${_}Low`)}s&&An.compressVertices(l)}if(!i){let y=[];for(m=p.length,c=0;c<m;++c)l=p[c],y=y.concat(An.fitToUnsignedShortIndices(l));p=y}return p}function V3(e,t,n,i){let o,r,s,a=i.length-1;if(a>=0){let l=i[a];o=l.offset+l.count,s=l.index,r=n[s].indices.length}else o=0,s=0,r=n[s].indices.length;let c=e.length;for(let l=0;l<c;++l){let m=e[l][t];if(!d(m))continue;let p=m.indices.length;o+p>r&&(o=0,r=n[++s].indices.length),i.push({index:s,offset:o,count:p}),o+=p}}function URe(e,t){let n=[];return V3(e,"geometry",t,n),V3(e,"westHemisphereGeometry",t,n),V3(e,"eastHemisphereGeometry",t,n),n}var op={};op.combineGeometry=function(e){let t,n,i=e.instances,o=i.length,r,s,a=!1;o>0&&(t=NRe(e),t.length>0&&(n=An.createAttributeLocations(t[0]),e.createPickOffsets&&(r=URe(i,t))),d(i[0].attributes)&&d(i[0].attributes.offset)&&(s=new Array(o),a=!0));let c=new Array(o),l=new Array(o);for(let u=0;u<o;++u){let m=i[u],p=m.geometry;d(p)&&(c[u]=p.boundingSphere,l[u]=p.boundingSphereCV,a&&(s[u]=m.geometry.offsetAttribute));let y=m.eastHemisphereGeometry,f=m.westHemisphereGeometry;d(y)&&d(f)&&(d(y.boundingSphere)&&d(f.boundingSphere)&&(c[u]=ce.union(y.boundingSphere,f.boundingSphere)),d(y.boundingSphereCV)&&d(f.boundingSphereCV)&&(l[u]=ce.union(y.boundingSphereCV,f.boundingSphereCV)))}return{geometries:t,modelMatrix:e.modelMatrix,attributeLocations:n,pickOffsets:r,offsetInstanceExtend:s,boundingSpheres:c,boundingSpheresCV:l}};function kRe(e,t){let n=e.attributes;for(let i in n)if(n.hasOwnProperty(i)){let o=n[i];d(o)&&d(o.values)&&t.push(o.values.buffer)}d(e.indices)&&t.push(e.indices.buffer)}function DRe(e,t){let n=e.length;for(let i=0;i<n;++i)kRe(e[i],t)}function BRe(e){let t=1,n=e.length;for(let i=0;i<n;i++){let o=e[i];if(++t,!d(o))continue;let r=o.attributes;t+=7+2*ce.packedLength+(d(o.indices)?o.indices.length:0);for(let s in r)if(r.hasOwnProperty(s)&&d(r[s])){let a=r[s];t+=5+a.values.length}}return t}op.packCreateGeometryResults=function(e,t){let n=new Float64Array(BRe(e)),i=[],o={},r=e.length,s=0;n[s++]=r;for(let a=0;a<r;a++){let c=e[a],l=d(c);if(n[s++]=l?1:0,!l)continue;n[s++]=c.primitiveType,n[s++]=c.geometryType,n[s++]=g(c.offsetAttribute,-1);let u=d(c.boundingSphere)?1:0;n[s++]=u,u&&ce.pack(c.boundingSphere,n,s),s+=ce.packedLength;let m=d(c.boundingSphereCV)?1:0;n[s++]=m,m&&ce.pack(c.boundingSphereCV,n,s),s+=ce.packedLength;let p=c.attributes,y=[];for(let x in p)p.hasOwnProperty(x)&&d(p[x])&&(y.push(x),d(o[x])||(o[x]=i.length,i.push(x)));n[s++]=y.length;for(let x=0;x<y.length;x++){let _=y[x],C=p[_];n[s++]=o[_],n[s++]=C.componentDatatype,n[s++]=C.componentsPerAttribute,n[s++]=C.normalize?1:0,n[s++]=C.values.length,n.set(C.values,s),s+=C.values.length}let f=d(c.indices)?c.indices.length:0;n[s++]=f,f>0&&(n.set(c.indices,s),s+=f)}return t.push(n.buffer),{stringTable:i,packedData:n}};op.unpackCreateGeometryResults=function(e){let t=e.stringTable,n=e.packedData,i,o=new Array(n[0]),r=0,s=1;for(;s<n.length;){if(!(n[s++]===1)){o[r++]=void 0;continue}let c=n[s++],l=n[s++],u=n[s++];u===-1&&(u=void 0);let m,p;n[s++]===1&&(m=ce.unpack(n,s)),s+=ce.packedLength,n[s++]===1&&(p=ce.unpack(n,s)),s+=ce.packedLength;let x,_,C,V=new hn,L=n[s++];for(i=0;i<L;i++){let G=t[n[s++]],X=n[s++];C=n[s++];let P=n[s++]!==0;x=n[s++],_=Q.createTypedArray(X,x);for(let v=0;v<x;v++)_[v]=n[s++];V[G]=new Ze({componentDatatype:X,componentsPerAttribute:C,normalize:P,values:_})}let Z;if(x=n[s++],x>0){let G=_.length/C;for(Z=Ue.createTypedArray(G,x),i=0;i<x;i++)Z[i]=n[s++]}o[r++]=new dt({primitiveType:c,geometryType:l,boundingSphere:m,boundingSphereCV:p,indices:Z,attributes:V,offsetAttribute:u})}return o};function YRe(e,t){let n=e.length,i=new Float64Array(1+n*19),o=0;i[o++]=n;for(let r=0;r<n;r++){let s=e[r];if(A.pack(s.modelMatrix,i,o),o+=A.packedLength,d(s.attributes)&&d(s.attributes.offset)){let a=s.attributes.offset.value;i[o]=a[0],i[o+1]=a[1],i[o+2]=a[2]}o+=3}return t.push(i.buffer),i}function ORe(e){let t=e,n=new Array(t[0]),i=0,o=1;for(;o<t.length;){let r=A.unpack(t,o),s;o+=A.packedLength,d(t[o])&&(s={offset:new zi(t[o],t[o+1],t[o+2])}),o+=3,n[i++]={modelMatrix:r,attributes:s}}return n}op.packCombineGeometryParameters=function(e,t){let n=e.createGeometryResults,i=n.length;for(let o=0;o<i;o++)t.push(n[o].packedData.buffer);return{createGeometryResults:e.createGeometryResults,packedInstances:YRe(e.instances,t),ellipsoid:e.ellipsoid,isGeographic:e.projection instanceof Zi,elementIndexUintSupported:e.elementIndexUintSupported,scene3DOnly:e.scene3DOnly,vertexCacheOptimize:e.vertexCacheOptimize,compressVertices:e.compressVertices,modelMatrix:e.modelMatrix,createPickOffsets:e.createPickOffsets}};op.unpackCombineGeometryParameters=function(e){let t=ORe(e.packedInstances),n=e.createGeometryResults,i=n.length,o=0;for(let a=0;a<i;a++){let c=op.unpackCreateGeometryResults(n[a]),l=c.length;for(let u=0;u<l;u++){let m=c[u],p=t[o];p.geometry=m,++o}}let r=re.clone(e.ellipsoid),s=e.isGeographic?new Zi(r):new Ei(r);return{instances:t,ellipsoid:r,projection:s,elementIndexUintSupported:e.elementIndexUintSupported,scene3DOnly:e.scene3DOnly,vertexCacheOptimize:e.vertexCacheOptimize,compressVertices:e.compressVertices,modelMatrix:A.clone(e.modelMatrix),createPickOffsets:e.createPickOffsets}};function d$(e){let t=e.length,n=1+(ce.packedLength+1)*t,i=new Float32Array(n),o=0;i[o++]=t;for(let r=0;r<t;++r){let s=e[r];d(s)?(i[o++]=1,ce.pack(e[r],i,o)):i[o++]=0,o+=ce.packedLength}return i}function u$(e){let t=new Array(e[0]),n=0,i=1;for(;i<e.length;)e[i++]===1&&(t[n]=ce.unpack(e,i)),++n,i+=ce.packedLength;return t}op.packCombineGeometryResults=function(e,t){d(e.geometries)&&DRe(e.geometries,t);let n=d$(e.boundingSpheres),i=d$(e.boundingSpheresCV);return t.push(n.buffer,i.buffer),{geometries:e.geometries,attributeLocations:e.attributeLocations,modelMatrix:e.modelMatrix,pickOffsets:e.pickOffsets,offsetInstanceExtend:e.offsetInstanceExtend,boundingSpheres:n,boundingSpheresCV:i}};op.unpackCombineGeometryResults=function(e){return{geometries:e.geometries,attributeLocations:e.attributeLocations,modelMatrix:e.modelMatrix,pickOffsets:e.pickOffsets,offsetInstanceExtend:e.offsetInstanceExtend,boundingSpheres:u$(e.boundingSpheres),boundingSpheresCV:u$(e.boundingSpheresCV)}};var Og=op;var RUt=T(S(),1),KRe={READY:0,CREATING:1,CREATED:2,COMBINING:3,COMBINED:4,COMPLETE:5,FAILED:6},mr=Object.freeze(KRe);var GUt=T(S(),1),oM={MORPHING:0,COLUMBUS_VIEW:1,SCENE2D:2,SCENE3D:3};oM.getMorphTime=function(e){return e===oM.SCENE3D?1:e===oM.MORPHING?void 0:0};var ie=Object.freeze(oM);var XUt=T(S(),1),Kl={DISABLED:0,ENABLED:1,CAST_ONLY:2,RECEIVE_ONLY:3};Kl.NUMBER_OF_SHADOW_MODES=4;Kl.castShadows=function(e){return e===Kl.ENABLED||e===Kl.CAST_ONLY};Kl.receiveShadows=function(e){return e===Kl.ENABLED||e===Kl.RECEIVE_ONLY};Kl.fromCastReceive=function(e,t){return e&&t?Kl.ENABLED:e?Kl.CAST_ONLY:t?Kl.RECEIVE_ONLY:Kl.DISABLED};var xn=Object.freeze(Kl);function hr(e){e=g(e,g.EMPTY_OBJECT),this.geometryInstances=e.geometryInstances,this.appearance=e.appearance,this._appearance=void 0,this._material=void 0,this.depthFailAppearance=e.depthFailAppearance,this._depthFailAppearance=void 0,this._depthFailMaterial=void 0,this.modelMatrix=A.clone(g(e.modelMatrix,A.IDENTITY)),this._modelMatrix=new A,this.show=g(e.show,!0),this._vertexCacheOptimize=g(e.vertexCacheOptimize,!1),this._interleave=g(e.interleave,!1),this._releaseGeometryInstances=g(e.releaseGeometryInstances,!0),this._allowPicking=g(e.allowPicking,!0),this._asynchronous=g(e.asynchronous,!0),this._compressVertices=g(e.compressVertices,!0),this.cull=g(e.cull,!0),this.debugShowBoundingVolume=g(e.debugShowBoundingVolume,!1),this.rtcCenter=e.rtcCenter,this.shadows=g(e.shadows,xn.DISABLED),this._translucent=void 0,this._state=mr.READY,this._geometries=[],this._error=void 0,this._numberOfInstances=0,this._boundingSpheres=[],this._boundingSphereWC=[],this._boundingSphereCV=[],this._boundingSphere2D=[],this._boundingSphereMorph=[],this._perInstanceAttributeCache=new Map,this._instanceIds=[],this._lastPerInstanceAttributeIndex=0,this._va=[],this._attributeLocations=void 0,this._primitiveType=void 0,this._frontFaceRS=void 0,this._backFaceRS=void 0,this._sp=void 0,this._depthFailAppearance=void 0,this._spDepthFail=void 0,this._frontFaceDepthFailRS=void 0,this._backFaceDepthFailRS=void 0,this._pickIds=[],this._colorCommands=[],this._pickCommands=[],this._createBoundingVolumeFunction=e._createBoundingVolumeFunction,this._createRenderStatesFunction=e._createRenderStatesFunction,this._createShaderProgramFunction=e._createShaderProgramFunction,this._createCommandsFunction=e._createCommandsFunction,this._updateAndQueueCommandsFunction=e._updateAndQueueCommandsFunction,this._createPickOffsets=e._createPickOffsets,this._pickOffsets=void 0,this._createGeometryResults=void 0,this._ready=!1,this._batchTable=void 0,this._batchTableAttributeIndices=void 0,this._offsetInstanceExtend=void 0,this._batchTableOffsetAttribute2DIndex=void 0,this._batchTableOffsetsUpdated=!1,this._instanceBoundingSpheres=void 0,this._instanceBoundingSpheresCV=void 0,this._tempBoundingSpheres=void 0,this._recomputeBoundingSpheres=!1,this._batchTableBoundingSpheresUpdated=!1,this._batchTableBoundingSphereAttributeIndices=void 0}Object.defineProperties(hr.prototype,{vertexCacheOptimize:{get:function(){return this._vertexCacheOptimize}},interleave:{get:function(){return this._interleave}},releaseGeometryInstances:{get:function(){return this._releaseGeometryInstances}},allowPicking:{get:function(){return this._allowPicking}},asynchronous:{get:function(){return this._asynchronous}},compressVertices:{get:function(){return this._compressVertices}},ready:{get:function(){return this._ready}}});function HRe(e){let t=e.length,n=[],i=e[0].attributes,o;for(o in i)if(i.hasOwnProperty(o)&&d(i[o])){let r=i[o],s=!0;for(let a=1;a<t;++a){let c=e[a].attributes[o];if(!d(c)||r.componentDatatype!==c.componentDatatype||r.componentsPerAttribute!==c.componentsPerAttribute||r.normalize!==c.normalize){s=!1;break}}s&&n.push(o)}return n}var zRe=new D,JRe=new h,_$=new se;function T$(e){let t=e.length;if(t===1)return e[0];if(t===2)return D.unpack(e,0,zRe);if(t===3)return h.unpack(e,0,JRe);if(t===4)return se.unpack(e,0,_$)}function QRe(e,t){let n=e.geometryInstances,i=Array.isArray(n)?n:[n],o=i.length;if(o===0)return;let r=HRe(i),s=r.length,a=[],c={},l={},u,p=i[0].attributes,y,f,x;for(y=0;y<s;++y)f=r[y],x=p[f],c[f]=y,a.push({functionName:`czm_batchTable_${f}`,componentDatatype:x.componentDatatype,componentsPerAttribute:x.componentsPerAttribute,normalize:x.normalize});r.indexOf("distanceDisplayCondition")!==-1&&(a.push({functionName:"czm_batchTable_boundingSphereCenter3DHigh",componentDatatype:Q.FLOAT,componentsPerAttribute:3},{functionName:"czm_batchTable_boundingSphereCenter3DLow",componentDatatype:Q.FLOAT,componentsPerAttribute:3},{functionName:"czm_batchTable_boundingSphereCenter2DHigh",componentDatatype:Q.FLOAT,componentsPerAttribute:3},{functionName:"czm_batchTable_boundingSphereCenter2DLow",componentDatatype:Q.FLOAT,componentsPerAttribute:3},{functionName:"czm_batchTable_boundingSphereRadius",componentDatatype:Q.FLOAT,componentsPerAttribute:1}),l.center3DHigh=a.length-5,l.center3DLow=a.length-4,l.center2DHigh=a.length-3,l.center2DLow=a.length-2,l.radius=a.length-1),r.indexOf("offset")!==-1&&(a.push({functionName:"czm_batchTable_offset2D",componentDatatype:Q.FLOAT,componentsPerAttribute:3}),u=a.length-1),a.push({functionName:"czm_batchTable_pickColor",componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:4,normalize:!0});let _=a.length,C=new Ng(t,a,o);for(y=0;y<o;++y){let V=i[y];p=V.attributes;for(let P=0;P<s;++P){f=r[P],x=p[f];let v=T$(x.value),F=c[f];C.setBatchedAttribute(y,F,v)}let L={primitive:g(V.pickPrimitive,e)};d(V.id)&&(L.id=V.id);let Z=t.createPickId(L);e._pickIds.push(Z);let G=Z.color,X=_$;X.x=Y.floatToByte(G.red),X.y=Y.floatToByte(G.green),X.z=Y.floatToByte(G.blue),X.w=Y.floatToByte(G.alpha),C.setBatchedAttribute(y,_-1,X)}e._batchTable=C,e._batchTableAttributeIndices=c,e._batchTableBoundingSphereAttributeIndices=l,e._batchTableOffsetAttribute2DIndex=u}function jRe(e){let t;return Array.isArray(e.values)?t=e.values.slice(0):t=new e.values.constructor(e.values),new Ze({componentDatatype:e.componentDatatype,componentsPerAttribute:e.componentsPerAttribute,normalize:e.normalize,values:t})}function qRe(e){let t=e.attributes,n=new hn;for(let o in t)t.hasOwnProperty(o)&&d(t[o])&&(n[o]=jRe(t[o]));let i;if(d(e.indices)){let o=e.indices;Array.isArray(o)?i=o.slice(0):i=new o.constructor(o)}return new dt({attributes:n,indices:i,primitiveType:e.primitiveType,boundingSphere:ce.clone(e.boundingSphere)})}function $Re(e,t){return{geometry:t,attributes:e.attributes,modelMatrix:A.clone(e.modelMatrix),pickPrimitive:e.pickPrimitive,id:e.id}}var eZe=/in\s+vec(?:3|4)\s+(.*)3DHigh;/g;hr._modifyShaderPosition=function(e,t,n){let i,o="",r="",s="";for(;(i=eZe.exec(t))!==null;){let a=i[1],c=`vec4 czm_compute${a[0].toUpperCase()}${a.substr(1)}()`;c!=="vec4 czm_computePosition()"&&(o+=`${c};
  4143. `),d(e.rtcCenter)?(t=t.replace(/in\s+vec(?:3|4)\s+position3DHigh;/g,""),t=t.replace(/in\s+vec(?:3|4)\s+position3DLow;/g,""),o+=`uniform mat4 u_modifiedModelView;
  4144. `,r+=`in vec4 position;
  4145. `,s+=`${c}
  4146. {
  4147. return u_modifiedModelView * position;
  4148. }
  4149. `,t=t.replace(/czm_modelViewRelativeToEye\s+\*\s+/g,""),t=t.replace(/czm_modelViewProjectionRelativeToEye/g,"czm_projection")):n?s+=`${c}
  4150. {
  4151. return czm_translateRelativeToEye(${a}3DHigh, ${a}3DLow);
  4152. }
  4153. `:(r+=`in vec3 ${a}2DHigh;
  4154. in vec3 ${a}2DLow;
  4155. `,s+=`${c}
  4156. {
  4157. vec4 p;
  4158. if (czm_morphTime == 1.0)
  4159. {
  4160. p = czm_translateRelativeToEye(${a}3DHigh, ${a}3DLow);
  4161. }
  4162. else if (czm_morphTime == 0.0)
  4163. {
  4164. p = czm_translateRelativeToEye(${a}2DHigh.zxy, ${a}2DLow.zxy);
  4165. }
  4166. else
  4167. {
  4168. p = czm_columbusViewMorph(
  4169. czm_translateRelativeToEye(${a}2DHigh.zxy, ${a}2DLow.zxy),
  4170. czm_translateRelativeToEye(${a}3DHigh, ${a}3DLow),
  4171. czm_morphTime);
  4172. }
  4173. return p;
  4174. }
  4175. `)}return[o,r,t,s].join(`
  4176. `)};hr._appendShowToShader=function(e,t){return d(e._batchTableAttributeIndices.show)?`${Ye.replaceMain(t,"czm_non_show_main")}
  4177. void main()
  4178. {
  4179. czm_non_show_main();
  4180. gl_Position *= czm_batchTable_show(batchId);
  4181. }`:t};hr._updateColorAttribute=function(e,t,n){if(!d(e._batchTableAttributeIndices.color)&&!d(e._batchTableAttributeIndices.depthFailColor)||t.search(/in\s+vec4\s+color;/g)===-1)return t;let i=t;return i=i.replace(/in\s+vec4\s+color;/g,""),n?i=i.replace(/(\b)color(\b)/g,"$1czm_batchTable_depthFailColor(batchId)$2"):i=i.replace(/(\b)color(\b)/g,"$1czm_batchTable_color(batchId)$2"),i};function m$(e){return`${Ye.replaceMain(e,"czm_non_pick_main")}
  4182. out vec4 v_pickColor;
  4183. void main()
  4184. {
  4185. czm_non_pick_main();
  4186. v_pickColor = czm_batchTable_pickColor(batchId);
  4187. }`}function h$(e){return`in vec4 v_pickColor;
  4188. ${e}`}hr._updatePickColorAttribute=function(e){let t=e.replace(/in\s+vec4\s+pickColor;/g,"");return t=t.replace(/(\b)pickColor(\b)/g,"$1czm_batchTable_pickColor(batchId)$2"),t};hr._appendOffsetToShader=function(e,t){if(!d(e._batchTableAttributeIndices.offset))return t;let n=`in float batchId;
  4189. `;n+="in float applyOffset;";let i=t.replace(/in\s+float\s+batchId;/g,n),o=`vec4 $1 = czm_computePosition();
  4190. `;return o+=` if (czm_sceneMode == czm_sceneMode3D)
  4191. `,o+=` {
  4192. `,o+=" $1 = $1 + vec4(czm_batchTable_offset(batchId) * applyOffset, 0.0);",o+=` }
  4193. `,o+=` else
  4194. `,o+=` {
  4195. `,o+=" $1 = $1 + vec4(czm_batchTable_offset2D(batchId) * applyOffset, 0.0);",o+=` }
  4196. `,i=i.replace(/vec4\s+([A-Za-z0-9_]+)\s+=\s+czm_computePosition\(\);/g,o),i};hr._appendDistanceDisplayConditionToShader=function(e,t,n){if(!d(e._batchTableAttributeIndices.distanceDisplayCondition))return t;let i=Ye.replaceMain(t,"czm_non_distanceDisplayCondition_main"),o=`void main()
  4197. {
  4198. czm_non_distanceDisplayCondition_main();
  4199. vec2 distanceDisplayCondition = czm_batchTable_distanceDisplayCondition(batchId);
  4200. vec3 boundingSphereCenter3DHigh = czm_batchTable_boundingSphereCenter3DHigh(batchId);
  4201. vec3 boundingSphereCenter3DLow = czm_batchTable_boundingSphereCenter3DLow(batchId);
  4202. float boundingSphereRadius = czm_batchTable_boundingSphereRadius(batchId);
  4203. `;return n?o+=` vec4 centerRTE = czm_translateRelativeToEye(boundingSphereCenter3DHigh, boundingSphereCenter3DLow);
  4204. `:o+=` vec3 boundingSphereCenter2DHigh = czm_batchTable_boundingSphereCenter2DHigh(batchId);
  4205. vec3 boundingSphereCenter2DLow = czm_batchTable_boundingSphereCenter2DLow(batchId);
  4206. vec4 centerRTE;
  4207. if (czm_morphTime == 1.0)
  4208. {
  4209. centerRTE = czm_translateRelativeToEye(boundingSphereCenter3DHigh, boundingSphereCenter3DLow);
  4210. }
  4211. else if (czm_morphTime == 0.0)
  4212. {
  4213. centerRTE = czm_translateRelativeToEye(boundingSphereCenter2DHigh.zxy, boundingSphereCenter2DLow.zxy);
  4214. }
  4215. else
  4216. {
  4217. centerRTE = czm_columbusViewMorph(
  4218. czm_translateRelativeToEye(boundingSphereCenter2DHigh.zxy, boundingSphereCenter2DLow.zxy),
  4219. czm_translateRelativeToEye(boundingSphereCenter3DHigh, boundingSphereCenter3DLow),
  4220. czm_morphTime);
  4221. }
  4222. `,o+=` float radiusSq = boundingSphereRadius * boundingSphereRadius;
  4223. float distanceSq;
  4224. if (czm_sceneMode == czm_sceneMode2D)
  4225. {
  4226. distanceSq = czm_eyeHeight2D.y - radiusSq;
  4227. }
  4228. else
  4229. {
  4230. distanceSq = dot(centerRTE.xyz, centerRTE.xyz) - radiusSq;
  4231. }
  4232. distanceSq = max(distanceSq, 0.0);
  4233. float nearSq = distanceDisplayCondition.x * distanceDisplayCondition.x;
  4234. float farSq = distanceDisplayCondition.y * distanceDisplayCondition.y;
  4235. float show = (distanceSq >= nearSq && distanceSq <= farSq) ? 1.0 : 0.0;
  4236. gl_Position *= show;
  4237. }`,`${i}
  4238. ${o}`};function f$(e,t){if(!e.compressVertices)return t;let n=t.search(/in\s+vec3\s+normal;/g)!==-1,i=t.search(/in\s+vec2\s+st;/g)!==-1;if(!n&&!i)return t;let o=t.search(/in\s+vec3\s+tangent;/g)!==-1,r=t.search(/in\s+vec3\s+bitangent;/g)!==-1,s=i&&n?2:1;s+=o||r?1:0;let a=s>1?`vec${s}`:"float",c="compressedAttributes",l=`in ${a} ${c};`,u="",m="";if(i){u+=`vec2 st;
  4239. `;let f=s>1?`${c}.x`:c;m+=` st = czm_decompressTextureCoordinates(${f});
  4240. `}n&&o&&r?(u+=`vec3 normal;
  4241. vec3 tangent;
  4242. vec3 bitangent;
  4243. `,m+=` czm_octDecode(${c}.${i?"yz":"xy"}, normal, tangent, bitangent);
  4244. `):(n&&(u+=`vec3 normal;
  4245. `,m+=` normal = czm_octDecode(${c}${s>1?`.${i?"y":"x"}`:""});
  4246. `),o&&(u+=`vec3 tangent;
  4247. `,m+=` tangent = czm_octDecode(${c}.${i&&n?"z":"y"});
  4248. `),r&&(u+=`vec3 bitangent;
  4249. `,m+=` bitangent = czm_octDecode(${c}.${i&&n?"z":"y"});
  4250. `));let p=t;p=p.replace(/in\s+vec3\s+normal;/g,""),p=p.replace(/in\s+vec2\s+st;/g,""),p=p.replace(/in\s+vec3\s+tangent;/g,""),p=p.replace(/in\s+vec3\s+bitangent;/g,""),p=Ye.replaceMain(p,"czm_non_compressed_main");let y=`void main()
  4251. {
  4252. ${m} czm_non_compressed_main();
  4253. }`;return[l,u,p,y].join(`
  4254. `)}function tZe(e){let t=Ye.replaceMain(e,"czm_non_depth_clamp_main");return t+=`void main() {
  4255. czm_non_depth_clamp_main();
  4256. gl_Position = czm_depthClamp(gl_Position);}
  4257. `,t}function nZe(e){let t=Ye.replaceMain(e,"czm_non_depth_clamp_main");return t+=`void main() {
  4258. czm_non_depth_clamp_main();
  4259. #if defined(LOG_DEPTH)
  4260. czm_writeLogDepth();
  4261. #else
  4262. czm_writeDepthClamp();
  4263. #endif
  4264. }
  4265. `,t}function p$(e,t){let n=e.vertexAttributes}function iZe(e,t){return function(){return e[t]}}var L3=Math.max(Mt.hardwareConcurrency-1,1),rM,oZe=new yi("combineGeometry");function rZe(e,t){let n,i,o,r,s=e._instanceIds;if(e._state===mr.READY){n=Array.isArray(e.geometryInstances)?e.geometryInstances:[e.geometryInstances];let a=e._numberOfInstances=n.length,c=[],l=[];for(o=0;o<a;++o)i=n[o].geometry,s.push(n[o].id),l.push({moduleName:i._workerName,geometry:i});if(!d(rM))for(rM=new Array(L3),o=0;o<L3;o++)rM[o]=new yi("createGeometry");let u;for(l=VG(l,L3),o=0;o<l.length;o++){let m=0,p=l[o],y=p.length;for(r=0;r<y;++r)u=p[r],i=u.geometry,d(i.constructor.pack)&&(u.offset=m,m+=g(i.constructor.packedLength,i.packedLength));let f;if(m>0){let x=new Float64Array(m);for(f=[x.buffer],r=0;r<y;++r)u=p[r],i=u.geometry,d(i.constructor.pack)&&(i.constructor.pack(i,x,u.offset),u.geometry=x)}c.push(rM[o].scheduleTask({subTasks:l[o]},f))}e._state=mr.CREATING,Promise.all(c).then(function(m){e._createGeometryResults=m,e._state=mr.CREATED}).catch(function(m){WG(e,t,mr.FAILED,m)})}else if(e._state===mr.CREATED){let a=[];n=Array.isArray(e.geometryInstances)?e.geometryInstances:[e.geometryInstances];let c=t.scene3DOnly,l=t.mapProjection,u=oZe.scheduleTask(Og.packCombineGeometryParameters({createGeometryResults:e._createGeometryResults,instances:n,ellipsoid:l.ellipsoid,projection:l,elementIndexUintSupported:t.context.elementIndexUint,scene3DOnly:c,vertexCacheOptimize:e.vertexCacheOptimize,compressVertices:e.compressVertices,modelMatrix:e.modelMatrix,createPickOffsets:e._createPickOffsets},a),a);e._createGeometryResults=void 0,e._state=mr.COMBINING,Promise.resolve(u).then(function(m){let p=Og.unpackCombineGeometryResults(m);e._geometries=p.geometries,e._attributeLocations=p.attributeLocations,e.modelMatrix=A.clone(p.modelMatrix,e.modelMatrix),e._pickOffsets=p.pickOffsets,e._offsetInstanceExtend=p.offsetInstanceExtend,e._instanceBoundingSpheres=p.boundingSpheres,e._instanceBoundingSpheresCV=p.boundingSpheresCV,d(e._geometries)&&e._geometries.length>0?(e._recomputeBoundingSpheres=!0,e._state=mr.COMBINED):WG(e,t,mr.FAILED,void 0)}).catch(function(m){WG(e,t,mr.FAILED,m)})}}function sZe(e,t){let n=Array.isArray(e.geometryInstances)?e.geometryInstances:[e.geometryInstances],i=e._numberOfInstances=n.length,o=new Array(i),r=e._instanceIds,s,a,c=0;for(a=0;a<i;a++){s=n[a];let p=s.geometry,y;d(p.attributes)&&d(p.primitiveType)?y=qRe(p):y=p.constructor.createGeometry(p),o[c++]=$Re(s,y),r.push(s.id)}o.length=c;let l=t.scene3DOnly,u=t.mapProjection,m=Og.combineGeometry({instances:o,ellipsoid:u.ellipsoid,projection:u,elementIndexUintSupported:t.context.elementIndexUint,scene3DOnly:l,vertexCacheOptimize:e.vertexCacheOptimize,compressVertices:e.compressVertices,modelMatrix:e.modelMatrix,createPickOffsets:e._createPickOffsets});e._geometries=m.geometries,e._attributeLocations=m.attributeLocations,e.modelMatrix=A.clone(m.modelMatrix,e.modelMatrix),e._pickOffsets=m.pickOffsets,e._offsetInstanceExtend=m.offsetInstanceExtend,e._instanceBoundingSpheres=m.boundingSpheres,e._instanceBoundingSpheresCV=m.boundingSpheresCV,d(e._geometries)&&e._geometries.length>0?(e._recomputeBoundingSpheres=!0,e._state=mr.COMBINED):WG(e,t,mr.FAILED,void 0)}function aZe(e,t){let n=e._batchTableAttributeIndices.offset;if(!e._recomputeBoundingSpheres||!d(n)){e._recomputeBoundingSpheres=!1;return}let i,o=e._offsetInstanceExtend,r=e._instanceBoundingSpheres,s=r.length,a=e._tempBoundingSpheres;if(!d(a)){for(a=new Array(s),i=0;i<s;i++)a[i]=new ce;e._tempBoundingSpheres=a}for(i=0;i<s;++i){let x=a[i],_=e._batchTable.getBatchedAttribute(i,n,new h);x=r[i].clone(x),L$(x,_,o[i])}let c=[],l=[],u=[];for(i=0;i<s;++i){let x=a[i];x.center.x-x.radius>0||ce.intersectPlane(x,sn.ORIGIN_ZX_PLANE)!==qt.INTERSECTING?c.push(x):(l.push(x),u.push(x))}let m=c[0],p=u[0],y=l[0];for(i=1;i<c.length;i++)m=ce.union(m,c[i]);for(i=1;i<u.length;i++)p=ce.union(p,u[i]);for(i=1;i<l.length;i++)y=ce.union(y,l[i]);let f=[];for(d(m)&&f.push(m),d(p)&&f.push(p),d(y)&&f.push(y),i=0;i<f.length;i++){let x=f[i].clone(e._boundingSpheres[i]);e._boundingSpheres[i]=x,e._boundingSphereCV[i]=ce.projectTo2D(x,t.mapProjection,e._boundingSphereCV[i])}hr._updateBoundingVolumes(e,t,e.modelMatrix,!0),e._recomputeBoundingSpheres=!1}var b$=new On,S$=new he,C$=new h,V$=new ce;function cZe(e,t){if(!d(e._batchTableAttributeIndices.distanceDisplayCondition)||e._batchTableBoundingSpheresUpdated)return;let i=e._batchTableBoundingSphereAttributeIndices,o=i.center3DHigh,r=i.center3DLow,s=i.center2DHigh,a=i.center2DLow,c=i.radius,l=t.mapProjection,u=l.ellipsoid,m=e._batchTable,p=e._instanceBoundingSpheres,y=p.length;for(let f=0;f<y;++f){let x=p[f];if(!d(x))continue;let _=e.modelMatrix;d(_)&&(x=ce.transform(x,_,V$));let C=x.center,V=x.radius,L=On.fromCartesian(C,b$);if(m.setBatchedAttribute(f,o,L.high),m.setBatchedAttribute(f,r,L.low),!t.scene3DOnly){let Z=u.cartesianToCartographic(C,S$),G=l.project(Z,C$);L=On.fromCartesian(G,b$),m.setBatchedAttribute(f,s,L.high),m.setBatchedAttribute(f,a,L.low)}m.setBatchedAttribute(f,c,V)}e._batchTableBoundingSpheresUpdated=!0}var R3=new h,lZe=new h;function y$(e,t){if(!d(e._batchTableAttributeIndices.offset)||e._batchTableOffsetsUpdated||t.scene3DOnly)return;let i=e._batchTableOffsetAttribute2DIndex,o=t.mapProjection,r=o.ellipsoid,s=e._batchTable,a=e._instanceBoundingSpheres,c=a.length;for(let l=0;l<c;++l){let u=a[l];if(!d(u))continue;let m=s.getBatchedAttribute(l,e._batchTableAttributeIndices.offset);if(h.equals(m,h.ZERO)){s.setBatchedAttribute(l,i,h.ZERO);continue}let p=e.modelMatrix;d(p)&&(u=ce.transform(u,p,V$));let y=u.center;y=r.scaleToGeodeticSurface(y,lZe);let f=r.cartesianToCartographic(y,S$),x=o.project(f,C$),_=h.add(m,y,R3);f=r.cartesianToCartographic(_,f);let C=o.project(f,R3),V=h.subtract(C,x,R3),L=V.x;V.x=V.z,V.z=V.y,V.y=L,s.setBatchedAttribute(l,i,V)}e._batchTableOffsetsUpdated=!0}function dZe(e,t){let n=e._attributeLocations,i=e._geometries,o=t.scene3DOnly,r=t.context,s=[],a=i.length;for(let c=0;c<a;++c){let l=i[c];if(s.push(ti.fromGeometry({context:r,geometry:l,attributeLocations:n,bufferUsage:Ne.STATIC_DRAW,interleave:e._interleave})),d(e._createBoundingVolumeFunction))e._createBoundingVolumeFunction(t,l);else if(e._boundingSpheres.push(ce.clone(l.boundingSphere)),e._boundingSphereWC.push(new ce),!o){let u=l.boundingSphereCV.center,m=u.x,p=u.y,y=u.z;u.x=y,u.y=m,u.z=p,e._boundingSphereCV.push(ce.clone(l.boundingSphereCV)),e._boundingSphere2D.push(new ce),e._boundingSphereMorph.push(new ce)}}e._va=s,e._primitiveType=i[0].primitiveType,e.releaseGeometryInstances&&(e.geometryInstances=void 0),e._geometries=void 0,WG(e,t,mr.COMPLETE,void 0)}function uZe(e,t,n,i){let o=n.getRenderState(),r;i?(r=Ke(o,!1),r.cull={enabled:!0,face:bi.BACK},e._frontFaceRS=De.fromCache(r),r.cull.face=bi.FRONT,e._backFaceRS=De.fromCache(r)):(e._frontFaceRS=De.fromCache(o),e._backFaceRS=e._frontFaceRS),r=Ke(o,!1),d(e._depthFailAppearance)&&(r.depthTest.enabled=!1),d(e._depthFailAppearance)&&(o=e._depthFailAppearance.getRenderState(),r=Ke(o,!1),r.depthTest.func=Ua.GREATER,i?(r.cull={enabled:!0,face:bi.BACK},e._frontFaceDepthFailRS=De.fromCache(r),r.cull.face=bi.FRONT,e._backFaceDepthFailRS=De.fromCache(r)):(e._frontFaceDepthFailRS=De.fromCache(r),e._backFaceDepthFailRS=e._frontFaceRS))}function mZe(e,t,n){let i=t.context,o=e._attributeLocations,r=e._batchTable.getVertexShaderCallback()(n.vertexShaderSource);r=hr._appendOffsetToShader(e,r),r=hr._appendShowToShader(e,r),r=hr._appendDistanceDisplayConditionToShader(e,r,t.scene3DOnly),r=m$(r),r=hr._updateColorAttribute(e,r,!1),r=f$(e,r),r=hr._modifyShaderPosition(e,r,t.scene3DOnly);let s=n.getFragmentShaderSource();s=h$(s),e._sp=Qt.replaceCache({context:i,shaderProgram:e._sp,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:o}),p$(e._sp,o),d(e._depthFailAppearance)&&(r=e._batchTable.getVertexShaderCallback()(e._depthFailAppearance.vertexShaderSource),r=hr._appendShowToShader(e,r),r=hr._appendDistanceDisplayConditionToShader(e,r,t.scene3DOnly),r=m$(r),r=hr._updateColorAttribute(e,r,!0),r=f$(e,r),r=hr._modifyShaderPosition(e,r,t.scene3DOnly),r=tZe(r),s=e._depthFailAppearance.getFragmentShaderSource(),s=h$(s),s=nZe(s),e._spDepthFail=Qt.replaceCache({context:i,shaderProgram:e._spDepthFail,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:o}),p$(e._spDepthFail,o))}var IG=new A,g$=new h;function x$(e,t,n,i){let o=d(n)?n._uniforms:void 0,r={},s=t.uniforms;if(d(s))for(let c in s)s.hasOwnProperty(c)&&(r[c]=iZe(s,c));let a=xt(r,o);return a=e._batchTable.getUniformMapCallback()(a),d(e.rtcCenter)&&(a.u_modifiedModelView=function(){let c=i.context.uniformState.view;return A.multiply(c,e._modelMatrix,IG),A.multiplyByPoint(IG,e.rtcCenter,g$),A.setTranslation(IG,g$,IG),IG}),a}function hZe(e,t,n,i,o,r,s,a){let c=x$(e,t,n,a),l;d(e._depthFailAppearance)&&(l=x$(e,e._depthFailAppearance,e._depthFailAppearance.material,a));let u=i?Re.TRANSLUCENT:Re.OPAQUE,m=o?2:1;m*=d(e._depthFailAppearance)?2:1,r.length=e._va.length*m;let p=r.length,y=0;for(let f=0;f<p;++f){let x;o&&(x=r[f],d(x)||(x=r[f]=new nt({owner:e,primitiveType:e._primitiveType})),x.vertexArray=e._va[y],x.renderState=e._backFaceRS,x.shaderProgram=e._sp,x.uniformMap=c,x.pass=u,++f),x=r[f],d(x)||(x=r[f]=new nt({owner:e,primitiveType:e._primitiveType})),x.vertexArray=e._va[y],x.renderState=e._frontFaceRS,x.shaderProgram=e._sp,x.uniformMap=c,x.pass=u,d(e._depthFailAppearance)&&(o&&(++f,x=r[f],d(x)||(x=r[f]=new nt({owner:e,primitiveType:e._primitiveType})),x.vertexArray=e._va[y],x.renderState=e._backFaceDepthFailRS,x.shaderProgram=e._spDepthFail,x.uniformMap=l,x.pass=u),++f,x=r[f],d(x)||(x=r[f]=new nt({owner:e,primitiveType:e._primitiveType})),x.vertexArray=e._va[y],x.renderState=e._frontFaceDepthFailRS,x.shaderProgram=e._spDepthFail,x.uniformMap=l,x.pass=u),++y}}hr._updateBoundingVolumes=function(e,t,n,i){let o,r,s;if(i||!A.equals(n,e._modelMatrix))for(A.clone(n,e._modelMatrix),r=e._boundingSpheres.length,o=0;o<r;++o)s=e._boundingSpheres[o],d(s)&&(e._boundingSphereWC[o]=ce.transform(s,n,e._boundingSphereWC[o]),t.scene3DOnly||(e._boundingSphere2D[o]=ce.clone(e._boundingSphereCV[o],e._boundingSphere2D[o]),e._boundingSphere2D[o].center.x=0,e._boundingSphereMorph[o]=ce.union(e._boundingSphereWC[o],e._boundingSphereCV[o])));let a=e.appearance.pixelSize;if(d(a))for(r=e._boundingSpheres.length,o=0;o<r;++o){s=e._boundingSpheres[o];let c=e._boundingSphereWC[o],u=t.camera.getPixelSize(s,t.context.drawingBufferWidth,t.context.drawingBufferHeight)*a;c.radius=s.radius+u}};function fZe(e,t,n,i,o,r,s,a){hr._updateBoundingVolumes(e,t,o);let c;t.mode===ie.SCENE3D?c=e._boundingSphereWC:t.mode===ie.COLUMBUS_VIEW?c=e._boundingSphereCV:t.mode===ie.SCENE2D&&d(e._boundingSphere2D)?c=e._boundingSphere2D:d(e._boundingSphereMorph)&&(c=e._boundingSphereMorph);let l=t.commandList,u=t.passes;if(u.render||u.pick){let m=e.allowPicking,p=xn.castShadows(e.shadows),y=xn.receiveShadows(e.shadows),f=n.length,x=a?2:1;x*=d(e._depthFailAppearance)?2:1;for(let _=0;_<f;++_){let C=Math.floor(_/x),V=n[_];V.modelMatrix=o,V.boundingVolume=c[C],V.cull=r,V.debugShowBoundingVolume=s,V.castShadows=p,V.receiveShadows=y,m?V.pickId="v_pickColor":V.pickId=void 0,l.push(V)}}}hr.prototype.update=function(e){if(!d(this.geometryInstances)&&this._va.length===0||d(this.geometryInstances)&&Array.isArray(this.geometryInstances)&&this.geometryInstances.length===0||!d(this.appearance)||e.mode!==ie.SCENE3D&&e.scene3DOnly||!e.passes.render&&!e.passes.pick)return;if(d(this._error))throw this._error;if(this._state===mr.FAILED)return;let t=e.context;if(d(this._batchTable)||QRe(this,t),this._batchTable.attributes.length>0){if(kt.maximumVertexTextureImageUnits===0)throw new me("Vertex texture fetch support is required to render primitives with per-instance attributes. The maximum number of vertex texture image units must be greater than zero.");this._batchTable.update(e)}if(this._state!==mr.COMPLETE&&this._state!==mr.COMBINED&&(this.asynchronous?rZe(this,e):sZe(this,e)),this._state===mr.COMBINED&&(cZe(this,e),y$(this,e),dZe(this,e)),!this.show||this._state!==mr.COMPLETE)return;this._batchTableOffsetsUpdated||y$(this,e),this._recomputeBoundingSpheres&&aZe(this,e);let n=this.appearance,i=n.material,o=!1,r=!1;this._appearance!==n?(this._appearance=n,this._material=i,o=!0,r=!0):this._material!==i&&(this._material=i,r=!0);let s=this.depthFailAppearance,a=d(s)?s.material:void 0;this._depthFailAppearance!==s?(this._depthFailAppearance=s,this._depthFailMaterial=a,o=!0,r=!0):this._depthFailMaterial!==a&&(this._depthFailMaterial=a,r=!0);let c=this._appearance.isTranslucent();this._translucent!==c&&(this._translucent=c,o=!0),d(this._material)&&this._material.update(t);let l=n.closed&&c;o&&g(this._createRenderStatesFunction,uZe)(this,t,n,l),r&&g(this._createShaderProgramFunction,mZe)(this,e,n),(o||r)&&g(this._createCommandsFunction,hZe)(this,n,i,c,l,this._colorCommands,this._pickCommands,e),g(this._updateAndQueueCommandsFunction,fZe)(this,e,this._colorCommands,this._pickCommands,this.modelMatrix,this.cull,this.debugShowBoundingVolume,l)};var pZe=new ce,bZe=new ce;function L$(e,t,n){if(n===on.TOP){let i=ce.clone(e,pZe),o=ce.clone(e,bZe);o.center=h.add(o.center,t,o.center),e=ce.union(i,o,e)}else n===on.ALL&&(e.center=h.add(e.center,t,e.center));return e}function yZe(e,t,n){return function(){let i=e.getBatchedAttribute(t,n),o=e.attributes[n],r=o.componentsPerAttribute,s=Q.createTypedArray(o.componentDatatype,r);return d(i.constructor.pack)?i.constructor.pack(i,s,0):s[0]=i,s}}function gZe(e,t,n,i,o){return function(r){let s=T$(r);e.setBatchedAttribute(t,n,s),o==="offset"&&(i._recomputeBoundingSpheres=!0,i._batchTableOffsetsUpdated=!1)}}var xZe=new h;function _Ze(e,t,n){t.boundingSphere={get:function(){let i=e._instanceBoundingSpheres[n];if(d(i)){i=i.clone();let o=e.modelMatrix,r=t.offset;d(r)&&L$(i,h.fromArray(r.get(),0,xZe),e._offsetInstanceExtend[n]),d(o)&&(i=ce.transform(i,o))}return i}},t.boundingSphereCV={get:function(){return e._instanceBoundingSpheresCV[n]}}}function TZe(e,t,n){t.pickId={get:function(){return e._pickIds[n]}}}hr.prototype.getGeometryInstanceAttributes=function(e){let t=this._perInstanceAttributeCache.get(e);if(d(t))return t;let n=-1,i=this._lastPerInstanceAttributeIndex,o=this._instanceIds,r=o.length;for(let l=0;l<r;++l){let u=(i+l)%r;if(e===o[u]){n=u;break}}if(n===-1)return;let s=this._batchTable,a=this._batchTableAttributeIndices;t={};let c={};for(let l in a)if(a.hasOwnProperty(l)){let u=a[l];c[l]={get:yZe(s,n,u),set:gZe(s,n,u,this,l)}}return _Ze(this,c,n),TZe(this,c,n),Object.defineProperties(t,c),this._lastPerInstanceAttributeIndex=n,this._perInstanceAttributeCache.set(e,t),t};hr.prototype.isDestroyed=function(){return!1};hr.prototype.destroy=function(){let e,t;this._sp=this._sp&&this._sp.destroy(),this._spDepthFail=this._spDepthFail&&this._spDepthFail.destroy();let n=this._va;for(e=n.length,t=0;t<e;++t)n[t].destroy();this._va=void 0;let i=this._pickIds;for(e=i.length,t=0;t<e;++t)i[t].destroy();return this._pickIds=void 0,this._batchTable=this._batchTable&&this._batchTable.destroy(),this._instanceIds=void 0,this._perInstanceAttributeCache=void 0,this._attributeLocations=void 0,ue(this)};function WG(e,t,n,i){e._error=i,e._state=n,t.afterRender.push(function(){if(e._ready=e._state===mr.COMPLETE||e._state===mr.FAILED,!d(i))return!0})}var Zn=hr;var Nkt=T(S(),1);var _kt=T(S(),1);function SZe(e){e=g(e,g.EMPTY_OBJECT),this.componentDatatype=e.componentDatatype,this.componentsPerAttribute=e.componentsPerAttribute,this.normalize=g(e.normalize,!1),this.value=e.value}var ka=SZe;var Skt=T(S(),1),bS=`#ifdef TEXTURE_COORDINATES
  4266. #ifdef SPHERICAL
  4267. in vec4 v_sphericalExtents;
  4268. #else // SPHERICAL
  4269. in vec2 v_inversePlaneExtents;
  4270. in vec4 v_westPlane;
  4271. in vec4 v_southPlane;
  4272. #endif // SPHERICAL
  4273. in vec3 v_uvMinAndSphericalLongitudeRotation;
  4274. in vec3 v_uMaxAndInverseDistance;
  4275. in vec3 v_vMaxAndInverseDistance;
  4276. #endif // TEXTURE_COORDINATES
  4277. #ifdef PER_INSTANCE_COLOR
  4278. in vec4 v_color;
  4279. #endif
  4280. #ifdef NORMAL_EC
  4281. vec3 getEyeCoordinate3FromWindowCoordinate(vec2 fragCoord, float logDepthOrDepth) {
  4282. vec4 eyeCoordinate = czm_windowToEyeCoordinates(fragCoord, logDepthOrDepth);
  4283. return eyeCoordinate.xyz / eyeCoordinate.w;
  4284. }
  4285. vec3 vectorFromOffset(vec4 eyeCoordinate, vec2 positiveOffset) {
  4286. vec2 glFragCoordXY = gl_FragCoord.xy;
  4287. // Sample depths at both offset and negative offset
  4288. float upOrRightLogDepth = czm_unpackDepth(texture(czm_globeDepthTexture, (glFragCoordXY + positiveOffset) / czm_viewport.zw));
  4289. float downOrLeftLogDepth = czm_unpackDepth(texture(czm_globeDepthTexture, (glFragCoordXY - positiveOffset) / czm_viewport.zw));
  4290. // Explicitly evaluate both paths
  4291. // Necessary for multifrustum and for edges of the screen
  4292. bvec2 upOrRightInBounds = lessThan(glFragCoordXY + positiveOffset, czm_viewport.zw);
  4293. float useUpOrRight = float(upOrRightLogDepth > 0.0 && upOrRightInBounds.x && upOrRightInBounds.y);
  4294. float useDownOrLeft = float(useUpOrRight == 0.0);
  4295. vec3 upOrRightEC = getEyeCoordinate3FromWindowCoordinate(glFragCoordXY + positiveOffset, upOrRightLogDepth);
  4296. vec3 downOrLeftEC = getEyeCoordinate3FromWindowCoordinate(glFragCoordXY - positiveOffset, downOrLeftLogDepth);
  4297. return (upOrRightEC - (eyeCoordinate.xyz / eyeCoordinate.w)) * useUpOrRight + ((eyeCoordinate.xyz / eyeCoordinate.w) - downOrLeftEC) * useDownOrLeft;
  4298. }
  4299. #endif // NORMAL_EC
  4300. void main(void)
  4301. {
  4302. #ifdef REQUIRES_EC
  4303. float logDepthOrDepth = czm_unpackDepth(texture(czm_globeDepthTexture, gl_FragCoord.xy / czm_viewport.zw));
  4304. vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth);
  4305. #endif
  4306. #ifdef REQUIRES_WC
  4307. vec4 worldCoordinate4 = czm_inverseView * eyeCoordinate;
  4308. vec3 worldCoordinate = worldCoordinate4.xyz / worldCoordinate4.w;
  4309. #endif
  4310. #ifdef TEXTURE_COORDINATES
  4311. vec2 uv;
  4312. #ifdef SPHERICAL
  4313. // Treat world coords as a sphere normal for spherical coordinates
  4314. vec2 sphericalLatLong = czm_approximateSphericalCoordinates(worldCoordinate);
  4315. sphericalLatLong.y += v_uvMinAndSphericalLongitudeRotation.z;
  4316. sphericalLatLong.y = czm_branchFreeTernary(sphericalLatLong.y < czm_pi, sphericalLatLong.y, sphericalLatLong.y - czm_twoPi);
  4317. uv.x = (sphericalLatLong.y - v_sphericalExtents.y) * v_sphericalExtents.w;
  4318. uv.y = (sphericalLatLong.x - v_sphericalExtents.x) * v_sphericalExtents.z;
  4319. #else // SPHERICAL
  4320. // Unpack planes and transform to eye space
  4321. uv.x = czm_planeDistance(v_westPlane, eyeCoordinate.xyz / eyeCoordinate.w) * v_inversePlaneExtents.x;
  4322. uv.y = czm_planeDistance(v_southPlane, eyeCoordinate.xyz / eyeCoordinate.w) * v_inversePlaneExtents.y;
  4323. #endif // SPHERICAL
  4324. #endif // TEXTURE_COORDINATES
  4325. #ifdef PICK
  4326. #ifdef CULL_FRAGMENTS
  4327. // When classifying translucent geometry, logDepthOrDepth == 0.0
  4328. // indicates a region that should not be classified, possibly due to there
  4329. // being opaque pixels there in another buffer.
  4330. // Check for logDepthOrDepth != 0.0 to make sure this should be classified.
  4331. if (0.0 <= uv.x && uv.x <= 1.0 && 0.0 <= uv.y && uv.y <= 1.0 || logDepthOrDepth != 0.0) {
  4332. out_FragColor.a = 1.0; // 0.0 alpha leads to discard from ShaderSource.createPickFragmentShaderSource
  4333. czm_writeDepthClamp();
  4334. }
  4335. #else // CULL_FRAGMENTS
  4336. out_FragColor.a = 1.0;
  4337. #endif // CULL_FRAGMENTS
  4338. #else // PICK
  4339. #ifdef CULL_FRAGMENTS
  4340. // When classifying translucent geometry, logDepthOrDepth == 0.0
  4341. // indicates a region that should not be classified, possibly due to there
  4342. // being opaque pixels there in another buffer.
  4343. if (uv.x <= 0.0 || 1.0 <= uv.x || uv.y <= 0.0 || 1.0 <= uv.y || logDepthOrDepth == 0.0) {
  4344. discard;
  4345. }
  4346. #endif
  4347. #ifdef NORMAL_EC
  4348. // Compute normal by sampling adjacent pixels in 2x2 block in screen space
  4349. vec3 downUp = vectorFromOffset(eyeCoordinate, vec2(0.0, 1.0));
  4350. vec3 leftRight = vectorFromOffset(eyeCoordinate, vec2(1.0, 0.0));
  4351. vec3 normalEC = normalize(cross(leftRight, downUp));
  4352. #endif
  4353. #ifdef PER_INSTANCE_COLOR
  4354. vec4 color = czm_gammaCorrect(v_color);
  4355. #ifdef FLAT
  4356. out_FragColor = color;
  4357. #else // FLAT
  4358. czm_materialInput materialInput;
  4359. materialInput.normalEC = normalEC;
  4360. materialInput.positionToEyeEC = -eyeCoordinate.xyz;
  4361. czm_material material = czm_getDefaultMaterial(materialInput);
  4362. material.diffuse = color.rgb;
  4363. material.alpha = color.a;
  4364. out_FragColor = czm_phong(normalize(-eyeCoordinate.xyz), material, czm_lightDirectionEC);
  4365. #endif // FLAT
  4366. // Premultiply alpha. Required for classification primitives on translucent globe.
  4367. out_FragColor.rgb *= out_FragColor.a;
  4368. #else // PER_INSTANCE_COLOR
  4369. // Material support.
  4370. // USES_ is distinct from REQUIRES_, because some things are dependencies of each other or
  4371. // dependencies for culling but might not actually be used by the material.
  4372. czm_materialInput materialInput;
  4373. #ifdef USES_NORMAL_EC
  4374. materialInput.normalEC = normalEC;
  4375. #endif
  4376. #ifdef USES_POSITION_TO_EYE_EC
  4377. materialInput.positionToEyeEC = -eyeCoordinate.xyz;
  4378. #endif
  4379. #ifdef USES_TANGENT_TO_EYE
  4380. materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(worldCoordinate, normalEC);
  4381. #endif
  4382. #ifdef USES_ST
  4383. // Remap texture coordinates from computed (approximately aligned with cartographic space) to the desired
  4384. // texture coordinate system, which typically forms a tight oriented bounding box around the geometry.
  4385. // Shader is provided a set of reference points for remapping.
  4386. materialInput.st.x = czm_lineDistance(v_uvMinAndSphericalLongitudeRotation.xy, v_uMaxAndInverseDistance.xy, uv) * v_uMaxAndInverseDistance.z;
  4387. materialInput.st.y = czm_lineDistance(v_uvMinAndSphericalLongitudeRotation.xy, v_vMaxAndInverseDistance.xy, uv) * v_vMaxAndInverseDistance.z;
  4388. #endif
  4389. czm_material material = czm_getMaterial(materialInput);
  4390. #ifdef FLAT
  4391. out_FragColor = vec4(material.diffuse + material.emission, material.alpha);
  4392. #else // FLAT
  4393. out_FragColor = czm_phong(normalize(-eyeCoordinate.xyz), material, czm_lightDirectionEC);
  4394. #endif // FLAT
  4395. // Premultiply alpha. Required for classification primitives on translucent globe.
  4396. out_FragColor.rgb *= out_FragColor.a;
  4397. #endif // PER_INSTANCE_COLOR
  4398. czm_writeDepthClamp();
  4399. #endif // PICK
  4400. }
  4401. `;function Qd(e,t,n){this._projectionExtentDefines={eastMostYhighDefine:"",eastMostYlowDefine:"",westMostYhighDefine:"",westMostYlowDefine:""};let i=new Z3;i.requiresTextureCoordinates=e,i.requiresEC=!n.flat;let o=new Z3;if(o.requiresTextureCoordinates=e,n instanceof rn)i.requiresNormalEC=!n.flat;else{let r=`${n.material.shaderSource}
  4402. ${n.fragmentShaderSource}`;i.normalEC=r.indexOf("materialInput.normalEC")!==-1||r.indexOf("czm_getDefaultMaterial")!==-1,i.positionToEyeEC=r.indexOf("materialInput.positionToEyeEC")!==-1,i.tangentToEyeMatrix=r.indexOf("materialInput.tangentToEyeMatrix")!==-1,i.st=r.indexOf("materialInput.st")!==-1}this._colorShaderDependencies=i,this._pickShaderDependencies=o,this._appearance=n,this._extentsCulling=e,this._planarExtents=t}Qd.prototype.createFragmentShader=function(e){let t=this._appearance,n=this._colorShaderDependencies,i=[];!e&&!this._planarExtents&&i.push("SPHERICAL"),n.requiresEC&&i.push("REQUIRES_EC"),n.requiresWC&&i.push("REQUIRES_WC"),n.requiresTextureCoordinates&&i.push("TEXTURE_COORDINATES"),this._extentsCulling&&i.push("CULL_FRAGMENTS"),n.requiresNormalEC&&i.push("NORMAL_EC"),t instanceof rn&&i.push("PER_INSTANCE_COLOR"),n.normalEC&&i.push("USES_NORMAL_EC"),n.positionToEyeEC&&i.push("USES_POSITION_TO_EYE_EC"),n.tangentToEyeMatrix&&i.push("USES_TANGENT_TO_EYE"),n.st&&i.push("USES_ST"),t.flat&&i.push("FLAT");let o="";return t instanceof rn||(o=t.material.shaderSource),new Ye({defines:i,sources:[o,bS]})};Qd.prototype.createPickFragmentShader=function(e){let t=this._pickShaderDependencies,n=["PICK"];return!e&&!this._planarExtents&&n.push("SPHERICAL"),t.requiresEC&&n.push("REQUIRES_EC"),t.requiresWC&&n.push("REQUIRES_WC"),t.requiresTextureCoordinates&&n.push("TEXTURE_COORDINATES"),this._extentsCulling&&n.push("CULL_FRAGMENTS"),new Ye({defines:n,sources:[bS],pickColorQualifier:"in"})};Qd.prototype.createVertexShader=function(e,t,n,i){return P$(this._colorShaderDependencies,this._planarExtents,n,e,t,this._appearance,i,this._projectionExtentDefines)};Qd.prototype.createPickVertexShader=function(e,t,n,i){return P$(this._pickShaderDependencies,this._planarExtents,n,e,t,void 0,i,this._projectionExtentDefines)};var R$=new h,Z$=new he,G$={high:0,low:0};function P$(e,t,n,i,o,r,s,a){let c=i.slice();if(a.eastMostYhighDefine===""){let l=Z$;l.longitude=W.PI,l.latitude=0,l.height=0;let u=s.project(l,R$),m=On.encode(u.x,G$);a.eastMostYhighDefine=`EAST_MOST_X_HIGH ${m.high.toFixed(`${m.high}`.length+1)}`,a.eastMostYlowDefine=`EAST_MOST_X_LOW ${m.low.toFixed(`${m.low}`.length+1)}`;let p=Z$;p.longitude=-W.PI,p.latitude=0,p.height=0;let y=s.project(p,R$);m=On.encode(y.x,G$),a.westMostYhighDefine=`WEST_MOST_X_HIGH ${m.high.toFixed(`${m.high}`.length+1)}`,a.westMostYlowDefine=`WEST_MOST_X_LOW ${m.low.toFixed(`${m.low}`.length+1)}`}return n&&(c.push(a.eastMostYhighDefine),c.push(a.eastMostYlowDefine),c.push(a.westMostYhighDefine),c.push(a.westMostYlowDefine)),d(r)&&r instanceof rn&&c.push("PER_INSTANCE_COLOR"),e.requiresTextureCoordinates&&(c.push("TEXTURE_COORDINATES"),t||n||c.push("SPHERICAL"),n&&c.push("COLUMBUS_VIEW_2D")),new Ye({defines:c,sources:[o]})}function Z3(){this._requiresEC=!1,this._requiresWC=!1,this._requiresNormalEC=!1,this._requiresTextureCoordinates=!1,this._usesNormalEC=!1,this._usesPositionToEyeEC=!1,this._usesTangentToEyeMat=!1,this._usesSt=!1}Object.defineProperties(Z3.prototype,{requiresEC:{get:function(){return this._requiresEC},set:function(e){this._requiresEC=e||this._requiresEC}},requiresWC:{get:function(){return this._requiresWC},set:function(e){this._requiresWC=e||this._requiresWC,this.requiresEC=this._requiresWC}},requiresNormalEC:{get:function(){return this._requiresNormalEC},set:function(e){this._requiresNormalEC=e||this._requiresNormalEC,this.requiresEC=this._requiresNormalEC}},requiresTextureCoordinates:{get:function(){return this._requiresTextureCoordinates},set:function(e){this._requiresTextureCoordinates=e||this._requiresTextureCoordinates,this.requiresWC=this._requiresTextureCoordinates}},normalEC:{set:function(e){this.requiresNormalEC=e,this._usesNormalEC=e},get:function(){return this._usesNormalEC}},tangentToEyeMatrix:{set:function(e){this.requiresWC=e,this.requiresNormalEC=e,this._usesTangentToEyeMat=e},get:function(){return this._usesTangentToEyeMat}},positionToEyeEC:{set:function(e){this.requiresEC=e,this._usesPositionToEyeEC=e},get:function(){return this._usesPositionToEyeEC}},st:{set:function(e){this.requiresTextureCoordinates=e,this._usesSt=e},get:function(){return this._usesSt}}});function E$(e,t,n){return Math.abs((t.y-e.y)*n.x-(t.x-e.x)*n.y+t.x*e.y-t.y*e.x)/D.distance(t,e)}var CZe=[new D,new D,new D,new D];function v$(e,t){let n=CZe,i=D.unpack(t,0,n[0]),o=D.unpack(t,2,n[1]),r=D.unpack(t,4,n[2]);e.uMaxVmax=new ka({componentDatatype:Q.FLOAT,componentsPerAttribute:4,normalize:!1,value:[o.x,o.y,r.x,r.y]});let s=1/E$(i,o,r),a=1/E$(i,r,o);e.uvMinAndExtents=new ka({componentDatatype:Q.FLOAT,componentsPerAttribute:4,normalize:!1,value:[i.x,i.y,s,a]})}var w$=new he,F$=new h,VZe=new h,LZe=new h,sM={high:0,low:0};function A$(e,t,n){let i=w$;i.height=0,i.longitude=e.west,i.latitude=e.south;let o=t.project(i,F$);i.latitude=e.north;let r=t.project(i,VZe);i.longitude=e.east,i.latitude=e.south;let s=t.project(i,LZe),a=[0,0,0,0],c=[0,0,0,0],l=On.encode(o.x,sM);a[0]=l.high,c[0]=l.low,l=On.encode(o.y,sM),a[1]=l.high,c[1]=l.low,l=On.encode(r.y,sM),a[2]=l.high,c[2]=l.low,l=On.encode(s.x,sM),a[3]=l.high,c[3]=l.low,n.planes2D_HIGH=new ka({componentDatatype:Q.FLOAT,componentsPerAttribute:4,normalize:!1,value:a}),n.planes2D_LOW=new ka({componentDatatype:Q.FLOAT,componentsPerAttribute:4,normalize:!1,value:c})}var RZe=new A,ZZe=new A,X$=new h,GZe=new he,EZe=[new he,new he,new he,new he,new he,new he,new he,new he];function XZe(e,t,n,i,o,r){let s=de.center(e,GZe);s.height=n;let a=he.toCartesian(s,t,X$),c=vt.eastNorthUpToFixedFrame(a,t,RZe),l=A.inverse(c,ZZe),u=e.west,m=e.east,p=e.north,y=e.south,f=EZe;f[0].latitude=y,f[0].longitude=u,f[1].latitude=p,f[1].longitude=u,f[2].latitude=p,f[2].longitude=m,f[3].latitude=y,f[3].longitude=m;let x=(u+m)*.5,_=(p+y)*.5;f[4].latitude=y,f[4].longitude=x,f[5].latitude=p,f[5].longitude=x,f[6].latitude=_,f[6].longitude=u,f[7].latitude=_,f[7].longitude=m;let C=Number.POSITIVE_INFINITY,V=Number.NEGATIVE_INFINITY,L=Number.POSITIVE_INFINITY,Z=Number.NEGATIVE_INFINITY;for(let v=0;v<8;v++){f[v].height=n;let F=he.toCartesian(f[v],t,X$);A.multiplyByPoint(l,F,F),F.z=0,C=Math.min(C,F.x),V=Math.max(V,F.x),L=Math.min(L,F.y),Z=Math.max(Z,F.y)}let G=i;G.x=C,G.y=L,G.z=0,A.multiplyByPoint(c,G,G);let X=o;X.x=V,X.y=L,X.z=0,A.multiplyByPoint(c,X,X),h.subtract(X,G,o);let P=r;P.x=C,P.y=Z,P.z=0,A.multiplyByPoint(c,P,P),h.subtract(P,G,r)}var IZe=new h,WZe=new h,PZe=new On;Qd.getPlanarTextureCoordinateAttributes=function(e,t,n,i,o){let r=F$,s=IZe,a=WZe;XZe(e,n,g(o,0),r,s,a);let c={};v$(c,t);let l=On.fromCartesian(r,PZe);return c.southWest_HIGH=new ka({componentDatatype:Q.FLOAT,componentsPerAttribute:3,normalize:!1,value:h.pack(l.high,[0,0,0])}),c.southWest_LOW=new ka({componentDatatype:Q.FLOAT,componentsPerAttribute:3,normalize:!1,value:h.pack(l.low,[0,0,0])}),c.eastward=new ka({componentDatatype:Q.FLOAT,componentsPerAttribute:3,normalize:!1,value:h.pack(s,[0,0,0])}),c.northward=new ka({componentDatatype:Q.FLOAT,componentsPerAttribute:3,normalize:!1,value:h.pack(a,[0,0,0])}),A$(e,i,c),c};var vZe=new h;function I$(e,t,n,i){let o=w$;o.latitude=e,o.longitude=t,o.height=0;let r=he.toCartesian(o,n,vZe),s=Math.sqrt(r.x*r.x+r.y*r.y),a=W.fastApproximateAtan2(s,r.z),c=W.fastApproximateAtan2(r.x,r.y);return i.x=a,i.y=c,i}var W$=new D;Qd.getSphericalExtentGeometryInstanceAttributes=function(e,t,n,i){let o=I$(e.south,e.west,n,W$),r=o.x,s=o.y,a=I$(e.north,e.east,n,W$),c=a.x,l=a.y,u=0;s>l&&(u=W.PI-s,s=-W.PI,l+=u),r-=W.EPSILON5,s-=W.EPSILON5,c+=W.EPSILON5,l+=W.EPSILON5;let m=1/(l-s),p=1/(c-r),y={sphericalExtents:new ka({componentDatatype:Q.FLOAT,componentsPerAttribute:4,normalize:!1,value:[r,s,p,m]}),longitudeRotation:new ka({componentDatatype:Q.FLOAT,componentsPerAttribute:1,normalize:!1,value:[u]})};return v$(y,t),A$(e,i,y),y};Qd.hasAttributesForTextureCoordinatePlanes=function(e){return d(e.southWest_HIGH)&&d(e.southWest_LOW)&&d(e.northward)&&d(e.eastward)&&d(e.planes2D_HIGH)&&d(e.planes2D_LOW)&&d(e.uMaxVmax)&&d(e.uvMinAndExtents)};Qd.hasAttributesForSphericalExtents=function(e){return d(e.sphericalExtents)&&d(e.longitudeRotation)&&d(e.planes2D_HIGH)&&d(e.planes2D_LOW)&&d(e.uMaxVmax)&&d(e.uvMinAndExtents)};function wZe(e){return Math.max(e.width,e.height)>Qd.MAX_WIDTH_FOR_PLANAR_EXTENTS}Qd.shouldUseSphericalCoordinates=function(e){return wZe(e)};Qd.MAX_WIDTH_FOR_PLANAR_EXTENTS=W.toRadians(1);var Hl=Qd;var Jkt=T(S(),1);var Dkt=T(S(),1);var FZe={NEVER:ne.NEVER,LESS:ne.LESS,EQUAL:ne.EQUAL,LESS_OR_EQUAL:ne.LEQUAL,GREATER:ne.GREATER,NOT_EQUAL:ne.NOTEQUAL,GREATER_OR_EQUAL:ne.GEQUAL,ALWAYS:ne.ALWAYS},Dn=Object.freeze(FZe);var Okt=T(S(),1);var AZe={ZERO:ne.ZERO,KEEP:ne.KEEP,REPLACE:ne.REPLACE,INCREMENT:ne.INCR,DECREMENT:ne.DECR,INVERT:ne.INVERT,INCREMENT_WRAP:ne.INCR_WRAP,DECREMENT_WRAP:ne.DECR_WRAP},ht=Object.freeze(AZe);var aM={CESIUM_3D_TILE_MASK:128,SKIP_LOD_MASK:112,SKIP_LOD_BIT_SHIFT:4,CLASSIFICATION_MASK:15};aM.setCesium3DTileBit=function(){return{enabled:!0,frontFunction:Dn.ALWAYS,frontOperation:{fail:ht.KEEP,zFail:ht.KEEP,zPass:ht.REPLACE},backFunction:Dn.ALWAYS,backOperation:{fail:ht.KEEP,zFail:ht.KEEP,zPass:ht.REPLACE},reference:aM.CESIUM_3D_TILE_MASK,mask:aM.CESIUM_3D_TILE_MASK}};var Ft=Object.freeze(aM);function Kg(e){e=g(e,g.EMPTY_OBJECT);let t=e.geometryInstances;this.geometryInstances=t,this.show=g(e.show,!0),this.classificationType=g(e.classificationType,kn.BOTH),this.debugShowBoundingVolume=g(e.debugShowBoundingVolume,!1),this.debugShowShadowVolume=g(e.debugShowShadowVolume,!1),this._debugShowShadowVolume=!1,this._extruded=g(e._extruded,!1),this._uniformMap=e._uniformMap,this._sp=void 0,this._spStencil=void 0,this._spPick=void 0,this._spColor=void 0,this._spPick2D=void 0,this._spColor2D=void 0,this._rsStencilDepthPass=void 0,this._rsStencilDepthPass3DTiles=void 0,this._rsColorPass=void 0,this._rsPickPass=void 0,this._commandsIgnoreShow=[],this._ready=!1,this._primitive=void 0,this._pickPrimitive=e._pickPrimitive,this._hasSphericalExtentsAttribute=!1,this._hasPlanarExtentsAttributes=!1,this._hasPerColorAttribute=!1,this.appearance=e.appearance,this._createBoundingVolumeFunction=e._createBoundingVolumeFunction,this._updateAndQueueCommandsFunction=e._updateAndQueueCommandsFunction,this._usePickOffsets=!1,this._primitiveOptions={geometryInstances:void 0,appearance:void 0,vertexCacheOptimize:g(e.vertexCacheOptimize,!1),interleave:g(e.interleave,!1),releaseGeometryInstances:g(e.releaseGeometryInstances,!0),allowPicking:g(e.allowPicking,!0),asynchronous:g(e.asynchronous,!0),compressVertices:g(e.compressVertices,!0),_createBoundingVolumeFunction:void 0,_createRenderStatesFunction:void 0,_createShaderProgramFunction:void 0,_createCommandsFunction:void 0,_updateAndQueueCommandsFunction:void 0,_createPickOffsets:!0}}Object.defineProperties(Kg.prototype,{vertexCacheOptimize:{get:function(){return this._primitiveOptions.vertexCacheOptimize}},interleave:{get:function(){return this._primitiveOptions.interleave}},releaseGeometryInstances:{get:function(){return this._primitiveOptions.releaseGeometryInstances}},allowPicking:{get:function(){return this._primitiveOptions.allowPicking}},asynchronous:{get:function(){return this._primitiveOptions.asynchronous}},compressVertices:{get:function(){return this._primitiveOptions.compressVertices}},ready:{get:function(){return this._ready}},_needs2DShader:{get:function(){return this._hasPlanarExtentsAttributes||this._hasSphericalExtentsAttribute}}});Kg.isSupported=function(e){return e.context.stencilBuffer};function yS(e,t){let n=t?Dn.EQUAL:Dn.ALWAYS;return{colorMask:{red:!1,green:!1,blue:!1,alpha:!1},stencilTest:{enabled:e,frontFunction:n,frontOperation:{fail:ht.KEEP,zFail:ht.DECREMENT_WRAP,zPass:ht.KEEP},backFunction:n,backOperation:{fail:ht.KEEP,zFail:ht.INCREMENT_WRAP,zPass:ht.KEEP},reference:Ft.CESIUM_3D_TILE_MASK,mask:Ft.CESIUM_3D_TILE_MASK},stencilMask:Ft.CLASSIFICATION_MASK,depthTest:{enabled:!0,func:Ua.LESS_OR_EQUAL},depthMask:!1}}function E3(e){return{stencilTest:{enabled:e,frontFunction:Dn.NOT_EQUAL,frontOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},backFunction:Dn.NOT_EQUAL,backOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},reference:0,mask:Ft.CLASSIFICATION_MASK},stencilMask:Ft.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1,blending:dn.PRE_MULTIPLIED_ALPHA_BLEND}}var MZe={stencilTest:{enabled:!0,frontFunction:Dn.NOT_EQUAL,frontOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},backFunction:Dn.NOT_EQUAL,backOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},reference:0,mask:Ft.CLASSIFICATION_MASK},stencilMask:Ft.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1};function NZe(e,t,n,i){if(d(e._rsStencilDepthPass))return;let o=!e.debugShowShadowVolume;e._rsStencilDepthPass=De.fromCache(yS(o,!1)),e._rsStencilDepthPass3DTiles=De.fromCache(yS(o,!0)),e._rsColorPass=De.fromCache(E3(o,!1)),e._rsPickPass=De.fromCache(MZe)}function UZe(e,t){if(!e.compressVertices)return t;if(t.search(/in\s+vec3\s+extrudeDirection;/g)!==-1){let n="compressedAttributes",i=`in vec2 ${n};`,o=`vec3 extrudeDirection;
  4403. `,r=` extrudeDirection = czm_octDecode(${n}, 65535.0);
  4404. `,s=t;s=s.replace(/in\s+vec3\s+extrudeDirection;/g,""),s=Ye.replaceMain(s,"czm_non_compressed_main");let a=`void main()
  4405. {
  4406. ${r} czm_non_compressed_main();
  4407. }`;return[i,o,s,a].join(`
  4408. `)}}function kZe(e,t){let n=t.context,i=e._primitive,o=CG;o=e._primitive._batchTable.getVertexShaderCallback()(o),o=Zn._appendDistanceDisplayConditionToShader(i,o),o=Zn._modifyShaderPosition(e,o,t.scene3DOnly),o=Zn._updateColorAttribute(i,o);let r=e._hasPlanarExtentsAttributes,s=r||e._hasSphericalExtentsAttribute;e._extruded&&(o=UZe(i,o));let a=e._extruded?"EXTRUDED_GEOMETRY":"",c=new Ye({defines:[a],sources:[o]}),l=new Ye({sources:[lb]}),u=e._primitive._attributeLocations,m=new Hl(s,r,e.appearance);if(e._spStencil=Qt.replaceCache({context:n,shaderProgram:e._spStencil,vertexShaderSource:c,fragmentShaderSource:l,attributeLocations:u}),e._primitive.allowPicking){let f=Ye.createPickVertexShaderSource(o);f=Zn._appendShowToShader(i,f),f=Zn._updatePickColorAttribute(f);let x=m.createPickFragmentShader(!1),_=m.createPickVertexShader([a],f,!1,t.mapProjection);if(e._spPick=Qt.replaceCache({context:n,shaderProgram:e._spPick,vertexShaderSource:_,fragmentShaderSource:x,attributeLocations:u}),s){let C=n.shaderCache.getDerivedShaderProgram(e._spPick,"2dPick");if(!d(C)){let V=m.createPickFragmentShader(!0),L=m.createPickVertexShader([a],f,!0,t.mapProjection);C=n.shaderCache.createDerivedShaderProgram(e._spPick,"2dPick",{vertexShaderSource:L,fragmentShaderSource:V,attributeLocations:u})}e._spPick2D=C}}else e._spPick=Qt.fromCache({context:n,vertexShaderSource:c,fragmentShaderSource:l,attributeLocations:u});o=Zn._appendShowToShader(i,o),c=new Ye({defines:[a],sources:[o]}),e._sp=Qt.replaceCache({context:n,shaderProgram:e._sp,vertexShaderSource:c,fragmentShaderSource:l,attributeLocations:u});let p=m.createFragmentShader(!1),y=m.createVertexShader([a],o,!1,t.mapProjection);if(e._spColor=Qt.replaceCache({context:n,shaderProgram:e._spColor,vertexShaderSource:y,fragmentShaderSource:p,attributeLocations:u}),s){let f=n.shaderCache.getDerivedShaderProgram(e._spColor,"2dColor");if(!d(f)){let x=m.createFragmentShader(!0),_=m.createVertexShader([a],o,!0,t.mapProjection);f=n.shaderCache.createDerivedShaderProgram(e._spColor,"2dColor",{vertexShaderSource:_,fragmentShaderSource:x,attributeLocations:u})}e._spColor2D=f}}function DZe(e,t){let n=e._primitive,i=n._va.length*2;t.length=i;let o,r,s,a=0,c=n._batchTable.getUniformMapCallback()(e._uniformMap),l=e._needs2DShader;for(o=0;o<i;o+=2){let y=n._va[a++];r=t[o],d(r)||(r=t[o]=new nt({owner:e,primitiveType:n._primitiveType})),r.vertexArray=y,r.renderState=e._rsStencilDepthPass,r.shaderProgram=e._sp,r.uniformMap=c,r.pass=Re.TERRAIN_CLASSIFICATION,s=nt.shallowClone(r,r.derivedCommands.tileset),s.renderState=e._rsStencilDepthPass3DTiles,s.pass=Re.CESIUM_3D_TILE_CLASSIFICATION,r.derivedCommands.tileset=s,r=t[o+1],d(r)||(r=t[o+1]=new nt({owner:e,primitiveType:n._primitiveType})),r.vertexArray=y,r.renderState=e._rsColorPass,r.shaderProgram=e._spColor,r.pass=Re.TERRAIN_CLASSIFICATION;let x=e.appearance.material;if(d(x)&&(c=xt(c,x._uniforms)),r.uniformMap=c,s=nt.shallowClone(r,r.derivedCommands.tileset),s.pass=Re.CESIUM_3D_TILE_CLASSIFICATION,r.derivedCommands.tileset=s,l){let _=nt.shallowClone(r,r.derivedCommands.appearance2D);_.shaderProgram=e._spColor2D,r.derivedCommands.appearance2D=_,_=nt.shallowClone(s,s.derivedCommands.appearance2D),_.shaderProgram=e._spColor2D,s.derivedCommands.appearance2D=_}}let u=e._commandsIgnoreShow,m=e._spStencil,p=0;i=u.length=i/2;for(let y=0;y<i;++y){let f=u[y]=nt.shallowClone(t[p],u[y]);f.shaderProgram=m,f.pass=Re.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW,p+=2}}function BZe(e,t){let n=e._usePickOffsets,i=e._primitive,o=i._va.length*2,r,s=0,a;n&&(r=i._pickOffsets,o=r.length*2),t.length=o;let c,l,u,m=0,p=i._batchTable.getUniformMapCallback()(e._uniformMap),y=e._needs2DShader;for(c=0;c<o;c+=2){let f=i._va[m++];if(n&&(a=r[s++],f=i._va[a.index]),l=t[c],d(l)||(l=t[c]=new nt({owner:e,primitiveType:i._primitiveType,pickOnly:!0})),l.vertexArray=f,l.renderState=e._rsStencilDepthPass,l.shaderProgram=e._sp,l.uniformMap=p,l.pass=Re.TERRAIN_CLASSIFICATION,n&&(l.offset=a.offset,l.count=a.count),u=nt.shallowClone(l,l.derivedCommands.tileset),u.renderState=e._rsStencilDepthPass3DTiles,u.pass=Re.CESIUM_3D_TILE_CLASSIFICATION,l.derivedCommands.tileset=u,l=t[c+1],d(l)||(l=t[c+1]=new nt({owner:e,primitiveType:i._primitiveType,pickOnly:!0})),l.vertexArray=f,l.renderState=e._rsPickPass,l.shaderProgram=e._spPick,l.uniformMap=p,l.pass=Re.TERRAIN_CLASSIFICATION,n&&(l.offset=a.offset,l.count=a.count),u=nt.shallowClone(l,l.derivedCommands.tileset),u.pass=Re.CESIUM_3D_TILE_CLASSIFICATION,l.derivedCommands.tileset=u,y){let x=nt.shallowClone(l,l.derivedCommands.pick2D);x.shaderProgram=e._spPick2D,l.derivedCommands.pick2D=x,x=nt.shallowClone(u,u.derivedCommands.pick2D),x.shaderProgram=e._spPick2D,u.derivedCommands.pick2D=x}}}function YZe(e,t,n,i,o,r,s){DZe(e,r),BZe(e,s)}function M$(e,t){return Math.floor(e%t/2)}function G3(e,t,n,i,o,r){e.modelMatrix=n,e.boundingVolume=o,e.cull=i,e.debugShowBoundingVolume=r,t.commandList.push(e)}function N$(e,t,n,i,o){e.modelMatrix=n,e.boundingVolume=o,e.cull=i,t.commandList.push(e)}function OZe(e,t,n,i,o,r,s,a){let c=e._primitive;Zn._updateBoundingVolumes(c,t,o);let l;t.mode===ie.SCENE3D?l=c._boundingSphereWC:t.mode===ie.COLUMBUS_VIEW?l=c._boundingSphereCV:t.mode===ie.SCENE2D&&d(c._boundingSphere2D)?l=c._boundingSphere2D:d(c._boundingSphereMorph)&&(l=c._boundingSphereMorph);let u=e.classificationType,m=u!==kn.CESIUM_3D_TILE,p=u!==kn.TERRAIN,y=t.passes,f,x,_;if(y.render){let C=n.length;for(f=0;f<C;++f)x=l[M$(f,C)],m&&(_=n[f],G3(_,t,o,r,x,s)),p&&(_=n[f].derivedCommands.tileset,G3(_,t,o,r,x,s));if(t.invertClassification){let V=e._commandsIgnoreShow,L=V.length;for(f=0;f<L;++f)x=l[f],_=V[f],G3(_,t,o,r,x,s)}}if(y.pick){let C=i.length,V=c._pickOffsets;for(f=0;f<C;++f){let L=V[M$(f,C)];x=l[L.index],m&&(_=i[f],N$(_,t,o,r,x)),p&&(_=i[f].derivedCommands.tileset,N$(_,t,o,r,x))}}}Kg.prototype.update=function(e){if(!d(this._primitive)&&!d(this.geometryInstances))return;let t=this.appearance;d(t)&&d(t.material)&&t.material.update(e.context);let n=this,i=this._primitiveOptions;if(!d(this._primitive)){let o=Array.isArray(this.geometryInstances)?this.geometryInstances:[this.geometryInstances],r=o.length,s,a,c,l=!1,u=!0,m,p=!1,y=!1;for(r>0&&(c=o[0].attributes,p=Hl.hasAttributesForSphericalExtents(c),y=Hl.hasAttributesForTextureCoordinatePlanes(c),m=c.color),s=0;s<r;s++){a=o[s];let x=a.attributes.color;d(x)&&(l=!0),u=u&&d(x)&&Ut.equals(m,x)}if(!u&&!p&&!y)throw new fe("All GeometryInstances must have the same color attribute except via GroundPrimitives");l&&!d(t)&&(t=new rn({flat:!0}),this.appearance=t),this._usePickOffsets=!p&&!y,this._hasSphericalExtentsAttribute=p,this._hasPlanarExtentsAttributes=y,this._hasPerColorAttribute=l;let f=new Array(r);for(s=0;s<r;++s)a=o[s],f[s]=new _t({geometry:a.geometry,attributes:a.attributes,modelMatrix:a.modelMatrix,id:a.id,pickPrimitive:g(this._pickPrimitive,n)});i.appearance=t,i.geometryInstances=f,d(this._createBoundingVolumeFunction)&&(i._createBoundingVolumeFunction=function(x,_){n._createBoundingVolumeFunction(x,_)}),i._createRenderStatesFunction=function(x,_,C,V){NZe(n,_)},i._createShaderProgramFunction=function(x,_,C){kZe(n,_)},i._createCommandsFunction=function(x,_,C,V,L,Z,G){YZe(n,void 0,void 0,!0,!1,Z,G)},d(this._updateAndQueueCommandsFunction)?i._updateAndQueueCommandsFunction=function(x,_,C,V,L,Z,G,X){n._updateAndQueueCommandsFunction(x,_,C,V,L,Z,G,X)}:i._updateAndQueueCommandsFunction=function(x,_,C,V,L,Z,G,X){OZe(n,_,C,V,L,Z,G,X)},this._primitive=new Zn(i)}this.debugShowShadowVolume&&!this._debugShowShadowVolume&&this._ready?(this._debugShowShadowVolume=!0,this._rsStencilDepthPass=De.fromCache(yS(!1,!1)),this._rsStencilDepthPass3DTiles=De.fromCache(yS(!1,!0)),this._rsColorPass=De.fromCache(E3(!1))):!this.debugShowShadowVolume&&this._debugShowShadowVolume&&(this._debugShowShadowVolume=!1,this._rsStencilDepthPass=De.fromCache(yS(!0,!1)),this._rsStencilDepthPass3DTiles=De.fromCache(yS(!0,!0)),this._rsColorPass=De.fromCache(E3(!0))),this._primitive.appearance!==t&&(this._primitive.appearance=t),this._primitive.show=this.show,this._primitive.debugShowBoundingVolume=this.debugShowBoundingVolume,this._primitive.update(e),e.afterRender.push(()=>{d(this._primitive)&&this._primitive.ready&&(this._ready=!0,this.releaseGeometryInstances&&(this.geometryInstances=void 0))})};Kg.prototype.getGeometryInstanceAttributes=function(e){return this._primitive.getGeometryInstanceAttributes(e)};Kg.prototype.isDestroyed=function(){return!1};Kg.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),this._sp=this._sp&&this._sp.destroy(),this._spPick=this._spPick&&this._spPick.destroy(),this._spColor=this._spColor&&this._spColor.destroy(),this._spPick2D=void 0,this._spColor2D=void 0,ue(this)};var gS=Kg;var KZe={u_globeMinimumAltitude:function(){return 55e3}};function cl(e){e=g(e,g.EMPTY_OBJECT);let t=e.appearance,n=e.geometryInstances;if(!d(t)&&d(n)){let o=Array.isArray(n)?n:[n],r=o.length;for(let s=0;s<r;s++){let a=o[s].attributes;if(d(a)&&d(a.color)){t=new rn({flat:!0});break}}}this.appearance=t,this.geometryInstances=e.geometryInstances,this.show=g(e.show,!0),this.classificationType=g(e.classificationType,kn.BOTH),this.debugShowBoundingVolume=g(e.debugShowBoundingVolume,!1),this.debugShowShadowVolume=g(e.debugShowShadowVolume,!1),this._boundingVolumes=[],this._boundingVolumes2D=[],this._ready=!1,this._primitive=void 0,this._maxHeight=void 0,this._minHeight=void 0,this._maxTerrainHeight=li._defaultMaxTerrainHeight,this._minTerrainHeight=li._defaultMinTerrainHeight,this._boundingSpheresKeys=[],this._boundingSpheres=[],this._useFragmentCulling=!1,this._zIndex=void 0;let i=this;this._classificationPrimitiveOptions={geometryInstances:void 0,appearance:void 0,vertexCacheOptimize:g(e.vertexCacheOptimize,!1),interleave:g(e.interleave,!1),releaseGeometryInstances:g(e.releaseGeometryInstances,!0),allowPicking:g(e.allowPicking,!0),asynchronous:g(e.asynchronous,!0),compressVertices:g(e.compressVertices,!0),_createBoundingVolumeFunction:void 0,_updateAndQueueCommandsFunction:void 0,_pickPrimitive:i,_extruded:!0,_uniformMap:KZe}}Object.defineProperties(cl.prototype,{vertexCacheOptimize:{get:function(){return this._classificationPrimitiveOptions.vertexCacheOptimize}},interleave:{get:function(){return this._classificationPrimitiveOptions.interleave}},releaseGeometryInstances:{get:function(){return this._classificationPrimitiveOptions.releaseGeometryInstances}},allowPicking:{get:function(){return this._classificationPrimitiveOptions.allowPicking}},asynchronous:{get:function(){return this._classificationPrimitiveOptions.asynchronous}},compressVertices:{get:function(){return this._classificationPrimitiveOptions.compressVertices}},ready:{get:function(){return this._ready}}});cl.isSupported=gS.isSupported;function U$(e){return function(t,n){let i=n.maximumRadius,o=i/Math.cos(t*.5)-i;return e._maxHeight+o}}function k$(e){return function(t,n){return e._minHeight}}var HZe=new h,zZe=new h,JZe=new h,QZe=new he,jZe=new de;function cM(e,t){let n=e.mapProjection.ellipsoid;if(!d(t.attributes)||!d(t.attributes.position3DHigh))return d(t.rectangle)?t.rectangle:void 0;let i=t.attributes.position3DHigh.values,o=t.attributes.position3DLow.values,r=i.length,s=Number.POSITIVE_INFINITY,a=Number.POSITIVE_INFINITY,c=Number.NEGATIVE_INFINITY,l=Number.NEGATIVE_INFINITY;for(let m=0;m<r;m+=3){let p=h.unpack(i,m,HZe),y=h.unpack(o,m,zZe),f=h.add(p,y,JZe),x=n.cartesianToCartographic(f,QZe),_=x.latitude,C=x.longitude;s=Math.min(s,_),a=Math.min(a,C),c=Math.max(c,_),l=Math.max(l,C)}let u=jZe;return u.north=c,u.south=s,u.east=l,u.west=a,u}function qZe(e,t,n){let i=li.getMinimumMaximumHeights(t,n);e._minTerrainHeight=i.minimumTerrainHeight,e._maxTerrainHeight=i.maximumTerrainHeight}function $Ze(e,t,n){let i=t.mapProjection.ellipsoid,o=cM(t,n),r=Wn.fromRectangle(o,e._minHeight,e._maxHeight,i);if(e._boundingVolumes.push(r),!t.scene3DOnly){let s=t.mapProjection,a=ce.fromRectangleWithHeights2D(o,s,e._maxHeight,e._minHeight);h.fromElements(a.center.z,a.center.x,a.center.y,a.center),e._boundingVolumes2D.push(a)}}function X3(e,t){return Math.floor(e%t/2)}function I3(e,t,n,i,o,r,s){let a=e._primitive;n.mode!==ie.SCENE3D&&t.shaderProgram===a._spColor&&a._needs2DShader&&(t=t.derivedCommands.appearance2D),t.owner=e,t.modelMatrix=i,t.boundingVolume=r,t.cull=o,t.debugShowBoundingVolume=s,n.commandList.push(t)}function D$(e,t,n,i,o,r){let s=e._primitive;n.mode!==ie.SCENE3D&&t.shaderProgram===s._spPick&&s._needs2DShader&&(t=t.derivedCommands.pick2D),t.owner=e,t.modelMatrix=i,t.boundingVolume=r,t.cull=o,n.commandList.push(t)}function eGe(e,t,n,i,o,r,s,a){let c;t.mode===ie.SCENE3D?c=e._boundingVolumes:c=e._boundingVolumes2D;let l=e.classificationType,u=l!==kn.CESIUM_3D_TILE,m=l!==kn.TERRAIN,p=t.passes,y=e._primitive,f,x,_;if(p.render){let C=n.length;for(f=0;f<C;++f)x=c[X3(f,C)],u&&(_=n[f],I3(e,_,t,o,r,x,s)),m&&(_=n[f].derivedCommands.tileset,I3(e,_,t,o,r,x,s));if(t.invertClassification){let V=y._commandsIgnoreShow,L=V.length;for(f=0;f<L;++f)x=c[f],_=V[f],I3(e,_,t,o,r,x,s)}}if(p.pick){let C=i.length,V;for(e._useFragmentCulling||(V=y._primitive._pickOffsets),f=0;f<C;++f){if(x=c[X3(f,C)],!e._useFragmentCulling){let L=V[X3(f,C)];x=c[L.index]}u&&(_=i[f],D$(e,_,t,o,r,x)),m&&(_=i[f].derivedCommands.tileset,D$(e,_,t,o,r,x))}}}cl.initializeTerrainHeights=function(){return li.initialize()};cl.prototype.update=function(e){if(!d(this._primitive)&&!d(this.geometryInstances))return;if(!li.initialized){cl.initializeTerrainHeights();return}let t=this,n=this._classificationPrimitiveOptions;if(!d(this._primitive)){let i=e.mapProjection.ellipsoid,o,r,s,a=Array.isArray(this.geometryInstances)?this.geometryInstances:[this.geometryInstances],c=a.length,l=new Array(c),u,m;for(u=0;u<c;++u){o=a[u],r=o.geometry;let x=cM(e,r);d(m)?d(x)&&de.union(m,x,m):m=de.clone(x);let _=o.id;if(d(_)&&d(x)){let C=li.getBoundingSphere(x,i);this._boundingSpheresKeys.push(_),this._boundingSpheres.push(C)}s=r.constructor,!d(s)||d(s.createShadowVolume)}qZe(this,m,i);let p=e.terrainExaggeration,y=e.terrainExaggerationRelativeHeight;this._minHeight=Sc.getHeight(this._minTerrainHeight,p,y),this._maxHeight=Sc.getHeight(this._maxTerrainHeight,p,y);let f=cl._supportsMaterials(e.context);if(this._useFragmentCulling=f,f){let x,_=!0;for(u=0;u<c;++u)if(o=a[u],r=o.geometry,m=cM(e,r),Hl.shouldUseSphericalCoordinates(m)){_=!1;break}for(u=0;u<c;++u){o=a[u],r=o.geometry,s=r.constructor;let C=cM(e,r),V=r.textureCoordinateRotationPoints;_?x=Hl.getPlanarTextureCoordinateAttributes(C,V,i,e.mapProjection,this._maxHeight):x=Hl.getSphericalExtentGeometryInstanceAttributes(C,V,i,e.mapProjection);let L=o.attributes;for(let Z in L)L.hasOwnProperty(Z)&&(x[Z]=L[Z]);l[u]=new _t({geometry:s.createShadowVolume(r,k$(this),U$(this)),attributes:x,id:o.id})}}else for(u=0;u<c;++u)o=a[u],r=o.geometry,s=r.constructor,l[u]=new _t({geometry:s.createShadowVolume(r,k$(this),U$(this)),attributes:o.attributes,id:o.id});n.geometryInstances=l,n.appearance=this.appearance,n._createBoundingVolumeFunction=function(x,_){$Ze(t,x,_)},n._updateAndQueueCommandsFunction=function(x,_,C,V,L,Z,G,X){eGe(t,_,C,V,L,Z,G,X)},this._primitive=new gS(n)}this._primitive.appearance=this.appearance,this._primitive.show=this.show,this._primitive.debugShowShadowVolume=this.debugShowShadowVolume,this._primitive.debugShowBoundingVolume=this.debugShowBoundingVolume,this._primitive.update(e),e.afterRender.push(()=>{!this._ready&&d(this._primitive)&&this._primitive.ready&&(this._ready=!0,this.releaseGeometryInstances&&(this.geometryInstances=void 0))})};cl.prototype.getBoundingSphere=function(e){let t=this._boundingSpheresKeys.indexOf(e);if(t!==-1)return this._boundingSpheres[t]};cl.prototype.getGeometryInstanceAttributes=function(e){return this._primitive.getGeometryInstanceAttributes(e)};cl.prototype.isDestroyed=function(){return!1};cl.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),ue(this)};cl._supportsMaterials=function(e){return e.depthTexture};cl.supportsMaterials=function(e){return cl._supportsMaterials(e.frameState.context)};var Vc=cl;var ODt=T(S(),1);function xS(){fe.throwInstantiationError()}Object.defineProperties(xS.prototype,{isConstant:{get:fe.throwInstantiationError},definitionChanged:{get:fe.throwInstantiationError}});xS.prototype.getType=fe.throwInstantiationError;xS.prototype.getValue=fe.throwInstantiationError;xS.prototype.equals=fe.throwInstantiationError;xS.getValue=function(e,t,n){let i;return d(t)&&(i=t.getType(e),d(i))?((!d(n)||n.type!==i)&&(n=ki.fromType(i)),t.getValue(e,n.uniforms),n):((!d(n)||n.type!==ki.ColorType)&&(n=ki.fromType(ki.ColorType)),Y.clone(Y.WHITE,n.uniforms.color),n)};var Yo=xS;function Hg(e,t,n){this._primitives=t,this._orderedGroundPrimitives=n,this._primitive=void 0,this._outlinePrimitive=void 0,this._geometryUpdater=e,this._options=e._options,this._entity=e._entity,this._material=void 0}Hg.prototype._isHidden=function(e,t,n){return!e.isShowing||!e.isAvailable(n)||!H.getValueOrDefault(t.show,n,!0)};Hg.prototype._setOptions=fe.throwInstantiationError;Hg.prototype.update=function(e){let t=this._geometryUpdater,n=t._onTerrain,i=this._primitives,o=this._orderedGroundPrimitives;n?o.remove(this._primitive):(i.removeAndDestroy(this._primitive),i.removeAndDestroy(this._outlinePrimitive),this._outlinePrimitive=void 0),this._primitive=void 0;let r=this._entity,s=r[this._geometryUpdater._geometryPropertyName];if(this._setOptions(r,s,e),this._isHidden(r,s,e))return;let a=this._geometryUpdater.shadowsProperty.getValue(e),c=this._options;if(!d(s.fill)||s.fill.getValue(e)){let l=t.fillMaterialProperty,u=l instanceof At,m,p=t._getIsClosed(c);if(u)m=new rn({closed:p,flat:n&&!t._supportsMaterialsforEntitiesOnTerrain});else{let y=Yo.getValue(e,l,this._material);this._material=y,m=new so({material:y,translucent:y.isTranslucent(),closed:p})}if(n)c.vertexFormat=rn.VERTEX_FORMAT,this._primitive=o.add(new Vc({geometryInstances:this._geometryUpdater.createFillGeometryInstance(e),appearance:m,asynchronous:!1,shadows:a,classificationType:this._geometryUpdater.classificationTypeProperty.getValue(e)}),H.getValueOrUndefined(this._geometryUpdater.zIndex,e));else{c.vertexFormat=m.vertexFormat;let y=this._geometryUpdater.createFillGeometryInstance(e);u&&(m.translucent=y.attributes.color.value[3]!==255),this._primitive=i.add(new Zn({geometryInstances:y,appearance:m,asynchronous:!1,shadows:a}))}}if(!n&&d(s.outline)&&s.outline.getValue(e)){let l=this._geometryUpdater.createOutlineGeometryInstance(e),u=H.getValueOrDefault(s.outlineWidth,e,1);this._outlinePrimitive=i.add(new Zn({geometryInstances:l,appearance:new rn({flat:!0,translucent:l.attributes.color.value[3]!==255,renderState:{lineWidth:t._scene.clampLineWidth(u)}}),asynchronous:!1,shadows:a}))}};Hg.prototype.getBoundingSphere=function(e){let t=this._entity,n=this._primitive,i=this._outlinePrimitive,o;return d(n)&&n.show&&n.ready&&(o=n.getGeometryInstanceAttributes(t),d(o)&&d(o.boundingSphere))?(ce.clone(o.boundingSphere,e),lt.DONE):d(i)&&i.show&&i.ready&&(o=i.getGeometryInstanceAttributes(t),d(o)&&d(o.boundingSphere))?(ce.clone(o.boundingSphere,e),lt.DONE):d(n)&&!n.ready||d(i)&&!i.ready?lt.PENDING:lt.FAILED};Hg.prototype.isDestroyed=function(){return!1};Hg.prototype.destroy=function(){let e=this._primitives,t=this._orderedGroundPrimitives;this._geometryUpdater._onTerrain?t.remove(this._primitive):e.removeAndDestroy(this._primitive),e.removeAndDestroy(this._outlinePrimitive),ue(this)};var ni=Hg;var Gzt=T(S(),1);var lBt=T(S(),1);var B$={};function PG(e,t){d(B$[e])||(B$[e]=!0,console.warn(g(t,e)))}PG.geometryOutlines="Entity geometry outlines are unsupported on terrain. Outlines will be disabled. To enable outlines, disable geometry terrain clamping by explicitly setting height to 0.";PG.geometryZIndex="Entity geometry with zIndex are unsupported when height or extrudedHeight are defined. zIndex will be ignored";PG.geometryHeightReference="Entity corridor, ellipse, polygon or rectangle with heightReference must also have a defined height. heightReference will be ignored";PG.geometryExtrudedHeightReference="Entity corridor, ellipse, polygon or rectangle with extrudedHeightReference must also have a defined extrudedHeight. extrudedHeightReference will be ignored";var Pt=PG;var uzt=T(S(),1);var pYt=T(S(),1);var i3t=T(S(),1);var uBt=T(S(),1),tGe={NONE:0,GEODESIC:1,RHUMB:2},Jt=Object.freeze(tGe);var bBt=T(S(),1);var Y$=W.EPSILON10;function nGe(e,t,n,i){if(!d(e))return;n=g(n,!1);let o=d(i),r=e.length;if(r<2)return e;let s,a=e[0],c,l,u=0,m=-1;for(s=1;s<r;++s)c=e[s],t(a,c,Y$)?(d(l)||(l=e.slice(0,s),u=s-1,m=0),o&&i.push(s)):(d(l)&&(l.push(c),u=s,o&&(m=i.length)),a=c);return n&&t(e[0],e[r-1],Y$)&&(o&&(d(l)?i.splice(m,0,u):i.push(r-1)),d(l)?l.length-=1:l=e.slice(0,-1)),d(l)?l:e}var go=nGe;var VBt=T(S(),1);function iGe(e){let t=e._uSquared,n=e._ellipsoid.maximumRadius,i=e._ellipsoid.minimumRadius,o=(n-i)/n,r=Math.cos(e._startHeading),s=Math.sin(e._startHeading),a=(1-o)*Math.tan(e._start.latitude),c=1/Math.sqrt(1+a*a),l=c*a,u=Math.atan2(a,r),m=c*s,p=m*m,y=1-p,f=Math.sqrt(y),x=t/4,_=x*x,C=_*x,V=_*_,L=1+x-3*_/4+5*C/4-175*V/64,Z=1-x+15*_/8-35*C/8,G=1-3*x+35*_/4,X=1-5*x,P=L*u-Z*Math.sin(2*u)*x/2-G*Math.sin(4*u)*_/16-X*Math.sin(6*u)*C/48-Math.sin(8*u)*5*V/512,v=e._constants;v.a=n,v.b=i,v.f=o,v.cosineHeading=r,v.sineHeading=s,v.tanU=a,v.cosineU=c,v.sineU=l,v.sigma=u,v.sineAlpha=m,v.sineSquaredAlpha=p,v.cosineSquaredAlpha=y,v.cosineAlpha=f,v.u2Over4=x,v.u4Over16=_,v.u6Over64=C,v.u8Over256=V,v.a0=L,v.a1=Z,v.a2=G,v.a3=X,v.distanceRatio=P}function oGe(e,t){return e*t*(4+e*(4-3*t))/16}function O$(e,t,n,i,o,r,s){let a=oGe(e,n);return(1-a)*e*t*(i+a*o*(s+a*r*(2*s*s-1)))}function rGe(e,t,n,i,o,r,s){let a=(t-n)/t,c=r-i,l=Math.atan((1-a)*Math.tan(o)),u=Math.atan((1-a)*Math.tan(s)),m=Math.cos(l),p=Math.sin(l),y=Math.cos(u),f=Math.sin(u),x=m*y,_=m*f,C=p*f,V=p*y,L=c,Z=W.TWO_PI,G=Math.cos(L),X=Math.sin(L),P,v,F,M,b;do{G=Math.cos(L),X=Math.sin(L);let U=_-V*G;F=Math.sqrt(y*y*X*X+U*U),v=C+x*G,P=Math.atan2(F,v);let J;F===0?(J=0,M=1):(J=x*X/F,M=1-J*J),Z=L,b=v-2*C/M,isFinite(b)||(b=0),L=c+O$(a,J,M,P,F,v,b)}while(Math.abs(L-Z)>W.EPSILON12);let R=M*(t*t-n*n)/(n*n),E=1+R*(4096+R*(R*(320-175*R)-768))/16384,I=R*(256+R*(R*(74-47*R)-128))/1024,w=b*b,N=I*F*(b+I*(v*(2*w-1)-I*b*(4*F*F-3)*(4*w-3)/6)/4),B=n*E*(P-N),k=Math.atan2(y*X,_-V*G),O=Math.atan2(m*X,_*G-V);e._distance=B,e._startHeading=k,e._endHeading=O,e._uSquared=R}var sGe=new h,W3=new h;function K$(e,t,n,i){let o=h.normalize(i.cartographicToCartesian(t,W3),sGe),r=h.normalize(i.cartographicToCartesian(n,W3),W3);rGe(e,i.maximumRadius,i.minimumRadius,t.longitude,t.latitude,n.longitude,n.latitude),e._start=he.clone(t,e._start),e._end=he.clone(n,e._end),e._start.height=0,e._end.height=0,iGe(e)}function vG(e,t,n){let i=g(n,re.WGS84);this._ellipsoid=i,this._start=new he,this._end=new he,this._constants={},this._startHeading=void 0,this._endHeading=void 0,this._distance=void 0,this._uSquared=void 0,d(e)&&d(t)&&K$(this,e,t,i)}Object.defineProperties(vG.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},surfaceDistance:{get:function(){return this._distance}},start:{get:function(){return this._start}},end:{get:function(){return this._end}},startHeading:{get:function(){return this._startHeading}},endHeading:{get:function(){return this._endHeading}}});vG.prototype.setEndPoints=function(e,t){K$(this,e,t,this._ellipsoid)};vG.prototype.interpolateUsingFraction=function(e,t){return this.interpolateUsingSurfaceDistance(this._distance*e,t)};vG.prototype.interpolateUsingSurfaceDistance=function(e,t){let n=this._constants,i=n.distanceRatio+e/n.b,o=Math.cos(2*i),r=Math.cos(4*i),s=Math.cos(6*i),a=Math.sin(2*i),c=Math.sin(4*i),l=Math.sin(6*i),u=Math.sin(8*i),m=i*i,p=i*m,y=n.u8Over256,f=n.u2Over4,x=n.u6Over64,_=n.u4Over16,C=2*p*y*o/3+i*(1-f+7*_/4-15*x/4+579*y/64-(_-15*x/4+187*y/16)*o-(5*x/4-115*y/16)*r-29*y*s/16)+(f/2-_+71*x/32-85*y/16)*a+(5*_/16-5*x/4+383*y/96)*c-m*((x-11*y/2)*a+5*y*c/2)+(29*x/96-29*y/16)*l+539*y*u/1536,V=Math.asin(Math.sin(C)*n.cosineAlpha),L=Math.atan(n.a/n.b*Math.tan(V));C=C-n.sigma;let Z=Math.cos(2*n.sigma+C),G=Math.sin(C),X=Math.cos(C),P=n.cosineU*X,v=n.sineU*G,M=Math.atan2(G*n.sineHeading,P-v*n.cosineHeading)-O$(n.f,n.sineAlpha,n.cosineSquaredAlpha,C,G,X,Z);return d(t)?(t.longitude=this._start.longitude+M,t.latitude=L,t.height=0,t):new he(this._start.longitude+M,L,0)};var jd=vG;var WBt=T(S(),1);function v3(e,t,n){if(e===0)return t*n;let i=e*e,o=i*i,r=o*i,s=r*i,a=s*i,c=a*i,l=n,u=Math.sin(2*l),m=Math.sin(4*l),p=Math.sin(6*l),y=Math.sin(8*l),f=Math.sin(10*l),x=Math.sin(12*l);return t*((1-i/4-3*o/64-5*r/256-175*s/16384-441*a/65536-4851*c/1048576)*l-(3*i/8+3*o/32+45*r/1024+105*s/4096+2205*a/131072+6237*c/524288)*u+(15*o/256+45*r/1024+525*s/16384+1575*a/65536+155925*c/8388608)*m-(35*r/3072+175*s/12288+3675*a/262144+13475*c/1048576)*p+(315*s/131072+2205*a/524288+43659*c/8388608)*y-(693*a/1310720+6237*c/5242880)*f+1001*c/8388608*x)}function aGe(e,t,n){let i=e/n;if(t===0)return i;let o=i*i,r=o*i,s=r*i,a=t,c=a*a,l=c*c,u=l*c,m=u*c,p=m*c,y=p*c,f=Math.sin(2*i),x=Math.cos(2*i),_=Math.sin(4*i),C=Math.cos(4*i),V=Math.sin(6*i),L=Math.cos(6*i),Z=Math.sin(8*i),G=Math.cos(8*i),X=Math.sin(10*i),P=Math.cos(10*i),v=Math.sin(12*i);return i+i*c/4+7*i*l/64+15*i*u/256+579*i*m/16384+1515*i*p/65536+16837*i*y/1048576+(3*i*l/16+45*i*u/256-i*(32*o-561)*m/4096-i*(232*o-1677)*p/16384+i*(399985-90560*o+512*s)*y/5242880)*x+(21*i*u/256+483*i*m/4096-i*(224*o-1969)*p/16384-i*(33152*o-112599)*y/1048576)*C+(151*i*m/4096+4681*i*p/65536+1479*i*y/16384-453*r*y/32768)*L+(1097*i*p/65536+42783*i*y/1048576)*G+8011*i*y/1048576*P+(3*c/8+3*l/16+213*u/2048-3*o*u/64+255*m/4096-33*o*m/512+20861*p/524288-33*o*p/512+s*p/1024+28273*y/1048576-471*o*y/8192+9*s*y/4096)*f+(21*l/256+21*u/256+533*m/8192-21*o*m/512+197*p/4096-315*o*p/4096+584039*y/16777216-12517*o*y/131072+7*s*y/2048)*_+(151*u/6144+151*m/4096+5019*p/131072-453*o*p/16384+26965*y/786432-8607*o*y/131072)*V+(1097*m/131072+1097*p/65536+225797*y/10485760-1097*o*y/65536)*Z+(8011*p/2621440+8011*y/1048576)*X+293393*y/251658240*v}function _S(e,t){if(e===0)return Math.log(Math.tan(.5*(W.PI_OVER_TWO+t)));let n=e*Math.sin(t);return Math.log(Math.tan(.5*(W.PI_OVER_TWO+t)))-e/2*Math.log((1+n)/(1-n))}function cGe(e,t,n,i,o){let r=_S(e._ellipticity,n),s=_S(e._ellipticity,o);return Math.atan2(W.negativePiToPi(i-t),s-r)}function lGe(e,t,n,i,o,r,s){let a=e._heading,c=r-i,l=0;if(W.equalsEpsilon(Math.abs(a),W.PI_OVER_TWO,W.EPSILON8))if(t===n)l=t*Math.cos(o)*W.negativePiToPi(c);else{let u=Math.sin(o);l=t*Math.cos(o)*W.negativePiToPi(c)/Math.sqrt(1-e._ellipticitySquared*u*u)}else{let u=v3(e._ellipticity,t,o);l=(v3(e._ellipticity,t,s)-u)/Math.cos(a)}return Math.abs(l)}var dGe=new h,P3=new h;function H$(e,t,n,i){let o=h.normalize(i.cartographicToCartesian(t,P3),dGe),r=h.normalize(i.cartographicToCartesian(n,P3),P3),s=i.maximumRadius,a=i.minimumRadius,c=s*s,l=a*a;e._ellipticitySquared=(c-l)/c,e._ellipticity=Math.sqrt(e._ellipticitySquared),e._start=he.clone(t,e._start),e._start.height=0,e._end=he.clone(n,e._end),e._end.height=0,e._heading=cGe(e,t.longitude,t.latitude,n.longitude,n.latitude),e._distance=lGe(e,i.maximumRadius,i.minimumRadius,t.longitude,t.latitude,n.longitude,n.latitude)}function z$(e,t,n,i,o,r){if(n===0)return he.clone(e,r);let s=o*o,a,c,l;if(Math.abs(W.PI_OVER_TWO-Math.abs(t))>W.EPSILON8){let u=v3(o,i,e.latitude),m=n*Math.cos(t),p=u+m;if(c=aGe(p,o,i),Math.abs(t)<W.EPSILON10)a=W.negativePiToPi(e.longitude);else{let y=_S(o,e.latitude),f=_S(o,c);l=Math.tan(t)*(f-y),a=W.negativePiToPi(e.longitude+l)}}else{c=e.latitude;let u;if(o===0)u=i*Math.cos(e.latitude);else{let m=Math.sin(e.latitude);u=i*Math.cos(e.latitude)/Math.sqrt(1-s*m*m)}l=n/u,t>0?a=W.negativePiToPi(e.longitude+l):a=W.negativePiToPi(e.longitude-l)}return d(r)?(r.longitude=a,r.latitude=c,r.height=0,r):new he(a,c,0)}function rp(e,t,n){let i=g(n,re.WGS84);this._ellipsoid=i,this._start=new he,this._end=new he,this._heading=void 0,this._distance=void 0,this._ellipticity=void 0,this._ellipticitySquared=void 0,d(e)&&d(t)&&H$(this,e,t,i)}Object.defineProperties(rp.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},surfaceDistance:{get:function(){return this._distance}},start:{get:function(){return this._start}},end:{get:function(){return this._end}},heading:{get:function(){return this._heading}}});rp.fromStartHeadingDistance=function(e,t,n,i,o){let r=g(i,re.WGS84),s=r.maximumRadius,a=r.minimumRadius,c=s*s,l=a*a,u=Math.sqrt((c-l)/c);t=W.negativePiToPi(t);let m=z$(e,t,n,r.maximumRadius,u);return!d(o)||d(i)&&!i.equals(o.ellipsoid)?new rp(e,m,r):(o.setEndPoints(e,m),o)};rp.prototype.setEndPoints=function(e,t){H$(this,e,t,this._ellipsoid)};rp.prototype.interpolateUsingFraction=function(e,t){return this.interpolateUsingSurfaceDistance(e*this._distance,t)};rp.prototype.interpolateUsingSurfaceDistance=function(e,t){return z$(this._start,this._heading,e,this._ellipsoid.maximumRadius,this._ellipticity,t)};rp.prototype.findIntersectionWithLongitude=function(e,t){let n=this._ellipticity,i=this._heading,o=Math.abs(i),r=this._start;if(e=W.negativePiToPi(e),W.equalsEpsilon(Math.abs(e),Math.PI,W.EPSILON14)&&(e=W.sign(r.longitude)*Math.PI),d(t)||(t=new he),Math.abs(W.PI_OVER_TWO-o)<=W.EPSILON8)return t.longitude=e,t.latitude=r.latitude,t.height=0,t;if(W.equalsEpsilon(Math.abs(W.PI_OVER_TWO-o),W.PI_OVER_TWO,W.EPSILON8))return W.equalsEpsilon(e,r.longitude,W.EPSILON12)?void 0:(t.longitude=e,t.latitude=W.PI_OVER_TWO*W.sign(W.PI_OVER_TWO-i),t.height=0,t);let s=r.latitude,a=n*Math.sin(s),c=Math.tan(.5*(W.PI_OVER_TWO+s))*Math.exp((e-r.longitude)/Math.tan(i)),l=(1+a)/(1-a),u=r.latitude,m;do{m=u;let p=n*Math.sin(m),y=(1+p)/(1-p);u=2*Math.atan(c*Math.pow(y/l,n/2))-W.PI_OVER_TWO}while(!W.equalsEpsilon(u,m,W.EPSILON12));return t.longitude=e,t.latitude=u,t.height=0,t};rp.prototype.findIntersectionWithLatitude=function(e,t){let n=this._ellipticity,i=this._heading,o=this._start;if(W.equalsEpsilon(Math.abs(i),W.PI_OVER_TWO,W.EPSILON8))return;let r=_S(n,o.latitude),s=_S(n,e),a=Math.tan(i)*(s-r),c=W.negativePiToPi(o.longitude+a);return d(t)?(t.longitude=c,t.latitude=e,t.height=0,t):new he(c,e,0)};var ma=rp;var D3=[Zi,Ei],uGe=D3.length,fee=Math.cos(W.toRadians(30)),J$=Math.cos(W.toRadians(150)),pee=0,bee=1e3;function mb(e){e=g(e,g.EMPTY_OBJECT);let t=e.positions;this.width=g(e.width,1),this._positions=t,this.granularity=g(e.granularity,9999),this.loop=g(e.loop,!1),this.arcType=g(e.arcType,Jt.GEODESIC),this._ellipsoid=re.WGS84,this._projectionIndex=0,this._workerName="createGroundPolylineGeometry",this._scene3DOnly=!1}Object.defineProperties(mb.prototype,{packedLength:{get:function(){return 1+this._positions.length*3+1+1+1+re.packedLength+1+1}}});mb.setProjectionAndEllipsoid=function(e,t){let n=0;for(let i=0;i<uGe;i++)if(t instanceof D3[i]){n=i;break}e._projectionIndex=n,e._ellipsoid=t.ellipsoid};var mGe=new h,Q$=new h,j$=new h;function k3(e,t,n,i,o){let r=Lc(i,e,0,mGe),s=Lc(i,e,n,Q$),a=Lc(i,t,0,j$),c=sp(s,r,Q$),l=sp(a,r,j$);return h.cross(l,c,o),h.normalize(o,o)}var hGe=new he,fGe=new h,pGe=new h,bGe=new h;function w3(e,t,n,i,o,r,s,a,c,l,u){if(o===0)return;let m;r===Jt.GEODESIC?m=new jd(e,t,s):r===Jt.RHUMB&&(m=new ma(e,t,s));let p=m.surfaceDistance;if(p<o)return;let y=k3(e,t,i,s,bGe),f=Math.ceil(p/o),x=p/f,_=x,C=f-1,V=a.length;for(let L=0;L<C;L++){let Z=m.interpolateUsingSurfaceDistance(_,hGe),G=Lc(s,Z,n,fGe),X=Lc(s,Z,i,pGe);h.pack(y,a,V),h.pack(G,c,V),h.pack(X,l,V),u.push(Z.latitude),u.push(Z.longitude),V+=3,_+=x}}var F3=new he;function Lc(e,t,n,i){return he.clone(t,F3),F3.height=n,he.toCartesian(F3,e,i)}mb.pack=function(e,t,n){let i=g(n,0),o=e._positions,r=o.length;t[i++]=r;for(let s=0;s<r;++s){let a=o[s];h.pack(a,t,i),i+=3}return t[i++]=e.granularity,t[i++]=e.loop?1:0,t[i++]=e.arcType,re.pack(e._ellipsoid,t,i),i+=re.packedLength,t[i++]=e._projectionIndex,t[i++]=e._scene3DOnly?1:0,t};mb.unpack=function(e,t,n){let i=g(t,0),o=e[i++],r=new Array(o);for(let p=0;p<o;p++)r[p]=h.unpack(e,i),i+=3;let s=e[i++],a=e[i++]===1,c=e[i++],l=re.unpack(e,i);i+=re.packedLength;let u=e[i++],m=e[i++]===1;return d(n)||(n=new mb({positions:r})),n._positions=r,n.granularity=s,n.loop=a,n.arcType=c,n._ellipsoid=l,n._projectionIndex=u,n._scene3DOnly=m,n};function sp(e,t,n){return h.subtract(e,t,n),h.normalize(n,n),n}function q$(e,t,n,i){return i=sp(e,t,i),i=h.cross(i,n,i),i=h.normalize(i,i),i=h.cross(n,i,i),i}var yGe=new h,gGe=new h,xGe=new h,yee=new h,_Ge=0,TGe=-1;function A3(e,t,n,i,o){let r=sp(n,t,yee),s=q$(e,t,r,yGe),a=q$(i,t,r,gGe);if(W.equalsEpsilon(h.dot(s,a),TGe,W.EPSILON5))return o=h.cross(r,s,o),o=h.normalize(o,o),o;o=h.add(a,s,o),o=h.normalize(o,o);let c=h.cross(r,o,xGe);return h.dot(a,c)<_Ge&&(o=h.negate(o,o)),o}var mM=sn.fromPointNormal(h.ZERO,h.UNIT_Y),SGe=new h,CGe=new h,VGe=new h,LGe=new h,RGe=new h,lM=new h,dM=new he,$$=new he,eee=new he;mb.createGeometry=function(e){let t=!e._scene3DOnly,n=e.loop,i=e._ellipsoid,o=e.granularity,r=e.arcType,s=new D3[e._projectionIndex](i),a=pee,c=bee,l,u,m=e._positions,p=m.length;p===2&&(n=!1);let y,f,x,_,C=new ma(void 0,void 0,i),V,L,Z,G=[m[0]];for(u=0;u<p-1;u++)y=m[u],f=m[u+1],V=Si.lineSegmentPlane(y,f,mM,lM),d(V)&&!h.equalsEpsilon(V,y,W.EPSILON7)&&!h.equalsEpsilon(V,f,W.EPSILON7)&&(e.arcType===Jt.GEODESIC?G.push(h.clone(V)):e.arcType===Jt.RHUMB&&(Z=i.cartesianToCartographic(V,dM).longitude,x=i.cartesianToCartographic(y,dM),_=i.cartesianToCartographic(f,$$),C.setEndPoints(x,_),L=C.findIntersectionWithLongitude(Z,eee),V=i.cartographicToCartesian(L,lM),d(V)&&!h.equalsEpsilon(V,y,W.EPSILON7)&&!h.equalsEpsilon(V,f,W.EPSILON7)&&G.push(h.clone(V)))),G.push(f);n&&(y=m[p-1],f=m[0],V=Si.lineSegmentPlane(y,f,mM,lM),d(V)&&!h.equalsEpsilon(V,y,W.EPSILON7)&&!h.equalsEpsilon(V,f,W.EPSILON7)&&(e.arcType===Jt.GEODESIC?G.push(h.clone(V)):e.arcType===Jt.RHUMB&&(Z=i.cartesianToCartographic(V,dM).longitude,x=i.cartesianToCartographic(y,dM),_=i.cartesianToCartographic(f,$$),C.setEndPoints(x,_),L=C.findIntersectionWithLongitude(Z,eee),V=i.cartographicToCartesian(L,lM),d(V)&&!h.equalsEpsilon(V,y,W.EPSILON7)&&!h.equalsEpsilon(V,f,W.EPSILON7)&&G.push(h.clone(V)))));let X=G.length,P=new Array(X);for(u=0;u<X;u++){let z=he.fromCartesian(G[u],i);z.height=0,P[u]=z}if(P=go(P,he.equalsEpsilon),X=P.length,X<2)return;let v=[],F=[],M=[],b=[],R=SGe,E=CGe,I=VGe,w=LGe,N=RGe,B=P[0],k=P[1],O=P[X-1];for(R=Lc(i,O,a,R),w=Lc(i,k,a,w),E=Lc(i,B,a,E),I=Lc(i,B,c,I),n?N=A3(R,E,I,w,N):N=k3(B,k,c,i,N),h.pack(N,F,0),h.pack(E,M,0),h.pack(I,b,0),v.push(B.latitude),v.push(B.longitude),w3(B,k,a,c,o,r,i,F,M,b,v),u=1;u<X-1;++u){R=h.clone(E,R),E=h.clone(w,E);let z=P[u];Lc(i,z,c,I),Lc(i,P[u+1],a,w),A3(R,E,I,w,N),l=F.length,h.pack(N,F,l),h.pack(E,M,l),h.pack(I,b,l),v.push(z.latitude),v.push(z.longitude),w3(P[u],P[u+1],a,c,o,r,i,F,M,b,v)}let U=P[X-1],J=P[X-2];if(E=Lc(i,U,a,E),I=Lc(i,U,c,I),n){let z=P[0];R=Lc(i,J,a,R),w=Lc(i,z,a,w),N=A3(R,E,I,w,N)}else N=k3(J,U,c,i,N);if(l=F.length,h.pack(N,F,l),h.pack(E,M,l),h.pack(I,b,l),v.push(U.latitude),v.push(U.longitude),n){for(w3(U,B,a,c,o,r,i,F,M,b,v),l=F.length,u=0;u<3;++u)F[l+u]=F[u],M[l+u]=M[u],b[l+u]=b[u];v.push(B.latitude),v.push(B.longitude)}return qGe(n,s,M,b,F,v,t)};var ZGe=new h,GGe=new $,EGe=new Ae;function tee(e,t,n,i){let o=sp(n,t,ZGe),r=h.dot(o,e);if(r>fee||r<J$){let s=sp(i,n,yee),a=r<J$?W.PI_OVER_TWO:-W.PI_OVER_TWO,c=Ae.fromAxisAngle(s,a,EGe),l=$.fromQuaternion(c,GGe);return $.multiplyByVector(l,e,e),!0}return!1}var nee=new he,XGe=new h,iee=new h;function wG(e,t,n,i,o){let r=he.toCartesian(t,e._ellipsoid,XGe),s=h.add(r,n,iee),a=!1,c=e._ellipsoid,l=c.cartesianToCartographic(s,nee);Math.abs(t.longitude-l.longitude)>W.PI_OVER_TWO&&(a=!0,s=h.subtract(r,n,iee),l=c.cartesianToCartographic(s,nee)),l.height=0;let u=e.project(l,o);return o=h.subtract(u,i,o),o.z=0,o=h.normalize(o,o),a&&h.negate(o,o),o}var IGe=new h,oee=new h;function ree(e,t,n,i,o,r){let s=h.subtract(t,e,IGe);h.normalize(s,s);let a=n-pee,c=h.multiplyByScalar(s,a,oee);h.add(e,c,o);let l=i-bee;c=h.multiplyByScalar(s,l,oee),h.add(t,c,r)}var WGe=new h;function uM(e,t){let n=sn.getPointDistance(mM,e),i=sn.getPointDistance(mM,t),o=WGe;W.equalsEpsilon(n,0,W.EPSILON2)?(o=sp(t,e,o),h.multiplyByScalar(o,W.EPSILON2,o),h.add(e,o,e)):W.equalsEpsilon(i,0,W.EPSILON2)&&(o=sp(e,t,o),h.multiplyByScalar(o,W.EPSILON2,o),h.add(t,o,t))}function PGe(e,t){let n=Math.abs(e.longitude),i=Math.abs(t.longitude);if(W.equalsEpsilon(n,W.PI,W.EPSILON11)){let o=W.sign(t.longitude);return e.longitude=o*(n-W.EPSILON11),1}else if(W.equalsEpsilon(i,W.PI,W.EPSILON11)){let o=W.sign(e.longitude);return t.longitude=o*(i-W.EPSILON11),2}return 0}var gee=new he,xee=new he,see=new h,M3=new h,aee=new h,cee=new h,vGe=new h,lee=new h,wGe=[gee,xee],FGe=new de,AGe=new h,MGe=new h,NGe=new h,UGe=new h,kGe=new h,DGe=new h,N3=new h,U3=new h,BGe=new h,YGe=new h,OGe=new h,dee=new h,KGe=new h,HGe=new h,zGe=new On,JGe=new On,uee=new h,QGe=new h,mee=new h,jGe=[new ce,new ce],_ee=[0,2,1,0,3,2,0,7,3,0,4,7,0,5,4,0,1,5,5,7,4,5,6,7,5,2,6,5,1,2,3,6,2,3,7,6],hee=_ee.length;function qGe(e,t,n,i,o,r,s){let a,c,l=t._ellipsoid,u=n.length/3-1,m=u*8,p=m*4,y=u*36,f=m>65535?new Uint32Array(y):new Uint16Array(y),x=new Float64Array(m*3),_=new Float32Array(p),C=new Float32Array(p),V=new Float32Array(p),L=new Float32Array(p),Z=new Float32Array(p),G,X,P,v;s&&(G=new Float32Array(p),X=new Float32Array(p),P=new Float32Array(p),v=new Float32Array(m*2));let F=r.length/2,M=0,b=gee;b.height=0;let R=xee;R.height=0;let E=see,I=M3;if(s)for(c=0,a=1;a<F;a++)b.latitude=r[c],b.longitude=r[c+1],R.latitude=r[c+2],R.longitude=r[c+3],E=t.project(b,E),I=t.project(R,I),M+=h.distance(E,I),c+=2;let w=i.length/3;I=h.unpack(i,0,I);let N=0;for(c=3,a=1;a<w;a++)E=h.clone(I,E),I=h.unpack(i,c,I),N+=h.distance(E,I),c+=3;let B;c=3;let k=0,O=0,U=0,J=0,z=!1,ee=h.unpack(n,0,cee),K=h.unpack(i,0,M3),j=h.unpack(o,0,lee);if(e){let Ie=h.unpack(n,n.length-6,aee);tee(j,Ie,ee,K)&&(j=h.negate(j,j))}let q=0,be=0,Te=0;for(a=0;a<u;a++){let Ie=h.clone(ee,aee),Me=h.clone(K,see),ve=h.clone(j,vGe);z&&(ve=h.negate(ve,ve)),ee=h.unpack(n,c,cee),K=h.unpack(i,c,M3),j=h.unpack(o,c,lee),z=tee(j,Ie,ee,K),b.latitude=r[k],b.longitude=r[k+1],R.latitude=r[k+2],R.longitude=r[k+3];let ke,ct,yt,ot;if(s){let Ki=PGe(b,R);ke=t.project(b,kGe),ct=t.project(R,DGe);let ns=sp(ct,ke,uee);ns.y=Math.abs(ns.y),yt=N3,ot=U3,Ki===0||h.dot(ns,h.UNIT_Y)>fee?(yt=wG(t,b,ve,ke,N3),ot=wG(t,R,j,ct,U3)):Ki===1?(ot=wG(t,R,j,ct,U3),yt.x=0,yt.y=W.sign(b.longitude-Math.abs(R.longitude)),yt.z=0):(yt=wG(t,b,ve,ke,N3),ot.x=0,ot.y=W.sign(b.longitude-R.longitude),ot.z=0)}let ln=h.distance(Me,K),vn=On.fromCartesian(Ie,zGe),Dt=h.subtract(ee,Ie,BGe),Nt=h.normalize(Dt,dee),pe=h.subtract(Me,Ie,YGe);pe=h.normalize(pe,pe);let Ce=h.cross(Nt,pe,dee);Ce=h.normalize(Ce,Ce);let Ht=h.cross(pe,ve,KGe);Ht=h.normalize(Ht,Ht);let ut=h.subtract(K,ee,OGe);ut=h.normalize(ut,ut);let hi=h.cross(j,ut,HGe);hi=h.normalize(hi,hi);let ji=ln/N,pc=q/N,bs=0,ys,$r,we,je=0,qe=0;if(s){bs=h.distance(ke,ct),ys=On.fromCartesian(ke,JGe),$r=h.subtract(ct,ke,uee),we=h.normalize($r,QGe);let Ki=we.x;we.x=we.y,we.y=-Ki,je=bs/M,qe=be/M}for(B=0;B<8;B++){let Ki=J+B*4,ns=O+B*2,zn=Ki+3,wn=B<4?1:-1,mn=B===2||B===3||B===6||B===7?1:-1;h.pack(vn.high,_,Ki),_[zn]=Dt.x,h.pack(vn.low,C,Ki),C[zn]=Dt.y,h.pack(Ht,V,Ki),V[zn]=Dt.z,h.pack(hi,L,Ki),L[zn]=ji*wn,h.pack(Ce,Z,Ki);let _i=pc*mn;_i===0&&mn<0&&(_i=9),Z[zn]=_i,s&&(G[Ki]=ys.high.x,G[Ki+1]=ys.high.y,G[Ki+2]=ys.low.x,G[Ki+3]=ys.low.y,P[Ki]=-yt.y,P[Ki+1]=yt.x,P[Ki+2]=ot.y,P[Ki+3]=-ot.x,X[Ki]=$r.x,X[Ki+1]=$r.y,X[Ki+2]=we.x,X[Ki+3]=we.y,v[ns]=je*wn,_i=qe*mn,_i===0&&mn<0&&(_i=9),v[ns+1]=_i)}let Qe=NGe,pt=UGe,Bt=AGe,Vn=MGe,di=de.fromCartographicArray(wGe,FGe),bo=li.getMinimumMaximumHeights(di,l),es=bo.minimumTerrainHeight,ts=bo.maximumTerrainHeight;Te+=Math.abs(es),Te+=Math.abs(ts),ree(Ie,Me,es,ts,Qe,Bt),ree(ee,K,es,ts,pt,Vn);let Mo=h.multiplyByScalar(Ce,W.EPSILON5,mee);h.add(Qe,Mo,Qe),h.add(pt,Mo,pt),h.add(Bt,Mo,Bt),h.add(Vn,Mo,Vn),uM(Qe,pt),uM(Bt,Vn),h.pack(Qe,x,U),h.pack(pt,x,U+3),h.pack(Vn,x,U+6),h.pack(Bt,x,U+9),Mo=h.multiplyByScalar(Ce,-2*W.EPSILON5,mee),h.add(Qe,Mo,Qe),h.add(pt,Mo,pt),h.add(Bt,Mo,Bt),h.add(Vn,Mo,Vn),uM(Qe,pt),uM(Bt,Vn),h.pack(Qe,x,U+12),h.pack(pt,x,U+15),h.pack(Vn,x,U+18),h.pack(Bt,x,U+21),k+=2,c+=3,O+=16,U+=24,J+=32,q+=ln,be+=bs}c=0;let ae=0;for(a=0;a<u;a++){for(B=0;B<hee;B++)f[c+B]=_ee[B]+ae;ae+=8,c+=hee}let xe=jGe;ce.fromVertices(n,h.ZERO,3,xe[0]),ce.fromVertices(i,h.ZERO,3,xe[1]);let _e=ce.fromBoundingSpheres(xe);_e.radius+=Te/(u*2);let Ve={position:new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,normalize:!1,values:x}),startHiAndForwardOffsetX:ub(_),startLoAndForwardOffsetY:ub(C),startNormalAndForwardOffsetZ:ub(V),endNormalAndTextureCoordinateNormalizationX:ub(L),rightNormalAndTextureCoordinateNormalizationY:ub(Z)};return s&&(Ve.startHiLo2D=ub(G),Ve.offsetAndRight2D=ub(X),Ve.startEndNormals2D=ub(P),Ve.texcoordNormalization2D=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,normalize:!1,values:v})),new dt({attributes:Ve,indices:f,boundingSphere:_e})}function ub(e){return new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:4,normalize:!1,values:e})}mb._projectNormal=wG;var zg=mb;var r3t=T(S(),1),FG=`in vec4 v_startPlaneNormalEcAndHalfWidth;
  4409. in vec4 v_endPlaneNormalEcAndBatchId;
  4410. in vec4 v_rightPlaneEC; // Technically can compute distance for this here
  4411. in vec4 v_endEcAndStartEcX;
  4412. in vec4 v_texcoordNormalizationAndStartEcYZ;
  4413. #ifdef PER_INSTANCE_COLOR
  4414. in vec4 v_color;
  4415. #endif
  4416. void main(void)
  4417. {
  4418. float logDepthOrDepth = czm_branchFreeTernary(czm_sceneMode == czm_sceneMode2D, gl_FragCoord.z, czm_unpackDepth(texture(czm_globeDepthTexture, gl_FragCoord.xy / czm_viewport.zw)));
  4419. vec3 ecStart = vec3(v_endEcAndStartEcX.w, v_texcoordNormalizationAndStartEcYZ.zw);
  4420. // Discard for sky
  4421. if (logDepthOrDepth == 0.0) {
  4422. #ifdef DEBUG_SHOW_VOLUME
  4423. out_FragColor = vec4(1.0, 0.0, 0.0, 0.5);
  4424. return;
  4425. #else // DEBUG_SHOW_VOLUME
  4426. discard;
  4427. #endif // DEBUG_SHOW_VOLUME
  4428. }
  4429. vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth);
  4430. eyeCoordinate /= eyeCoordinate.w;
  4431. float halfMaxWidth = v_startPlaneNormalEcAndHalfWidth.w * czm_metersPerPixel(eyeCoordinate);
  4432. // Check distance of the eye coordinate against the right-facing plane
  4433. float widthwiseDistance = czm_planeDistance(v_rightPlaneEC, eyeCoordinate.xyz);
  4434. // Check eye coordinate against the mitering planes
  4435. float distanceFromStart = czm_planeDistance(v_startPlaneNormalEcAndHalfWidth.xyz, -dot(ecStart, v_startPlaneNormalEcAndHalfWidth.xyz), eyeCoordinate.xyz);
  4436. float distanceFromEnd = czm_planeDistance(v_endPlaneNormalEcAndBatchId.xyz, -dot(v_endEcAndStartEcX.xyz, v_endPlaneNormalEcAndBatchId.xyz), eyeCoordinate.xyz);
  4437. if (abs(widthwiseDistance) > halfMaxWidth || distanceFromStart < 0.0 || distanceFromEnd < 0.0) {
  4438. #ifdef DEBUG_SHOW_VOLUME
  4439. out_FragColor = vec4(1.0, 0.0, 0.0, 0.5);
  4440. return;
  4441. #else // DEBUG_SHOW_VOLUME
  4442. discard;
  4443. #endif // DEBUG_SHOW_VOLUME
  4444. }
  4445. // Check distance of the eye coordinate against start and end planes with normals in the right plane.
  4446. // For computing unskewed lengthwise texture coordinate.
  4447. // Can also be used for clipping extremely pointy miters, but in practice unnecessary because of miter breaking.
  4448. // aligned plane: cross the right plane normal with miter plane normal, then cross the result with right again to point it more "forward"
  4449. vec3 alignedPlaneNormal;
  4450. // start aligned plane
  4451. alignedPlaneNormal = cross(v_rightPlaneEC.xyz, v_startPlaneNormalEcAndHalfWidth.xyz);
  4452. alignedPlaneNormal = normalize(cross(alignedPlaneNormal, v_rightPlaneEC.xyz));
  4453. distanceFromStart = czm_planeDistance(alignedPlaneNormal, -dot(alignedPlaneNormal, ecStart), eyeCoordinate.xyz);
  4454. // end aligned plane
  4455. alignedPlaneNormal = cross(v_rightPlaneEC.xyz, v_endPlaneNormalEcAndBatchId.xyz);
  4456. alignedPlaneNormal = normalize(cross(alignedPlaneNormal, v_rightPlaneEC.xyz));
  4457. distanceFromEnd = czm_planeDistance(alignedPlaneNormal, -dot(alignedPlaneNormal, v_endEcAndStartEcX.xyz), eyeCoordinate.xyz);
  4458. #ifdef PER_INSTANCE_COLOR
  4459. out_FragColor = czm_gammaCorrect(v_color);
  4460. #else // PER_INSTANCE_COLOR
  4461. // Clamp - distance to aligned planes may be negative due to mitering,
  4462. // so fragment texture coordinate might be out-of-bounds.
  4463. float s = clamp(distanceFromStart / (distanceFromStart + distanceFromEnd), 0.0, 1.0);
  4464. s = (s * v_texcoordNormalizationAndStartEcYZ.x) + v_texcoordNormalizationAndStartEcYZ.y;
  4465. float t = (widthwiseDistance + halfMaxWidth) / (2.0 * halfMaxWidth);
  4466. czm_materialInput materialInput;
  4467. materialInput.s = s;
  4468. materialInput.st = vec2(s, t);
  4469. materialInput.str = vec3(s, t, 0.0);
  4470. czm_material material = czm_getMaterial(materialInput);
  4471. out_FragColor = vec4(material.diffuse + material.emission, material.alpha);
  4472. #endif // PER_INSTANCE_COLOR
  4473. // Premultiply alpha. Required for classification primitives on translucent globe.
  4474. out_FragColor.rgb *= out_FragColor.a;
  4475. czm_writeDepthClamp();
  4476. }
  4477. `;var a3t=T(S(),1),AG=`in vec3 v_forwardDirectionEC;
  4478. in vec3 v_texcoordNormalizationAndHalfWidth;
  4479. in float v_batchId;
  4480. #ifdef PER_INSTANCE_COLOR
  4481. in vec4 v_color;
  4482. #else
  4483. in vec2 v_alignedPlaneDistances;
  4484. in float v_texcoordT;
  4485. #endif
  4486. float rayPlaneDistanceUnsafe(vec3 origin, vec3 direction, vec3 planeNormal, float planeDistance) {
  4487. // We don't expect the ray to ever be parallel to the plane
  4488. return (-planeDistance - dot(planeNormal, origin)) / dot(planeNormal, direction);
  4489. }
  4490. void main(void)
  4491. {
  4492. vec4 eyeCoordinate = gl_FragCoord;
  4493. eyeCoordinate /= eyeCoordinate.w;
  4494. #ifdef PER_INSTANCE_COLOR
  4495. out_FragColor = czm_gammaCorrect(v_color);
  4496. #else // PER_INSTANCE_COLOR
  4497. // Use distances for planes aligned with segment to prevent skew in dashing
  4498. float distanceFromStart = rayPlaneDistanceUnsafe(eyeCoordinate.xyz, -v_forwardDirectionEC, v_forwardDirectionEC.xyz, v_alignedPlaneDistances.x);
  4499. float distanceFromEnd = rayPlaneDistanceUnsafe(eyeCoordinate.xyz, v_forwardDirectionEC, -v_forwardDirectionEC.xyz, v_alignedPlaneDistances.y);
  4500. // Clamp - distance to aligned planes may be negative due to mitering
  4501. distanceFromStart = max(0.0, distanceFromStart);
  4502. distanceFromEnd = max(0.0, distanceFromEnd);
  4503. float s = distanceFromStart / (distanceFromStart + distanceFromEnd);
  4504. s = (s * v_texcoordNormalizationAndHalfWidth.x) + v_texcoordNormalizationAndHalfWidth.y;
  4505. czm_materialInput materialInput;
  4506. materialInput.s = s;
  4507. materialInput.st = vec2(s, v_texcoordT);
  4508. materialInput.str = vec3(s, v_texcoordT, 0.0);
  4509. czm_material material = czm_getMaterial(materialInput);
  4510. out_FragColor = vec4(material.diffuse + material.emission, material.alpha);
  4511. #endif // PER_INSTANCE_COLOR
  4512. }
  4513. `;var l3t=T(S(),1),MG=`in vec3 position3DHigh;
  4514. in vec3 position3DLow;
  4515. in vec4 startHiAndForwardOffsetX;
  4516. in vec4 startLoAndForwardOffsetY;
  4517. in vec4 startNormalAndForwardOffsetZ;
  4518. in vec4 endNormalAndTextureCoordinateNormalizationX;
  4519. in vec4 rightNormalAndTextureCoordinateNormalizationY;
  4520. in vec4 startHiLo2D;
  4521. in vec4 offsetAndRight2D;
  4522. in vec4 startEndNormals2D;
  4523. in vec2 texcoordNormalization2D;
  4524. in float batchId;
  4525. out vec3 v_forwardDirectionEC;
  4526. out vec3 v_texcoordNormalizationAndHalfWidth;
  4527. out float v_batchId;
  4528. // For materials
  4529. #ifdef WIDTH_VARYING
  4530. out float v_width;
  4531. #endif
  4532. #ifdef ANGLE_VARYING
  4533. out float v_polylineAngle;
  4534. #endif
  4535. #ifdef PER_INSTANCE_COLOR
  4536. out vec4 v_color;
  4537. #else
  4538. out vec2 v_alignedPlaneDistances;
  4539. out float v_texcoordT;
  4540. #endif
  4541. // Morphing planes using SLERP or NLERP doesn't seem to work, so instead draw the material directly on the shadow volume.
  4542. // Morph views are from very far away and aren't meant to be used precisely, so this should be sufficient.
  4543. void main()
  4544. {
  4545. v_batchId = batchId;
  4546. // Start position
  4547. vec4 posRelativeToEye2D = czm_translateRelativeToEye(vec3(0.0, startHiLo2D.xy), vec3(0.0, startHiLo2D.zw));
  4548. vec4 posRelativeToEye3D = czm_translateRelativeToEye(startHiAndForwardOffsetX.xyz, startLoAndForwardOffsetY.xyz);
  4549. vec4 posRelativeToEye = czm_columbusViewMorph(posRelativeToEye2D, posRelativeToEye3D, czm_morphTime);
  4550. vec3 posEc2D = (czm_modelViewRelativeToEye * posRelativeToEye2D).xyz;
  4551. vec3 posEc3D = (czm_modelViewRelativeToEye * posRelativeToEye3D).xyz;
  4552. vec3 startEC = (czm_modelViewRelativeToEye * posRelativeToEye).xyz;
  4553. // Start plane
  4554. vec4 startPlane2D;
  4555. vec4 startPlane3D;
  4556. startPlane2D.xyz = czm_normal * vec3(0.0, startEndNormals2D.xy);
  4557. startPlane3D.xyz = czm_normal * startNormalAndForwardOffsetZ.xyz;
  4558. startPlane2D.w = -dot(startPlane2D.xyz, posEc2D);
  4559. startPlane3D.w = -dot(startPlane3D.xyz, posEc3D);
  4560. // Right plane
  4561. vec4 rightPlane2D;
  4562. vec4 rightPlane3D;
  4563. rightPlane2D.xyz = czm_normal * vec3(0.0, offsetAndRight2D.zw);
  4564. rightPlane3D.xyz = czm_normal * rightNormalAndTextureCoordinateNormalizationY.xyz;
  4565. rightPlane2D.w = -dot(rightPlane2D.xyz, posEc2D);
  4566. rightPlane3D.w = -dot(rightPlane3D.xyz, posEc3D);
  4567. // End position
  4568. posRelativeToEye2D = posRelativeToEye2D + vec4(0.0, offsetAndRight2D.xy, 0.0);
  4569. posRelativeToEye3D = posRelativeToEye3D + vec4(startHiAndForwardOffsetX.w, startLoAndForwardOffsetY.w, startNormalAndForwardOffsetZ.w, 0.0);
  4570. posRelativeToEye = czm_columbusViewMorph(posRelativeToEye2D, posRelativeToEye3D, czm_morphTime);
  4571. posEc2D = (czm_modelViewRelativeToEye * posRelativeToEye2D).xyz;
  4572. posEc3D = (czm_modelViewRelativeToEye * posRelativeToEye3D).xyz;
  4573. vec3 endEC = (czm_modelViewRelativeToEye * posRelativeToEye).xyz;
  4574. vec3 forwardEc3D = czm_normal * normalize(vec3(startHiAndForwardOffsetX.w, startLoAndForwardOffsetY.w, startNormalAndForwardOffsetZ.w));
  4575. vec3 forwardEc2D = czm_normal * normalize(vec3(0.0, offsetAndRight2D.xy));
  4576. // End plane
  4577. vec4 endPlane2D;
  4578. vec4 endPlane3D;
  4579. endPlane2D.xyz = czm_normal * vec3(0.0, startEndNormals2D.zw);
  4580. endPlane3D.xyz = czm_normal * endNormalAndTextureCoordinateNormalizationX.xyz;
  4581. endPlane2D.w = -dot(endPlane2D.xyz, posEc2D);
  4582. endPlane3D.w = -dot(endPlane3D.xyz, posEc3D);
  4583. // Forward direction
  4584. v_forwardDirectionEC = normalize(endEC - startEC);
  4585. vec2 cleanTexcoordNormalization2D;
  4586. cleanTexcoordNormalization2D.x = abs(texcoordNormalization2D.x);
  4587. cleanTexcoordNormalization2D.y = czm_branchFreeTernary(texcoordNormalization2D.y > 1.0, 0.0, abs(texcoordNormalization2D.y));
  4588. vec2 cleanTexcoordNormalization3D;
  4589. cleanTexcoordNormalization3D.x = abs(endNormalAndTextureCoordinateNormalizationX.w);
  4590. cleanTexcoordNormalization3D.y = rightNormalAndTextureCoordinateNormalizationY.w;
  4591. cleanTexcoordNormalization3D.y = czm_branchFreeTernary(cleanTexcoordNormalization3D.y > 1.0, 0.0, abs(cleanTexcoordNormalization3D.y));
  4592. v_texcoordNormalizationAndHalfWidth.xy = mix(cleanTexcoordNormalization2D, cleanTexcoordNormalization3D, czm_morphTime);
  4593. #ifdef PER_INSTANCE_COLOR
  4594. v_color = czm_batchTable_color(batchId);
  4595. #else // PER_INSTANCE_COLOR
  4596. // For computing texture coordinates
  4597. v_alignedPlaneDistances.x = -dot(v_forwardDirectionEC, startEC);
  4598. v_alignedPlaneDistances.y = -dot(-v_forwardDirectionEC, endEC);
  4599. #endif // PER_INSTANCE_COLOR
  4600. #ifdef WIDTH_VARYING
  4601. float width = czm_batchTable_width(batchId);
  4602. float halfWidth = width * 0.5;
  4603. v_width = width;
  4604. v_texcoordNormalizationAndHalfWidth.z = halfWidth;
  4605. #else
  4606. float halfWidth = 0.5 * czm_batchTable_width(batchId);
  4607. v_texcoordNormalizationAndHalfWidth.z = halfWidth;
  4608. #endif
  4609. // Compute a normal along which to "push" the position out, extending the miter depending on view distance.
  4610. // Position has already been "pushed" by unit length along miter normal, and miter normals are encoded in the planes.
  4611. // Decode the normal to use at this specific vertex, push the position back, and then push to where it needs to be.
  4612. // Since this is morphing, compute both 3D and 2D positions and then blend.
  4613. // ****** 3D ******
  4614. // Check distance to the end plane and start plane, pick the plane that is closer
  4615. vec4 positionEc3D = czm_modelViewRelativeToEye * czm_translateRelativeToEye(position3DHigh, position3DLow); // w = 1.0, see czm_computePosition
  4616. float absStartPlaneDistance = abs(czm_planeDistance(startPlane3D, positionEc3D.xyz));
  4617. float absEndPlaneDistance = abs(czm_planeDistance(endPlane3D, positionEc3D.xyz));
  4618. vec3 planeDirection = czm_branchFreeTernary(absStartPlaneDistance < absEndPlaneDistance, startPlane3D.xyz, endPlane3D.xyz);
  4619. vec3 upOrDown = normalize(cross(rightPlane3D.xyz, planeDirection)); // Points "up" for start plane, "down" at end plane.
  4620. vec3 normalEC = normalize(cross(planeDirection, upOrDown)); // In practice, the opposite seems to work too.
  4621. // Nudge the top vertex upwards to prevent flickering
  4622. vec3 geodeticSurfaceNormal = normalize(cross(normalEC, forwardEc3D));
  4623. geodeticSurfaceNormal *= float(0.0 <= rightNormalAndTextureCoordinateNormalizationY.w && rightNormalAndTextureCoordinateNormalizationY.w <= 1.0);
  4624. geodeticSurfaceNormal *= MAX_TERRAIN_HEIGHT;
  4625. positionEc3D.xyz += geodeticSurfaceNormal;
  4626. // Determine if this vertex is on the "left" or "right"
  4627. normalEC *= sign(endNormalAndTextureCoordinateNormalizationX.w);
  4628. // A "perfect" implementation would push along normals according to the angle against forward.
  4629. // In practice, just pushing the normal out by halfWidth is sufficient for morph views.
  4630. positionEc3D.xyz += halfWidth * max(0.0, czm_metersPerPixel(positionEc3D)) * normalEC; // prevent artifacts when czm_metersPerPixel is negative (behind camera)
  4631. // ****** 2D ******
  4632. // Check distance to the end plane and start plane, pick the plane that is closer
  4633. vec4 positionEc2D = czm_modelViewRelativeToEye * czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy); // w = 1.0, see czm_computePosition
  4634. absStartPlaneDistance = abs(czm_planeDistance(startPlane2D, positionEc2D.xyz));
  4635. absEndPlaneDistance = abs(czm_planeDistance(endPlane2D, positionEc2D.xyz));
  4636. planeDirection = czm_branchFreeTernary(absStartPlaneDistance < absEndPlaneDistance, startPlane2D.xyz, endPlane2D.xyz);
  4637. upOrDown = normalize(cross(rightPlane2D.xyz, planeDirection)); // Points "up" for start plane, "down" at end plane.
  4638. normalEC = normalize(cross(planeDirection, upOrDown)); // In practice, the opposite seems to work too.
  4639. // Nudge the top vertex upwards to prevent flickering
  4640. geodeticSurfaceNormal = normalize(cross(normalEC, forwardEc2D));
  4641. geodeticSurfaceNormal *= float(0.0 <= texcoordNormalization2D.y && texcoordNormalization2D.y <= 1.0);
  4642. geodeticSurfaceNormal *= MAX_TERRAIN_HEIGHT;
  4643. positionEc2D.xyz += geodeticSurfaceNormal;
  4644. // Determine if this vertex is on the "left" or "right"
  4645. normalEC *= sign(texcoordNormalization2D.x);
  4646. #ifndef PER_INSTANCE_COLOR
  4647. // Use vertex's sidedness to compute its texture coordinate.
  4648. v_texcoordT = clamp(sign(texcoordNormalization2D.x), 0.0, 1.0);
  4649. #endif
  4650. // A "perfect" implementation would push along normals according to the angle against forward.
  4651. // In practice, just pushing the normal out by halfWidth is sufficient for morph views.
  4652. positionEc2D.xyz += halfWidth * max(0.0, czm_metersPerPixel(positionEc2D)) * normalEC; // prevent artifacts when czm_metersPerPixel is negative (behind camera)
  4653. // Blend for actual position
  4654. gl_Position = czm_projection * mix(positionEc2D, positionEc3D, czm_morphTime);
  4655. #ifdef ANGLE_VARYING
  4656. // Approximate relative screen space direction of the line.
  4657. vec2 approxLineDirection = normalize(vec2(v_forwardDirectionEC.x, -v_forwardDirectionEC.y));
  4658. approxLineDirection.y = czm_branchFreeTernary(approxLineDirection.x == 0.0 && approxLineDirection.y == 0.0, -1.0, approxLineDirection.y);
  4659. v_polylineAngle = czm_fastApproximateAtan(approxLineDirection.x, approxLineDirection.y);
  4660. #endif
  4661. }
  4662. `;var u3t=T(S(),1),NG=`in vec3 position3DHigh;
  4663. in vec3 position3DLow;
  4664. // In 2D and in 3D, texture coordinate normalization component signs encodes:
  4665. // * X sign - sidedness relative to right plane
  4666. // * Y sign - is negative OR magnitude is greater than 1.0 if vertex is on bottom of volume
  4667. #ifndef COLUMBUS_VIEW_2D
  4668. in vec4 startHiAndForwardOffsetX;
  4669. in vec4 startLoAndForwardOffsetY;
  4670. in vec4 startNormalAndForwardOffsetZ;
  4671. in vec4 endNormalAndTextureCoordinateNormalizationX;
  4672. in vec4 rightNormalAndTextureCoordinateNormalizationY;
  4673. #else
  4674. in vec4 startHiLo2D;
  4675. in vec4 offsetAndRight2D;
  4676. in vec4 startEndNormals2D;
  4677. in vec2 texcoordNormalization2D;
  4678. #endif
  4679. in float batchId;
  4680. out vec4 v_startPlaneNormalEcAndHalfWidth;
  4681. out vec4 v_endPlaneNormalEcAndBatchId;
  4682. out vec4 v_rightPlaneEC;
  4683. out vec4 v_endEcAndStartEcX;
  4684. out vec4 v_texcoordNormalizationAndStartEcYZ;
  4685. // For materials
  4686. #ifdef WIDTH_VARYING
  4687. out float v_width;
  4688. #endif
  4689. #ifdef ANGLE_VARYING
  4690. out float v_polylineAngle;
  4691. #endif
  4692. #ifdef PER_INSTANCE_COLOR
  4693. out vec4 v_color;
  4694. #endif
  4695. void main()
  4696. {
  4697. #ifdef COLUMBUS_VIEW_2D
  4698. vec3 ecStart = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, startHiLo2D.xy), vec3(0.0, startHiLo2D.zw))).xyz;
  4699. vec3 forwardDirectionEC = czm_normal * vec3(0.0, offsetAndRight2D.xy);
  4700. vec3 ecEnd = forwardDirectionEC + ecStart;
  4701. forwardDirectionEC = normalize(forwardDirectionEC);
  4702. // Right plane
  4703. v_rightPlaneEC.xyz = czm_normal * vec3(0.0, offsetAndRight2D.zw);
  4704. v_rightPlaneEC.w = -dot(v_rightPlaneEC.xyz, ecStart);
  4705. // start plane
  4706. vec4 startPlaneEC;
  4707. startPlaneEC.xyz = czm_normal * vec3(0.0, startEndNormals2D.xy);
  4708. startPlaneEC.w = -dot(startPlaneEC.xyz, ecStart);
  4709. // end plane
  4710. vec4 endPlaneEC;
  4711. endPlaneEC.xyz = czm_normal * vec3(0.0, startEndNormals2D.zw);
  4712. endPlaneEC.w = -dot(endPlaneEC.xyz, ecEnd);
  4713. v_texcoordNormalizationAndStartEcYZ.x = abs(texcoordNormalization2D.x);
  4714. v_texcoordNormalizationAndStartEcYZ.y = texcoordNormalization2D.y;
  4715. #else // COLUMBUS_VIEW_2D
  4716. vec3 ecStart = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(startHiAndForwardOffsetX.xyz, startLoAndForwardOffsetY.xyz)).xyz;
  4717. vec3 offset = czm_normal * vec3(startHiAndForwardOffsetX.w, startLoAndForwardOffsetY.w, startNormalAndForwardOffsetZ.w);
  4718. vec3 ecEnd = ecStart + offset;
  4719. vec3 forwardDirectionEC = normalize(offset);
  4720. // start plane
  4721. vec4 startPlaneEC;
  4722. startPlaneEC.xyz = czm_normal * startNormalAndForwardOffsetZ.xyz;
  4723. startPlaneEC.w = -dot(startPlaneEC.xyz, ecStart);
  4724. // end plane
  4725. vec4 endPlaneEC;
  4726. endPlaneEC.xyz = czm_normal * endNormalAndTextureCoordinateNormalizationX.xyz;
  4727. endPlaneEC.w = -dot(endPlaneEC.xyz, ecEnd);
  4728. // Right plane
  4729. v_rightPlaneEC.xyz = czm_normal * rightNormalAndTextureCoordinateNormalizationY.xyz;
  4730. v_rightPlaneEC.w = -dot(v_rightPlaneEC.xyz, ecStart);
  4731. v_texcoordNormalizationAndStartEcYZ.x = abs(endNormalAndTextureCoordinateNormalizationX.w);
  4732. v_texcoordNormalizationAndStartEcYZ.y = rightNormalAndTextureCoordinateNormalizationY.w;
  4733. #endif // COLUMBUS_VIEW_2D
  4734. v_endEcAndStartEcX.xyz = ecEnd;
  4735. v_endEcAndStartEcX.w = ecStart.x;
  4736. v_texcoordNormalizationAndStartEcYZ.zw = ecStart.yz;
  4737. #ifdef PER_INSTANCE_COLOR
  4738. v_color = czm_batchTable_color(batchId);
  4739. #endif // PER_INSTANCE_COLOR
  4740. // Compute a normal along which to "push" the position out, extending the miter depending on view distance.
  4741. // Position has already been "pushed" by unit length along miter normal, and miter normals are encoded in the planes.
  4742. // Decode the normal to use at this specific vertex, push the position back, and then push to where it needs to be.
  4743. vec4 positionRelativeToEye = czm_computePosition();
  4744. // Check distance to the end plane and start plane, pick the plane that is closer
  4745. vec4 positionEC = czm_modelViewRelativeToEye * positionRelativeToEye; // w = 1.0, see czm_computePosition
  4746. float absStartPlaneDistance = abs(czm_planeDistance(startPlaneEC, positionEC.xyz));
  4747. float absEndPlaneDistance = abs(czm_planeDistance(endPlaneEC, positionEC.xyz));
  4748. vec3 planeDirection = czm_branchFreeTernary(absStartPlaneDistance < absEndPlaneDistance, startPlaneEC.xyz, endPlaneEC.xyz);
  4749. vec3 upOrDown = normalize(cross(v_rightPlaneEC.xyz, planeDirection)); // Points "up" for start plane, "down" at end plane.
  4750. vec3 normalEC = normalize(cross(planeDirection, upOrDown)); // In practice, the opposite seems to work too.
  4751. // Extrude bottom vertices downward for far view distances, like for GroundPrimitives
  4752. upOrDown = cross(forwardDirectionEC, normalEC);
  4753. upOrDown = float(czm_sceneMode == czm_sceneMode3D) * upOrDown;
  4754. upOrDown = float(v_texcoordNormalizationAndStartEcYZ.y > 1.0 || v_texcoordNormalizationAndStartEcYZ.y < 0.0) * upOrDown;
  4755. upOrDown = min(GLOBE_MINIMUM_ALTITUDE, czm_geometricToleranceOverMeter * length(positionRelativeToEye.xyz)) * upOrDown;
  4756. positionEC.xyz += upOrDown;
  4757. v_texcoordNormalizationAndStartEcYZ.y = czm_branchFreeTernary(v_texcoordNormalizationAndStartEcYZ.y > 1.0, 0.0, abs(v_texcoordNormalizationAndStartEcYZ.y));
  4758. // Determine distance along normalEC to push for a volume of appropriate width.
  4759. // Make volumes about double pixel width for a conservative fit - in practice the
  4760. // extra cost here is minimal compared to the loose volume heights.
  4761. //
  4762. // N = normalEC (guaranteed "right-facing")
  4763. // R = rightEC
  4764. // p = angle between N and R
  4765. // w = distance to push along R if R == N
  4766. // d = distance to push along N
  4767. //
  4768. // N R
  4769. // { p| } * cos(p) = dot(N, R) = w / d
  4770. // d | |w * d = w / dot(N, R)
  4771. // { | }
  4772. // o---------- polyline segment ---->
  4773. //
  4774. float width = czm_batchTable_width(batchId);
  4775. #ifdef WIDTH_VARYING
  4776. v_width = width;
  4777. #endif
  4778. v_startPlaneNormalEcAndHalfWidth.xyz = startPlaneEC.xyz;
  4779. v_startPlaneNormalEcAndHalfWidth.w = width * 0.5;
  4780. v_endPlaneNormalEcAndBatchId.xyz = endPlaneEC.xyz;
  4781. v_endPlaneNormalEcAndBatchId.w = batchId;
  4782. width = width * max(0.0, czm_metersPerPixel(positionEC)); // width = distance to push along R
  4783. width = width / dot(normalEC, v_rightPlaneEC.xyz); // width = distance to push along N
  4784. // Determine if this vertex is on the "left" or "right"
  4785. #ifdef COLUMBUS_VIEW_2D
  4786. normalEC *= sign(texcoordNormalization2D.x);
  4787. #else
  4788. normalEC *= sign(endNormalAndTextureCoordinateNormalizationX.w);
  4789. #endif
  4790. positionEC.xyz += width * normalEC;
  4791. gl_Position = czm_depthClamp(czm_projection * positionEC);
  4792. #ifdef ANGLE_VARYING
  4793. // Approximate relative screen space direction of the line.
  4794. vec2 approxLineDirection = normalize(vec2(forwardDirectionEC.x, -forwardDirectionEC.y));
  4795. approxLineDirection.y = czm_branchFreeTernary(approxLineDirection.x == 0.0 && approxLineDirection.y == 0.0, -1.0, approxLineDirection.y);
  4796. v_polylineAngle = czm_fastApproximateAtan(approxLineDirection.x, approxLineDirection.y);
  4797. #endif
  4798. }
  4799. `;var V3t=T(S(),1);var h3t=T(S(),1),UG=`in vec3 position3DHigh;
  4800. in vec3 position3DLow;
  4801. in vec3 prevPosition3DHigh;
  4802. in vec3 prevPosition3DLow;
  4803. in vec3 nextPosition3DHigh;
  4804. in vec3 nextPosition3DLow;
  4805. in vec2 expandAndWidth;
  4806. in vec4 color;
  4807. in float batchId;
  4808. out vec4 v_color;
  4809. void main()
  4810. {
  4811. float expandDir = expandAndWidth.x;
  4812. float width = abs(expandAndWidth.y) + 0.5;
  4813. bool usePrev = expandAndWidth.y < 0.0;
  4814. vec4 p = czm_computePosition();
  4815. vec4 prev = czm_computePrevPosition();
  4816. vec4 next = czm_computeNextPosition();
  4817. float angle;
  4818. vec4 positionWC = getPolylineWindowCoordinates(p, prev, next, expandDir, width, usePrev, angle);
  4819. gl_Position = czm_viewportOrthographic * positionWC;
  4820. v_color = color;
  4821. }
  4822. `;var p3t=T(S(),1),zl=`void clipLineSegmentToNearPlane(
  4823. vec3 p0,
  4824. vec3 p1,
  4825. out vec4 positionWC,
  4826. out bool clipped,
  4827. out bool culledByNearPlane,
  4828. out vec4 clippedPositionEC)
  4829. {
  4830. culledByNearPlane = false;
  4831. clipped = false;
  4832. vec3 p0ToP1 = p1 - p0;
  4833. float magnitude = length(p0ToP1);
  4834. vec3 direction = normalize(p0ToP1);
  4835. // Distance that p0 is behind the near plane. Negative means p0 is
  4836. // in front of the near plane.
  4837. float endPoint0Distance = czm_currentFrustum.x + p0.z;
  4838. // Camera looks down -Z.
  4839. // When moving a point along +Z: LESS VISIBLE
  4840. // * Points in front of the camera move closer to the camera.
  4841. // * Points behind the camrea move farther away from the camera.
  4842. // When moving a point along -Z: MORE VISIBLE
  4843. // * Points in front of the camera move farther away from the camera.
  4844. // * Points behind the camera move closer to the camera.
  4845. // Positive denominator: -Z, becoming more visible
  4846. // Negative denominator: +Z, becoming less visible
  4847. // Nearly zero: parallel to near plane
  4848. float denominator = -direction.z;
  4849. if (endPoint0Distance > 0.0 && abs(denominator) < czm_epsilon7)
  4850. {
  4851. // p0 is behind the near plane and the line to p1 is nearly parallel to
  4852. // the near plane, so cull the segment completely.
  4853. culledByNearPlane = true;
  4854. }
  4855. else if (endPoint0Distance > 0.0)
  4856. {
  4857. // p0 is behind the near plane, and the line to p1 is moving distinctly
  4858. // toward or away from it.
  4859. // t = (-plane distance - dot(plane normal, ray origin)) / dot(plane normal, ray direction)
  4860. float t = endPoint0Distance / denominator;
  4861. if (t < 0.0 || t > magnitude)
  4862. {
  4863. // Near plane intersection is not between the two points.
  4864. // We already confirmed p0 is behind the naer plane, so now
  4865. // we know the entire segment is behind it.
  4866. culledByNearPlane = true;
  4867. }
  4868. else
  4869. {
  4870. // Segment crosses the near plane, update p0 to lie exactly on it.
  4871. p0 = p0 + t * direction;
  4872. // Numerical noise might put us a bit on the wrong side of the near plane.
  4873. // Don't let that happen.
  4874. p0.z = min(p0.z, -czm_currentFrustum.x);
  4875. clipped = true;
  4876. }
  4877. }
  4878. clippedPositionEC = vec4(p0, 1.0);
  4879. positionWC = czm_eyeToWindowCoordinates(clippedPositionEC);
  4880. }
  4881. vec4 getPolylineWindowCoordinatesEC(vec4 positionEC, vec4 prevEC, vec4 nextEC, float expandDirection, float width, bool usePrevious, out float angle)
  4882. {
  4883. // expandDirection +1 is to the _left_ when looking from positionEC toward nextEC.
  4884. #ifdef POLYLINE_DASH
  4885. // Compute the window coordinates of the points.
  4886. vec4 positionWindow = czm_eyeToWindowCoordinates(positionEC);
  4887. vec4 previousWindow = czm_eyeToWindowCoordinates(prevEC);
  4888. vec4 nextWindow = czm_eyeToWindowCoordinates(nextEC);
  4889. // Determine the relative screen space direction of the line.
  4890. vec2 lineDir;
  4891. if (usePrevious) {
  4892. lineDir = normalize(positionWindow.xy - previousWindow.xy);
  4893. }
  4894. else {
  4895. lineDir = normalize(nextWindow.xy - positionWindow.xy);
  4896. }
  4897. angle = atan(lineDir.x, lineDir.y) - 1.570796327; // precomputed atan(1,0)
  4898. // Quantize the angle so it doesn't change rapidly between segments.
  4899. angle = floor(angle / czm_piOverFour + 0.5) * czm_piOverFour;
  4900. #endif
  4901. vec4 clippedPrevWC, clippedPrevEC;
  4902. bool prevSegmentClipped, prevSegmentCulled;
  4903. clipLineSegmentToNearPlane(prevEC.xyz, positionEC.xyz, clippedPrevWC, prevSegmentClipped, prevSegmentCulled, clippedPrevEC);
  4904. vec4 clippedNextWC, clippedNextEC;
  4905. bool nextSegmentClipped, nextSegmentCulled;
  4906. clipLineSegmentToNearPlane(nextEC.xyz, positionEC.xyz, clippedNextWC, nextSegmentClipped, nextSegmentCulled, clippedNextEC);
  4907. bool segmentClipped, segmentCulled;
  4908. vec4 clippedPositionWC, clippedPositionEC;
  4909. clipLineSegmentToNearPlane(positionEC.xyz, usePrevious ? prevEC.xyz : nextEC.xyz, clippedPositionWC, segmentClipped, segmentCulled, clippedPositionEC);
  4910. if (segmentCulled)
  4911. {
  4912. return vec4(0.0, 0.0, 0.0, 1.0);
  4913. }
  4914. vec2 directionToPrevWC = normalize(clippedPrevWC.xy - clippedPositionWC.xy);
  4915. vec2 directionToNextWC = normalize(clippedNextWC.xy - clippedPositionWC.xy);
  4916. // If a segment was culled, we can't use the corresponding direction
  4917. // computed above. We should never see both of these be true without
  4918. // \`segmentCulled\` above also being true.
  4919. if (prevSegmentCulled)
  4920. {
  4921. directionToPrevWC = -directionToNextWC;
  4922. }
  4923. else if (nextSegmentCulled)
  4924. {
  4925. directionToNextWC = -directionToPrevWC;
  4926. }
  4927. vec2 thisSegmentForwardWC, otherSegmentForwardWC;
  4928. if (usePrevious)
  4929. {
  4930. thisSegmentForwardWC = -directionToPrevWC;
  4931. otherSegmentForwardWC = directionToNextWC;
  4932. }
  4933. else
  4934. {
  4935. thisSegmentForwardWC = directionToNextWC;
  4936. otherSegmentForwardWC = -directionToPrevWC;
  4937. }
  4938. vec2 thisSegmentLeftWC = vec2(-thisSegmentForwardWC.y, thisSegmentForwardWC.x);
  4939. vec2 leftWC = thisSegmentLeftWC;
  4940. float expandWidth = width * 0.5;
  4941. // When lines are split at the anti-meridian, the position may be at the
  4942. // same location as the next or previous position, and we need to handle
  4943. // that to avoid producing NaNs.
  4944. if (!czm_equalsEpsilon(prevEC.xyz - positionEC.xyz, vec3(0.0), czm_epsilon1) && !czm_equalsEpsilon(nextEC.xyz - positionEC.xyz, vec3(0.0), czm_epsilon1))
  4945. {
  4946. vec2 otherSegmentLeftWC = vec2(-otherSegmentForwardWC.y, otherSegmentForwardWC.x);
  4947. vec2 leftSumWC = thisSegmentLeftWC + otherSegmentLeftWC;
  4948. float leftSumLength = length(leftSumWC);
  4949. leftWC = leftSumLength < czm_epsilon6 ? thisSegmentLeftWC : (leftSumWC / leftSumLength);
  4950. // The sine of the angle between the two vectors is given by the formula
  4951. // |a x b| = |a||b|sin(theta)
  4952. // which is
  4953. // float sinAngle = length(cross(vec3(leftWC, 0.0), vec3(-thisSegmentForwardWC, 0.0)));
  4954. // Because the z components of both vectors are zero, the x and y coordinate will be zero.
  4955. // Therefore, the sine of the angle is just the z component of the cross product.
  4956. vec2 u = -thisSegmentForwardWC;
  4957. vec2 v = leftWC;
  4958. float sinAngle = abs(u.x * v.y - u.y * v.x);
  4959. expandWidth = clamp(expandWidth / sinAngle, 0.0, width * 2.0);
  4960. }
  4961. vec2 offset = leftWC * expandDirection * expandWidth * czm_pixelRatio;
  4962. return vec4(clippedPositionWC.xy + offset, -clippedPositionWC.z, 1.0) * (czm_projection * clippedPositionEC).w;
  4963. }
  4964. vec4 getPolylineWindowCoordinates(vec4 position, vec4 previous, vec4 next, float expandDirection, float width, bool usePrevious, out float angle)
  4965. {
  4966. vec4 positionEC = czm_modelViewRelativeToEye * position;
  4967. vec4 prevEC = czm_modelViewRelativeToEye * previous;
  4968. vec4 nextEC = czm_modelViewRelativeToEye * next;
  4969. return getPolylineWindowCoordinatesEC(positionEC, prevEC, nextEC, expandDirection, width, usePrevious, angle);
  4970. }
  4971. `;var B3=`${zl}
  4972. ${UG}`,$Ge=vg;Mt.isInternetExplorer()||(B3=`#define CLIP_POLYLINE
  4973. ${B3}`);function Jg(e){e=g(e,g.EMPTY_OBJECT);let t=g(e.translucent,!0),n=!1,i=Jg.VERTEX_FORMAT;this.material=void 0,this.translucent=t,this._vertexShaderSource=g(e.vertexShaderSource,B3),this._fragmentShaderSource=g(e.fragmentShaderSource,$Ge),this._renderState=to.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._vertexFormat=i}Object.defineProperties(Jg.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},vertexFormat:{get:function(){return this._vertexFormat}}});Jg.VERTEX_FORMAT=We.POSITION_ONLY;Jg.prototype.getFragmentShaderSource=to.prototype.getFragmentShaderSource;Jg.prototype.isTranslucent=to.prototype.isTranslucent;Jg.prototype.getRenderState=to.prototype.getRenderState;var Fr=Jg;var N3t=T(S(),1);var R3t=T(S(),1),kG=`in vec3 position3DHigh;
  4974. in vec3 position3DLow;
  4975. in vec3 prevPosition3DHigh;
  4976. in vec3 prevPosition3DLow;
  4977. in vec3 nextPosition3DHigh;
  4978. in vec3 nextPosition3DLow;
  4979. in vec2 expandAndWidth;
  4980. in vec2 st;
  4981. in float batchId;
  4982. out float v_width;
  4983. out vec2 v_st;
  4984. out float v_polylineAngle;
  4985. void main()
  4986. {
  4987. float expandDir = expandAndWidth.x;
  4988. float width = abs(expandAndWidth.y) + 0.5;
  4989. bool usePrev = expandAndWidth.y < 0.0;
  4990. vec4 p = czm_computePosition();
  4991. vec4 prev = czm_computePrevPosition();
  4992. vec4 next = czm_computeNextPosition();
  4993. float angle;
  4994. vec4 positionWC = getPolylineWindowCoordinates(p, prev, next, expandDir, width, usePrev, angle);
  4995. gl_Position = czm_viewportOrthographic * positionWC;
  4996. v_width = width;
  4997. v_st.s = st.s;
  4998. v_st.t = czm_writeNonPerspective(st.t, gl_Position.w);
  4999. v_polylineAngle = angle;
  5000. }
  5001. `;var G3t=T(S(),1),Qg=`#ifdef VECTOR_TILE
  5002. uniform vec4 u_highlightColor;
  5003. #endif
  5004. in vec2 v_st;
  5005. void main()
  5006. {
  5007. czm_materialInput materialInput;
  5008. vec2 st = v_st;
  5009. st.t = czm_readNonPerspective(st.t, gl_FragCoord.w);
  5010. materialInput.s = st.s;
  5011. materialInput.st = st;
  5012. materialInput.str = vec3(st, 0.0);
  5013. czm_material material = czm_getMaterial(materialInput);
  5014. out_FragColor = vec4(material.diffuse + material.emission, material.alpha);
  5015. #ifdef VECTOR_TILE
  5016. out_FragColor *= u_highlightColor;
  5017. #endif
  5018. czm_writeLogDepth();
  5019. }
  5020. `;var Y3=`${zl}
  5021. ${kG}`,eEe=Qg;Mt.isInternetExplorer()||(Y3=`#define CLIP_POLYLINE
  5022. ${Y3}`);function jg(e){e=g(e,g.EMPTY_OBJECT);let t=g(e.translucent,!0),n=!1,i=jg.VERTEX_FORMAT;this.material=d(e.material)?e.material:ki.fromType(ki.ColorType),this.translucent=t,this._vertexShaderSource=g(e.vertexShaderSource,Y3),this._fragmentShaderSource=g(e.fragmentShaderSource,eEe),this._renderState=to.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._vertexFormat=i}Object.defineProperties(jg.prototype,{vertexShaderSource:{get:function(){let e=this._vertexShaderSource;return this.material.shaderSource.search(/in\s+float\s+v_polylineAngle;/g)!==-1&&(e=`#define POLYLINE_DASH
  5023. ${e}`),e}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},vertexFormat:{get:function(){return this._vertexFormat}}});jg.VERTEX_FORMAT=We.POSITION_AND_ST;jg.prototype.getFragmentShaderSource=to.prototype.getFragmentShaderSource;jg.prototype.isTranslucent=to.prototype.isTranslucent;jg.prototype.getRenderState=to.prototype.getRenderState;var ks=jg;function ap(e){e=g(e,g.EMPTY_OBJECT),this.geometryInstances=e.geometryInstances,this._hasPerInstanceColors=!0;let t=e.appearance;d(t)||(t=new ks),this.appearance=t,this.show=g(e.show,!0),this.classificationType=g(e.classificationType,kn.BOTH),this.debugShowBoundingVolume=g(e.debugShowBoundingVolume,!1),this._debugShowShadowVolume=g(e.debugShowShadowVolume,!1),this._primitiveOptions={geometryInstances:void 0,appearance:void 0,vertexCacheOptimize:!1,interleave:g(e.interleave,!1),releaseGeometryInstances:g(e.releaseGeometryInstances,!0),allowPicking:g(e.allowPicking,!0),asynchronous:g(e.asynchronous,!0),compressVertices:!1,_createShaderProgramFunction:void 0,_createCommandsFunction:void 0,_updateAndQueueCommandsFunction:void 0},this._zIndex=void 0,this._ready=!1,this._primitive=void 0,this._sp=void 0,this._sp2D=void 0,this._spMorph=void 0,this._renderState=Tee(!1),this._renderState3DTiles=Tee(!0),this._renderStateMorph=De.fromCache({cull:{enabled:!0,face:bi.FRONT},depthTest:{enabled:!0},blending:dn.PRE_MULTIPLIED_ALPHA_BLEND,depthMask:!1})}Object.defineProperties(ap.prototype,{interleave:{get:function(){return this._primitiveOptions.interleave}},releaseGeometryInstances:{get:function(){return this._primitiveOptions.releaseGeometryInstances}},allowPicking:{get:function(){return this._primitiveOptions.allowPicking}},asynchronous:{get:function(){return this._primitiveOptions.asynchronous}},ready:{get:function(){return this._ready}},debugShowShadowVolume:{get:function(){return this._debugShowShadowVolume}}});ap.initializeTerrainHeights=function(){return li.initialize()};function tEe(e,t,n){let i=t.context,o=e._primitive,r=o._attributeLocations,s=o._batchTable.getVertexShaderCallback()(NG);s=Zn._appendShowToShader(o,s),s=Zn._appendDistanceDisplayConditionToShader(o,s),s=Zn._modifyShaderPosition(e,s,t.scene3DOnly);let a=o._batchTable.getVertexShaderCallback()(MG);a=Zn._appendShowToShader(o,a),a=Zn._appendDistanceDisplayConditionToShader(o,a),a=Zn._modifyShaderPosition(e,a,t.scene3DOnly);let c=o._batchTable.getVertexShaderCallback()(FG),l=[`GLOBE_MINIMUM_ALTITUDE ${t.mapProjection.ellipsoid.minimumRadius.toFixed(1)}`],u="",m="";d(n.material)?(m=d(n.material)?n.material.shaderSource:"",m.search(/in\s+float\s+v_polylineAngle;/g)!==-1&&l.push("ANGLE_VARYING"),m.search(/in\s+float\s+v_width;/g)!==-1&&l.push("WIDTH_VARYING")):u="PER_INSTANCE_COLOR",l.push(u);let p=e.debugShowShadowVolume?["DEBUG_SHOW_VOLUME",u]:[u],y=new Ye({defines:l,sources:[s]}),f=new Ye({defines:p,sources:[m,c]});e._sp=Qt.replaceCache({context:i,shaderProgram:o._sp,vertexShaderSource:y,fragmentShaderSource:f,attributeLocations:r});let x=i.shaderCache.getDerivedShaderProgram(e._sp,"2dColor");if(!d(x)){let C=new Ye({defines:l.concat(["COLUMBUS_VIEW_2D"]),sources:[s]});x=i.shaderCache.createDerivedShaderProgram(e._sp,"2dColor",{context:i,shaderProgram:e._sp2D,vertexShaderSource:C,fragmentShaderSource:f,attributeLocations:r})}e._sp2D=x;let _=i.shaderCache.getDerivedShaderProgram(e._sp,"MorphColor");if(!d(_)){let C=new Ye({defines:l.concat([`MAX_TERRAIN_HEIGHT ${li._defaultMaxTerrainHeight.toFixed(1)}`]),sources:[a]});c=o._batchTable.getVertexShaderCallback()(AG);let V=new Ye({defines:p,sources:[m,c]});_=i.shaderCache.createDerivedShaderProgram(e._sp,"MorphColor",{context:i,shaderProgram:e._spMorph,vertexShaderSource:C,fragmentShaderSource:V,attributeLocations:r})}e._spMorph=_}function Tee(e){return De.fromCache({cull:{enabled:!0},blending:dn.PRE_MULTIPLIED_ALPHA_BLEND,depthMask:!1,stencilTest:{enabled:e,frontFunction:Dn.EQUAL,frontOperation:{fail:ht.KEEP,zFail:ht.KEEP,zPass:ht.KEEP},backFunction:Dn.EQUAL,backOperation:{fail:ht.KEEP,zFail:ht.KEEP,zPass:ht.KEEP},reference:Ft.CESIUM_3D_TILE_MASK,mask:Ft.CESIUM_3D_TILE_MASK}})}function nEe(e,t,n,i,o,r){let s=e._primitive,a=s._va.length;o.length=a,r.length=a;let l=t instanceof Fr?{}:n._uniforms,u=s._batchTable.getUniformMapCallback()(l);for(let m=0;m<a;m++){let p=s._va[m],y=o[m];d(y)||(y=o[m]=new nt({owner:e,primitiveType:s._primitiveType})),y.vertexArray=p,y.renderState=e._renderState,y.shaderProgram=e._sp,y.uniformMap=u,y.pass=Re.TERRAIN_CLASSIFICATION,y.pickId="czm_batchTable_pickColor(v_endPlaneNormalEcAndBatchId.w)";let f=nt.shallowClone(y,y.derivedCommands.tileset);f.renderState=e._renderState3DTiles,f.pass=Re.CESIUM_3D_TILE_CLASSIFICATION,y.derivedCommands.tileset=f;let x=nt.shallowClone(y,y.derivedCommands.color2D);x.shaderProgram=e._sp2D,y.derivedCommands.color2D=x;let _=nt.shallowClone(f,f.derivedCommands.color2D);_.shaderProgram=e._sp2D,f.derivedCommands.color2D=_;let C=nt.shallowClone(y,y.derivedCommands.colorMorph);C.renderState=e._renderStateMorph,C.shaderProgram=e._spMorph,C.pickId="czm_batchTable_pickColor(v_batchId)",y.derivedCommands.colorMorph=C}}function See(e,t,n,i,o,r,s){n.mode===ie.MORPHING?t=t.derivedCommands.colorMorph:n.mode!==ie.SCENE3D&&(t=t.derivedCommands.color2D),t.modelMatrix=i,t.boundingVolume=r,t.cull=o,t.debugShowBoundingVolume=s,n.commandList.push(t)}function iEe(e,t,n,i,o,r,s){let a=e._primitive;Zn._updateBoundingVolumes(a,t,o);let c;t.mode===ie.SCENE3D?c=a._boundingSphereWC:t.mode===ie.COLUMBUS_VIEW?c=a._boundingSphereCV:t.mode===ie.SCENE2D&&d(a._boundingSphere2D)?c=a._boundingSphere2D:d(a._boundingSphereMorph)&&(c=a._boundingSphereMorph);let l=t.mode===ie.MORPHING,u=e.classificationType,m=u!==kn.CESIUM_3D_TILE,p=u!==kn.TERRAIN&&!l,y,f=t.passes;if(f.render||f.pick&&a.allowPicking){let x=n.length;for(let _=0;_<x;++_){let C=c[_];m&&(y=n[_],See(e,y,t,o,r,C,s)),p&&(y=n[_].derivedCommands.tileset,See(e,y,t,o,r,C,s))}}}ap.prototype.update=function(e){if(!d(this._primitive)&&!d(this.geometryInstances))return;if(!li.initialized){ap.initializeTerrainHeights();return}let t,n=this,i=this._primitiveOptions;if(!d(this._primitive)){let o=Array.isArray(this.geometryInstances)?this.geometryInstances:[this.geometryInstances],r=o.length,s=new Array(r),a;for(t=0;t<r;++t)if(a=o[t].attributes,!d(a)||!d(a.color)){this._hasPerInstanceColors=!1;break}for(t=0;t<r;++t){let c=o[t];a={};let l=c.attributes;for(let u in l)l.hasOwnProperty(u)&&(a[u]=l[u]);d(a.width)||(a.width=new ka({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,value:[c.geometry.width]})),c.geometry._scene3DOnly=e.scene3DOnly,zg.setProjectionAndEllipsoid(c.geometry,e.mapProjection),s[t]=new _t({geometry:c.geometry,attributes:a,id:c.id,pickPrimitive:n})}i.geometryInstances=s,i.appearance=this.appearance,i._createShaderProgramFunction=function(c,l,u){tEe(n,l,u)},i._createCommandsFunction=function(c,l,u,m,p,y,f){nEe(n,l,u,m,y,f)},i._updateAndQueueCommandsFunction=function(c,l,u,m,p,y,f,x){iEe(n,l,u,m,p,y,f)},this._primitive=new Zn(i)}if(this.appearance instanceof Fr&&!this._hasPerInstanceColors)throw new fe("All GeometryInstances must have color attributes to use PolylineColorAppearance with GroundPolylinePrimitive.");this._primitive.appearance=this.appearance,this._primitive.show=this.show,this._primitive.debugShowBoundingVolume=this.debugShowBoundingVolume,this._primitive.update(e),e.afterRender.push(()=>{!this._ready&&d(this._primitive)&&this._primitive.ready&&(this._ready=!0,this.releaseGeometryInstances&&(this.geometryInstances=void 0))})};ap.prototype.getGeometryInstanceAttributes=function(e){return this._primitive.getGeometryInstanceAttributes(e)};ap.isSupported=function(e){return e.frameState.context.depthTexture};ap.prototype.isDestroyed=function(){return!1};ap.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),this._sp=this._sp&&this._sp.destroy(),this._sp2D=void 0,this._spMorph=void 0,ue(this)};var cm=ap;var MYt=T(S(),1);var IYt=T(S(),1);var VYt=T(S(),1);var oEe=new D(1,1),rEe=!1,sEe=Y.WHITE;function TS(e){e=g(e,g.EMPTY_OBJECT),this._definitionChanged=new ye,this._image=void 0,this._imageSubscription=void 0,this._repeat=void 0,this._repeatSubscription=void 0,this._color=void 0,this._colorSubscription=void 0,this._transparent=void 0,this._transparentSubscription=void 0,this.image=e.image,this.repeat=e.repeat,this.color=e.color,this.transparent=e.transparent}Object.defineProperties(TS.prototype,{isConstant:{get:function(){return H.isConstant(this._image)&&H.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},image:le("image"),repeat:le("repeat"),color:le("color"),transparent:le("transparent")});TS.prototype.getType=function(e){return"Image"};TS.prototype.getValue=function(e,t){return d(t)||(t={}),t.image=H.getValueOrUndefined(this._image,e),t.repeat=H.getValueOrClonedDefault(this._repeat,e,oEe,t.repeat),t.color=H.getValueOrClonedDefault(this._color,e,sEe,t.color),H.getValueOrDefault(this._transparent,e,rEe)&&(t.color.alpha=Math.min(.99,t.color.alpha)),t};TS.prototype.equals=function(e){return this===e||e instanceof TS&&H.equals(this._image,e._image)&&H.equals(this._repeat,e._repeat)&&H.equals(this._color,e._color)&&H.equals(this._transparent,e._transparent)};var hb=TS;function aEe(e){if(e instanceof Y)return new At(e);if(typeof e=="string"||e instanceof Ee||e instanceof HTMLCanvasElement||e instanceof HTMLVideoElement){let t=new hb;return t.image=e,t}}function cEe(e,t){return le(e,t,aEe)}var Ro=cEe;function DG(e){this._definitionChanged=new ye,this._show=void 0,this._showSubscription=void 0,this._dimensions=void 0,this._dimensionsSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(g(e,g.EMPTY_OBJECT))}Object.defineProperties(DG.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:le("show"),dimensions:le("dimensions"),heightReference:le("heightReference"),fill:le("fill"),material:Ro("material"),outline:le("outline"),outlineColor:le("outlineColor"),outlineWidth:le("outlineWidth"),shadows:le("shadows"),distanceDisplayCondition:le("distanceDisplayCondition")});DG.prototype.clone=function(e){return d(e)?(e.show=this.show,e.dimensions=this.dimensions,e.heightReference=this.heightReference,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new DG(this)};DG.prototype.merge=function(e){this.show=g(this.show,e.show),this.dimensions=g(this.dimensions,e.dimensions),this.heightReference=g(this.heightReference,e.heightReference),this.fill=g(this.fill,e.fill),this.material=g(this.material,e.material),this.outline=g(this.outline,e.outline),this.outlineColor=g(this.outlineColor,e.outlineColor),this.outlineWidth=g(this.outlineWidth,e.outlineWidth),this.shadows=g(this.shadows,e.shadows),this.distanceDisplayCondition=g(this.distanceDisplayCondition,e.distanceDisplayCondition)};var qg=DG;var nOt=T(S(),1);var UYt=T(S(),1),lEe={FIXED:0,INERTIAL:1},io=Object.freeze(lEe);var zYt=T(S(),1);function SS(){fe.throwInstantiationError()}Object.defineProperties(SS.prototype,{isConstant:{get:fe.throwInstantiationError},definitionChanged:{get:fe.throwInstantiationError},referenceFrame:{get:fe.throwInstantiationError}});SS.prototype.getValue=fe.throwInstantiationError;SS.prototype.getValueInReferenceFrame=fe.throwInstantiationError;SS.prototype.equals=fe.throwInstantiationError;var O3=new $;SS.convertToReferenceFrame=function(e,t,n,i,o){if(!d(t))return t;if(d(o)||(o=new h),n===i)return h.clone(t,o);let r=vt.computeIcrfToFixedMatrix(e,O3);if(d(r)||(r=vt.computeTemeToPseudoFixedMatrix(e,O3)),n===io.INERTIAL)return $.multiplyByVector(r,t,o);if(n===io.FIXED)return $.multiplyByVector($.transpose(r,O3),t,o)};var cp=SS;function $g(e,t){this._definitionChanged=new ye,this._value=h.clone(e),this._referenceFrame=g(t,io.FIXED)}Object.defineProperties($g.prototype,{isConstant:{get:function(){return!d(this._value)||this._referenceFrame===io.FIXED}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}}});$g.prototype.getValue=function(e,t){return this.getValueInReferenceFrame(e,io.FIXED,t)};$g.prototype.setValue=function(e,t){let n=!1;h.equals(this._value,e)||(n=!0,this._value=h.clone(e)),d(t)&&this._referenceFrame!==t&&(n=!0,this._referenceFrame=t),n&&this._definitionChanged.raiseEvent(this)};$g.prototype.getValueInReferenceFrame=function(e,t,n){return cp.convertToReferenceFrame(e,this._value,this._referenceFrame,t,n)};$g.prototype.equals=function(e){return this===e||e instanceof $g&&h.equals(this._value,e._value)&&this._referenceFrame===e._referenceFrame};var Rc=$g;var lOt=T(S(),1);function BG(e){this._definitionChanged=new ye,this._show=void 0,this._showSubscription=void 0,this._positions=void 0,this._positionsSubscription=void 0,this._width=void 0,this._widthSubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._extrudedHeight=void 0,this._extrudedHeightSubscription=void 0,this._extrudedHeightReference=void 0,this._extrudedHeightReferenceSubscription=void 0,this._cornerType=void 0,this._cornerTypeSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._classificationType=void 0,this._classificationTypeSubscription=void 0,this._zIndex=void 0,this._zIndexSubscription=void 0,this.merge(g(e,g.EMPTY_OBJECT))}Object.defineProperties(BG.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:le("show"),positions:le("positions"),width:le("width"),height:le("height"),heightReference:le("heightReference"),extrudedHeight:le("extrudedHeight"),extrudedHeightReference:le("extrudedHeightReference"),cornerType:le("cornerType"),granularity:le("granularity"),fill:le("fill"),material:Ro("material"),outline:le("outline"),outlineColor:le("outlineColor"),outlineWidth:le("outlineWidth"),shadows:le("shadows"),distanceDisplayCondition:le("distanceDisplayCondition"),classificationType:le("classificationType"),zIndex:le("zIndex")});BG.prototype.clone=function(e){return d(e)?(e.show=this.show,e.positions=this.positions,e.width=this.width,e.height=this.height,e.heightReference=this.heightReference,e.extrudedHeight=this.extrudedHeight,e.extrudedHeightReference=this.extrudedHeightReference,e.cornerType=this.cornerType,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e.classificationType=this.classificationType,e.zIndex=this.zIndex,e):new BG(this)};BG.prototype.merge=function(e){this.show=g(this.show,e.show),this.positions=g(this.positions,e.positions),this.width=g(this.width,e.width),this.height=g(this.height,e.height),this.heightReference=g(this.heightReference,e.heightReference),this.extrudedHeight=g(this.extrudedHeight,e.extrudedHeight),this.extrudedHeightReference=g(this.extrudedHeightReference,e.extrudedHeightReference),this.cornerType=g(this.cornerType,e.cornerType),this.granularity=g(this.granularity,e.granularity),this.fill=g(this.fill,e.fill),this.material=g(this.material,e.material),this.outline=g(this.outline,e.outline),this.outlineColor=g(this.outlineColor,e.outlineColor),this.outlineWidth=g(this.outlineWidth,e.outlineWidth),this.shadows=g(this.shadows,e.shadows),this.distanceDisplayCondition=g(this.distanceDisplayCondition,e.distanceDisplayCondition),this.classificationType=g(this.classificationType,e.classificationType),this.zIndex=g(this.zIndex,e.zIndex)};var ex=BG;var mOt=T(S(),1);function dEe(e){return e}function uEe(e,t){return le(e,t,dEe)}var ll=uEe;var xOt=T(S(),1);function YG(e){this._definitionChanged=new ye,this._show=void 0,this._showSubscription=void 0,this._length=void 0,this._lengthSubscription=void 0,this._topRadius=void 0,this._topRadiusSubscription=void 0,this._bottomRadius=void 0,this._bottomRadiusSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._numberOfVerticalLines=void 0,this._numberOfVerticalLinesSubscription=void 0,this._slices=void 0,this._slicesSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(g(e,g.EMPTY_OBJECT))}Object.defineProperties(YG.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:le("show"),length:le("length"),topRadius:le("topRadius"),bottomRadius:le("bottomRadius"),heightReference:le("heightReference"),fill:le("fill"),material:Ro("material"),outline:le("outline"),outlineColor:le("outlineColor"),outlineWidth:le("outlineWidth"),numberOfVerticalLines:le("numberOfVerticalLines"),slices:le("slices"),shadows:le("shadows"),distanceDisplayCondition:le("distanceDisplayCondition")});YG.prototype.clone=function(e){return d(e)?(e.show=this.show,e.length=this.length,e.topRadius=this.topRadius,e.bottomRadius=this.bottomRadius,e.heightReference=this.heightReference,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.numberOfVerticalLines=this.numberOfVerticalLines,e.slices=this.slices,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new YG(this)};YG.prototype.merge=function(e){this.show=g(this.show,e.show),this.length=g(this.length,e.length),this.topRadius=g(this.topRadius,e.topRadius),this.bottomRadius=g(this.bottomRadius,e.bottomRadius),this.heightReference=g(this.heightReference,e.heightReference),this.fill=g(this.fill,e.fill),this.material=g(this.material,e.material),this.outline=g(this.outline,e.outline),this.outlineColor=g(this.outlineColor,e.outlineColor),this.outlineWidth=g(this.outlineWidth,e.outlineWidth),this.numberOfVerticalLines=g(this.numberOfVerticalLines,e.numberOfVerticalLines),this.slices=g(this.slices,e.slices),this.shadows=g(this.shadows,e.shadows),this.distanceDisplayCondition=g(this.distanceDisplayCondition,e.distanceDisplayCondition)};var tx=YG;var ROt=T(S(),1);function OG(e){this._definitionChanged=new ye,this._show=void 0,this._showSubscription=void 0,this._semiMajorAxis=void 0,this._semiMajorAxisSubscription=void 0,this._semiMinorAxis=void 0,this._semiMinorAxisSubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._extrudedHeight=void 0,this._extrudedHeightSubscription=void 0,this._extrudedHeightReference=void 0,this._extrudedHeightReferenceSubscription=void 0,this._rotation=void 0,this._rotationSubscription=void 0,this._stRotation=void 0,this._stRotationSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._numberOfVerticalLines=void 0,this._numberOfVerticalLinesSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._classificationType=void 0,this._classificationTypeSubscription=void 0,this._zIndex=void 0,this._zIndexSubscription=void 0,this.merge(g(e,g.EMPTY_OBJECT))}Object.defineProperties(OG.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:le("show"),semiMajorAxis:le("semiMajorAxis"),semiMinorAxis:le("semiMinorAxis"),height:le("height"),heightReference:le("heightReference"),extrudedHeight:le("extrudedHeight"),extrudedHeightReference:le("extrudedHeightReference"),rotation:le("rotation"),stRotation:le("stRotation"),granularity:le("granularity"),fill:le("fill"),material:Ro("material"),outline:le("outline"),outlineColor:le("outlineColor"),outlineWidth:le("outlineWidth"),numberOfVerticalLines:le("numberOfVerticalLines"),shadows:le("shadows"),distanceDisplayCondition:le("distanceDisplayCondition"),classificationType:le("classificationType"),zIndex:le("zIndex")});OG.prototype.clone=function(e){return d(e)?(e.show=this.show,e.semiMajorAxis=this.semiMajorAxis,e.semiMinorAxis=this.semiMinorAxis,e.height=this.height,e.heightReference=this.heightReference,e.extrudedHeight=this.extrudedHeight,e.extrudedHeightReference=this.extrudedHeightReference,e.rotation=this.rotation,e.stRotation=this.stRotation,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.numberOfVerticalLines=this.numberOfVerticalLines,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e.classificationType=this.classificationType,e.zIndex=this.zIndex,e):new OG(this)};OG.prototype.merge=function(e){this.show=g(this.show,e.show),this.semiMajorAxis=g(this.semiMajorAxis,e.semiMajorAxis),this.semiMinorAxis=g(this.semiMinorAxis,e.semiMinorAxis),this.height=g(this.height,e.height),this.heightReference=g(this.heightReference,e.heightReference),this.extrudedHeight=g(this.extrudedHeight,e.extrudedHeight),this.extrudedHeightReference=g(this.extrudedHeightReference,e.extrudedHeightReference),this.rotation=g(this.rotation,e.rotation),this.stRotation=g(this.stRotation,e.stRotation),this.granularity=g(this.granularity,e.granularity),this.fill=g(this.fill,e.fill),this.material=g(this.material,e.material),this.outline=g(this.outline,e.outline),this.outlineColor=g(this.outlineColor,e.outlineColor),this.outlineWidth=g(this.outlineWidth,e.outlineWidth),this.numberOfVerticalLines=g(this.numberOfVerticalLines,e.numberOfVerticalLines),this.shadows=g(this.shadows,e.shadows),this.distanceDisplayCondition=g(this.distanceDisplayCondition,e.distanceDisplayCondition),this.classificationType=g(this.classificationType,e.classificationType),this.zIndex=g(this.zIndex,e.zIndex)};var nx=OG;var POt=T(S(),1);function KG(e){this._definitionChanged=new ye,this._show=void 0,this._showSubscription=void 0,this._radii=void 0,this._radiiSubscription=void 0,this._innerRadii=void 0,this._innerRadiiSubscription=void 0,this._minimumClock=void 0,this._minimumClockSubscription=void 0,this._maximumClock=void 0,this._maximumClockSubscription=void 0,this._minimumCone=void 0,this._minimumConeSubscription=void 0,this._maximumCone=void 0,this._maximumConeSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._stackPartitions=void 0,this._stackPartitionsSubscription=void 0,this._slicePartitions=void 0,this._slicePartitionsSubscription=void 0,this._subdivisions=void 0,this._subdivisionsSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(g(e,g.EMPTY_OBJECT))}Object.defineProperties(KG.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:le("show"),radii:le("radii"),innerRadii:le("innerRadii"),minimumClock:le("minimumClock"),maximumClock:le("maximumClock"),minimumCone:le("minimumCone"),maximumCone:le("maximumCone"),heightReference:le("heightReference"),fill:le("fill"),material:Ro("material"),outline:le("outline"),outlineColor:le("outlineColor"),outlineWidth:le("outlineWidth"),stackPartitions:le("stackPartitions"),slicePartitions:le("slicePartitions"),subdivisions:le("subdivisions"),shadows:le("shadows"),distanceDisplayCondition:le("distanceDisplayCondition")});KG.prototype.clone=function(e){return d(e)?(e.show=this.show,e.radii=this.radii,e.innerRadii=this.innerRadii,e.minimumClock=this.minimumClock,e.maximumClock=this.maximumClock,e.minimumCone=this.minimumCone,e.maximumCone=this.maximumCone,e.heightReference=this.heightReference,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.stackPartitions=this.stackPartitions,e.slicePartitions=this.slicePartitions,e.subdivisions=this.subdivisions,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new KG(this)};KG.prototype.merge=function(e){this.show=g(this.show,e.show),this.radii=g(this.radii,e.radii),this.innerRadii=g(this.innerRadii,e.innerRadii),this.minimumClock=g(this.minimumClock,e.minimumClock),this.maximumClock=g(this.maximumClock,e.maximumClock),this.minimumCone=g(this.minimumCone,e.minimumCone),this.maximumCone=g(this.maximumCone,e.maximumCone),this.heightReference=g(this.heightReference,e.heightReference),this.fill=g(this.fill,e.fill),this.material=g(this.material,e.material),this.outline=g(this.outline,e.outline),this.outlineColor=g(this.outlineColor,e.outlineColor),this.outlineWidth=g(this.outlineWidth,e.outlineWidth),this.stackPartitions=g(this.stackPartitions,e.stackPartitions),this.slicePartitions=g(this.slicePartitions,e.slicePartitions),this.subdivisions=g(this.subdivisions,e.subdivisions),this.shadows=g(this.shadows,e.shadows),this.distanceDisplayCondition=g(this.distanceDisplayCondition,e.distanceDisplayCondition)};var ix=KG;var NOt=T(S(),1);function HG(e){this._definitionChanged=new ye,this._show=void 0,this._showSubscription=void 0,this._text=void 0,this._textSubscription=void 0,this._font=void 0,this._fontSubscription=void 0,this._style=void 0,this._styleSubscription=void 0,this._scale=void 0,this._scaleSubscription=void 0,this._showBackground=void 0,this._showBackgroundSubscription=void 0,this._backgroundColor=void 0,this._backgroundColorSubscription=void 0,this._backgroundPadding=void 0,this._backgroundPaddingSubscription=void 0,this._pixelOffset=void 0,this._pixelOffsetSubscription=void 0,this._eyeOffset=void 0,this._eyeOffsetSubscription=void 0,this._horizontalOrigin=void 0,this._horizontalOriginSubscription=void 0,this._verticalOrigin=void 0,this._verticalOriginSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._fillColor=void 0,this._fillColorSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._translucencyByDistance=void 0,this._translucencyByDistanceSubscription=void 0,this._pixelOffsetScaleByDistance=void 0,this._pixelOffsetScaleByDistanceSubscription=void 0,this._scaleByDistance=void 0,this._scaleByDistanceSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._disableDepthTestDistance=void 0,this._disableDepthTestDistanceSubscription=void 0,this.merge(g(e,g.EMPTY_OBJECT))}Object.defineProperties(HG.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:le("show"),text:le("text"),font:le("font"),style:le("style"),scale:le("scale"),showBackground:le("showBackground"),backgroundColor:le("backgroundColor"),backgroundPadding:le("backgroundPadding"),pixelOffset:le("pixelOffset"),eyeOffset:le("eyeOffset"),horizontalOrigin:le("horizontalOrigin"),verticalOrigin:le("verticalOrigin"),heightReference:le("heightReference"),fillColor:le("fillColor"),outlineColor:le("outlineColor"),outlineWidth:le("outlineWidth"),translucencyByDistance:le("translucencyByDistance"),pixelOffsetScaleByDistance:le("pixelOffsetScaleByDistance"),scaleByDistance:le("scaleByDistance"),distanceDisplayCondition:le("distanceDisplayCondition"),disableDepthTestDistance:le("disableDepthTestDistance")});HG.prototype.clone=function(e){return d(e)?(e.show=this.show,e.text=this.text,e.font=this.font,e.style=this.style,e.scale=this.scale,e.showBackground=this.showBackground,e.backgroundColor=this.backgroundColor,e.backgroundPadding=this.backgroundPadding,e.pixelOffset=this.pixelOffset,e.eyeOffset=this.eyeOffset,e.horizontalOrigin=this.horizontalOrigin,e.verticalOrigin=this.verticalOrigin,e.heightReference=this.heightReference,e.fillColor=this.fillColor,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.translucencyByDistance=this.translucencyByDistance,e.pixelOffsetScaleByDistance=this.pixelOffsetScaleByDistance,e.scaleByDistance=this.scaleByDistance,e.distanceDisplayCondition=this.distanceDisplayCondition,e.disableDepthTestDistance=this.disableDepthTestDistance,e):new HG(this)};HG.prototype.merge=function(e){this.show=g(this.show,e.show),this.text=g(this.text,e.text),this.font=g(this.font,e.font),this.style=g(this.style,e.style),this.scale=g(this.scale,e.scale),this.showBackground=g(this.showBackground,e.showBackground),this.backgroundColor=g(this.backgroundColor,e.backgroundColor),this.backgroundPadding=g(this.backgroundPadding,e.backgroundPadding),this.pixelOffset=g(this.pixelOffset,e.pixelOffset),this.eyeOffset=g(this.eyeOffset,e.eyeOffset),this.horizontalOrigin=g(this.horizontalOrigin,e.horizontalOrigin),this.verticalOrigin=g(this.verticalOrigin,e.verticalOrigin),this.heightReference=g(this.heightReference,e.heightReference),this.fillColor=g(this.fillColor,e.fillColor),this.outlineColor=g(this.outlineColor,e.outlineColor),this.outlineWidth=g(this.outlineWidth,e.outlineWidth),this.translucencyByDistance=g(this.translucencyByDistance,e.translucencyByDistance),this.pixelOffsetScaleByDistance=g(this.pixelOffsetScaleByDistance,e.pixelOffsetScaleByDistance),this.scaleByDistance=g(this.scaleByDistance,e.scaleByDistance),this.distanceDisplayCondition=g(this.distanceDisplayCondition,e.distanceDisplayCondition),this.disableDepthTestDistance=g(this.disableDepthTestDistance,e.disableDepthTestDistance)};var lm=HG;var pKt=T(S(),1);var $Ot=T(S(),1);var OOt=T(S(),1);var mEe=new h(1,1,1),hEe=h.ZERO,fEe=Ae.IDENTITY;function Cee(e,t,n){this.translation=h.clone(g(e,hEe)),this.rotation=Ae.clone(g(t,fEe)),this.scale=h.clone(g(n,mEe))}Cee.prototype.equals=function(e){return this===e||d(e)&&h.equals(this.translation,e.translation)&&Ae.equals(this.rotation,e.rotation)&&h.equals(this.scale,e.scale)};var fb=Cee;var K3=new fb;function zG(e){e=g(e,g.EMPTY_OBJECT),this._definitionChanged=new ye,this._translation=void 0,this._translationSubscription=void 0,this._rotation=void 0,this._rotationSubscription=void 0,this._scale=void 0,this._scaleSubscription=void 0,this.translation=e.translation,this.rotation=e.rotation,this.scale=e.scale}Object.defineProperties(zG.prototype,{isConstant:{get:function(){return H.isConstant(this._translation)&&H.isConstant(this._rotation)&&H.isConstant(this._scale)}},definitionChanged:{get:function(){return this._definitionChanged}},translation:le("translation"),rotation:le("rotation"),scale:le("scale")});zG.prototype.getValue=function(e,t){return d(t)||(t=new fb),t.translation=H.getValueOrClonedDefault(this._translation,e,K3.translation,t.translation),t.rotation=H.getValueOrClonedDefault(this._rotation,e,K3.rotation,t.rotation),t.scale=H.getValueOrClonedDefault(this._scale,e,K3.scale,t.scale),t};zG.prototype.equals=function(e){return this===e||e instanceof zG&&H.equals(this._translation,e._translation)&&H.equals(this._rotation,e._rotation)&&H.equals(this._scale,e._scale)};var ox=zG;var aKt=T(S(),1);function lp(e,t){this._propertyNames=[],this._definitionChanged=new ye,d(e)&&this.merge(e,t)}Object.defineProperties(lp.prototype,{propertyNames:{get:function(){return this._propertyNames}},isConstant:{get:function(){let e=this._propertyNames;for(let t=0,n=e.length;t<n;t++)if(!H.isConstant(this[e[t]]))return!1;return!0}},definitionChanged:{get:function(){return this._definitionChanged}}});lp.prototype.hasProperty=function(e){return this._propertyNames.indexOf(e)!==-1};function pEe(e){return new qn(e)}lp.prototype.addProperty=function(e,t,n){this._propertyNames.push(e),Object.defineProperty(this,e,le(e,!0,g(n,pEe))),d(t)&&(this[e]=t),this._definitionChanged.raiseEvent(this)};lp.prototype.removeProperty=function(e){let n=this._propertyNames.indexOf(e);this._propertyNames.splice(n,1),delete this[e],this._definitionChanged.raiseEvent(this)};lp.prototype.getValue=function(e,t){d(t)||(t={});let n=this._propertyNames;for(let i=0,o=n.length;i<o;i++){let r=n[i];t[r]=H.getValueOrUndefined(this[r],e,t[r])}return t};lp.prototype.merge=function(e,t){let n=this._propertyNames,i=d(e._propertyNames)?e._propertyNames:Object.keys(e);for(let o=0,r=i.length;o<r;o++){let s=i[o],a=this[s],c=e[s];a===void 0&&n.indexOf(s)===-1&&this.addProperty(s,void 0,t),c!==void 0&&(a!==void 0?d(a)&&d(a.merge)&&a.merge(c):d(c)&&d(c.merge)&&d(c.clone)?this[s]=c.clone():this[s]=c)}};function bEe(e,t){let n=e._propertyNames,i=t._propertyNames,o=n.length;if(o!==i.length)return!1;for(let r=0;r<o;++r){let s=n[r];if(i.indexOf(s)===-1||!H.equals(e[s],t[s]))return!1}return!0}lp.prototype.equals=function(e){return this===e||e instanceof lp&&bEe(this,e)};var dl=lp;function Vee(e){return new ox(e)}function yEe(e){return new dl(e,Vee)}function gEe(e){return new dl(e)}function JG(e){this._definitionChanged=new ye,this._show=void 0,this._showSubscription=void 0,this._uri=void 0,this._uriSubscription=void 0,this._scale=void 0,this._scaleSubscription=void 0,this._minimumPixelSize=void 0,this._minimumPixelSizeSubscription=void 0,this._maximumScale=void 0,this._maximumScaleSubscription=void 0,this._incrementallyLoadTextures=void 0,this._incrementallyLoadTexturesSubscription=void 0,this._runAnimations=void 0,this._runAnimationsSubscription=void 0,this._clampAnimations=void 0,this._clampAnimationsSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._silhouetteColor=void 0,this._silhouetteColorSubscription=void 0,this._silhouetteSize=void 0,this._silhouetteSizeSubscription=void 0,this._color=void 0,this._colorSubscription=void 0,this._colorBlendMode=void 0,this._colorBlendModeSubscription=void 0,this._colorBlendAmount=void 0,this._colorBlendAmountSubscription=void 0,this._imageBasedLightingFactor=void 0,this._imageBasedLightingFactorSubscription=void 0,this._lightColor=void 0,this._lightColorSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._nodeTransformations=void 0,this._nodeTransformationsSubscription=void 0,this._articulations=void 0,this._articulationsSubscription=void 0,this._clippingPlanes=void 0,this._clippingPlanesSubscription=void 0,this._customShader=void 0,this._customShaderSubscription=void 0,this.merge(g(e,g.EMPTY_OBJECT))}Object.defineProperties(JG.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:le("show"),uri:le("uri"),scale:le("scale"),minimumPixelSize:le("minimumPixelSize"),maximumScale:le("maximumScale"),incrementallyLoadTextures:le("incrementallyLoadTextures"),runAnimations:le("runAnimations"),clampAnimations:le("clampAnimations"),shadows:le("shadows"),heightReference:le("heightReference"),silhouetteColor:le("silhouetteColor"),silhouetteSize:le("silhouetteSize"),color:le("color"),colorBlendMode:le("colorBlendMode"),colorBlendAmount:le("colorBlendAmount"),imageBasedLightingFactor:le("imageBasedLightingFactor"),lightColor:le("lightColor"),distanceDisplayCondition:le("distanceDisplayCondition"),nodeTransformations:le("nodeTransformations",void 0,yEe),articulations:le("articulations",void 0,gEe),clippingPlanes:le("clippingPlanes"),customShader:le("customShader")});JG.prototype.clone=function(e){return d(e)?(e.show=this.show,e.uri=this.uri,e.scale=this.scale,e.minimumPixelSize=this.minimumPixelSize,e.maximumScale=this.maximumScale,e.incrementallyLoadTextures=this.incrementallyLoadTextures,e.runAnimations=this.runAnimations,e.clampAnimations=this.clampAnimations,e.heightReference=this._heightReference,e.silhouetteColor=this.silhouetteColor,e.silhouetteSize=this.silhouetteSize,e.color=this.color,e.colorBlendMode=this.colorBlendMode,e.colorBlendAmount=this.colorBlendAmount,e.imageBasedLightingFactor=this.imageBasedLightingFactor,e.lightColor=this.lightColor,e.distanceDisplayCondition=this.distanceDisplayCondition,e.nodeTransformations=this.nodeTransformations,e.articulations=this.articulations,e.clippingPlanes=this.clippingPlanes,e.customShader=this.customShader,e):new JG(this)};JG.prototype.merge=function(e){this.show=g(this.show,e.show),this.uri=g(this.uri,e.uri),this.scale=g(this.scale,e.scale),this.minimumPixelSize=g(this.minimumPixelSize,e.minimumPixelSize),this.maximumScale=g(this.maximumScale,e.maximumScale),this.incrementallyLoadTextures=g(this.incrementallyLoadTextures,e.incrementallyLoadTextures),this.runAnimations=g(this.runAnimations,e.runAnimations),this.clampAnimations=g(this.clampAnimations,e.clampAnimations),this.shadows=g(this.shadows,e.shadows),this.heightReference=g(this.heightReference,e.heightReference),this.silhouetteColor=g(this.silhouetteColor,e.silhouetteColor),this.silhouetteSize=g(this.silhouetteSize,e.silhouetteSize),this.color=g(this.color,e.color),this.colorBlendMode=g(this.colorBlendMode,e.colorBlendMode),this.colorBlendAmount=g(this.colorBlendAmount,e.colorBlendAmount),this.imageBasedLightingFactor=g(this.imageBasedLightingFactor,e.imageBasedLightingFactor),this.lightColor=g(this.lightColor,e.lightColor),this.distanceDisplayCondition=g(this.distanceDisplayCondition,e.distanceDisplayCondition),this.clippingPlanes=g(this.clippingPlanes,e.clippingPlanes),this.customShader=g(this.customShader,e.customShader);let t=e.nodeTransformations;if(d(t)){let i=this.nodeTransformations;d(i)?i.merge(t):this.nodeTransformations=new dl(t,Vee)}let n=e.articulations;if(d(n)){let i=this.articulations;d(i)?i.merge(n):this.articulations=new dl(n)}};var dp=JG;var TKt=T(S(),1);function QG(e){this._definitionChanged=new ye,this._show=void 0,this._showSubscription=void 0,this._uri=void 0,this._uriSubscription=void 0,this._maximumScreenSpaceError=void 0,this._maximumScreenSpaceErrorSubscription=void 0,this.merge(g(e,g.EMPTY_OBJECT))}Object.defineProperties(QG.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:le("show"),uri:le("uri"),maximumScreenSpaceError:le("maximumScreenSpaceError")});QG.prototype.clone=function(e){return d(e)?(e.show=this.show,e.uri=this.uri,e.maximumScreenSpaceError=this.maximumScreenSpaceError,e):new QG(this)};QG.prototype.merge=function(e){this.show=g(this.show,e.show),this.uri=g(this.uri,e.uri),this.maximumScreenSpaceError=g(this.maximumScreenSpaceError,e.maximumScreenSpaceError)};var rx=QG;var GKt=T(S(),1);function jG(e){this._definitionChanged=new ye,this._show=void 0,this._showSubscription=void 0,this._leadTime=void 0,this._leadTimeSubscription=void 0,this._trailTime=void 0,this._trailTimeSubscription=void 0,this._width=void 0,this._widthSubscription=void 0,this._resolution=void 0,this._resolutionSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(g(e,g.EMPTY_OBJECT))}Object.defineProperties(jG.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:le("show"),leadTime:le("leadTime"),trailTime:le("trailTime"),width:le("width"),resolution:le("resolution"),material:Ro("material"),distanceDisplayCondition:le("distanceDisplayCondition")});jG.prototype.clone=function(e){return d(e)?(e.show=this.show,e.leadTime=this.leadTime,e.trailTime=this.trailTime,e.width=this.width,e.resolution=this.resolution,e.material=this.material,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new jG(this)};jG.prototype.merge=function(e){this.show=g(this.show,e.show),this.leadTime=g(this.leadTime,e.leadTime),this.trailTime=g(this.trailTime,e.trailTime),this.width=g(this.width,e.width),this.resolution=g(this.resolution,e.resolution),this.material=g(this.material,e.material),this.distanceDisplayCondition=g(this.distanceDisplayCondition,e.distanceDisplayCondition)};var up=jG;var wKt=T(S(),1);function qG(e){this._definitionChanged=new ye,this._show=void 0,this._showSubscription=void 0,this._plane=void 0,this._planeSubscription=void 0,this._dimensions=void 0,this._dimensionsSubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(g(e,g.EMPTY_OBJECT))}Object.defineProperties(qG.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:le("show"),plane:le("plane"),dimensions:le("dimensions"),fill:le("fill"),material:Ro("material"),outline:le("outline"),outlineColor:le("outlineColor"),outlineWidth:le("outlineWidth"),shadows:le("shadows"),distanceDisplayCondition:le("distanceDisplayCondition")});qG.prototype.clone=function(e){return d(e)?(e.show=this.show,e.plane=this.plane,e.dimensions=this.dimensions,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new qG(this)};qG.prototype.merge=function(e){this.show=g(this.show,e.show),this.plane=g(this.plane,e.plane),this.dimensions=g(this.dimensions,e.dimensions),this.fill=g(this.fill,e.fill),this.material=g(this.material,e.material),this.outline=g(this.outline,e.outline),this.outlineColor=g(this.outlineColor,e.outlineColor),this.outlineWidth=g(this.outlineWidth,e.outlineWidth),this.shadows=g(this.shadows,e.shadows),this.distanceDisplayCondition=g(this.distanceDisplayCondition,e.distanceDisplayCondition)};var $G=qG;var kKt=T(S(),1);function eE(e){this._definitionChanged=new ye,this._show=void 0,this._showSubscription=void 0,this._pixelSize=void 0,this._pixelSizeSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._color=void 0,this._colorSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._scaleByDistance=void 0,this._scaleByDistanceSubscription=void 0,this._translucencyByDistance=void 0,this._translucencyByDistanceSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._disableDepthTestDistance=void 0,this._disableDepthTestDistanceSubscription=void 0,this.merge(g(e,g.EMPTY_OBJECT))}Object.defineProperties(eE.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:le("show"),pixelSize:le("pixelSize"),heightReference:le("heightReference"),color:le("color"),outlineColor:le("outlineColor"),outlineWidth:le("outlineWidth"),scaleByDistance:le("scaleByDistance"),translucencyByDistance:le("translucencyByDistance"),distanceDisplayCondition:le("distanceDisplayCondition"),disableDepthTestDistance:le("disableDepthTestDistance")});eE.prototype.clone=function(e){return d(e)?(e.show=this.show,e.pixelSize=this.pixelSize,e.heightReference=this.heightReference,e.color=this.color,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.scaleByDistance=this.scaleByDistance,e.translucencyByDistance=this._translucencyByDistance,e.distanceDisplayCondition=this.distanceDisplayCondition,e.disableDepthTestDistance=this.disableDepthTestDistance,e):new eE(this)};eE.prototype.merge=function(e){this.show=g(this.show,e.show),this.pixelSize=g(this.pixelSize,e.pixelSize),this.heightReference=g(this.heightReference,e.heightReference),this.color=g(this.color,e.color),this.outlineColor=g(this.outlineColor,e.outlineColor),this.outlineWidth=g(this.outlineWidth,e.outlineWidth),this.scaleByDistance=g(this.scaleByDistance,e.scaleByDistance),this.translucencyByDistance=g(this._translucencyByDistance,e.translucencyByDistance),this.distanceDisplayCondition=g(this.distanceDisplayCondition,e.distanceDisplayCondition),this.disableDepthTestDistance=g(this.disableDepthTestDistance,e.disableDepthTestDistance)};var sx=eE;var $Kt=T(S(),1);var YKt=T(S(),1);function xEe(e,t){this.positions=d(e)?e:[],this.holes=d(t)?t:[]}var ha=xEe;function _Ee(e){return Array.isArray(e)&&(e=new ha(e)),new qn(e)}function tE(e){this._definitionChanged=new ye,this._show=void 0,this._showSubscription=void 0,this._hierarchy=void 0,this._hierarchySubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._extrudedHeight=void 0,this._extrudedHeightSubscription=void 0,this._extrudedHeightReference=void 0,this._extrudedHeightReferenceSubscription=void 0,this._stRotation=void 0,this._stRotationSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._perPositionHeight=void 0,this._perPositionHeightSubscription=void 0,this._closeTop=void 0,this._closeTopSubscription=void 0,this._closeBottom=void 0,this._closeBottomSubscription=void 0,this._arcType=void 0,this._arcTypeSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._classificationType=void 0,this._classificationTypeSubscription=void 0,this._zIndex=void 0,this._zIndexSubscription=void 0,this._textureCoordinates=void 0,this._textureCoordinatesSubscription=void 0,this.merge(g(e,g.EMPTY_OBJECT))}Object.defineProperties(tE.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:le("show"),hierarchy:le("hierarchy",void 0,_Ee),height:le("height"),heightReference:le("heightReference"),extrudedHeight:le("extrudedHeight"),extrudedHeightReference:le("extrudedHeightReference"),stRotation:le("stRotation"),granularity:le("granularity"),fill:le("fill"),material:Ro("material"),outline:le("outline"),outlineColor:le("outlineColor"),outlineWidth:le("outlineWidth"),perPositionHeight:le("perPositionHeight"),closeTop:le("closeTop"),closeBottom:le("closeBottom"),arcType:le("arcType"),shadows:le("shadows"),distanceDisplayCondition:le("distanceDisplayCondition"),classificationType:le("classificationType"),zIndex:le("zIndex"),textureCoordinates:le("textureCoordinates")});tE.prototype.clone=function(e){return d(e)?(e.show=this.show,e.hierarchy=this.hierarchy,e.height=this.height,e.heightReference=this.heightReference,e.extrudedHeight=this.extrudedHeight,e.extrudedHeightReference=this.extrudedHeightReference,e.stRotation=this.stRotation,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.perPositionHeight=this.perPositionHeight,e.closeTop=this.closeTop,e.closeBottom=this.closeBottom,e.arcType=this.arcType,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e.classificationType=this.classificationType,e.zIndex=this.zIndex,e.textureCoordinates=this.textureCoordinates,e):new tE(this)};tE.prototype.merge=function(e){this.show=g(this.show,e.show),this.hierarchy=g(this.hierarchy,e.hierarchy),this.height=g(this.height,e.height),this.heightReference=g(this.heightReference,e.heightReference),this.extrudedHeight=g(this.extrudedHeight,e.extrudedHeight),this.extrudedHeightReference=g(this.extrudedHeightReference,e.extrudedHeightReference),this.stRotation=g(this.stRotation,e.stRotation),this.granularity=g(this.granularity,e.granularity),this.fill=g(this.fill,e.fill),this.material=g(this.material,e.material),this.outline=g(this.outline,e.outline),this.outlineColor=g(this.outlineColor,e.outlineColor),this.outlineWidth=g(this.outlineWidth,e.outlineWidth),this.perPositionHeight=g(this.perPositionHeight,e.perPositionHeight),this.closeTop=g(this.closeTop,e.closeTop),this.closeBottom=g(this.closeBottom,e.closeBottom),this.arcType=g(this.arcType,e.arcType),this.shadows=g(this.shadows,e.shadows),this.distanceDisplayCondition=g(this.distanceDisplayCondition,e.distanceDisplayCondition),this.classificationType=g(this.classificationType,e.classificationType),this.zIndex=g(this.zIndex,e.zIndex),this.textureCoordinates=g(this.textureCoordinates,e.textureCoordinates)};var dm=tE;var sHt=T(S(),1);function nE(e){this._definitionChanged=new ye,this._show=void 0,this._showSubscription=void 0,this._positions=void 0,this._positionsSubscription=void 0,this._width=void 0,this._widthSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._depthFailMaterial=void 0,this._depthFailMaterialSubscription=void 0,this._arcType=void 0,this._arcTypeSubscription=void 0,this._clampToGround=void 0,this._clampToGroundSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._classificationType=void 0,this._classificationTypeSubscription=void 0,this._zIndex=void 0,this._zIndexSubscription=void 0,this.merge(g(e,g.EMPTY_OBJECT))}Object.defineProperties(nE.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:le("show"),positions:le("positions"),width:le("width"),granularity:le("granularity"),material:Ro("material"),depthFailMaterial:Ro("depthFailMaterial"),arcType:le("arcType"),clampToGround:le("clampToGround"),shadows:le("shadows"),distanceDisplayCondition:le("distanceDisplayCondition"),classificationType:le("classificationType"),zIndex:le("zIndex")});nE.prototype.clone=function(e){return d(e)?(e.show=this.show,e.positions=this.positions,e.width=this.width,e.granularity=this.granularity,e.material=this.material,e.depthFailMaterial=this.depthFailMaterial,e.arcType=this.arcType,e.clampToGround=this.clampToGround,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e.classificationType=this.classificationType,e.zIndex=this.zIndex,e):new nE(this)};nE.prototype.merge=function(e){this.show=g(this.show,e.show),this.positions=g(this.positions,e.positions),this.width=g(this.width,e.width),this.granularity=g(this.granularity,e.granularity),this.material=g(this.material,e.material),this.depthFailMaterial=g(this.depthFailMaterial,e.depthFailMaterial),this.arcType=g(this.arcType,e.arcType),this.clampToGround=g(this.clampToGround,e.clampToGround),this.shadows=g(this.shadows,e.shadows),this.distanceDisplayCondition=g(this.distanceDisplayCondition,e.distanceDisplayCondition),this.classificationType=g(this.classificationType,e.classificationType),this.zIndex=g(this.zIndex,e.zIndex)};var Da=nE;var hHt=T(S(),1);function iE(e){this._definitionChanged=new ye,this._show=void 0,this._showSubscription=void 0,this._positions=void 0,this._positionsSubscription=void 0,this._shape=void 0,this._shapeSubscription=void 0,this._cornerType=void 0,this._cornerTypeSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubsription=void 0,this.merge(g(e,g.EMPTY_OBJECT))}Object.defineProperties(iE.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:le("show"),positions:le("positions"),shape:le("shape"),cornerType:le("cornerType"),granularity:le("granularity"),fill:le("fill"),material:Ro("material"),outline:le("outline"),outlineColor:le("outlineColor"),outlineWidth:le("outlineWidth"),shadows:le("shadows"),distanceDisplayCondition:le("distanceDisplayCondition")});iE.prototype.clone=function(e){return d(e)?(e.show=this.show,e.positions=this.positions,e.shape=this.shape,e.cornerType=this.cornerType,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new iE(this)};iE.prototype.merge=function(e){this.show=g(this.show,e.show),this.positions=g(this.positions,e.positions),this.shape=g(this.shape,e.shape),this.cornerType=g(this.cornerType,e.cornerType),this.granularity=g(this.granularity,e.granularity),this.fill=g(this.fill,e.fill),this.material=g(this.material,e.material),this.outline=g(this.outline,e.outline),this.outlineColor=g(this.outlineColor,e.outlineColor),this.outlineWidth=g(this.outlineWidth,e.outlineWidth),this.shadows=g(this.shadows,e.shadows),this.distanceDisplayCondition=g(this.distanceDisplayCondition,e.distanceDisplayCondition)};var ax=iE;var _Ht=T(S(),1);function oE(e){this._definitionChanged=new ye,this._show=void 0,this._showSubscription=void 0,this._coordinates=void 0,this._coordinatesSubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._extrudedHeight=void 0,this._extrudedHeightSubscription=void 0,this._extrudedHeightReference=void 0,this._extrudedHeightReferenceSubscription=void 0,this._rotation=void 0,this._rotationSubscription=void 0,this._stRotation=void 0,this._stRotationSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distancedisplayConditionSubscription=void 0,this._classificationType=void 0,this._classificationTypeSubscription=void 0,this._zIndex=void 0,this._zIndexSubscription=void 0,this.merge(g(e,g.EMPTY_OBJECT))}Object.defineProperties(oE.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:le("show"),coordinates:le("coordinates"),height:le("height"),heightReference:le("heightReference"),extrudedHeight:le("extrudedHeight"),extrudedHeightReference:le("extrudedHeightReference"),rotation:le("rotation"),stRotation:le("stRotation"),granularity:le("granularity"),fill:le("fill"),material:Ro("material"),outline:le("outline"),outlineColor:le("outlineColor"),outlineWidth:le("outlineWidth"),shadows:le("shadows"),distanceDisplayCondition:le("distanceDisplayCondition"),classificationType:le("classificationType"),zIndex:le("zIndex")});oE.prototype.clone=function(e){return d(e)?(e.show=this.show,e.coordinates=this.coordinates,e.height=this.height,e.heightReference=this.heightReference,e.extrudedHeight=this.extrudedHeight,e.extrudedHeightReference=this.extrudedHeightReference,e.rotation=this.rotation,e.stRotation=this.stRotation,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e.classificationType=this.classificationType,e.zIndex=this.zIndex,e):new oE(this)};oE.prototype.merge=function(e){this.show=g(this.show,e.show),this.coordinates=g(this.coordinates,e.coordinates),this.height=g(this.height,e.height),this.heightReference=g(this.heightReference,e.heightReference),this.extrudedHeight=g(this.extrudedHeight,e.extrudedHeight),this.extrudedHeightReference=g(this.extrudedHeightReference,e.extrudedHeightReference),this.rotation=g(this.rotation,e.rotation),this.stRotation=g(this.stRotation,e.stRotation),this.granularity=g(this.granularity,e.granularity),this.fill=g(this.fill,e.fill),this.material=g(this.material,e.material),this.outline=g(this.outline,e.outline),this.outlineColor=g(this.outlineColor,e.outlineColor),this.outlineWidth=g(this.outlineWidth,e.outlineWidth),this.shadows=g(this.shadows,e.shadows),this.distanceDisplayCondition=g(this.distanceDisplayCondition,e.distanceDisplayCondition),this.classificationType=g(this.classificationType,e.classificationType),this.zIndex=g(this.zIndex,e.zIndex)};var um=oE;var ZHt=T(S(),1);function rE(e){this._definitionChanged=new ye,this._show=void 0,this._showSubscription=void 0,this._positions=void 0,this._positionsSubscription=void 0,this._minimumHeights=void 0,this._minimumHeightsSubscription=void 0,this._maximumHeights=void 0,this._maximumHeightsSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(g(e,g.EMPTY_OBJECT))}Object.defineProperties(rE.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:le("show"),positions:le("positions"),minimumHeights:le("minimumHeights"),maximumHeights:le("maximumHeights"),granularity:le("granularity"),fill:le("fill"),material:Ro("material"),outline:le("outline"),outlineColor:le("outlineColor"),outlineWidth:le("outlineWidth"),shadows:le("shadows"),distanceDisplayCondition:le("distanceDisplayCondition")});rE.prototype.clone=function(e){return d(e)?(e.show=this.show,e.positions=this.positions,e.minimumHeights=this.minimumHeights,e.maximumHeights=this.maximumHeights,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new rE(this)};rE.prototype.merge=function(e){this.show=g(this.show,e.show),this.positions=g(this.positions,e.positions),this.minimumHeights=g(this.minimumHeights,e.minimumHeights),this.maximumHeights=g(this.maximumHeights,e.maximumHeights),this.granularity=g(this.granularity,e.granularity),this.fill=g(this.fill,e.fill),this.material=g(this.material,e.material),this.outline=g(this.outline,e.outline),this.outlineColor=g(this.outlineColor,e.outlineColor),this.outlineWidth=g(this.outlineWidth,e.outlineWidth),this.shadows=g(this.shadows,e.shadows),this.distanceDisplayCondition=g(this.distanceDisplayCondition,e.distanceDisplayCondition)};var mp=rE;var TEe=new he;function SEe(e){return new Rc(e)}function CEe(e){return le(e,void 0,SEe)}function Ds(e,t){return le(e,void 0,function(n){return n instanceof t?n:new t(n)})}function Mh(e){e=g(e,g.EMPTY_OBJECT);let t=e.id;d(t)||(t=Yn()),this._availability=void 0,this._id=t,this._definitionChanged=new ye,this._name=e.name,this._show=g(e.show,!0),this._parent=void 0,this._propertyNames=["billboard","box","corridor","cylinder","description","ellipse","ellipsoid","label","model","tileset","orientation","path","plane","point","polygon","polyline","polylineVolume","position","properties","rectangle","viewFrom","wall"],this._billboard=void 0,this._billboardSubscription=void 0,this._box=void 0,this._boxSubscription=void 0,this._corridor=void 0,this._corridorSubscription=void 0,this._cylinder=void 0,this._cylinderSubscription=void 0,this._description=void 0,this._descriptionSubscription=void 0,this._ellipse=void 0,this._ellipseSubscription=void 0,this._ellipsoid=void 0,this._ellipsoidSubscription=void 0,this._label=void 0,this._labelSubscription=void 0,this._model=void 0,this._modelSubscription=void 0,this._tileset=void 0,this._tilesetSubscription=void 0,this._orientation=void 0,this._orientationSubscription=void 0,this._path=void 0,this._pathSubscription=void 0,this._plane=void 0,this._planeSubscription=void 0,this._point=void 0,this._pointSubscription=void 0,this._polygon=void 0,this._polygonSubscription=void 0,this._polyline=void 0,this._polylineSubscription=void 0,this._polylineVolume=void 0,this._polylineVolumeSubscription=void 0,this._position=void 0,this._positionSubscription=void 0,this._properties=void 0,this._propertiesSubscription=void 0,this._rectangle=void 0,this._rectangleSubscription=void 0,this._viewFrom=void 0,this._viewFromSubscription=void 0,this._wall=void 0,this._wallSubscription=void 0,this._children=[],this.entityCollection=void 0,this.parent=e.parent,this.merge(e)}function H3(e,t,n){let i=t.length;for(let o=0;o<i;o++){let r=t[o],s=r._show;(!n&&s)!==(n&&s)&&H3(r,r._children,n)}e._definitionChanged.raiseEvent(e,"isShowing",n,!n)}Object.defineProperties(Mh.prototype,{availability:ll("availability"),id:{get:function(){return this._id}},definitionChanged:{get:function(){return this._definitionChanged}},name:ll("name"),show:{get:function(){return this._show},set:function(e){if(e===this._show)return;let t=this.isShowing;this._show=e;let n=this.isShowing;t!==n&&H3(this,this._children,n),this._definitionChanged.raiseEvent(this,"show",e,!e)}},isShowing:{get:function(){return this._show&&(!d(this.entityCollection)||this.entityCollection.show)&&(!d(this._parent)||this._parent.isShowing)}},parent:{get:function(){return this._parent},set:function(e){let t=this._parent;if(t===e)return;let n=this.isShowing;if(d(t)){let o=t._children.indexOf(this);t._children.splice(o,1)}this._parent=e,d(e)&&e._children.push(this);let i=this.isShowing;n!==i&&H3(this,this._children,i),this._definitionChanged.raiseEvent(this,"parent",e,t)}},propertyNames:{get:function(){return this._propertyNames}},billboard:Ds("billboard",Ia),box:Ds("box",qg),corridor:Ds("corridor",ex),cylinder:Ds("cylinder",tx),description:le("description"),ellipse:Ds("ellipse",nx),ellipsoid:Ds("ellipsoid",ix),label:Ds("label",lm),model:Ds("model",dp),tileset:Ds("tileset",rx),orientation:le("orientation"),path:Ds("path",up),plane:Ds("plane",$G),point:Ds("point",sx),polygon:Ds("polygon",dm),polyline:Ds("polyline",Da),polylineVolume:Ds("polylineVolume",ax),properties:Ds("properties",dl),position:CEe("position"),rectangle:Ds("rectangle",um),viewFrom:le("viewFrom"),wall:Ds("wall",mp)});Mh.prototype.isAvailable=function(e){let t=this._availability;return!d(t)||t.contains(e)};Mh.prototype.addProperty=function(e){this._propertyNames.push(e),Object.defineProperty(this,e,ll(e,!0))};Mh.prototype.removeProperty=function(e){let n=this._propertyNames.indexOf(e);this._propertyNames.splice(n,1),delete this[e]};Mh.prototype.merge=function(e){this.name=g(this.name,e.name),this.availability=g(this.availability,e.availability);let t=this._propertyNames,n=d(e._propertyNames)?e._propertyNames:Object.keys(e),i=n.length;for(let o=0;o<i;o++){let r=n[o];if(r==="parent"||r==="name"||r==="availability"||r==="children")continue;let s=this[r],a=e[r];!d(s)&&t.indexOf(r)===-1&&this.addProperty(r),d(a)&&(d(s)?d(s.merge)&&s.merge(a):d(a.merge)&&d(a.clone)?this[r]=a.clone():this[r]=a)}};var Lee=new $,Ree=new h,Zee=new Ae;Mh.prototype.computeModelMatrix=function(e,t){let n=H.getValueOrUndefined(this._position,e,Ree);if(!d(n))return;let i=H.getValueOrUndefined(this._orientation,e,Zee);return d(i)?t=A.fromRotationTranslation($.fromQuaternion(i,Lee),n,t):t=vt.eastNorthUpToFixedFrame(n,void 0,t),t};Mh.prototype.computeModelMatrixForHeightReference=function(e,t,n,i,o){let r=H.getValueOrDefault(t,e,Oe.NONE),s=H.getValueOrUndefined(this._position,e,Ree);if(r===Oe.NONE||!d(s)||h.equalsEpsilon(s,h.ZERO,W.EPSILON8))return this.computeModelMatrix(e,o);let a=i.cartesianToCartographic(s,TEe);r===Oe.CLAMP_TO_GROUND?a.height=n:a.height+=n,s=i.cartographicToCartesian(a,s);let c=H.getValueOrUndefined(this._orientation,e,Zee);return d(c)?o=A.fromRotationTranslation($.fromQuaternion(c,Lee),s,o):o=vt.eastNorthUpToFixedFrame(s,void 0,o),o};Mh.supportsMaterialsforEntitiesOnTerrain=function(e){return Vc.supportsMaterials(e)};Mh.supportsPolylinesOnTerrain=function(e){return cm.isSupported(e)};var Oo=Mh;var VEe=new At(Y.WHITE),LEe=new qn(!0),REe=new qn(!0),ZEe=new qn(!1),GEe=new qn(Y.BLACK),EEe=new qn(xn.DISABLED),XEe=new qn(new Gt),IEe=new qn(kn.BOTH);function Zc(e){let t=e.entity,n=e.geometryPropertyName;this._entity=t,this._scene=e.scene,this._fillEnabled=!1,this._isClosed=!1,this._onTerrain=!1,this._dynamic=!1,this._outlineEnabled=!1,this._geometryChanged=new ye,this._showProperty=void 0,this._materialProperty=void 0,this._showOutlineProperty=void 0,this._outlineColorProperty=void 0,this._outlineWidth=1,this._shadowsProperty=void 0,this._distanceDisplayConditionProperty=void 0,this._classificationTypeProperty=void 0,this._options=e.geometryOptions,this._geometryPropertyName=n,this._id=`${n}-${t.id}`,this._observedPropertyNames=e.observedPropertyNames,this._supportsMaterialsforEntitiesOnTerrain=Oo.supportsMaterialsforEntitiesOnTerrain(e.scene)}Object.defineProperties(Zc.prototype,{id:{get:function(){return this._id}},entity:{get:function(){return this._entity}},fillEnabled:{get:function(){return this._fillEnabled}},hasConstantFill:{get:function(){return!this._fillEnabled||!d(this._entity.availability)&&H.isConstant(this._showProperty)&&H.isConstant(this._fillProperty)}},fillMaterialProperty:{get:function(){return this._materialProperty}},outlineEnabled:{get:function(){return this._outlineEnabled}},hasConstantOutline:{get:function(){return!this._outlineEnabled||!d(this._entity.availability)&&H.isConstant(this._showProperty)&&H.isConstant(this._showOutlineProperty)}},outlineColorProperty:{get:function(){return this._outlineColorProperty}},outlineWidth:{get:function(){return this._outlineWidth}},shadowsProperty:{get:function(){return this._shadowsProperty}},distanceDisplayConditionProperty:{get:function(){return this._distanceDisplayConditionProperty}},classificationTypeProperty:{get:function(){return this._classificationTypeProperty}},isDynamic:{get:function(){return this._dynamic}},isClosed:{get:function(){return this._isClosed}},onTerrain:{get:function(){return this._onTerrain}},geometryChanged:{get:function(){return this._geometryChanged}}});Zc.prototype.isOutlineVisible=function(e){let t=this._entity,n=this._outlineEnabled&&t.isAvailable(e)&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e);return g(n,!1)};Zc.prototype.isFilled=function(e){let t=this._entity,n=this._fillEnabled&&t.isAvailable(e)&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e);return g(n,!1)};Zc.prototype.createFillGeometryInstance=fe.throwInstantiationError;Zc.prototype.createOutlineGeometryInstance=fe.throwInstantiationError;Zc.prototype.isDestroyed=function(){return!1};Zc.prototype.destroy=function(){ue(this)};Zc.prototype._isHidden=function(e,t){let n=t.show;return d(n)&&n.isConstant&&!n.getValue(Be.MINIMUM_VALUE)};Zc.prototype._isOnTerrain=function(e,t){return!1};Zc.prototype._getIsClosed=function(e){return!0};Zc.prototype._isDynamic=fe.throwInstantiationError;Zc.prototype._setStaticOptions=fe.throwInstantiationError;Zc.prototype._onEntityPropertyChanged=function(e,t,n,i){if(this._observedPropertyNames.indexOf(t)===-1)return;let o=this._entity[this._geometryPropertyName];if(!d(o)){(this._fillEnabled||this._outlineEnabled)&&(this._fillEnabled=!1,this._outlineEnabled=!1,this._geometryChanged.raiseEvent(this));return}let r=o.fill,s=d(r)&&r.isConstant?r.getValue(Be.MINIMUM_VALUE):!0,a=o.outline,c=d(a);if(c&&a.isConstant&&(c=a.getValue(Be.MINIMUM_VALUE)),!s&&!c){(this._fillEnabled||this._outlineEnabled)&&(this._fillEnabled=!1,this._outlineEnabled=!1,this._geometryChanged.raiseEvent(this));return}let l=o.show;if(this._isHidden(e,o)){(this._fillEnabled||this._outlineEnabled)&&(this._fillEnabled=!1,this._outlineEnabled=!1,this._geometryChanged.raiseEvent(this));return}this._materialProperty=g(o.material,VEe),this._fillProperty=g(r,REe),this._showProperty=g(l,LEe),this._showOutlineProperty=g(o.outline,ZEe),this._outlineColorProperty=c?g(o.outlineColor,GEe):void 0,this._shadowsProperty=g(o.shadows,EEe),this._distanceDisplayConditionProperty=g(o.distanceDisplayCondition,XEe),this._classificationTypeProperty=g(o.classificationType,IEe),this._fillEnabled=s;let u=this._isOnTerrain(e,o)&&(this._supportsMaterialsforEntitiesOnTerrain||this._materialProperty instanceof At);if(c&&u&&(Pt(Pt.geometryOutlines),c=!1),this._onTerrain=u,this._outlineEnabled=c,this._isDynamic(e,o))this._dynamic||(this._dynamic=!0,this._geometryChanged.raiseEvent(this));else{this._setStaticOptions(e,o),this._isClosed=this._getIsClosed(this._options);let m=o.outlineWidth;this._outlineWidth=d(m)?m.getValue(Be.MINIMUM_VALUE):1,this._dynamic=!1,this._geometryChanged.raiseEvent(this)}};Zc.prototype.createDynamicUpdater=function(e,t){return new this.constructor.DynamicGeometryUpdater(this,e,t)};var ii=Zc;var Jzt=T(S(),1);var Izt=T(S(),1);function CS(e,t){this._callback=void 0,this._isConstant=void 0,this._definitionChanged=new ye,this.setCallback(e,t)}Object.defineProperties(CS.prototype,{isConstant:{get:function(){return this._isConstant}},definitionChanged:{get:function(){return this._definitionChanged}}});CS.prototype.getValue=function(e,t){return this._callback(e,t)};CS.prototype.setCallback=function(e,t){let n=this._callback!==e||this._isConstant!==t;this._callback=e,this._isConstant=t,n&&this._definitionChanged.raiseEvent(this)};CS.prototype.equals=function(e){return this===e||e instanceof CS&&this._callback===e._callback&&this._isConstant===e._isConstant};var mm=CS;var Bzt=T(S(),1);var Gee=new h,WEe=new he;function VS(e,t,n,i){this._scene=e,this._heightReference=n,this._extrudedHeightReference=i,this._positionProperty=t,this._position=new h,this._cartographicPosition=new he,this._normal=new h,this._definitionChanged=new ye,this._terrainHeight=0,this._removeCallbackFunc=void 0,this._removeEventListener=void 0,this._removeModeListener=void 0;let o=this;if(d(e.globe)&&(this._removeEventListener=e.terrainProviderChanged.addEventListener(function(){o._updateClamping()}),this._removeModeListener=e.morphComplete.addEventListener(function(){o._updateClamping()})),t.isConstant){let r=t.getValue(Be.MINIMUM_VALUE,Gee);if(!d(r)||h.equals(r,h.ZERO)||!d(e.globe))return;this._position=h.clone(r,this._position),this._updateClamping(),this._normal=e.globe.ellipsoid.geodeticSurfaceNormal(r,this._normal)}}Object.defineProperties(VS.prototype,{isConstant:{get:function(){return!1}},definitionChanged:{get:function(){return this._definitionChanged}}});VS.prototype._updateClamping=function(){d(this._removeCallbackFunc)&&this._removeCallbackFunc();let e=this._scene,t=e.globe,n=this._position;if(!d(t)||h.equals(n,h.ZERO)){this._terrainHeight=0;return}let i=t.ellipsoid,o=t._surface,r=this,s=i.cartesianToCartographic(n,this._cartographicPosition),a=t.getHeight(s);d(a)?this._terrainHeight=a:this._terrainHeight=0;function c(l){if(e.mode===ie.SCENE3D){let u=i.cartesianToCartographic(l,WEe);r._terrainHeight=u.height}else r._terrainHeight=l.x;r.definitionChanged.raiseEvent()}this._removeCallbackFunc=o.updateHeight(s,c)};VS.prototype.getValue=function(e,t){let n=H.getValueOrDefault(this._heightReference,e,Oe.NONE),i=H.getValueOrDefault(this._extrudedHeightReference,e,Oe.NONE);if(n===Oe.NONE&&i!==Oe.RELATIVE_TO_GROUND)return this._position=h.clone(h.ZERO,this._position),h.clone(h.ZERO,t);if(this._positionProperty.isConstant)return h.multiplyByScalar(this._normal,this._terrainHeight,t);let o=this._scene,r=this._positionProperty.getValue(e,Gee);if(!d(r)||h.equals(r,h.ZERO)||!d(o.globe))return h.clone(h.ZERO,t);if(h.equalsEpsilon(this._position,r,W.EPSILON10))return h.multiplyByScalar(this._normal,this._terrainHeight,t);this._position=h.clone(r,this._position),this._updateClamping();let s=o.globe.ellipsoid.geodeticSurfaceNormal(r,this._normal);return h.multiplyByScalar(s,this._terrainHeight,t)};VS.prototype.isDestroyed=function(){return!1};VS.prototype.destroy=function(){return d(this._removeEventListener)&&this._removeEventListener(),d(this._removeModeListener)&&this._removeModeListener(),d(this._removeCallbackFunc)&&this._removeCallbackFunc(),ue(this)};var cx=VS;function PEe(e,t,n,i){if(ii.prototype._onEntityPropertyChanged.call(this,e,t,n,i),this._observedPropertyNames.indexOf(t)===-1)return;let o=this._entity[this._geometryPropertyName];if(!d(o))return;d(this._terrainOffsetProperty)&&(this._terrainOffsetProperty.destroy(),this._terrainOffsetProperty=void 0);let r=o.heightReference;if(d(r)){let s=new mm(this._computeCenter.bind(this),!this._dynamic);this._terrainOffsetProperty=new cx(this._scene,s,r)}}var hp=PEe;var Eee=h.ZERO,Xee=new h,vEe=new h,Iee=new Y;function wEe(e){this.id=e,this.vertexFormat=void 0,this.dimensions=void 0,this.offsetAttribute=void 0}function Jl(e,t){ii.call(this,{entity:e,scene:t,geometryOptions:new wEe(e),geometryPropertyName:"box",observedPropertyNames:["availability","position","orientation","box"]}),this._onEntityPropertyChanged(e,"box",e.box,void 0)}d(Object.create)&&(Jl.prototype=Object.create(ii.prototype),Jl.prototype.constructor=Jl);Object.defineProperties(Jl.prototype,{terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});Jl.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=new gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),o=this._distanceDisplayConditionProperty.getValue(e),r=Un.fromDistanceDisplayCondition(o),s={show:i,distanceDisplayCondition:r,color:void 0,offset:void 0};if(this._materialProperty instanceof At){let a;d(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(a=this._materialProperty.color.getValue(e,Iee)),d(a)||(a=Y.WHITE),s.color=Ut.fromColor(a)}return d(this._options.offsetAttribute)&&(s.offset=zi.fromCartesian3(H.getValueOrDefault(this._terrainOffsetProperty,e,Eee,Xee))),new _t({id:t,geometry:rl.fromDimensions(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.box.heightReference,this._options.dimensions.z*.5,this._scene.mapProjection.ellipsoid),attributes:s})};Jl.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=H.getValueOrDefault(this._outlineColorProperty,e,Y.BLACK,Iee),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Ut.fromColor(i),distanceDisplayCondition:Un.fromDistanceDisplayCondition(o),offset:void 0};return d(this._options.offsetAttribute)&&(r.offset=zi.fromCartesian3(H.getValueOrDefault(this._terrainOffsetProperty,e,Eee,Xee))),new _t({id:t,geometry:im.fromDimensions(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.box.heightReference,this._options.dimensions.z*.5,this._scene.mapProjection.ellipsoid),attributes:r})};Jl.prototype._computeCenter=function(e,t){return H.getValueOrUndefined(this._entity.position,e,t)};Jl.prototype._isHidden=function(e,t){return!d(t.dimensions)||!d(e.position)||ii.prototype._isHidden.call(this,e,t)};Jl.prototype._isDynamic=function(e,t){return!e.position.isConstant||!H.isConstant(e.orientation)||!t.dimensions.isConstant||!H.isConstant(t.outlineWidth)};Jl.prototype._setStaticOptions=function(e,t){let n=H.getValueOrDefault(t.heightReference,Be.MINIMUM_VALUE,Oe.NONE),i=this._options;i.vertexFormat=this._materialProperty instanceof At?rn.VERTEX_FORMAT:so.MaterialSupport.TEXTURED.vertexFormat,i.dimensions=t.dimensions.getValue(Be.MINIMUM_VALUE,i.dimensions),i.offsetAttribute=n!==Oe.NONE?on.ALL:void 0};Jl.prototype._onEntityPropertyChanged=hp;Jl.DynamicGeometryUpdater=LS;function LS(e,t,n){ni.call(this,e,t,n)}d(Object.create)&&(LS.prototype=Object.create(ni.prototype),LS.prototype.constructor=LS);LS.prototype._isHidden=function(e,t,n){let i=H.getValueOrUndefined(e.position,n,vEe),o=this._options.dimensions;return!d(i)||!d(o)||ni.prototype._isHidden.call(this,e,t,n)};LS.prototype._setOptions=function(e,t,n){let i=H.getValueOrDefault(t.heightReference,n,Oe.NONE),o=this._options;o.dimensions=H.getValueOrUndefined(t.dimensions,n,o.dimensions),o.offsetAttribute=i!==Oe.NONE?on.ALL:void 0};var sE=Jl;var uwn=T(S(),1);var ewn=T(S(),1);var SJt=T(S(),1),Pee=T(Wee(),1);var FEe=0,Q3={};function Nh(e,t){let n,i=e;d(Q3[i])?n=Q3[i]:(n=FEe++,Q3[i]=n),t=g(t,!1),this._id=n,this._html=e,this._showOnScreen=t,this._element=void 0}Object.defineProperties(Nh.prototype,{html:{get:function(){return this._html}},id:{get:function(){return this._id}},showOnScreen:{get:function(){return this._showOnScreen},set:function(e){this._showOnScreen=e}},element:{get:function(){if(!d(this._element)){let e=Pee.default.sanitize(this._html),t=document.createElement("div");t._creditId=this._id,t.style.display="inline",t.innerHTML=e;let n=t.querySelectorAll("a");for(let i=0;i<n.length;i++)n[i].setAttribute("target","_blank");this._element=t}return this._element}}});Nh.equals=function(e,t){return e===t||d(e)&&d(t)&&e._id===t._id&&e._showOnScreen===t._showOnScreen};Nh.prototype.equals=function(e){return Nh.equals(this,e)};Nh.prototype.isIon=function(){return this.html.indexOf("ion-credit.png")!==-1};Nh.getIonCredit=function(e){let t=d(e.collapsible)&&!e.collapsible;return new Nh(e.html,t)};Nh.clone=function(e){if(d(e))return new Nh(e.html,e.showOnScreen)};var St=Nh;var LJt=T(S(),1);function AEe(e,t){Pt(e,t)}var Qr=AEe;var dQt=T(S(),1);var iQt=T(S(),1);var EJt=T(S(),1);function vee(e){e=g(e,g.EMPTY_OBJECT),this.vertexArray=e.vertexArray,this.fragmentShaderSource=e.fragmentShaderSource,this.shaderProgram=e.shaderProgram,this.uniformMap=e.uniformMap,this.outputTexture=e.outputTexture,this.preExecute=e.preExecute,this.postExecute=e.postExecute,this.canceled=e.canceled,this.persists=g(e.persists,!1),this.pass=Re.COMPUTE,this.owner=e.owner}vee.prototype.execute=function(e){e.execute(this)};var qd=vee;var IJt=T(S(),1),aE=`in vec2 v_textureCoordinates;
  5024. uniform float originalSize;
  5025. uniform sampler2D texture0;
  5026. uniform sampler2D texture1;
  5027. uniform sampler2D texture2;
  5028. uniform sampler2D texture3;
  5029. uniform sampler2D texture4;
  5030. uniform sampler2D texture5;
  5031. const float yMipLevel1 = 1.0 - (1.0 / pow(2.0, 1.0));
  5032. const float yMipLevel2 = 1.0 - (1.0 / pow(2.0, 2.0));
  5033. const float yMipLevel3 = 1.0 - (1.0 / pow(2.0, 3.0));
  5034. const float yMipLevel4 = 1.0 - (1.0 / pow(2.0, 4.0));
  5035. void main()
  5036. {
  5037. vec2 uv = v_textureCoordinates;
  5038. vec2 textureSize = vec2(originalSize * 1.5 + 2.0, originalSize);
  5039. vec2 pixel = 1.0 / textureSize;
  5040. float mipLevel = 0.0;
  5041. if (uv.x - pixel.x > (textureSize.y / textureSize.x))
  5042. {
  5043. mipLevel = 1.0;
  5044. if (uv.y - pixel.y > yMipLevel1)
  5045. {
  5046. mipLevel = 2.0;
  5047. if (uv.y - pixel.y * 3.0 > yMipLevel2)
  5048. {
  5049. mipLevel = 3.0;
  5050. if (uv.y - pixel.y * 5.0 > yMipLevel3)
  5051. {
  5052. mipLevel = 4.0;
  5053. if (uv.y - pixel.y * 7.0 > yMipLevel4)
  5054. {
  5055. mipLevel = 5.0;
  5056. }
  5057. }
  5058. }
  5059. }
  5060. }
  5061. if (mipLevel > 0.0)
  5062. {
  5063. float scale = pow(2.0, mipLevel);
  5064. uv.y -= (pixel.y * (mipLevel - 1.0) * 2.0);
  5065. uv.x *= ((textureSize.x - 2.0) / textureSize.y);
  5066. uv.x -= 1.0 + pixel.x;
  5067. uv.y -= (1.0 - (1.0 / pow(2.0, mipLevel - 1.0)));
  5068. uv *= scale;
  5069. }
  5070. else
  5071. {
  5072. uv.x *= (textureSize.x / textureSize.y);
  5073. }
  5074. if(mipLevel == 0.0)
  5075. {
  5076. out_FragColor = texture(texture0, uv);
  5077. }
  5078. else if(mipLevel == 1.0)
  5079. {
  5080. out_FragColor = texture(texture1, uv);
  5081. }
  5082. else if(mipLevel == 2.0)
  5083. {
  5084. out_FragColor = texture(texture2, uv);
  5085. }
  5086. else if(mipLevel == 3.0)
  5087. {
  5088. out_FragColor = texture(texture3, uv);
  5089. }
  5090. else if(mipLevel == 4.0)
  5091. {
  5092. out_FragColor = texture(texture4, uv);
  5093. }
  5094. else if(mipLevel == 5.0)
  5095. {
  5096. out_FragColor = texture(texture5, uv);
  5097. }
  5098. else
  5099. {
  5100. out_FragColor = vec4(0.0);
  5101. }
  5102. }
  5103. `;var PJt=T(S(),1),cE=`in vec3 v_cubeMapCoordinates;
  5104. uniform samplerCube cubeMap;
  5105. void main()
  5106. {
  5107. vec4 rgba = czm_textureCube(cubeMap, v_cubeMapCoordinates);
  5108. #ifdef RGBA_NORMALIZED
  5109. out_FragColor = vec4(rgba.rgb, 1.0);
  5110. #else
  5111. float m = rgba.a * 16.0;
  5112. vec3 r = rgba.rgb * m;
  5113. out_FragColor = vec4(r * r, 1.0);
  5114. #endif
  5115. }
  5116. `;var wJt=T(S(),1),lE=`in vec4 position;
  5117. in vec3 cubeMapCoordinates;
  5118. out vec3 v_cubeMapCoordinates;
  5119. void main()
  5120. {
  5121. gl_Position = position;
  5122. v_cubeMapCoordinates = cubeMapCoordinates;
  5123. }
  5124. `;function lx(e){this._url=e,this._cubeMapBuffers=void 0,this._cubeMaps=void 0,this._texture=void 0,this._mipTextures=void 0,this._va=void 0,this._sp=void 0,this._maximumMipmapLevel=void 0,this._loading=!1,this._ready=!1,this._errorEvent=new ye}Object.defineProperties(lx.prototype,{url:{get:function(){return this._url}},errorEvent:{get:function(){return this._errorEvent}},texture:{get:function(){return this._texture}},maximumMipmapLevel:{get:function(){return this._maximumMipmapLevel}},ready:{get:function(){return this._ready}}});lx.isSupported=function(e){return e.colorBufferHalfFloat&&e.halfFloatingPointTexture||e.floatingPointTexture&&e.colorBufferFloat};var MEe=new h(1,0,0),NEe=new h(0,0,1),UEe=new h(-1,0,0),kEe=new h(0,0,-1),hM=new h(0,1,0),DEe=new h(0,-1,0),Aee=[hM,UEe,NEe,DEe,MEe,hM,kEe,hM,hM],Mee=Aee.length,Nee=new Float32Array(Mee*3),wee=0;for(let e=0;e<Mee;++e,wee+=3)h.pack(Aee[e],Nee,wee);var BEe=new Float32Array([-1,1,-1,0,0,1,0,0,1,0,1,1,0,-1,-1,-1,1,-1]),YEe=new Uint16Array([0,1,2,2,3,1,7,6,1,3,6,1,2,5,4,3,4,2,4,8,6,3,4,6]);function OEe(e){let t=mt.createVertexBuffer({context:e,typedArray:BEe,usage:Ne.STATIC_DRAW}),n=mt.createVertexBuffer({context:e,typedArray:Nee,usage:Ne.STATIC_DRAW}),i=mt.createIndexBuffer({context:e,typedArray:YEe,usage:Ne.STATIC_DRAW,indexDatatype:Ue.UNSIGNED_SHORT}),o=[{index:0,vertexBuffer:t,componentsPerAttribute:2,componentDatatype:Q.FLOAT},{index:1,vertexBuffer:n,componentsPerAttribute:3,componentDatatype:Q.FLOAT}];return new ti({context:e,attributes:o,indexBuffer:i})}function Fee(e){return function(){return e}}function j3(e){e._va=e._va&&e._va.destroy(),e._sp=e._sp&&e._sp.destroy();let t,n,i=e._cubeMaps;if(d(i))for(n=i.length,t=0;t<n;++t)i[t].destroy();let o=e._mipTextures;if(d(o))for(n=o.length,t=0;t<n;++t)o[t].destroy();e._va=void 0,e._sp=void 0,e._cubeMaps=void 0,e._cubeMapBuffers=void 0,e._mipTextures=void 0}lx.prototype.update=function(e){let t=e.context;if(!lx.isSupported(t)||(d(this._texture)&&d(this._va)&&j3(this),d(this._texture)))return;if(!d(this._texture)&&!this._loading){let y=e.context.textureCache.getTexture(this._url);d(y)&&(j3(this),this._texture=y,this._maximumMipmapLevel=this._texture.maximumMipmapLevel,this._ready=!0)}let n=this._cubeMapBuffers;if(!d(n)&&!this._loading){let y=this;sl(this._url).then(function(f){y._cubeMapBuffers=f,y._loading=!1}).catch(function(f){y.isDestroyed()||y._errorEvent.raiseEvent(f)}),this._loading=!0}if(!d(this._cubeMapBuffers))return;let i=[],o=n[0].positiveX.pixelDatatype;d(o)?i.push("RGBA_NORMALIZED"):o=t.halfFloatingPointTexture?Je.HALF_FLOAT:Je.FLOAT;let r=st.RGBA,s=new Ye({defines:i,sources:[cE]});this._va=OEe(t),this._sp=Qt.fromCache({context:t,vertexShaderSource:lE,fragmentShaderSource:s,attributeLocations:{position:0,cubeMapCoordinates:1}});let a=Math.min(n.length,6);this._maximumMipmapLevel=a-1;let c=this._cubeMaps=new Array(a),l=this._mipTextures=new Array(a),u=n[0].positiveX.width*2,m={originalSize:function(){return u}};for(let y=0;y<a;++y){let f=n[y].positiveY;n[y].positiveY=n[y].negativeY,n[y].negativeY=f;let x=c[y]=new Ma({context:t,source:n[y],pixelDatatype:o}),_=c[y].width*2,C=l[y]=new Wt({context:t,width:_,height:_,pixelDatatype:o,pixelFormat:r}),V=new qd({vertexArray:this._va,shaderProgram:this._sp,uniformMap:{cubeMap:Fee(x)},outputTexture:C,persists:!0,owner:this});e.commandList.push(V),m[`texture${y}`]=Fee(C)}this._texture=new Wt({context:t,width:u*1.5+2,height:u,pixelDatatype:o,pixelFormat:r}),this._texture.maximumMipmapLevel=this._maximumMipmapLevel,t.textureCache.addTexture(this._url,this._texture);let p=new qd({fragmentShaderSource:aE,uniformMap:m,outputTexture:this._texture,persists:!1,owner:this});e.commandList.push(p),this._ready=!0};lx.prototype.isDestroyed=function(){return!1};lx.prototype.destroy=function(){return j3(this),this._texture=this._texture&&this._texture.destroy(),ue(this)};var hm=lx;function dE(e){e=g(e,g.EMPTY_OBJECT);let t=d(e.imageBasedLightingFactor)?D.clone(e.imageBasedLightingFactor):new D(1,1);this._imageBasedLightingFactor=t;let n=g(e.luminanceAtZenith,.2);this._luminanceAtZenith=n;let i=e.sphericalHarmonicCoefficients;this._sphericalHarmonicCoefficients=i,this._specularEnvironmentMaps=e.specularEnvironmentMaps,this._specularEnvironmentMapAtlas=void 0,this._specularEnvironmentMapAtlasDirty=!0,this._specularEnvironmentMapLoaded=!1,this._previousSpecularEnvironmentMapLoaded=!1,this._useDefaultSpecularMaps=!1,this._useDefaultSphericalHarmonics=!1,this._shouldRegenerateShaders=!1,this._previousFrameNumber=void 0,this._previousImageBasedLightingFactor=D.clone(t),this._previousLuminanceAtZenith=n,this._previousSphericalHarmonicCoefficients=i,this._removeErrorListener=void 0}Object.defineProperties(dE.prototype,{imageBasedLightingFactor:{get:function(){return this._imageBasedLightingFactor},set:function(e){this._previousImageBasedLightingFactor=D.clone(this._imageBasedLightingFactor,this._previousImageBasedLightingFactor),this._imageBasedLightingFactor=D.clone(e,this._imageBasedLightingFactor)}},luminanceAtZenith:{get:function(){return this._luminanceAtZenith},set:function(e){this._previousLuminanceAtZenith=this._luminanceAtZenith,this._luminanceAtZenith=e}},sphericalHarmonicCoefficients:{get:function(){return this._sphericalHarmonicCoefficients},set:function(e){this._previousSphericalHarmonicCoefficients=this._sphericalHarmonicCoefficients,this._sphericalHarmonicCoefficients=e}},specularEnvironmentMaps:{get:function(){return this._specularEnvironmentMaps},set:function(e){e!==this._specularEnvironmentMaps&&(this._specularEnvironmentMapAtlasDirty=this._specularEnvironmentMapAtlasDirty||e!==this._specularEnvironmentMaps,this._specularEnvironmentMapLoaded=!1),this._specularEnvironmentMaps=e}},enabled:{get:function(){return this._imageBasedLightingFactor.x>0||this._imageBasedLightingFactor.y>0}},shouldRegenerateShaders:{get:function(){return this._shouldRegenerateShaders}},useDefaultSphericalHarmonics:{get:function(){return this._useDefaultSphericalHarmonics}},useSphericalHarmonicCoefficients:{get:function(){return d(this._sphericalHarmonicCoefficients)||this._useDefaultSphericalHarmonics}},specularEnvironmentMapAtlas:{get:function(){return this._specularEnvironmentMapAtlas}},useDefaultSpecularMaps:{get:function(){return this._useDefaultSpecularMaps}},useSpecularEnvironmentMaps:{get:function(){return d(this._specularEnvironmentMapAtlas)&&this._specularEnvironmentMapAtlas.ready||this._useDefaultSpecularMaps}}});function KEe(e,t){if(hm.isSupported(t)){if(e._specularEnvironmentMapAtlas=e._specularEnvironmentMapAtlas&&e._specularEnvironmentMapAtlas.destroy(),d(e._specularEnvironmentMaps)){let n=new hm(e._specularEnvironmentMaps);e._specularEnvironmentMapAtlas=n,e._removeErrorListener=n.errorEvent.addEventListener(i=>{console.error(`Error loading specularEnvironmentMaps: ${i}`)})}e._shouldRegenerateShaders=!0}}dE.prototype.update=function(e){if(e.frameNumber===this._previousFrameNumber)return;this._previousFrameNumber=e.frameNumber;let t=e.context;e.brdfLutGenerator.update(e),this._shouldRegenerateShaders=!1;let n=this._imageBasedLightingFactor,i=this._previousImageBasedLightingFactor;D.equals(n,i)||(this._shouldRegenerateShaders=n.x>0&&i.x===0||n.x===0&&i.x>0,this._shouldRegenerateShaders=this._shouldRegenerateShaders||n.y>0&&i.y===0||n.y===0&&i.y>0,this._previousImageBasedLightingFactor=D.clone(this._imageBasedLightingFactor,this._previousImageBasedLightingFactor)),this._luminanceAtZenith!==this._previousLuminanceAtZenith&&(this._shouldRegenerateShaders=this._shouldRegenerateShaders||d(this._luminanceAtZenith)!==d(this._previousLuminanceAtZenith),this._previousLuminanceAtZenith=this._luminanceAtZenith),this._previousSphericalHarmonicCoefficients!==this._sphericalHarmonicCoefficients&&(this._shouldRegenerateShaders=this._shouldRegenerateShaders||d(this._previousSphericalHarmonicCoefficients)!==d(this._sphericalHarmonicCoefficients),this._previousSphericalHarmonicCoefficients=this._sphericalHarmonicCoefficients),this._shouldRegenerateShaders=this._shouldRegenerateShaders||this._previousSpecularEnvironmentMapLoaded!==this._specularEnvironmentMapLoaded,this._previousSpecularEnvironmentMapLoaded=this._specularEnvironmentMapLoaded,this._specularEnvironmentMapAtlasDirty&&(KEe(this,t),this._specularEnvironmentMapAtlasDirty=!1),d(this._specularEnvironmentMapAtlas)&&(this._specularEnvironmentMapAtlas.update(e),this._specularEnvironmentMapAtlas.ready&&(this._specularEnvironmentMapLoaded=!0));let o=!d(this._specularEnvironmentMapAtlas)&&d(e.specularEnvironmentMaps)&&!this._useDefaultSpecularMaps,r=!d(e.specularEnvironmentMaps)&&this._useDefaultSpecularMaps,s=!d(this._sphericalHarmonicCoefficients)&&d(e.sphericalHarmonicCoefficients)&&!this._useDefaultSphericalHarmonics,a=!d(e.sphericalHarmonicCoefficients)&&this._useDefaultSphericalHarmonics;this._shouldRegenerateShaders=this._shouldRegenerateShaders||o||r||s||a,this._useDefaultSpecularMaps=!d(this._specularEnvironmentMapAtlas)&&d(e.specularEnvironmentMaps),this._useDefaultSphericalHarmonics=!d(this._sphericalHarmonicCoefficients)&&d(e.sphericalHarmonicCoefficients)};dE.prototype.isDestroyed=function(){return!1};dE.prototype.destroy=function(){return this._specularEnvironmentMapAtlas=this._specularEnvironmentMapAtlas&&this._specularEnvironmentMapAtlas.destroy(),this._removeErrorListener=this._removeErrorListener&&this._removeErrorListener(),ue(this)};var dx=dE;var CQt=T(S(),1),$3=T(Bl(),1);var pQt=T(S(),1);var q3,Uee="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIzN2UwMjViMC0xOTJhLTQxMmItOWEzMS1kMjJiNmZiY2E5N2YiLCJpZCI6MjU5LCJpYXQiOjE3MDE0NTc1NjB9.bMNhc7S4cuG1qUnRUiLxr5lunSH1k6-UfkRXSqVFYyM",fM={};fM.defaultAccessToken=Uee;fM.defaultServer=new Ee({url:"https://api.cesium.com/"});fM.getDefaultTokenCredit=function(e){if(e===Uee){if(!d(q3)){let t=`<b> This application is using Cesium's default ion access token. Please assign <i>Cesium.Ion.defaultAccessToken</i> with an access token from your ion account before making any Cesium API calls. You can sign up for a free ion account at <a href="https://cesium.com">https://cesium.com</a>.</b>`;q3=new St(t,!0)}return q3}};var fm=fM;function Gc(e,t){let n,i=e.externalType,o=d(i);if(!o)n={url:e.url,retryAttempts:1,retryCallback:HEe};else if(i==="3DTILES"||i==="STK_TERRAIN_SERVER")n={url:e.options.url};else throw new me("Ion.createResource does not support external imagery assets; use IonImageryProvider instead.");Ee.call(this,n),this._ionEndpoint=e,this._ionEndpointDomain=o?void 0:new $3.default(e.url).authority(),this._ionEndpointResource=t,this._ionRoot=void 0,this._pendingPromise=void 0,this._credits=void 0,this._isExternal=o}d(Object.create)&&(Gc.prototype=Object.create(Ee.prototype),Gc.prototype.constructor=Gc);Gc.fromAssetId=function(e,t){let n=Gc._createEndpointResource(e,t);return n.fetchJson().then(function(i){return new Gc(i,n)})};Object.defineProperties(Gc.prototype,{credits:{get:function(){return d(this._ionRoot)?this._ionRoot.credits:d(this._credits)?this._credits:(this._credits=Gc.getCreditsFromEndpoint(this._ionEndpoint,this._ionEndpointResource),this._credits)}}});Gc.getCreditsFromEndpoint=function(e,t){let n=e.attributions.map(St.getIonCredit),i=fm.getDefaultTokenCredit(t.queryParameters.access_token);return d(i)&&n.push(St.clone(i)),n};Gc.prototype.clone=function(e){let t=g(this._ionRoot,this);return d(e)||(e=new Gc(t._ionEndpoint,t._ionEndpointResource)),e=Ee.prototype.clone.call(this,e),e._ionRoot=t,e._isExternal=this._isExternal,e};Gc.prototype.fetchImage=function(e){if(!this._isExternal){let t=e;e={preferBlob:!0},d(t)&&(e.flipY=t.flipY,e.preferImageBitmap=t.preferImageBitmap)}return Ee.prototype.fetchImage.call(this,e)};Gc.prototype._makeRequest=function(e){return this._isExternal||new $3.default(this.url).authority()!==this._ionEndpointDomain?Ee.prototype._makeRequest.call(this,e):(d(e.headers)||(e.headers={}),e.headers.Authorization=`Bearer ${this._ionEndpoint.accessToken}`,e.headers["X-Cesium-Client"]="CesiumJS",typeof CESIUM_VERSION<"u"&&(e.headers["X-Cesium-Client-Version"]=CESIUM_VERSION),Ee.prototype._makeRequest.call(this,e))};Gc._createEndpointResource=function(e,t){t=g(t,g.EMPTY_OBJECT);let n=g(t.server,fm.defaultServer),i=g(t.accessToken,fm.defaultAccessToken);n=Ee.createIfNeeded(n);let o={url:`v1/assets/${e}/endpoint`};return d(i)&&(o.queryParameters={access_token:i}),n.getDerivedResource(o)};function HEe(e,t){let n=g(e._ionRoot,e),i=n._ionEndpointResource,o=typeof Image<"u";return!d(t)||t.statusCode!==401&&!(o&&t.target instanceof Image)?Promise.resolve(!1):(d(n._pendingPromise)||(n._pendingPromise=i.fetchJson().then(function(r){return n._ionEndpoint=r,r}).finally(function(r){return n._pendingPromise=void 0,r})),n._pendingPromise.then(function(r){return e._ionEndpoint=r,!0}))}var Ql=Gc;var RQt=T(S(),1);function Uh(e){e=g(e,0),this._array=new Array(e),this._length=e}Object.defineProperties(Uh.prototype,{length:{get:function(){return this._length},set:function(e){let t=this._array,n=this._length;if(e<n)for(let i=e;i<n;++i)t[i]=void 0;else e>t.length&&(t.length=e);this._length=e}},values:{get:function(){return this._array}}});Uh.prototype.get=function(e){return this._array[e]};Uh.prototype.set=function(e,t){e>=this._length&&(this.length=e+1),this._array[e]=t};Uh.prototype.peek=function(){return this._array[this._length-1]};Uh.prototype.push=function(e){let t=this.length++;this._array[t]=e};Uh.prototype.pop=function(){if(this._length===0)return;let e=this._array[this._length-1];return--this.length,e};Uh.prototype.reserve=function(e){e>this._array.length&&(this._array.length=e)};Uh.prototype.resize=function(e){this.length=e};Uh.prototype.trim=function(e){e=g(e,this._length),this._array.length=e};var Ec=Uh;var XQt=T(S(),1);function pM(e){e=g(e,g.EMPTY_OBJECT),this.color=e.color,this.depth=e.depth,this.stencil=e.stencil,this.renderState=e.renderState,this.framebuffer=e.framebuffer,this.owner=e.owner,this.pass=e.pass}pM.ALL=Object.freeze(new pM({color:new Y(0,0,0,0),depth:1,stencil:0}));pM.prototype.execute=function(e,t){e.clear(this,t)};var oi=pM;var wQt=T(S(),1);var fp={X:0,Y:1,Z:2};fp.Y_UP_TO_Z_UP=A.fromRotationTranslation($.fromRotationX(W.PI_OVER_TWO));fp.Z_UP_TO_Y_UP=A.fromRotationTranslation($.fromRotationX(-W.PI_OVER_TWO));fp.X_UP_TO_Z_UP=A.fromRotationTranslation($.fromRotationY(-W.PI_OVER_TWO));fp.Z_UP_TO_X_UP=A.fromRotationTranslation($.fromRotationY(W.PI_OVER_TWO));fp.X_UP_TO_Y_UP=A.fromRotationTranslation($.fromRotationZ(W.PI_OVER_TWO));fp.Y_UP_TO_X_UP=A.fromRotationTranslation($.fromRotationZ(-W.PI_OVER_TWO));fp.fromName=function(e){return fp[e]};var Zo=Object.freeze(fp);var S2n=T(S(),1);var BQt=T(S(),1);function $d(e){this.planes=g(e,[])}var uE=[new h,new h,new h];h.clone(h.UNIT_X,uE[0]);h.clone(h.UNIT_Y,uE[1]);h.clone(h.UNIT_Z,uE[2]);var pb=new h,zEe=new h,kee=new sn(new h(1,0,0),0);$d.fromBoundingSphere=function(e,t){d(t)||(t=new $d);let n=uE.length,i=t.planes;i.length=2*n;let o=e.center,r=e.radius,s=0;for(let a=0;a<n;++a){let c=uE[a],l=i[s],u=i[s+1];d(l)||(l=i[s]=new se),d(u)||(u=i[s+1]=new se),h.multiplyByScalar(c,-r,pb),h.add(o,pb,pb),l.x=c.x,l.y=c.y,l.z=c.z,l.w=-h.dot(c,pb),h.multiplyByScalar(c,r,pb),h.add(o,pb,pb),u.x=-c.x,u.y=-c.y,u.z=-c.z,u.w=-h.dot(h.negate(c,zEe),pb),s+=2}return t};$d.prototype.computeVisibility=function(e){let t=this.planes,n=!1;for(let i=0,o=t.length;i<o;++i){let r=e.intersectPlane(sn.fromCartesian4(t[i],kee));if(r===qt.OUTSIDE)return qt.OUTSIDE;r===qt.INTERSECTING&&(n=!0)}return n?qt.INTERSECTING:qt.INSIDE};$d.prototype.computeVisibilityWithPlaneMask=function(e,t){if(t===$d.MASK_OUTSIDE||t===$d.MASK_INSIDE)return t;let n=$d.MASK_INSIDE,i=this.planes;for(let o=0,r=i.length;o<r;++o){let s=o<31?1<<o:0;if(o<31&&!(t&s))continue;let a=e.intersectPlane(sn.fromCartesian4(i[o],kee));if(a===qt.OUTSIDE)return $d.MASK_OUTSIDE;a===qt.INTERSECTING&&(n|=s)}return n};$d.MASK_OUTSIDE=4294967295;$d.MASK_INSIDE=0;$d.MASK_INDETERMINATE=2147483647;var jr=$d;var o4t=T(S(),1);var qQt=T(S(),1);function kh(e){e=g(e,g.EMPTY_OBJECT),this.left=e.left,this._left=void 0,this.right=e.right,this._right=void 0,this.top=e.top,this._top=void 0,this.bottom=e.bottom,this._bottom=void 0,this.near=g(e.near,1),this._near=this.near,this.far=g(e.far,5e8),this._far=this.far,this._cullingVolume=new jr,this._orthographicMatrix=new A}function Dee(e){(e.top!==e._top||e.bottom!==e._bottom||e.left!==e._left||e.right!==e._right||e.near!==e._near||e.far!==e._far)&&(e._left=e.left,e._right=e.right,e._top=e.top,e._bottom=e.bottom,e._near=e.near,e._far=e.far,e._orthographicMatrix=A.computeOrthographicOffCenter(e.left,e.right,e.bottom,e.top,e.near,e.far,e._orthographicMatrix))}Object.defineProperties(kh.prototype,{projectionMatrix:{get:function(){return Dee(this),this._orthographicMatrix}}});var JEe=new h,QEe=new h,jEe=new h,eY=new h;kh.prototype.computeCullingVolume=function(e,t,n){let i=this._cullingVolume.planes,o=this.top,r=this.bottom,s=this.right,a=this.left,c=this.near,l=this.far,u=h.cross(t,n,JEe);h.normalize(u,u);let m=QEe;h.multiplyByScalar(t,c,m),h.add(e,m,m);let p=jEe;h.multiplyByScalar(u,a,p),h.add(m,p,p);let y=i[0];return d(y)||(y=i[0]=new se),y.x=u.x,y.y=u.y,y.z=u.z,y.w=-h.dot(u,p),h.multiplyByScalar(u,s,p),h.add(m,p,p),y=i[1],d(y)||(y=i[1]=new se),y.x=-u.x,y.y=-u.y,y.z=-u.z,y.w=-h.dot(h.negate(u,eY),p),h.multiplyByScalar(n,r,p),h.add(m,p,p),y=i[2],d(y)||(y=i[2]=new se),y.x=n.x,y.y=n.y,y.z=n.z,y.w=-h.dot(n,p),h.multiplyByScalar(n,o,p),h.add(m,p,p),y=i[3],d(y)||(y=i[3]=new se),y.x=-n.x,y.y=-n.y,y.z=-n.z,y.w=-h.dot(h.negate(n,eY),p),y=i[4],d(y)||(y=i[4]=new se),y.x=t.x,y.y=t.y,y.z=t.z,y.w=-h.dot(t,m),h.multiplyByScalar(t,l,p),h.add(e,p,p),y=i[5],d(y)||(y=i[5]=new se),y.x=-t.x,y.y=-t.y,y.z=-t.z,y.w=-h.dot(h.negate(t,eY),p),this._cullingVolume};kh.prototype.getPixelDimensions=function(e,t,n,i,o){Dee(this);let r=this.right-this.left,s=this.top-this.bottom,a=i*r/e,c=i*s/t;return o.x=a,o.y=c,o};kh.prototype.clone=function(e){return d(e)||(e=new kh),e.left=this.left,e.right=this.right,e.top=this.top,e.bottom=this.bottom,e.near=this.near,e.far=this.far,e._left=void 0,e._right=void 0,e._top=void 0,e._bottom=void 0,e._near=void 0,e._far=void 0,e};kh.prototype.equals=function(e){return d(e)&&e instanceof kh&&this.right===e.right&&this.left===e.left&&this.top===e.top&&this.bottom===e.bottom&&this.near===e.near&&this.far===e.far};kh.prototype.equalsEpsilon=function(e,t,n){return e===this||d(e)&&e instanceof kh&&W.equalsEpsilon(this.right,e.right,t,n)&&W.equalsEpsilon(this.left,e.left,t,n)&&W.equalsEpsilon(this.top,e.top,t,n)&&W.equalsEpsilon(this.bottom,e.bottom,t,n)&&W.equalsEpsilon(this.near,e.near,t,n)&&W.equalsEpsilon(this.far,e.far,t,n)};var yr=kh;function ul(e){e=g(e,g.EMPTY_OBJECT),this._offCenterFrustum=new yr,this.width=e.width,this._width=void 0,this.aspectRatio=e.aspectRatio,this._aspectRatio=void 0,this.near=g(e.near,1),this._near=this.near,this.far=g(e.far,5e8),this._far=this.far}ul.packedLength=4;ul.pack=function(e,t,n){return n=g(n,0),t[n++]=e.width,t[n++]=e.aspectRatio,t[n++]=e.near,t[n]=e.far,t};ul.unpack=function(e,t,n){return t=g(t,0),d(n)||(n=new ul),n.width=e[t++],n.aspectRatio=e[t++],n.near=e[t++],n.far=e[t],n};function bb(e){let t=e._offCenterFrustum;if(e.width!==e._width||e.aspectRatio!==e._aspectRatio||e.near!==e._near||e.far!==e._far){e._aspectRatio=e.aspectRatio,e._width=e.width,e._near=e.near,e._far=e.far;let n=1/e.aspectRatio;t.right=e.width*.5,t.left=-t.right,t.top=n*t.right,t.bottom=-t.top,t.near=e.near,t.far=e.far}}Object.defineProperties(ul.prototype,{projectionMatrix:{get:function(){return bb(this),this._offCenterFrustum.projectionMatrix}},offCenterFrustum:{get:function(){return bb(this),this._offCenterFrustum}}});ul.prototype.computeCullingVolume=function(e,t,n){return bb(this),this._offCenterFrustum.computeCullingVolume(e,t,n)};ul.prototype.getPixelDimensions=function(e,t,n,i,o){return bb(this),this._offCenterFrustum.getPixelDimensions(e,t,n,i,o)};ul.prototype.clone=function(e){return d(e)||(e=new ul),e.aspectRatio=this.aspectRatio,e.width=this.width,e.near=this.near,e.far=this.far,e._aspectRatio=void 0,e._width=void 0,e._near=void 0,e._far=void 0,this._offCenterFrustum.clone(e._offCenterFrustum),e};ul.prototype.equals=function(e){return!d(e)||!(e instanceof ul)?!1:(bb(this),bb(e),this.width===e.width&&this.aspectRatio===e.aspectRatio&&this._offCenterFrustum.equals(e._offCenterFrustum))};ul.prototype.equalsEpsilon=function(e,t,n){return!d(e)||!(e instanceof ul)?!1:(bb(this),bb(e),W.equalsEpsilon(this.width,e.width,t,n)&&W.equalsEpsilon(this.aspectRatio,e.aspectRatio,t,n)&&this._offCenterFrustum.equalsEpsilon(e._offCenterFrustum,t,n))};var en=ul;var a4t=T(S(),1);function Bee(e){e=g(e,g.EMPTY_OBJECT),this._metadata=e.metadata}Object.defineProperties(Bee.prototype,{metadata:{get:function(){return this._metadata}}});var ux=Bee;var sGn=T(S(),1);var S4t=T(S(),1);var p4t=T(S(),1);var u4t=T(S(),1);function yb(e,t,n){return t=g(t,0),n=g(n,e.byteLength-t),e=e.subarray(t,t+n),yb.decode(e)}yb.decodeWithTextDecoder=function(e){return new TextDecoder("utf-8").decode(e)};yb.decodeWithFromCharCode=function(e){let t="",n=qEe(e),i=n.length;for(let o=0;o<i;++o){let r=n[o];r<=65535?t+=String.fromCharCode(r):(r-=65536,t+=String.fromCharCode((r>>10)+55296,(r&1023)+56320))}return t};function mE(e,t,n){return t<=e&&e<=n}function qEe(e){let t=0,n=0,i=0,o=128,r=191,s=[],a=e.length;for(let c=0;c<a;++c){let l=e[c];if(i===0){if(mE(l,0,127)){s.push(l);continue}if(mE(l,194,223)){i=1,t=l&31;continue}if(mE(l,224,239)){l===224&&(o=160),l===237&&(r=159),i=2,t=l&15;continue}if(mE(l,240,244)){l===240&&(o=144),l===244&&(r=143),i=3,t=l&7;continue}throw new me("String decoding failed.")}if(!mE(l,o,r)){t=i=n=0,o=128,r=191,--c;continue}o=128,r=191,t=t<<6|l&63,++n,n===i&&(s.push(t),t=i=n=0)}return s}typeof TextDecoder<"u"?yb.decode=yb.decodeWithTextDecoder:yb.decode=yb.decodeWithFromCharCode;var ml=yb;function $Ee(e,t){return t=g(t,0),ml(e,t,Math.min(4,e.length))}var pm=$Ee;function bm(e,t,n,i){this._tileset=e,this._tile=t,this._resource=n,d(i)||(i=[]),this._contents=i,this._metadata=void 0,this._group=void 0,this._ready=!1}Object.defineProperties(bm.prototype,{featurePropertiesDirty:{get:function(){let e=this._contents,t=e.length;for(let n=0;n<t;++n)if(e[n].featurePropertiesDirty)return!0;return!1},set:function(e){let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].featurePropertiesDirty=e}},featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return 0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){return this._contents}},ready:{get:function(){return this._ready}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},metadata:{get:function(){return this._metadata},set:function(e){this._metadata=e;let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].metadata=e}},batchTable:{get:function(){}},group:{get:function(){return this._group},set:function(e){this._group=e;let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].group=e}}});var hE=Uint32Array.BYTES_PER_ELEMENT;bm.fromTileType=async function(e,t,n,i,o,r){o=g(o,0);let s=new Uint8Array(i),a=new DataView(i);o+=hE;let c=a.getUint32(o,!0);if(c!==1)throw new me(`Only Composite Tile version 1 is supported. Version ${c} is not.`);o+=hE,o+=hE;let l=a.getUint32(o,!0);o+=hE;let u=n.queryParameters.compositeIndex;d(u)?u=`${u}_`:u="";let m=[];m.length=l;for(let f=0;f<l;++f){let x=pm(s,o),_=a.getUint32(o+hE*2,!0),C=r[x],V=`${u}${f}`,L=n.getDerivedResource({queryParameters:{compositeIndex:V}});if(d(C))m[f]=Promise.resolve(C(e,t,L,i,o));else throw new me(`Unknown tile content type, ${x}, inside Composite tile`);o+=_}let p=await Promise.all(m);return new bm(e,t,n,p)};bm.prototype.hasProperty=function(e,t){return!1};bm.prototype.getFeature=function(e){};bm.prototype.applyDebugSettings=function(e,t){let n=this._contents,i=n.length;for(let o=0;o<i;++o)n[o].applyDebugSettings(e,t)};bm.prototype.applyStyle=function(e){let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].applyStyle(e)};bm.prototype.update=function(e,t){let n=this._contents,i=n.length,o=!0;for(let r=0;r<i;++r)n[r].update(e,t),o=o&&n[r].ready;!this._ready&&o&&(this._ready=!0)};bm.prototype.isDestroyed=function(){return!1};bm.prototype.destroy=function(){let e=this._contents,t=e.length;for(let n=0;n<t;++n)e[n].destroy();return ue(this)};var fE=bm;var e7t=T(S(),1);var L4t=T(S(),1);function eXe(e,t,n){return JSON.parse(ml(e,t,n))}var Go=eXe;var Ijt=T(S(),1);var M4t=T(S(),1);function Ba(e){this._id=Yn();let t=e.featuresLength;this._showAlphaProperties=void 0,this._batchValues=void 0,this._batchValuesDirty=!1,this._batchTexture=void 0,this._defaultTexture=void 0,this._pickTexture=void 0,this._pickIds=[];let n,i;if(t>0){let o=Math.min(t,kt.maximumTextureSize),r=Math.ceil(t/kt.maximumTextureSize),s=1/o,a=s*.5,c=1/r,l=c*.5;n=new D(o,r),i=new se(s,a,c,l)}this._translucentFeaturesLength=0,this._featuresLength=t,this._textureDimensions=n,this._textureStep=i,this._owner=e.owner,this._statistics=e.statistics,this._colorChangedCallback=e.colorChangedCallback}Object.defineProperties(Ba.prototype,{translucentFeaturesLength:{get:function(){return this._translucentFeaturesLength}},byteLength:{get:function(){let e=0;return d(this._pickTexture)&&(e+=this._pickTexture.sizeInBytes),d(this._batchTexture)&&(e+=this._batchTexture.sizeInBytes),e}},textureDimensions:{get:function(){return this._textureDimensions}},textureStep:{get:function(){return this._textureStep}},batchTexture:{get:function(){return this._batchTexture}},defaultTexture:{get:function(){return this._defaultTexture}},pickTexture:{get:function(){return this._pickTexture}}});Ba.DEFAULT_COLOR_VALUE=Y.WHITE;Ba.DEFAULT_SHOW_VALUE=!0;function Yee(e){let t=e._textureDimensions;return t.x*t.y*4}function Oee(e){if(!d(e._batchValues)){let t=Yee(e),n=new Uint8Array(t).fill(255);e._batchValues=n}return e._batchValues}function Kee(e){if(!d(e._showAlphaProperties)){let t=2*e._featuresLength,n=new Uint8Array(t).fill(255);e._showAlphaProperties=n}return e._showAlphaProperties}Ba.prototype.setShow=function(e,t){if(t&&!d(this._showAlphaProperties))return;let n=Kee(this),i=e*2,o=t?255:0;if(n[i]!==o){n[i]=o;let r=Oee(this),s=e*4+3;r[s]=t?n[i+1]:0,this._batchValuesDirty=!0}};Ba.prototype.setAllShow=function(e){let t=this._featuresLength;for(let n=0;n<t;++n)this.setShow(n,e)};Ba.prototype.getShow=function(e){if(!d(this._showAlphaProperties))return!0;let t=e*2;return this._showAlphaProperties[t]===255};var tXe=new Array(4);Ba.prototype.setColor=function(e,t){if(Y.equals(t,Ba.DEFAULT_COLOR_VALUE)&&!d(this._batchValues))return;let n=t.toBytes(tXe),i=n[3],o=Oee(this),r=e*4,s=Kee(this),a=e*2;if(o[r]!==n[0]||o[r+1]!==n[1]||o[r+2]!==n[2]||s[a+1]!==i){o[r]=n[0],o[r+1]=n[1],o[r+2]=n[2];let c=s[a+1]!==255,l=s[a]!==0;o[r+3]=l?i:0,s[a+1]=i;let u=i!==255;u&&!c?++this._translucentFeaturesLength:!u&&c&&--this._translucentFeaturesLength,this._batchValuesDirty=!0,d(this._colorChangedCallback)&&this._colorChangedCallback(e,t)}};Ba.prototype.setAllColor=function(e){let t=this._featuresLength;for(let n=0;n<t;++n)this.setColor(n,e)};Ba.prototype.getColor=function(e,t){if(!d(this._batchValues))return Y.clone(Ba.DEFAULT_COLOR_VALUE,t);let n=this._batchValues,i=e*4,o=this._showAlphaProperties,r=e*2;return Y.fromBytes(n[i],n[i+1],n[i+2],o[r+1],t)};Ba.prototype.getPickColor=function(e){return this._pickIds[e]};function Hee(e,t,n){let i=e._textureDimensions;return new Wt({context:t,pixelFormat:st.RGBA,pixelDatatype:Je.UNSIGNED_BYTE,source:{width:i.x,height:i.y,arrayBufferView:n},flipY:!1,sampler:un.NEAREST})}function nXe(e,t){let n=e._featuresLength;if(!d(e._pickTexture)&&n>0){let i=e._pickIds,o=Yee(e),r=new Uint8Array(o),s=e._owner,a=e._statistics;for(let c=0;c<n;++c){let l=t.createPickId(s.getFeature(c));i.push(l);let u=l.color,m=c*4;r[m]=Y.floatToByte(u.red),r[m+1]=Y.floatToByte(u.green),r[m+2]=Y.floatToByte(u.blue),r[m+3]=Y.floatToByte(u.alpha)}e._pickTexture=Hee(e,t,r),d(a)&&(a.batchTableByteLength+=e._pickTexture.sizeInBytes)}}function iXe(e){let t=e._textureDimensions;e._batchTexture.copyFrom({source:{width:t.x,height:t.y,arrayBufferView:e._batchValues}})}Ba.prototype.update=function(e,t){let n=t.context;this._defaultTexture=n.defaultTexture;let i=t.passes;(i.pick||i.postProcess)&&nXe(this,n),this._batchValuesDirty&&(this._batchValuesDirty=!1,d(this._batchTexture)||(this._batchTexture=Hee(this,n,this._batchValues),d(this._statistics)&&(this._statistics.batchTableByteLength+=this._batchTexture.sizeInBytes)),iXe(this))};Ba.prototype.isDestroyed=function(){return!1};Ba.prototype.destroy=function(){this._batchTexture=this._batchTexture&&this._batchTexture.destroy(),this._pickTexture=this._pickTexture&&this._pickTexture.destroy();let e=this._pickIds,t=e.length;for(let n=0;n<t;++n)e[n].destroy();return ue(this)};var Xc=Ba;var ijt=T(S(),1);var H4t=T(S(),1);var oXe={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},rXe={SCALAR:void 0,VEC2:D,VEC3:h,VEC4:se,MAT2:$i,MAT3:$,MAT4:A};function sXe(e){let t=e.componentType,n;typeof t=="string"?n=Q.fromName(t):n=t;let i=oXe[e.type],o=rXe[e.type];return{componentsPerAttribute:i,classType:o,createArrayBufferView:function(r,s,a){return Q.createArrayBufferView(n,r,s,i*a)}}}var jl=sXe;function pp(e){this._classes=void 0,this._classIds=void 0,this._classIndexes=void 0,this._parentCounts=void 0,this._parentIndexes=void 0,this._parentIds=void 0,this._byteLength=0,aXe(this,e.extension,e.binaryBody)}Object.defineProperties(pp.prototype,{byteLength:{get:function(){return this._byteLength}}});function aXe(e,t,n){let i,o,r,s=t.instancesLength,a=t.classes,c=t.classIds,l=t.parentCounts,u=t.parentIds,m=s,p=0;d(c.byteOffset)&&(c.componentType=g(c.componentType,Q.UNSIGNED_SHORT),c.type=an.SCALAR,r=jl(c),c=r.createArrayBufferView(n.buffer,n.byteOffset+c.byteOffset,s),p+=c.byteLength);let y;if(d(l)){for(d(l.byteOffset)&&(l.componentType=g(l.componentType,Q.UNSIGNED_SHORT),l.type=an.SCALAR,r=jl(l),l=r.createArrayBufferView(n.buffer,n.byteOffset+l.byteOffset,s),p+=l.byteLength),y=new Uint16Array(s),m=0,i=0;i<s;++i)y[i]=m,m+=l[i];p+=y.byteLength}d(u)&&d(u.byteOffset)&&(u.componentType=g(u.componentType,Q.UNSIGNED_SHORT),u.type=an.SCALAR,r=jl(u),u=r.createArrayBufferView(n.buffer,n.byteOffset+u.byteOffset,m),p+=u.byteLength);let f=a.length;for(i=0;i<f;++i){let C=a[i].length,V=a[i].instances,L=cXe(C,V,n);p+=lXe(L),a[i].instances=xt(L,V)}let x=new Array(f).fill(0),_=new Uint16Array(s);for(i=0;i<s;++i)o=c[i],_[i]=x[o],++x[o];p+=_.byteLength,e._classes=a,e._classIds=c,e._classIndexes=_,e._parentCounts=l,e._parentIndexes=y,e._parentIds=u,e._byteLength=p}function cXe(e,t,n){let i;for(let o in t)if(t.hasOwnProperty(o)){let r=t[o],s=r.byteOffset;if(d(s)){let a=r.componentType,c=r.type;if(!d(a))throw new me("componentType is required.");if(!d(c))throw new me("type is required.");if(!d(n))throw new me(`Property ${o} requires a batch table binary.`);let l=jl(r),u=l.componentsPerAttribute,m=l.classType,p=l.createArrayBufferView(n.buffer,n.byteOffset+s,e);d(i)||(i={}),i[o]={typedArray:p,componentCount:u,type:m}}}return i}function lXe(e){let t=0;for(let n in e)e.hasOwnProperty(n)&&(t+=e[n].typedArray.byteLength);return t}var dXe=[],uXe=[],mXe=0;function hXe(e,t,n){let i=e._classIds,o=e._parentCounts,r=e._parentIds,s=e._parentIndexes,a=i.length,c=dXe;c.length=Math.max(c.length,a);let l=++mXe,u=uXe;for(u.length=0,u.push(t);u.length>0;){if(t=u.pop(),c[t]===l)continue;c[t]=l;let m=n(e,t);if(d(m))return m;let p=o[t],y=s[t];for(let f=0;f<p;++f){let x=r[y+f];x!==t&&u.push(x)}}}function fXe(e,t,n){let i=!0;for(;i;){let o=n(e,t);if(d(o))return o;let r=e._parentIds[t];i=r!==t,t=r}}function pE(e,t,n){let i=e._parentCounts,o=e._parentIds;if(d(o)){if(d(i))return hXe(e,t,n)}else return n(e,t);return fXe(e,t,n)}pp.prototype.hasProperty=function(e,t){let n=pE(this,e,function(i,o){let r=i._classIds[o],s=i._classes[r].instances;if(d(s[t]))return!0});return d(n)};pp.prototype.propertyExists=function(e){let t=this._classes,n=t.length;for(let i=0;i<n;++i){let o=t[i].instances;if(d(o[e]))return!0}return!1};pp.prototype.getPropertyIds=function(e,t){return t=d(t)?t:[],t.length=0,pE(this,e,function(n,i){let o=n._classIds[i],r=n._classes[o].instances;for(let s in r)r.hasOwnProperty(s)&&t.indexOf(s)===-1&&t.push(s)}),t};pp.prototype.getProperty=function(e,t){return pE(this,e,function(n,i){let o=n._classIds[i],r=n._classes[o],s=n._classIndexes[i],a=r.instances[t];if(d(a))return d(a.typedArray)?pXe(a,s):Ke(a[s],!0)})};function pXe(e,t){let n=e.typedArray,i=e.componentCount;return i===1?n[t]:e.type.unpack(n,t*i)}pp.prototype.setProperty=function(e,t,n){let i=pE(this,e,function(o,r){let s=o._classIds[r],a=o._classes[s],c=o._classIndexes[r],l=a.instances[t];if(d(l))return d(l.typedArray)?bXe(l,c,n):l[c]=Ke(n,!0),!0});return d(i)};function bXe(e,t,n){let i=e.typedArray,o=e.componentCount;o===1?i[t]=n:e.type.pack(n,i,t*o)}pp.prototype.isClass=function(e,t){let n=pE(this,e,function(i,o){let r=i._classIds[o];if(i._classes[r].name===t)return!0});return d(n)};pp.prototype.getClassName=function(e){let t=this._classIds[e];return this._classes[t].name};var mx=pp;var rjt=T(S(),1),yXe={HIGHLIGHT:0,REPLACE:1,MIX:2},hl=Object.freeze(yXe);var tY=Xc.DEFAULT_COLOR_VALUE,nY=Xc.DEFAULT_SHOW_VALUE;function lo(e,t,n,i,o){this.featuresLength=t;let r;d(n)&&(r=n.extensions),this._extensions=g(r,{});let s=gXe(n);this._properties=s,this._batchTableHierarchy=xXe(this,n,i);let a=Jee(t,s,i);this._binaryPropertiesByteLength=_Xe(a),this._batchTableBinaryProperties=a,this._content=e,this._batchTexture=new Xc({featuresLength:t,colorChangedCallback:o,owner:e,statistics:e.tileset.statistics})}lo._deprecationWarning=Qr;Object.defineProperties(lo.prototype,{batchTableByteLength:{get:function(){let e=this._binaryPropertiesByteLength;return d(this._batchTableHierarchy)&&(e+=this._batchTableHierarchy.byteLength),e+=this._batchTexture.byteLength,e}}});function gXe(e){let t={};if(!d(e))return t;for(let n in e)e.hasOwnProperty(n)&&n!=="HIERARCHY"&&n!=="extensions"&&n!=="extras"&&(t[n]=Ke(e[n],!0));return t}function xXe(e,t,n){if(!d(t))return;let i=e._extensions["3DTILES_batch_table_hierarchy"],o=t.HIERARCHY;if(d(o)&&(lo._deprecationWarning("batchTableHierarchyExtension","The batch table HIERARCHY property has been moved to an extension. Use extensions.3DTILES_batch_table_hierarchy instead."),e._extensions["3DTILES_batch_table_hierarchy"]=o,i=o),!!d(i))return new mx({extension:i,binaryBody:n})}function Jee(e,t,n){let i;for(let o in t)if(t.hasOwnProperty(o)){let r=t[o],s=r.byteOffset;if(d(s)){let a=r.componentType,c=r.type;if(!d(a))throw new me("componentType is required.");if(!d(c))throw new me("type is required.");if(!d(n))throw new me(`Property ${o} requires a batch table binary.`);let l=jl(r),u=l.componentsPerAttribute,m=l.classType,p=l.createArrayBufferView(n.buffer,n.byteOffset+s,e);d(i)||(i={}),i[o]={typedArray:p,componentCount:u,type:m}}}return i}function _Xe(e){if(!d(e))return 0;let t=0;for(let n in e)e.hasOwnProperty(n)&&(t+=e[n].typedArray.byteLength);return t}lo.getBinaryProperties=function(e,t,n){return Jee(e,t,n)};lo.prototype.setShow=function(e,t){this._batchTexture.setShow(e,t)};lo.prototype.setAllShow=function(e){this._batchTexture.setAllShow(e)};lo.prototype.getShow=function(e){return this._batchTexture.getShow(e)};lo.prototype.setColor=function(e,t){this._batchTexture.setColor(e,t)};lo.prototype.setAllColor=function(e){this._batchTexture.setAllColor(e)};lo.prototype.getColor=function(e,t){return this._batchTexture.getColor(e,t)};lo.prototype.getPickColor=function(e){return this._batchTexture.getPickColor(e)};var TXe=new Y;lo.prototype.applyStyle=function(e){if(!d(e)){this.setAllColor(tY),this.setAllShow(nY);return}let t=this._content,n=this.featuresLength;for(let i=0;i<n;++i){let o=t.getFeature(i),r=d(e.color)?g(e.color.evaluateColor(o,TXe),tY):tY,s=d(e.show)?g(e.show.evaluate(o),nY):nY;this.setColor(i,r),this.setShow(i,s)}};function SXe(e,t){let n=e.typedArray,i=e.componentCount;return i===1?n[t]:e.type.unpack(n,t*i)}function CXe(e,t,n){let i=e.typedArray,o=e.componentCount;o===1?i[t]=n:e.type.pack(n,i,t*o)}lo.prototype.isClass=function(e,t){let n=this._batchTableHierarchy;return d(n)?n.isClass(e,t):!1};lo.prototype.isExactClass=function(e,t){return this.getExactClassName(e)===t};lo.prototype.getExactClassName=function(e){let t=this._batchTableHierarchy;if(d(t))return t.getClassName(e)};lo.prototype.hasProperty=function(e,t){return d(this._properties[t])||d(this._batchTableHierarchy)&&this._batchTableHierarchy.hasProperty(e,t)};lo.prototype.hasPropertyBySemantic=function(){return!1};lo.prototype.getPropertyIds=function(e,t){t=d(t)?t:[],t.length=0;let n=Object.keys(this._properties);return t.push.apply(t,n),d(this._batchTableHierarchy)&&t.push.apply(t,this._batchTableHierarchy.getPropertyIds(e,n)),t};lo.prototype.getPropertyBySemantic=function(e,t){};lo.prototype.getProperty=function(e,t){if(d(this._batchTableBinaryProperties)){let i=this._batchTableBinaryProperties[t];if(d(i))return SXe(i,e)}let n=this._properties[t];if(d(n))return Ke(n[e],!0);if(d(this._batchTableHierarchy)){let i=this._batchTableHierarchy.getProperty(e,t);if(d(i))return i}};lo.prototype.setProperty=function(e,t,n){let i=this.featuresLength;if(d(this._batchTableBinaryProperties)){let r=this._batchTableBinaryProperties[t];if(d(r)){CXe(r,e,n);return}}if(d(this._batchTableHierarchy)&&this._batchTableHierarchy.setProperty(e,t,n))return;let o=this._properties[t];d(o)||(this._properties[t]=new Array(i),o=this._properties[t]),o[e]=Ke(n,!0)};function VXe(e){return e._batchTexture.textureDimensions.y===1?`uniform vec4 tile_textureStep;
  5125. vec2 computeSt(float batchId)
  5126. {
  5127. float stepX = tile_textureStep.x;
  5128. float centerX = tile_textureStep.y;
  5129. return vec2(centerX + (batchId * stepX), 0.5);
  5130. }
  5131. `:`uniform vec4 tile_textureStep;
  5132. uniform vec2 tile_textureDimensions;
  5133. vec2 computeSt(float batchId)
  5134. {
  5135. float stepX = tile_textureStep.x;
  5136. float centerX = tile_textureStep.y;
  5137. float stepY = tile_textureStep.z;
  5138. float centerY = tile_textureStep.w;
  5139. float xId = mod(batchId, tile_textureDimensions.x);
  5140. float yId = floor(batchId / tile_textureDimensions.x);
  5141. return vec2(centerX + (xId * stepX), centerY + (yId * stepY));
  5142. }
  5143. `}lo.prototype.getVertexShaderCallback=function(e,t,n){if(this.featuresLength===0)return;let i=this;return function(o){let r=Qee(o,n,!1),s;return kt.maximumVertexTextureImageUnits>0?(s="",e&&(s+=`uniform bool tile_translucentCommand;
  5144. `),s+=`uniform sampler2D tile_batchTexture;
  5145. out vec4 tile_featureColor;
  5146. out vec2 tile_featureSt;
  5147. void main()
  5148. {
  5149. vec2 st = computeSt(${t});
  5150. vec4 featureProperties = texture(tile_batchTexture, st);
  5151. tile_color(featureProperties);
  5152. float show = ceil(featureProperties.a);
  5153. gl_Position *= show;
  5154. `,e&&(s+=` bool isStyleTranslucent = (featureProperties.a != 1.0);
  5155. if (czm_pass == czm_passTranslucent)
  5156. {
  5157. if (!isStyleTranslucent && !tile_translucentCommand)
  5158. {
  5159. gl_Position *= 0.0;
  5160. }
  5161. }
  5162. else
  5163. {
  5164. if (isStyleTranslucent)
  5165. {
  5166. gl_Position *= 0.0;
  5167. }
  5168. }
  5169. `),s+=` tile_featureColor = featureProperties;
  5170. tile_featureSt = st;
  5171. }`):s=`out vec2 tile_featureSt;
  5172. void main()
  5173. {
  5174. tile_color(vec4(1.0));
  5175. tile_featureSt = computeSt(${t});
  5176. }`,`${r}
  5177. ${VXe(i)}${s}`}};function zee(e,t){return e=Ye.replaceMain(e,"tile_main"),t?`${e}uniform float tile_colorBlend;
  5178. void tile_color(vec4 tile_featureColor)
  5179. {
  5180. tile_main();
  5181. tile_featureColor = czm_gammaCorrect(tile_featureColor);
  5182. out_FragColor.a *= tile_featureColor.a;
  5183. float highlight = ceil(tile_colorBlend);
  5184. out_FragColor.rgb *= mix(tile_featureColor.rgb, vec3(1.0), highlight);
  5185. }
  5186. `:`${e}void tile_color(vec4 tile_featureColor)
  5187. {
  5188. tile_main();
  5189. }
  5190. `}function LXe(e,t){let n=`texture(${t}`,i=0,o=e.indexOf(n,i),r;for(;o>-1;){let s=0;for(let l=o;l<e.length;++l){let u=e.charAt(l);if(u==="(")++s;else if(u===")"&&(--s,s===0)){r=l+1;break}}let c=`tile_diffuse_final(${e.slice(o,r)}, tile_diffuse)`;e=e.slice(0,o)+c+e.slice(r),i=o+c.length,o=e.indexOf(n,i)}return e}function Qee(e,t,n){if(!d(t))return zee(e,n);let i=new RegExp(`(uniform|attribute|in)\\s+(vec[34]|sampler2D)\\s+${t};`),o=e.match(i);if(!d(o))return zee(e,n);let r=o[0],s=o[2];e=Ye.replaceMain(e,"tile_main"),e=e.replace(r,"");let a=`bool isWhite(vec3 color)
  5191. {
  5192. return all(greaterThan(color, vec3(1.0 - czm_epsilon3)));
  5193. }
  5194. vec4 tile_diffuse_final(vec4 sourceDiffuse, vec4 tileDiffuse)
  5195. {
  5196. vec4 blendDiffuse = mix(sourceDiffuse, tileDiffuse, tile_colorBlend);
  5197. vec4 diffuse = isWhite(tileDiffuse.rgb) ? sourceDiffuse : blendDiffuse;
  5198. return vec4(diffuse.rgb, sourceDiffuse.a);
  5199. }
  5200. `,c=` tile_featureColor = czm_gammaCorrect(tile_featureColor);
  5201. out_FragColor.a *= tile_featureColor.a;
  5202. float highlight = ceil(tile_colorBlend);
  5203. out_FragColor.rgb *= mix(tile_featureColor.rgb, vec3(1.0), highlight);
  5204. `,l;if(s==="vec3"||s==="vec4"){let u=s==="vec3"?`vec4(${t}, 1.0)`:t,m=s==="vec3"?"tile_diffuse.xyz":"tile_diffuse";i=new RegExp(t,"g"),e=e.replace(i,m),l=` vec4 source = ${u};
  5205. tile_diffuse = tile_diffuse_final(source, tile_featureColor);
  5206. tile_main();
  5207. `}else s==="sampler2D"&&(e=LXe(e,t),l=` tile_diffuse = tile_featureColor;
  5208. tile_main();
  5209. `);return e=`uniform float tile_colorBlend;
  5210. vec4 tile_diffuse = vec4(1.0);
  5211. ${a}${r}
  5212. ${e}
  5213. void tile_color(vec4 tile_featureColor)
  5214. {
  5215. ${l}`,n&&(e+=c),e+=`}
  5216. `,e}lo.prototype.getFragmentShaderCallback=function(e,t,n){if(this.featuresLength!==0)return function(i){return i=Qee(i,t,!0),kt.maximumVertexTextureImageUnits>0?(i+=`uniform sampler2D tile_pickTexture;
  5217. in vec2 tile_featureSt;
  5218. in vec4 tile_featureColor;
  5219. void main()
  5220. {
  5221. tile_color(tile_featureColor);
  5222. `,n&&(i+=` out_FragColor.rgb *= out_FragColor.a;
  5223. `),i+="}"):(e&&(i+=`uniform bool tile_translucentCommand;
  5224. `),i+=`uniform sampler2D tile_pickTexture;
  5225. uniform sampler2D tile_batchTexture;
  5226. in vec2 tile_featureSt;
  5227. void main()
  5228. {
  5229. vec4 featureProperties = texture(tile_batchTexture, tile_featureSt);
  5230. if (featureProperties.a == 0.0) {
  5231. discard;
  5232. }
  5233. `,e&&(i+=` bool isStyleTranslucent = (featureProperties.a != 1.0);
  5234. if (czm_pass == czm_passTranslucent)
  5235. {
  5236. if (!isStyleTranslucent && !tile_translucentCommand)
  5237. {
  5238. discard;
  5239. }
  5240. }
  5241. else
  5242. {
  5243. if (isStyleTranslucent)
  5244. {
  5245. discard;
  5246. }
  5247. }
  5248. `),i+=` tile_color(featureProperties);
  5249. `,n&&(i+=` out_FragColor.rgb *= out_FragColor.a;
  5250. `),i+=`}
  5251. `),i}};lo.prototype.getClassificationFragmentShaderCallback=function(){if(this.featuresLength!==0)return function(e){return e=Ye.replaceMain(e,"tile_main"),kt.maximumVertexTextureImageUnits>0?e+=`uniform sampler2D tile_pickTexture;
  5252. in vec2 tile_featureSt;
  5253. in vec4 tile_featureColor;
  5254. void main()
  5255. {
  5256. tile_main();
  5257. out_FragColor = tile_featureColor;
  5258. out_FragColor.rgb *= out_FragColor.a;
  5259. }`:e+=`uniform sampler2D tile_batchTexture;
  5260. uniform sampler2D tile_pickTexture;
  5261. in vec2 tile_featureSt;
  5262. void main()
  5263. {
  5264. tile_main();
  5265. vec4 featureProperties = texture(tile_batchTexture, tile_featureSt);
  5266. if (featureProperties.a == 0.0) {
  5267. discard;
  5268. }
  5269. out_FragColor = featureProperties;
  5270. out_FragColor.rgb *= out_FragColor.a;
  5271. }
  5272. `,e}};function RXe(e){let t=e._content.tileset,n=t.colorBlendMode,i=t.colorBlendAmount;if(n===hl.HIGHLIGHT)return 0;if(n===hl.REPLACE)return 1;if(n===hl.MIX)return W.clamp(i,W.EPSILON4,1)}lo.prototype.getUniformMapCallback=function(){if(this.featuresLength===0)return;let e=this;return function(t){return xt(t,{tile_batchTexture:function(){return g(e._batchTexture.batchTexture,e._batchTexture.defaultTexture)},tile_textureDimensions:function(){return e._batchTexture.textureDimensions},tile_textureStep:function(){return e._batchTexture.textureStep},tile_colorBlend:function(){return RXe(e)},tile_pickTexture:function(){return e._batchTexture.pickTexture}})}};lo.prototype.getPickId=function(){return"texture(tile_pickTexture, tile_featureSt)"};var gb={ALL_OPAQUE:0,ALL_TRANSLUCENT:1,OPAQUE_AND_TRANSLUCENT:2};lo.prototype.addDerivedCommands=function(e,t){let n=e.commandList,i=n.length,o=this._content._tile,r=o._finalResolution,s=o.tileset,a=s.isSkippingLevelOfDetail&&s.hasMixedContent&&e.context.stencilBuffer,c=ZXe(this);for(let l=t;l<i;++l){let u=n[l];if(u.pass===Re.COMPUTE)continue;let m=u.derivedCommands.tileset;(!d(m)||u.dirty)&&(m={},u.derivedCommands.tileset=m,m.originalCommand=GXe(u),u.dirty=!1);let p=m.originalCommand;c!==gb.ALL_OPAQUE&&u.pass!==Re.TRANSLUCENT&&(d(m.translucent)||(m.translucent=EXe(p))),c!==gb.ALL_TRANSLUCENT&&u.pass!==Re.TRANSLUCENT&&(d(m.opaque)||(m.opaque=XXe(p)),a&&(r||(d(m.zback)||(m.zback=WXe(e.context,p)),s._backfaceCommands.push(m.zback)),(!d(m.stencil)||o._selectionDepth!==vXe(m.stencil))&&(u.renderState.depthMask?m.stencil=PXe(p,o._selectionDepth):m.stencil=m.opaque)));let y=a?m.stencil:m.opaque,f=m.translucent;u.pass!==Re.TRANSLUCENT?(c===gb.ALL_OPAQUE&&(n[l]=y),c===gb.ALL_TRANSLUCENT&&(n[l]=f),c===gb.OPAQUE_AND_TRANSLUCENT&&(n[l]=y,n.push(f))):n[l]=p}};function ZXe(e){let t=e._batchTexture.translucentFeaturesLength;return t===0?gb.ALL_OPAQUE:t===e.featuresLength?gb.ALL_TRANSLUCENT:gb.OPAQUE_AND_TRANSLUCENT}function GXe(e){let t=nt.shallowClone(e),n=t.pass===Re.TRANSLUCENT;return t.uniformMap=d(t.uniformMap)?t.uniformMap:{},t.uniformMap.tile_translucentCommand=function(){return n},t}function EXe(e){let t=nt.shallowClone(e);return t.pass=Re.TRANSLUCENT,t.renderState=wXe(e.renderState),t}function XXe(e){let t=nt.shallowClone(e);return t.renderState=FXe(e.renderState),t}function IXe(e,t){let n=e.shaderCache.getDerivedShaderProgram(t,"zBackfaceLogDepth");if(!d(n)){let i=t.fragmentShaderSource.clone();i.defines=d(i.defines)?i.defines.slice(0):[],i.defines.push("POLYGON_OFFSET"),n=e.shaderCache.createDerivedShaderProgram(t,"zBackfaceLogDepth",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:i,attributeLocations:t._attributeLocations})}return n}function WXe(e,t){let n=nt.shallowClone(t),i=Ke(n.renderState,!0);i.cull.enabled=!0,i.cull.face=bi.FRONT,i.colorMask={red:!1,green:!1,blue:!1,alpha:!1},i.polygonOffset={enabled:!0,factor:5,units:5},i.stencilTest=Ft.setCesium3DTileBit(),i.stencilMask=Ft.CESIUM_3D_TILE_MASK,n.renderState=De.fromCache(i),n.castShadows=!1,n.receiveShadows=!1,n.uniformMap=Ke(t.uniformMap);let o=new D(5,5);return n.uniformMap.u_polygonOffset=function(){return o},n.shaderProgram=IXe(e,t.shaderProgram),n}function PXe(e,t){let n=nt.shallowClone(e),i=Ke(n.renderState,!0);return i.stencilTest.enabled=!0,i.stencilTest.mask=Ft.SKIP_LOD_MASK,i.stencilTest.reference=Ft.CESIUM_3D_TILE_MASK|t<<Ft.SKIP_LOD_BIT_SHIFT,i.stencilTest.frontFunction=Dn.GREATER_OR_EQUAL,i.stencilTest.frontOperation.zPass=ht.REPLACE,i.stencilTest.backFunction=Dn.GREATER_OR_EQUAL,i.stencilTest.backOperation.zPass=ht.REPLACE,i.stencilMask=Ft.CESIUM_3D_TILE_MASK|Ft.SKIP_LOD_MASK,n.renderState=De.fromCache(i),n}function vXe(e){return(e.renderState.stencilTest.reference&Ft.SKIP_LOD_MASK)>>>Ft.SKIP_LOD_BIT_SHIFT}function wXe(e){let t=Ke(e,!0);return t.cull.enabled=!1,t.depthTest.enabled=!0,t.depthMask=!1,t.blending=dn.ALPHA_BLEND,t.stencilTest=Ft.setCesium3DTileBit(),t.stencilMask=Ft.CESIUM_3D_TILE_MASK,De.fromCache(t)}function FXe(e){let t=Ke(e,!0);return t.stencilTest=Ft.setCesium3DTileBit(),t.stencilMask=Ft.CESIUM_3D_TILE_MASK,De.fromCache(t)}lo.prototype.update=function(e,t){this._batchTexture.update(e,t)};lo.prototype.isDestroyed=function(){return!1};lo.prototype.destroy=function(){return this._batchTexture=this._batchTexture&&this._batchTexture.destroy(),ue(this)};var bp=lo;var B8t=T(S(),1);var Pjt=T(S(),1);function AXe(e){this.offset=e.offset,this.count=e.count,this.color=e.color,this.batchIds=e.batchIds}var Dh=AXe;var X8t=T(S(),1);var wjt=T(S(),1),RS=`in vec3 position;
  5273. in float a_batchId;
  5274. uniform mat4 u_modifiedModelViewProjection;
  5275. void main()
  5276. {
  5277. gl_Position = czm_depthClamp(u_modifiedModelViewProjection * vec4(position, 1.0));
  5278. }
  5279. `;var Njt=T(S(),1);function eu(e,t){this._content=e,this._batchId=t,this._color=void 0}Object.defineProperties(eu.prototype,{show:{get:function(){return this._content.batchTable.getShow(this._batchId)},set:function(e){this._content.batchTable.setShow(this._batchId,e)}},color:{get:function(){return d(this._color)||(this._color=new Y),this._content.batchTable.getColor(this._batchId,this._color)},set:function(e){this._content.batchTable.setColor(this._batchId,e)}},polylinePositions:{get:function(){if(d(this._content.getPolylinePositions))return this._content.getPolylinePositions(this._batchId)}},content:{get:function(){return this._content}},tileset:{get:function(){return this._content.tileset}},primitive:{get:function(){return this._content.tileset}},featureId:{get:function(){return this._batchId}},pickId:{get:function(){return this._content.batchTable.getPickColor(this._batchId)}}});eu.prototype.hasProperty=function(e){return this._content.batchTable.hasProperty(this._batchId,e)};eu.prototype.getPropertyIds=function(e){return this._content.batchTable.getPropertyIds(this._batchId,e)};eu.prototype.getProperty=function(e){return this._content.batchTable.getProperty(this._batchId,e)};eu.getPropertyInherited=function(e,t,n){let i=e.batchTable;if(d(i)){if(i.hasPropertyBySemantic(t,n))return i.getPropertyBySemantic(t,n);if(i.hasProperty(t,n))return i.getProperty(t,n)}let o=e.metadata;if(d(o)){if(o.hasPropertyBySemantic(n))return o.getPropertyBySemantic(n);if(o.hasProperty(n))return o.getProperty(n)}let r=e.tile,s=r.metadata;if(d(s)){if(s.hasPropertyBySemantic(n))return s.getPropertyBySemantic(n);if(s.hasProperty(n))return s.getProperty(n)}let a;if(d(r.implicitSubtree)&&(a=r.implicitSubtree.metadata),d(a)){if(a.hasPropertyBySemantic(n))return a.getPropertyBySemantic(n);if(a.hasProperty(n))return a.getProperty(n)}let c=d(e.group)?e.group.metadata:void 0;if(d(c)){if(c.hasPropertyBySemantic(n))return c.getPropertyBySemantic(n);if(c.hasProperty(n))return c.getProperty(n)}let l=e.tileset.metadata;if(d(l)){if(l.hasPropertyBySemantic(n))return l.getPropertyBySemantic(n);if(l.hasProperty(n))return l.getProperty(n)}};eu.prototype.getPropertyInherited=function(e){return eu.getPropertyInherited(this._content,this._batchId,e)};eu.prototype.setProperty=function(e,t){this._content.batchTable.setProperty(this._batchId,e,t),this._content.featurePropertiesDirty=!0};eu.prototype.isExactClass=function(e){return this._content.batchTable.isExactClass(this._batchId,e)};eu.prototype.isClass=function(e){return this._content.batchTable.isClass(this._batchId,e)};eu.prototype.getExactClassName=function(){return this._content.batchTable.getExactClassName(this._batchId)};var Ts=eu;var e8t=T(S(),1);var kjt=T(S(),1),iY=class{add(t,n,i){if(typeof arguments[0]!="string")for(let o in arguments[0])this.add(o,arguments[0][o],arguments[1]);else(Array.isArray(t)?t:[t]).forEach(function(o){this[o]=this[o]||[],n&&this[o][i?"unshift":"push"](n)},this)}run(t,n){this[t]=this[t]||[],this[t].forEach(function(i){i.call(n&&n.context?n.context:n,n)})}},oY=class{constructor(t){this.jsep=t,this.registered={}}register(...t){t.forEach(n=>{if(typeof n!="object"||!n.name||!n.init)throw new Error("Invalid JSEP plugin format");this.registered[n.name]||(n.init(this.jsep),this.registered[n.name]=n)})}},fl=class e{static get version(){return"1.3.8"}static toString(){return"JavaScript Expression Parser (JSEP) v"+e.version}static addUnaryOp(t){return e.max_unop_len=Math.max(t.length,e.max_unop_len),e.unary_ops[t]=1,e}static addBinaryOp(t,n,i){return e.max_binop_len=Math.max(t.length,e.max_binop_len),e.binary_ops[t]=n,i?e.right_associative.add(t):e.right_associative.delete(t),e}static addIdentifierChar(t){return e.additional_identifier_chars.add(t),e}static addLiteral(t,n){return e.literals[t]=n,e}static removeUnaryOp(t){return delete e.unary_ops[t],t.length===e.max_unop_len&&(e.max_unop_len=e.getMaxKeyLen(e.unary_ops)),e}static removeAllUnaryOps(){return e.unary_ops={},e.max_unop_len=0,e}static removeIdentifierChar(t){return e.additional_identifier_chars.delete(t),e}static removeBinaryOp(t){return delete e.binary_ops[t],t.length===e.max_binop_len&&(e.max_binop_len=e.getMaxKeyLen(e.binary_ops)),e.right_associative.delete(t),e}static removeAllBinaryOps(){return e.binary_ops={},e.max_binop_len=0,e}static removeLiteral(t){return delete e.literals[t],e}static removeAllLiterals(){return e.literals={},e}get char(){return this.expr.charAt(this.index)}get code(){return this.expr.charCodeAt(this.index)}constructor(t){this.expr=t,this.index=0}static parse(t){return new e(t).parse()}static getMaxKeyLen(t){return Math.max(0,...Object.keys(t).map(n=>n.length))}static isDecimalDigit(t){return t>=48&&t<=57}static binaryPrecedence(t){return e.binary_ops[t]||0}static isIdentifierStart(t){return t>=65&&t<=90||t>=97&&t<=122||t>=128&&!e.binary_ops[String.fromCharCode(t)]||e.additional_identifier_chars.has(String.fromCharCode(t))}static isIdentifierPart(t){return e.isIdentifierStart(t)||e.isDecimalDigit(t)}throwError(t){let n=new Error(t+" at character "+this.index);throw n.index=this.index,n.description=t,n}runHook(t,n){if(e.hooks[t]){let i={context:this,node:n};return e.hooks.run(t,i),i.node}return n}searchHook(t){if(e.hooks[t]){let n={context:this};return e.hooks[t].find(function(i){return i.call(n.context,n),n.node}),n.node}}gobbleSpaces(){let t=this.code;for(;t===e.SPACE_CODE||t===e.TAB_CODE||t===e.LF_CODE||t===e.CR_CODE;)t=this.expr.charCodeAt(++this.index);this.runHook("gobble-spaces")}parse(){this.runHook("before-all");let t=this.gobbleExpressions(),n=t.length===1?t[0]:{type:e.COMPOUND,body:t};return this.runHook("after-all",n)}gobbleExpressions(t){let n=[],i,o;for(;this.index<this.expr.length;)if(i=this.code,i===e.SEMCOL_CODE||i===e.COMMA_CODE)this.index++;else if(o=this.gobbleExpression())n.push(o);else if(this.index<this.expr.length){if(i===t)break;this.throwError('Unexpected "'+this.char+'"')}return n}gobbleExpression(){let t=this.searchHook("gobble-expression")||this.gobbleBinaryExpression();return this.gobbleSpaces(),this.runHook("after-expression",t)}gobbleBinaryOp(){this.gobbleSpaces();let t=this.expr.substr(this.index,e.max_binop_len),n=t.length;for(;n>0;){if(e.binary_ops.hasOwnProperty(t)&&(!e.isIdentifierStart(this.code)||this.index+t.length<this.expr.length&&!e.isIdentifierPart(this.expr.charCodeAt(this.index+t.length))))return this.index+=n,t;t=t.substr(0,--n)}return!1}gobbleBinaryExpression(){let t,n,i,o,r,s,a,c,l;if(s=this.gobbleToken(),!s||(n=this.gobbleBinaryOp(),!n))return s;for(r={value:n,prec:e.binaryPrecedence(n),right_a:e.right_associative.has(n)},a=this.gobbleToken(),a||this.throwError("Expected expression after "+n),o=[s,r,a];n=this.gobbleBinaryOp();){if(i=e.binaryPrecedence(n),i===0){this.index-=n.length;break}r={value:n,prec:i,right_a:e.right_associative.has(n)},l=n;let u=m=>r.right_a&&m.right_a?i>m.prec:i<=m.prec;for(;o.length>2&&u(o[o.length-2]);)a=o.pop(),n=o.pop().value,s=o.pop(),t={type:e.BINARY_EXP,operator:n,left:s,right:a},o.push(t);t=this.gobbleToken(),t||this.throwError("Expected expression after "+l),o.push(r,t)}for(c=o.length-1,t=o[c];c>1;)t={type:e.BINARY_EXP,operator:o[c-1].value,left:o[c-2],right:t},c-=2;return t}gobbleToken(){let t,n,i,o;if(this.gobbleSpaces(),o=this.searchHook("gobble-token"),o)return this.runHook("after-token",o);if(t=this.code,e.isDecimalDigit(t)||t===e.PERIOD_CODE)return this.gobbleNumericLiteral();if(t===e.SQUOTE_CODE||t===e.DQUOTE_CODE)o=this.gobbleStringLiteral();else if(t===e.OBRACK_CODE)o=this.gobbleArray();else{for(n=this.expr.substr(this.index,e.max_unop_len),i=n.length;i>0;){if(e.unary_ops.hasOwnProperty(n)&&(!e.isIdentifierStart(this.code)||this.index+n.length<this.expr.length&&!e.isIdentifierPart(this.expr.charCodeAt(this.index+n.length)))){this.index+=i;let r=this.gobbleToken();return r||this.throwError("missing unaryOp argument"),this.runHook("after-token",{type:e.UNARY_EXP,operator:n,argument:r,prefix:!0})}n=n.substr(0,--i)}e.isIdentifierStart(t)?(o=this.gobbleIdentifier(),e.literals.hasOwnProperty(o.name)?o={type:e.LITERAL,value:e.literals[o.name],raw:o.name}:o.name===e.this_str&&(o={type:e.THIS_EXP})):t===e.OPAREN_CODE&&(o=this.gobbleGroup())}return o?(o=this.gobbleTokenProperty(o),this.runHook("after-token",o)):this.runHook("after-token",!1)}gobbleTokenProperty(t){this.gobbleSpaces();let n=this.code;for(;n===e.PERIOD_CODE||n===e.OBRACK_CODE||n===e.OPAREN_CODE||n===e.QUMARK_CODE;){let i;if(n===e.QUMARK_CODE){if(this.expr.charCodeAt(this.index+1)!==e.PERIOD_CODE)break;i=!0,this.index+=2,this.gobbleSpaces(),n=this.code}this.index++,n===e.OBRACK_CODE?(t={type:e.MEMBER_EXP,computed:!0,object:t,property:this.gobbleExpression()},this.gobbleSpaces(),n=this.code,n!==e.CBRACK_CODE&&this.throwError("Unclosed ["),this.index++):n===e.OPAREN_CODE?t={type:e.CALL_EXP,arguments:this.gobbleArguments(e.CPAREN_CODE),callee:t}:(n===e.PERIOD_CODE||i)&&(i&&this.index--,this.gobbleSpaces(),t={type:e.MEMBER_EXP,computed:!1,object:t,property:this.gobbleIdentifier()}),i&&(t.optional=!0),this.gobbleSpaces(),n=this.code}return t}gobbleNumericLiteral(){let t="",n,i;for(;e.isDecimalDigit(this.code);)t+=this.expr.charAt(this.index++);if(this.code===e.PERIOD_CODE)for(t+=this.expr.charAt(this.index++);e.isDecimalDigit(this.code);)t+=this.expr.charAt(this.index++);if(n=this.char,n==="e"||n==="E"){for(t+=this.expr.charAt(this.index++),n=this.char,(n==="+"||n==="-")&&(t+=this.expr.charAt(this.index++));e.isDecimalDigit(this.code);)t+=this.expr.charAt(this.index++);e.isDecimalDigit(this.expr.charCodeAt(this.index-1))||this.throwError("Expected exponent ("+t+this.char+")")}return i=this.code,e.isIdentifierStart(i)?this.throwError("Variable names cannot start with a number ("+t+this.char+")"):(i===e.PERIOD_CODE||t.length===1&&t.charCodeAt(0)===e.PERIOD_CODE)&&this.throwError("Unexpected period"),{type:e.LITERAL,value:parseFloat(t),raw:t}}gobbleStringLiteral(){let t="",n=this.index,i=this.expr.charAt(this.index++),o=!1;for(;this.index<this.expr.length;){let r=this.expr.charAt(this.index++);if(r===i){o=!0;break}else if(r==="\\")switch(r=this.expr.charAt(this.index++),r){case"n":t+=`
  5280. `;break;case"r":t+="\r";break;case"t":t+=" ";break;case"b":t+="\b";break;case"f":t+="\f";break;case"v":t+="\v";break;default:t+=r}else t+=r}return o||this.throwError('Unclosed quote after "'+t+'"'),{type:e.LITERAL,value:t,raw:this.expr.substring(n,this.index)}}gobbleIdentifier(){let t=this.code,n=this.index;for(e.isIdentifierStart(t)?this.index++:this.throwError("Unexpected "+this.char);this.index<this.expr.length&&(t=this.code,e.isIdentifierPart(t));)this.index++;return{type:e.IDENTIFIER,name:this.expr.slice(n,this.index)}}gobbleArguments(t){let n=[],i=!1,o=0;for(;this.index<this.expr.length;){this.gobbleSpaces();let r=this.code;if(r===t){i=!0,this.index++,t===e.CPAREN_CODE&&o&&o>=n.length&&this.throwError("Unexpected token "+String.fromCharCode(t));break}else if(r===e.COMMA_CODE){if(this.index++,o++,o!==n.length){if(t===e.CPAREN_CODE)this.throwError("Unexpected token ,");else if(t===e.CBRACK_CODE)for(let s=n.length;s<o;s++)n.push(null)}}else if(n.length!==o&&o!==0)this.throwError("Expected comma");else{let s=this.gobbleExpression();(!s||s.type===e.COMPOUND)&&this.throwError("Expected comma"),n.push(s)}}return i||this.throwError("Expected "+String.fromCharCode(t)),n}gobbleGroup(){this.index++;let t=this.gobbleExpressions(e.CPAREN_CODE);if(this.code===e.CPAREN_CODE)return this.index++,t.length===1?t[0]:t.length?{type:e.SEQUENCE_EXP,expressions:t}:!1;this.throwError("Unclosed (")}gobbleArray(){return this.index++,{type:e.ARRAY_EXP,elements:this.gobbleArguments(e.CBRACK_CODE)}}},MXe=new iY;Object.assign(fl,{hooks:MXe,plugins:new oY(fl),COMPOUND:"Compound",SEQUENCE_EXP:"SequenceExpression",IDENTIFIER:"Identifier",MEMBER_EXP:"MemberExpression",LITERAL:"Literal",THIS_EXP:"ThisExpression",CALL_EXP:"CallExpression",UNARY_EXP:"UnaryExpression",BINARY_EXP:"BinaryExpression",ARRAY_EXP:"ArrayExpression",TAB_CODE:9,LF_CODE:10,CR_CODE:13,SPACE_CODE:32,PERIOD_CODE:46,COMMA_CODE:44,SQUOTE_CODE:39,DQUOTE_CODE:34,OPAREN_CODE:40,CPAREN_CODE:41,OBRACK_CODE:91,CBRACK_CODE:93,QUMARK_CODE:63,SEMCOL_CODE:59,COLON_CODE:58,unary_ops:{"-":1,"!":1,"~":1,"+":1},binary_ops:{"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10},right_associative:new Set,additional_identifier_chars:new Set(["$","_"]),literals:{true:!0,false:!1,null:null},this_str:"this"});fl.max_unop_len=fl.getMaxKeyLen(fl.unary_ops);fl.max_binop_len=fl.getMaxKeyLen(fl.binary_ops);var xb=e=>new fl(e).parse(),NXe=Object.getOwnPropertyNames(fl);NXe.forEach(e=>{xb[e]===void 0&&e!=="prototype"&&(xb[e]=fl[e])});xb.Jsep=fl;var UXe="ConditionalExpression",kXe={name:"ternary",init(e){e.hooks.add("after-expression",function(n){if(n.node&&this.code===e.QUMARK_CODE){this.index++;let i=n.node,o=this.gobbleExpression();if(o||this.throwError("Expected expression"),this.gobbleSpaces(),this.code===e.COLON_CODE){this.index++;let r=this.gobbleExpression();if(r||this.throwError("Expected expression"),n.node={type:UXe,test:i,consequent:o,alternate:r},i.operator&&e.binary_ops[i.operator]<=.9){let s=i;for(;s.right.operator&&e.binary_ops[s.right.operator]<=.9;)s=s.right;n.node.test=s.right,s.right=n.node,n.node=i}}else this.throwError("Expected :")}})}};xb.plugins.register(kXe);var Bjt=T(S(),1),DXe={VARIABLE:0,UNARY:1,BINARY:2,TERNARY:3,CONDITIONAL:4,MEMBER:5,FUNCTION_CALL:6,ARRAY:7,REGEX:8,VARIABLE_IN_STRING:9,LITERAL_NULL:10,LITERAL_BOOLEAN:11,LITERAL_NUMBER:12,LITERAL_STRING:13,LITERAL_COLOR:14,LITERAL_VECTOR:15,LITERAL_REGEX:16,LITERAL_UNDEFINED:17,BUILTIN_VARIABLE:18},ft=Object.freeze(DXe);function ym(e,t){this._expression=e,e=tIe(e,t),e=iIe(nIe(e)),xb.addBinaryOp("=~",0),xb.addBinaryOp("!~",0);let n;try{n=xb(e)}catch(i){throw new me(i)}this._runtimeAst=Ci(this,n)}Object.defineProperties(ym.prototype,{expression:{get:function(){return this._expression}}});var Pn={arrayIndex:0,arrayArray:[[]],cartesian2Index:0,cartesian3Index:0,cartesian4Index:0,cartesian2Array:[new D],cartesian3Array:[new h],cartesian4Array:[new se],reset:function(){this.arrayIndex=0,this.cartesian2Index=0,this.cartesian3Index=0,this.cartesian4Index=0},getArray:function(){this.arrayIndex>=this.arrayArray.length&&this.arrayArray.push([]);let e=this.arrayArray[this.arrayIndex++];return e.length=0,e},getCartesian2:function(){return this.cartesian2Index>=this.cartesian2Array.length&&this.cartesian2Array.push(new D),this.cartesian2Array[this.cartesian2Index++]},getCartesian3:function(){return this.cartesian3Index>=this.cartesian3Array.length&&this.cartesian3Array.push(new h),this.cartesian3Array[this.cartesian3Index++]},getCartesian4:function(){return this.cartesian4Index>=this.cartesian4Array.length&&this.cartesian4Array.push(new se),this.cartesian4Array[this.cartesian4Index++]}};ym.prototype.evaluate=function(e,t){Pn.reset();let n=this._runtimeAst.evaluate(e);return t instanceof Y&&n instanceof se?Y.fromCartesian4(n,t):n instanceof D||n instanceof h||n instanceof se?n.clone(t):n};ym.prototype.evaluateColor=function(e,t){Pn.reset();let n=this._runtimeAst.evaluate(e);return Y.fromCartesian4(n,t)};ym.prototype.getShaderFunction=function(e,t,n,i){let o=this.getShaderExpression(t,n);return o=`${i} ${e}
  5281. {
  5282. return ${o};
  5283. }
  5284. `,o};ym.prototype.getShaderExpression=function(e,t){return this._runtimeAst.getShaderExpression(e,t)};ym.prototype.getVariables=function(){let e=[];return this._runtimeAst.getVariables(e),e=e.filter(function(t,n,i){return i.indexOf(t)===n}),e};var BXe=["!","-","+"],jee=["+","-","*","/","%","===","!==",">",">=","<","<=","&&","||","!~","=~"],gM=/\${(.*?)}/g,YXe=/\\/g,OXe="@#%",KXe=/@#%/g,xM=new Y,_M={abs:Ss(Math.abs),sqrt:Ss(Math.sqrt),cos:Ss(Math.cos),sin:Ss(Math.sin),tan:Ss(Math.tan),acos:Ss(Math.acos),asin:Ss(Math.asin),atan:Ss(Math.atan),radians:Ss(W.toRadians),degrees:Ss(W.toDegrees),sign:Ss(W.sign),floor:Ss(Math.floor),ceil:Ss(Math.ceil),round:Ss(Math.round),exp:Ss(Math.exp),exp2:Ss(zXe),log:Ss(Math.log),log2:Ss(JXe),fract:Ss(HXe),length:QXe,normalize:jXe},TM={atan2:bM(Math.atan2,!1),pow:bM(Math.pow,!1),min:bM(Math.min,!0),max:bM(Math.max,!0),distance:qXe,dot:$Xe,cross:eIe},aY={clamp:qee(W.clamp,!0),mix:qee(W.lerp,!0)};function HXe(e){return e-Math.floor(e)}function zXe(e){return Math.pow(2,e)}function JXe(e){return W.log2(e)}function Ss(e){return function(t,n){if(typeof n=="number")return e(n);if(n instanceof D)return D.fromElements(e(n.x),e(n.y),Pn.getCartesian2());if(n instanceof h)return h.fromElements(e(n.x),e(n.y),e(n.z),Pn.getCartesian3());if(n instanceof se)return se.fromElements(e(n.x),e(n.y),e(n.z),e(n.w),Pn.getCartesian4());throw new me(`Function "${t}" requires a vector or number argument. Argument is ${n}.`)}}function bM(e,t){return function(n,i,o){if(t&&typeof o=="number"){if(typeof i=="number")return e(i,o);if(i instanceof D)return D.fromElements(e(i.x,o),e(i.y,o),Pn.getCartesian2());if(i instanceof h)return h.fromElements(e(i.x,o),e(i.y,o),e(i.z,o),Pn.getCartesian3());if(i instanceof se)return se.fromElements(e(i.x,o),e(i.y,o),e(i.z,o),e(i.w,o),Pn.getCartesian4())}if(typeof i=="number"&&typeof o=="number")return e(i,o);if(i instanceof D&&o instanceof D)return D.fromElements(e(i.x,o.x),e(i.y,o.y),Pn.getCartesian2());if(i instanceof h&&o instanceof h)return h.fromElements(e(i.x,o.x),e(i.y,o.y),e(i.z,o.z),Pn.getCartesian3());if(i instanceof se&&o instanceof se)return se.fromElements(e(i.x,o.x),e(i.y,o.y),e(i.z,o.z),e(i.w,o.w),Pn.getCartesian4());throw new me(`Function "${n}" requires vector or number arguments of matching types. Arguments are ${i} and ${o}.`)}}function qee(e,t){return function(n,i,o,r){if(t&&typeof r=="number"){if(typeof i=="number"&&typeof o=="number")return e(i,o,r);if(i instanceof D&&o instanceof D)return D.fromElements(e(i.x,o.x,r),e(i.y,o.y,r),Pn.getCartesian2());if(i instanceof h&&o instanceof h)return h.fromElements(e(i.x,o.x,r),e(i.y,o.y,r),e(i.z,o.z,r),Pn.getCartesian3());if(i instanceof se&&o instanceof se)return se.fromElements(e(i.x,o.x,r),e(i.y,o.y,r),e(i.z,o.z,r),e(i.w,o.w,r),Pn.getCartesian4())}if(typeof i=="number"&&typeof o=="number"&&typeof r=="number")return e(i,o,r);if(i instanceof D&&o instanceof D&&r instanceof D)return D.fromElements(e(i.x,o.x,r.x),e(i.y,o.y,r.y),Pn.getCartesian2());if(i instanceof h&&o instanceof h&&r instanceof h)return h.fromElements(e(i.x,o.x,r.x),e(i.y,o.y,r.y),e(i.z,o.z,r.z),Pn.getCartesian3());if(i instanceof se&&o instanceof se&&r instanceof se)return se.fromElements(e(i.x,o.x,r.x),e(i.y,o.y,r.y),e(i.z,o.z,r.z),e(i.w,o.w,r.w),Pn.getCartesian4());throw new me(`Function "${n}" requires vector or number arguments of matching types. Arguments are ${i}, ${o}, and ${r}.`)}}function QXe(e,t){if(typeof t=="number")return Math.abs(t);if(t instanceof D)return D.magnitude(t);if(t instanceof h)return h.magnitude(t);if(t instanceof se)return se.magnitude(t);throw new me(`Function "${e}" requires a vector or number argument. Argument is ${t}.`)}function jXe(e,t){if(typeof t=="number")return 1;if(t instanceof D)return D.normalize(t,Pn.getCartesian2());if(t instanceof h)return h.normalize(t,Pn.getCartesian3());if(t instanceof se)return se.normalize(t,Pn.getCartesian4());throw new me(`Function "${e}" requires a vector or number argument. Argument is ${t}.`)}function qXe(e,t,n){if(typeof t=="number"&&typeof n=="number")return Math.abs(t-n);if(t instanceof D&&n instanceof D)return D.distance(t,n);if(t instanceof h&&n instanceof h)return h.distance(t,n);if(t instanceof se&&n instanceof se)return se.distance(t,n);throw new me(`Function "${e}" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)}function $Xe(e,t,n){if(typeof t=="number"&&typeof n=="number")return t*n;if(t instanceof D&&n instanceof D)return D.dot(t,n);if(t instanceof h&&n instanceof h)return h.dot(t,n);if(t instanceof se&&n instanceof se)return se.dot(t,n);throw new me(`Function "${e}" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)}function eIe(e,t,n){if(t instanceof h&&n instanceof h)return h.cross(t,n,Pn.getCartesian3());throw new me(`Function "${e}" requires vec3 arguments. Arguments are ${t} and ${n}.`)}function gt(e,t,n,i,o){this._type=e,this._value=t,this._left=n,this._right=i,this._test=o,this.evaluate=void 0,hIe(this)}function tIe(e,t){if(!d(t))return e;for(let n in t)if(t.hasOwnProperty(n)){let i=new RegExp(`\\$\\{${n}\\}`,"g"),o=`(${t[n]})`;d(o)&&(e=e.replace(i,o))}return e}function nIe(e){return e.replace(YXe,OXe)}function sY(e){return e.replace(KXe,"\\")}function iIe(e){let t=e,n="",i=t.indexOf("${");for(;i>=0;){let o=t.indexOf("'"),r=t.indexOf('"'),s;if(o>=0&&o<i)s=t.indexOf("'",o+1),n+=t.substr(0,s+1),t=t.substr(s+1),i=t.indexOf("${");else if(r>=0&&r<i)s=t.indexOf('"',r+1),n+=t.substr(0,s+1),t=t.substr(s+1),i=t.indexOf("${");else{n+=t.substr(0,i);let a=t.indexOf("}");if(a<0)throw new me("Unmatched {.");n+=`czm_${t.substr(i+2,a-(i+2))}`,t=t.substr(a+1),i=t.indexOf("${")}}return n+=t,n}function oIe(e){let t=typeof e.value;if(e.value===null)return new gt(ft.LITERAL_NULL,null);if(t==="boolean")return new gt(ft.LITERAL_BOOLEAN,e.value);if(t==="number")return new gt(ft.LITERAL_NUMBER,e.value);if(t==="string")return e.value.indexOf("${")>=0?new gt(ft.VARIABLE_IN_STRING,e.value):new gt(ft.LITERAL_STRING,sY(e.value))}function rIe(e,t){let n=t.arguments,i=n.length,o,r,s,a;if(t.callee.type==="MemberExpression"){o=t.callee.property.name;let c=t.callee.object;if(o==="test"||o==="exec"){if(!d(c.callee)||c.callee.name!=="regExp")throw new me(`${o} is not a function.`);return i===0?o==="test"?new gt(ft.LITERAL_BOOLEAN,!1):new gt(ft.LITERAL_NULL,null):(s=Ci(e,c),a=Ci(e,n[0]),new gt(ft.FUNCTION_CALL,o,s,a))}else if(o==="toString")return r=Ci(e,c),new gt(ft.FUNCTION_CALL,o,r);throw new me(`Unexpected function call "${o}".`)}if(o=t.callee.name,o==="color"){if(i===0)return new gt(ft.LITERAL_COLOR,o);if(r=Ci(e,n[0]),d(n[1])){let c=Ci(e,n[1]);return new gt(ft.LITERAL_COLOR,o,[r,c])}return new gt(ft.LITERAL_COLOR,o,[r])}else if(o==="rgb"||o==="hsl"){if(i<3)throw new me(`${o} requires three arguments.`);return r=[Ci(e,n[0]),Ci(e,n[1]),Ci(e,n[2])],new gt(ft.LITERAL_COLOR,o,r)}else if(o==="rgba"||o==="hsla"){if(i<4)throw new me(`${o} requires four arguments.`);return r=[Ci(e,n[0]),Ci(e,n[1]),Ci(e,n[2]),Ci(e,n[3])],new gt(ft.LITERAL_COLOR,o,r)}else if(o==="vec2"||o==="vec3"||o==="vec4"){r=new Array(i);for(let c=0;c<i;++c)r[c]=Ci(e,n[c]);return new gt(ft.LITERAL_VECTOR,o,r)}else{if(o==="isNaN"||o==="isFinite")return i===0?o==="isNaN"?new gt(ft.LITERAL_BOOLEAN,!0):new gt(ft.LITERAL_BOOLEAN,!1):(r=Ci(e,n[0]),new gt(ft.UNARY,o,r));if(o==="isExactClass"||o==="isClass"){if(i<1||i>1)throw new me(`${o} requires exactly one argument.`);return r=Ci(e,n[0]),new gt(ft.UNARY,o,r)}else if(o==="getExactClassName"){if(i>0)throw new me(`${o} does not take any argument.`);return new gt(ft.UNARY,o)}else if(d(_M[o])){if(i!==1)throw new me(`${o} requires exactly one argument.`);return r=Ci(e,n[0]),new gt(ft.UNARY,o,r)}else if(d(TM[o])){if(i!==2)throw new me(`${o} requires exactly two arguments.`);return s=Ci(e,n[0]),a=Ci(e,n[1]),new gt(ft.BINARY,o,s,a)}else if(d(aY[o])){if(i!==3)throw new me(`${o} requires exactly three arguments.`);s=Ci(e,n[0]),a=Ci(e,n[1]);let c=Ci(e,n[2]);return new gt(ft.TERNARY,o,s,a,c)}else{if(o==="Boolean")return i===0?new gt(ft.LITERAL_BOOLEAN,!1):(r=Ci(e,n[0]),new gt(ft.UNARY,o,r));if(o==="Number")return i===0?new gt(ft.LITERAL_NUMBER,0):(r=Ci(e,n[0]),new gt(ft.UNARY,o,r));if(o==="String")return i===0?new gt(ft.LITERAL_STRING,""):(r=Ci(e,n[0]),new gt(ft.UNARY,o,r));if(o==="regExp")return sIe(e,t)}}throw new me(`Unexpected function call "${o}".`)}function sIe(e,t){let n=t.arguments;if(n.length===0)return new gt(ft.LITERAL_REGEX,new RegExp);let i=Ci(e,n[0]),o;if(n.length>1){let r=Ci(e,n[1]);if(rY(i)&&rY(r)){try{o=new RegExp(sY(String(i._value)),r._value)}catch(s){throw new me(s)}return new gt(ft.LITERAL_REGEX,o)}return new gt(ft.REGEX,i,r)}if(rY(i)){try{o=new RegExp(sY(String(i._value)))}catch(r){throw new me(r)}return new gt(ft.LITERAL_REGEX,o)}return new gt(ft.REGEX,i)}function aIe(e){if(uIe(e.name)){let t=mIe(e.name);return t.substr(0,8)==="tiles3d_"?new gt(ft.BUILTIN_VARIABLE,t):new gt(ft.VARIABLE,t)}else{if(e.name==="NaN")return new gt(ft.LITERAL_NUMBER,NaN);if(e.name==="Infinity")return new gt(ft.LITERAL_NUMBER,1/0);if(e.name==="undefined")return new gt(ft.LITERAL_UNDEFINED,void 0)}throw new me(`${e.name} is not defined.`)}function cIe(e){let t=e.property.name;if(t==="PI")return new gt(ft.LITERAL_NUMBER,Math.PI);if(t==="E")return new gt(ft.LITERAL_NUMBER,Math.E)}function lIe(e){if(e.property.name==="POSITIVE_INFINITY")return new gt(ft.LITERAL_NUMBER,Number.POSITIVE_INFINITY)}function dIe(e,t){if(t.object.name==="Math")return cIe(t);if(t.object.name==="Number")return lIe(t);let n,i=Ci(e,t.object);return t.computed?(n=Ci(e,t.property),new gt(ft.MEMBER,"brackets",i,n)):(n=new gt(ft.LITERAL_STRING,t.property.name),new gt(ft.MEMBER,"dot",i,n))}function rY(e){return e._type>=ft.LITERAL_NULL}function uIe(e){return e.substr(0,4)==="czm_"}function mIe(e){return e.substr(4)}function Ci(e,t){let n,i,o,r;if(t.type==="Literal")n=oIe(t);else if(t.type==="CallExpression")n=rIe(e,t);else if(t.type==="Identifier")n=aIe(t);else if(t.type==="UnaryExpression"){i=t.operator;let s=Ci(e,t.argument);if(BXe.indexOf(i)>-1)n=new gt(ft.UNARY,i,s);else throw new me(`Unexpected operator "${i}".`)}else if(t.type==="BinaryExpression")if(i=t.operator,o=Ci(e,t.left),r=Ci(e,t.right),jee.indexOf(i)>-1)n=new gt(ft.BINARY,i,o,r);else throw new me(`Unexpected operator "${i}".`);else if(t.type==="LogicalExpression")i=t.operator,o=Ci(e,t.left),r=Ci(e,t.right),jee.indexOf(i)>-1&&(n=new gt(ft.BINARY,i,o,r));else if(t.type==="ConditionalExpression"){let s=Ci(e,t.test);o=Ci(e,t.consequent),r=Ci(e,t.alternate),n=new gt(ft.CONDITIONAL,"?",o,r,s)}else if(t.type==="MemberExpression")n=dIe(e,t);else if(t.type==="ArrayExpression"){let s=[];for(let a=0;a<t.elements.length;a++)s[a]=Ci(e,t.elements[a]);n=new gt(ft.ARRAY,s)}else throw t.type==="Compound"?new me("Provide exactly one expression."):new me("Cannot parse expression.");return n}function hIe(e){e._type===ft.CONDITIONAL?e.evaluate=e._evaluateConditional:e._type===ft.FUNCTION_CALL?e._value==="test"?e.evaluate=e._evaluateRegExpTest:e._value==="exec"?e.evaluate=e._evaluateRegExpExec:e._value==="toString"&&(e.evaluate=e._evaluateToString):e._type===ft.UNARY?e._value==="!"?e.evaluate=e._evaluateNot:e._value==="-"?e.evaluate=e._evaluateNegative:e._value==="+"?e.evaluate=e._evaluatePositive:e._value==="isNaN"?e.evaluate=e._evaluateNaN:e._value==="isFinite"?e.evaluate=e._evaluateIsFinite:e._value==="isExactClass"?e.evaluate=e._evaluateIsExactClass:e._value==="isClass"?e.evaluate=e._evaluateIsClass:e._value==="getExactClassName"?e.evaluate=e._evaluateGetExactClassName:e._value==="Boolean"?e.evaluate=e._evaluateBooleanConversion:e._value==="Number"?e.evaluate=e._evaluateNumberConversion:e._value==="String"?e.evaluate=e._evaluateStringConversion:d(_M[e._value])&&(e.evaluate=pIe(e._value)):e._type===ft.BINARY?e._value==="+"?e.evaluate=e._evaluatePlus:e._value==="-"?e.evaluate=e._evaluateMinus:e._value==="*"?e.evaluate=e._evaluateTimes:e._value==="/"?e.evaluate=e._evaluateDivide:e._value==="%"?e.evaluate=e._evaluateMod:e._value==="==="?e.evaluate=e._evaluateEqualsStrict:e._value==="!=="?e.evaluate=e._evaluateNotEqualsStrict:e._value==="<"?e.evaluate=e._evaluateLessThan:e._value==="<="?e.evaluate=e._evaluateLessThanOrEquals:e._value===">"?e.evaluate=e._evaluateGreaterThan:e._value===">="?e.evaluate=e._evaluateGreaterThanOrEquals:e._value==="&&"?e.evaluate=e._evaluateAnd:e._value==="||"?e.evaluate=e._evaluateOr:e._value==="=~"?e.evaluate=e._evaluateRegExpMatch:e._value==="!~"?e.evaluate=e._evaluateRegExpNotMatch:d(TM[e._value])&&(e.evaluate=bIe(e._value)):e._type===ft.TERNARY?e.evaluate=yIe(e._value):e._type===ft.MEMBER?e._value==="brackets"?e.evaluate=e._evaluateMemberBrackets:e.evaluate=e._evaluateMemberDot:e._type===ft.ARRAY?e.evaluate=e._evaluateArray:e._type===ft.VARIABLE?e.evaluate=e._evaluateVariable:e._type===ft.VARIABLE_IN_STRING?e.evaluate=e._evaluateVariableString:e._type===ft.LITERAL_COLOR?e.evaluate=e._evaluateLiteralColor:e._type===ft.LITERAL_VECTOR?e.evaluate=e._evaluateLiteralVector:e._type===ft.LITERAL_STRING?e.evaluate=e._evaluateLiteralString:e._type===ft.REGEX?e.evaluate=e._evaluateRegExp:e._type===ft.BUILTIN_VARIABLE?e._value==="tiles3d_tileset_time"&&(e.evaluate=fIe):e.evaluate=e._evaluateLiteral}function fIe(e){return d(e)?e.content.tileset.timeSinceLoad:0}function pIe(e){let t=_M[e];return function(n){let i=this._left.evaluate(n);return t(e,i)}}function bIe(e){let t=TM[e];return function(n){let i=this._left.evaluate(n),o=this._right.evaluate(n);return t(e,i,o)}}function yIe(e){let t=aY[e];return function(n){let i=this._left.evaluate(n),o=this._right.evaluate(n),r=this._test.evaluate(n);return t(e,i,o,r)}}function SM(e,t){if(d(e))return e.getPropertyInherited(t)}gt.prototype._evaluateLiteral=function(){return this._value};gt.prototype._evaluateLiteralColor=function(e){let t=xM,n=this._left;if(this._value==="color")d(n)?n.length>1?(Y.fromCssColorString(n[0].evaluate(e),t),t.alpha=n[1].evaluate(e)):Y.fromCssColorString(n[0].evaluate(e),t):Y.fromBytes(255,255,255,255,t);else if(this._value==="rgb")Y.fromBytes(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),255,t);else if(this._value==="rgba"){let i=n[3].evaluate(e)*255;Y.fromBytes(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),i,t)}else this._value==="hsl"?Y.fromHsl(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),1,t):this._value==="hsla"&&Y.fromHsl(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),n[3].evaluate(e),t);return se.fromColor(t,Pn.getCartesian4())};gt.prototype._evaluateLiteralVector=function(e){let t=Pn.getArray(),n=this._value,i=this._left,o=i.length;for(let a=0;a<o;++a){let c=i[a].evaluate(e);if(typeof c=="number")t.push(c);else if(c instanceof D)t.push(c.x,c.y);else if(c instanceof h)t.push(c.x,c.y,c.z);else if(c instanceof se)t.push(c.x,c.y,c.z,c.w);else throw new me(`${n} argument must be a vector or number. Argument is ${c}.`)}let r=t.length,s=parseInt(n.charAt(3));if(r===0)throw new me(`Invalid ${n} constructor. No valid arguments.`);if(r<s&&r>1)throw new me(`Invalid ${n} constructor. Not enough arguments.`);if(r>s&&o>1)throw new me(`Invalid ${n} constructor. Too many arguments.`);if(r===1){let a=t[0];t.push(a,a,a)}if(n==="vec2")return D.fromArray(t,0,Pn.getCartesian2());if(n==="vec3")return h.fromArray(t,0,Pn.getCartesian3());if(n==="vec4")return se.fromArray(t,0,Pn.getCartesian4())};gt.prototype._evaluateLiteralString=function(){return this._value};gt.prototype._evaluateVariableString=function(e){let t=this._value,n=gM.exec(t);for(;n!==null;){let i=n[0],o=n[1],r=SM(e,o);d(r)||(r=""),t=t.replace(i,r),n=gM.exec(t)}return t};gt.prototype._evaluateVariable=function(e){return SM(e,this._value)};function hx(e){return e._value==="feature"}gt.prototype._evaluateMemberDot=function(e){if(hx(this._left))return SM(e,this._right.evaluate(e));let t=this._left.evaluate(e);if(!d(t))return;let n=this._right.evaluate(e);if(t instanceof D||t instanceof h||t instanceof se){if(n==="r")return t.x;if(n==="g")return t.y;if(n==="b")return t.z;if(n==="a")return t.w}return t[n]};gt.prototype._evaluateMemberBrackets=function(e){if(hx(this._left))return SM(e,this._right.evaluate(e));let t=this._left.evaluate(e);if(!d(t))return;let n=this._right.evaluate(e);if(t instanceof D||t instanceof h||t instanceof se){if(n===0||n==="r")return t.x;if(n===1||n==="g")return t.y;if(n===2||n==="b")return t.z;if(n===3||n==="a")return t.w}return t[n]};gt.prototype._evaluateArray=function(e){let t=[];for(let n=0;n<this._value.length;n++)t[n]=this._value[n].evaluate(e);return t};gt.prototype._evaluateNot=function(e){let t=this._left.evaluate(e);if(typeof t!="boolean")throw new me(`Operator "!" requires a boolean argument. Argument is ${t}.`);return!t};gt.prototype._evaluateNegative=function(e){let t=this._left.evaluate(e);if(t instanceof D)return D.negate(t,Pn.getCartesian2());if(t instanceof h)return h.negate(t,Pn.getCartesian3());if(t instanceof se)return se.negate(t,Pn.getCartesian4());if(typeof t=="number")return-t;throw new me(`Operator "-" requires a vector or number argument. Argument is ${t}.`)};gt.prototype._evaluatePositive=function(e){let t=this._left.evaluate(e);if(!(t instanceof D||t instanceof h||t instanceof se||typeof t=="number"))throw new me(`Operator "+" requires a vector or number argument. Argument is ${t}.`);return t};gt.prototype._evaluateLessThan=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(typeof t!="number"||typeof n!="number")throw new me(`Operator "<" requires number arguments. Arguments are ${t} and ${n}.`);return t<n};gt.prototype._evaluateLessThanOrEquals=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(typeof t!="number"||typeof n!="number")throw new me(`Operator "<=" requires number arguments. Arguments are ${t} and ${n}.`);return t<=n};gt.prototype._evaluateGreaterThan=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(typeof t!="number"||typeof n!="number")throw new me(`Operator ">" requires number arguments. Arguments are ${t} and ${n}.`);return t>n};gt.prototype._evaluateGreaterThanOrEquals=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(typeof t!="number"||typeof n!="number")throw new me(`Operator ">=" requires number arguments. Arguments are ${t} and ${n}.`);return t>=n};gt.prototype._evaluateOr=function(e){let t=this._left.evaluate(e);if(typeof t!="boolean")throw new me(`Operator "||" requires boolean arguments. First argument is ${t}.`);if(t)return!0;let n=this._right.evaluate(e);if(typeof n!="boolean")throw new me(`Operator "||" requires boolean arguments. Second argument is ${n}.`);return t||n};gt.prototype._evaluateAnd=function(e){let t=this._left.evaluate(e);if(typeof t!="boolean")throw new me(`Operator "&&" requires boolean arguments. First argument is ${t}.`);if(!t)return!1;let n=this._right.evaluate(e);if(typeof n!="boolean")throw new me(`Operator "&&" requires boolean arguments. Second argument is ${n}.`);return t&&n};gt.prototype._evaluatePlus=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof D&&t instanceof D)return D.add(t,n,Pn.getCartesian2());if(n instanceof h&&t instanceof h)return h.add(t,n,Pn.getCartesian3());if(n instanceof se&&t instanceof se)return se.add(t,n,Pn.getCartesian4());if(typeof t=="string"||typeof n=="string")return t+n;if(typeof t=="number"&&typeof n=="number")return t+n;throw new me(`Operator "+" requires vector or number arguments of matching types, or at least one string argument. Arguments are ${t} and ${n}.`)};gt.prototype._evaluateMinus=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof D&&t instanceof D)return D.subtract(t,n,Pn.getCartesian2());if(n instanceof h&&t instanceof h)return h.subtract(t,n,Pn.getCartesian3());if(n instanceof se&&t instanceof se)return se.subtract(t,n,Pn.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t-n;throw new me(`Operator "-" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)};gt.prototype._evaluateTimes=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof D&&t instanceof D)return D.multiplyComponents(t,n,Pn.getCartesian2());if(n instanceof D&&typeof t=="number")return D.multiplyByScalar(n,t,Pn.getCartesian2());if(t instanceof D&&typeof n=="number")return D.multiplyByScalar(t,n,Pn.getCartesian2());if(n instanceof h&&t instanceof h)return h.multiplyComponents(t,n,Pn.getCartesian3());if(n instanceof h&&typeof t=="number")return h.multiplyByScalar(n,t,Pn.getCartesian3());if(t instanceof h&&typeof n=="number")return h.multiplyByScalar(t,n,Pn.getCartesian3());if(n instanceof se&&t instanceof se)return se.multiplyComponents(t,n,Pn.getCartesian4());if(n instanceof se&&typeof t=="number")return se.multiplyByScalar(n,t,Pn.getCartesian4());if(t instanceof se&&typeof n=="number")return se.multiplyByScalar(t,n,Pn.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t*n;throw new me(`Operator "*" requires vector or number arguments. If both arguments are vectors they must be matching types. Arguments are ${t} and ${n}.`)};gt.prototype._evaluateDivide=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof D&&t instanceof D)return D.divideComponents(t,n,Pn.getCartesian2());if(t instanceof D&&typeof n=="number")return D.divideByScalar(t,n,Pn.getCartesian2());if(n instanceof h&&t instanceof h)return h.divideComponents(t,n,Pn.getCartesian3());if(t instanceof h&&typeof n=="number")return h.divideByScalar(t,n,Pn.getCartesian3());if(n instanceof se&&t instanceof se)return se.divideComponents(t,n,Pn.getCartesian4());if(t instanceof se&&typeof n=="number")return se.divideByScalar(t,n,Pn.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t/n;throw new me(`Operator "/" requires vector or number arguments of matching types, or a number as the second argument. Arguments are ${t} and ${n}.`)};gt.prototype._evaluateMod=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof D&&t instanceof D)return D.fromElements(t.x%n.x,t.y%n.y,Pn.getCartesian2());if(n instanceof h&&t instanceof h)return h.fromElements(t.x%n.x,t.y%n.y,t.z%n.z,Pn.getCartesian3());if(n instanceof se&&t instanceof se)return se.fromElements(t.x%n.x,t.y%n.y,t.z%n.z,t.w%n.w,Pn.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t%n;throw new me(`Operator "%" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)};gt.prototype._evaluateEqualsStrict=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);return n instanceof D&&t instanceof D||n instanceof h&&t instanceof h||n instanceof se&&t instanceof se?t.equals(n):t===n};gt.prototype._evaluateNotEqualsStrict=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);return n instanceof D&&t instanceof D||n instanceof h&&t instanceof h||n instanceof se&&t instanceof se?!t.equals(n):t!==n};gt.prototype._evaluateConditional=function(e){let t=this._test.evaluate(e);if(typeof t!="boolean")throw new me(`Conditional argument of conditional expression must be a boolean. Argument is ${t}.`);return t?this._left.evaluate(e):this._right.evaluate(e)};gt.prototype._evaluateNaN=function(e){return isNaN(this._left.evaluate(e))};gt.prototype._evaluateIsFinite=function(e){return isFinite(this._left.evaluate(e))};gt.prototype._evaluateIsExactClass=function(e){return d(e)?e.isExactClass(this._left.evaluate(e)):!1};gt.prototype._evaluateIsClass=function(e){return d(e)?e.isClass(this._left.evaluate(e)):!1};gt.prototype._evaluateGetExactClassName=function(e){if(d(e))return e.getExactClassName()};gt.prototype._evaluateBooleanConversion=function(e){return!!this._left.evaluate(e)};gt.prototype._evaluateNumberConversion=function(e){return Number(this._left.evaluate(e))};gt.prototype._evaluateStringConversion=function(e){return String(this._left.evaluate(e))};gt.prototype._evaluateRegExp=function(e){let t=this._value.evaluate(e),n="";d(this._left)&&(n=this._left.evaluate(e));let i;try{i=new RegExp(t,n)}catch(o){throw new me(o)}return i};gt.prototype._evaluateRegExpTest=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(!(t instanceof RegExp&&typeof n=="string"))throw new me(`RegExp.test requires the first argument to be a RegExp and the second argument to be a string. Arguments are ${t} and ${n}.`);return t.test(n)};gt.prototype._evaluateRegExpMatch=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(t instanceof RegExp&&typeof n=="string")return t.test(n);if(n instanceof RegExp&&typeof t=="string")return n.test(t);throw new me(`Operator "=~" requires one RegExp argument and one string argument. Arguments are ${t} and ${n}.`)};gt.prototype._evaluateRegExpNotMatch=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(t instanceof RegExp&&typeof n=="string")return!t.test(n);if(n instanceof RegExp&&typeof t=="string")return!n.test(t);throw new me(`Operator "!~" requires one RegExp argument and one string argument. Arguments are ${t} and ${n}.`)};gt.prototype._evaluateRegExpExec=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(!(t instanceof RegExp&&typeof n=="string"))throw new me(`RegExp.exec requires the first argument to be a RegExp and the second argument to be a string. Arguments are ${t} and ${n}.`);let i=t.exec(n);return d(i)?i[1]:null};gt.prototype._evaluateToString=function(e){let t=this._left.evaluate(e);if(t instanceof RegExp||t instanceof D||t instanceof h||t instanceof se)return String(t);throw new me(`Unexpected function call "${this._value}".`)};function $ee(e){let t=e._left,n=t.length;for(let a=0;a<n;++a)if(t[a]._type!==ft.LITERAL_NUMBER)return;let i=t[0]._value,o=t[1]._value,r=t[2]._value,s=n===4?t[3]._value:1;return Y.fromHsl(i,o,r,s,xM)}function ete(e){let t=e._left,n=t.length;for(let o=0;o<n;++o)if(t[o]._type!==ft.LITERAL_NUMBER)return;let i=xM;return i.red=t[0]._value/255,i.green=t[1]._value/255,i.blue=t[2]._value/255,i.alpha=n===4?t[3]._value:1,i}function _b(e){return e%1===0?e.toFixed(1):e.toString()}function gIe(e){let t=_b(e.red),n=_b(e.green),i=_b(e.blue);return`vec3(${t}, ${n}, ${i})`}function yM(e){let t=_b(e.red),n=_b(e.green),i=_b(e.blue),o=_b(e.alpha);return`vec4(${t}, ${n}, ${i}, ${o})`}function tte(e,t,n,i){let o=e.length,r=new Array(o);for(let s=0;s<o;++s)r[s]=e[s].getShaderExpression(t,n,i);return r}function nte(e,t){return d(t[e])?t[e]:ym.NULL_SENTINEL}ym.NULL_SENTINEL="czm_infinity";gt.prototype.getShaderExpression=function(e,t,n){let i,o,r,s,a=this._type,c=this._value;d(this._left)&&(Array.isArray(this._left)?o=tte(this._left,e,t,this):o=this._left.getShaderExpression(e,t,this)),d(this._right)&&(r=this._right.getShaderExpression(e,t,this)),d(this._test)&&(s=this._test.getShaderExpression(e,t,this)),Array.isArray(this._value)&&(c=tte(this._value,e,t,this));let l,u,m;switch(a){case ft.VARIABLE:return hx(this)?void 0:nte(c,e);case ft.UNARY:if(c==="Boolean")return`bool(${o})`;if(c==="Number")return`float(${o})`;if(c==="round")return`floor(${o} + 0.5)`;if(d(_M[c]))return`${c}(${o})`;if(c==="isNaN")return`(${o} != ${o})`;if(c==="isFinite")return`(abs(${o}) < czm_infinity)`;if(c==="String"||c==="isExactClass"||c==="isClass"||c==="getExactClassName")throw new me(`Error generating style shader: "${c}" is not supported.`);return c+o;case ft.BINARY:return c==="%"?`mod(${o}, ${r})`:c==="==="?`(${o} == ${r})`:c==="!=="?`(${o} != ${r})`:c==="atan2"?`atan(${o}, ${r})`:d(TM[c])?`${c}(${o}, ${r})`:`(${o} ${c} ${r})`;case ft.TERNARY:if(d(aY[c]))return`${c}(${o}, ${r}, ${s})`;break;case ft.CONDITIONAL:return`(${s} ? ${o} : ${r})`;case ft.MEMBER:return hx(this._left)?nte(r,e):r==="r"||r==="x"||r==="0.0"?`${o}[0]`:r==="g"||r==="y"||r==="1.0"?`${o}[1]`:r==="b"||r==="z"||r==="2.0"?`${o}[2]`:r==="a"||r==="w"||r==="3.0"?`${o}[3]`:`${o}[int(${r})]`;case ft.FUNCTION_CALL:throw new me(`Error generating style shader: "${c}" is not supported.`);case ft.ARRAY:if(c.length===4)return`vec4(${c[0]}, ${c[1]}, ${c[2]}, ${c[3]})`;if(c.length===3)return`vec3(${c[0]}, ${c[1]}, ${c[2]})`;if(c.length===2)return`vec2(${c[0]}, ${c[1]})`;throw new me("Error generating style shader: Invalid array length. Array length should be 2, 3, or 4.");case ft.REGEX:throw new me("Error generating style shader: Regular expressions are not supported.");case ft.VARIABLE_IN_STRING:throw new me("Error generating style shader: Converting a variable to a string is not supported.");case ft.LITERAL_NULL:return ym.NULL_SENTINEL;case ft.LITERAL_BOOLEAN:return c?"true":"false";case ft.LITERAL_NUMBER:return _b(c);case ft.LITERAL_STRING:if(d(n)&&n._type===ft.MEMBER&&(c==="r"||c==="g"||c==="b"||c==="a"||c==="x"||c==="y"||c==="z"||c==="w"||hx(n._left)))return c;if(i=Y.fromCssColorString(c,xM),d(i))return gIe(i);throw new me("Error generating style shader: String literals are not supported.");case ft.LITERAL_COLOR:if(l=o,c==="color"){if(d(l)){if(l.length>1){let p=l[0],y=l[1];return y!=="1.0"&&(t.translucent=!0),`vec4(${p}, ${y})`}}else return"vec4(1.0)";return`vec4(${l[0]}, 1.0)`}else{if(c==="rgb")return i=ete(this),d(i)?yM(i):`vec4(${l[0]} / 255.0, ${l[1]} / 255.0, ${l[2]} / 255.0, 1.0)`;if(c==="rgba")return l[3]!=="1.0"&&(t.translucent=!0),i=ete(this),d(i)?yM(i):`vec4(${l[0]} / 255.0, ${l[1]} / 255.0, ${l[2]} / 255.0, ${l[3]})`;if(c==="hsl")return i=$ee(this),d(i)?yM(i):`vec4(czm_HSLToRGB(vec3(${l[0]}, ${l[1]}, ${l[2]})), 1.0)`;if(c==="hsla")return i=$ee(this),d(i)?(i.alpha!==1&&(t.translucent=!0),yM(i)):(l[3]!=="1.0"&&(t.translucent=!0),`vec4(czm_HSLToRGB(vec3(${l[0]}, ${l[1]}, ${l[2]})), ${l[3]})`)}break;case ft.LITERAL_VECTOR:u=o.length,m=`${c}(`;for(let p=0;p<u;++p)m+=o[p],p<u-1&&(m+=", ");return m+=")",m;case ft.LITERAL_REGEX:throw new me("Error generating style shader: Regular expressions are not supported.");case ft.LITERAL_UNDEFINED:return ym.NULL_SENTINEL;case ft.BUILTIN_VARIABLE:if(c==="tiles3d_tileset_time")return c}};gt.prototype.getVariables=function(e,t){let n,i,o,r=this._type,s=this._value;if(d(this._left))if(Array.isArray(this._left))for(n=this._left,i=n.length,o=0;o<i;++o)n[o].getVariables(e,this);else this._left.getVariables(e,this);if(d(this._right)&&this._right.getVariables(e,this),d(this._test)&&this._test.getVariables(e,this),Array.isArray(this._value))for(n=this._value,i=n.length,o=0;o<i;++o)n[o].getVariables(e,this);let a;switch(r){case ft.VARIABLE:hx(this)||e.push(s);break;case ft.VARIABLE_IN_STRING:for(a=gM.exec(s);a!==null;)e.push(a[1]),a=gM.exec(s);break;case ft.LITERAL_STRING:d(t)&&t._type===ft.MEMBER&&hx(t._left)&&e.push(s);break}};var tu=ym;function yp(e){e=g(e,g.EMPTY_OBJECT),this._batchTable=e.batchTable,this._batchIds=e.batchIds,this._positions=e.positions,this._vertexBatchIds=e.vertexBatchIds,this._indices=e.indices,this._indexCounts=e.indexCounts,this._indexOffsets=e.indexOffsets,this._batchedIndices=e.batchedIndices,this._boundingVolume=e.boundingVolume,this._boundingVolumes=e.boundingVolumes,this._center=g(e.center,h.ZERO),this._va=void 0,this._sp=void 0,this._spStencil=void 0,this._spPick=void 0,this._uniformMap=void 0,this._vaSwap=void 0,this._rsStencilDepthPass=void 0,this._rsStencilDepthPass3DTiles=void 0,this._rsColorPass=void 0,this._rsPickPass=void 0,this._rsWireframe=void 0,this._commands=[],this._commandsIgnoreShow=[],this._pickCommands=[],this._constantColor=Y.clone(Y.WHITE),this._highlightColor=this._constantColor,this._batchDirty=!0,this._pickCommandsDirty=!0,this._framesSinceLastRebatch=0,this._updatingAllCommands=!1,this._trianglesLength=this._indices.length/3,this._geometryByteLength=this._indices.byteLength+this._positions.byteLength+this._vertexBatchIds.byteLength,this.debugWireframe=!1,this._debugWireframe=this.debugWireframe,this._wireframeDirty=!1,this.forceRebatch=!1,this.classificationType=g(e.classificationType,kn.BOTH),this._vertexShaderSource=e._vertexShaderSource,this._fragmentShaderSource=e._fragmentShaderSource,this._attributeLocations=e._attributeLocations,this._uniformMap=e._uniformMap,this._pickId=e._pickId,this._modelMatrix=e._modelMatrix,this._boundingSphere=e._boundingSphere,this._batchIdLookUp={};let t=this._batchIds.length;for(let n=0;n<t;++n){let i=this._batchIds[n];this._batchIdLookUp[i]=n}}Object.defineProperties(yp.prototype,{trianglesLength:{get:function(){return this._trianglesLength}},geometryByteLength:{get:function(){return this._geometryByteLength}}});var xIe={position:0,a_batchId:1};function _Ie(e,t){if(d(e._va))return;let n=mt.createVertexBuffer({context:t,typedArray:e._positions,usage:Ne.STATIC_DRAW}),i=mt.createVertexBuffer({context:t,typedArray:e._vertexBatchIds,usage:Ne.STATIC_DRAW}),o=mt.createIndexBuffer({context:t,typedArray:e._indices,usage:Ne.DYNAMIC_DRAW,indexDatatype:e._indices.BYTES_PER_ELEMENT===2?Ue.UNSIGNED_SHORT:Ue.UNSIGNED_INT}),r=[{index:0,vertexBuffer:n,componentDatatype:Q.fromTypedArray(e._positions),componentsPerAttribute:3},{index:1,vertexBuffer:i,componentDatatype:Q.fromTypedArray(e._vertexBatchIds),componentsPerAttribute:1}];e._va=new ti({context:t,attributes:r,indexBuffer:o}),t.webgl2&&(e._vaSwap=new ti({context:t,attributes:r,indexBuffer:mt.createIndexBuffer({context:t,sizeInBytes:o.sizeInBytes,usage:Ne.DYNAMIC_DRAW,indexDatatype:o.indexDatatype})})),e._batchedPositions=void 0,e._transferrableBatchIds=void 0,e._vertexBatchIds=void 0}function TIe(e,t){if(d(e._sp))return;let n=e._batchTable,i=g(e._attributeLocations,xIe),o=e._pickId,r=e._vertexShaderSource,s=e._fragmentShaderSource;if(d(r)){e._sp=Qt.fromCache({context:t,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:i}),e._spStencil=e._sp,s=Ye.replaceMain(s,"czm_non_pick_main"),s=`${s}void main()
  5285. {
  5286. czm_non_pick_main();
  5287. out_FragColor = ${o};
  5288. }
  5289. `,e._spPick=Qt.fromCache({context:t,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:i});return}let a=n.getVertexShaderCallback(!1,"a_batchId",void 0)(RS),c=n.getFragmentShaderCallback(!1,void 0,!0)(lb);o=n.getPickId();let l=new Ye({sources:[a]}),u=new Ye({defines:["VECTOR_TILE"],sources:[c]});e._sp=Qt.fromCache({context:t,vertexShaderSource:l,fragmentShaderSource:u,attributeLocations:i}),l=new Ye({sources:[RS]}),u=new Ye({defines:["VECTOR_TILE"],sources:[lb]}),e._spStencil=Qt.fromCache({context:t,vertexShaderSource:l,fragmentShaderSource:u,attributeLocations:i}),c=Ye.replaceMain(c,"czm_non_pick_main"),c=`${c}
  5290. void main()
  5291. {
  5292. czm_non_pick_main();
  5293. out_FragColor = ${o};
  5294. }
  5295. `;let m=new Ye({sources:[a]}),p=new Ye({defines:["VECTOR_TILE"],sources:[c]});e._spPick=Qt.fromCache({context:t,vertexShaderSource:m,fragmentShaderSource:p,attributeLocations:i})}function ite(e){let t=e?Dn.EQUAL:Dn.ALWAYS;return{colorMask:{red:!1,green:!1,blue:!1,alpha:!1},stencilTest:{enabled:!0,frontFunction:t,frontOperation:{fail:ht.KEEP,zFail:ht.DECREMENT_WRAP,zPass:ht.KEEP},backFunction:t,backOperation:{fail:ht.KEEP,zFail:ht.INCREMENT_WRAP,zPass:ht.KEEP},reference:Ft.CESIUM_3D_TILE_MASK,mask:Ft.CESIUM_3D_TILE_MASK},stencilMask:Ft.CLASSIFICATION_MASK,depthTest:{enabled:!0,func:Ua.LESS_OR_EQUAL},depthMask:!1}}var SIe={stencilTest:{enabled:!0,frontFunction:Dn.NOT_EQUAL,frontOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},backFunction:Dn.NOT_EQUAL,backOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},reference:0,mask:Ft.CLASSIFICATION_MASK},stencilMask:Ft.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1,blending:dn.PRE_MULTIPLIED_ALPHA_BLEND},CIe={stencilTest:{enabled:!0,frontFunction:Dn.NOT_EQUAL,frontOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},backFunction:Dn.NOT_EQUAL,backOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},reference:0,mask:Ft.CLASSIFICATION_MASK},stencilMask:Ft.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1};function VIe(e){d(e._rsStencilDepthPass)||(e._rsStencilDepthPass=De.fromCache(ite(!1)),e._rsStencilDepthPass3DTiles=De.fromCache(ite(!0)),e._rsColorPass=De.fromCache(SIe),e._rsPickPass=De.fromCache(CIe))}var fx=new A,ote=new h;function LIe(e,t){if(d(e._uniformMap))return;let n={u_modifiedModelViewProjection:function(){let i=t.uniformState.view,o=t.uniformState.projection;return A.clone(i,fx),A.multiplyByPoint(fx,e._center,ote),A.setTranslation(fx,ote,fx),A.multiply(o,fx,fx),fx},u_highlightColor:function(){return e._highlightColor}};e._uniformMap=e._batchTable.getUniformMapCallback()(n)}function cY(e,t,n,i,o,r,s){let a=e.constructor.BYTES_PER_ELEMENT,c=r.length;for(let l=0;l<c;++l){let u=r[l],m=s[u],p=i[m],y=o[m],f=new e.constructor(e.buffer,a*p,y);t.set(f,n),i[m]=n,n+=y}return n}function RIe(e,t){let n=e._indices,i=e._indexOffsets,o=e._indexCounts,r=e._batchIdLookUp,s=new n.constructor(n.length),a=t.pop(),c=[a],l=cY(n,s,0,i,o,a.batchIds,r);for(a.offset=0,a.count=l;t.length>0;){let u=t.pop();if(Y.equals(u.color,a.color))l=cY(n,s,l,i,o,u.batchIds,r),a.batchIds=a.batchIds.concat(u.batchIds),a.count=l-a.offset;else{let m=l;l=cY(n,s,l,i,o,u.batchIds,r),u.offset=m,u.count=l-m,c.push(u),a=u}}e._va.indexBuffer.copyFromArrayView(s),e._indices=s,e._batchedIndices=c}function lY(e,t,n,i,o,r,s){let a=e.bytesPerIndex,c=r.length;for(let l=0;l<c;++l){let u=r[l],m=s[u],p=i[m],y=o[m];t.copyFromBuffer(e,p*a,n*a,y*a),i[m]=n,n+=y}return n}function ZIe(e,t){let n=e._indexOffsets,i=e._indexCounts,o=e._batchIdLookUp,r=t.pop(),s=[r],a=e._va.indexBuffer,c=e._vaSwap.indexBuffer,l=lY(a,c,0,n,i,r.batchIds,o);for(r.offset=0,r.count=l;t.length>0;){let m=t.pop();if(Y.equals(m.color,r.color))l=lY(a,c,l,n,i,m.batchIds,o),r.batchIds=r.batchIds.concat(m.batchIds),r.count=l-r.offset;else{let p=l;l=lY(a,c,l,n,i,m.batchIds,o),m.offset=p,m.count=l-p,s.push(m),r=m}}let u=e._va;e._va=e._vaSwap,e._vaSwap=u,e._batchedIndices=s}function GIe(e,t){return t.color.toRgba()-e.color.toRgba()}function EIe(e,t){if(!e._batchDirty)return!1;let n=e._batchedIndices,i=n.length,o=!1,r={};for(let s=0;s<i;++s){let c=n[s].color.toRgba();if(d(r[c])){o=!0;break}else r[c]=!0}if(!o)return e._batchDirty=!1,!1;if(o&&!e.forceRebatch&&e._framesSinceLastRebatch<120){++e._framesSinceLastRebatch;return}return n.sort(GIe),t.webgl2?ZIe(e,n):RIe(e,n),e._framesSinceLastRebatch=0,e._batchDirty=!1,e._pickCommandsDirty=!0,e._wireframeDirty=!0,!0}function XIe(e,t){let n=EIe(e,t),i=e._commands,o=e._batchedIndices,r=o.length,s=r*2;if(d(i)&&!n&&i.length===s)return;i.length=s;let a=e._va,c=e._sp,l=g(e._modelMatrix,A.IDENTITY),u=e._uniformMap,m=e._boundingVolume;for(let p=0;p<r;++p){let y=o[p].offset,f=o[p].count,x=i[p*2];d(x)||(x=i[p*2]=new nt({owner:e})),x.vertexArray=a,x.modelMatrix=l,x.offset=y,x.count=f,x.renderState=e._rsStencilDepthPass,x.shaderProgram=c,x.uniformMap=u,x.boundingVolume=m,x.cull=!1,x.pass=Re.TERRAIN_CLASSIFICATION;let _=nt.shallowClone(x,x.derivedCommands.tileset);_.renderState=e._rsStencilDepthPass3DTiles,_.pass=Re.CESIUM_3D_TILE_CLASSIFICATION,x.derivedCommands.tileset=_;let C=i[p*2+1];d(C)||(C=i[p*2+1]=new nt({owner:e})),C.vertexArray=a,C.modelMatrix=l,C.offset=y,C.count=f,C.renderState=e._rsColorPass,C.shaderProgram=c,C.uniformMap=u,C.boundingVolume=m,C.cull=!1,C.pass=Re.TERRAIN_CLASSIFICATION;let V=nt.shallowClone(C,C.derivedCommands.tileset);V.pass=Re.CESIUM_3D_TILE_CLASSIFICATION,C.derivedCommands.tileset=V}e._commandsDirty=!0}function IIe(e,t){if(e.classificationType===kn.TERRAIN||!t.invertClassification||d(e._commandsIgnoreShow)&&!e._commandsDirty)return;let n=e._commands,i=e._commandsIgnoreShow,o=e._spStencil,r=n.length,s=i.length=r/2,a=0;for(let c=0;c<s;++c){let l=i[c]=nt.shallowClone(n[a],i[c]);l.shaderProgram=o,l.pass=Re.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW,a+=2}e._commandsDirty=!1}function WIe(e){if(!e._pickCommandsDirty)return;let t=e._indexOffsets.length,n=e._pickCommands;n.length=t*2;let i=e._va,o=e._spStencil,r=e._spPick,s=g(e._modelMatrix,A.IDENTITY),a=e._uniformMap;for(let c=0;c<t;++c){let l=e._indexOffsets[c],u=e._indexCounts[c],m=d(e._boundingVolumes)?e._boundingVolumes[c]:e.boundingVolume,p=n[c*2];d(p)||(p=n[c*2]=new nt({owner:e,pickOnly:!0})),p.vertexArray=i,p.modelMatrix=s,p.offset=l,p.count=u,p.renderState=e._rsStencilDepthPass,p.shaderProgram=o,p.uniformMap=a,p.boundingVolume=m,p.pass=Re.TERRAIN_CLASSIFICATION;let y=nt.shallowClone(p,p.derivedCommands.tileset);y.renderState=e._rsStencilDepthPass3DTiles,y.pass=Re.CESIUM_3D_TILE_CLASSIFICATION,p.derivedCommands.tileset=y;let f=n[c*2+1];d(f)||(f=n[c*2+1]=new nt({owner:e,pickOnly:!0})),f.vertexArray=i,f.modelMatrix=s,f.offset=l,f.count=u,f.renderState=e._rsPickPass,f.shaderProgram=r,f.uniformMap=a,f.boundingVolume=m,f.pass=Re.TERRAIN_CLASSIFICATION;let x=nt.shallowClone(f,f.derivedCommands.tileset);x.pass=Re.CESIUM_3D_TILE_CLASSIFICATION,f.derivedCommands.tileset=x}e._pickCommandsDirty=!1}yp.prototype.createFeatures=function(e,t){let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o];t[r]=new Ts(e,r)}};yp.prototype.applyDebugSettings=function(e,t){this._highlightColor=e?t:this._constantColor};function PIe(e,t){e._updatingAllCommands=!0;let n=e._batchIds,i=n.length,o;for(o=0;o<i;++o){let s=n[o],a=t[s];a.show=!0,a.color=Y.WHITE}let r=e._batchedIndices;for(i=r.length,o=0;o<i;++o)r[o].color=Y.clone(Y.WHITE);e._updatingAllCommands=!1,e._batchDirty=!0}var vIe=new Y,wIe=Y.WHITE,FIe=!0,AIe=/\$/;yp.prototype.applyStyle=function(e,t){if(!d(e)){PIe(this,t);return}let n=e.color,i=n instanceof tu&&!AIe.test(n.expression);this._updatingAllCommands=i;let o=this._batchIds,r=o.length,s;for(s=0;s<r;++s){let a=o[s],c=t[a];c.color=d(e.color)?e.color.evaluateColor(c,vIe):wIe,c.show=d(e.show)?e.show.evaluate(c):FIe}if(i){let a=this._batchedIndices;for(r=a.length,s=0;s<r;++s)a[s].color=Y.clone(Y.WHITE);this._updatingAllCommands=!1,this._batchDirty=!0}};yp.prototype.updateCommands=function(e,t){if(this._updatingAllCommands)return;let n=this._batchIdLookUp,i=n[e];if(!d(i))return;let o=this._indexOffsets,r=this._indexCounts,s=o[i],a=r[i],c=this._batchedIndices,l=c.length,u;for(u=0;u<l;++u){let x=c[u].offset,_=c[u].count;if(s>=x&&s<x+_)break}c.push(new Dh({color:Y.clone(t),offset:s,count:a,batchIds:[e]}));let m=[],p=[],y=c[u].batchIds,f=y.length;for(let x=0;x<f;++x){let _=y[x];if(_===e)continue;let C=n[_];o[C]<s?m.push(_):p.push(_)}p.length!==0&&c.push(new Dh({color:Y.clone(c[u].color),offset:s+a,count:c[u].offset+c[u].count-(s+a),batchIds:p})),m.length!==0?(c[u].count=s-c[u].offset,c[u].batchIds=m):c.splice(u,1),this._batchDirty=!0};function rte(e,t,n,i){let o=e.classificationType,r=o!==kn.CESIUM_3D_TILE,s=o!==kn.TERRAIN,a=t.commandList,c=n.length,l,u;for(u=0;u<c;++u)r&&(l=n[u],l.pass=Re.TERRAIN_CLASSIFICATION,a.push(l)),s&&(l=n[u].derivedCommands.tileset,l.pass=Re.CESIUM_3D_TILE_CLASSIFICATION,a.push(l));if(!(!t.invertClassification||!d(i)))for(c=i.length,u=0;u<c;++u)a.push(i[u])}function MIe(e,t){let n=e.commandList,i=t.length;for(let o=0;o<i;o+=2){let r=t[o+1];r.pass=Re.OPAQUE,n.push(r)}}function NIe(e){let t=e.debugWireframe===e._debugWireframe;if(t=t&&!(e.debugWireframe&&e._wireframeDirty),t)return;d(e._rsWireframe)||(e._rsWireframe=De.fromCache({}));let n,i;e.debugWireframe?(n=e._rsWireframe,i=Fe.LINES):(n=e._rsColorPass,i=Fe.TRIANGLES);let o=e._commands,r=o.length;for(let s=0;s<r;s+=2){let a=o[s+1];a.renderState=n,a.primitiveType=i}e._debugWireframe=e.debugWireframe,e._wireframeDirty=!1}yp.prototype.update=function(e){let t=e.context;_Ie(this,t),TIe(this,t),VIe(this),LIe(this,t);let n=e.passes;n.render&&(XIe(this,t),IIe(this,e),NIe(this),this._debugWireframe?MIe(e,this._commands):rte(this,e,this._commands,this._commandsIgnoreShow)),n.pick&&(WIe(this),rte(this,e,this._pickCommands))};yp.prototype.isDestroyed=function(){return!1};yp.prototype.destroy=function(){return this._va=this._va&&this._va.destroy(),this._sp=this._sp&&this._sp.destroy(),this._spPick=this._spPick&&this._spPick.destroy(),this._vaSwap=this._vaSwap&&this._vaSwap.destroy(),ue(this)};var px=yp;function ql(e){this._boxes=e.boxes,this._boxBatchIds=e.boxBatchIds,this._cylinders=e.cylinders,this._cylinderBatchIds=e.cylinderBatchIds,this._ellipsoids=e.ellipsoids,this._ellipsoidBatchIds=e.ellipsoidBatchIds,this._spheres=e.spheres,this._sphereBatchIds=e.sphereBatchIds,this._modelMatrix=e.modelMatrix,this._batchTable=e.batchTable,this._boundingVolume=e.boundingVolume,this._center=e.center,d(this._center)||(d(this._boundingVolume)?this._center=h.clone(this._boundingVolume.center):this._center=h.clone(h.ZERO)),this._boundingVolumes=void 0,this._batchedIndices=void 0,this._indices=void 0,this._indexOffsets=void 0,this._indexCounts=void 0,this._positions=void 0,this._vertexBatchIds=void 0,this._batchIds=void 0,this._batchTableColors=void 0,this._packedBuffer=void 0,this._ready=!1,this._promise=void 0,this._error=void 0,this._verticesPromise=void 0,this._primitive=void 0,this.debugWireframe=!1,this.forceRebatch=!1,this.classificationType=kn.BOTH}Object.defineProperties(ql.prototype,{trianglesLength:{get:function(){return d(this._primitive)?this._primitive.trianglesLength:0}},geometryByteLength:{get:function(){return d(this._primitive)?this._primitive.geometryByteLength:0}},ready:{get:function(){return this._ready}}});ql.packedBoxLength=A.packedLength+h.packedLength;ql.packedCylinderLength=A.packedLength+2;ql.packedEllipsoidLength=A.packedLength+h.packedLength;ql.packedSphereLength=h.packedLength+1;function UIe(e){let t=new Float64Array(A.packedLength+h.packedLength),n=0;return h.pack(e._center,t,n),n+=h.packedLength,A.pack(e._modelMatrix,t,n),t}function kIe(e,t){let n=0,i=t[n++],o=t[n++],r=e._boundingVolumes=new Array(o);for(let c=0;c<o;++c)r[c]=ce.unpack(t,n),n+=ce.packedLength;let s=t[n++],a=e._batchedIndices=new Array(s);for(let c=0;c<s;++c){let l=Y.unpack(t,n);n+=Y.packedLength;let u=t[n++],m=t[n++],p=t[n++],y=new Array(p);for(let f=0;f<p;++f)y[f]=t[n++];a[c]=new Dh({color:l,offset:u,count:m,batchIds:y})}return i}var DIe=new yi("createVectorTileGeometries",5),BIe=new Y;function YIe(e){if(!d(e._primitive)&&!d(e._verticesPromise)){let t=e._boxes,n=e._boxBatchIds,i=e._cylinders,o=e._cylinderBatchIds,r=e._ellipsoids,s=e._ellipsoidBatchIds,a=e._spheres,c=e._sphereBatchIds,l=e._batchTableColors,u=e._packedBuffer;if(!d(l)){let f=0;d(e._boxes)&&(t=e._boxes=t.slice(),n=e._boxBatchIds=n.slice(),f+=n.length),d(e._cylinders)&&(i=e._cylinders=i.slice(),o=e._cylinderBatchIds=o.slice(),f+=o.length),d(e._ellipsoids)&&(r=e._ellipsoids=r.slice(),s=e._ellipsoidBatchIds=s.slice(),f+=s.length),d(e._spheres)&&(a=e._sphere=a.slice(),c=e._sphereBatchIds=c.slice(),f+=c.length),l=e._batchTableColors=new Uint32Array(f);let x=e._batchTable;for(let _=0;_<f;++_){let C=x.getColor(_,BIe);l[_]=C.toRgba()}u=e._packedBuffer=UIe(e)}let m=[];d(t)&&m.push(t.buffer,n.buffer),d(i)&&m.push(i.buffer,o.buffer),d(r)&&m.push(r.buffer,s.buffer),d(a)&&m.push(a.buffer,c.buffer),m.push(l.buffer,u.buffer);let p={boxes:d(t)?t.buffer:void 0,boxBatchIds:d(t)?n.buffer:void 0,cylinders:d(i)?i.buffer:void 0,cylinderBatchIds:d(i)?o.buffer:void 0,ellipsoids:d(r)?r.buffer:void 0,ellipsoidBatchIds:d(r)?s.buffer:void 0,spheres:d(a)?a.buffer:void 0,sphereBatchIds:d(a)?c.buffer:void 0,batchTableColors:l.buffer,packedBuffer:u.buffer},y=e._verticesPromise=DIe.scheduleTask(p,m);return d(y)?y.then(function(f){if(e.isDestroyed())return;let x=new Float64Array(f.packedBuffer);kIe(e,x)===2?e._indices=new Uint16Array(f.indices):e._indices=new Uint32Array(f.indices),e._indexOffsets=new Uint32Array(f.indexOffsets),e._indexCounts=new Uint32Array(f.indexCounts),e._positions=new Float32Array(f.positions),e._vertexBatchIds=new Uint16Array(f.vertexBatchIds),e._batchIds=new Uint16Array(f.batchIds),OIe(e),e._ready=!0}).catch(f=>{e.isDestroyed()||(e._error=f)}):void 0}}function OIe(e){d(e._primitive)||(e._primitive=new px({batchTable:e._batchTable,positions:e._positions,batchIds:e._batchIds,vertexBatchIds:e._vertexBatchIds,indices:e._indices,indexOffsets:e._indexOffsets,indexCounts:e._indexCounts,batchedIndices:e._batchedIndices,boundingVolume:e._boundingVolume,boundingVolumes:e._boundingVolumes,center:e._center,pickObject:g(e._pickObject,e)}),e._boxes=void 0,e._boxBatchIds=void 0,e._cylinders=void 0,e._cylinderBatchIds=void 0,e._ellipsoids=void 0,e._ellipsoidBatchIds=void 0,e._spheres=void 0,e._sphereBatchIds=void 0,e._center=void 0,e._modelMatrix=void 0,e._batchTable=void 0,e._boundingVolume=void 0,e._boundingVolumes=void 0,e._batchedIndices=void 0,e._indices=void 0,e._indexOffsets=void 0,e._indexCounts=void 0,e._positions=void 0,e._vertexBatchIds=void 0,e._batchIds=void 0,e._batchTableColors=void 0,e._packedBuffer=void 0,e._verticesPromise=void 0)}ql.prototype.createFeatures=function(e,t){this._primitive.createFeatures(e,t)};ql.prototype.applyDebugSettings=function(e,t){this._primitive.applyDebugSettings(e,t)};ql.prototype.applyStyle=function(e,t){this._primitive.applyStyle(e,t)};ql.prototype.updateCommands=function(e,t){this._primitive.updateCommands(e,t)};ql.prototype.update=function(e){if(!this._ready){if(d(this._promise)||(this._promise=YIe(this)),d(this._error)){let t=this._error;throw this._error=void 0,t}return}this._primitive.debugWireframe=this.debugWireframe,this._primitive.forceRebatch=this.forceRebatch,this._primitive.classificationType=this.classificationType,this._primitive.update(e)};ql.prototype.isDestroyed=function(){return!1};ql.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),ue(this)};var gp=ql;function xp(e,t,n,i,o){this._tileset=e,this._tile=t,this._resource=n,this._geometries=void 0,this._metadata=void 0,this._batchTable=void 0,this._features=void 0,this.featurePropertiesDirty=!1,this._group=void 0,this._ready=!1,zIe(this,i,o)}Object.defineProperties(xp.prototype,{featuresLength:{get:function(){return d(this._batchTable)?this._batchTable.featuresLength:0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return d(this._geometries)?this._geometries.trianglesLength:0}},geometryByteLength:{get:function(){return d(this._geometries)?this._geometries.geometryByteLength:0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return d(this._batchTable)?this._batchTable.batchTableByteLength:0}},innerContents:{get:function(){}},ready:{get:function(){return this._ready}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},metadata:{get:function(){return this._metadata},set:function(e){this._metadata=e}},batchTable:{get:function(){return this._batchTable}},group:{get:function(){return this._group},set:function(e){this._group=e}}});function KIe(e){return function(t,n){d(e._geometries)&&e._geometries.updateCommands(t,n)}}function HIe(e,t){let n,i,o,r,s,a=g(e.BOXES_LENGTH,0),c=g(e.CYLINDERS_LENGTH,0),l=g(e.ELLIPSOIDS_LENGTH,0),u=g(e.SPHERES_LENGTH,0);if(a>0&&d(e.BOX_BATCH_IDS)){let f=t.byteOffset+e.BOX_BATCH_IDS.byteOffset;n=new Uint16Array(t.buffer,f,a)}if(c>0&&d(e.CYLINDER_BATCH_IDS)){let f=t.byteOffset+e.CYLINDER_BATCH_IDS.byteOffset;i=new Uint16Array(t.buffer,f,c)}if(l>0&&d(e.ELLIPSOID_BATCH_IDS)){let f=t.byteOffset+e.ELLIPSOID_BATCH_IDS.byteOffset;o=new Uint16Array(t.buffer,f,l)}if(u>0&&d(e.SPHERE_BATCH_IDS)){let f=t.byteOffset+e.SPHERE_BATCH_IDS.byteOffset;r=new Uint16Array(t.buffer,f,u)}let m=d(n)||d(i)||d(o)||d(r),p=a>0&&!d(n)||c>0&&!d(i)||l>0&&!d(o)||u>0&&!d(r);if(m&&p)throw new me("If one group of batch ids is defined, then all batch ids must be defined");if(!d(n)&&!d(i)&&!d(o)&&!d(r)){let f=0;if(!d(n)&&a>0)for(n=new Uint16Array(a),s=0;s<a;++s)n[s]=f++;if(!d(i)&&c>0)for(i=new Uint16Array(c),s=0;s<c;++s)i[s]=f++;if(!d(o)&&l>0)for(o=new Uint16Array(l),s=0;s<l;++s)o[s]=f++;if(!d(r)&&u>0)for(r=new Uint16Array(u),s=0;s<u;++s)r[s]=f++}return{boxes:n,cylinders:i,ellipsoids:o,spheres:r}}var bx=Uint32Array.BYTES_PER_ELEMENT;function zIe(e,t,n){n=g(n,0);let i=new Uint8Array(t),o=new DataView(t);n+=bx;let r=o.getUint32(n,!0);if(r!==1)throw new me(`Only Geometry tile version 1 is supported. Version ${r} is not.`);n+=bx;let s=o.getUint32(n,!0);if(n+=bx,s===0){e._ready=!0;return}let a=o.getUint32(n,!0);if(n+=bx,a===0)throw new me("Feature table must have a byte length greater than zero");let c=o.getUint32(n,!0);n+=bx;let l=o.getUint32(n,!0);n+=bx;let u=o.getUint32(n,!0);n+=bx;let m=Go(i,n,a);n+=a;let p=new Uint8Array(t,n,c);n+=c;let y,f;l>0&&(y=Go(i,n,l),n+=l,u>0&&(f=new Uint8Array(t,n,u),f=new Uint8Array(f)));let x=g(m.BOXES_LENGTH,0),_=g(m.CYLINDERS_LENGTH,0),C=g(m.ELLIPSOIDS_LENGTH,0),V=g(m.SPHERES_LENGTH,0),L=x+_+C+V,Z=new bp(e,L,y,f,KIe(e));if(e._batchTable=Z,L===0)return;let G=e.tile.computedTransform,X;d(m.RTC_CENTER)&&(X=h.unpack(m.RTC_CENTER),A.multiplyByPoint(G,X,X));let P=HIe(m,p);if(x>0||_>0||C>0||V>0){let v,F,M,b;if(x>0){let R=p.byteOffset+m.BOXES.byteOffset;v=new Float32Array(p.buffer,R,gp.packedBoxLength*x)}if(_>0){let R=p.byteOffset+m.CYLINDERS.byteOffset;F=new Float32Array(p.buffer,R,gp.packedCylinderLength*_)}if(C>0){let R=p.byteOffset+m.ELLIPSOIDS.byteOffset;M=new Float32Array(p.buffer,R,gp.packedEllipsoidLength*C)}if(V>0){let R=p.byteOffset+m.SPHERES.byteOffset;b=new Float32Array(p.buffer,R,gp.packedSphereLength*V)}return e._geometries=new gp({boxes:v,boxBatchIds:P.boxes,cylinders:F,cylinderBatchIds:P.cylinders,ellipsoids:M,ellipsoidBatchIds:P.ellipsoids,spheres:b,sphereBatchIds:P.spheres,center:X,modelMatrix:G,batchTable:Z,boundingVolume:e.tile.boundingVolume.boundingVolume}),e}return Promise.resolve(e)}function ste(e){let t=e.featuresLength;if(!d(e._features)&&t>0){let n=new Array(t);d(e._geometries)&&e._geometries.createFeatures(e,n),e._features=n}}xp.prototype.hasProperty=function(e,t){return this._batchTable.hasProperty(e,t)};xp.prototype.getFeature=function(e){return ste(this),this._features[e]};xp.prototype.applyDebugSettings=function(e,t){d(this._geometries)&&this._geometries.applyDebugSettings(e,t)};xp.prototype.applyStyle=function(e){ste(this),d(this._geometries)&&this._geometries.applyStyle(e,this._features)};xp.prototype.update=function(e,t){d(this._geometries)&&(this._geometries.classificationType=this._tileset.classificationType,this._geometries.debugWireframe=this._tileset.debugWireframe,this._geometries.update(t)),d(this._batchTable)&&this._geometries.ready&&(this._batchTable.update(e,t),this._ready=!0)};xp.prototype.isDestroyed=function(){return!1};xp.prototype.destroy=function(){return this._geometries=this._geometries&&this._geometries.destroy(),this._batchTable=this._batchTable&&this._batchTable.destroy(),ue(this)};var bE=xp;var von=T(S(),1);var n7t=T(S(),1);var dY={};dY.encode2D=function(e,t,n){let i=Math.pow(2,e),o={x:t,y:n},r,s,a,c=BigInt(0);for(a=i/2;a>0;a/=2)r=(o.x&a)>0?1:0,s=(o.y&a)>0?1:0,c+=BigInt((3*r^s)*a*a),ate(i,o,r,s);return c};dY.decode2D=function(e,t){let n=Math.pow(2,e),i={x:0,y:0},o,r,s,a;for(s=1,a=t;s<n;s*=2)o=1&Number(a/BigInt(2)),r=1&Number(a^BigInt(o)),ate(s,i,o,r),i.x+=s*o,i.y+=s*r,a/=BigInt(4);return[i.x,i.y]};function ate(e,t,n,i){if(i!==0)return;n===1&&(t.x=e-1-t.x,t.y=e-1-t.y);let o=t.x;t.x=t.y,t.y=o}var ZS=dY;var d7t=T(S(),1);var yx=30,JIe=1<<yx,QIe=1<<yx+1>>>0,uY=2*yx+1,Tb=4,dte=[],ute=[],jIe=[[0,1,3,2],[0,2,3,1],[3,2,0,1],[3,1,0,2]],Sb=1,GS=2,CM=[Sb,0,0,Sb|GS];function Ar(e){if(!Mt.supportsBigInt())throw new me("S2 required BigInt support");this._cellId=e,this._level=Ar.getLevel(e)}Ar.fromToken=function(e){return new Ar(Ar.getIdFromToken(e))};Ar.isValidId=function(e){return!(e<=0||e>>BigInt(uY)>5||!(e&~e+BigInt(1)&BigInt("0x1555555555555555")))};Ar.isValidToken=function(e){return/^[0-9a-fA-F]{1,16}$/.test(e)?Ar.isValidId(Ar.getIdFromToken(e)):!1};Ar.getIdFromToken=function(e){return BigInt("0x"+e+"0".repeat(16-e.length))};Ar.getTokenFromId=function(e){let t=Math.floor(aWe(e)/4),n=e.toString(16).replace(/0*$/,"");return Array(17-t-n.length).join("0")+n};Ar.getLevel=function(e){let t=0;for(;e!==BigInt(0)&&!(e&BigInt(1));)t++,e=e>>BigInt(1);return yx-(t>>1)};Ar.prototype.getChild=function(e){let t=fte(this._cellId)>>BigInt(2),n=this._cellId+BigInt(2*e+1-4)*t;return new Ar(n)};Ar.prototype.getParent=function(){let e=fte(this._cellId)<<BigInt(2);return new Ar(this._cellId&~e+BigInt(1)|e)};Ar.prototype.getParentAtLevel=function(e){let t=rWe(e);return new Ar(this._cellId&-t|t)};Ar.prototype.getCenter=function(e){e=g(e,re.WGS84);let t=qIe(this._cellId,this._level);t=h.normalize(t,t);let n=new he.fromCartesian(t,re.UNIT_SPHERE);return he.toCartesian(n,e,new h)};Ar.prototype.getVertex=function(e,t){t=g(t,re.WGS84);let n=$Ie(this._cellId,this._level,e);n=h.normalize(n,n);let i=new he.fromCartesian(n,re.UNIT_SPHERE);return he.toCartesian(i,t,new h)};Ar.fromFacePositionLevel=function(e,t,n){let i=(e<4?"0":"")+(e<2?"0":"")+e.toString(2),o=t.toString(2),r=Array(2*n-o.length+1).join("0"),s=Array(uY-2*n).join("0"),a=BigInt(`0b${i}${r}${o}1${s}`);return new Ar(a)};function qIe(e,t){let n=eWe(e,t);return tWe(n[0],n[1],n[2])}function $Ie(e,t,n){let i=mte(e,t),o=nWe([i[1],i[2]],t),r=n>>1&1;return hte(i[0],o[0][r^n&1],o[1][r])}function eWe(e,t){let n=mte(e),i=n[0],o=n[1],r=n[2],s=t===30,a=!s&&(BigInt(o)^e>>BigInt(2))&BigInt(1),c=s?1:a?2:0,l=(o<<1)+c,u=(r<<1)+c;return[i,l,u]}function mte(e){dte.length===0&&oWe();let t=Number(e>>BigInt(uY)),n=t&Sb,i=(1<<Tb)-1,o=0,r=0;for(let s=7;s>=0;s--){let c=(1<<2*(s===7?yx-7*Tb:Tb))-1;n+=Number(e>>BigInt(s*2*Tb+1)&BigInt(c))<<2,n=ute[n];let l=s*Tb;o+=n>>Tb+2<<l,r+=(n>>2&i)<<l,n&=Sb|GS}return[t,o,r]}function tWe(e,t,n){let i=cte(t),o=cte(n),r=VM(i),s=VM(o);return hte(e,r,s)}function hte(e,t,n){switch(e){case 0:return new h(1,t,n);case 1:return new h(-t,1,n);case 2:return new h(-t,-n,1);case 3:return new h(-1,-n,-t);case 4:return new h(n,-1,-t);default:return new h(n,t,-1)}}function VM(e){return e>=.5?1/3*(4*e*e-1):1/3*(1-4*(1-e)*(1-e))}function cte(e){return 1/QIe*e}function nWe(e,t){let n=[[],[]],i=iWe(t);for(let o=0;o<2;++o){let r=e[o]&-i,s=r+i;n[o][0]=VM(lte(r)),n[o][1]=VM(lte(s))}return n}function iWe(e){return 1<<yx-e>>>0}function lte(e){return 1/JIe*e}function Cb(e,t,n,i,o,r){if(e===Tb){let s=(t<<Tb)+n;dte[(s<<2)+i]=(o<<2)+r,ute[(o<<2)+i]=(s<<2)+r}else{e++,t<<=1,n<<=1,o<<=2;let s=jIe[r];Cb(e,t+(s[0]>>1),n+(s[0]&1),i,o,r^CM[0]),Cb(e,t+(s[1]>>1),n+(s[1]&1),i,o+1,r^CM[1]),Cb(e,t+(s[2]>>1),n+(s[2]&1),i,o+2,r^CM[2]),Cb(e,t+(s[3]>>1),n+(s[3]&1),i,o+3,r^CM[3])}}function oWe(){Cb(0,0,0,0,0,0),Cb(0,0,0,Sb,0,Sb),Cb(0,0,0,GS,0,GS),Cb(0,0,0,Sb|GS,0,Sb|GS)}function fte(e){return e&~e+BigInt(1)}function rWe(e){return BigInt(1)<<BigInt(2*(yx-e))}var sWe=[64,0,1,39,2,15,40,23,3,12,16,59,41,19,24,54,4,64,13,10,17,62,60,28,42,30,20,51,25,44,55,47,5,32,65,38,14,22,11,58,18,53,63,9,61,27,29,50,43,46,31,37,21,57,52,8,26,49,45,36,56,7,48,35,6,34,33,0];function aWe(e){return sWe[(-e&e)%BigInt(67)]}var _p=Ar;var mon=T(S(),1);var h7t=T(S(),1);function cWe(e,t){return d(e)&&d(e.extensions)&&d(e.extensions[t])}var ri=cWe;var g7t=T(S(),1);function mY(e){let t=e.lengthBits,n=e.availableCount,i=e.constant,o=e.bitstream;if(d(i))n=t;else{let r=Math.ceil(t/8);if(o.length!==r)throw new me(`Availability bitstream must be exactly ${r} bytes long to store ${t} bits. Actual bitstream was ${o.length} bytes long.`);let s=g(e.computeAvailableCountEnabled,!1);!d(n)&&s&&(n=lWe(o,t))}this._lengthBits=t,this._availableCount=n,this._constant=i,this._bitstream=o}function lWe(e,t){let n=0;for(let i=0;i<t;i++){let o=i>>3,r=i%8;n+=e[o]>>r&1}return n}Object.defineProperties(mY.prototype,{lengthBits:{get:function(){return this._lengthBits}},availableCount:{get:function(){return this._availableCount}}});mY.prototype.getBit=function(e){if(d(this._constant))return this._constant;let t=e>>3,n=e%8;return(this._bitstream[t]>>n&1)===1};var ES=mY;var T7t=T(S(),1);function Tp(e){e=g(e,g.EMPTY_OBJECT);let t=e.metadataTable,n=e.class,i=e.entityId,o=e.propertyTableJson;this._class=n,this._metadataTable=t,this._entityId=i,this._extensions=o.extensions,this._extras=o.extras}Object.defineProperties(Tp.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});Tp.prototype.hasProperty=function(e){return this._metadataTable.hasProperty(e)};Tp.prototype.hasPropertyBySemantic=function(e){return this._metadataTable.hasPropertyBySemantic(e)};Tp.prototype.getPropertyIds=function(e){return this._metadataTable.getPropertyIds(e)};Tp.prototype.getProperty=function(e){return this._metadataTable.getProperty(this._entityId,e)};Tp.prototype.setProperty=function(e,t){return this._metadataTable.setProperty(this._entityId,e,t)};Tp.prototype.getPropertyBySemantic=function(e){return this._metadataTable.getPropertyBySemantic(this._entityId,e)};Tp.prototype.setPropertyBySemantic=function(e,t){return this._metadataTable.setPropertyBySemantic(this._entityId,e,t)};var XS=Tp;var C7t=T(S(),1);var LM={QUADTREE:"QUADTREE",OCTREE:"OCTREE"};LM.getBranchingFactor=function(e){switch(e){case LM.OCTREE:return 8;case LM.QUADTREE:return 4}};var Mr=Object.freeze(LM);var P7t=T(S(),1);var G7t=T(S(),1);function Bs(){}Object.defineProperties(Bs.prototype,{class:{get:function(){fe.throwInstantiationError()}}});Bs.prototype.hasProperty=function(e){fe.throwInstantiationError()};Bs.prototype.hasPropertyBySemantic=function(e){fe.throwInstantiationError()};Bs.prototype.getPropertyIds=function(e){fe.throwInstantiationError()};Bs.prototype.getProperty=function(e){fe.throwInstantiationError()};Bs.prototype.setProperty=function(e,t){fe.throwInstantiationError()};Bs.prototype.getPropertyBySemantic=function(e){fe.throwInstantiationError()};Bs.prototype.setPropertyBySemantic=function(e,t){fe.throwInstantiationError()};Bs.hasProperty=function(e,t,n){if(d(t[e]))return!0;let i=n.properties;if(!d(i))return!1;let o=i[e];return!!(d(o)&&d(o.default))};Bs.hasPropertyBySemantic=function(e,t,n){let i=n.propertiesBySemantic;if(!d(i))return!1;let o=i[e];return d(o)};Bs.getPropertyIds=function(e,t,n){n=d(n)?n:[],n.length=0;for(let o in e)e.hasOwnProperty(o)&&d(e[o])&&n.push(o);let i=t.properties;if(d(i))for(let o in i)i.hasOwnProperty(o)&&!d(e[o])&&d(i[o].default)&&n.push(o);return n};Bs.getProperty=function(e,t,n){let i=n.properties[e],o=t[e];Array.isArray(o)&&(o=o.slice());let r=!0;if(o=i.handleNoData(o),!d(o)&&d(i.default))return o=Ke(i.default,!0),i.unpackVectorAndMatrixTypes(o,r);if(d(o))return o=i.normalize(o),o=i.applyValueTransform(o),i.unpackVectorAndMatrixTypes(o,r)};Bs.setProperty=function(e,t,n,i){if(!d(n[e]))return!1;Array.isArray(t)&&(t=t.slice());let o,r=i.properties;d(r)&&(o=r[e]);let s=!0;return d(o)&&(t=o.packVectorAndMatrixTypes(t,s),t=o.unapplyValueTransform(t),t=o.unnormalize(t)),n[e]=t,!0};Bs.getPropertyBySemantic=function(e,t,n){let i=n.propertiesBySemantic;if(!d(i))return;let o=i[e];if(d(o))return Bs.getProperty(o.id,t,n)};Bs.setPropertyBySemantic=function(e,t,n,i){let o=i.propertiesBySemantic;if(!d(o))return!1;let r=i.propertiesBySemantic[e];return d(r)?Bs.setProperty(r.id,t,n,i):!1};var Mn=Bs;function Sp(e){e=g(e,g.EMPTY_OBJECT);let t=e.subtreeMetadata,n=e.class,i=d(t.properties)?t.properties:{};this._class=n,this._properties=i,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(Sp.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});Sp.prototype.hasProperty=function(e){return Mn.hasProperty(e,this._properties,this._class)};Sp.prototype.hasPropertyBySemantic=function(e){return Mn.hasPropertyBySemantic(e,this._properties,this._class)};Sp.prototype.getPropertyIds=function(e){return Mn.getPropertyIds(this._properties,this._class,e)};Sp.prototype.getProperty=function(e){return Mn.getProperty(e,this._properties,this._class)};Sp.prototype.setProperty=function(e,t){return Mn.setProperty(e,t,this._properties,this._class)};Sp.prototype.getPropertyBySemantic=function(e){return Mn.getPropertyBySemantic(e,this._properties,this._class)};Sp.prototype.setPropertyBySemantic=function(e,t){return Mn.setPropertyBySemantic(e,t,this._properties,this._class)};var yE=Sp;var V6t=T(S(),1);var y6t=T(S(),1);var M7t=T(S(),1);var Et={INT8:"INT8",UINT8:"UINT8",INT16:"INT16",UINT16:"UINT16",INT32:"INT32",UINT32:"UINT32",INT64:"INT64",UINT64:"UINT64",FLOAT32:"FLOAT32",FLOAT64:"FLOAT64"};Et.getMinimum=function(e){switch(e){case Et.INT8:return-128;case Et.UINT8:return 0;case Et.INT16:return-32768;case Et.UINT16:return 0;case Et.INT32:return-2147483648;case Et.UINT32:return 0;case Et.INT64:return Mt.supportsBigInt()?BigInt("-9223372036854775808"):-Math.pow(2,63);case Et.UINT64:return Mt.supportsBigInt()?BigInt(0):0;case Et.FLOAT32:return-34028234663852886e22;case Et.FLOAT64:return-Number.MAX_VALUE}};Et.getMaximum=function(e){switch(e){case Et.INT8:return 127;case Et.UINT8:return 255;case Et.INT16:return 32767;case Et.UINT16:return 65535;case Et.INT32:return 2147483647;case Et.UINT32:return 4294967295;case Et.INT64:return Mt.supportsBigInt()?BigInt("9223372036854775807"):Math.pow(2,63)-1;case Et.UINT64:return Mt.supportsBigInt()?BigInt("18446744073709551615"):Math.pow(2,64)-1;case Et.FLOAT32:return 34028234663852886e22;case Et.FLOAT64:return Number.MAX_VALUE}};Et.isIntegerType=function(e){switch(e){case Et.INT8:case Et.UINT8:case Et.INT16:case Et.UINT16:case Et.INT32:case Et.UINT32:case Et.INT64:case Et.UINT64:return!0;default:return!1}};Et.isUnsignedIntegerType=function(e){switch(e){case Et.UINT8:case Et.UINT16:case Et.UINT32:case Et.UINT64:return!0;default:return!1}};Et.isVectorCompatible=function(e){switch(e){case Et.INT8:case Et.UINT8:case Et.INT16:case Et.UINT16:case Et.INT32:case Et.UINT32:case Et.FLOAT32:case Et.FLOAT64:return!0;default:return!1}};Et.normalize=function(e,t){return Math.max(Number(e)/Number(Et.getMaximum(t)),-1)};Et.unnormalize=function(e,t){let n=Et.getMaximum(t),i=Et.isUnsignedIntegerType(t)?0:-n;return e=W.sign(e)*Math.round(Math.abs(e)*Number(n)),(t===Et.INT64||t===Et.UINT64)&&Mt.supportsBigInt()&&(e=BigInt(e)),e>n?n:e<i?i:e};Et.applyValueTransform=function(e,t,n){return n*e+t};Et.unapplyValueTransform=function(e,t,n){return n===0?0:(e-t)/n};Et.getSizeInBytes=function(e){switch(e){case Et.INT8:case Et.UINT8:return 1;case Et.INT16:case Et.UINT16:return 2;case Et.INT32:case Et.UINT32:return 4;case Et.INT64:case Et.UINT64:return 8;case Et.FLOAT32:return 4;case Et.FLOAT64:return 8}};Et.fromComponentDatatype=function(e){switch(e){case Q.BYTE:return Et.INT8;case Q.UNSIGNED_BYTE:return Et.UINT8;case Q.SHORT:return Et.INT16;case Q.UNSIGNED_SHORT:return Et.UINT16;case Q.INT:return Et.INT32;case Q.UNSIGNED_INT:return Et.UINT32;case Q.FLOAT:return Et.FLOAT32;case Q.DOUBLE:return Et.FLOAT64}};Et.toComponentDatatype=function(e){switch(e){case Et.INT8:return Q.BYTE;case Et.UINT8:return Q.UNSIGNED_BYTE;case Et.INT16:return Q.SHORT;case Et.UINT16:return Q.UNSIGNED_SHORT;case Et.INT32:return Q.INT;case Et.UINT32:return Q.UNSIGNED_INT;case Et.FLOAT32:return Q.FLOAT;case Et.FLOAT64:return Q.DOUBLE}};var tn=Object.freeze(Et);var r6t=T(S(),1);var K7t=T(S(),1);var Io={SCALAR:"SCALAR",VEC2:"VEC2",VEC3:"VEC3",VEC4:"VEC4",MAT2:"MAT2",MAT3:"MAT3",MAT4:"MAT4",BOOLEAN:"BOOLEAN",STRING:"STRING",ENUM:"ENUM"};Io.isVectorType=function(e){switch(e){case Io.VEC2:case Io.VEC3:case Io.VEC4:return!0;default:return!1}};Io.isMatrixType=function(e){switch(e){case Io.MAT2:case Io.MAT3:case Io.MAT4:return!0;default:return!1}};Io.getComponentCount=function(e){switch(e){case Io.SCALAR:case Io.STRING:case Io.ENUM:case Io.BOOLEAN:return 1;case Io.VEC2:return 2;case Io.VEC3:return 3;case Io.VEC4:return 4;case Io.MAT2:return 4;case Io.MAT3:return 9;case Io.MAT4:return 16}};Io.getMathType=function(e){switch(e){case Io.VEC2:return D;case Io.VEC3:return h;case Io.VEC4:return se;case Io.MAT2:return $i;case Io.MAT3:return $;case Io.MAT4:return A;default:return}};var Ot=Object.freeze(Io);function fa(e){e=g(e,g.EMPTY_OBJECT);let t=e.id,n=e.type,i=e.componentType,o=e.enumType,r=d(i)&&tn.isIntegerType(i)&&g(e.normalized,!1);this._id=t,this._name=e.name,this._description=e.description,this._semantic=e.semantic,this._isLegacyExtension=e.isLegacyExtension,this._type=n,this._componentType=i,this._enumType=o,this._valueType=d(o)?o.valueType:i,this._isArray=g(e.isArray,!1),this._isVariableLengthArray=g(e.isVariableLengthArray,!1),this._arrayLength=e.arrayLength,this._min=Ke(e.min,!0),this._max=Ke(e.max,!0),this._normalized=r;let s=Ke(e.offset,!0),a=Ke(e.scale,!0),c=d(s)||d(a),l=!0;d(s)||(s=this.expandConstant(0,l)),d(a)||(a=this.expandConstant(1,l)),this._offset=s,this._scale=a,this._hasValueTransform=c,this._noData=Ke(e.noData,!0),this._default=Ke(e.default,!0),this._required=g(e.required,!0),this._extras=Ke(e.extras,!0),this._extensions=Ke(e.extensions,!0)}fa.fromJson=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.id,n=e.property,i=dWe(n),o=uWe(n,e.enums),r;return d(i)?i?r=d(n.optional)?!n.optional:!0:r=g(n.required,!1):r=!1,new fa({id:t,type:o.type,componentType:o.componentType,enumType:o.enumType,isArray:o.isArray,isVariableLengthArray:o.isVariableLengthArray,arrayLength:o.arrayLength,normalized:n.normalized,min:n.min,max:n.max,offset:n.offset,scale:n.scale,noData:n.noData,default:n.default,required:r,name:n.name,description:n.description,semantic:n.semantic,extras:n.extras,extensions:n.extensions,isLegacyExtension:i})};Object.defineProperties(fa.prototype,{id:{get:function(){return this._id}},name:{get:function(){return this._name}},description:{get:function(){return this._description}},type:{get:function(){return this._type}},enumType:{get:function(){return this._enumType}},componentType:{get:function(){return this._componentType}},valueType:{get:function(){return this._valueType}},isArray:{get:function(){return this._isArray}},isVariableLengthArray:{get:function(){return this._isVariableLengthArray}},arrayLength:{get:function(){return this._arrayLength}},normalized:{get:function(){return this._normalized}},max:{get:function(){return this._max}},min:{get:function(){return this._min}},noData:{get:function(){return this._noData}},default:{get:function(){return this._default}},required:{get:function(){return this._required}},semantic:{get:function(){return this._semantic}},hasValueTransform:{get:function(){return this._hasValueTransform}},offset:{get:function(){return this._offset}},scale:{get:function(){return this._scale}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});function dWe(e){if(e.type==="ARRAY")return!0;let t=e.type;if(t===Ot.SCALAR||Ot.isMatrixType(t)||Ot.isVectorType(t))return!1;if(d(tn[t]))return!0;if(d(e.noData)||d(e.scale)||d(e.offset)||d(e.required)||d(e.count)||d(e.array)||d(e.optional))return!1}function uWe(e,t){let n=e.type,i=e.componentType,o=n==="ARRAY",r,s,a;o?(r=!0,s=e.componentCount,a=!d(s)):e.array?(r=!0,s=e.count,a=!d(e.count)):(r=!1,s=void 0,a=!1);let c;if(d(e.enumType)&&(c=t[e.enumType]),n===Ot.ENUM)return{type:n,componentType:void 0,enumType:c,valueType:c.valueType,isArray:r,isVariableLengthArray:a,arrayLength:s};if(o&&i===Ot.ENUM)return{type:i,componentType:void 0,enumType:c,valueType:c.valueType,isArray:r,isVariableLengthArray:a,arrayLength:s};if(n===Ot.SCALAR||Ot.isMatrixType(n)||Ot.isVectorType(n))return{type:n,componentType:i,enumType:void 0,valueType:i,isArray:r,isVariableLengthArray:a,arrayLength:s};if(n===Ot.BOOLEAN||n===Ot.STRING)return{type:n,componentType:void 0,enumType:void 0,valueType:void 0,isArray:r,isVariableLengthArray:a,arrayLength:s};if(o&&(i===Ot.BOOLEAN||i===Ot.STRING))return{type:i,componentType:void 0,enumType:void 0,valueType:void 0,isArray:r,isVariableLengthArray:a,arrayLength:s};if(d(i)&&d(tn[i]))return{type:Ot.SCALAR,componentType:i,enumType:void 0,valueType:i,isArray:r,isVariableLengthArray:a,arrayLength:s};if(d(tn[n]))return{type:Ot.SCALAR,componentType:n,enumType:void 0,valueType:n,isArray:r,isVariableLengthArray:a,arrayLength:s}}fa.prototype.normalize=function(e){return this._normalized?hY(e,this._valueType,tn.normalize):e};fa.prototype.unnormalize=function(e){return this._normalized?hY(e,this._valueType,tn.unnormalize):e};fa.prototype.applyValueTransform=function(e){return!this._hasValueTransform||this._isVariableLengthArray?e:fa.valueTransformInPlace(e,this._offset,this._scale,tn.applyValueTransform)};fa.prototype.unapplyValueTransform=function(e){return!this._hasValueTransform||this._isVariableLengthArray?e:fa.valueTransformInPlace(e,this._offset,this._scale,tn.unapplyValueTransform)};fa.prototype.expandConstant=function(e,t){t=g(t,!1);let n=this._isArray,i=this._arrayLength,o=Ot.getComponentCount(this._type),r=n&&o>1;if(!n&&o===1)return e;if(!n)return new Array(o).fill(e);if(!r)return new Array(i).fill(e);if(!t)return new Array(this._arrayLength*o).fill(e);let s=new Array(o).fill(e);return new Array(this._arrayLength).fill(s)};fa.prototype.handleNoData=function(e){let t=this._noData;if(!d(t))return e;if(!gte(e,t))return e};function gte(e,t){if(!Array.isArray(e))return e===t;if(!Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!gte(e[n],t[n]))return!1;return!0}fa.prototype.unpackVectorAndMatrixTypes=function(e,t){t=g(t,!1);let n=Ot.getMathType(this._type),i=this._isArray,o=Ot.getComponentCount(this._type),r=i&&o>1;return d(n)?t&&r?e.map(function(s){return n.unpack(s)}):i?n.unpackArray(e):n.unpack(e):e};fa.prototype.packVectorAndMatrixTypes=function(e,t){t=g(t,!1);let n=Ot.getMathType(this._type),i=this._isArray,o=Ot.getComponentCount(this._type),r=i&&o>1;return d(n)?t&&r?e.map(function(s){return n.pack(s,[])}):i?n.packArray(e,[]):n.pack(e,[]):e};fa.prototype.validate=function(e){if(!(!d(e)&&d(this._default)))return this._required&&!d(e)?"required property must have a value":this._isArray?mWe(this,e):xte(this,e)};function mWe(e,t){if(!Array.isArray(t))return`value ${t} must be an array`;let n=t.length;if(!e._isVariableLengthArray&&n!==e._arrayLength)return"Array length does not match property.arrayLength";for(let i=0;i<n;i++){let o=xte(e,t[i]);if(d(o))return o}}function xte(e,t){let n=e._type,i=e._componentType,o=e._enumType,r=e._normalized;return Ot.isVectorType(n)?hWe(t,n,i):Ot.isMatrixType(n)?fWe(t,n,i):n===Ot.STRING?pWe(t):n===Ot.BOOLEAN?bWe(t):n===Ot.ENUM?yWe(t,o):gWe(t,i,r)}function hWe(e,t,n){if(!tn.isVectorCompatible(n))return`componentType ${n} is incompatible with vector type ${t}`;if(t===Ot.VEC2&&!(e instanceof D))return`vector value ${e} must be a Cartesian2`;if(t===Ot.VEC3&&!(e instanceof h))return`vector value ${e} must be a Cartesian3`;if(t===Ot.VEC4&&!(e instanceof se))return`vector value ${e} must be a Cartesian4`}function fWe(e,t,n){if(!tn.isVectorCompatible(n))return`componentType ${n} is incompatible with matrix type ${t}`;if(t===Ot.MAT2&&!(e instanceof $i))return`matrix value ${e} must be a Matrix2`;if(t===Ot.MAT3&&!(e instanceof $))return`matrix value ${e} must be a Matrix3`;if(t===Ot.MAT4&&!(e instanceof A))return`matrix value ${e} must be a Matrix4`}function pWe(e){if(typeof e!="string")return RM(e,Ot.STRING)}function bWe(e){if(typeof e!="boolean")return RM(e,Ot.BOOLEAN)}function yWe(e,t){let n=typeof e;if(d(t))return n!=="string"||!d(t.valuesByName[e])?`value ${e} is not a valid enum name for ${t.id}`:void 0}function gWe(e,t,n){let i=typeof e;switch(t){case tn.INT8:case tn.UINT8:case tn.INT16:case tn.UINT16:case tn.INT32:case tn.UINT32:case tn.FLOAT32:case tn.FLOAT64:return i!=="number"?RM(e,t):isFinite(e)?bte(e,t,n):yte(e,t);case tn.INT64:case tn.UINT64:return i!=="number"&&i!=="bigint"?RM(e,t):i==="number"&&!isFinite(e)?yte(e,t):bte(e,t,n)}}function RM(e,t){return`value ${e} does not match type ${t}`}function pte(e,t,n){let i=`value ${e} is out of range for type ${t}`;return n&&(i+=" (normalized)"),i}function bte(e,t,n){if(n){let i=tn.isUnsignedIntegerType(t)?0:-1,o=1;return e<i||e>o?pte(e,t,n):void 0}if(e<tn.getMinimum(t)||e>tn.getMaximum(t))return pte(e,t,n)}function yte(e,t){return`value ${e} of type ${t} must be finite`}function hY(e,t,n){if(!Array.isArray(e))return n(e,t);for(let i=0;i<e.length;i++)e[i]=hY(e[i],t,n);return e}fa.valueTransformInPlace=function(e,t,n,i){if(!Array.isArray(e))return i(e,t,n);for(let o=0;o<e.length;o++)e[o]=fa.valueTransformInPlace(e[o],t[o],n[o],i);return e};var Vb=fa;function gE(e){e=g(e,g.EMPTY_OBJECT);let t=e.count,n=e.property,i=e.classProperty,o=e.bufferViews,r=i.type,s=i.isArray,a=i.isVariableLengthArray,c=i.valueType,l=i.enumType,u=r===Ot.STRING,m=r===Ot.BOOLEAN,p=0,y;if(a){let b=g(n.arrayOffsetType,n.offsetType);b=g(tn[b],tn.UINT32);let R=g(n.arrayOffsets,n.arrayOffsetBufferView);y=new fY(o[R],b,t+1),p+=y.typedArray.byteLength}let f=Ot.getComponentCount(r),x;a?x=y.get(t)-y.get(0):s?x=t*i.arrayLength:x=t;let _=f*x,C;if(u){let b=g(n.stringOffsetType,n.offsetType);b=g(tn[b],tn.UINT32);let R=g(n.stringOffsets,n.stringOffsetBufferView);C=new fY(o[R],b,_+1),p+=C.typedArray.byteLength}(u||m)&&(c=tn.UINT8);let V;u?V=C.get(_)-C.get(0):m?V=Math.ceil(_/8):V=_;let L=g(n.values,n.bufferView),Z=new fY(o[L],c,V);p+=Z.typedArray.byteLength;let G=n.offset,X=n.scale,P=i.hasValueTransform||d(G)||d(X);G=g(G,i.offset),X=g(X,i.scale),G=_te(G),X=_te(X);let v,F,M=this;u?v=function(b){return TWe(b,M._values,M._stringOffsets)}:m?(v=function(b){return SWe(b,M._values)},F=function(b,R){CWe(b,M._values,R)}):d(l)?(v=function(b){let R=M._values.get(b);return l.namesByValue[R]},F=function(b,R){let E=l.valuesByName[R];M._values.set(b,E)}):(v=function(b){return M._values.get(b)},F=function(b,R){M._values.set(b,R)}),this._arrayOffsets=y,this._stringOffsets=C,this._values=Z,this._classProperty=i,this._count=t,this._vectorComponentCount=f,this._min=n.min,this._max=n.max,this._offset=G,this._scale=X,this._hasValueTransform=P,this._getValue=v,this._setValue=F,this._unpackedValues=void 0,this._extras=n.extras,this._extensions=n.extensions,this._byteLength=p}Object.defineProperties(gE.prototype,{hasValueTransform:{get:function(){return this._hasValueTransform}},offset:{get:function(){return this._offset}},scale:{get:function(){return this._scale}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}},byteLength:{get:function(){return this._byteLength}}});gE.prototype.get=function(e){let t=xWe(this,e);return t=this._classProperty.handleNoData(t),d(t)?(t=this._classProperty.normalize(t),t=IWe(this,t),this._classProperty.unpackVectorAndMatrixTypes(t)):(t=this._classProperty.default,this._classProperty.unpackVectorAndMatrixTypes(t))};gE.prototype.set=function(e,t){let n=this._classProperty;t=n.packVectorAndMatrixTypes(t),t=WWe(this,t),t=n.unnormalize(t),_We(this,e,t)};gE.prototype.getTypedArray=function(){if(d(this._values))return this._values.typedArray};function _te(e){if(!Array.isArray(e))return e;let t=[];for(let n=0;n<e.length;n++){let i=e[n];Array.isArray(i)?t.push.apply(t,i):t.push(i)}return t}function xWe(e,t){Ste(e)&&Cte(e);let n=e._classProperty,i=n.isArray,o=n.type,r=Ot.getComponentCount(o);if(d(e._unpackedValues)){let s=e._unpackedValues[t];return i?Ke(s,!0):s}return!i&&r===1?e._getValue(t):Tte(e,n,t)}function Tte(e,t,n){let i,o;if(t.isVariableLengthArray){i=e._arrayOffsets.get(n),o=e._arrayOffsets.get(n+1)-i;let s=Ot.getComponentCount(t.type);i*=s,o*=s}else{let a=g(t.arrayLength,1)*e._vectorComponentCount;i=n*a,o=a}let r=new Array(o);for(let s=0;s<o;s++)r[s]=e._getValue(i+s);return r}function _We(e,t,n){EWe(e,t,n)&&Cte(e);let i=e._classProperty,o=i.isArray,r=i.type,s=Ot.getComponentCount(r);if(d(e._unpackedValues)){i.isArray&&(n=Ke(n,!0)),e._unpackedValues[t]=n;return}if(!o&&s===1){e._setValue(t,n);return}let a,c;if(i.isVariableLengthArray)a=e._arrayOffsets.get(t),c=e._arrayOffsets.get(t+1)-a;else{let u=g(i.arrayLength,1)*e._vectorComponentCount;a=t*u,c=u}for(let l=0;l<c;++l)e._setValue(a+l,n[l])}function TWe(e,t,n){let i=n.get(e),o=n.get(e+1)-i;return ml(t.typedArray,i,o)}function SWe(e,t){let n=e>>3,i=e%8;return(t.typedArray[n]>>i&1)===1}function CWe(e,t,n){let i=e>>3,o=e%8;n?t.typedArray[i]|=1<<o:t.typedArray[i]&=~(1<<o)}function VWe(e,t){let n=t.dataView,i=e*8,o=0,r=(n.getUint8(i+7)&128)>0,s=!0;for(let a=0;a<8;++a){let c=n.getUint8(i+a);r&&(s?c!==0&&(c=~(c-1)&255,s=!1):c=~c&255),o+=c*Math.pow(256,a)}return r&&(o=-o),o}function LWe(e,t){let n=t.dataView,i=e*8,o=BigInt(0),r=(n.getUint8(i+7)&128)>0,s=!0;for(let a=0;a<8;++a){let c=n.getUint8(i+a);r&&(s?c!==0&&(c=~(c-1)&255,s=!1):c=~c&255),o+=BigInt(c)*(BigInt(1)<<BigInt(a*8))}return r&&(o=-o),o}function RWe(e,t){let n=t.dataView,i=e*8,o=n.getUint32(i,!0),r=n.getUint32(i+4,!0);return o+4294967296*r}function ZWe(e,t){let n=t.dataView,i=e*8,o=BigInt(n.getUint32(i,!0)),r=BigInt(n.getUint32(i+4,!0));return o+BigInt(4294967296)*r}function GWe(e){switch(e){case tn.INT8:return Q.BYTE;case tn.UINT8:return Q.UNSIGNED_BYTE;case tn.INT16:return Q.SHORT;case tn.UINT16:return Q.UNSIGNED_SHORT;case tn.INT32:return Q.INT;case tn.UINT32:return Q.UNSIGNED_INT;case tn.FLOAT32:return Q.FLOAT;case tn.FLOAT64:return Q.DOUBLE}}function Ste(e){if(d(e._unpackedValues))return!1;let t=e._classProperty,n=t.type,i=t.valueType;return n===Ot.STRING||i===tn.INT64&&!Mt.supportsBigInt64Array()||i===tn.UINT64&&!Mt.supportsBigUint64Array()}function EWe(e,t,n){if(Ste(e))return!0;let i=e._arrayOffsets;if(d(i)){let o=i.get(t+1)-i.get(t),r=n.length;if(o!==r)return!0}return!1}function Cte(e){e._unpackedValues=XWe(e),e._arrayOffsets=void 0,e._stringOffsets=void 0,e._values=void 0}function XWe(e){let t=e._count,n=new Array(t),i=e._classProperty,o=i.isArray,r=i.type,s=Ot.getComponentCount(r);if(!o&&s===1){for(let a=0;a<t;++a)n[a]=e._getValue(a);return n}for(let a=0;a<t;a++)n[a]=Tte(e,i,a);return n}function IWe(e,t){let i=e._classProperty.isVariableLengthArray;return!e._hasValueTransform||i?t:Vb.valueTransformInPlace(t,e._offset,e._scale,tn.applyValueTransform)}function WWe(e,t){let i=e._classProperty.isVariableLengthArray;return!e._hasValueTransform||i?t:Vb.valueTransformInPlace(t,e._offset,e._scale,tn.unapplyValueTransform)}function fY(e,t,n){let i=this,o,r,s;if(t===tn.INT64)Mt.supportsBigInt()?Mt.supportsBigInt64Array()?(o=new BigInt64Array(e.buffer,e.byteOffset,n),s=function(a,c){i.typedArray[a]=BigInt(c)}):(o=new Uint8Array(e.buffer,e.byteOffset,n*8),r=function(a){return LWe(a,i)}):(Pt("INT64 type is not fully supported on this platform. Values greater than 2^53 - 1 or less than -(2^53 - 1) may lose precision when read."),o=new Uint8Array(e.buffer,e.byteOffset,n*8),r=function(a){return VWe(a,i)});else if(t===tn.UINT64)Mt.supportsBigInt()?Mt.supportsBigUint64Array()?(o=new BigUint64Array(e.buffer,e.byteOffset,n),s=function(a,c){i.typedArray[a]=BigInt(c)}):(o=new Uint8Array(e.buffer,e.byteOffset,n*8),r=function(a){return ZWe(a,i)}):(Pt("UINT64 type is not fully supported on this platform. Values greater than 2^53 - 1 may lose precision when read."),o=new Uint8Array(e.buffer,e.byteOffset,n*8),r=function(a){return RWe(a,i)});else{let a=GWe(t);o=Q.createArrayBufferView(a,e.buffer,e.byteOffset,n),s=function(c,l){i.typedArray[c]=l}}d(r)||(r=function(a){return i.typedArray[a]}),this.typedArray=o,this.dataView=new DataView(o.buffer,o.byteOffset),this.get=r,this.set=s,this._componentType=t}var xE=gE;function gm(e){e=g(e,g.EMPTY_OBJECT);let t=e.count,n=e.class,i=0,o={};if(d(e.properties)){for(let r in e.properties)if(e.properties.hasOwnProperty(r)){let s=new xE({count:t,property:e.properties[r],classProperty:n.properties[r],bufferViews:e.bufferViews});o[r]=s,i+=s.byteLength}}this._count=t,this._class=n,this._properties=o,this._byteLength=i}Object.defineProperties(gm.prototype,{count:{get:function(){return this._count}},class:{get:function(){return this._class}},byteLength:{get:function(){return this._byteLength}}});gm.prototype.hasProperty=function(e){return Mn.hasProperty(e,this._properties,this._class)};gm.prototype.hasPropertyBySemantic=function(e){return Mn.hasPropertyBySemantic(e,this._properties,this._class)};gm.prototype.getPropertyIds=function(e){return Mn.getPropertyIds(this._properties,this._class,e)};gm.prototype.getProperty=function(e,t){let n=this._properties[t],i;return d(n)?i=n.get(e):i=PWe(this._class,t),i};gm.prototype.setProperty=function(e,t,n){let i=this._properties[t];return d(i)?(i.set(e,n),!0):!1};gm.prototype.getPropertyBySemantic=function(e,t){let n,i=this._class.propertiesBySemantic;if(d(i)&&(n=i[t]),d(n))return this.getProperty(e,n.id)};gm.prototype.setPropertyBySemantic=function(e,t,n){let i,o=this._class.propertiesBySemantic;return d(o)&&(i=o[t]),d(i)?this.setProperty(e,i.id,n):!1};gm.prototype.getPropertyTypedArray=function(e){let t=this._properties[e];if(d(t))return t.getTypedArray()};gm.prototype.getPropertyTypedArrayBySemantic=function(e){let t,n=this._class.propertiesBySemantic;if(d(n)&&(t=n[e]),d(t))return this.getPropertyTypedArray(t.id)};function PWe(e,t){let n=e.properties;if(!d(n))return;let i=n[t];if(d(i)&&d(i.default)){let o=i.default;return i.isArray&&(o=Ke(o,!0)),o=i.normalize(o),i.unpackVectorAndMatrixTypes(o)}}var pl=gm;var qin=T(S(),1);var M6t=T(S(),1);var X6t=T(S(),1);function Lb(){}Object.defineProperties(Lb.prototype,{cacheKey:{get:function(){fe.throwInstantiationError()}}});Lb.prototype.load=function(){fe.throwInstantiationError()};Lb.prototype.unload=function(){};Lb.prototype.process=function(e){return!1};Lb.prototype.getError=function(e,t){d(t)&&d(t.message)&&(e+=`
  5296. ${t.message}`);let n=new me(e);return d(t)&&(n.stack=`Original stack:
  5297. ${t.stack}
  5298. Handler stack:
  5299. ${n.stack}`),n};Lb.prototype.isDestroyed=function(){return!1};Lb.prototype.destroy=function(){return this.unload(),ue(this)};var oo=Lb;var W6t=T(S(),1),vWe={UNLOADED:0,LOADING:1,LOADED:2,PROCESSING:3,READY:4,FAILED:5},Rt=Object.freeze(vWe);function Cp(e){e=g(e,g.EMPTY_OBJECT);let t=e.typedArray,n=e.resource,i=e.cacheKey;this._typedArray=t,this._resource=n,this._cacheKey=i,this._state=Rt.UNLOADED,this._promise=void 0}d(Object.create)&&(Cp.prototype=Object.create(oo.prototype),Cp.prototype.constructor=Cp);Object.defineProperties(Cp.prototype,{cacheKey:{get:function(){return this._cacheKey}},typedArray:{get:function(){return this._typedArray}}});Cp.prototype.load=async function(){return d(this._promise)?this._promise:d(this._typedArray)?(this._promise=Promise.resolve(this),this._promise):(this._promise=wWe(this),this._promise)};async function wWe(e){let t=e._resource;e._state=Rt.LOADING;try{let n=await Cp._fetchArrayBuffer(t);return e.isDestroyed()?void 0:(e._typedArray=new Uint8Array(n),e._state=Rt.READY,e)}catch(n){if(e.isDestroyed())return;e._state=Rt.FAILED;let i=`Failed to load external buffer: ${t.url}`;throw e.getError(i,n)}}Cp._fetchArrayBuffer=function(e){return e.fetchArrayBuffer()};Cp.prototype.unload=function(){this._typedArray=void 0};var gx=Cp;var rqt=T(S(),1);var z6t=T(S());var k6t=T(S()),N6t=function(){var e="b9H79TebbbeJq9Geueu9Geub9Gbb9Gvuuuuueu9Gduueu9Gluuuueu9Gvuuuuub9Gouuuuuub9Gluuuub9GiuuueuiKLdilevlevlooroowwvwbDDbelve9Weiiviebeoweuec:W;kekr;RiOo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWVbe8F9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWV9c9V919U9KbdE9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949wWV79P9V9UbiY9TW79O9V9Wt9FW9U9J9V9KW69U9KW949c919M9MWVbl8E9TW79O9V9Wt9FW9U9J9V9KW69U9KW949c919M9MWV9c9V919U9Kbv8A9TW79O9V9Wt9FW9U9J9V9KW69U9KW949wWV79P9V9UboE9TW79O9V9Wt9FW9U9J9V9KW69U9KW949tWG91W9U9JWbra9TW79O9V9Wt9FW9U9J9V9KW69U9KW949tWG91W9U9JW9c9V919U9KbwL9TW79O9V9Wt9FW9U9J9V9KWS9P2tWV9p9JtbDK9TW79O9V9Wt9FW9U9J9V9KWS9P2tWV9r919HtbqL9TW79O9V9Wt9FW9U9J9V9KWS9P2tWVT949WbkE9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94J9H9J9OWbPa9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94J9H9J9OW9ttV9P9Wbsa9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94SWt9J9O9sW9T9H9WbzK9TW79O9V9Wt9F79W9Ht9P9H29t9VVt9sW9T9H9WbHl79IV9RbODwebcekdQXq:g9sLdbk;3keYu8Jjjjjbcjo9Rgv8Kjjjjbcbhodnalcefae0mbabcbRb:S:kjjbc:GeV86bbavcjdfcbcjdzNjjjb8AdnaiTmbavcjdfadalz:tjjjb8Akabaefhrabcefhwavalfcbcbcjdal9RalcFe0EzNjjjb8Aavavcjdfalz:tjjjbhDcj;abal9UhodndndndndnalTmbaoc;WFbGgecjdaecjd6Ehqcbhkdninakai9pmiaDcjlfcbcjdzNjjjb8Aaqaiak9Rakaqfai6Egxcsfgecl4cifcd4hmadakal2fhPdndndndndnaec9WGgsTmbcbhzcehHaPhOawhAxekdnaxTmbcbhAcehHaPhCinaDaAfRbbhXaDcjlfheaChoaxhQinaeaoRbbgLaX9RgXcetaX;acr4786bbaoalfhoaecefheaLhXaQcufgQmbkaraw9Ram6miawcbamzNjjjbgeTmiaCcefhCaeamfhwaAcefgAal6hHaAal9hmbxvkkaraw9Ram6mvawcbamzNjjjb8AceheinawgXamfhwalaegoSmldnaraw9Ram6mbaocefheawcbamzNjjjb8AaXmekkaoal6hHxekindnaxTmbaDazfRbbhXaDcjlfheaOhoaxhQinaeaoRbbgLaX9RgXcetaX;acr4786bbaoalfhoaecefheaLhXaQcufgQmbkkaraA9Ram6mearaAcbamzNjjjbgKamfgw9RcK6mdcbhYaDcjlfhAinaDcjlfaYfh8AcwhCczhLcehQindndnaQce9hmbcuhoa8ARbbmecbhodninaogecsSmeaecefhoaAaefcefRbbTmbkkcucbaecs6EhoxekaQcetc;:FFFeGhocuaQtcu7cFeGhXcbheinaoaXaAaefRbb9nfhoaecefgecz9hmbkkaoaLaoaL6geEhLaQaCaeEhCaQcetgQcw6mbkdndndndnaCcufPdiebkaKaYco4fgeaeRbbcdciaCclSEaYci4coGtV86bbaCcw9hmeawa8A8Pbb83bbawcwfa8Acwf8Pbb83bbawczfhwxdkaKaYco4fgeaeRbbceaYci4coGtV86bbkdncwaC9TgEmbinawcb86bbawcefhwxbkkcuaCtcu7h8Acbh3aAh5ina5heaEhQcbhoinaeRbbgLa8AcFeGgXaLaX6EaoaCtVhoaecefheaQcufgQmbkawao86bba5aEfh5awcefhwa3aEfg3cz6mbkcbheindnaAaefRbbgoaX6mbawao86bbawcefhwkaecefgecz9hmbkkdnaYczfgYas9pmbaAczfhAaraw9RcL0mekkaYas6meawTmeaOcefhOazcefgzal6hHawhAazalSmixbkkcbhwaHceGTmexikcbhwaHceGmdkaDaPaxcufal2falz:tjjjb8AaxakfhkawmbkcbhoxokcbhoxvkaiTmekcbhoaraw9Ralcaalca0E6mialc8F9nmexdkcbhoaecufca6mdkawcbcaal9RgezNjjjbaefhwkawaDcjdfalz:tjjjbalfab9Rhokavcjof8Kjjjjbaok9heeuaecaaeca0Eabcj;abae9Uc;WFbGgdcjdadcjd6Egdfcufad9Uae2adcl4cifcd4adV2fcefkmbcbabBd:S:kjjbk;rse3u8Jjjjjbc;ae9Rgl8Kjjjjbcbhvdnaici9UgocHfae0mbabcbyd:C:kjjbgrc;GeV86bbalc;abfcFecjezNjjjb8AalcUfgw9cu83ibalc8WfgD9cu83ibalcyfgq9cu83ibalcafgk9cu83ibalcKfgx9cu83ibalczfgm9cu83ibal9cu83iwal9cu83ibabaefc9WfhPabcefgsaofhednaiTmbcmcsarcb9kgzEhHcbhOcbhAcbhCcbhXcbhQindnaeaP9nmbcbhvxikaQcufhvadaCcdtfgoydbhLaocwfydbhKaoclfydbhYcbh8Adndninalc;abfavcsGcitfgoydlhEdndndnaoydbgoaL9hmbaEaYSmekdnaoaY9hmbaEaK9hmba8Acefh8AxekaoaK9hmeaEaL9hmea8Acdfh8Aka8Ac870mdaXcufhvada8AciGcx2goc:y1jjbfydbaCfcdtfydbhEadaocN1jjbfydbaCfcdtfydbhKadaoc:q1jjbfydbaCfcdtfydbhLcbhodnindnalavcsGcdtfydbaE9hmbaohYxdkcuhYavcufhvaocefgocz9hmbkkaEaOSgvaYce9iaYaH9oVgoGh3dndndndndncbcsavEaYaoEgvcs9hmbarce9imbaEaEaAaEcefaASgvEgAcefSmecmcsavEhvkasava8Acdtc;WeGV86bbavcs9hmeaEaA9Rgvcetavc8F917hvinaeavcFb0crtavcFbGV86bbaecefheavcje6hoavcr4hvaoTmbkaEhAxdkcPhvasa8AcdtcPV86bbaEhAkavTmbavaH9imekalaXcdtfaEBdbaXcefcsGhXkaOa3fhOalc;abfaQcitfgvaKBdlavaEBdbalc;abfaQcefcsGgvcitfgoaEBdlaoaLBdbavcefhoxikavcufhva8Aclfg8Ac;ab9hmbkkdnadceaKaOScetaYaOSEcx2gvc:q1jjbfydbaCfcdtfydbgLTadavcN1jjbfydbaCfcdtfydbg8AceSGadavc:y1jjbfydbaCfcdtfydbgYcdSGaOcb9hGazGg5ce9hmbaw9cu83ibaD9cu83ibaq9cu83ibak9cu83ibax9cu83ibam9cu83ibal9cu83iwal9cu83ibcbhOkcbhEaXcufgvhodnindnalaocsGcdtfydba8A9hmbaEhKxdkcuhKaocufhoaEcefgEcz9hmbkkcbhodnindnalavcsGcdtfydbaY9hmbaohExdkcuhEavcufhvaocefgocz9hmbkkaOaLaOSg8Efh3dndnaKcm0mbaKcefhKxekcbcsa8Aa3SgvEhKa3avfh3kdndnaEcm0mbaEcefhExekcbcsaYa3SgvEhEa3avfh3kc9:cua8EEh8FaEaKcltVhocbhvdndndninavcj1jjbfRbbaocFeGSmeavcefgvcz9hmbxdkka5aLaO9havcm0VVmbasavc;WeV86bbxekasa8F86bbaeao86bbaecefhekdna8EmbaLaA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombkaLhAkdnaKcs9hmba8AaA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombka8AhAkdnaEcs9hmbaYaA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombkaYhAkalaXcdtfaLBdbaXcefcsGhvdndnaKPzbeeeeeeeeeeeeeebekalavcdtfa8ABdbaXcdfcsGhvkdndnaEPzbeeeeeeeeeeeeeebekalavcdtfaYBdbavcefcsGhvkalc;abfaQcitfgoaLBdlaoa8ABdbalc;abfaQcefcsGcitfgoa8ABdlaoaYBdbalc;abfaQcdfcsGcitfgoaYBdlaoaLBdbaQcifhoavhXa3hOkascefhsaocsGhQaCcifgCai6mbkkcbhvaeaP0mbcbhvinaeavfavcj1jjbfRbb86bbavcefgvcz9hmbkaeab9Ravfhvkalc;aef8KjjjjbavkZeeucbhddninadcefgdc8F0meceadtae6mbkkadcrfcFeGcr9Uci2cdfabci9U2cHfkmbcbabBd:C:kjjbk:ydewu8Jjjjjbcz9Rhlcbhvdnaicvfae0mbcbhvabcbRb:C:kjjbc;qeV86bbal9cb83iwabcefhoabaefc98fhrdnaiTmbcbhwcbhDindnaoar6mbcbskadaDcdtfydbgqalcwfawaqav9Rgvavc8F91gv7av9Rc507gwcdtfgkydb9Rgvc8E91c9:Gavcdt7awVhvinaoavcFb0gecrtavcFbGV86bbavcr4hvaocefhoaembkakaqBdbaqhvaDcefgDai9hmbkkcbhvaoar0mbaocbBbbaoab9RclfhvkavkBeeucbhddninadcefgdc8F0meceadtae6mbkkadcwfcFeGcr9Uab2cvfk:dvli99dui99ludnaeTmbcuadcetcuftcu7:Yhvdndncuaicuftcu7:YgoJbbbZMgr:lJbbb9p9DTmbar:Ohwxekcjjjj94hwkcbhicbhDinalclfIdbgrJbbbbJbbjZalIdbgq:lar:lMalcwfIdbgk:lMgr:varJbbbb9BEgrNhxaqarNhralcxfIdbhqdndnakJbbbb9GTmbaxhkxekJbbjZar:l:tgkak:maxJbbbb9GEhkJbbjZax:l:tgxax:marJbbbb9GEhrkdndnaqJbbj:;aqJbbj:;9GEgxJbbjZaxJbbjZ9FEavNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohmxekcjjjj94hmkdndnakJbbj:;akJbbj:;9GEgqJbbjZaqJbbjZ9FEaoNJbbbZJbbb:;akJbbbb9GEMgq:lJbbb9p9DTmbaq:OhPxekcjjjj94hPkdndnarJbbj:;arJbbj:;9GEgqJbbjZaqJbbjZ9FEaoNJbbbZJbbb:;arJbbbb9GEMgr:lJbbb9p9DTmbar:Ohsxekcjjjj94hskdndnadcl9hmbabaifgzas86bbazcifam86bbazcdfaw86bbazcefaP86bbxekabaDfgzas87ebazcofam87ebazclfaw87ebazcdfaP87ebkalczfhlaiclfhiaDcwfhDaecufgembkkk;klld99eud99eudnaeTmbdndncuaicuftcu7:YgvJbbbZMgo:lJbbb9p9DTmbao:Ohixekcjjjj94hikaic;8FiGhrinabcofcicdalclfIdb:lalIdb:l9EgialcwfIdb:lalaicdtfIdb:l9EEgialcxfIdb:lalaicdtfIdb:l9EEgiarV87ebdndnalaicefciGcdtfIdbJ;Zl:1ZNJbbj:;JbbjZalaicdtfIdbJbbbb9DEgoNgwJbbj:;awJbbj:;9GEgDJbbjZaDJbbjZ9FEavNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohqxekcjjjj94hqkabaq87ebdndnaoalaicdfciGcdtfIdbJ;Zl:1ZNNgwJbbj:;awJbbj:;9GEgDJbbjZaDJbbjZ9FEavNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohqxekcjjjj94hqkabcdfaq87ebdndnaoalaicufciGcdtfIdbJ;Zl:1ZNNgoJbbj:;aoJbbj:;9GEgwJbbjZawJbbjZ9FEavNJbbbZJbbb:;aoJbbbb9GEMgo:lJbbb9p9DTmbao:Ohixekcjjjj94hikabclfai87ebabcwfhbalczfhlaecufgembkkk:Hvdxue998Jjjjjbcjd9Rgo8Kjjjjbadcd4hrdndndndnavcd9hmbadcl6mearcearce0EhwaohDinaDc:CuBdbaDclfhDawcufgwmbkaeTmiadcl6mdarcearce0EhqarcdthkalhxcbhminaohDaxhwaqhPinaDaDydbgsawydbgzcL4cFeGc:cufcbazEgzasaz9kEBdbawclfhwaDclfhDaPcufgPmbkaxakfhxamcefgmae9hmbkkaeTmdxekaeTmekavcb9hadcl6gqVhHarcearce0Ehkarcdthrceai9Rhmcbhdindndndnavce9hmbaqmdc:CuhwalhDakhPinawaDydbgscL4cFeGc:cufcbasEgsawas9kEhwaDclfhDaPcufgPmbxdkkc:CuhwaHmbaohDalhPakhsinaDaPydbgzcL4cFeGgxc8Aaxc8A9kEc:cufcbazEBdbaPclfhPaDclfhDascufgsmbkkaqmbcbhDakhsinawhPdnavceSmbaoaDfydbhPkdndnalaDfIdbgOcjjj;8iamaPfgPcLt9R::NJbbbZJbbb:;aOJbbbb9GEMgO:lJbbb9p9DTmbaO:Ohzxekcjjjj94hzkabaDfazcFFFrGaPcKtVBdbaDclfhDascufgsmbkkabarfhbalarfhladcefgdae9hmbkkaocjdf8KjjjjbkFkdCui998Jjjjjbc:Gd9Rgv8Kjjjjbavc:4efcbc;KbzNjjjb8AcbhodnadTmbcbhoaiTmbdnabae9hmbavcuadcdtgoadcFFFFi0Ecbyd:K:kjjbHjjjjbbgeBd:4eavceBd:ydaeabaoz:tjjjb8Akavc:OefcwfcbBdbav9cb83i:Oeavc:Oefaeadaiavc:4efz:njjjbcuaicdtgraicFFFFi0Egwcbyd:K:kjjbHjjjjbbhoavc:4efavyd:ydgDcdtfaoBdbavaDcefgqBd:ydaoavyd:Oegkarz:tjjjbhxavc:4efaqcdtfadci9Ugmcbyd:K:kjjbHjjjjbbgoBdbavaDcdfgrBd:ydaocbamzNjjjbhPavc:4efarcdtfawcbyd:K:kjjbHjjjjbbgsBdbavaDcifgqBd:ydaxhoashrinaralIdbalaoydbgwcwawcw6Ecdtfc;ebfIdbMUdbaoclfhoarclfhraicufgimbkavc:4efaqcdtfcuamcdtadcFFFF970Ecbyd:K:kjjbHjjjjbbgqBdbavaDclfBd:yddnadci6mbamceamce0EhiaehoaqhrinarasaoydbcdtfIdbasaoclfydbcdtfIdbMasaocwfydbcdtfIdbMUdbaocxfhoarclfhraicufgimbkkavc;qbfhzavhoavyd:SehHavyd:WehOcbhwcbhrcbhAcehCinaohXcihQaearci2gLcdtfgocwfydbhdaoydbhDabaAcx2fgiclfaoclfydbgKBdbaiaDBdbaicwfadBdbaParfce86bbazadBdwazaKBdlazaDBdbaqarcdtfcbBdbdnawTmbcihQaXhiinazaQcdtfaiydbgoBdbaQaoaD9haoaK9hGaoad9hGfhQaiclfhiawcufgwmbkkaAcefhAaxaDcdtfgoaoydbcufBdbaxaKcdtfgoaoydbcufBdbaxadcdtfgoaoydbcufBdbcbhwinaOaHaeawaLfcdtfydbcdtgifydbcdtfgKhoakaifgDydbgdhidnadTmbdninaoydbarSmeaoclfhoaicufgiTmdxbkkaoadcdtaKfc98fydbBdbaDaDydbcufBdbkawcefgwci9hmbkdndndnaQTmbcuhrJbbbbhYcbhDavyd:SehKavyd:WehLindndnakazaDcdtfydbcdtgofydbgimbaDcefhDxekaDcs0hwasaofgdIdbh8AadalcbaDcefgDawEcdtfIdbalaxaofydbgwcwawcw6Ecdtfc;ebfIdbMgEUdbaEa8A:thEaicdthiaLaKaofydbcdtfhoinaqaoydbgwcdtfgdaEadIdbMg8AUdba8AaYaYa8A9DgdEhYawaradEhraoclfhoaic98fgimbkkaDaQ9hmbkarcu9hmekaCam9pmeindnaPaCfRbbmbaChrxdkamaCcefgC9hmbxdkkaQczaQcz6EhwazhoaXhzarcu9hmekkavyd:ydhokaocdtavc:4effc98fhrdninaoTmearydbcbyd:G:kjjbH:bjjjbbarc98fhraocufhoxbkkavc:Gdf8Kjjjjbk;UlevucuaicdtgvaicFFFFi0Egocbyd:K:kjjbHjjjjbbhralalyd9GgwcdtfarBdbalawcefBd9GabarBdbaocbyd:K:kjjbHjjjjbbhralalyd9GgocdtfarBdbalaocefBd9GabarBdlcuadcdtadcFFFFi0Ecbyd:K:kjjbHjjjjbbhralalyd9GgocdtfarBdbalaocefBd9GabarBdwabydbcbavzNjjjb8Aadci9UhwdnadTmbabydbhoaehladhrinaoalydbcdtfgvavydbcefBdbalclfhlarcufgrmbkkdnaiTmbabydbhlabydlhrcbhvaihoinaravBdbarclfhralydbavfhvalclfhlaocufgombkkdnadci6mbawceawce0EhDabydlhrabydwhvcbhlinaecwfydbhoaeclfydbhdaraeydbcdtfgwawydbgwcefBdbavawcdtfalBdbaradcdtfgdadydbgdcefBdbavadcdtfalBdbaraocdtfgoaoydbgocefBdbavaocdtfalBdbaecxfheaDalcefgl9hmbkkdnaiTmbabydlheabydbhlinaeaeydbalydb9RBdbalclfhlaeclfheaicufgimbkkkQbabaeadaic:01jjbz:mjjjbkQbabaeadaic:C:jjjbz:mjjjbk9DeeuabcFeaicdtzNjjjbhlcbhbdnadTmbindnalaeydbcdtfgiydbcu9hmbaiabBdbabcefhbkaeclfheadcufgdmbkkabk;:kivuo99lu8Jjjjjbcj;Hb9Rgl8Kjjjjbcbhvalc1;Gbfcbc;KbzNjjjb8AalcuadcdtadcFFFFi0Egocbyd:K:kjjbHjjjjbbgrBd19GalceBd;O9Galcwfcbyd:m:kjjbBdbalcb8Pd:e:kjjb83ibalc;W;Gbfcwfcbyd:y:kjjbBdbalcb8Pd:q:kjjb83i;W9Gaicd4hwdndnadmbJFFuFhDJFFuuhqJFFuuhkJFFuFhxJFFuuhmJFFuFhPxekawcdthsaehzincbhiinalaifgHazaifIdbgDaHIdbgxaxaD9EEUdbalc;W;GbfaifgHaDaHIdbgxaxaD9DEUdbaiclfgicx9hmbkazasfhzavcefgvad9hmbkalIdwhqalId;49GhDalIdlhkalId;09GhxalIdbhmalId;W9GhPkdndnadTmbJbbbbJbbjZaPam:tJbbbb:xgPaxak:tgxaxaP9DEgxaDaq:tgDaDax9DEgD:vaDJbbbb9BEhDawcdthsarhHadhzindndnaDaeIdbam:tNJb;au9eNJbbbZMgx:lJbbb9p9DTmbax:Ohixekcjjjj94hikaicztaicwtcj;GiGVaicsGVc:p;G:dKGcH2c;d;H:WKGcv2c;j:KM;jbGhvdndnaDaeclfIdbak:tNJb;au9eNJbbbZMgx:lJbbb9p9DTmbax:Ohixekcjjjj94hikaicztaicwtcj;GiGVaicsGVc:p;G:dKGcH2c;d;H:WKGcq2cM;j:KMeGavVhvdndnaDaecwfIdbaq:tNJb;au9eNJbbbZMgx:lJbbb9p9DTmbax:Ohixekcjjjj94hikaHavaicztaicwtcj;GiGVaicsGVc:p;G:dKGcH2c;d;H:WKGcC2c:KM;j:KdGVBdbaeasfheaHclfhHazcufgzmbkalcbcj;GbzNjjjbhiarhHadheinaiaHydbgzcFrGcx2fgvavydbcefBdbaiazcq4cFrGcx2fgvavydlcefBdlaiazcC4cFrGcx2fgzazydwcefBdwaHclfhHaecufgembxdkkalcbcj;GbzNjjjb8AkcbhHcbhzcbhecbhvinalaHfgiydbhsaiazBdbaicwfgwydbhOawavBdbaiclfgiydbhwaiaeBdbasazfhzaOavfhvawaefheaHcxfgHcj;Gb9hmbkcbhialaocbyd:K:kjjbHjjjjbbgzBd:m9GdnadTmbabhHinaHaiBdbaHclfhHadaicefgi9hmbkadTmbabhiadhHinalaraiydbgecdtfydbcFrGcx2fgvavydbgvcefBdbazavcdtfaeBdbaiclfhiaHcufgHmbkazhiadhHinalaraiydbgecdtfydbcq4cFrGcx2fgvavydlgvcefBdlabavcdtfaeBdbaiclfhiaHcufgHmbkabhiadhHinalaraiydbgecdtfydbcC4cFrGcx2fgvavydwgvcefBdwazavcdtfaeBdbaiclfhiaHcufgHmbkadTmbcbhiinabazydbcdtfaiBdbazclfhzadaicefgi9hmbkkclhidninaic98Smealc1;Gbfaifydbcbyd:G:kjjbH:bjjjbbaic98fhixbkkalcj;Hbf8Kjjjjbk9teiucbcbyd:O:kjjbgeabcifc98GfgbBd:O:kjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd:O:kjjbgeabcrfc94GfgbBd:O:kjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik9:eiuZbhedndncbyd:O:kjjbgdaecztgi9nmbcuheadai9RcFFifcz4nbcuSmekadhekcbabae9Rcifc98Gcbyd:O:kjjbfgdBd:O:kjjbdnadZbcztge9nmbadae9RcFFifcz4nb8Akkk:6ddbcjwk:Cdb4:h9w9N94:P:gW:j9O:ye9Pbbbbbbebbbdbbbebbbdbbbbbbbdbbbbbbbebbbbbbb:l29hZ;69:9kZ;N;76Z;rg97Z;z;o9xZ8J;B85Z;:;u9yZ;b;k9HZ:2;Z9DZ9e:l9mZ59A8KZ:r;T3Z:A:zYZ79OHZ;j4::8::Y:D9V8:bbbb9s:49:Z8R:hBZ9M9M;M8:L;z;o8:;8:PG89q;x:J878R:hQ8::M:B;e87bbbbbbjZbbjZbbjZ:E;V;N8::Y:DsZ9i;H;68:xd;R8:;h0838:;W:NoZbbbb:WV9O8:uf888:9i;H;68:9c9G;L89;n;m9m89;D8Ko8:bbbbf:8tZ9m836ZS:2AZL;zPZZ818EZ9e:lxZ;U98F8:819E;68:FFuuFFuuFFuuFFuFFFuFFFuFbc:Cqkzebbbebbbdbbb8WWbb",t=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var n,i=WebAssembly.instantiate(o(e),{}).then(function(y){n=y.instance,n.exports.__wasm_call_ctors(),n.exports.meshopt_encodeVertexVersion(0),n.exports.meshopt_encodeIndexVersion(1)});function o(y){for(var f=new Uint8Array(y.length),x=0;x<y.length;++x){var _=y.charCodeAt(x);f[x]=_>96?_-97:_>64?_-39:_+4}for(var C=0,x=0;x<y.length;++x)f[C++]=f[x]<60?t[f[x]]:(f[x]-60)*64+f[++x];return f.buffer.slice(0,C)}function r(y){if(!y)throw new Error("Assertion failed")}function s(y){return new Uint8Array(y.buffer,y.byteOffset,y.byteLength)}function a(y,f,x,_){var C=n.exports.sbrk,V=C(f.length*4),L=C(x*4),Z=new Uint8Array(n.exports.memory.buffer),G=s(f);Z.set(G,V),_&&_(V,V,f.length,x);var X=y(L,V,f.length,x);Z=new Uint8Array(n.exports.memory.buffer);var P=new Uint32Array(x);new Uint8Array(P.buffer).set(Z.subarray(L,L+x*4)),G.set(Z.subarray(V,V+f.length*4)),C(V-C(0));for(var v=0;v<f.length;++v)f[v]=P[f[v]];return[P,X]}function c(y,f,x,_){var C=n.exports.sbrk,V=C(x*4),L=C(x*_),Z=new Uint8Array(n.exports.memory.buffer);Z.set(s(f),L),y(V,L,x,_),Z=new Uint8Array(n.exports.memory.buffer);var G=new Uint32Array(x);return new Uint8Array(G.buffer).set(Z.subarray(V,V+x*4)),C(V-C(0)),G}function l(y,f,x,_,C){var V=n.exports.sbrk,L=V(f),Z=V(_*C),G=new Uint8Array(n.exports.memory.buffer);G.set(s(x),Z);var X=y(L,f,Z,_,C),P=new Uint8Array(X);return P.set(G.subarray(L,L+X)),V(L-V(0)),P}function u(y){for(var f=0,x=0;x<y.length;++x){var _=y[x];f=f<_?_:f}return f}function m(y,f){if(r(f==2||f==4),f==4)return new Uint32Array(y.buffer,y.byteOffset,y.byteLength/4);var x=new Uint16Array(y.buffer,y.byteOffset,y.byteLength/2);return new Uint32Array(x)}function p(y,f,x,_,C,V,L){var Z=n.exports.sbrk,G=Z(x*_),X=Z(x*V),P=new Uint8Array(n.exports.memory.buffer);P.set(s(f),X),y(G,x,_,C,X,L);var v=new Uint8Array(x*_);return v.set(P.subarray(G,G+x*_)),Z(G-Z(0)),v}return{ready:i,supported:!0,reorderMesh:function(y,f,x){var _=f?x?n.exports.meshopt_optimizeVertexCacheStrip:n.exports.meshopt_optimizeVertexCache:void 0;return a(n.exports.meshopt_optimizeVertexFetchRemap,y,u(y)+1,_)},reorderPoints:function(y,f){return r(y instanceof Float32Array),r(y.length%f==0),r(f>=3),c(n.exports.meshopt_spatialSortRemap,y,y.length/f,f*4)},encodeVertexBuffer:function(y,f,x){r(x>0&&x<=256),r(x%4==0);var _=n.exports.meshopt_encodeVertexBufferBound(f,x);return l(n.exports.meshopt_encodeVertexBuffer,_,y,f,x)},encodeIndexBuffer:function(y,f,x){r(x==2||x==4),r(f%3==0);var _=m(y,x),C=n.exports.meshopt_encodeIndexBufferBound(f,u(_)+1);return l(n.exports.meshopt_encodeIndexBuffer,C,_,f,4)},encodeIndexSequence:function(y,f,x){r(x==2||x==4);var _=m(y,x),C=n.exports.meshopt_encodeIndexSequenceBound(f,u(_)+1);return l(n.exports.meshopt_encodeIndexSequence,C,_,f,4)},encodeGltfBuffer:function(y,f,x,_){var C={ATTRIBUTES:this.encodeVertexBuffer,TRIANGLES:this.encodeIndexBuffer,INDICES:this.encodeIndexSequence};return r(C[_]),C[_](y,f,x)},encodeFilterOct:function(y,f,x,_){return r(x==4||x==8),r(_>=1&&_<=16),p(n.exports.meshopt_encodeFilterOct,y,f,x,_,16)},encodeFilterQuat:function(y,f,x,_){return r(x==8),r(_>=4&&_<=16),p(n.exports.meshopt_encodeFilterQuat,y,f,x,_,16)},encodeFilterExp:function(y,f,x,_,C){r(x>0&&x%4==0),r(_>=1&&_<=24);var V={Separate:0,SharedVector:1,SharedComponent:2};return p(n.exports.meshopt_encodeFilterExp,y,f,x,_,x,C?V[C]:1)}}}();var B6t=T(S()),Vte=function(){var e="b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq;d8Yqdbk:yzeHu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhlaicefhodnadTmbalc;WFbGglcjdalcjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfglcl4cifcd4hxdndndndnalc9WGgmTmbcbhPcehsawcjdfhzaohHinaraH9Rax6midnaraHaxfgo9RcK6mbczhlcbhOinalgic9WfgAawcj;cbffhldndndndndnaHaAco4fRbbaOcoG4ciGPlbedibkal9cb83ibalcwf9cb83ibxikalaoRblaoRbbgAco4gCaCciSgCE86bbawcj;cbfaifglcGfaoclfaCfgCRbbaAcl4ciGgXaXciSgXE86bbalcVfaCaXfgCRbbaAcd4ciGgXaXciSgXE86bbalc7faCaXfgCRbbaAciGgAaAciSgAE86bbalctfaCaAfgCRbbaoRbegAco4gXaXciSgXE86bbalc91faCaXfgCRbbaAcl4ciGgXaXciSgXE86bbalc4faCaXfgCRbbaAcd4ciGgXaXciSgXE86bbalc93faCaXfgCRbbaAciGgAaAciSgAE86bbalc94faCaAfgCRbbaoRbdgAco4gXaXciSgXE86bbalc95faCaXfgCRbbaAcl4ciGgXaXciSgXE86bbalc96faCaXfgCRbbaAcd4ciGgXaXciSgXE86bbalc97faCaXfgCRbbaAciGgAaAciSgAE86bbalc98faCaAfgARbbaoRbigoco4gCaCciSgCE86bbalc99faAaCfgARbbaocl4ciGgCaCciSgCE86bbalc9:faAaCfgARbbaocd4ciGgCaCciSgCE86bbalcufaAaCfglRbbaociGgoaociSgoE86bbalaofhoxdkalaoRbwaoRbbgAcl4gCaCcsSgCE86bbawcj;cbfaifglcGfaocwfaCfgCRbbaAcsGgAaAcsSgAE86bbalcVfaCaAfgARbbaoRbegCcl4gXaXcsSgXE86bbalc7faAaXfgARbbaCcsGgCaCcsSgCE86bbalctfaAaCfgARbbaoRbdgCcl4gXaXcsSgXE86bbalc91faAaXfgARbbaCcsGgCaCcsSgCE86bbalc4faAaCfgARbbaoRbigCcl4gXaXcsSgXE86bbalc93faAaXfgARbbaCcsGgCaCcsSgCE86bbalc94faAaCfgARbbaoRblgCcl4gXaXcsSgXE86bbalc95faAaXfgARbbaCcsGgCaCcsSgCE86bbalc96faAaCfgARbbaoRbvgCcl4gXaXcsSgXE86bbalc97faAaXfgARbbaCcsGgCaCcsSgCE86bbalc98faAaCfgARbbaoRbogCcl4gXaXcsSgXE86bbalc99faAaXfgARbbaCcsGgCaCcsSgCE86bbalc9:faAaCfgARbbaoRbrgocl4gCaCcsSgCE86bbalcufaAaCfglRbbaocsGgoaocsSgoE86bbalaofhoxekalao8Pbb83bbalcwfaocwf8Pbb83bbaoczfhokdnaiam9pmbaOcdfhOaiczfhlarao9RcL0mekkaiam6miaoTmidnakTmbawaPfRbbhOawcj;cbfhlazhiakhAinaialRbbgHce4cbaHceG9R7aOfgO86bbaiadfhialcefhlaAcufgAmbkkazcefhzaPcefgPad6hsaohHaPad9hmexvkkcbhoasceGmdxikaoaxad2fhXdnakTmbcbhmcehsawcjdfhCinarao9Rax6miaoTmdaoaxfhoawamfRbbhOawcj;cbfhlaChiakhAinaialRbbgHce4cbaHceG9R7aOfgO86bbaiadfhialcefhlaAcufgAmbkaCcefhCamcefgmad6hsamad9hmbkaXhoxikcbhlcehsinarao9Rax6mdaoTmeaoaxfhoalcefglad6hsadal9hmbkaXhoxdkcbhoasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqaombkc9:hoxekcbc99arao9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;xzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfalaDcu7gPcl4fcsGcitfgsydlhzasydbhHdnaDcsGgDak9pmbavaiaPfcsGcdtfydbaxaDEhsaDThDdndnadcd9hmbabarcetfgPaH87ebaPcdfaz87ebaPclfas87ebxekabarcdtfgPaHBdbaPclfazBdbaPcwfasBdbkaxaDfhxavc;abfalcitfgPasBdbaPazBdlavaicdtfasBdbavc;abfalcefcsGglcitfgPaHBdbaPasBdlaiaDfhialcefhlxdkdndnaDcsSmbamaDfaDc987fcefhmxekaocefhDao8SbbgscFeGhPdndnascu9mmbaDhoxekaocvfhoaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhokaPce4cbaPceG9R7amfhmkdndnadcd9hmbabarcetfgDaH87ebaDcdfaz87ebaDclfam87ebxekabarcdtfgDaHBdbaDclfazBdbaDcwfamBdbkavc;abfalcitfgDamBdbaDazBdlavaicdtfamBdbavc;abfalcefcsGglcitfgDaHBdbaDamBdlaicefhialcefhlxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHcdfaD87ebaHclfas87ebxekabarcdtfgHaxBdbaHclfaDBdbaHcwfasBdbkavaicdtfaxBdbavc;abfalcitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfalcefcsGcitfgHasBdbaHaDBdlavaiaPfcsGgicdtfasBdbavc;abfalcdfcsGglcitfgDaxBdbaDasBdlalcefhlaiaOfhiazaOfhxxekaxcbaoRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbaocefhDxekaocdfhDao8SbegPcFeGhsdnaPcu9kmbaocofhAascFbGhscrhodninaD8SbbgPcFbGaotasVhsaPcu9kmeaDcefhDaocrfgoc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbgocFeGhPdnaocu9kmbaDcvfhzaPcFbGhPcrhodninas8SbbgDcFbGaotaPVhPaDcu9kmeascefhsaocrfgoc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashoxekascefhoas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninao8SbbgscFbGaDtaPVhPascu9kmeaocefhoaDcrfgDc8J9hmbkaOhoxekaocefhokaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDcdfaz87ebaDclfaO87ebxekabarcdtfgDaABdbaDclfazBdbaDcwfaOBdbkavc;abfalcitfgDazBdbaDaABdlavaicdtfaABdbavc;abfalcefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfalcdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiarcifgrae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabaiavcefciGfcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabaiavcdfciGfcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabaiavcufciGfcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabaiavciGfcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91:Yaece91cjjj98Gcjjj;8if::NUdbabclfhbadcufgdmbkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb",t="b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;b9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;e8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincbhHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAcd0hHalhOaAcefgAclSmdxekkcbhlaHceGTmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;tzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfalaDcu7gPcl4fcsGcitfgsydlhzasydbhHdnaDcsGgDak9pmbavaiaPfcsGcdtfydbaxaDEhsaDThDdndnadcd9hmbabarcetfgPaH87ebaPcdfaz87ebaPclfas87ebxekabarcdtfgPaHBdbaPclfazBdbaPcwfasBdbkaxaDfhxavc;abfalcitfgPasBdbaPazBdlavaicdtfasBdbavc;abfalcefcsGglcitfgPaHBdbaPasBdlaiaDfhialcefhlxdkdndnaDcsSmbamaDfaDc987fcefhmxekaocefhDao8SbbgscFeGhPdndnascu9mmbaDhoxekaocvfhoaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhokaPce4cbaPceG9R7amfhmkdndnadcd9hmbabarcetfgDaH87ebaDcdfaz87ebaDclfam87ebxekabarcdtfgDaHBdbaDclfazBdbaDcwfamBdbkavc;abfalcitfgDamBdbaDazBdlavaicdtfamBdbavc;abfalcefcsGglcitfgDaHBdbaDamBdlaicefhialcefhlxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHcdfaD87ebaHclfas87ebxekabarcdtfgHaxBdbaHclfaDBdbaHcwfasBdbkavaicdtfaxBdbavc;abfalcitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfalcefcsGcitfgHasBdbaHaDBdlavaiaPfcsGgicdtfasBdbavc;abfalcdfcsGglcitfgDaxBdbaDasBdlalcefhlaiaOfhiazaOfhxxekaxcbaoRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbaocefhDxekaocdfhDao8SbegPcFeGhsdnaPcu9kmbaocofhAascFbGhscrhodninaD8SbbgPcFbGaotasVhsaPcu9kmeaDcefhDaocrfgoc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbgocFeGhPdnaocu9kmbaDcvfhzaPcFbGhPcrhodninas8SbbgDcFbGaotaPVhPaDcu9kmeascefhsaocrfgoc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashoxekascefhoas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninao8SbbgscFbGaDtaPVhPascu9kmeaocefhoaDcrfgDc8J9hmbkaOhoxekaocefhokaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDcdfaz87ebaDclfaO87ebxekabarcdtfgDaABdbaDclfazBdbaDcwfaOBdbkavc;abfalcitfgDazBdbaDaABdlavaicdtfaABdbavc;abfalcefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfalcdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiarcifgrae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:wPliuo97eue978Jjjjjbca9Rhiaec98Ghldndnadcl9hmbdnalTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaipxbbbbbbbbbbbbbbbbgqpklbaiabalcdtfgdaeciGglcdtgv;8qbbdnalTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDaqp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkadaiav;8qbbskdnalTmbcbhvabhdinadczfgxaxpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgval6mbkkalae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabalcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbheabhdinadadpbbbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepkbbadczfhdaeclfgeav6mbkkdnaval9pmbaialciGgecdtgdVcbc;abad9R;8kbaiabavcdtfgvad;8qbbdnaeTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepklbkavaiad;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb",n=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),i=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var o=WebAssembly.validate(n)?t:e,r,s=WebAssembly.instantiate(a(o),{}).then(function(C){r=C.instance,r.exports.__wasm_call_ctors()});function a(C){for(var V=new Uint8Array(C.length),L=0;L<C.length;++L){var Z=C.charCodeAt(L);V[L]=Z>96?Z-97:Z>64?Z-39:Z+4}for(var G=0,L=0;L<C.length;++L)V[G++]=V[L]<60?i[V[L]]:(V[L]-60)*64+V[++L];return V.buffer.slice(0,G)}function c(C,V,L,Z,G,X,P){var v=C.exports.sbrk,F=Z+3&-4,M=v(F*G),b=v(X.length),R=new Uint8Array(C.exports.memory.buffer);R.set(X,b);var E=V(M,Z,G,b,X.length);if(E==0&&P&&P(M,F,G),L.set(R.subarray(M,M+Z*G)),v(M-v(0)),E!=0)throw new Error("Malformed buffer data: "+E)}var l={NONE:"",OCTAHEDRAL:"meshopt_decodeFilterOct",QUATERNION:"meshopt_decodeFilterQuat",EXPONENTIAL:"meshopt_decodeFilterExp"},u={ATTRIBUTES:"meshopt_decodeVertexBuffer",TRIANGLES:"meshopt_decodeIndexBuffer",INDICES:"meshopt_decodeIndexSequence"},m=[],p=0;function y(C){var V={object:new Worker(C),pending:0,requests:{}};return V.object.onmessage=function(L){var Z=L.data;V.pending-=Z.count,V.requests[Z.id][Z.action](Z.value),delete V.requests[Z.id]},V}function f(C){for(var V="self.ready = WebAssembly.instantiate(new Uint8Array(["+new Uint8Array(a(o))+"]), {}).then(function(result) { result.instance.exports.__wasm_call_ctors(); return result.instance; });self.onmessage = "+_.name+";"+c.toString()+_.toString(),L=new Blob([V],{type:"text/javascript"}),Z=URL.createObjectURL(L),G=m.length;G<C;++G)m[G]=y(Z);for(var G=C;G<m.length;++G)m[G].object.postMessage({});m.length=C,URL.revokeObjectURL(Z)}function x(C,V,L,Z,G){for(var X=m[0],P=1;P<m.length;++P)m[P].pending<X.pending&&(X=m[P]);return new Promise(function(v,F){var M=new Uint8Array(L),b=++p;X.pending+=C,X.requests[b]={resolve:v,reject:F},X.object.postMessage({id:b,count:C,size:V,source:M,mode:Z,filter:G},[M.buffer])})}function _(C){var V=C.data;if(!V.id)return self.close();self.ready.then(function(L){try{var Z=new Uint8Array(V.count*V.size);c(L,L.exports[V.mode],Z,V.count,V.size,V.source,L.exports[V.filter]),self.postMessage({id:V.id,count:V.count,action:"resolve",value:Z},[Z.buffer])}catch(G){self.postMessage({id:V.id,count:V.count,action:"reject",value:G})}})}return{ready:s,supported:!0,useWorkers:function(C){f(C)},decodeVertexBuffer:function(C,V,L,Z,G){c(r,r.exports.meshopt_decodeVertexBuffer,C,V,L,Z,r.exports[l[G]])},decodeIndexBuffer:function(C,V,L,Z){c(r,r.exports.meshopt_decodeIndexBuffer,C,V,L,Z)},decodeIndexSequence:function(C,V,L,Z){c(r,r.exports.meshopt_decodeIndexSequence,C,V,L,Z)},decodeGltfBuffer:function(C,V,L,Z,G,X){c(r,r.exports[u[G]],C,V,L,Z,r.exports[l[X]])},decodeGltfBufferAsync:function(C,V,L,Z,G){return m.length>0?x(C,V,L,u[Z],l[G]):s.then(function(){var X=new Uint8Array(C*V);return c(r,r.exports[u[Z]],X,C,V,L,r.exports[l[G]]),X})}}}();var K6t=T(S()),Y6t=function(){var e="b9H79Tebbbe9Ek9Geueu9Geub9Gbb9GPuuuuuuuuuuu99uueu9Gvuuuuub9Gluuuub9Gquuuuuuu99uueu9Gwuuuuuu99ueu9Giuuue999Gluuuueu9GiuuueuizsdilvoirwDbqqbeqlve9Weiiviebeoweuec:G;jekr:Tewo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bbz9TW79O9V9Wt9F79P9T9W29P9M95bl8E9TW79O9V9Wt9F79P9T9W29P9M959x9Pt9OcttV9P9I91tW7bvQ9TW79O9V9Wt9F79P9T9W29P9M959q9V9P9Ut7boX9TW79O9V9Wt9F79P9T9W29P9M959t9J9H2Wbra9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94SWt9J9O9sW9T9H9Wbwl79IV9RbDDwebcekdxmq::9Usdbk;i6iKuY99Ou8Jjjjjbc;W;ab9RgP8KjjjjbaPcwfcbc;Kbz:ljjjb8AaPcualcefgscdtascFFFFi0Ecbyd1:jjjbHjjjjbbgzBdwaPceBd9OaPazBdbaPcuadcitadcFFFFe0Ecbyd1:jjjbHjjjjbbgHBdxaPcdBd9OaPaHBdlaPaeadalcbz:cjjjbaPcualcdtgOalcFFFFi0EgAcbyd1:jjjbHjjjjbbgCBdzaPciBd9OaPaAcbyd1:jjjbHjjjjbbgXBdCaPclBd9Oalcd4alfhQcehLinaLgscethLasaQ6mbkcbhKaPcuascdtgLascFFFFi0Ecbyd1:jjjbHjjjjbbgQBdKaPcvBd9OaQcFeaLz:ljjjbhYdnalTmbavcd4h8AascufhEinaiaKa8A2cdtfg3ydlgscH4as7c:F:b:DD2a3ydbgscH4as7c;D;O:B8J27a3ydwgscH4as7c:3F;N8N27hQcbhsdndninaYaQaEGgQcdtfg5ydbgLcuSmeaiaLa8A2cdtfa3cxz:ojjjbTmdascefgsaQfhQasaE9nmbxdkka5aKBdbaKhLkaCaKcdtfaLBdbaKcefgKal9hmbkcbhsaXhLinaLasBdbaLclfhLalascefgs9hmbkcbhsaChLaXhQindnasaLydbgESmbaQaXaEcdtfgEydbBdbaEasBdbkaLclfhLaQclfhQalascefgs9hmbkkcbh8EaYcbyd:m:jjjbH:bjjjbbaPclBd9OaPalcbyd1:jjjbHjjjjbbgEBdKaPcvBd9OaPaAcbyd1:jjjbHjjjjbbgsBd3aPcoBd9OaPaAcbyd1:jjjbHjjjjbbgLBdaaPcrBd9OascFeaOz:ljjjbh8FaLcFeaOz:ljjjbhadnalTmbaHcwfhhindnaza8EgQcefg8Ecdtfydbg3azaQcdtgsfydbgLSmba3aL9RhOaHaLcitfhgaaasfh8Ja8FasfhKcbh8Aindndnaga8Acitfydbg5aQ9hmbaKaQBdba8JaQBdbxekdnaza5cdtg8KfgsclfydbgLasydbgsSmbaHascitg3fydbaQSmeaLas9Rh8Lascu7aLfhYaha3fhLcbhsinaYasSmeascefhsaLydbh3aLcwfhLa3aQ9hmbkasa8L6mekaaa8KfgsaQa5asydbcuSEBdbaKa5aQaKydbcuSEBdbka8Acefg8AaO9hmbkka8Eal9hmbkaChLaXhQaah3a8Fh8AcbhsindndnasaLydbg59hmbdnasaQydbg59hmba8Aydbh5dna3ydbgYcu9hmba5cu9hmbaEasfcb86bbxikaEasfhKdnasaYSmbasa5SmbaKce86bbxikaKcl86bbxdkdnasaXa5cdtgYfydb9hmbdna3ydbgKcuSmbasaKSmba8AydbgOcuSmbasaOSmbaaaYfydbggcuSmbaga5Smba8FaYfydbgYcuSmbaYa5SmbdnaCaKcdtfydbaCaYcdtfydb9hmbaCaOcdtfydbaCagcdtfydb9hmbaEasfcd86bbxlkaEasfcl86bbxikaEasfcl86bbxdkaEasfcl86bbxekaEasfaEa5fRbb86bbkaLclfhLaQclfhQa3clfh3a8Aclfh8Aalascefgs9hmbkaxceGTmbaEhsalhLindnasRbbce9hmbascl86bbkascefhsaLcufgLmbkkcualcx2alc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbh8JaPcwfaPyd9Ogscdtfa8JBdbaPascefgOBd9Oa8Jaialavz:djjjbdndnaDmbcbhvxekcbh5aPcwfaOcdtfcuaDal2gLcdtaLcFFFFi0Ecbyd1:jjjbHjjjjbbgvBdbaPascdfgOBd9OalTmbarcd4cdthYaDcdthKavh8AinaohsawhLa8AhQaDh3inaQasIdbaLIdbNUdbasclfhsaLclfhLaQclfhQa3cufg3mbkaoaYfhoa8AaKfh8Aa5cefg5al9hmbkkaPcwfaOcdtfcualc8S2gsalc;D;O;f8U0EgQcbyd1:jjjbHjjjjbbgLBdbaPaOcefg3Bd9OaLcbasz:ljjjbh8EdndndnaDTmbaPcwfa3cdtfaQcbyd1:jjjbHjjjjbbgoBdbaPaOcdfgLBd9Oaocbasz:ljjjb8AaPcwfaLcdtfcuaDal2gscltgLascFFFFb0Ecbyd1:jjjbHjjjjbbgwBdbaPaOcifBd9OawcbaLz:ljjjb8AadmexdkcbhocbhwadTmekcbh8AaehLindna8JaLclfydbg5cx2fgsIdba8JaLydbgYcx2fgQIdbg8M:tg8Na8JaLcwfydbgKcx2fg3IdlaQIdlgy:tg8PNa3Idba8M:tgIasIdlay:tg8RN:tg8Sa8SNa8Ra3IdwaQIdwgR:tg8UNa8PasIdwaR:tg8RN:tg8Pa8PNa8RaINa8Ua8NN:tg8Na8NNMM:rgIJbbbb9ETmba8SaI:vh8Sa8NaI:vh8Na8PaI:vh8Pka8EaCaYcdtfydbc8S2fgsa8PaI:rgIa8PNNg8RasIdbMUdbasa8NaIa8NNg8VNg8UasIdlMUdlasa8SaIa8SNg8WNg8XasIdwMUdwasa8Va8PNg8VasIdxMUdxasa8Wa8PNg8YasIdzMUdzasa8Wa8NNg8WasIdCMUdCasa8PaIa8SaRNa8Pa8MNaya8NNMM:mgyNg8MNg8PasIdKMUdKasa8Na8MNg8NasId3MUd3asa8Sa8MNg8SasIdaMUdaasa8MayNg8MasId8KMUd8KasaIasIdyMUdya8EaCa5cdtfydbc8S2fgsa8RasIdbMUdbasa8UasIdlMUdlasa8XasIdwMUdwasa8VasIdxMUdxasa8YasIdzMUdzasa8WasIdCMUdCasa8PasIdKMUdKasa8NasId3MUd3asa8SasIdaMUdaasa8MasId8KMUd8KasaIasIdyMUdya8EaCaKcdtfydbc8S2fgsa8RasIdbMUdbasa8UasIdlMUdlasa8XasIdwMUdwasa8VasIdxMUdxasa8YasIdzMUdzasa8WasIdCMUdCasa8PasIdKMUdKasa8NasId3MUd3asa8SasIdaMUdaasa8MasId8KMUd8KasaIasIdyMUdyaLcxfhLa8Acifg8Aad6mbkcbh5aehYincbhLinaEaeaLc:G1jjbfydba5fcdtfydbgQfRbbhsdndnaEaYaLfydbg3fRbbg8Ac99fcFeGcpe0mbasceSmbascd9hmekdna8AcufcFeGce0mba8Fa3cdtfydbaQ9hmekdnascufcFeGce0mbaaaQcdtfydba39hmekdna8Acv2asfc:W1jjbfRbbTmbaCaQcdtfydbaCa3cdtfydb0mekJbbacJbbjZasceSEhIa8AceShOa8JaeaLc:K1jjbfydba5fcdtfydbcx2fhsdna8JaQcx2fg8AIdwa8Ja3cx2fgKIdwgy:tg8Pa8PNa8AIdbaKIdbgR:tg8Na8NNa8AIdlaKIdlg8R:tg8Sa8SNMM:rg8MJbbbb9ETmba8Pa8M:vh8Pa8Sa8M:vh8Sa8Na8M:vh8NkJbbacaIaOEh8WdnasIdway:tgIa8PaIa8PNasIdbaR:tg8Xa8NNa8SasIdla8R:tg8VNMMg8UN:tgIaINa8Xa8Na8UN:tg8Pa8PNa8Va8Sa8UN:tg8Na8NNMM:rg8SJbbbb9ETmbaIa8S:vhIa8Na8S:vh8Na8Pa8S:vh8Pka8EaCa3cdtfydbc8S2fgsa8Pa8Wa8MNg8Sa8PNNg8UasIdbMUdbasa8Na8Sa8NNg8WNg8XasIdlMUdlasaIa8SaINg8MNg8VasIdwMUdwasa8Wa8PNg8WasIdxMUdxasa8Ma8PNg8YasIdzMUdzasa8Ma8NNg8ZasIdCMUdCasa8Pa8SaIayNa8PaRNa8Ra8NNMM:mgyNg8MNg8PasIdKMUdKasa8Na8MNg8NasId3MUd3asaIa8MNgIasIdaMUdaasa8MayNg8MasId8KMUd8Kasa8SasIdyMUdya8EaCaQcdtfydbc8S2fgsa8UasIdbMUdbasa8XasIdlMUdlasa8VasIdwMUdwasa8WasIdxMUdxasa8YasIdzMUdzasa8ZasIdCMUdCasa8PasIdKMUdKasa8NasId3MUd3asaIasIdaMUdaasa8MasId8KMUd8Kasa8SasIdyMUdykaLclfgLcx9hmbkaYcxfhYa5cifg5ad6mbkaDTmbcbhYinJbbbbhRa8JaeaYcdtfgsclfydbgKcx2fgLIdwa8JasydbgOcx2fgQIdwg8V:tg8Na8NNaLIdbaQIdbg8Y:tgIaINaLIdlaQIdlg8Z:tg8Sa8SNMMg8Wa8Jascwfydbggcx2fgsIdwa8V:tg8MNa8Na8Na8MNaIasIdba8Y:tgyNa8SasIdla8Z:tg8RNMMg8PN:tJbbbbJbbjZa8Wa8Ma8MNayayNa8Ra8RNMMg8XNa8Pa8PN:tg8U:va8UJbbbb9BEg8UNh80a8Xa8NNa8Ma8PN:ta8UNh81a8Wa8RNa8Sa8PN:ta8UNhBa8Xa8SNa8Ra8PN:ta8UNh83a8WayNaIa8PN:ta8UNhUa8XaINaya8PN:ta8UNh85aIa8RNaya8SN:tg8Pa8PNa8Sa8MNa8Ra8NN:tg8Pa8PNa8NayNa8MaIN:tg8Pa8PNMM:r:rh8PavaOaD2cdtfhLavagaD2cdtfhQavaKaD2cdtfh3a8V:mh86a8Z:mh87a8Y:mh88cbh8AaDh5Jbbbbh8RJbbbbh8UJbbbbh8WJbbbbh8XJbbbbh8VJbbbbh8YJbbbbh8ZJbbbbh89Jbbbbh8:inaPc;Wbfa8Afgscwfa8Pa81a3IdbaLIdbg8M:tg8SNa80aQIdba8M:tgyNMg8NNUdbasclfa8Pa83a8SNaBayNMgINUdbasa8Pa85a8SNaUayNMg8SNUdbascxfa8Pa86a8NNa87aINa8Ma88a8SNMMMg8MNUdba8Pa8NaINNa8XMh8Xa8Pa8Na8SNNa8VMh8Va8PaIa8SNNa8YMh8Ya8Pa8Ma8MNNaRMhRa8Pa8Na8MNNa8RMh8Ra8PaIa8MNNa8UMh8Ua8Pa8Sa8MNNa8WMh8Wa8Pa8Na8NNNa8ZMh8Za8PaIaINNa89Mh89a8Pa8Sa8SNNa8:Mh8:aLclfhLa3clfh3aQclfhQa8Aczfh8Aa5cufg5mbkaoaCaOcdtfydbgLc8S2fgsa8:asIdbMUdbasa89asIdlMUdlasa8ZasIdwMUdwasa8YasIdxMUdxasa8VasIdzMUdzasa8XasIdCMUdCasa8WasIdKMUdKasa8UasId3MUd3asa8RasIdaMUdaasaRasId8KMUd8Kasa8PasIdyMUdyaoaCaKcdtfydbgKc8S2fgsa8:asIdbMUdbasa89asIdlMUdlasa8ZasIdwMUdwasa8YasIdxMUdxasa8VasIdzMUdzasa8XasIdCMUdCasa8WasIdKMUdKasa8UasId3MUd3asa8RasIdaMUdaasaRasId8KMUd8Kasa8PasIdyMUdyaoaCagcdtfydbgOc8S2fgsa8:asIdbMUdbasa89asIdlMUdlasa8ZasIdwMUdwasa8YasIdxMUdxasa8VasIdzMUdzasa8XasIdCMUdCasa8WasIdKMUdKasa8UasId3MUd3asa8RasIdaMUdaasaRasId8KMUd8Kasa8PasIdyMUdyawaLaD2cltfh5cbhLaDh3ina5aLfgsaPc;WbfaLfgQIdbasIdbMUdbasclfg8AaQclfIdba8AIdbMUdbascwfg8AaQcwfIdba8AIdbMUdbascxfgsaQcxfIdbasIdbMUdbaLczfhLa3cufg3mbkawaKaD2cltfh5cbhLaDh3ina5aLfgsaPc;WbfaLfgQIdbasIdbMUdbasclfg8AaQclfIdba8AIdbMUdbascwfg8AaQcwfIdba8AIdbMUdbascxfgsaQcxfIdbasIdbMUdbaLczfhLa3cufg3mbkawaOaD2cltfh5cbhLaDh3ina5aLfgsaPc;WbfaLfgQIdbasIdbMUdbasclfg8AaQclfIdba8AIdbMUdbascwfg8AaQcwfIdba8AIdbMUdbascxfgsaQcxfIdbasIdbMUdbaLczfhLa3cufg3mbkaYcifgYad6mbkkdnabaeSmbabaeadcdtz:kjjjb8AkaPydbhZcbhsdnalTmbaZclfhsaZydbh3aEhLalh8AcbhQincbasydbg5a39RaLRbbcpeGEaQfhQaLcefhLasclfhsa5h3a8Acufg8AmbkaQce4hskcuadas9Rcifgrcx2arc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbh8LaPcwfaPyd9Ogscdtfa8LBdbaPascefgLBd9OaPcwfaLcdtfcuarcdtarcFFFFi0Ecbyd1:jjjbHjjjjbbgxBdbaPascdfgLBd9OaPcwfaLcdtfaAcbyd1:jjjbHjjjjbbgHBdbaPascifgLBd9OaPcwfaLcdtfalcbyd1:jjjbHjjjjbbgnBdbaPasclfBd9OJbbbbh8Ydnadaq9nmbdnarci6mbakakNh8VaDclthca8Lcwfh9cJbbbbh8YinaPabadghalaCz:cjjjbabhOcbhzcbhKincbhsindnaCaOasfydbgQcdtgYfydbg8AaCabasc;m1jjbfydbaKfcdtfydbgLcdtfydbg5SmbaEaLfRbbgecv2aEaQfRbbg3fc;G1jjbfRbbg8Ka3cv2aefggc;G1jjbfRbbgiVcFeGTmbdnagc:W1jjbfRbbTmba5a8A0mekdna3ae9hmba3cufcFeGce0mba8FaYfydbaL9hmeka8Lazcx2fg3aLaQaicFeGg8AEBdla3aQaLa8AEBdba3a8Aa8KGcb9hBdwazcefhzkasclfgscx9hmbkdnaKcifgKah9pmbaOcxfhOazcifar9nmekkdnazmbahhdxikcbheinJbbbbJbbjZa8EaCa8Laecx2fg3ydlg8Aa3ydbg5a3ydwgLEgKcdtfydbg8Kc8S2gifgsIdyg8P:va8PJbbbb9BEasIdwa8Ja5a8AaLEgYcx2fgLIdwg8SNasIdzaLIdbg8MNasIdaMg8Pa8PMMa8SNasIdlaLIdlgyNasIdCa8SNasId3Mg8Pa8PMMayNasIdba8MNasIdxayNasIdKMg8Pa8PMMa8MNasId8KMMM:lNh8WJbbbbJbbjZa8EaCa5cdtfydbgdc8S2gQfgsIdyg8P:va8PJbbbb9BEasIdwa8Ja8Acx2fgLIdwgINasIdzaLIdbgRNasIdaMg8Pa8PMMaINasIdlaLIdlg8RNasIdCaINasId3Mg8Pa8PMMa8RNasIdbaRNasIdxa8RNasIdKMg8Pa8PMMaRNasId8KMMM:lNh8Xa3cwfhOa3clfhgdnaDTmbaoaQfgQIdwaINaQIdzaRNaQIdaMg8Pa8PMMaINaQIdla8RNaQIdCaINaQId3Mg8Pa8PMMa8RNaQIdbaRNaQIdxa8RNaQIdKMg8Pa8PMMaRNaQId8KMMMh8Nava8AaD2cdtfhLawadaD2cltfhsaQIdyh8UaDhQinaLIdbg8PJbbb;aNascxfIdbaIascwfIdbNaRasIdbNa8RasclfIdbNMMMNa8Pa8PNa8UNa8NMMh8NaLclfhLasczfhsaQcufgQmbkaoaifgQIdwa8SNaQIdza8MNaQIdaMg8Pa8PMMa8SNaQIdlayNaQIdCa8SNaQId3Mg8Pa8PMMayNaQIdba8MNaQIdxayNaQIdKMg8Pa8PMMa8MNaQId8KMMMhIavaYaD2cdtfhLawa8KaD2cltfhsaQIdyhRaDhQinaLIdbg8PJbbb;aNascxfIdba8SascwfIdbNa8MasIdbNayasclfIdbNMMMNa8Pa8PNaRNaIMMhIaLclfhLasczfhsaQcufgQmbka8WaI:lMh8Wa8Xa8N:lMh8Xkaga8AaYa8Xa8W9FgsEBdba3a5aKasEBdbaOa8Xa8WasEUdbaecefgeaz9hmbkaPc;Wbfcbcj;abz:ljjjb8Aa9chsazhLinaPc;WbfasydbcO4c;8ZGfgQaQydbcefBdbascxfhsaLcufgLmbkcbhscbhLinaPc;WbfasfgQydbh3aQaLBdba3aLfhLasclfgscj;ab9hmbkcbhsa9chLinaPc;WbfaLydbcO4c;8ZGfgQaQydbgQcefBdbaxaQcdtfasBdbaLcxfhLazascefgs9hmbkahaq9RgQci9UhJdnalTmbcbhsaHhLinaLasBdbaLclfhLalascefgs9hmbkkcbh9eancbalz:ljjjbhTaQcO9UhSaJce4h9haPydlh9icbhicbhgdnina8Laxagcdtfydbcx2fgOIdwg8Na8V9EmeaiaJ9pmeJFFuuh8Pdna9haz9pmba8Laxa9hcdtfydbcx2fIdwJbb;aZNh8Pkdna8Na8P9ETmbaiaS0mdkdnaTaCaOydlg6cdtg9kfydbg3fg0RbbaTaCaOydbgKcdtg9mfydbg9nfg9oRbbVmbdnaZa9ncdtfgsclfydbgLasydbgsSmbaLas9Rh5a9iascitfhsa8Ja3cx2fgYcwfhdaYclfhAa8Ja9ncx2fg8Kcwfh9pa8Kclfh9qcbhLcehednindnaHasydbcdtfydbgQa3SmbaHasclfydbcdtfydbg8Aa3SmbaQa8ASmba8Ja8Acx2fg8AIdba8JaQcx2fgQIdbgI:tg8Pa9qIdbaQIdlg8S:tg8MNa8KIdbaI:tgya8AIdla8S:tg8NN:ta8PaAIdba8S:tgRNaYIdbaI:tg8Ra8NN:tNa8Na9pIdbaQIdwg8S:tg8UNa8Ma8AIdwa8S:tgIN:ta8NadIdba8S:tg8SNaRaIN:tNaIayNa8Ua8PN:taIa8RNa8Sa8PN:tNMMJbbbb9FmdkascwfhsaLcefgLa56hea5aL9hmbkkaeceGTmba9hcefh9hxeka8Ea3c8S2gQfgsa8Ea9nc8S2g8AfgLIdbasIdbMUdbasaLIdlasIdlMUdlasaLIdwasIdwMUdwasaLIdxasIdxMUdxasaLIdzasIdzMUdzasaLIdCasIdCMUdCasaLIdKasIdKMUdKasaLId3asId3MUd3asaLIdaasIdaMUdaasaLId8KasId8KMUd8KasaLIdyasIdyMUdydnaDTmbaoaQfgsaoa8AfgLIdbasIdbMUdbasaLIdlasIdlMUdlasaLIdwasIdwMUdwasaLIdxasIdxMUdxasaLIdzasIdzMUdzasaLIdCasIdCMUdCasaLIdKasIdKMUdKasaLId3asId3MUd3asaLIdaasIdaMUdaasaLId8KasId8KMUd8KasaLIdyasIdyMUdyaca9n2heaca32hYawhLaDh8AinaLaYfgsaLaefgQIdbasIdbMUdbasclfg5aQclfIdba5IdbMUdbascwfg5aQcwfIdba5IdbMUdbascxfgsaQcxfIdbasIdbMUdbaLczfhLa8Acufg8AmbkkaOcwfhLdndndndnaEaKfgQRbbc9:fPdebdkaKhsinaHascdtgsfa3BdbaXasfydbgsaK9hmbxikkaXa9kfydbhsaXa9mfydbhKaHa9mfa6Bdbash6kaHaKcdtfa6Bdbka9oce86bba0ce86bbaLIdbg8Pa8Ya8Ya8P9DEh8Ya9ecefh9ececdaQRbbceSEaifhikagcefggaz9hmbkkdna9embahhdxikdnalTmbcbhLa8FhsindnasydbgQcuSmbdnaLaHaQcdtg3fydbgQ9hmba8Fa3fydbhQkasaQBdbkasclfhsalaLcefgL9hmbkcbhLaahsindnasydbgQcuSmbdnaLaHaQcdtg3fydbgQ9hmbaaa3fydbhQkasaQBdbkasclfhsalaLcefgL9hmbkkcbhdabhscbh8AindnaHasydbcdtfydbgLaHasclfydbcdtfydbgQSmbaLaHascwfydbcdtfydbg3SmbaQa3Smbabadcdtfg5aLBdba5clfaQBdba5cwfa3Bdbadcifhdkascxfhsa8Acifg8Aah6mbkadaq9nmdxbkkaPabadalaCz:cjjjbkdnamTmbama8Y:rUdbkaPyd9OgscdtaPcwffc98fhCdninasTmeaCydbcbyd:m:jjjbH:bjjjbbaCc98fhCascufhsxbkkaPc;W;abf8Kjjjjbadk;:ieouabydlhvabydbclfcbaicdtz:ljjjbhoadci9UhrdnadTmbdnalTmbaehwadhDinaoalawydbcdtfydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbxdkkaehwadhDinaoawydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbkkdnaiTmbcbhDaohwinawydbhqawaDBdbawclfhwaqaDfhDaicufgimbkkdnadci6mbarcearce0EhdinaecwfydbhwaeclfydbhDaeydbhidnalTmbalawcdtfydbhwalaDcdtfydbhDalaicdtfydbhikavaoaicdtfgqydbcitfaDBdbavaqydbcitfawBdlaqaqydbcefBdbavaoaDcdtfgqydbcitfawBdbavaqydbcitfaiBdlaqaqydbcefBdbavaoawcdtfgwydbcitfaiBdbavawydbcitfaDBdlawawydbcefBdbaecxfheadcufgdmbkkabydbcbBdbk:Zldouv998Jjjjjbca9Rglczfcwfcbyd11jjbBdbalcb8Pdj1jjb83izalcwfcbydN1jjbBdbalcb8Pd:m1jjb83ibdnadTmbaicd4hvdnabTmbavcdthocbhraehwinabarcx2fgiaearav2cdtfgDIdbUdbaiaDIdlUdlaiaDIdwUdwcbhiinalczfaifgDawaifIdbgqaDIdbgkakaq9EEUdbalaifgDaqaDIdbgkakaq9DEUdbaiclfgicx9hmbkawaofhwarcefgrad9hmbxdkkavcdthrcbhwincbhiinalczfaifgDaeaifIdbgqaDIdbgkakaq9EEUdbalaifgDaqaDIdbgkakaq9DEUdbaiclfgicx9hmbkaearfheawcefgwad9hmbkkdnabTmbadTmbJbbbbJbbjZalIdbalIdzgk:tJbbbb:xgqalIdlalIdCgx:tgmamaq9DEgqalIdwalIdKgm:tgPaPaq9DEgq:vaqJbbbb9BEhqinabaqabIdbak:tNUdbabclfgiaqaiIdbax:tNUdbabcwfgiaqaiIdbam:tNUdbabcxfhbadcufgdmbkkk8KbabaeadaialavcbcbcbcbaoarawaDz:bjjjbk8KbabaeadaialavaoarawaDaqakaxamz:bjjjbk;lOowud99wue99iul998Jjjjjbc;Wb9Rgw8KjjjjbdndnarmbcbhDxekawcwfcbc;Kbz:ljjjb8Aawcuadcx2adc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbgqBdwawceBd9Oaqaeadaiz:djjjbawcuadcdtadcFFFFi0Egkcbyd1:jjjbHjjjjbbgxBdxawcdBd9Oadcd4adfhmceheinaegicetheaiam6mbkcbhmawcuaicdtgPaicFFFFi0Ecbyd1:jjjbHjjjjbbgsBdzawciBd9Odndnar:Zgz:rJbbbZMgH:lJbbb9p9DTmbaH:Ohexekcjjjj94hekaicufhOc:bwhAcbhCcbhXadhQinaChLaeaAgKcufaeaK9iEamgDcefaeaD9kEhYdndnadTmbaYcuf:YhHaqhiaxheadhmindndnaiIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhAxekcjjjj94hAkaAcCthAdndnaiclfIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhCxekcjjjj94hCkaCcqtaAVhAdndnaicwfIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhCxekcjjjj94hCkaeaAaCVBdbaicxfhiaeclfheamcufgmmbkascFeaPz:ljjjbhEcbh3cbh5indnaEaxa5cdtfydbgAcm4aA7c:v;t;h;Ev2gics4ai7aOGgmcdtfgCydbgecuSmbaeaASmbcehiinaEamaifaOGgmcdtfgCydbgecuSmeaicefhiaeaA9hmbkkaCaABdba3aecuSfh3a5cefg5ad9hmbxdkkascFeaPz:ljjjb8Acbh3kaDaYa3ar0giEhmaLa3aiEhCdna3arSmbaYaKaiEgAam9Rcd9imbdndnaXcl0mbdnaQ:ZgHaL:Zg8A:taY:Yg8EaD:Y:tg8Fa8EaK:Y:tgaa3:Zghaz:tNNNaHaz:taaNa8Aah:tNa8Aaz:ta8FNahaH:tNM:va8EMJbbbZMgH:lJbbb9p9DTmbaH:Ohexdkcjjjj94hexekamaAfcd9Theka3aQaiEhQaXcefgXcs9hmekkdndnaCmbcihicbhDxekcbhiawakcbyd1:jjjbHjjjjbbg5BdCawclBd9OdndnadTmbamcuf:YhHaqhiaxheadhmindndnaiIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhAxekcjjjj94hAkaAcCthAdndnaiclfIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhCxekcjjjj94hCkaCcqtaAVhAdndnaicwfIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhCxekcjjjj94hCkaeaAaCVBdbaicxfhiaeclfheamcufgmmbkascFeaPz:ljjjbhEcbhDcbh3inaxa3cdtgYfydbgAcm4aA7c:v;t;h;Ev2gics4ai7hecbhidndninaEaeaOGgmcdtfgCydbgecuSmednaxaecdtgCfydbaASmbaicefgiamfheaiaO9nmekka5aCfydbhixekaCa3BdbaDhiaDcefhDka5aYfaiBdba3cefg3ad9hmbkcuaDc32giaDc;j:KM;jb0EhexekascFeaPz:ljjjb8AcbhDcbhekawaecbyd1:jjjbHjjjjbbgeBdKawcvBd9Oaecbaiz:ljjjbhOavcd4hxdnadTmbaxcdth3a5hmalhAaqheadhEinaOamydbc32fgiaeIdbaiIdbMUdbaiaeclfIdbaiIdlMUdlaiaecwfIdbaiIdwMUdwaiaAc;81jjbalEgCIdbaiIdxMUdxaiaCIdlaiIdzMUdzaiaCIdwaiIdCMUdCaiaiIdKJbbjZMUdKamclfhmaAa3fhAaecxfheaEcufgEmbkkdnaDTmbaOcxfhiaDheinaictfgmamIdbJbbbbJbbjZaicxfIdbgH:vaHJbbbb9BEgHNUdbaic94fgmaHamIdbNUdbaic98fgmaHamIdbNUdbaiaHaiIdbNUdbaiclfgmaHamIdbNUdbaicwfgmaHamIdbNUdbaic3fhiaecufgembkkcbhAawcuaDcdtgYaDcFFFFi0Egicbyd1:jjjbHjjjjbbgeBd3awcoBd9Oawaicbyd1:jjjbHjjjjbbgEBdaaecFeaYz:ljjjbh3dnadTmbaoaoNh8Aaxcdthxalheina8Aaec;81jjbalEgmIdwaOa5ydbgCc32fgiIdC:tgHaHNamIdbaiIdx:tgHaHNamIdlaiIdz:tgHaHNMMNaqcwfIdbaiIdw:tgHaHNaqIdbaiIdb:tgHaHNaqclfIdbaiIdl:tgHaHNMMMhHdndna3aCcdtgifgmydbcuSmbaEaifIdbaH9ETmekamaABdbaEaifaHUdbka5clfh5aeaxfheaqcxfhqadaAcefgA9hmbkkaba3aYz:kjjjb8AcrhikaicdthiinaiTmeaic98fgiawcwffydbcbyd:m:jjjbH:bjjjbbxbkkawc;Wbf8KjjjjbaDk:Qdidui99ducbhi8Jjjjjbca9Rglczfcwfcbyd11jjbBdbalcb8Pdj1jjb83izalcwfcbydN1jjbBdbalcb8Pd:m1jjb83ibdndnaembJbbjFhvJbbjFhoJbbjFhrxekadcd4cdthwincbhdinalczfadfgDabadfIdbgoaDIdbgrarao9EEUdbaladfgDaoaDIdbgrarao9DEUdbadclfgdcx9hmbkabawfhbaicefgiae9hmbkalIdwalIdK:thralIdlalIdC:thoalIdbalIdz:thvkavJbbbb:xgvaoaoav9DEgoararao9DEk9DeeuabcFeaicdtz:ljjjbhlcbhbdnadTmbindnalaeydbcdtfgiydbcu9hmbaiabBdbabcefhbkaeclfheadcufgdmbkkabk9teiucbcbyd:q:jjjbgeabcifc98GfgbBd:q:jjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd:q:jjjbgeabcrfc94GfgbBd:q:jjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik9:eiuZbhedndncbyd:q:jjjbgdaecztgi9nmbcuheadai9RcFFifcz4nbcuSmekadhekcbabae9Rcifc98Gcbyd:q:jjjbfgdBd:q:jjjbdnadZbcztge9nmbadae9RcFFifcz4nb8Akk6eiucbhidnadTmbdninabRbbglaeRbbgv9hmeaecefheabcefhbadcufgdmbxdkkalav9Rhikaikk:Iedbcjwk1eFFuuFFuuFFuuFFuFFFuFFFuFbbbbbbbbebbbdbbbbbbbebbbeeebeebebbeeebebbbbbebebbbbbebbbdbbbbbbbbbbbbbbbeeeeebebbbbbebbbbbeebbbbbbbbbbbbbbbbbbbbbc1Dkxebbbdbbb:G9Kbb",t=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var n,i=WebAssembly.instantiate(o(e),{}).then(function(f){n=f.instance,n.exports.__wasm_call_ctors()});function o(f){for(var x=new Uint8Array(f.length),_=0;_<f.length;++_){var C=f.charCodeAt(_);x[_]=C>96?C-97:C>64?C-39:C+4}for(var V=0,_=0;_<f.length;++_)x[V++]=x[_]<60?t[x[_]]:(x[_]-60)*64+x[++_];return x.buffer.slice(0,V)}function r(f){if(!f)throw new Error("Assertion failed")}function s(f){return new Uint8Array(f.buffer,f.byteOffset,f.byteLength)}function a(f,x,_){var C=n.exports.sbrk,V=C(x.length*4),L=C(_*4),Z=new Uint8Array(n.exports.memory.buffer),G=s(x);Z.set(G,V);var X=f(L,V,x.length,_);Z=new Uint8Array(n.exports.memory.buffer);var P=new Uint32Array(_);new Uint8Array(P.buffer).set(Z.subarray(L,L+_*4)),G.set(Z.subarray(V,V+x.length*4)),C(V-C(0));for(var v=0;v<x.length;++v)x[v]=P[x[v]];return[P,X]}function c(f){for(var x=0,_=0;_<f.length;++_){var C=f[_];x=x<C?C:x}return x}function l(f,x,_,C,V,L,Z,G,X){var P=n.exports.sbrk,v=P(4),F=P(_*4),M=P(V*L),b=P(_*4),R=new Uint8Array(n.exports.memory.buffer);R.set(s(C),M),R.set(s(x),b);var E=f(F,b,_,M,V,L,Z,G,X,v);R=new Uint8Array(n.exports.memory.buffer);var I=new Uint32Array(E);s(I).set(R.subarray(F,F+E*4));var w=new Float32Array(1);return s(w).set(R.subarray(v,v+4)),P(v-P(0)),[I,w[0]]}function u(f,x,_,C,V,L,Z,G,X,P,v,F){var M=n.exports.sbrk,b=M(4),R=M(_*4),E=M(V*L),I=M(V*G),w=M(X.length*4),N=M(_*4),B=new Uint8Array(n.exports.memory.buffer);B.set(s(C),E),B.set(s(Z),I),B.set(s(X),w),B.set(s(x),N);var k=f(R,N,_,E,V,L,I,G,w,X.length,P,v,F,b);B=new Uint8Array(n.exports.memory.buffer);var O=new Uint32Array(k);s(O).set(B.subarray(R,R+k*4));var U=new Float32Array(1);return s(U).set(B.subarray(b,b+4)),M(b-M(0)),[O,U[0]]}function m(f,x,_,C){var V=n.exports.sbrk,L=V(_*C),Z=new Uint8Array(n.exports.memory.buffer);Z.set(s(x),L);var G=f(L,_,C);return V(L-V(0)),G}function p(f,x,_,C,V,L,Z,G){var X=n.exports.sbrk,P=X(G*4),v=X(_*C),F=X(_*L),M=new Uint8Array(n.exports.memory.buffer);M.set(s(x),v),V&&M.set(s(V),F);var b=f(P,v,_,C,F,L,Z,G);M=new Uint8Array(n.exports.memory.buffer);var R=new Uint32Array(b);return s(R).set(M.subarray(P,P+b*4)),X(P-X(0)),R}var y={LockBorder:1};return{ready:i,supported:!0,useExperimentalFeatures:!1,compactMesh:function(f){r(f instanceof Uint32Array||f instanceof Int32Array||f instanceof Uint16Array||f instanceof Int16Array),r(f.length%3==0);var x=f.BYTES_PER_ELEMENT==4?f:new Uint32Array(f);return a(n.exports.meshopt_optimizeVertexFetchRemap,x,c(f)+1)},simplify:function(f,x,_,C,V,L){r(f instanceof Uint32Array||f instanceof Int32Array||f instanceof Uint16Array||f instanceof Int16Array),r(f.length%3==0),r(x instanceof Float32Array),r(x.length%_==0),r(_>=3),r(C>=0&&C<=f.length),r(C%3==0),r(V>=0&&V<=1);for(var Z=0,G=0;G<(L?L.length:0);++G)Z|=y[L[G]];var X=f.BYTES_PER_ELEMENT==4?f:new Uint32Array(f),P=l(n.exports.meshopt_simplify,X,f.length,x,x.length/_,_*4,C,V,Z);return P[0]=f instanceof Uint32Array?P[0]:new f.constructor(P[0]),P},simplifyWithAttributes:function(f,x,_,C,V,L,Z,G,X){r(this.useExperimentalFeatures),r(f instanceof Uint32Array||f instanceof Int32Array||f instanceof Uint16Array||f instanceof Int16Array),r(f.length%3==0),r(x instanceof Float32Array),r(x.length%_==0),r(_>=3),r(C instanceof Float32Array),r(C.length%V==0),r(V>=0),r(Z>=0&&Z<=f.length),r(Z%3==0),r(G>=0&&G<=1),r(Array.isArray(L)),r(V>=L.length),r(L.length<=16);for(var P=0,v=0;v<(X?X.length:0);++v)P|=y[X[v]];var F=f.BYTES_PER_ELEMENT==4?f:new Uint32Array(f),M=u(n.exports.meshopt_simplifyWithAttributes,F,f.length,x,x.length/_,_*4,C,V*4,new Float32Array(L),Z,G,P);return M[0]=f instanceof Uint32Array?M[0]:new f.constructor(M[0]),M},getScale:function(f,x){return r(f instanceof Float32Array),r(f.length%x==0),r(x>=3),m(n.exports.meshopt_simplifyScale,f,f.length/x,x*4)},simplifyPoints:function(f,x,_,C,V,L){return r(this.useExperimentalFeatures),r(f instanceof Float32Array),r(f.length%x==0),r(x>=3),r(_>=0&&_<=f.length/x),C?(r(C instanceof Float32Array),r(C.length%V==0),r(V>=3),r(f.length/x==C.length/V),p(n.exports.meshopt_simplifyPoints,f,f.length/x,x*4,C,V*4,L,_)):p(n.exports.meshopt_simplifyPoints,f,f.length/x,x*4,void 0,0,0,_)}}}();function xx(e){e=g(e,g.EMPTY_OBJECT);let t=e.resourceCache,n=e.gltf,i=e.bufferViewId,o=e.gltfResource,r=e.baseResource,s=e.cacheKey,a=n.bufferViews[i],c=a.buffer,l=a.byteOffset,u=a.byteLength,m=!1,p,y,f,x;if(ri(a,"EXT_meshopt_compression")){let C=a.extensions.EXT_meshopt_compression;c=C.buffer,l=g(C.byteOffset,0),u=C.byteLength,m=!0,p=C.byteStride,y=C.count,f=C.mode,x=g(C.filter,"NONE")}let _=n.buffers[c];this._hasMeshopt=m,this._meshoptByteStride=p,this._meshoptCount=y,this._meshoptMode=f,this._meshoptFilter=x,this._resourceCache=t,this._gltfResource=o,this._baseResource=r,this._buffer=_,this._bufferId=c,this._byteOffset=l,this._byteLength=u,this._cacheKey=s,this._bufferLoader=void 0,this._typedArray=void 0,this._state=Rt.UNLOADED,this._promise=void 0}d(Object.create)&&(xx.prototype=Object.create(oo.prototype),xx.prototype.constructor=xx);Object.defineProperties(xx.prototype,{cacheKey:{get:function(){return this._cacheKey}},typedArray:{get:function(){return this._typedArray}}});async function FWe(e){try{let t=AWe(e);if(e._bufferLoader=t,await t.load(),e.isDestroyed())return;let n=t.typedArray,i=new Uint8Array(n.buffer,n.byteOffset+e._byteOffset,e._byteLength);if(e.unload(),e._typedArray=i,e._hasMeshopt){let o=e._meshoptCount,r=e._meshoptByteStride,s=new Uint8Array(o*r);Vte.decodeGltfBuffer(s,o,r,e._typedArray,e._meshoptMode,e._meshoptFilter),e._typedArray=s}return e._state=Rt.READY,e}catch(t){if(e.isDestroyed())return;e.unload(),e._state=Rt.FAILED;let n="Failed to load buffer view";throw e.getError(n,t)}}xx.prototype.load=async function(){return d(this._promise)?this._promise:(this._state=Rt.LOADING,this._promise=FWe(this),this._promise)};function AWe(e){let t=e._resourceCache,n=e._buffer;if(d(n.uri)){let o=e._baseResource.getDerivedResource({url:n.uri});return t.getExternalBufferLoader({resource:o})}return t.getEmbeddedBufferLoader({parentResource:e._gltfResource,bufferId:e._bufferId})}xx.prototype.unload=function(){d(this._bufferLoader)&&!this._bufferLoader.isDestroyed()&&this._resourceCache.unload(this._bufferLoader),this._bufferLoader=void 0,this._typedArray=void 0};var IS=xx;var gqt=T(S(),1);var uqt=T(S(),1);function gr(){}gr._maxDecodingConcurrency=Math.max(Mt.hardwareConcurrency-1,1);gr._decoderTaskProcessor=void 0;gr._taskProcessorReady=!1;gr._error=void 0;gr._getDecoderTaskProcessor=function(){if(!d(gr._decoderTaskProcessor)){let e=new yi("decodeDraco",gr._maxDecodingConcurrency);e.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/draco_decoder.wasm"}).then(function(t){t?gr._taskProcessorReady=!0:gr._error=new me("Draco decoder could not be initialized.")}).catch(t=>{gr._error=t}),gr._decoderTaskProcessor=e}return gr._decoderTaskProcessor};gr.decodePointCloud=function(e){let t=gr._getDecoderTaskProcessor();if(d(gr._error))throw gr._error;if(gr._taskProcessorReady)return t.scheduleTask(e,[e.buffer.buffer])};gr.decodeBufferView=function(e){let t=gr._getDecoderTaskProcessor();if(d(gr._error))throw gr._error;if(gr._taskProcessorReady)return t.scheduleTask(e,[e.array.buffer])};var Vp=gr;function Rb(e){e=g(e,g.EMPTY_OBJECT);let t=e.resourceCache,n=e.gltf,i=e.draco,o=e.gltfResource,r=e.baseResource,s=e.cacheKey;this._resourceCache=t,this._gltfResource=o,this._baseResource=r,this._gltf=n,this._draco=i,this._cacheKey=s,this._bufferViewLoader=void 0,this._bufferViewTypedArray=void 0,this._decodePromise=void 0,this._decodedData=void 0,this._state=Rt.UNLOADED,this._promise=void 0,this._dracoError=void 0}d(Object.create)&&(Rb.prototype=Object.create(oo.prototype),Rb.prototype.constructor=Rb);Object.defineProperties(Rb.prototype,{cacheKey:{get:function(){return this._cacheKey}},decodedData:{get:function(){return this._decodedData}}});async function MWe(e){let t=e._resourceCache;try{let n=t.getBufferViewLoader({gltf:e._gltf,bufferViewId:e._draco.bufferView,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._bufferViewLoader=n,await n.load(),e.isDestroyed()?void 0:(e._bufferViewTypedArray=n.typedArray,e._state=Rt.PROCESSING,e)}catch(n){if(e.isDestroyed())return;Lte(e,n)}}Rb.prototype.load=async function(){return d(this._promise)?this._promise:(this._state=Rt.LOADING,this._promise=MWe(this),this._promise)};function Lte(e,t){e.unload(),e._state=Rt.FAILED;let n="Failed to load Draco";throw e.getError(n,t)}async function NWe(e,t){try{let n=await t;return e.isDestroyed()?void 0:(e.unload(),e._decodedData={indices:n.indexArray,vertexAttributes:n.attributeData},e._state=Rt.READY,e._baseResource)}catch(n){if(e.isDestroyed())return;e._dracoError=n}}Rb.prototype.process=function(e){if(this._state===Rt.READY)return!0;if(this._state!==Rt.PROCESSING||(d(this._dracoError)&&Lte(this,this._dracoError),!d(this._bufferViewTypedArray))||d(this._decodePromise))return!1;let t=this._draco,i=this._gltf.bufferViews,o=t.bufferView,r=i[o],s=t.attributes,a={array:new Uint8Array(this._bufferViewTypedArray),bufferView:r,compressedAttributes:s,dequantizeInShader:!0},c=Vp.decodeBufferView(a);if(!d(c))return!1;this._decodePromise=NWe(this,c)};Rb.prototype.unload=function(){d(this._bufferViewLoader)&&this._resourceCache.unload(this._bufferViewLoader),this._bufferViewLoader=void 0,this._bufferViewTypedArray=void 0,this._decodedData=void 0,this._gltf=void 0};var WS=Rb;var Wqt=T(S(),1);var Cqt=T(S(),1);function UWe(e){let t=e.uint8Array,n=e.format,i=e.request,o=g(e.flipY,!1),r=g(e.skipColorSpaceConversion,!1),s=new Blob([t],{type:n}),a;return Ee.supportsImageBitmapOptions().then(function(c){return c?Promise.resolve(Ee.createImageBitmapFromBlob(s,{flipY:o,premultiplyAlpha:!1,skipColorSpaceConversion:r})):(a=window.URL.createObjectURL(s),new Ee({url:a,request:i}).fetchImage({flipY:o,skipColorSpaceConversion:r}))}).then(function(c){return d(a)&&window.URL.revokeObjectURL(a),c}).catch(function(c){return d(a)&&window.URL.revokeObjectURL(a),Promise.reject(c)})}var _x=UWe;function Lp(e){e=g(e,g.EMPTY_OBJECT);let t=e.resourceCache,n=e.gltf,i=e.imageId,o=e.gltfResource,r=e.baseResource,s=e.cacheKey,a=n.images[i],c=a.bufferView,l=a.uri;this._resourceCache=t,this._gltfResource=o,this._baseResource=r,this._gltf=n,this._bufferViewId=c,this._uri=l,this._cacheKey=s,this._bufferViewLoader=void 0,this._image=void 0,this._mipLevels=void 0,this._state=Rt.UNLOADED,this._promise=void 0}d(Object.create)&&(Lp.prototype=Object.create(oo.prototype),Lp.prototype.constructor=Lp);Object.defineProperties(Lp.prototype,{cacheKey:{get:function(){return this._cacheKey}},image:{get:function(){return this._image}},mipLevels:{get:function(){return this._mipLevels}}});Lp.prototype.load=function(){return d(this._promise)?this._promise:d(this._bufferViewId)?(this._promise=kWe(this),this._promise):(this._promise=DWe(this),this._promise)};function Rte(e){let t;return Array.isArray(e)&&(t=e.slice(1,e.length).map(function(n){return n.bufferView}),e=e[0]),{image:e,mipLevels:t}}async function kWe(e){e._state=Rt.LOADING;let t=e._resourceCache;try{let n=t.getBufferViewLoader({gltf:e._gltf,bufferViewId:e._bufferViewId,gltfResource:e._gltfResource,baseResource:e._baseResource});if(e._bufferViewLoader=n,await n.load(),e.isDestroyed())return;let i=n.typedArray,o=await YWe(i);if(e.isDestroyed())return;let r=Rte(o);return e.unload(),e._image=r.image,e._mipLevels=r.mipLevels,e._state=Rt.READY,e}catch(n){return e.isDestroyed()?void 0:Zte(e,n,"Failed to load embedded image")}}async function DWe(e){e._state=Rt.LOADING;let t=e._baseResource,n=e._uri,i=t.getDerivedResource({url:n});try{let o=await KWe(i);if(e.isDestroyed())return;let r=Rte(o);return e.unload(),e._image=r.image,e._mipLevels=r.mipLevels,e._state=Rt.READY,e}catch(o){return e.isDestroyed()?void 0:Zte(e,o,`Failed to load image: ${n}`)}}function Zte(e,t,n){return e.unload(),e._state=Rt.FAILED,Promise.reject(e.getError(n,t))}function BWe(e){let t=e.subarray(0,2),n=e.subarray(0,4),i=e.subarray(8,12);if(t[0]===255&&t[1]===216)return"image/jpeg";if(t[0]===137&&t[1]===80)return"image/png";if(t[0]===171&&t[1]===75)return"image/ktx2";if(n[0]===82&&n[1]===73&&n[2]===70&&n[3]===70&&i[0]===87&&i[1]===69&&i[2]===66&&i[3]===80)return"image/webp";throw new me("Image format is not recognized")}async function YWe(e){let t=BWe(e);if(t==="image/ktx2"){let n=new Uint8Array(e);return sl(n)}return Lp._loadImageFromTypedArray({uint8Array:e,format:t,flipY:!1,skipColorSpaceConversion:!0})}var OWe=/(^data:image\/ktx2)|(\.ktx2$)/i;function KWe(e){let t=e.getUrlComponent(!1,!0);return OWe.test(t)?sl(e):e.fetchImage({skipColorSpaceConversion:!0,preferImageBitmap:!0})}Lp.prototype.unload=function(){d(this._bufferViewLoader)&&!this._bufferViewLoader.isDestroyed()&&this._resourceCache.unload(this._bufferViewLoader),this._bufferViewLoader=void 0,this._uri=void 0,this._image=void 0,this._mipLevels=void 0,this._gltf=void 0};Lp._loadImageFromTypedArray=_x;var PS=Lp;var Kqt=T(S(),1);var vqt=T(S(),1),HWe={TEXTURE:0,PROGRAM:1,BUFFER:2,NUMBER_OF_JOB_TYPES:3},pa=Object.freeze(HWe);function Zb(e){e=g(e,g.EMPTY_OBJECT);let t=e.resourceCache,n=e.gltf,i=e.accessorId,o=e.gltfResource,r=e.baseResource,s=e.draco,a=e.cacheKey,c=g(e.asynchronous,!0),l=g(e.loadBuffer,!1),u=g(e.loadTypedArray,!1),m=n.accessors[i].componentType;this._resourceCache=t,this._gltfResource=o,this._baseResource=r,this._gltf=n,this._accessorId=i,this._indexDatatype=m,this._draco=s,this._cacheKey=a,this._asynchronous=c,this._loadBuffer=l,this._loadTypedArray=u,this._bufferViewLoader=void 0,this._dracoLoader=void 0,this._typedArray=void 0,this._buffer=void 0,this._state=Rt.UNLOADED,this._promise=void 0}d(Object.create)&&(Zb.prototype=Object.create(oo.prototype),Zb.prototype.constructor=Zb);Object.defineProperties(Zb.prototype,{cacheKey:{get:function(){return this._cacheKey}},buffer:{get:function(){return this._buffer}},typedArray:{get:function(){return this._typedArray}},indexDatatype:{get:function(){return this._indexDatatype}}});var zWe=new bY;Zb.prototype.load=async function(){return d(this._promise)?this._promise:d(this._draco)?(this._promise=JWe(this),this._promise):(this._promise=QWe(this),this._promise)};async function JWe(e){e._state=Rt.LOADING;let t=e._resourceCache;try{let n=t.getDracoLoader({gltf:e._gltf,draco:e._draco,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._dracoLoader=n,await n.load(),e.isDestroyed()?void 0:(e._state=Rt.LOADED,e)}catch(n){if(e.isDestroyed())return;pY(e,n)}}async function QWe(e){let t=e._gltf,n=e._accessorId,o=t.accessors[n].bufferView;e._state=Rt.LOADING;let r=e._resourceCache;try{let s=r.getBufferViewLoader({gltf:t,bufferViewId:o,gltfResource:e._gltfResource,baseResource:e._baseResource});if(e._bufferViewLoader=s,await s.load(),e.isDestroyed())return;let a=s.typedArray;return e._typedArray=jWe(e,a),e._state=Rt.PROCESSING,e}catch(s){if(e.isDestroyed())return;pY(e,s)}}function jWe(e,t){let n=e._gltf,i=e._accessorId,o=n.accessors[i],r=o.count,s=o.componentType,a=Ue.getSizeInBytes(s),c=t.buffer,l=t.byteOffset+o.byteOffset;if(l%a!==0){let m=r*a,p=new Uint8Array(c,l,m);c=new Uint8Array(p).buffer,l=0,Qr("index-buffer-unaligned",`The index array is not aligned to a ${a}-byte boundary.`)}let u;return s===Ue.UNSIGNED_BYTE?u=new Uint8Array(c,l,r):s===Ue.UNSIGNED_SHORT?u=new Uint16Array(c,l,r):s===Ue.UNSIGNED_INT&&(u=new Uint32Array(c,l,r)),u}function pY(e,t){e.unload(),e._state=Rt.FAILED;let n="Failed to load index buffer";throw e.getError(n,t)}function bY(){this.typedArray=void 0,this.indexDatatype=void 0,this.context=void 0,this.buffer=void 0}bY.prototype.set=function(e,t,n){this.typedArray=e,this.indexDatatype=t,this.context=n};bY.prototype.execute=function(){this.buffer=Gte(this.typedArray,this.indexDatatype,this.context)};function Gte(e,t,n){let i=mt.createIndexBuffer({typedArray:e,context:n,usage:Ne.STATIC_DRAW,indexDatatype:t});return i.vertexArrayDestroyable=!1,i}Zb.prototype.process=function(e){if(this._state===Rt.READY)return!0;if(this._state!==Rt.LOADED&&this._state!==Rt.PROCESSING)return!1;let t=this._typedArray,n=this._indexDatatype;if(d(this._dracoLoader))try{this._dracoLoader.process(e)&&(t=this._dracoLoader.decodedData.indices.typedArray,this._typedArray=t,n=Q.fromTypedArray(t),this._indexDatatype=n)}catch(o){pY(this,o)}if(!d(t))return!1;let i;if(this._loadBuffer&&this._asynchronous){let o=zWe;if(o.set(t,n,e.context),!e.jobScheduler.execute(o,pa.BUFFER))return!1;i=o.buffer}else this._loadBuffer&&(i=Gte(t,n,e.context));return this.unload(),this._buffer=i,this._typedArray=this._loadTypedArray?t:void 0,this._state=Rt.READY,this._resourceCache.statistics.addGeometryLoader(this),!0};Zb.prototype.unload=function(){d(this._buffer)&&this._buffer.destroy();let e=this._resourceCache;d(this._bufferViewLoader)&&!this._bufferViewLoader.isDestroyed()&&e.unload(this._bufferViewLoader),d(this._dracoLoader)&&e.unload(this._dracoLoader),this._bufferViewLoader=void 0,this._dracoLoader=void 0,this._typedArray=void 0,this._buffer=void 0,this._gltf=void 0};var vS=Zb;var inn=T(S(),1);var y$t=T(S(),1);var Jqt=T(S(),1);function qWe(e,t,n){if(n=g(n,!1),n){let i=e.indexOf(t);if(i>-1)return i}return e.push(t),e.length-1}var os=qWe;var n$t=T(S(),1);var qqt=T(S(),1);function $We(e,t){return d(e.extensionsUsed)&&e.extensionsUsed.indexOf(t)>=0}var tr=$We;function Kt(){}Kt.objectLegacy=function(e,t){if(d(e)){for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)){let i=e[n],o=t(i,n);if(d(o))return o}}};Kt.object=function(e,t){if(d(e)){let n=e.length;for(let i=0;i<n;i++){let o=e[i],r=t(o,i);if(d(r))return r}}};Kt.topLevel=function(e,t,n){let i=e[t];return d(i)&&!Array.isArray(i)?Kt.objectLegacy(i,n):Kt.object(i,n)};Kt.accessor=function(e,t){return Kt.topLevel(e,"accessors",t)};Kt.accessorWithSemantic=function(e,t,n){let i={};return Kt.mesh(e,function(o){return Kt.meshPrimitive(o,function(r){let s=Kt.meshPrimitiveAttribute(r,function(a,c){if(c.indexOf(t)===0&&!d(i[a])){i[a]=!0;let l=n(a);if(d(l))return l}});return d(s)?s:Kt.meshPrimitiveTarget(r,function(a){return Kt.meshPrimitiveTargetAttribute(a,function(c,l){if(l.indexOf(t)===0&&!d(i[c])){i[c]=!0;let u=n(c);if(d(u))return u}})})})})};Kt.accessorContainingVertexAttributeData=function(e,t){let n={};return Kt.mesh(e,function(i){return Kt.meshPrimitive(i,function(o){let r=Kt.meshPrimitiveAttribute(o,function(s){if(!d(n[s])){n[s]=!0;let a=t(s);if(d(a))return a}});return d(r)?r:Kt.meshPrimitiveTarget(o,function(s){return Kt.meshPrimitiveTargetAttribute(s,function(a){if(!d(n[a])){n[a]=!0;let c=t(a);if(d(c))return c}})})})})};Kt.accessorContainingIndexData=function(e,t){let n={};return Kt.mesh(e,function(i){return Kt.meshPrimitive(i,function(o){let r=o.indices;if(d(r)&&!d(n[r])){n[r]=!0;let s=t(r);if(d(s))return s}})})};Kt.animation=function(e,t){return Kt.topLevel(e,"animations",t)};Kt.animationChannel=function(e,t){let n=e.channels;return Kt.object(n,t)};Kt.animationSampler=function(e,t){let n=e.samplers;return Kt.object(n,t)};Kt.buffer=function(e,t){return Kt.topLevel(e,"buffers",t)};Kt.bufferView=function(e,t){return Kt.topLevel(e,"bufferViews",t)};Kt.camera=function(e,t){return Kt.topLevel(e,"cameras",t)};Kt.image=function(e,t){return Kt.topLevel(e,"images",t)};Kt.material=function(e,t){return Kt.topLevel(e,"materials",t)};Kt.materialValue=function(e,t){let n=e.values;d(e.extensions)&&d(e.extensions.KHR_techniques_webgl)&&(n=e.extensions.KHR_techniques_webgl.values);for(let i in n)if(Object.prototype.hasOwnProperty.call(n,i)){let o=t(n[i],i);if(d(o))return o}};Kt.mesh=function(e,t){return Kt.topLevel(e,"meshes",t)};Kt.meshPrimitive=function(e,t){let n=e.primitives;if(d(n)){let i=n.length;for(let o=0;o<i;o++){let r=n[o],s=t(r,o);if(d(s))return s}}};Kt.meshPrimitiveAttribute=function(e,t){let n=e.attributes;for(let i in n)if(Object.prototype.hasOwnProperty.call(n,i)){let o=t(n[i],i);if(d(o))return o}};Kt.meshPrimitiveTarget=function(e,t){let n=e.targets;if(d(n)){let i=n.length;for(let o=0;o<i;++o){let r=t(n[o],o);if(d(r))return r}}};Kt.meshPrimitiveTargetAttribute=function(e,t){for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)){let i=e[n],o=t(i,n);if(d(o))return o}};Kt.node=function(e,t){return Kt.topLevel(e,"nodes",t)};Kt.nodeInTree=function(e,t,n){let i=e.nodes;if(d(i)){let o=t.length;for(let r=0;r<o;r++){let s=t[r],a=i[s];if(d(a)){let c=n(a,s);if(d(c))return c;let l=a.children;if(d(l)&&(c=Kt.nodeInTree(e,l,n),d(c)))return c}}}};Kt.nodeInScene=function(e,t,n){let i=t.nodes;if(d(i))return Kt.nodeInTree(e,i,n)};Kt.program=function(e,t){return tr(e,"KHR_techniques_webgl")?Kt.object(e.extensions.KHR_techniques_webgl.programs,t):Kt.topLevel(e,"programs",t)};Kt.sampler=function(e,t){return Kt.topLevel(e,"samplers",t)};Kt.scene=function(e,t){return Kt.topLevel(e,"scenes",t)};Kt.shader=function(e,t){return tr(e,"KHR_techniques_webgl")?Kt.object(e.extensions.KHR_techniques_webgl.shaders,t):Kt.topLevel(e,"shaders",t)};Kt.skin=function(e,t){return Kt.topLevel(e,"skins",t)};Kt.skinJoint=function(e,t){let n=e.joints;if(d(n)){let i=n.length;for(let o=0;o<i;o++){let r=n[o],s=t(r);if(d(s))return s}}};Kt.techniqueAttribute=function(e,t){let n=e.attributes;for(let i in n)if(Object.prototype.hasOwnProperty.call(n,i)){let o=t(n[i],i);if(d(o))return o}};Kt.techniqueUniform=function(e,t){let n=e.uniforms;for(let i in n)if(Object.prototype.hasOwnProperty.call(n,i)){let o=t(n[i],i);if(d(o))return o}};Kt.techniqueParameter=function(e,t){let n=e.parameters;for(let i in n)if(Object.prototype.hasOwnProperty.call(n,i)){let o=t(n[i],i);if(d(o))return o}};Kt.technique=function(e,t){return tr(e,"KHR_techniques_webgl")?Kt.object(e.extensions.KHR_techniques_webgl.techniques,t):Kt.topLevel(e,"techniques",t)};Kt.texture=function(e,t){return Kt.topLevel(e,"textures",t)};var Xe=Kt;var l$t=T(S(),1);var o$t=T(S(),1);function e2e(e){switch(e){case"SCALAR":return 1;case"VEC2":return 2;case"VEC3":return 3;case"VEC4":case"MAT2":return 4;case"MAT3":return 9;case"MAT4":return 16}}var $l=e2e;function t2e(e,t){let n=t.bufferView;if(d(n)){let i=e.bufferViews[n];if(d(i.byteStride)&&i.byteStride>0)return i.byteStride}return Q.getSizeInBytes(t.componentType)*$l(t.type)}var bl=t2e;function n2e(e){Xe.accessor(e,function(n){d(n.bufferView)&&(n.byteOffset=g(n.byteOffset,0))}),Xe.bufferView(e,function(n){d(n.buffer)&&(n.byteOffset=g(n.byteOffset,0))}),Xe.mesh(e,function(n){Xe.meshPrimitive(n,function(i){if(i.mode=g(i.mode,ne.TRIANGLES),!d(i.material)){d(e.materials)||(e.materials=[]);let o={name:"default"};i.material=os(e.materials,o)}})}),Xe.accessorContainingVertexAttributeData(e,function(n){let i=e.accessors[n],o=i.bufferView;if(i.normalized=g(i.normalized,!1),d(o)){let r=e.bufferViews[o];r.byteStride=bl(e,i),r.target=ne.ARRAY_BUFFER}}),Xe.accessorContainingIndexData(e,function(n){let o=e.accessors[n].bufferView;if(d(o)){let r=e.bufferViews[o];r.target=ne.ELEMENT_ARRAY_BUFFER}}),Xe.material(e,function(n){let i=g(n.extensions,g.EMPTY_OBJECT),o=i.KHR_materials_common;if(d(o)){let c=o.technique,l=d(o.values)?o.values:{};o.values=l,l.ambient=d(l.ambient)?l.ambient:[0,0,0,1],l.emission=d(l.emission)?l.emission:[0,0,0,1],l.transparency=g(l.transparency,1),c!=="CONSTANT"&&(l.diffuse=d(l.diffuse)?l.diffuse:[0,0,0,1],c!=="LAMBERT"&&(l.specular=d(l.specular)?l.specular:[0,0,0,1],l.shininess=g(l.shininess,0))),o.transparent=g(o.transparent,!1),o.doubleSided=g(o.doubleSided,!1);return}n.emissiveFactor=g(n.emissiveFactor,[0,0,0]),n.alphaMode=g(n.alphaMode,"OPAQUE"),n.doubleSided=g(n.doubleSided,!1),n.alphaMode==="MASK"&&(n.alphaCutoff=g(n.alphaCutoff,.5));let r=i.KHR_techniques_webgl;d(r)&&Xe.materialValue(n,function(c){d(c.index)&&Tx(c)}),Tx(n.emissiveTexture),Tx(n.normalTexture),Tx(n.occlusionTexture);let s=n.pbrMetallicRoughness;d(s)&&(s.baseColorFactor=g(s.baseColorFactor,[1,1,1,1]),s.metallicFactor=g(s.metallicFactor,1),s.roughnessFactor=g(s.roughnessFactor,1),Tx(s.baseColorTexture),Tx(s.metallicRoughnessTexture));let a=i.KHR_materials_pbrSpecularGlossiness;d(a)&&(a.diffuseFactor=g(a.diffuseFactor,[1,1,1,1]),a.specularFactor=g(a.specularFactor,[1,1,1]),a.glossinessFactor=g(a.glossinessFactor,1),Tx(a.specularGlossinessTexture))}),Xe.animation(e,function(n){Xe.animationSampler(n,function(i){i.interpolation=g(i.interpolation,"LINEAR")})});let t=i2e(e);return Xe.node(e,function(n,i){d(t[i])||d(n.translation)||d(n.rotation)||d(n.scale)?(n.translation=g(n.translation,[0,0,0]),n.rotation=g(n.rotation,[0,0,0,1]),n.scale=g(n.scale,[1,1,1])):n.matrix=g(n.matrix,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}),Xe.sampler(e,function(n){n.wrapS=g(n.wrapS,ne.REPEAT),n.wrapT=g(n.wrapT,ne.REPEAT)}),d(e.scenes)&&!d(e.scene)&&(e.scene=0),e}function i2e(e){let t={};return Xe.animation(e,function(n){Xe.animationChannel(n,function(i){let o=i.target,r=o.node,s=o.path;(s==="translation"||s==="rotation"||s==="scale")&&(t[r]=!0)})}),t}function Tx(e){d(e)&&(e.texCoord=g(e.texCoord,0))}var _E=n2e;var T$t=T(S(),1);function o2e(e){return Xe.shader(e,function(t){ZM(t)}),Xe.buffer(e,function(t){ZM(t)}),Xe.image(e,function(t){ZM(t)}),ZM(e),e}function ZM(e){e.extras=d(e.extras)?e.extras:{},e.extras._pipeline=d(e.extras._pipeline)?e.extras._pipeline:{}}var Gb=o2e;var A$t=T(S(),1);var G$t=T(S(),1);var V$t=T(S(),1);function r2e(e,t){let n=e.extensionsRequired;if(d(n)){let i=n.indexOf(t);i>=0&&n.splice(i,1),n.length===0&&delete e.extensionsRequired}}var TE=r2e;function s2e(e,t){let n=e.extensionsUsed;if(d(n)){let i=n.indexOf(t);i>=0&&n.splice(i,1),TE(e,t),n.length===0&&delete e.extensionsUsed}}var Sx=s2e;var a2e=4;function c2e(e){if(pm(e)!=="glTF")throw new me("File is not valid binary glTF");let n=Ete(e,0,5),i=n[1];if(i!==1&&i!==2)throw new me("Binary glTF version is not 1 or 2");return i===1?l2e(e,n):d2e(e,n)}function Ete(e,t,n){let i=new DataView(e.buffer),o=new Array(n);for(let r=0;r<n;++r)o[r]=i.getUint32(e.byteOffset+t+r*a2e,!0);return o}function l2e(e,t){let n=t[2],i=t[3];if(t[4]!==0)throw new me("Binary glTF scene format is not JSON");let r=20,s=r+i,a=ml(e,r,i),c=JSON.parse(a);Gb(c);let l=e.subarray(s,n),u=c.buffers;if(d(u)&&Object.keys(u).length>0){let m=g(u.binary_glTF,u.KHR_binary_glTF);d(m)&&(m.extras._pipeline.source=l,delete m.uri)}return Sx(c,"KHR_binary_glTF"),c}function d2e(e,t){let n=t[2],i=12,o,r;for(;i<n;){let s=Ete(e,i,2),a=s[0],c=s[1];i+=8;let l=e.subarray(i,i+a);if(i+=a,c===1313821514){let u=ml(l);o=JSON.parse(u),Gb(o)}else c===5130562&&(r=l)}if(d(o)&&d(r)){let s=o.buffers;if(d(s)&&s.length>0){let a=s[0];a.extras._pipeline.source=r}}return o}var SE=c2e;var k$t=T(S(),1);function u2e(e){return Xe.shader(e,function(t){GM(t)}),Xe.buffer(e,function(t){GM(t)}),Xe.image(e,function(t){GM(t)}),GM(e),e}function GM(e){d(e.extras)&&(d(e.extras._pipeline)&&delete e.extras._pipeline,Object.keys(e.extras).length===0&&delete e.extras)}var CE=u2e;var Stn=T(S(),1);var O$t=T(S(),1);function m2e(e,t){let n=e.extensionsUsed;d(n)||(n=[],e.extensionsUsed=n),os(n,t,!0)}var nu=m2e;var ten=T(S(),1);var z$t=T(S(),1);function h2e(e){switch(e){case Q.BYTE:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getInt8(n+s*o)};case Q.UNSIGNED_BYTE:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getUint8(n+s*o)};case Q.SHORT:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getInt16(n+s*o,!0)};case Q.UNSIGNED_SHORT:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getUint16(n+s*o,!0)};case Q.INT:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getInt32(n+s*o,!0)};case Q.UNSIGNED_INT:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getUint32(n+s*o,!0)};case Q.FLOAT:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getFloat32(n+s*o,!0)};case Q.DOUBLE:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getFloat64(n+s*o,!0)}}}var Rp=h2e;function f2e(e,t){let n=e.bufferViews,i=e.buffers,o=t.bufferView,r=$l(t.type);if(!d(t.bufferView))return{min:new Array(r).fill(0),max:new Array(r).fill(0)};let s=new Array(r).fill(Number.POSITIVE_INFINITY),a=new Array(r).fill(Number.NEGATIVE_INFINITY),c=n[o],l=c.buffer,m=i[l].extras._pipeline.source,p=t.count,y=bl(e,t),f=t.byteOffset+c.byteOffset+m.byteOffset,x=t.componentType,_=Q.getSizeInBytes(x),C=new DataView(m.buffer),V=new Array(r),L=Rp(x);for(let Z=0;Z<p;Z++){L(C,f,r,_,V);for(let G=0;G<r;G++){let X=V[G];s[G]=Math.min(s[G],X),a[G]=Math.max(a[G],X)}f+=y}return{min:s,max:a}}var Cx=f2e;var cen=T(S(),1);var p2e=[ne.FUNC_ADD,ne.FUNC_ADD],b2e=[ne.ONE,ne.ZERO,ne.ONE,ne.ZERO];function Xte(e,t){let n=e.enable;return d(n)?n.indexOf(t)>-1:!1}var y2e=[ne.ZERO,ne.ONE,ne.SRC_COLOR,ne.ONE_MINUS_SRC_COLOR,ne.SRC_ALPHA,ne.ONE_MINUS_SRC_ALPHA,ne.DST_ALPHA,ne.ONE_MINUS_DST_ALPHA,ne.DST_COLOR,ne.ONE_MINUS_DST_COLOR];function g2e(e,t){if(!d(e))return t;for(let n=0;n<4;n++)if(y2e.indexOf(e[n])===-1)return t;return e}function x2e(e){let t={},n={},i=e.techniques;return d(i)&&(Xe.technique(e,function(o,r){let s=o.states;if(d(s)){let a=n[r]={};if(Xte(s,ne.BLEND)){a.alphaMode="BLEND";let c=s.functions;d(c)&&(d(c.blendEquationSeparate)||d(c.blendFuncSeparate))&&(t[r]={blendEquation:g(c.blendEquationSeparate,p2e),blendFactors:g2e(c.blendFuncSeparate,b2e)})}Xte(s,ne.CULL_FACE)||(a.doubleSided=!0),delete o.states}}),Object.keys(t).length>0&&(d(e.extensions)||(e.extensions={}),nu(e,"KHR_blend")),Xe.material(e,function(o){if(d(o.technique)){let r=n[o.technique];Xe.objectLegacy(r,function(a,c){o[c]=a});let s=t[o.technique];d(s)&&(d(o.extensions)||(o.extensions={}),o.extensions.KHR_blend=s)}})),e}var VE=x2e;var _en=T(S(),1);var hen=T(S(),1);function _2e(e,t){let n=e.extensionsRequired;d(n)||(n=[],e.extensionsRequired=n),os(n,t,!0),nu(e,t)}var LE=_2e;function T2e(e){let t=e.techniques,n={},i={},o={};if(d(t)){let r={programs:[],shaders:[],techniques:[]},s=e.glExtensionsUsed;delete e.glExtensionsUsed,Xe.technique(e,function(a,c){let l={name:a.name,program:void 0,attributes:{},uniforms:{}},u;if(Xe.techniqueAttribute(a,function(m,p){u=a.parameters[m],l.attributes[p]={semantic:u.semantic}}),Xe.techniqueUniform(a,function(m,p){u=a.parameters[m],l.uniforms[p]={count:u.count,node:u.node,type:u.type,semantic:u.semantic,value:u.value},d(n[c])||(n[c]={}),n[c][m]=p}),d(o[a.program]))l.program=o[a.program];else{let m=e.programs[a.program],p={name:m.name,fragmentShader:void 0,vertexShader:void 0,glExtensions:s},y=e.shaders[m.fragmentShader];p.fragmentShader=os(r.shaders,y,!0);let f=e.shaders[m.vertexShader];p.vertexShader=os(r.shaders,f,!0),l.program=os(r.programs,p),o[a.program]=l.program}i[c]=os(r.techniques,l)}),r.techniques.length>0&&(d(e.extensions)||(e.extensions={}),e.extensions.KHR_techniques_webgl=r,nu(e,"KHR_techniques_webgl"),LE(e,"KHR_techniques_webgl"))}return Xe.material(e,function(r){if(d(r.technique)){let s={technique:i[r.technique]};Xe.objectLegacy(r.values,function(a,c){d(s.values)||(s.values={});let l=n[r.technique][c];d(l)&&(s.values[l]=a)}),d(r.extensions)||(r.extensions={}),r.extensions.KHR_techniques_webgl=s}delete r.technique,delete r.values}),delete e.techniques,delete e.programs,delete e.shaders,e}var RE=T2e;var Wen=T(S(),1);var Len=T(S(),1);function S2e(e,t){tl.typeOf.object("material",e),tl.defined("handler",t);let n=e.pbrMetallicRoughness;if(d(n)){if(d(n.baseColorTexture)){let o=n.baseColorTexture,r=t(o.index,o);if(d(r))return r}if(d(n.metallicRoughnessTexture)){let o=n.metallicRoughnessTexture,r=t(o.index,o);if(d(r))return r}}if(d(e.extensions)){let o=e.extensions.KHR_materials_pbrSpecularGlossiness;if(d(o)){if(d(o.diffuseTexture)){let s=o.diffuseTexture,a=t(s.index,s);if(d(a))return a}if(d(o.specularGlossinessTexture)){let s=o.specularGlossinessTexture,a=t(s.index,s);if(d(a))return a}}let r=e.extensions.KHR_materials_common;if(d(r)&&d(r.values)){let s=r.values.diffuse,a=r.values.ambient,c=r.values.emission,l=r.values.specular;if(d(s)&&d(s.index)){let u=t(s.index,s);if(d(u))return u}if(d(a)&&d(a.index)){let u=t(a.index,a);if(d(u))return u}if(d(c)&&d(c.index)){let u=t(c.index,c);if(d(u))return u}if(d(l)&&d(l.index)){let u=t(l.index,l);if(d(u))return u}}}let i=Xe.materialValue(e,function(o){if(d(o.index)){let r=t(o.index,o);if(d(r))return r}});if(d(i))return i;if(d(e.emissiveTexture)){let o=e.emissiveTexture,r=t(o.index,o);if(d(r))return r}if(d(e.normalTexture)){let o=e.normalTexture,r=t(o.index,o);if(d(r))return r}if(d(e.occlusionTexture)){let o=e.occlusionTexture,r=t(o.index,o);if(d(r))return r}}var wS=S2e;var Ite=["mesh","node","material","accessor","bufferView","buffer","texture","sampler","image"];function C2e(e,t){return t=g(t,Ite),Ite.forEach(function(n){t.indexOf(n)>-1&&L2e(e,n)}),e}var V2e={accessor:"accessors",buffer:"buffers",bufferView:"bufferViews",image:"images",node:"nodes",material:"materials",mesh:"meshes",sampler:"samplers",texture:"textures"};function L2e(e,t){let n=V2e[t],i=e[n];if(d(i)){let o=0,r=Yh[t](e),s=i.length;for(let a=0;a<s;++a)r[a]||(Bh[t](e,a-o),o++)}}function Bh(){}Bh.accessor=function(e,t){e.accessors.splice(t,1),Xe.mesh(e,function(i){Xe.meshPrimitive(i,function(o){Xe.meshPrimitiveAttribute(o,function(a,c){a>t&&o.attributes[c]--}),Xe.meshPrimitiveTarget(o,function(a){Xe.meshPrimitiveTargetAttribute(a,function(c,l){c>t&&a[l]--})});let r=o.indices;d(r)&&r>t&&o.indices--;let s=o.extensions;d(s)&&d(s.CESIUM_primitive_outline)&&s.CESIUM_primitive_outline.indices>t&&--s.CESIUM_primitive_outline.indices})}),Xe.skin(e,function(i){d(i.inverseBindMatrices)&&i.inverseBindMatrices>t&&i.inverseBindMatrices--}),Xe.animation(e,function(i){Xe.animationSampler(i,function(o){d(o.input)&&o.input>t&&o.input--,d(o.output)&&o.output>t&&o.output--})})};Bh.buffer=function(e,t){e.buffers.splice(t,1),Xe.bufferView(e,function(i){d(i.buffer)&&i.buffer>t&&i.buffer--,d(i.extensions)&&d(i.extensions.EXT_meshopt_compression)&&i.extensions.EXT_meshopt_compression.buffer--})};Bh.bufferView=function(e,t){if(e.bufferViews.splice(t,1),Xe.accessor(e,function(i){d(i.bufferView)&&i.bufferView>t&&i.bufferView--}),Xe.shader(e,function(i){d(i.bufferView)&&i.bufferView>t&&i.bufferView--}),Xe.image(e,function(i){d(i.bufferView)&&i.bufferView>t&&i.bufferView--}),tr(e,"KHR_draco_mesh_compression")&&Xe.mesh(e,function(i){Xe.meshPrimitive(i,function(o){d(o.extensions)&&d(o.extensions.KHR_draco_mesh_compression)&&o.extensions.KHR_draco_mesh_compression.bufferView>t&&o.extensions.KHR_draco_mesh_compression.bufferView--})}),tr(e,"EXT_feature_metadata")){let o=e.extensions.EXT_feature_metadata.featureTables;for(let r in o)if(o.hasOwnProperty(r)){let a=o[r].properties;if(d(a)){for(let c in a)if(a.hasOwnProperty(c)){let l=a[c];d(l.bufferView)&&l.bufferView>t&&l.bufferView--,d(l.arrayOffsetBufferView)&&l.arrayOffsetBufferView>t&&l.arrayOffsetBufferView--,d(l.stringOffsetBufferView)&&l.stringOffsetBufferView>t&&l.stringOffsetBufferView--}}}}if(tr(e,"EXT_structural_metadata")){let o=e.extensions.EXT_structural_metadata.propertyTables;if(d(o)){let r=o.length;for(let s=0;s<r;++s){let c=o[s].properties;for(let l in c)if(c.hasOwnProperty(l)){let u=c[l];d(u.values)&&u.values>t&&u.values--,d(u.arrayOffsets)&&u.arrayOffsets>t&&u.arrayOffsets--,d(u.stringOffsets)&&u.stringOffsets>t&&u.stringOffsets--}}}}};Bh.image=function(e,t){e.images.splice(t,1),Xe.texture(e,function(i){d(i.source)&&i.source>t&&--i.source;let o=i.extensions;d(o)&&d(o.EXT_texture_webp)&&o.EXT_texture_webp.source>t?--i.extensions.EXT_texture_webp.source:d(o)&&d(o.KHR_texture_basisu)&&o.KHR_texture_basisu.source>t&&--i.extensions.KHR_texture_basisu.source})};Bh.mesh=function(e,t){e.meshes.splice(t,1),Xe.node(e,function(i){d(i.mesh)&&(i.mesh>t?i.mesh--:i.mesh===t&&delete i.mesh)})};Bh.node=function(e,t){e.nodes.splice(t,1),Xe.skin(e,function(i){d(i.skeleton)&&i.skeleton>t&&i.skeleton--,i.joints=i.joints.map(function(o){return o>t?o-1:o})}),Xe.animation(e,function(i){Xe.animationChannel(i,function(o){d(o.target)&&d(o.target.node)&&o.target.node>t&&o.target.node--})}),Xe.technique(e,function(i){Xe.techniqueUniform(i,function(o){d(o.node)&&o.node>t&&o.node--})}),Xe.node(e,function(i){d(i.children)&&(i.children=i.children.filter(function(o){return o!==t}).map(function(o){return o>t?o-1:o}))}),Xe.scene(e,function(i){i.nodes=i.nodes.filter(function(o){return o!==t}).map(function(o){return o>t?o-1:o})})};Bh.material=function(e,t){e.materials.splice(t,1),Xe.mesh(e,function(i){Xe.meshPrimitive(i,function(o){d(o.material)&&o.material>t&&o.material--})})};Bh.sampler=function(e,t){e.samplers.splice(t,1),Xe.texture(e,function(i){d(i.sampler)&&i.sampler>t&&--i.sampler})};Bh.texture=function(e,t){if(e.textures.splice(t,1),Xe.material(e,function(i){wS(i,function(o,r){r.index>t&&--r.index})}),tr(e,"EXT_feature_metadata")){Xe.mesh(e,function(r){Xe.meshPrimitive(r,function(s){let a=s.extensions;if(d(a)&&d(a.EXT_feature_metadata)){let l=a.EXT_feature_metadata.featureIdTextures;if(d(l)){let u=l.length;for(let m=0;m<u;++m){let y=l[m].featureIds.texture;y.index>t&&--y.index}}}})});let o=e.extensions.EXT_feature_metadata.featureTextures;for(let r in o)if(o.hasOwnProperty(r)){let a=o[r].properties;if(d(a)){for(let c in a)if(a.hasOwnProperty(c)){let u=a[c].texture;u.index>t&&--u.index}}}}if(tr(e,"EXT_mesh_features")&&Xe.mesh(e,function(i){Xe.meshPrimitive(i,function(o){let r=o.extensions;if(d(r)&&d(r.EXT_mesh_features)){let a=r.EXT_mesh_features.featureIds;if(d(a)){let c=a.length;for(let l=0;l<c;++l){let u=a[l];d(u.texture)&&u.texture.index>t&&--u.texture.index}}}})}),tr(e,"EXT_structural_metadata")){let o=e.extensions.EXT_structural_metadata.propertyTextures;if(d(o)){let r=o.length;for(let s=0;s<r;++s){let c=o[s].properties;for(let l in c)if(c.hasOwnProperty(l)){let u=c[l];u.index>t&&--u.index}}}}};function Yh(){}Yh.accessor=function(e){let t={};return Xe.mesh(e,function(n){Xe.meshPrimitive(n,function(i){Xe.meshPrimitiveAttribute(i,function(r){t[r]=!0}),Xe.meshPrimitiveTarget(i,function(r){Xe.meshPrimitiveTargetAttribute(r,function(s){t[s]=!0})});let o=i.indices;d(o)&&(t[o]=!0)})}),Xe.skin(e,function(n){d(n.inverseBindMatrices)&&(t[n.inverseBindMatrices]=!0)}),Xe.animation(e,function(n){Xe.animationSampler(n,function(i){d(i.input)&&(t[i.input]=!0),d(i.output)&&(t[i.output]=!0)})}),tr(e,"EXT_mesh_gpu_instancing")&&Xe.node(e,function(n){d(n.extensions)&&d(n.extensions.EXT_mesh_gpu_instancing)&&Object.keys(n.extensions.EXT_mesh_gpu_instancing.attributes).forEach(function(i){let o=n.extensions.EXT_mesh_gpu_instancing.attributes[i];t[o]=!0})}),tr(e,"CESIUM_primitive_outline")&&Xe.mesh(e,function(n){Xe.meshPrimitive(n,function(i){let o=i.extensions;if(d(o)&&d(o.CESIUM_primitive_outline)){let s=o.CESIUM_primitive_outline.indices;d(s)&&(t[s]=!0)}})}),t};Yh.buffer=function(e){let t={};return Xe.bufferView(e,function(n){d(n.buffer)&&(t[n.buffer]=!0),d(n.extensions)&&d(n.extensions.EXT_meshopt_compression)&&(t[n.extensions.EXT_meshopt_compression.buffer]=!0)}),t};Yh.bufferView=function(e){let t={};if(Xe.accessor(e,function(n){d(n.bufferView)&&(t[n.bufferView]=!0)}),Xe.shader(e,function(n){d(n.bufferView)&&(t[n.bufferView]=!0)}),Xe.image(e,function(n){d(n.bufferView)&&(t[n.bufferView]=!0)}),tr(e,"KHR_draco_mesh_compression")&&Xe.mesh(e,function(n){Xe.meshPrimitive(n,function(i){d(i.extensions)&&d(i.extensions.KHR_draco_mesh_compression)&&(t[i.extensions.KHR_draco_mesh_compression.bufferView]=!0)})}),tr(e,"EXT_feature_metadata")){let i=e.extensions.EXT_feature_metadata.featureTables;for(let o in i)if(i.hasOwnProperty(o)){let s=i[o].properties;if(d(s)){for(let a in s)if(s.hasOwnProperty(a)){let c=s[a];d(c.bufferView)&&(t[c.bufferView]=!0),d(c.arrayOffsetBufferView)&&(t[c.arrayOffsetBufferView]=!0),d(c.stringOffsetBufferView)&&(t[c.stringOffsetBufferView]=!0)}}}}if(tr(e,"EXT_structural_metadata")){let i=e.extensions.EXT_structural_metadata.propertyTables;if(d(i)){let o=i.length;for(let r=0;r<o;++r){let a=i[r].properties;for(let c in a)if(a.hasOwnProperty(c)){let l=a[c];d(l.values)&&(t[l.values]=!0),d(l.arrayOffsets)&&(t[l.arrayOffsets]=!0),d(l.stringOffsets)&&(t[l.stringOffsets]=!0)}}}}return t};Yh.image=function(e){let t={};return Xe.texture(e,function(n){d(n.source)&&(t[n.source]=!0),d(n.extensions)&&d(n.extensions.EXT_texture_webp)?t[n.extensions.EXT_texture_webp.source]=!0:d(n.extensions)&&d(n.extensions.KHR_texture_basisu)&&(t[n.extensions.KHR_texture_basisu.source]=!0)}),t};Yh.mesh=function(e){let t={};return Xe.node(e,function(n){if(d(n.mesh&&d(e.meshes))){let i=e.meshes[n.mesh];d(i)&&d(i.primitives)&&i.primitives.length>0&&(t[n.mesh]=!0)}}),t};function Wte(e,t,n){let i=e.nodes[t];return d(i.mesh)||d(i.camera)||d(i.skin)||d(i.weights)||d(i.extras)||d(i.extensions)&&Object.keys(i.extensions).length!==0||d(n[t])?!1:!d(i.children)||i.children.filter(function(o){return!Wte(e,o,n)}).length===0}Yh.node=function(e){let t={};return Xe.skin(e,function(n){d(n.skeleton)&&(t[n.skeleton]=!0),Xe.skinJoint(n,function(i){t[i]=!0})}),Xe.animation(e,function(n){Xe.animationChannel(n,function(i){d(i.target)&&d(i.target.node)&&(t[i.target.node]=!0)})}),Xe.technique(e,function(n){Xe.techniqueUniform(n,function(i){d(i.node)&&(t[i.node]=!0)})}),Xe.node(e,function(n,i){Wte(e,i,t)||(t[i]=!0)}),t};Yh.material=function(e){let t={};return Xe.mesh(e,function(n){Xe.meshPrimitive(n,function(i){d(i.material)&&(t[i.material]=!0)})}),t};Yh.texture=function(e){let t={};if(Xe.material(e,function(n){wS(n,function(i){t[i]=!0})}),tr(e,"EXT_feature_metadata")){Xe.mesh(e,function(o){Xe.meshPrimitive(o,function(r){let s=r.extensions;if(d(s)&&d(s.EXT_feature_metadata)){let c=s.EXT_feature_metadata.featureIdTextures;if(d(c)){let l=c.length;for(let u=0;u<l;++u){let p=c[u].featureIds.texture;t[p.index]=!0}}}})});let i=e.extensions.EXT_feature_metadata.featureTextures;for(let o in i)if(i.hasOwnProperty(o)){let s=i[o].properties;if(d(s)){for(let a in s)if(s.hasOwnProperty(a)){let l=s[a].texture;t[l.index]=!0}}}}if(tr(e,"EXT_mesh_features")&&Xe.mesh(e,function(n){Xe.meshPrimitive(n,function(i){let o=i.extensions;if(d(o)&&d(o.EXT_mesh_features)){let s=o.EXT_mesh_features.featureIds;if(d(s)){let a=s.length;for(let c=0;c<a;++c){let l=s[c];d(l.texture)&&(t[l.texture.index]=!0)}}}})}),tr(e,"EXT_structural_metadata")){let i=e.extensions.EXT_structural_metadata.propertyTextures;if(d(i)){let o=i.length;for(let r=0;r<o;++r){let a=i[r].properties;for(let c in a)if(a.hasOwnProperty(c)){let l=a[c];t[l.index]=!0}}}}return t};Yh.sampler=function(e){let t={};return Xe.texture(e,function(n){d(n.sampler)&&(t[n.sampler]=!0)}),t};var ZE=C2e;var Jen=T(S(),1);var wen=T(S(),1);function R2e(e,t){let n={byteLength:t.length,extras:{_pipeline:{source:t}}},o={buffer:os(e.buffers,n),byteOffset:0,byteLength:t.length};return os(e.bufferViews,o)}var GE=R2e;var Den=T(S(),1);function Z2e(e,t){let n=bl(e,t),i=Q.getSizeInBytes(t.componentType),o=$l(t.type),r=t.count,s=new Array(o*r);if(!d(t.bufferView))return s.fill(0);let a=e.bufferViews[t.bufferView],c=e.buffers[a.buffer].extras._pipeline.source,l=t.byteOffset+a.byteOffset+c.byteOffset,u=new DataView(c.buffer),m=new Array(o),p=Rp(t.componentType);for(let y=0;y<r;++y){p(u,l,o,i,m);for(let f=0;f<o;++f)s[y*o+f]=m[f];l+=n}return s}var EE=Z2e;function G2e(e){let t;return Xe.accessorWithSemantic(e,"JOINTS_0",function(n){let i=e.accessors[n];t=i.componentType,t===ne.BYTE?EM(e,i,Q.UNSIGNED_BYTE):t!==ne.UNSIGNED_BYTE&&t!==ne.UNSIGNED_SHORT&&EM(e,i,Q.UNSIGNED_SHORT)}),Xe.accessorWithSemantic(e,"WEIGHTS_0",function(n){let i=e.accessors[n];t=i.componentType,t===ne.BYTE?EM(e,i,Q.UNSIGNED_BYTE):t===ne.SHORT&&EM(e,i,Q.UNSIGNED_SHORT)}),e}function EM(e,t,n){let i=Q.createTypedArray(n,EE(e,t)),o=new Uint8Array(i.buffer);t.bufferView=GE(e,o),t.componentType=n,t.byteOffset=0}var XE=G2e;var etn=T(S(),1);function E2e(e,t){return Sx(e,t),t==="CESIUM_RTC"&&X2e(e),yY(e,t)}function X2e(e){Xe.technique(e,function(t){Xe.techniqueUniform(t,function(n){n.semantic==="CESIUM_RTC_MODELVIEW"&&(n.semantic="MODELVIEW")})})}function yY(e,t){if(Array.isArray(e)){let n=e.length;for(let i=0;i<n;++i)yY(e[i],t)}else if(e!==null&&typeof e=="object"&&e.constructor===Object){let n=e.extensions,i;d(n)&&(i=n[t],d(i)&&(delete n[t],Object.keys(n).length===0&&delete e.extensions));for(let o in e)Object.prototype.hasOwnProperty.call(e,o)&&yY(e[o],t);return i}}var Vx=E2e;var XM={.8:F2e,"1.0":iPe,"2.0":void 0};function I2e(e,t){t=g(t,g.EMPTY_OBJECT);let n=t.targetVersion,i=e.version;e.asset=g(e.asset,{version:"1.0"}),e.asset.version=g(e.asset.version,"1.0"),i=g(i,e.asset.version).toString(),Object.prototype.hasOwnProperty.call(XM,i)||(d(i)&&(i=i.substring(0,3)),Object.prototype.hasOwnProperty.call(XM,i)||(i="1.0"));let o=XM[i];for(;d(o)&&i!==n;)o(e,t),i=e.asset.version,o=XM[i];return t.keepLegacyExtensions||(sPe(e,t),aPe(e)),e}function vte(e){let t=e.materials;for(let n in t)if(Object.prototype.hasOwnProperty.call(t,n)){let i=t[n],o=i.instanceTechnique;d(o)&&(i.technique=o.technique,i.values=o.values,delete i.instanceTechnique)}}function W2e(e){let t=e.meshes;for(let n in t)if(Object.prototype.hasOwnProperty.call(t,n)){let o=t[n].primitives;if(d(o)){let r=o.length;for(let s=0;s<r;++s){let a=o[s],c=g(a.primitive,ne.TRIANGLES);a.mode=g(a.mode,c),delete a.primitive}}}}function P2e(e){let t=e.nodes,n=new h,i=new Ae;for(let o in t)if(Object.prototype.hasOwnProperty.call(t,o)){let r=t[o];if(d(r.rotation)){let a=r.rotation;h.fromArray(a,0,n),Ae.fromAxisAngle(n,a[3],i),r.rotation=[i.x,i.y,i.z,i.w]}let s=r.instanceSkin;d(s)&&(r.skeletons=s.skeletons,r.skin=s.skin,r.meshes=s.meshes,delete r.instanceSkin)}}function v2e(e){let t=e.animations,n=e.accessors,i=e.bufferViews,o=e.buffers,r={},s=new h,a=new Ae;for(let c in t)if(Object.prototype.hasOwnProperty.call(t,c)){let l=t[c],u=l.channels,m=l.parameters,p=l.samplers;if(d(u)){let y=u.length;for(let f=0;f<y;++f){let x=u[f];if(x.target.path==="rotation"){let _=m[p[x.sampler].output];if(d(r[_]))continue;r[_]=!0;let C=n[_],V=i[C.bufferView],Z=o[V.buffer].extras._pipeline.source,G=Z.byteOffset+V.byteOffset+C.byteOffset,X=C.componentType,P=C.count,v=$l(C.type),F=C.count*v,M=Q.createArrayBufferView(X,Z.buffer,G,F);for(let b=0;b<P;b++){let R=b*v;h.unpack(M,R,s);let E=M[R+3];Ae.fromAxisAngle(s,E,a),Ae.pack(a,M,R)}}}}}}function w2e(e){let t=e.techniques;for(let n in t)if(Object.prototype.hasOwnProperty.call(t,n)){let i=t[n],o=i.passes;if(d(o)){let r=g(i.pass,"defaultPass");if(Object.prototype.hasOwnProperty.call(o,r)){let s=o[r],a=s.instanceProgram;i.attributes=g(i.attributes,a.attributes),i.program=g(i.program,a.program),i.uniforms=g(i.uniforms,a.uniforms),i.states=g(i.states,s.states)}delete i.passes,delete i.pass}}}function F2e(e){d(e.asset)||(e.asset={});let t=e.asset;if(t.version="1.0",typeof t.profile=="string"){let n=t.profile.split(" ");t.profile={api:n[0],version:n[1]}}else t.profile={};if(d(e.version)&&delete e.version,vte(e),W2e(e),P2e(e),v2e(e),w2e(e),d(e.allExtensions)&&(e.extensionsUsed=e.allExtensions,delete e.allExtensions),d(e.lights)){let n=g(e.extensions,{});e.extensions=n;let i=g(n.KHR_materials_common,{});n.KHR_materials_common=i,i.lights=e.lights,delete e.lights,nu(e,"KHR_materials_common")}}function A2e(e){let t=e.animations;for(let n in t)if(Object.prototype.hasOwnProperty.call(t,n)){let i=t[n],o=i.parameters;if(d(o)){let r=i.samplers;for(let s in r)if(Object.prototype.hasOwnProperty.call(r,s)){let a=r[s];a.input=o[a.input],a.output=o[a.output]}delete i.parameters}}}function Pte(e,t){let n=[];for(let i in e)if(Object.prototype.hasOwnProperty.call(e,i)){let o=e[i];t[i]=n.length,n.push(o),d(o.name)||(o.name=i)}return n}function M2e(e){let t,n={accessors:{},animations:{},buffers:{},bufferViews:{},cameras:{},images:{},materials:{},meshes:{},nodes:{},programs:{},samplers:{},scenes:{},shaders:{},skins:{},textures:{},techniques:{}},i,o={},r=e.nodes;for(let s in r)Object.prototype.hasOwnProperty.call(r,s)&&(i=r[s].jointName,d(i)&&(o[i]=s));for(let s in e)if(Object.prototype.hasOwnProperty.call(e,s)&&d(n[s])){let a={},c=e[s];e[s]=Pte(c,a),n[s]=a}for(i in o)Object.prototype.hasOwnProperty.call(o,i)&&(o[i]=n.nodes[o[i]]);d(e.scene)&&(e.scene=n.scenes[e.scene]),Xe.bufferView(e,function(s){d(s.buffer)&&(s.buffer=n.buffers[s.buffer])}),Xe.accessor(e,function(s){d(s.bufferView)&&(s.bufferView=n.bufferViews[s.bufferView])}),Xe.shader(e,function(s){let a=s.extensions;if(d(a)){let c=a.KHR_binary_glTF;d(c)&&(s.bufferView=n.bufferViews[c.bufferView],delete a.KHR_binary_glTF),Object.keys(a).length===0&&delete s.extensions}}),Xe.program(e,function(s){d(s.vertexShader)&&(s.vertexShader=n.shaders[s.vertexShader]),d(s.fragmentShader)&&(s.fragmentShader=n.shaders[s.fragmentShader])}),Xe.technique(e,function(s){d(s.program)&&(s.program=n.programs[s.program]),Xe.techniqueParameter(s,function(a){d(a.node)&&(a.node=n.nodes[a.node]);let c=a.value;typeof c=="string"&&(a.value={index:n.textures[c]})})}),Xe.mesh(e,function(s){Xe.meshPrimitive(s,function(a){d(a.indices)&&(a.indices=n.accessors[a.indices]),Xe.meshPrimitiveAttribute(a,function(c,l){a.attributes[l]=n.accessors[c]}),d(a.material)&&(a.material=n.materials[a.material])})}),Xe.node(e,function(s){let a=s.children;if(d(a)){let c=a.length;for(t=0;t<c;++t)a[t]=n.nodes[a[t]]}if(d(s.meshes)){let c=s.meshes,l=c.length;if(l>0)for(s.mesh=n.meshes[c[0]],t=1;t<l;++t){let u={mesh:n.meshes[c[t]]},m=os(e.nodes,u);d(a)||(a=[],s.children=a),a.push(m)}delete s.meshes}if(d(s.camera)&&(s.camera=n.cameras[s.camera]),d(s.skin)&&(s.skin=n.skins[s.skin]),d(s.skeletons)){let c=s.skeletons;if(c.length>0&&d(s.skin)){let u=e.skins[s.skin];u.skeleton=n.nodes[c[0]]}delete s.skeletons}d(s.jointName)&&delete s.jointName}),Xe.skin(e,function(s){d(s.inverseBindMatrices)&&(s.inverseBindMatrices=n.accessors[s.inverseBindMatrices]);let a=s.jointNames;if(d(a)){let c=[],l=a.length;for(t=0;t<l;++t)c[t]=o[a[t]];s.joints=c,delete s.jointNames}}),Xe.scene(e,function(s){let a=s.nodes;if(d(a)){let c=a.length;for(t=0;t<c;++t)a[t]=n.nodes[a[t]]}}),Xe.animation(e,function(s){let a={};s.samplers=Pte(s.samplers,a),Xe.animationSampler(s,function(c){c.input=n.accessors[c.input],c.output=n.accessors[c.output]}),Xe.animationChannel(s,function(c){c.sampler=a[c.sampler];let l=c.target;d(l)&&(l.node=n.nodes[l.id],delete l.id)})}),Xe.material(e,function(s){d(s.technique)&&(s.technique=n.techniques[s.technique]),Xe.materialValue(s,function(c,l){typeof c=="string"&&(s.values[l]={index:n.textures[c]})});let a=s.extensions;if(d(a)){let c=a.KHR_materials_common;d(c)&&d(c.values)&&Xe.materialValue(c,function(l,u){typeof l=="string"&&(c.values[u]={index:n.textures[l]})})}}),Xe.image(e,function(s){let a=s.extensions;if(d(a)){let c=a.KHR_binary_glTF;d(c)&&(s.bufferView=n.bufferViews[c.bufferView],s.mimeType=c.mimeType,delete a.KHR_binary_glTF),Object.keys(a).length===0&&delete s.extensions}}),Xe.texture(e,function(s){d(s.sampler)&&(s.sampler=n.samplers[s.sampler]),d(s.source)&&(s.source=n.images[s.source])})}function N2e(e){Xe.animation(e,function(t){Xe.animationSampler(t,function(n){delete n.name})})}function U2e(e){for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t)){let n=e[t];Array.isArray(n)&&n.length===0&&delete e[t]}Xe.node(e,function(t){d(t.children)&&t.children.length===0&&delete t.children})}function k2e(e){let t=e.asset;delete t.profile,delete t.premultipliedAlpha}var D2e={CESIUM_RTC:!0,KHR_materials_common:!0,WEB3D_quantized_attributes:!0};function B2e(e){let t=e.extensionsUsed;if(e.extensionsRequired=g(e.extensionsRequired,[]),d(t)){let n=t.length;for(let i=0;i<n;++i){let o=t[i];d(D2e[o])&&e.extensionsRequired.push(o)}}}function Y2e(e){Xe.buffer(e,function(t){delete t.type})}function O2e(e){Xe.texture(e,function(t){delete t.format,delete t.internalFormat,delete t.target,delete t.type})}function K2e(e){Xe.mesh(e,function(t){Xe.meshPrimitive(t,function(n){Xe.meshPrimitiveAttribute(n,function(i,o){o==="TEXCOORD"?n.attributes.TEXCOORD_0=i:o==="COLOR"&&(n.attributes.COLOR_0=i)}),delete n.attributes.TEXCOORD,delete n.attributes.COLOR})}),Xe.technique(e,function(t){Xe.techniqueParameter(t,function(n){let i=n.semantic;d(i)&&(i==="TEXCOORD"?n.semantic="TEXCOORD_0":i==="COLOR"&&(n.semantic="COLOR_0"))})})}var H2e={POSITION:!0,NORMAL:!0,TANGENT:!0},z2e={COLOR:"COLOR",JOINT:"JOINTS",JOINTS:"JOINTS",TEXCOORD:"TEXCOORD",WEIGHT:"WEIGHTS",WEIGHTS:"WEIGHTS"};function J2e(e){let t={};Xe.mesh(e,function(n){Xe.meshPrimitive(n,function(i){Xe.meshPrimitiveAttribute(i,function(o,r){if(r.charAt(0)!=="_"){let s=r.search(/_[0-9]+/g),a=r,c="_0";s>=0&&(a=r.substring(0,s),c=r.substring(s));let l,u=z2e[a];d(u)?(l=u+c,t[r]=l):d(H2e[a])||(l=`_${r}`,t[r]=l)}});for(let o in t)if(Object.prototype.hasOwnProperty.call(t,o)){let r=t[o],s=i.attributes[o];d(s)&&(delete i.attributes[o],i.attributes[r]=s)}})}),Xe.technique(e,function(n){Xe.techniqueParameter(n,function(i){let o=t[i.semantic];d(o)&&(i.semantic=o)})})}function Q2e(e){Xe.camera(e,function(t){let n=t.perspective;if(d(n)){let i=n.aspectRatio;d(i)&&i===0&&delete n.aspectRatio;let o=n.yfov;d(o)&&o===0&&(n.yfov=1)}})}function gY(e,t){return d(t.byteStride)&&t.byteStride!==0?t.byteStride:bl(e,t)}function j2e(e){Xe.buffer(e,function(t){d(t.byteLength)||(t.byteLength=t.extras._pipeline.source.length)}),Xe.accessor(e,function(t){let n=t.bufferView;if(d(n)){let i=e.bufferViews[n],o=gY(e,t),r=t.byteOffset+t.count*o;i.byteLength=Math.max(g(i.byteLength,0),r)}})}function q2e(e){let t,n,i,o=e.bufferViews,r={};Xe.accessorContainingVertexAttributeData(e,function(a){let c=e.accessors[a];d(c.bufferView)&&(r[c.bufferView]=!0)});let s={};Xe.accessor(e,function(a){d(a.bufferView)&&(s[a.bufferView]=g(s[a.bufferView],[]),s[a.bufferView].push(a))});for(let a in s)if(Object.prototype.hasOwnProperty.call(s,a)){i=o[a];let c=s[a];c.sort(function(p,y){return p.byteOffset-y.byteOffset});let l=0,u=0,m=c.length;for(t=0;t<m;++t){let p=c[t],y=gY(e,p),f=p.byteOffset,x=p.count*y;delete p.byteStride;let _=t<m-1,C=_?gY(e,c[t+1]):void 0;if(y!==C){let V=Ke(i,!0);r[a]&&(V.byteStride=y),V.byteOffset+=l,V.byteLength=f+x-l;let L=os(o,V);for(n=u;n<=t;++n)p=c[n],p.bufferView=L,p.byteOffset=p.byteOffset-l;l=_?c[t+1].byteOffset:void 0,u=t+1}}}ZE(e,["accessor","bufferView","buffer"])}function $2e(e){Xe.accessorWithSemantic(e,"POSITION",function(t){let n=e.accessors[t];if(!d(n.min)||!d(n.max)){let i=Cx(e,n);n.min=i.min,n.max=i.max}})}function wte(e){return(!d(e.children)||e.children.length===0)&&(!d(e.meshes)||e.meshes.length===0)&&!d(e.camera)&&!d(e.skin)&&!d(e.skeletons)&&!d(e.jointName)&&(!d(e.translation)||h.fromArray(e.translation).equals(h.ZERO))&&(!d(e.scale)||h.fromArray(e.scale).equals(new h(1,1,1)))&&(!d(e.rotation)||se.fromArray(e.rotation).equals(new se(0,0,0,1)))&&(!d(e.matrix)||A.fromColumnMajorArray(e.matrix).equals(A.IDENTITY))&&!d(e.extensions)&&!d(e.extras)}function Fte(e,t){Xe.scene(e,function(n){let i=n.nodes;if(d(i)){let o=i.length;for(let r=o;r>=0;--r)if(i[r]===t){i.splice(r,1);return}}}),Xe.node(e,function(n,i){if(d(n.children)){let o=n.children.indexOf(t);o>-1&&(n.children.splice(o,1),wte(n)&&Fte(e,i))}}),delete e.nodes[t]}function ePe(e){return Xe.node(e,function(t,n){wte(t)&&Fte(e,n)}),e}function tPe(e){Xe.animation(e,function(t){Xe.animationSampler(t,function(n){let i=e.accessors[n.input];if(!d(i.min)||!d(i.max)){let o=Cx(e,i);i.min=o.min,i.max=o.max}})})}function nPe(e){Xe.accessor(e,function(t){if(d(t.min)||d(t.max)){let n=Cx(e,t);d(t.min)&&(t.min=n.min),d(t.max)&&(t.max=n.max)}})}function iPe(e){e.asset=g(e.asset,{}),e.asset.version="2.0",vte(e),A2e(e),ePe(e),M2e(e),N2e(e),k2e(e),B2e(e),j2e(e),q2e(e),$2e(e),tPe(e),nPe(e),Y2e(e),O2e(e),K2e(e),J2e(e),XE(e),Q2e(e),VE(e),RE(e),U2e(e)}var oPe=["u_tex","u_diffuse","u_emission","u_diffuse_tex"],rPe=["u_diffuse","u_diffuse_mat"];function xY(e){e.pbrMetallicRoughness=d(e.pbrMetallicRoughness)?e.pbrMetallicRoughness:{},e.pbrMetallicRoughness.roughnessFactor=1,e.pbrMetallicRoughness.metallicFactor=0}function IM(e){return d(e.index)}function WM(e){return Array.isArray(e)&&e.length===4}function Ate(e){let t=new Array(4);t[3]=e[3];for(let n=0;n<3;n++){let i=e[n];i<=.04045?t[n]=e[n]*.07739938080495357:t[n]=Math.pow((i+.055)*.9478672985781991,2.4)}return t}function sPe(e,t){t=g(t,g.EMPTY_OBJECT);let n=g(t.baseColorTextureNames,oPe),i=g(t.baseColorFactorNames,rPe);Xe.material(e,function(o){Xe.materialValue(o,function(r,s){n.indexOf(s)!==-1&&IM(r)?(xY(o),o.pbrMetallicRoughness.baseColorTexture=r):i.indexOf(s)!==-1&&WM(r)&&(xY(o),o.pbrMetallicRoughness.baseColorFactor=Ate(r))})}),Vx(e,"KHR_techniques_webgl"),Vx(e,"KHR_blend")}function aPe(e){Xe.material(e,function(t){let n=g(t.extensions,g.EMPTY_OBJECT).KHR_materials_common;if(d(n)){n.technique==="CONSTANT"&&(nu(e,"KHR_materials_unlit"),t.extensions=d(t.extensions)?t.extensions:{},t.extensions.KHR_materials_unlit={});let o=d(n.values)?n.values:{},r=o.ambient,s=o.diffuse,a=o.emission,c=o.transparency,l=n.doubleSided,u=n.transparent;xY(t),d(r)&&(WM(r)?t.emissiveFactor=r.slice(0,3):IM(r)&&(t.emissiveTexture=r)),d(s)&&(WM(s)?t.pbrMetallicRoughness.baseColorFactor=Ate(s):IM(s)&&(t.pbrMetallicRoughness.baseColorTexture=s)),d(l)&&(t.doubleSided=l),d(a)&&(WM(a)?t.emissiveFactor=a.slice(0,3):IM(a)&&(t.emissiveTexture=a)),d(c)&&(d(t.pbrMetallicRoughness.baseColorFactor)?t.pbrMetallicRoughness.baseColorFactor[3]*=c:t.pbrMetallicRoughness.baseColorFactor=[1,1,1,c]),d(u)&&(t.alphaMode=u?"BLEND":"OPAQUE")}}),Vx(e,"KHR_materials_common")}var IE=I2e;var Mtn=T(S(),1);var Ltn=T(S(),1);var si={POSITION:"POSITION",NORMAL:"NORMAL",TANGENT:"TANGENT",TEXCOORD:"TEXCOORD",COLOR:"COLOR",JOINTS:"JOINTS",WEIGHTS:"WEIGHTS",FEATURE_ID:"_FEATURE_ID"};function cPe(e){switch(e){case si.POSITION:return"positionMC";case si.NORMAL:return"normalMC";case si.TANGENT:return"tangentMC";case si.TEXCOORD:return"texCoord";case si.COLOR:return"color";case si.JOINTS:return"joints";case si.WEIGHTS:return"weights";case si.FEATURE_ID:return"featureId"}}si.hasSetIndex=function(e){switch(e){case si.POSITION:case si.NORMAL:case si.TANGENT:return!1;case si.TEXCOORD:case si.COLOR:case si.JOINTS:case si.WEIGHTS:case si.FEATURE_ID:return!0}};si.fromGltfSemantic=function(e){let t=e,i=/^(\w+)_\d+$/.exec(e);switch(i!==null&&(t=i[1]),t){case"POSITION":return si.POSITION;case"NORMAL":return si.NORMAL;case"TANGENT":return si.TANGENT;case"TEXCOORD":return si.TEXCOORD;case"COLOR":return si.COLOR;case"JOINTS":return si.JOINTS;case"WEIGHTS":return si.WEIGHTS;case"_FEATURE_ID":return si.FEATURE_ID}};si.fromPntsSemantic=function(e){switch(e){case"POSITION":case"POSITION_QUANTIZED":return si.POSITION;case"RGBA":case"RGB":case"RGB565":return si.COLOR;case"NORMAL":case"NORMAL_OCT16P":return si.NORMAL;case"BATCH_ID":return si.FEATURE_ID}};si.getGlslType=function(e){switch(e){case si.POSITION:case si.NORMAL:case si.TANGENT:return"vec3";case si.TEXCOORD:return"vec2";case si.COLOR:return"vec4";case si.JOINTS:return"ivec4";case si.WEIGHTS:return"vec4";case si.FEATURE_ID:return"int"}};si.getVariableName=function(e,t){let n=cPe(e);return d(t)&&(n+=`_${t}`),n};var Ct=Object.freeze(si);function Ya(){}Ya.getError=function(e,t,n){let i=`Failed to load ${e}: ${t}`;d(n)&&d(n.message)&&(i+=`
  5300. ${n.message}`);let o=new me(i);return d(n)&&(o.stack=`Original stack:
  5301. ${n.stack}
  5302. Handler stack:
  5303. ${o.stack}`),o};Ya.getNodeTransform=function(e){return d(e.matrix)?e.matrix:A.fromTranslationQuaternionRotationScale(d(e.translation)?e.translation:h.ZERO,d(e.rotation)?e.rotation:Ae.IDENTITY,d(e.scale)?e.scale:h.ONE)};Ya.getAttributeBySemantic=function(e,t,n){let i=e.attributes,o=i.length;for(let r=0;r<o;++r){let s=i[r],a=d(n)?s.setIndex===n:!0;if(s.semantic===t&&a)return s}};Ya.getAttributeByName=function(e,t){let n=e.attributes,i=n.length;for(let o=0;o<i;++o){let r=n[o];if(r.name===t)return r}};Ya.getFeatureIdsByLabel=function(e,t){for(let n=0;n<e.length;n++){let i=e[n];if(i.positionalLabel===t||i.label===t)return i}};Ya.hasQuantizedAttributes=function(e){if(!d(e))return!1;for(let t=0;t<e.length;t++){let n=e[t];if(d(n.quantization))return!0}return!1};Ya.getAttributeInfo=function(e){let t=e.semantic,n=e.setIndex,i,o=!1;d(t)?(i=Ct.getVariableName(t,n),o=!0):(i=e.name,i=i.replace(/^_/,""),i=i.toLowerCase());let r=/^color_\d+$/.test(i),s=e.type,a=an.getGlslType(s);r&&(a="vec4");let c=d(e.quantization),l;return c&&(l=r?"vec4":an.getGlslType(e.quantization.type)),{attribute:e,isQuantized:c,variableName:i,hasSemantic:o,glslType:a,quantizedGlslType:l}};var lPe=new h,dPe=new h;Ya.getPositionMinMax=function(e,t,n){let i=Ya.getAttributeBySemantic(e,"POSITION"),o=i.max,r=i.min;return d(n)&&d(t)&&(r=h.add(r,t,dPe),o=h.add(o,n,lPe)),{min:r,max:o}};Ya.getAxisCorrectionMatrix=function(e,t,n){return n=A.clone(A.IDENTITY,n),e===Zo.Y?n=A.clone(Zo.Y_UP_TO_Z_UP,n):e===Zo.X&&(n=A.clone(Zo.X_UP_TO_Z_UP,n)),t===Zo.Z&&(n=A.multiplyTransformation(n,Zo.Z_UP_TO_X_UP,n)),n};var uPe=new $;Ya.getCullFace=function(e,t){if(!Fe.isTriangles(t))return bi.BACK;let n=A.getMatrix3(e,uPe);return $.determinant(n)<0?bi.FRONT:bi.BACK};Ya.sanitizeGlslIdentifier=function(e){let t=e.replaceAll(/[^A-Za-z0-9]+/g,"_");return t=t.replace(/^gl_/,""),/^\d/.test(t)&&(t=`_${t}`),t};Ya.supportedExtensions={AGI_articulations:!0,CESIUM_primitive_outline:!0,CESIUM_RTC:!0,EXT_feature_metadata:!0,EXT_instance_features:!0,EXT_mesh_features:!0,EXT_mesh_gpu_instancing:!0,EXT_meshopt_compression:!0,EXT_structural_metadata:!0,EXT_texture_webp:!0,KHR_blend:!0,KHR_draco_mesh_compression:!0,KHR_techniques_webgl:!0,KHR_materials_common:!0,KHR_materials_pbrSpecularGlossiness:!0,KHR_materials_unlit:!0,KHR_mesh_quantization:!0,KHR_texture_basisu:!0,KHR_texture_transform:!0,WEB3D_quantized_attributes:!0};Ya.checkSupportedExtensions=function(e){let t=e.length;for(let n=0;n<t;n++){let i=e[n];if(!Ya.supportedExtensions[i])throw new me(`Unsupported glTF Extension: ${i}`)}};var nn=Ya;function Eb(e){e=g(e,g.EMPTY_OBJECT);let t=e.resourceCache,n=e.gltfResource,i=e.baseResource,o=e.typedArray,r=e.gltfJson,s=e.cacheKey;this._resourceCache=t,this._gltfResource=n,this._baseResource=i,this._typedArray=o,this._gltfJson=r,this._cacheKey=s,this._gltf=void 0,this._bufferLoaders=[],this._state=Rt.UNLOADED,this._promise=void 0}d(Object.create)&&(Eb.prototype=Object.create(oo.prototype),Eb.prototype.constructor=Eb);Object.defineProperties(Eb.prototype,{cacheKey:{get:function(){return this._cacheKey}},gltf:{get:function(){return this._gltf}}});Eb.prototype.load=async function(){return d(this._promise)?this._promise:(this._state=Rt.LOADING,d(this._gltfJson)?(this._promise=Mte(this,this._gltfJson),this._promise):d(this._typedArray)?(this._promise=Nte(this,this._typedArray),this._promise):(this._promise=mPe(this),this._promise))};async function mPe(e){let t;try{let n=await e._fetchGltf();if(e.isDestroyed())return;t=new Uint8Array(n)}catch(n){if(e.isDestroyed())return;_Y(e,n)}return Nte(e,t)}function _Y(e,t){e.unload(),e._state=Rt.FAILED;let n=`Failed to load glTF: ${e._gltfResource.url}`;throw e.getError(n,t)}async function hPe(e,t){if(d(t.asset)&&t.asset.version==="2.0"&&!tr(t,"KHR_techniques_webgl")&&!tr(t,"KHR_materials_common"))return Promise.resolve();let n=[];Xe.buffer(t,function(i){if(!d(i.extras._pipeline.source)&&d(i.uri)){let o=e._baseResource.getDerivedResource({url:i.uri}),s=e._resourceCache.getExternalBufferLoader({resource:o});e._bufferLoaders.push(s),n.push(s.load().then(function(){s.isDestroyed()||(i.extras._pipeline.source=s.typedArray)}))}}),await Promise.all(n),IE(t)}function fPe(e){let t=[];return Xe.buffer(e,function(n){let i=n.uri;!d(n.extras._pipeline.source)&&d(i)&&Jf(i)&&(delete n.uri,t.push(Ee.fetchArrayBuffer(i).then(function(o){n.extras._pipeline.source=new Uint8Array(o)})))}),Promise.all(t)}function pPe(e,t){let n=[];return Xe.buffer(t,function(i,o){let r=i.extras._pipeline.source;if(d(r)&&!d(i.uri)){let a=e._resourceCache.getEmbeddedBufferLoader({parentResource:e._gltfResource,bufferId:o,typedArray:r});e._bufferLoaders.push(a),n.push(a.load())}}),Promise.all(n)}async function Mte(e,t){try{Gb(t),await fPe(t),await hPe(e,t),_E(t),await pPe(e,t),CE(t);let n=t.asset.version;if(n!=="1.0"&&n!=="2.0")throw new me(`Unsupported glTF version: ${n}`);let i=t.extensionsRequired;return d(i)&&nn.checkSupportedExtensions(i),e._gltf=t,e._state=Rt.READY,e}catch(n){if(e.isDestroyed())return;_Y(e,n)}}async function Nte(e,t){let n;try{pm(t)==="glTF"?n=SE(t):n=Go(t)}catch(i){if(e.isDestroyed())return;_Y(e,i)}return Mte(e,n)}Eb.prototype.unload=function(){let e=this._bufferLoaders,t=e.length;for(let n=0;n<t;++n)e[n]=!e[n].isDestroyed()&&this._resourceCache.unload(e[n]);this._bufferLoaders.length=0,this._gltf=void 0};Eb.prototype._fetchGltf=function(){return this._gltfResource.fetchArrayBuffer()};var FS=Eb;var Unn=T(S(),1);var Cnn=T(S(),1);var mnn=T(S(),1);var rnn=T(S(),1),bPe={OPAQUE:"OPAQUE",MASK:"MASK",BLEND:"BLEND"},Oh=Object.freeze(bPe);var Ko={};function yPe(){this.octEncoded=!1,this.octEncodedZXY=!1,this.normalizationRange=void 0,this.quantizedVolumeOffset=void 0,this.quantizedVolumeDimensions=void 0,this.quantizedVolumeStepSize=void 0,this.componentDatatype=void 0,this.type=void 0}function gPe(){this.name=void 0,this.semantic=void 0,this.setIndex=void 0,this.componentDatatype=void 0,this.type=void 0,this.normalized=!1,this.count=void 0,this.min=void 0,this.max=void 0,this.constant=void 0,this.quantization=void 0,this.typedArray=void 0,this.buffer=void 0,this.byteOffset=0,this.byteStride=void 0}function xPe(){this.indexDatatype=void 0,this.count=void 0,this.buffer=void 0,this.typedArray=void 0}function _Pe(){this.featureCount=void 0,this.nullFeatureId=void 0,this.propertyTableId=void 0,this.setIndex=void 0,this.label=void 0,this.positionalLabel=void 0}function TPe(){this.featureCount=void 0,this.nullFeatureId=void 0,this.propertyTableId=void 0,this.offset=0,this.repeat=void 0,this.label=void 0,this.positionalLabel=void 0}function SPe(){this.featureCount=void 0,this.nullFeatureId=void 0,this.propertyTableId=void 0,this.textureReader=void 0,this.label=void 0,this.positionalLabel=void 0}function CPe(){this.attributes=[]}function VPe(){this.attributes=[],this.morphTargets=[],this.indices=void 0,this.material=void 0,this.primitiveType=void 0,this.featureIds=[],this.propertyTextureIds=[],this.propertyAttributeIds=[],this.outlineCoordinates=void 0}function LPe(){this.attributes=[],this.featureIds=[],this.transformInWorldSpace=!1}function RPe(){this.index=void 0,this.joints=[],this.inverseBindMatrices=[]}function ZPe(){this.name=void 0,this.index=void 0,this.children=[],this.primitives=[],this.instances=void 0,this.skin=void 0,this.matrix=void 0,this.translation=void 0,this.rotation=void 0,this.scale=void 0,this.morphWeights=[],this.articulationName=void 0}function GPe(){this.nodes=[]}var EPe={TRANSLATION:"translation",ROTATION:"rotation",SCALE:"scale",WEIGHTS:"weights"};function XPe(){this.input=[],this.interpolation=void 0,this.output=[]}function IPe(){this.node=void 0,this.path=void 0}function WPe(){this.sampler=void 0,this.target=void 0}function PPe(){this.name=void 0,this.samplers=[],this.channels=[]}function vPe(){this.name=void 0,this.type=void 0,this.minimumValue=void 0,this.maximumValue=void 0,this.initialValue=void 0}function wPe(){this.name=void 0,this.stages=[]}function Ute(){this.credits=[]}function FPe(){this.asset=new Ute,this.scene=void 0,this.nodes=[],this.skins=[],this.animations=[],this.articulations=[],this.structuralMetadata=void 0,this.upAxis=void 0,this.forwardAxis=void 0,this.transform=A.clone(A.IDENTITY)}function APe(){this.texture=void 0,this.index=void 0,this.texCoord=0,this.transform=$.clone($.IDENTITY),this.channels=void 0}function Xb(){this.baseColorTexture=void 0,this.metallicRoughnessTexture=void 0,this.baseColorFactor=se.clone(Xb.DEFAULT_BASE_COLOR_FACTOR),this.metallicFactor=Xb.DEFAULT_METALLIC_FACTOR,this.roughnessFactor=Xb.DEFAULT_ROUGHNESS_FACTOR}Xb.DEFAULT_BASE_COLOR_FACTOR=se.ONE;Xb.DEFAULT_METALLIC_FACTOR=1;Xb.DEFAULT_ROUGHNESS_FACTOR=1;function Lx(){this.diffuseTexture=void 0,this.specularGlossinessTexture=void 0,this.diffuseFactor=se.clone(Lx.DEFAULT_DIFFUSE_FACTOR),this.specularFactor=h.clone(Lx.DEFAULT_SPECULAR_FACTOR),this.glossinessFactor=Lx.DEFAULT_GLOSSINESS_FACTOR}Lx.DEFAULT_DIFFUSE_FACTOR=se.ONE;Lx.DEFAULT_SPECULAR_FACTOR=h.ONE;Lx.DEFAULT_GLOSSINESS_FACTOR=1;function TY(){this.metallicRoughness=new Xb,this.specularGlossiness=void 0,this.emissiveTexture=void 0,this.normalTexture=void 0,this.occlusionTexture=void 0,this.emissiveFactor=h.clone(TY.DEFAULT_EMISSIVE_FACTOR),this.alphaMode=Oh.OPAQUE,this.alphaCutoff=.5,this.doubleSided=!1,this.unlit=!1}TY.DEFAULT_EMISSIVE_FACTOR=h.ZERO;Ko.Quantization=yPe;Ko.Attribute=gPe;Ko.Indices=xPe;Ko.FeatureIdAttribute=_Pe;Ko.FeatureIdTexture=SPe;Ko.FeatureIdImplicitRange=TPe;Ko.MorphTarget=CPe;Ko.Primitive=VPe;Ko.Instances=LPe;Ko.Skin=RPe;Ko.Node=ZPe;Ko.Scene=GPe;Ko.AnimatedPropertyType=Object.freeze(EPe);Ko.AnimationSampler=XPe;Ko.AnimationTarget=IPe;Ko.AnimationChannel=WPe;Ko.Animation=PPe;Ko.ArticulationStage=vPe;Ko.Articulation=wPe;Ko.Asset=Ute;Ko.Components=FPe;Ko.TextureReader=APe;Ko.MetallicRoughness=Xb;Ko.SpecularGlossiness=Lx;Ko.Material=TY;var wt=Ko;var PM={};PM.getImageIdFromTexture=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.gltf,n=e.textureId,i=e.supportedImageFormats,o=t.textures[n],r=o.extensions;if(d(r)){if(i.webp&&d(r.EXT_texture_webp))return r.EXT_texture_webp.source;if(i.basis&&d(r.KHR_texture_basisu))return r.KHR_texture_basisu.source}return o.source};PM.createSampler=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.gltf,n=e.textureInfo,i=g(e.compressedTextureNoMipmap,!1),o=Gn.REPEAT,r=Gn.REPEAT,s=cn.LINEAR,a=Ti.LINEAR,c=n.index,u=t.textures[c].sampler;if(d(u)){let m=t.samplers[u];o=g(m.wrapS,o),r=g(m.wrapT,r),s=g(m.minFilter,s),a=g(m.magFilter,a)}return i&&s!==cn.LINEAR&&s!==cn.NEAREST&&(s===cn.NEAREST_MIPMAP_NEAREST||s===cn.NEAREST_MIPMAP_LINEAR?s=cn.NEAREST:s=cn.LINEAR),new un({wrapS:o,wrapT:r,minificationFilter:s,magnificationFilter:a})};var MPe=new D(1,1);PM.createModelTextureReader=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.textureInfo,n=e.channels,i=e.texture,o=g(t.texCoord,0),r,s=g(t.extensions,g.EMPTY_OBJECT).KHR_texture_transform;if(d(s)){o=g(s.texCoord,o);let c=d(s.offset)?D.unpack(s.offset):D.ZERO,l=g(s.rotation,0),u=d(s.scale)?D.unpack(s.scale):MPe;l=-l,r=new $(Math.cos(l)*u.x,-Math.sin(l)*u.y,c.x,Math.sin(l)*u.x,Math.cos(l)*u.y,c.y,0,0,1)}let a=new wt.TextureReader;return a.index=t.index,a.texture=i,a.texCoord=o,a.transform=r,a.channels=n,a};var yl=PM;var Rnn=T(S(),1);function NPe(e){let t=document.createElement("canvas");return t.width=W.nextPowerOfTwo(e.width),t.height=W.nextPowerOfTwo(e.height),t.getContext("2d").drawImage(e,0,0,e.width,e.height,0,0,t.width,t.height),t}var Ib=NPe;function Wb(e){e=g(e,g.EMPTY_OBJECT);let t=e.resourceCache,n=e.gltf,i=e.textureInfo,o=e.gltfResource,r=e.baseResource,s=e.supportedImageFormats,a=e.cacheKey,c=g(e.asynchronous,!0),l=i.index,u=yl.getImageIdFromTexture({gltf:n,textureId:l,supportedImageFormats:s});this._resourceCache=t,this._gltf=n,this._textureInfo=i,this._imageId=u,this._gltfResource=o,this._baseResource=r,this._cacheKey=a,this._asynchronous=c,this._imageLoader=void 0,this._image=void 0,this._mipLevels=void 0,this._texture=void 0,this._state=Rt.UNLOADED,this._promise=void 0}d(Object.create)&&(Wb.prototype=Object.create(oo.prototype),Wb.prototype.constructor=Wb);Object.defineProperties(Wb.prototype,{cacheKey:{get:function(){return this._cacheKey}},texture:{get:function(){return this._texture}}});var UPe=new SY;async function kPe(e){let t=e._resourceCache;try{let n=t.getImageLoader({gltf:e._gltf,imageId:e._imageId,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._imageLoader=n,await n.load(),e.isDestroyed()?void 0:(e._image=n.image,e._mipLevels=n.mipLevels,e._state=Rt.LOADED,e)}catch(n){if(e.isDestroyed())return;e.unload(),e._state=Rt.FAILED;let i="Failed to load texture";throw e.getError(i,n)}}Wb.prototype.load=async function(){return d(this._promise)?this._promise:(this._state=Rt.LOADING,this._promise=kPe(this),this._promise)};function SY(){this.gltf=void 0,this.textureInfo=void 0,this.image=void 0,this.context=void 0,this.texture=void 0}SY.prototype.set=function(e,t,n,i,o){this.gltf=e,this.textureInfo=t,this.image=n,this.mipLevels=i,this.context=o};SY.prototype.execute=function(){this.texture=kte(this.gltf,this.textureInfo,this.image,this.mipLevels,this.context)};function kte(e,t,n,i,o){let r=n.internalFormat,s=!1;st.isCompressedFormat(r)&&!d(i)&&(s=!0);let a=yl.createSampler({gltf:e,textureInfo:t,compressedTextureNoMipmap:s}),c=a.minificationFilter,l=a.wrapS,u=a.wrapT,m=c===cn.NEAREST_MIPMAP_NEAREST||c===cn.NEAREST_MIPMAP_LINEAR||c===cn.LINEAR_MIPMAP_NEAREST||c===cn.LINEAR_MIPMAP_LINEAR,p=!d(r)&&m,y=p||l===Gn.REPEAT||l===Gn.MIRRORED_REPEAT||u===Gn.REPEAT||u===Gn.MIRRORED_REPEAT,f=!W.isPowerOfTwo(n.width)||!W.isPowerOfTwo(n.height),x=y&&f,_;return d(r)?(!o.webgl2&&st.isCompressedFormat(r)&&f&&y&&console.warn("Compressed texture uses REPEAT or MIRRORED_REPEAT texture wrap mode and dimensions are not powers of two. The texture may be rendered incorrectly."),_=Wt.create({context:o,source:{arrayBufferView:n.bufferView,mipLevels:i},width:n.width,height:n.height,pixelFormat:n.internalFormat,sampler:a})):(x&&(n=Ib(n)),_=Wt.create({context:o,source:n,sampler:a,flipY:!1,skipColorSpaceConversion:!0})),p&&_.generateMipmap(),_}Wb.prototype.process=function(e){if(this._state===Rt.READY)return!0;if(this._state!==Rt.LOADED&&this._state!==Rt.PROCESSING||d(this._texture)||!d(this._image))return!1;this._state=Rt.PROCESSING;let t;if(this._asynchronous){let n=UPe;if(n.set(this._gltf,this._textureInfo,this._image,this._mipLevels,e.context),!e.jobScheduler.execute(n,pa.TEXTURE))return;t=n.texture}else t=kte(this._gltf,this._textureInfo,this._image,this._mipLevels,e.context);return this.unload(),this._texture=t,this._state=Rt.READY,this._resourceCache.statistics.addTextureLoader(this),!0};Wb.prototype.unload=function(){d(this._texture)&&this._texture.destroy(),d(this._imageLoader)&&!this._imageLoader.isDestroyed()&&this._resourceCache.unload(this._imageLoader),this._imageLoader=void 0,this._image=void 0,this._mipLevels=void 0,this._texture=void 0,this._gltf=void 0};var AS=Wb;var jnn=T(S(),1);function Pb(e){e=g(e,g.EMPTY_OBJECT);let t=e.resourceCache,n=e.gltf,i=e.gltfResource,o=e.baseResource,r=e.bufferViewId,s=e.draco,a=e.attributeSemantic,c=e.accessorId,l=e.cacheKey,u=g(e.asynchronous,!0),m=g(e.loadBuffer,!1),p=g(e.loadTypedArray,!1);this._resourceCache=t,this._gltfResource=i,this._baseResource=o,this._gltf=n,this._bufferViewId=r,this._draco=s,this._attributeSemantic=a,this._accessorId=c,this._cacheKey=l,this._asynchronous=u,this._loadBuffer=m,this._loadTypedArray=p,this._bufferViewLoader=void 0,this._dracoLoader=void 0,this._quantization=void 0,this._typedArray=void 0,this._buffer=void 0,this._state=Rt.UNLOADED,this._promise=void 0}d(Object.create)&&(Pb.prototype=Object.create(oo.prototype),Pb.prototype.constructor=Pb);Object.defineProperties(Pb.prototype,{cacheKey:{get:function(){return this._cacheKey}},buffer:{get:function(){return this._buffer}},typedArray:{get:function(){return this._typedArray}},quantization:{get:function(){return this._quantization}}});function DPe(e,t){return d(e)&&d(e.attributes)&&d(e.attributes[t])}Pb.prototype.load=async function(){return d(this._promise)?this._promise:DPe(this._draco,this._attributeSemantic)?(this._promise=YPe(this),this._promise):(this._promise=KPe(this),this._promise)};function BPe(e,t,n,i){let r=(1<<e.quantizationBits)-1,s=1/r,a=new wt.Quantization;if(a.componentDatatype=t,a.octEncoded=e.octEncoded,a.octEncodedZXY=!0,a.type=i,a.octEncoded)a.type=an.VEC2,a.normalizationRange=r;else{let c=an.getMathType(i);if(c===Number){let l=e.range;a.quantizedVolumeOffset=e.minValues[0],a.quantizedVolumeDimensions=l,a.normalizationRange=r,a.quantizedVolumeStepSize=l*s}else{a.quantizedVolumeOffset=c.unpack(e.minValues),a.normalizationRange=c.unpack(new Array(n).fill(r));let l=new Array(n).fill(e.range);a.quantizedVolumeDimensions=c.unpack(l);let u=l.map(function(m){return m*s});a.quantizedVolumeStepSize=c.unpack(u)}}return a}async function YPe(e){e._state=Rt.LOADING;let t=e._resourceCache;try{let n=t.getDracoLoader({gltf:e._gltf,draco:e._draco,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._dracoLoader=n,await n.load(),e.isDestroyed()?void 0:(e._state=Rt.LOADED,e)}catch{if(e.isDestroyed())return;CY(e)}}function OPe(e){e._state=Rt.PROCESSING;let n=e._dracoLoader.decodedData.vertexAttributes,i=e._attributeSemantic,o=n[i],r=e._accessorId,a=e._gltf.accessors[r].type,c=o.array,l=o.data.quantization;d(l)&&(e._quantization=BPe(l,o.data.componentDatatype,o.data.componentsPerAttribute,a)),e._typedArray=new Uint8Array(c.buffer,c.byteOffset,c.byteLength)}async function KPe(e){e._state=Rt.LOADING;let t=e._resourceCache;try{let n=t.getBufferViewLoader({gltf:e._gltf,bufferViewId:e._bufferViewId,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._bufferViewLoader=n,await n.load(),e.isDestroyed()?void 0:(e._typedArray=n.typedArray,e._state=Rt.PROCESSING,e)}catch(n){if(e.isDestroyed())return;CY(e,n)}}function CY(e,t){e.unload(),e._state=Rt.FAILED;let n="Failed to load vertex buffer";throw e.getError(n,t)}function VY(){this.typedArray=void 0,this.context=void 0,this.buffer=void 0}VY.prototype.set=function(e,t){this.typedArray=e,this.context=t};VY.prototype.execute=function(){this.buffer=Dte(this.typedArray,this.context)};function Dte(e,t){let n=mt.createVertexBuffer({typedArray:e,context:t,usage:Ne.STATIC_DRAW});return n.vertexArrayDestroyable=!1,n}var HPe=new VY;Pb.prototype.process=function(e){if(this._state===Rt.READY)return!0;if(this._state!==Rt.LOADED&&this._state!==Rt.PROCESSING)return!1;if(d(this._dracoLoader)){try{if(!this._dracoLoader.process(e))return!1}catch(i){CY(this,i)}OPe(this)}let t,n=this._typedArray;if(this._loadBuffer&&this._asynchronous){let i=HPe;if(i.set(n,e.context),!e.jobScheduler.execute(i,pa.BUFFER))return!1;t=i.buffer}else this._loadBuffer&&(t=Dte(n,e.context));return this.unload(),this._buffer=t,this._typedArray=this._loadTypedArray?n:void 0,this._state=Rt.READY,this._resourceCache.statistics.addGeometryLoader(this),!0};Pb.prototype.unload=function(){d(this._buffer)&&this._buffer.destroy();let e=this._resourceCache;d(this._bufferViewLoader)&&!this._bufferViewLoader.isDestroyed()&&e.unload(this._bufferViewLoader),d(this._dracoLoader)&&e.unload(this._dracoLoader),this._bufferViewLoader=void 0,this._dracoLoader=void 0,this._typedArray=void 0,this._buffer=void 0,this._gltf=void 0};var MS=Pb;var Zin=T(S(),1);var _in=T(S(),1);var iin=T(S(),1);function WE(e){e=g(e,g.EMPTY_OBJECT);let t=e.id,n=g(e.properties,{}),i={};for(let o in n)if(n.hasOwnProperty(o)){let r=n[o];d(r.semantic)&&(i[r.semantic]=r)}this._id=t,this._name=e.name,this._description=e.description,this._properties=n,this._propertiesBySemantic=i,this._extras=Ke(e.extras,!0),this._extensions=Ke(e.extensions,!0)}WE.fromJson=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.id,n=e.class,i={};for(let o in n.properties)if(n.properties.hasOwnProperty(o)){let r=Vb.fromJson({id:o,property:n.properties[o],enums:e.enums});i[o]=r}return new WE({id:t,name:n.name,description:n.description,properties:i,extras:n.extras,extensions:n.extensions})};Object.defineProperties(WE.prototype,{properties:{get:function(){return this._properties}},propertiesBySemantic:{get:function(){return this._propertiesBySemantic}},id:{get:function(){return this._id}},name:{get:function(){return this._name}},description:{get:function(){return this._description}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});WE.BATCH_TABLE_CLASS_NAME="_batchTable";var xm=WE;var hin=T(S(),1);var ain=T(S(),1);function vM(e){e=g(e,g.EMPTY_OBJECT);let t=e.value,n=e.name;this._value=t,this._name=n,this._description=e.description,this._extras=Ke(e.extras,!0),this._extensions=Ke(e.extensions,!0)}vM.fromJson=function(e){return new vM({value:e.value,name:e.name,description:e.description,extras:e.extras,extensions:e.extensions})};Object.defineProperties(vM.prototype,{value:{get:function(){return this._value}},name:{get:function(){return this._name}},description:{get:function(){return this._description}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});var PE=vM;function wM(e){e=g(e,g.EMPTY_OBJECT);let t=e.id,n=e.values,i={},o={},r=n.length;for(let a=0;a<r;++a){let c=n[a];i[c.value]=c.name,o[c.name]=c.value}let s=g(e.valueType,tn.UINT16);this._values=n,this._namesByValue=i,this._valuesByName=o,this._valueType=s,this._id=t,this._name=e.name,this._description=e.description,this._extras=Ke(e.extras,!0),this._extensions=Ke(e.extensions,!0)}wM.fromJson=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.id,n=e.enum,i=n.values.map(function(o){return PE.fromJson(o)});return new wM({id:t,values:i,valueType:tn[n.valueType],name:n.name,description:n.description,extras:n.extras,extensions:n.extensions})};Object.defineProperties(wM.prototype,{values:{get:function(){return this._values}},namesByValue:{get:function(){return this._namesByValue}},valuesByName:{get:function(){return this._valuesByName}},valueType:{get:function(){return this._valueType}},id:{get:function(){return this._id}},name:{get:function(){return this._name}},description:{get:function(){return this._description}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});var vE=wM;function FM(e){e=g(e,g.EMPTY_OBJECT);let t=g(e.classes,{}),n=g(e.enums,{});this._classes=t,this._enums=n,this._id=e.id,this._name=e.name,this._description=e.description,this._version=e.version,this._extras=Ke(e.extras,!0),this._extensions=Ke(e.extensions,!0)}FM.fromJson=function(e){let t={};if(d(e.enums))for(let i in e.enums)e.enums.hasOwnProperty(i)&&(t[i]=vE.fromJson({id:i,enum:e.enums[i]}));let n={};if(d(e.classes))for(let i in e.classes)e.classes.hasOwnProperty(i)&&(n[i]=xm.fromJson({id:i,class:e.classes[i],enums:t}));return new FM({id:e.id,name:e.name,description:e.description,version:e.version,classes:n,enums:t,extras:e.extras,extensions:e.extensions})};Object.defineProperties(FM.prototype,{classes:{get:function(){return this._classes}},enums:{get:function(){return this._enums}},id:{get:function(){return this._id}},name:{get:function(){return this._name}},description:{get:function(){return this._description}},version:{get:function(){return this._version}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});var _m=FM;function Rx(e){e=g(e,g.EMPTY_OBJECT);let t=e.schema,n=e.resource,i=e.cacheKey;this._schema=d(t)?_m.fromJson(t):void 0,this._resource=n,this._cacheKey=i,this._state=Rt.UNLOADED,this._promise=void 0}d(Object.create)&&(Rx.prototype=Object.create(oo.prototype),Rx.prototype.constructor=Rx);Object.defineProperties(Rx.prototype,{cacheKey:{get:function(){return this._cacheKey}},schema:{get:function(){return this._schema}}});Rx.prototype.load=async function(){return d(this._promise)?this._promise:d(this._schema)?(this._promise=Promise.resolve(this),this._promise):(this._promise=zPe(this),this._promise)};async function zPe(e){let t=e._resource;e._state=Rt.LOADING;try{let n=await t.fetchJson();return e.isDestroyed()?void 0:(e._schema=_m.fromJson(n),e._state=Rt.READY,e)}catch(n){if(e.isDestroyed())return;e._state=Rt.FAILED;let i=`Failed to load schema: ${t.url}`;throw e.getError(i,n)}}Rx.prototype.unload=function(){this._schema=void 0};var NS=Rx;var vin=T(S(),1);var Tm={};function wE(e){return Vh(e.url)}function AM(e){let t=e.byteOffset,n=e.byteLength;if(ri(e,"EXT_meshopt_compression")){let i=e.extensions.EXT_meshopt_compression;t=g(i.byteOffset,0),n=i.byteLength}return`${t}-${t+n}`}function JPe(e,t){let n=t.byteOffset+e.byteOffset,i=e.componentType,o=e.type,r=e.count;return`${n}-${i}-${o}-${r}`}function Bte(e){return wE(e)}function Yte(e,t){return`${wE(e)}-buffer-id-${t}`}function FE(e,t,n,i){if(d(e.uri)){let o=i.getDerivedResource({url:e.uri});return Bte(o)}return Yte(n,t)}function LY(e,t,n,i){let o=t.bufferView,r=e.bufferViews[o],s=r.buffer,a=e.buffers[s],c=FE(a,s,n,i),l=AM(r);return`${c}-range-${l}`}function Ote(e,t,n,i){let o=e.images[t],r=o.bufferView,s=o.uri;if(d(s)){let p=i.getDerivedResource({url:s});return wE(p)}let a=e.bufferViews[r],c=a.buffer,l=e.buffers[c],u=FE(l,c,n,i),m=AM(a);return`${u}-range-${m}`}function QPe(e,t){let n=yl.createSampler({gltf:e,textureInfo:t});return`${n.wrapS}-${n.wrapT}-${n.minificationFilter}-${n.magnificationFilter}`}Tm.getSchemaCacheKey=function(e){let t=e.schema,n=e.resource;return d(t)?`embedded-schema:${JSON.stringify(t)}`:`external-schema:${wE(n)}`};Tm.getExternalBufferCacheKey=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.resource;return`external-buffer:${Bte(t)}`};Tm.getEmbeddedBufferCacheKey=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.parentResource,n=e.bufferId;return`embedded-buffer:${Yte(t,n)}`};Tm.getGltfCacheKey=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.gltfResource;return`gltf:${wE(t)}`};Tm.getBufferViewCacheKey=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.gltf,n=e.bufferViewId,i=e.gltfResource,o=e.baseResource,r=t.bufferViews[n],s=r.buffer,a=t.buffers[s];ri(r,"EXT_meshopt_compression")&&(s=r.extensions.EXT_meshopt_compression.buffer);let c=FE(a,s,i,o),l=AM(r);return`buffer-view:${c}-range-${l}`};Tm.getDracoCacheKey=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.gltf,n=e.draco,i=e.gltfResource,o=e.baseResource;return`draco:${LY(t,n,i,o)}`};Tm.getVertexBufferCacheKey=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.gltf,n=e.gltfResource,i=e.baseResource,o=e.frameState,r=e.bufferViewId,s=e.draco,a=e.attributeSemantic,c=g(e.dequantize,!1),l=g(e.loadBuffer,!1),u=g(e.loadTypedArray,!1),m="";if(c&&(m+="-dequantize"),l&&(m+="-buffer",m+=`-context-${o.context.id}`),u&&(m+="-typed-array"),d(s))return`vertex-buffer:${LY(t,s,n,i)}-draco-${a}${m}`;let p=t.bufferViews[r],y=p.buffer,f=t.buffers[y],x=FE(f,y,n,i),_=AM(p);return`vertex-buffer:${x}-range-${_}${m}`};Tm.getIndexBufferCacheKey=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.gltf,n=e.accessorId,i=e.gltfResource,o=e.baseResource,r=e.frameState,s=e.draco,a=g(e.loadBuffer,!1),c=g(e.loadTypedArray,!1),l="";if(a&&(l+="-buffer",l+=`-context-${r.context.id}`),c&&(l+="-typed-array"),d(s))return`index-buffer:${LY(t,s,i,o)}-draco${l}`;let u=t.accessors[n],m=u.bufferView,p=t.bufferViews[m],y=p.buffer,f=t.buffers[y],x=FE(f,y,i,o),_=JPe(u,p);return`index-buffer:${x}-accessor-${_}${l}`};Tm.getImageCacheKey=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.gltf,n=e.imageId,i=e.gltfResource,o=e.baseResource;return`image:${Ote(t,n,i,o)}`};Tm.getTextureCacheKey=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.gltf,n=e.textureInfo,i=e.gltfResource,o=e.baseResource,r=e.supportedImageFormats,s=e.frameState,a=n.index,c=yl.getImageIdFromTexture({gltf:t,textureId:a,supportedImageFormats:r}),l=Ote(t,c,i,o),u=QPe(t,n);return`texture:${l}-sampler-${u}-context-${s.context.id}`};var gl=Tm;var Ain=T(S(),1);function AE(){this.geometryByteLength=0,this.texturesByteLength=0,this._geometrySizes={},this._textureSizes={}}AE.prototype.clear=function(){this.geometryByteLength=0,this.texturesByteLength=0,this._geometrySizes={},this._textureSizes={}};AE.prototype.addGeometryLoader=function(e){let t=e.cacheKey;if(this._geometrySizes.hasOwnProperty(t))return;this._geometrySizes[t]=0;let n=e.buffer,i=e.typedArray,o=0;d(n)&&(o+=n.sizeInBytes),d(i)&&(o+=i.byteLength),this.geometryByteLength+=o,this._geometrySizes[t]=o};AE.prototype.addTextureLoader=function(e){let t=e.cacheKey;if(this._textureSizes.hasOwnProperty(t))return;this._textureSizes[t]=0;let n=e.texture.sizeInBytes;this.texturesByteLength+=e.texture.sizeInBytes,this._textureSizes[t]=n};AE.prototype.removeLoader=function(e){let t=e.cacheKey,n=this._geometrySizes[t];delete this._geometrySizes[t],d(n)&&(this.geometryByteLength-=n);let i=this._textureSizes[t];delete this._textureSizes[t],d(i)&&(this.texturesByteLength-=i)};var ME=AE;function Fn(){}Fn.cacheEntries={};Fn.statistics=new ME;function jPe(e){this.referenceCount=1,this.resourceLoader=e,this._statisticsPromise=void 0}Fn.get=function(e){let t=Fn.cacheEntries[e];if(d(t))return++t.referenceCount,t.resourceLoader};Fn.add=function(e){let t=e.cacheKey;return Fn.cacheEntries[t]=new jPe(e),e};Fn.unload=function(e){let t=e.cacheKey,n=Fn.cacheEntries[t];--n.referenceCount,n.referenceCount===0&&(Fn.statistics.removeLoader(e),e.destroy(),delete Fn.cacheEntries[t])};Fn.getSchemaLoader=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.schema,n=e.resource,i=gl.getSchemaCacheKey({schema:t,resource:n}),o=Fn.get(i);return d(o)?o:(o=new NS({schema:t,resource:n,cacheKey:i}),Fn.add(o))};Fn.getEmbeddedBufferLoader=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.parentResource,n=e.bufferId,i=e.typedArray,o=gl.getEmbeddedBufferCacheKey({parentResource:t,bufferId:n}),r=Fn.get(o);return d(r)?r:(r=new gx({typedArray:i,cacheKey:o}),Fn.add(r))};Fn.getExternalBufferLoader=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.resource,n=gl.getExternalBufferCacheKey({resource:t}),i=Fn.get(n);return d(i)?i:(i=new gx({resource:t,cacheKey:n}),Fn.add(i))};Fn.getGltfJsonLoader=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.gltfResource,n=e.baseResource,i=e.typedArray,o=e.gltfJson,r=gl.getGltfCacheKey({gltfResource:t}),s=Fn.get(r);return d(s)?s:(s=new FS({resourceCache:Fn,gltfResource:t,baseResource:n,typedArray:i,gltfJson:o,cacheKey:r}),Fn.add(s))};Fn.getBufferViewLoader=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.gltf,n=e.bufferViewId,i=e.gltfResource,o=e.baseResource,r=gl.getBufferViewCacheKey({gltf:t,bufferViewId:n,gltfResource:i,baseResource:o}),s=Fn.get(r);return d(s)?s:(s=new IS({resourceCache:Fn,gltf:t,bufferViewId:n,gltfResource:i,baseResource:o,cacheKey:r}),Fn.add(s))};Fn.getDracoLoader=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.gltf,n=e.draco,i=e.gltfResource,o=e.baseResource,r=gl.getDracoCacheKey({gltf:t,draco:n,gltfResource:i,baseResource:o}),s=Fn.get(r);return d(s)?s:(s=new WS({resourceCache:Fn,gltf:t,draco:n,gltfResource:i,baseResource:o,cacheKey:r}),Fn.add(s))};Fn.getVertexBufferLoader=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.gltf,n=e.gltfResource,i=e.baseResource,o=e.frameState,r=e.bufferViewId,s=e.draco,a=e.attributeSemantic,c=e.accessorId,l=g(e.asynchronous,!0),u=g(e.dequantize,!1),m=g(e.loadBuffer,!1),p=g(e.loadTypedArray,!1),y=gl.getVertexBufferCacheKey({gltf:t,gltfResource:n,baseResource:i,frameState:o,bufferViewId:r,draco:s,attributeSemantic:a,dequantize:u,loadBuffer:m,loadTypedArray:p}),f=Fn.get(y);return d(f)?f:(f=new MS({resourceCache:Fn,gltf:t,gltfResource:n,baseResource:i,bufferViewId:r,draco:s,attributeSemantic:a,accessorId:c,cacheKey:y,asynchronous:l,dequantize:u,loadBuffer:m,loadTypedArray:p}),Fn.add(f))};Fn.getIndexBufferLoader=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.gltf,n=e.accessorId,i=e.gltfResource,o=e.baseResource,r=e.frameState,s=e.draco,a=g(e.asynchronous,!0),c=g(e.loadBuffer,!1),l=g(e.loadTypedArray,!1),u=gl.getIndexBufferCacheKey({gltf:t,accessorId:n,gltfResource:i,baseResource:o,frameState:r,draco:s,loadBuffer:c,loadTypedArray:l}),m=Fn.get(u);return d(m)?m:(m=new vS({resourceCache:Fn,gltf:t,accessorId:n,gltfResource:i,baseResource:o,draco:s,cacheKey:u,asynchronous:a,loadBuffer:c,loadTypedArray:l}),Fn.add(m))};Fn.getImageLoader=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.gltf,n=e.imageId,i=e.gltfResource,o=e.baseResource,r=gl.getImageCacheKey({gltf:t,imageId:n,gltfResource:i,baseResource:o}),s=Fn.get(r);return d(s)?s:(s=new PS({resourceCache:Fn,gltf:t,imageId:n,gltfResource:i,baseResource:o,cacheKey:r}),Fn.add(s))};Fn.getTextureLoader=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.gltf,n=e.textureInfo,i=e.gltfResource,o=e.baseResource,r=e.supportedImageFormats,s=e.frameState,a=g(e.asynchronous,!0),c=gl.getTextureCacheKey({gltf:t,textureInfo:n,gltfResource:i,baseResource:o,supportedImageFormats:r,frameState:s}),l=Fn.get(c);return d(l)?l:(l=new AS({resourceCache:Fn,gltf:t,textureInfo:n,gltfResource:i,baseResource:o,supportedImageFormats:r,cacheKey:c,asynchronous:a}),Fn.add(l))};Fn.clearForSpecs=function(){let e=[MS,vS,WS,AS,PS,IS,gx,NS,FS],t,n=Fn.cacheEntries,i=[];for(t in n)n.hasOwnProperty(t)&&i.push(n[t]);i.sort(function(r,s){let a=e.indexOf(r.resourceLoader.constructor),c=e.indexOf(s.resourceLoader.constructor);return a-c});let o=i.length;for(let r=0;r<o;++r){let s=i[r];t=s.resourceLoader.cacheKey,d(n[t])&&(s.resourceLoader.destroy(),delete n[t])}Fn.statistics.clear()};var Bi=Fn;function Ys(e,t,n){this._resource=e,this._subtreeJson=void 0,this._bufferLoader=void 0,this._tileAvailability=void 0,this._contentAvailabilityBitstreams=[],this._childSubtreeAvailability=void 0,this._implicitCoordinates=n,this._subtreeLevels=t.subtreeLevels,this._subdivisionScheme=t.subdivisionScheme,this._branchingFactor=t.branchingFactor,this._metadata=void 0,this._tileMetadataTable=void 0,this._tilePropertyTableJson=void 0,this._contentMetadataTables=[],this._contentPropertyTableJsons=[],this._tileJumpBuffer=void 0,this._contentJumpBuffers=[],this._ready=!1}Object.defineProperties(Ys.prototype,{ready:{get:function(){return this._ready}},metadata:{get:function(){return this._metadata}},tileMetadataTable:{get:function(){return this._tileMetadataTable}},tilePropertyTableJson:{get:function(){return this._tilePropertyTableJson}},contentMetadataTables:{get:function(){return this._contentMetadataTables}},contentPropertyTableJsons:{get:function(){return this._contentPropertyTableJsons}},implicitCoordinates:{get:function(){return this._implicitCoordinates}}});Ys.prototype.tileIsAvailableAtIndex=function(e){return this._tileAvailability.getBit(e)};Ys.prototype.tileIsAvailableAtCoordinates=function(e){let t=this.getTileIndex(e);return this.tileIsAvailableAtIndex(t)};Ys.prototype.contentIsAvailableAtIndex=function(e,t){return t=g(t,0),this._contentAvailabilityBitstreams[t].getBit(e)};Ys.prototype.contentIsAvailableAtCoordinates=function(e,t){let n=this.getTileIndex(e);return this.contentIsAvailableAtIndex(n,t)};Ys.prototype.childSubtreeIsAvailableAtIndex=function(e){return this._childSubtreeAvailability.getBit(e)};Ys.prototype.childSubtreeIsAvailableAtCoordinates=function(e){let t=this.getChildSubtreeIndex(e);return this.childSubtreeIsAvailableAtIndex(t)};Ys.prototype.getLevelOffset=function(e){let t=this._branchingFactor;return(Math.pow(t,e)-1)/(t-1)};Ys.prototype.getParentMortonIndex=function(e){let t=2;return this._subdivisionScheme===Mr.OCTREE&&(t=3),e>>t};Ys.fromSubtreeJson=async function(e,t,n,i,o){let r=new Ys(e,i,o),s;d(t)?s={json:t,binary:void 0}:s=qPe(n);let a=s.json;r._subtreeJson=a;let c;if(ri(a,"3DTILES_metadata"))c=a.extensions["3DTILES_metadata"];else if(d(a.tileMetadata)){let V=a.tileMetadata;c=a.propertyTables[V]}let l=[];if(d(a.contentMetadata)){let V=a.contentMetadata.length;for(let L=0;L<V;L++){let Z=a.contentMetadata[L];l.push(a.propertyTables[Z])}}let u,m=i.metadataSchema,p=a.subtreeMetadata;if(d(p)){let V=p.class,L=m.classes[V];u=new yE({subtreeMetadata:p,class:L})}r._metadata=u,r._tilePropertyTableJson=c,r._contentPropertyTableJsons=l;let y={constant:0};a.contentAvailabilityHeaders=[],ri(a,"3DTILES_multiple_contents")?a.contentAvailabilityHeaders=a.extensions["3DTILES_multiple_contents"].contentAvailability:Array.isArray(a.contentAvailability)?a.contentAvailabilityHeaders=a.contentAvailability:a.contentAvailabilityHeaders.push(g(a.contentAvailability,y));let f=$Pe(a.buffers),x=eve(a.bufferViews,f);tve(a,x),d(c)&&Kte(c,x);for(let V=0;V<l.length;V++){let L=l[V];Kte(L,x)}let _=await nve(r,f,s.binary),C=ove(x,_);return rve(r,a,i,C),d(c)&&(sve(r,i,C),cve(r)),ave(r,i,C),lve(r),r._ready=!0,r};function qPe(e){let n=new DataView(e.buffer,e.byteOffset),i=8,o=n.getUint32(i,!0);i+=8;let r=n.getUint32(i,!0);i+=8;let s=Go(e,i,o);i+=o;let a=e.subarray(i,i+r);return{json:s,binary:a}}function $Pe(e){e=d(e)?e:[];for(let t=0;t<e.length;t++){let n=e[t];n.isExternal=d(n.uri),n.isActive=!1}return e}function eve(e,t){e=d(e)?e:[];for(let n=0;n<e.length;n++){let i=e[n],o=t[i.buffer];i.bufferHeader=o,i.isActive=!1}return e}function tve(e,t){let n,i=e.tileAvailability;d(i.bitstream)?n=t[i.bitstream]:d(i.bufferView)&&(n=t[i.bufferView]),d(n)&&(n.isActive=!0,n.bufferHeader.isActive=!0);let o=e.contentAvailabilityHeaders;for(let s=0;s<o.length;s++)n=void 0,d(o[s].bitstream)?n=t[o[s].bitstream]:d(o[s].bufferView)&&(n=t[o[s].bufferView]),d(n)&&(n.isActive=!0,n.bufferHeader.isActive=!0);n=void 0;let r=e.childSubtreeAvailability;d(r.bitstream)?n=t[r.bitstream]:d(r.bufferView)&&(n=t[r.bufferView]),d(n)&&(n.isActive=!0,n.bufferHeader.isActive=!0)}function Kte(e,t){let n=e.properties,i;for(let o in n)if(n.hasOwnProperty(o)){let r=n[o],s=g(r.values,r.bufferView);i=t[s],i.isActive=!0,i.bufferHeader.isActive=!0;let a=g(r.stringOffsets,r.stringOffsetBufferView);d(a)&&(i=t[a],i.isActive=!0,i.bufferHeader.isActive=!0);let c=g(r.arrayOffsets,r.arrayOffsetBufferView);d(c)&&(i=t[c],i.isActive=!0,i.bufferHeader.isActive=!0)}}function nve(e,t,n){let i=[];for(let o=0;o<t.length;o++){let r=t[o];if(!r.isActive)i.push(Promise.resolve(void 0));else if(r.isExternal){let s=ive(e,r);i.push(s)}else i.push(Promise.resolve(n))}return Promise.all(i).then(function(o){let r={};for(let s=0;s<o.length;s++){let a=o[s];d(a)&&(r[s]=a)}return r})}async function ive(e,t){let i=e._resource.getDerivedResource({url:t.uri}),o=Bi.getExternalBufferLoader({resource:i});e._bufferLoader=o;try{await o.load()}catch(r){if(o.isDestroyed())return;throw r}return o.typedArray}function ove(e,t){let n={};for(let i=0;i<e.length;i++){let o=e[i];if(!o.isActive)continue;let r=o.byteOffset,s=r+o.byteLength,c=t[o.buffer].subarray(r,s);n[i]=c}return n}function rve(e,t,n,i){let o=n.branchingFactor,r=n.subtreeLevels,s=(Math.pow(o,r)-1)/(o-1),a=Math.pow(o,r),c=ri(t,"3DTILES_metadata"),l=d(e._tilePropertyTableJson),u=c||l;e._tileAvailability=RY(t.tileAvailability,i,s,u);let m=e._contentPropertyTableJsons.length>0;u=u||m;for(let p=0;p<t.contentAvailabilityHeaders.length;p++){let y=RY(t.contentAvailabilityHeaders[p],i,s,u);e._contentAvailabilityBitstreams.push(y)}e._childSubtreeAvailability=RY(t.childSubtreeAvailability,i,a)}function RY(e,t,n,i){if(d(e.constant))return new ES({constant:!!e.constant,lengthBits:n,availableCount:e.availableCount});let o;return d(e.bitstream)?o=t[e.bitstream]:d(e.bufferView)&&(o=t[e.bufferView]),new ES({bitstream:o,lengthBits:n,availableCount:e.availableCount,computeAvailableCountEnabled:i})}function sve(e,t,n){let i=e._tilePropertyTableJson,o=e._tileAvailability.availableCount,r=t.metadataSchema,s=i.class,a=r.classes[s];e._tileMetadataTable=new pl({class:a,count:o,properties:i.properties,bufferViews:n})}function ave(e,t,n){let i=e._contentPropertyTableJsons,o=e._contentAvailabilityBitstreams,r=t.metadataSchema,s=e._contentMetadataTables;for(let a=0;a<i.length;a++){let c=i[a],u=o[a].availableCount,m=c.class,p=r.classes[m],y=new pl({class:p,count:u,properties:c.properties,bufferViews:n});s.push(y)}}function Hte(e){let t=0,n=e.lengthBits,i=e.availableCount,o;i<256?o=new Uint8Array(n):i<65536?o=new Uint16Array(n):o=new Uint32Array(n);for(let r=0;r<e.lengthBits;r++)e.getBit(r)&&(o[r]=t,t++);return o}function cve(e){let t=Hte(e._tileAvailability);e._tileJumpBuffer=t}function lve(e){let t=e._contentJumpBuffers,n=e._contentAvailabilityBitstreams;for(let i=0;i<n.length;i++){let o=n[i],r=Hte(o);t.push(r)}}Ys.prototype.getTileIndex=function(e){let t=e.level-this._implicitCoordinates.level;if(t<0||this._subtreeLevels<=t)throw new me("level is out of bounds for this subtree");return e.getSubtreeCoordinates().getOffsetCoordinates(e).tileIndex};Ys.prototype.getChildSubtreeIndex=function(e){if(e.level-this._implicitCoordinates.level!==this._implicitCoordinates.subtreeLevels)throw new me("level is out of bounds for this subtree");return e.getParentSubtreeCoordinates().getOffsetCoordinates(e).mortonIndex};function dve(e,t){if(!d(e._tileMetadataTable))return;let n=e.getTileIndex(t);if(e._tileAvailability.getBit(n))return e._tileJumpBuffer[n]}function uve(e,t,n){let i=e._contentMetadataTables;if(!d(i))return;let o=i[n];if(!d(o))return;let r=e._contentAvailabilityBitstreams[n],s=e.getTileIndex(t);if(r.getBit(s))return e._contentJumpBuffers[n][s]}Ys.prototype.getTileMetadataView=function(e){let t=dve(this,e);if(!d(t))return;let n=this._tileMetadataTable;return new XS({class:n.class,metadataTable:n,entityId:t,propertyTableJson:this._tilePropertyTableJson})};Ys.prototype.getContentMetadataView=function(e,t){let n=uve(this,e,t);if(!d(n))return;let i=this._contentMetadataTables[t],o=this._contentPropertyTableJsons[t];return new XS({class:i.class,metadataTable:i,entityId:n,contentIndex:t,propertyTableJson:o})};Ys.prototype.isDestroyed=function(){return!1};Ys.prototype.destroy=function(){return d(this._bufferLoader)&&Bi.unload(this._bufferLoader),ue(this)};var Zx=Ys;var fon=T(S(),1),mve={ID:"ID",NAME:"NAME",DESCRIPTION:"DESCRIPTION",TILESET_TILE_COUNT:"TILESET_TILE_COUNT",TILE_BOUNDING_BOX:"TILE_BOUNDING_BOX",TILE_BOUNDING_REGION:"TILE_BOUNDING_REGION",TILE_BOUNDING_SPHERE:"TILE_BOUNDING_SPHERE",TILE_MINIMUM_HEIGHT:"TILE_MINIMUM_HEIGHT",TILE_MAXIMUM_HEIGHT:"TILE_MAXIMUM_HEIGHT",TILE_HORIZON_OCCLUSION_POINT:"TILE_HORIZON_OCCLUSION_POINT",TILE_GEOMETRIC_ERROR:"TILE_GEOMETRIC_ERROR",CONTENT_BOUNDING_BOX:"CONTENT_BOUNDING_BOX",CONTENT_BOUNDING_REGION:"CONTENT_BOUNDING_REGION",CONTENT_BOUNDING_SPHERE:"CONTENT_BOUNDING_SPHERE",CONTENT_MINIMUM_HEIGHT:"CONTENT_MINIMUM_HEIGHT",CONTENT_MAXIMUM_HEIGHT:"CONTENT_MAXIMUM_HEIGHT",CONTENT_HORIZON_OCCLUSION_POINT:"CONTENT_HORIZON_OCCLUSION_POINT"},Gx=Object.freeze(mve);var yon=T(S(),1);var Sm={};Sm.parseAllBoundingVolumeSemantics=function(e){return{tile:{boundingVolume:Sm.parseBoundingVolumeSemantic("TILE",e),minimumHeight:Sm._parseMinimumHeight("TILE",e),maximumHeight:Sm._parseMaximumHeight("TILE",e)},content:{boundingVolume:Sm.parseBoundingVolumeSemantic("CONTENT",e),minimumHeight:Sm._parseMinimumHeight("CONTENT",e),maximumHeight:Sm._parseMaximumHeight("CONTENT",e)}}};Sm.parseBoundingVolumeSemantic=function(e,t){let n=`${e}_BOUNDING_BOX`,i=t.getPropertyBySemantic(n);if(d(i))return{box:i};let o=`${e}_BOUNDING_REGION`,r=t.getPropertyBySemantic(o);if(d(r))return{region:r};let s=`${e}_BOUNDING_SPHERE`,a=t.getPropertyBySemantic(s);if(d(a))return{sphere:a}};Sm._parseMinimumHeight=function(e,t){let n=`${e}_MINIMUM_HEIGHT`;return t.getPropertyBySemantic(n)};Sm._parseMaximumHeight=function(e,t){let n=`${e}_MAXIMUM_HEIGHT`;return t.getPropertyBySemantic(n)};var Ex=Sm;function xl(e,t,n){let i=t.implicitTileset,o=t.implicitCoordinates;this._implicitTileset=i,this._implicitCoordinates=o,this._implicitSubtree=void 0,this._tileset=e,this._tile=t,this._resource=n,this._metadata=void 0,this.featurePropertiesDirty=!1,this._group=void 0;let r=o.getTemplateValues(),s=i.subtreeUriTemplate.getDerivedResource({templateValues:r});this._url=s.getUrlComponent(!0),this._ready=!1}Object.defineProperties(xl.prototype,{featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return 0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){}},ready:{get:function(){return this._ready}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._url}},metadata:{get:function(){},set:function(){}},batchTable:{get:function(){}},group:{get:function(){return this._group},set:function(e){this._group=e}}});xl.fromSubtreeJson=async function(e,t,n,i,o,r){r=g(r,0);let s;d(o)&&(s=new Uint8Array(o,r));let a=t.implicitTileset,c=t.implicitCoordinates,l=await Zx.fromSubtreeJson(n,i,s,a,c),u=new xl(e,t,n);return u._implicitSubtree=l,hve(u,l),u._ready=!0,u};function hve(e,t){let n=e._tile,i=e._implicitCoordinates.childIndex,o=pve(e,t,n,i),r=e._tileset.statistics;n.children.push(o.rootTile),r.numberOfTilesTotal++;let s=fve(e,t,o.bottomRow);for(let a=0;a<s.length;a++){let c=s[a],l=c.tile,u=Vve(e,l,c.childIndex);l.children.push(u),r.numberOfTilesTotal++}}function fve(e,t,n){let i=[],o=e._implicitTileset.branchingFactor;for(let r=0;r<n.length;r++){let s=n[r];if(d(s))for(let a=0;a<o;a++){let c=r*o+a;t.childSubtreeIsAvailableAtIndex(c)&&i.push({tile:s,childIndex:a})}}return i}function pve(e,t,n,i){let s=zte(e,t,n,i,0,!0),a=e._tileset.statistics,c=[s],l=[],u=e._implicitTileset;for(let m=1;m<u.subtreeLevels;m++){let p=t.getLevelOffset(m),y=u.branchingFactor*c.length;for(let f=0;f<y;f++){let x=p+f;if(!t.tileIsAvailableAtIndex(x)){l.push(void 0);continue}let _=t.getParentMortonIndex(f),C=c[_],V=f%u.branchingFactor,L=zte(e,t,C,V,x);C.children.push(L),a.numberOfTilesTotal++,l.push(L)}c=l,l=[]}return{rootTile:s,bottomRow:c}}function Jte(e,t,n){let i=Gx.TILE_GEOMETRIC_ERROR;return d(e)&&e.hasPropertyBySemantic(i)?e.getPropertyBySemantic(i):t.geometricError/Math.pow(2,n.level)}function zte(e,t,n,i,o,r){let s=e._implicitTileset,a;g(r,!1)?a=n.implicitCoordinates:a=n.implicitCoordinates.getChildCoordinates(i);let c,l,u;if(d(t.tilePropertyTableJson)){c=t.getTileMetadataView(a);let X=Ex.parseAllBoundingVolumeSemantics(c);l=X.tile,u=X.content}let p=t.contentPropertyTableJsons.length,y=!1;for(let X=0;X<p;X++)if(t.contentIsAvailableAtCoordinates(a,X)){y=!0;break}let f=gve(s,a,i,r,n,l),x=[];for(let X=0;X<s.contentCount;X++){if(!t.contentIsAvailableAtIndex(o,X))continue;let F={uri:s.contentUriTemplates[X].getDerivedResource({templateValues:a.getTemplateValues()}).url},M=xve(f,u);d(M)&&(F.boundingVolume=M),x.push(xt(F,s.contentHeaders[X]))}let _=Jte(c,s,a),C={boundingVolume:f,geometricError:_,refine:s.refine,contents:x},V=!0,L=Ke(s.tileHeader,V);delete L.boundingVolume,delete L.transform,delete L.metadata;let Z=xt(C,L,V),G=ene(e,s.baseResource,Z,n);return G.implicitCoordinates=a,G.implicitSubtree=t,G.metadata=c,G.hasImplicitContentMetadata=y,G}function MM(e,t){return d(e)&&d(t)&&(d(t.minimumHeight)||d(t.maximumHeight))&&(ri(e,"3DTILES_bounding_volume_S2")||d(e.region))}function GY(e,t){d(t)&&(ri(e,"3DTILES_bounding_volume_S2")?yve(e.extensions["3DTILES_bounding_volume_S2"],t.minimumHeight,t.maximumHeight):d(e.region)&&bve(e.region,t.minimumHeight,t.maximumHeight))}function bve(e,t,n){d(t)&&(e[4]=t),d(n)&&(e[5]=n)}function yve(e,t,n){d(t)&&(e.minimumHeight=t),d(n)&&(e.maximumHeight=n)}function gve(e,t,n,i,o,r){let s;return!d(r)||!d(r.boundingVolume)||!MM(r.boundingVolume,r)&&MM(e.boundingVolume,r)?s=Qte(e,t,n,g(i,!1),o):s=r.boundingVolume,GY(s,r),s}function xve(e,t){let n;return d(t)&&(n=t.boundingVolume),MM(n,t)?GY(n,t):MM(e,t)&&(n=Ke(e,!0),GY(n,t)),n}function Qte(e,t,n,i,o){let r=e.boundingVolume;return ri(r,"3DTILES_bounding_volume_S2")?jte(i,o,n,t.level,t.x,t.y,t.z):d(r.region)?{region:$te(r.region,t.level,t.x,t.y,t.z)}:{box:qte(r.box,t.level,t.x,t.y,t.z)}}function jte(e,t,n,i,o,r,s){let a=t._boundingVolume;if(e)return{extensions:{"3DTILES_bounding_volume_S2":{token:_p.getTokenFromId(a.s2Cell._cellId),minimumHeight:a.minimumHeight,maximumHeight:a.maximumHeight}}};let c=Number(t._boundingVolume.s2Cell._cellId>>BigInt(61)),l=c%2===0?ZS.encode2D(i,o,r):ZS.encode2D(i,r,o),u=_p.fromFacePositionLevel(c,BigInt(l),i),m,p;if(d(s)){let y=(a.maximumHeight+a.minimumHeight)/2;m=n<4?a.minimumHeight:y,p=n<4?y:a.maximumHeight}else m=a.minimumHeight,p=a.maximumHeight;return{extensions:{"3DTILES_bounding_volume_S2":{token:_p.getTokenFromId(u._cellId),minimumHeight:m,maximumHeight:p}}}}var _ve=new h,Tve=new h,ZY=new h,Sve=new $;function qte(e,t,n,i,o){if(t===0)return e;let r=h.unpack(e,0,Tve),s=$.unpack(e,3,Sve),a=Math.pow(2,-t),c=-1+(2*n+1)*a,l=-1+(2*i+1)*a,u=0,m=h.fromElements(a,a,1,_ve);d(o)&&(u=-1+(2*o+1)*a,m.z=a);let p=h.fromElements(c,l,u,ZY);p=$.multiplyByVector(s,p,ZY),p=h.add(p,r,ZY);let y=$.clone(s);y=$.multiplyByScale(y,m,y);let f=new Array(12);return h.pack(p,f),$.pack(y,f,3),f}var Cve=new de;function $te(e,t,n,i,o){if(t===0)return e.slice();let r=de.unpack(e,0,Cve),s=e[4],a=e[5],c=Math.pow(2,-t),l=c*r.width,u=W.negativePiToPi(r.west+n*l),m=W.negativePiToPi(u+l),p=c*r.height,y=W.negativePiToPi(r.south+i*p),f=W.negativePiToPi(y+p),x=s,_=a;if(d(o)){let C=c*(a-s);x+=o*C,_=x+C}return[u,y,m,f,x,_]}function Vve(e,t,n){let i=e._implicitTileset,o=t.implicitCoordinates.getChildCoordinates(n),r=Qte(i,o,n,!1,t),s=Jte(void 0,i,o),a=i.subtreeUriTemplate.getDerivedResource({templateValues:o.getTemplateValues()}).url,c={boundingVolume:r,geometricError:s,refine:i.refine,contents:[{uri:a}]},l=ene(e,i.baseResource,c,t);return l.implicitTileset=i,l.implicitCoordinates=o,l}function ene(e,t,n,i){let o=e._tile.constructor;return new o(e._tileset,t,n,i)}xl.prototype.hasProperty=function(e,t){return!1};xl.prototype.getFeature=function(e){};xl.prototype.applyDebugSettings=function(e,t){};xl.prototype.applyStyle=function(e){};xl.prototype.update=function(e,t){};xl.prototype.isDestroyed=function(){return!1};xl.prototype.destroy=function(){return this._implicitSubtree=this._implicitSubtree&&this._implicitSubtree.destroy(),ue(this)};xl._deriveBoundingBox=qte;xl._deriveBoundingRegion=$te;xl._deriveBoundingVolumeS2=jte;var US=xl;var wSn=T(S(),1);var Fon=T(S(),1),Lve={NONE:0,REPEAT:1,MIRRORED_REPEAT:2},_l=Object.freeze(Lve);var RSn=T(S(),1);var srn=T(S(),1);var Uon=T(S(),1);function kS(e,t){this._distance=t,this._normal=new tne(e,this),this.onChangeCallback=void 0,this.index=-1}Object.defineProperties(kS.prototype,{distance:{get:function(){return this._distance},set:function(e){d(this.onChangeCallback)&&e!==this._distance&&this.onChangeCallback(this.index),this._distance=e}},normal:{get:function(){return this._normal},set:function(e){d(this.onChangeCallback)&&!h.equals(this._normal._cartesian3,e)&&this.onChangeCallback(this.index),h.clone(e,this._normal._cartesian3)}}});kS.fromPlane=function(e,t){return d(t)?(t.normal=e.normal,t.distance=e.distance):t=new kS(e.normal,e.distance),t};kS.clone=function(e,t){return d(t)?(t.normal=e.normal,t.distance=e.distance,t):new kS(e.normal,e.distance)};function tne(e,t){this._clippingPlane=t,this._cartesian3=h.clone(e)}Object.defineProperties(tne.prototype,{x:{get:function(){return this._cartesian3.x},set:function(e){d(this._clippingPlane.onChangeCallback)&&e!==this._cartesian3.x&&this._clippingPlane.onChangeCallback(this._clippingPlane.index),this._cartesian3.x=e}},y:{get:function(){return this._cartesian3.y},set:function(e){d(this._clippingPlane.onChangeCallback)&&e!==this._cartesian3.y&&this._clippingPlane.onChangeCallback(this._clippingPlane.index),this._cartesian3.y=e}},z:{get:function(){return this._cartesian3.z},set:function(e){d(this._clippingPlane.onChangeCallback)&&e!==this._cartesian3.z&&this._clippingPlane.onChangeCallback(this._clippingPlane.index),this._cartesian3.z=e}}});var Xx=kS;function Oa(e){e=g(e,g.EMPTY_OBJECT),this._planes=[],this._dirtyIndex=-1,this._multipleDirtyPlanes=!1,this._enabled=g(e.enabled,!0),this.modelMatrix=A.clone(g(e.modelMatrix,A.IDENTITY)),this.edgeColor=Y.clone(g(e.edgeColor,Y.WHITE)),this.edgeWidth=g(e.edgeWidth,0),this.planeAdded=new ye,this.planeRemoved=new ye,this._owner=void 0;let t=g(e.unionClippingRegions,!1);this._unionClippingRegions=t,this._testIntersection=t?sne:ane,this._uint8View=void 0,this._float32View=void 0,this._clippingPlanesTexture=void 0;let n=e.planes;if(d(n)){let i=n.length;for(let o=0;o<i;++o)this.add(n[o])}}function sne(e){return e===qt.OUTSIDE}function ane(e){return e===qt.INSIDE}Object.defineProperties(Oa.prototype,{length:{get:function(){return this._planes.length}},unionClippingRegions:{get:function(){return this._unionClippingRegions},set:function(e){this._unionClippingRegions!==e&&(this._unionClippingRegions=e,this._testIntersection=e?sne:ane)}},enabled:{get:function(){return this._enabled},set:function(e){this._enabled!==e&&(this._enabled=e)}},texture:{get:function(){return this._clippingPlanesTexture}},owner:{get:function(){return this._owner}},clippingPlanesState:{get:function(){return this._unionClippingRegions?this._planes.length:-this._planes.length}}});function nne(e,t){e._multipleDirtyPlanes=e._multipleDirtyPlanes||e._dirtyIndex!==-1&&e._dirtyIndex!==t,e._dirtyIndex=t}Oa.prototype.add=function(e){let t=this._planes.length,n=this;e.onChangeCallback=function(i){nne(n,i)},e.index=t,nne(this,t),this._planes.push(e),this.planeAdded.raiseEvent(e,t)};Oa.prototype.get=function(e){return this._planes[e]};function cne(e,t){let n=e.length;for(let i=0;i<n;++i)if(sn.equals(e[i],t))return i;return-1}Oa.prototype.contains=function(e){return cne(this._planes,e)!==-1};Oa.prototype.remove=function(e){let t=this._planes,n=cne(t,e);if(n===-1)return!1;e instanceof Xx&&(e.onChangeCallback=void 0,e.index=-1);let i=t.length-1;for(let o=n;o<i;++o){let r=t[o+1];t[o]=r,r instanceof Xx&&(r.index=o)}return this._multipleDirtyPlanes=!0,t.length=i,this.planeRemoved.raiseEvent(e,n),!0};Oa.prototype.removeAll=function(){let e=this._planes,t=e.length;for(let n=0;n<t;++n){let i=e[n];i instanceof Xx&&(i.onChangeCallback=void 0,i.index=-1),this.planeRemoved.raiseEvent(i,n)}this._multipleDirtyPlanes=!0,this._planes=[]};var Rve=new se,Zve=new se;function ine(e,t,n){let i=e._uint8View,o=e._planes,r=0;for(let s=t;s<n;++s){let a=o[s],c=Kn.octEncodeToCartesian4(a.normal,Zve);i[r]=c.x,i[r+1]=c.y,i[r+2]=c.z,i[r+3]=c.w;let l=se.packFloat(a.distance,Rve);i[r+4]=l.x,i[r+5]=l.y,i[r+6]=l.z,i[r+7]=l.w,r+=8}}function one(e,t,n){let i=e._float32View,o=e._planes,r=0;for(let s=t;s<n;++s){let a=o[s],c=a.normal;i[r]=c.x,i[r+1]=c.y,i[r+2]=c.z,i[r+3]=a.distance,r+=4}}function lne(e,t){let n=kt.maximumTextureSize;return t.x=Math.min(e,n),t.y=Math.ceil(e/t.x),t}var Gve=new D;Oa.prototype.update=function(e){let t=this._clippingPlanesTexture,n=e.context,i=Oa.useFloatTexture(n),o=i?this.length:this.length*2;if(d(t)){let s=t.width*t.height;(s<o||o<.25*s)&&(t.destroy(),t=void 0,this._clippingPlanesTexture=void 0)}if(this.length===0)return;if(!d(t)){let s=lne(o,Gve);s.y*=2,i?(t=new Wt({context:n,width:s.x,height:s.y,pixelFormat:st.RGBA,pixelDatatype:Je.FLOAT,sampler:un.NEAREST,flipY:!1}),this._float32View=new Float32Array(s.x*s.y*4)):(t=new Wt({context:n,width:s.x,height:s.y,pixelFormat:st.RGBA,pixelDatatype:Je.UNSIGNED_BYTE,sampler:un.NEAREST,flipY:!1}),this._uint8View=new Uint8Array(s.x*s.y*4)),this._clippingPlanesTexture=t,this._multipleDirtyPlanes=!0}let r=this._dirtyIndex;if(!(!this._multipleDirtyPlanes&&r===-1)){if(this._multipleDirtyPlanes)i?(one(this,0,this._planes.length),t.copyFrom({source:{width:t.width,height:t.height,arrayBufferView:this._float32View}})):(ine(this,0,this._planes.length),t.copyFrom({source:{width:t.width,height:t.height,arrayBufferView:this._uint8View}}));else{let s=0,a=0;i?(a=Math.floor(r/t.width),s=Math.floor(r-a*t.width),one(this,r,r+1),t.copyFrom({source:{width:1,height:1,arrayBufferView:this._float32View},xOffset:s,yOffset:a})):(a=Math.floor(r*2/t.width),s=Math.floor(r*2-a*t.width),ine(this,r,r+1),t.copyFrom({source:{width:2,height:1,arrayBufferView:this._uint8View},xOffset:s,yOffset:a}))}this._multipleDirtyPlanes=!1,this._dirtyIndex=-1}};var Eve=new A,rne=new sn(h.UNIT_X,0);Oa.prototype.computeIntersectionWithBoundingVolume=function(e,t){let n=this._planes,i=n.length,o=this.modelMatrix;d(t)&&(o=A.multiply(t,o,Eve));let r=qt.INSIDE;!this.unionClippingRegions&&i>0&&(r=qt.OUTSIDE);for(let s=0;s<i;++s){let a=n[s];sn.transform(a,o,rne);let c=e.intersectPlane(rne);if(c===qt.INTERSECTING)r=c;else if(this._testIntersection(c))return c}return r};Oa.setOwner=function(e,t,n){e!==t[n]&&(t[n]=t[n]&&t[n].destroy(),d(e)&&(e._owner=t,t[n]=e))};Oa.useFloatTexture=function(e){return e.floatingPointTexture};Oa.getTextureResolution=function(e,t,n){let i=e.texture;if(d(i))return n.x=i.width,n.y=i.height,n;let o=Oa.useFloatTexture(t)?e.length:e.length*2,r=lne(o,n);return r.y*=2,r};Oa.prototype.isDestroyed=function(){return!1};Oa.prototype.destroy=function(){return this._clippingPlanesTexture=this._clippingPlanesTexture&&this._clippingPlanesTexture.destroy(),ue(this)};var rs=Oa;var lrn=T(S(),1);var NE={HIGHLIGHT:0,REPLACE:1,MIX:2};NE.getColorBlend=function(e,t){if(e===NE.HIGHLIGHT)return 0;if(e===NE.REPLACE)return 1;if(e===NE.MIX)return W.clamp(t,W.EPSILON4,1)};var Ka=Object.freeze(NE);var Lan=T(S(),1);var urn=T(S(),1),Xve={XTRANSLATE:"xTranslate",YTRANSLATE:"yTranslate",ZTRANSLATE:"zTranslate",XROTATE:"xRotate",YROTATE:"yRotate",ZROTATE:"zRotate",XSCALE:"xScale",YSCALE:"yScale",ZSCALE:"zScale",UNIFORMSCALE:"uniformScale"},Ha=Object.freeze(Xve);var hrn=T(S(),1),Ive={STEP:0,LINEAR:1,CUBICSPLINE:2},Cm=Object.freeze(Ive);var Tsn=T(S(),1);var isn=T(S(),1);var Crn=T(S(),1);var grn=T(S(),1);var dne={};function UE(e){this._count=e.count,this._properties=Ke(e.properties,!0)}UE.prototype.hasProperty=function(e){return Mn.hasProperty(e,this._properties,dne)};UE.prototype.getPropertyIds=function(e){return Mn.getPropertyIds(this._properties,dne,e)};UE.prototype.getProperty=function(e,t){let n=this._properties[t];if(d(n))return Ke(n[e],!0)};UE.prototype.setProperty=function(e,t,n){let i=this._properties[t];d(i)||(i=new Array(this._count),this._properties[t]=i),i[e]=Ke(n,!0)};var Zp=UE;function za(e){e=g(e,g.EMPTY_OBJECT),this._name=e.name,this._id=e.id,this._count=e.count,this._extras=e.extras,this._extensions=e.extensions,this._metadataTable=e.metadataTable,this._jsonMetadataTable=e.jsonMetadataTable,this._batchTableHierarchy=e.batchTableHierarchy}Object.defineProperties(za.prototype,{name:{get:function(){return this._name}},id:{get:function(){return this._id}},count:{get:function(){return this._count}},class:{get:function(){if(d(this._metadataTable))return this._metadataTable.class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}},byteLength:{get:function(){let e=0;return d(this._metadataTable)&&(e+=this._metadataTable.byteLength),d(this._batchTableHierarchy)&&(e+=this._batchTableHierarchy.byteLength),e}}});za.prototype.hasProperty=function(e,t){return!!(d(this._metadataTable)&&this._metadataTable.hasProperty(t)||d(this._batchTableHierarchy)&&this._batchTableHierarchy.hasProperty(e,t)||d(this._jsonMetadataTable)&&this._jsonMetadataTable.hasProperty(t))};za.prototype.hasPropertyBySemantic=function(e,t){return d(this._metadataTable)?this._metadataTable.hasPropertyBySemantic(t):!1};za.prototype.propertyExists=function(e){return!!(d(this._metadataTable)&&this._metadataTable.hasProperty(e)||d(this._batchTableHierarchy)&&this._batchTableHierarchy.propertyExists(e)||d(this._jsonMetadataTable)&&this._jsonMetadataTable.hasProperty(e))};za.prototype.propertyExistsBySemantic=function(e){return d(this._metadataTable)?this._metadataTable.hasPropertyBySemantic(e):!1};var EY=[];za.prototype.getPropertyIds=function(e,t){return t=d(t)?t:[],t.length=0,d(this._metadataTable)&&t.push.apply(t,this._metadataTable.getPropertyIds(EY)),d(this._batchTableHierarchy)&&t.push.apply(t,this._batchTableHierarchy.getPropertyIds(e,EY)),d(this._jsonMetadataTable)&&t.push.apply(t,this._jsonMetadataTable.getPropertyIds(EY)),t};za.prototype.getProperty=function(e,t){let n;if(d(this._metadataTable)&&(n=this._metadataTable.getProperty(e,t),d(n))||d(this._batchTableHierarchy)&&(n=this._batchTableHierarchy.getProperty(e,t),d(n))||d(this._jsonMetadataTable)&&(n=this._jsonMetadataTable.getProperty(e,t),d(n)))return n};za.prototype.setProperty=function(e,t,n){d(this._metadataTable)&&this._metadataTable.setProperty(e,t,n)||d(this._batchTableHierarchy)&&this._batchTableHierarchy.setProperty(e,t,n)||(d(this._jsonMetadataTable)||(this._jsonMetadataTable=new Zp({count:this._count,properties:{}})),this._jsonMetadataTable.setProperty(e,t,n))};za.prototype.getPropertyBySemantic=function(e,t){if(d(this._metadataTable))return this._metadataTable.getPropertyBySemantic(e,t)};za.prototype.setPropertyBySemantic=function(e,t,n){return d(this._metadataTable)?this._metadataTable.setPropertyBySemantic(e,t,n):!1};za.prototype.getPropertyTypedArray=function(e){if(d(this._metadataTable))return this._metadataTable.getPropertyTypedArray(e)};za.prototype.getPropertyTypedArrayBySemantic=function(e){if(d(this._metadataTable))return this._metadataTable.getPropertyTypedArrayBySemantic(e)};za.prototype.isClass=function(e,t){let n=this._batchTableHierarchy;return d(n)?n.isClass(e,t):!1};za.prototype.isExactClass=function(e,t){return this.getExactClassName(e)===t};za.prototype.getExactClassName=function(e){let t=this._batchTableHierarchy;if(d(t))return t.getClassName(e)};var Ic=za;var wrn=T(S(),1);var Xrn=T(S(),1);function kE(e){e=g(e,g.EMPTY_OBJECT);let t=e.property,n=e.classProperty,i=e.textures,o=d(t.channels)?t.channels:[0],r=t,s=yl.createModelTextureReader({textureInfo:r,channels:vve(o),texture:i[r.index]});this._min=t.min,this._max=t.max;let a=t.offset,c=t.scale,l=n.hasValueTransform||d(a)||d(c);a=g(a,n.offset),c=g(c,n.scale),a=n.unpackVectorAndMatrixTypes(a),c=n.unpackVectorAndMatrixTypes(c),this._offset=a,this._scale=c,this._hasValueTransform=l,this._textureReader=s,this._classProperty=n,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(kE.prototype,{textureReader:{get:function(){return this._textureReader}},hasValueTransform:{get:function(){return this._hasValueTransform}},offset:{get:function(){return this._offset}},scale:{get:function(){return this._scale}},classProperty:{get:function(){return this._classProperty}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});kE.prototype.isGpuCompatible=function(){let e=this._classProperty,t=e.type,n=e.componentType;return e.isArray?!e.isVariableLengthArray&&e.arrayLength<=4&&t===Ot.SCALAR&&n===tn.UINT8:Ot.isVectorType(t)||t===Ot.SCALAR?n===tn.UINT8:!1};var Wve=[void 0,"float","vec2","vec3","vec4"],Pve=[void 0,"int","ivec2","ivec3","ivec4"];kE.prototype.getGlslType=function(){let e=this._classProperty,t=Ot.getComponentCount(e.type);return e.isArray&&(t=e.arrayLength),e.normalized?Wve[t]:Pve[t]};kE.prototype.unpackInShader=function(e){return this._classProperty.normalized?e:`${this.getGlslType()}(255.0 * ${e})`};function vve(e){return e.map(function(t){return"rgba".charAt(t)}).join("")}var DE=kE;function XY(e){e=g(e,g.EMPTY_OBJECT);let t=e.propertyTexture,n=e.class,i=e.textures,o=t.extensions,r=t.extras,s={};if(d(t.properties))for(let a in t.properties)t.properties.hasOwnProperty(a)&&(s[a]=new DE({property:t.properties[a],classProperty:n.properties[a],textures:i}));this._name=e.name,this._id=e.id,this._class=n,this._properties=s,this._extras=r,this._extensions=o}Object.defineProperties(XY.prototype,{name:{get:function(){return this._name}},id:{get:function(){return this._id}},class:{get:function(){return this._class}},properties:{get:function(){return this._properties}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});XY.prototype.getProperty=function(e){return this._properties[e]};var Ix=XY;var Yrn=T(S(),1);var Nrn=T(S(),1);function une(e){e=g(e,g.EMPTY_OBJECT);let t=e.property,n=e.classProperty;this._attribute=t.attribute,this._classProperty=n,this._min=t.min,this._max=t.max;let i=t.offset,o=t.scale,r=n.hasValueTransform||d(i)||d(o);i=g(i,n.offset),o=g(o,n.scale),i=n.unpackVectorAndMatrixTypes(i),o=n.unpackVectorAndMatrixTypes(o),this._offset=i,this._scale=o,this._hasValueTransform=r,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(une.prototype,{attribute:{get:function(){return this._attribute}},hasValueTransform:{get:function(){return this._hasValueTransform}},offset:{get:function(){return this._offset}},scale:{get:function(){return this._scale}},classProperty:{get:function(){return this._classProperty}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});var BE=une;function IY(e){e=g(e,g.EMPTY_OBJECT);let t=e.propertyAttribute,n=e.class,i={};if(d(t.properties))for(let o in t.properties)t.properties.hasOwnProperty(o)&&(i[o]=new BE({property:t.properties[o],classProperty:n.properties[o]}));this._name=e.name,this._id=e.id,this._class=n,this._properties=i,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(IY.prototype,{name:{get:function(){return this._name}},id:{get:function(){return this._id}},class:{get:function(){return this._class}},properties:{get:function(){return this._properties}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});IY.prototype.getProperty=function(e){return this._properties[e]};var Wx=IY;var zrn=T(S(),1);function YE(e){e=g(e,g.EMPTY_OBJECT),this._schema=e.schema;let t=e.propertyTables;this._propertyTableCount=d(t)?t.length:0,this._propertyTables=t,this._propertyTextures=e.propertyTextures,this._propertyAttributes=e.propertyAttributes,this._statistics=e.statistics,this._extras=e.extras,this._extensions=e.extensions}Object.defineProperties(YE.prototype,{schema:{get:function(){return this._schema}},statistics:{get:function(){return this._statistics}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}},propertyTableCount:{get:function(){return this._propertyTableCount}},propertyTables:{get:function(){return this._propertyTables}},propertyTextures:{get:function(){return this._propertyTextures}},propertyAttributes:{get:function(){return this._propertyAttributes}},propertyTablesByteLength:{get:function(){if(!d(this._propertyTables))return 0;let e=0,t=this._propertyTables.length;for(let n=0;n<t;n++)e+=this._propertyTables[n].byteLength;return e}}});YE.prototype.getPropertyTable=function(e){return this._propertyTables[e]};YE.prototype.getPropertyTexture=function(e){return this._propertyTextures[e]};YE.prototype.getPropertyAttribute=function(e){return this._propertyAttributes[e]};var ba=YE;function wve(e){e=g(e,g.EMPTY_OBJECT);let t=e.extension,n=e.schema,i=[];if(d(t.propertyTables))for(let s=0;s<t.propertyTables.length;s++){let a=t.propertyTables[s],c=n.classes[a.class],l=new pl({count:a.count,properties:a.properties,class:c,bufferViews:e.bufferViews});i.push(new Ic({id:s,name:a.name,count:a.count,metadataTable:l,extras:a.extras,extensions:a.extensions}))}let o=[];if(d(t.propertyTextures))for(let s=0;s<t.propertyTextures.length;s++){let a=t.propertyTextures[s];o.push(new Ix({id:s,name:a.name,propertyTexture:a,class:n.classes[a.class],textures:e.textures}))}let r=[];if(d(t.propertyAttributes))for(let s=0;s<t.propertyAttributes.length;s++){let a=t.propertyAttributes[s];r.push(new Wx({id:s,name:a.name,class:n.classes[a.class],propertyAttribute:a}))}return new ba({schema:n,propertyTables:i,propertyTextures:o,propertyAttributes:r,statistics:t.statistics,extras:t.extras,extensions:t.extensions})}var OE=wve;var msn=T(S(),1);function Fve(e){e=g(e,g.EMPTY_OBJECT);let t=e.extension,n=e.schema,i,o=[],r;if(d(t.featureTables))for(r=Object.keys(t.featureTables).sort(),i=0;i<r.length;i++){let a=r[i],c=t.featureTables[a],l=n.classes[c.class],u=new pl({count:c.count,properties:c.properties,class:l,bufferViews:e.bufferViews});o.push(new Ic({id:a,count:c.count,metadataTable:u,extras:c.extras,extensions:c.extensions}))}let s=[];if(d(t.featureTextures))for(r=Object.keys(t.featureTextures).sort(),i=0;i<r.length;i++){let a=r[i],c=t.featureTextures[a];s.push(new Ix({id:a,propertyTexture:Ave(c),class:n.classes[c.class],textures:e.textures}))}return new ba({schema:n,propertyTables:o,propertyTextures:s,statistics:t.statistics,extras:t.extras,extensions:t.extensions})}function Ave(e){let t={class:e.class,properties:{}},n=e.properties;for(let i in n)if(n.hasOwnProperty(i)){let o=n[i],r={channels:Mve(o.channels),extras:o.extras,extensions:o.extensions};t.properties[i]=xt(o.texture,r,!0)}return t}function Mve(e){let t=e.length,n=new Array(t);for(let i=0;i<t;i++)n[i]="rgba".indexOf(e[i]);return n}var KE=Fve;function vb(e){e=g(e,g.EMPTY_OBJECT);let t=e.gltf,n=e.extension,i=e.extensionLegacy,o=e.gltfResource,r=e.baseResource,s=e.supportedImageFormats,a=e.frameState,c=e.cacheKey,l=g(e.asynchronous,!0);this._gltfResource=o,this._baseResource=r,this._gltf=t,this._extension=n,this._extensionLegacy=i,this._supportedImageFormats=s,this._frameState=a,this._cacheKey=c,this._asynchronous=l,this._bufferViewLoaders=[],this._bufferViewIds=[],this._textureLoaders=[],this._textureIds=[],this._schemaLoader=void 0,this._structuralMetadata=void 0,this._state=Rt.UNLOADED,this._promise=void 0}d(Object.create)&&(vb.prototype=Object.create(oo.prototype),vb.prototype.constructor=vb);Object.defineProperties(vb.prototype,{cacheKey:{get:function(){return this._cacheKey}},structuralMetadata:{get:function(){return this._structuralMetadata}}});async function Nve(e){try{let t=Yve(e),n=Jve(e),i=Qve(e);return await Promise.all([t,n,i]),e.isDestroyed()?void 0:(e._gltf=void 0,e._state=Rt.LOADED,e)}catch(t){if(e.isDestroyed())return;e.unload(),e._state=Rt.FAILED;let n="Failed to load structural metadata";throw e.getError(n,t)}}vb.prototype.load=function(){return d(this._promise)?this._promise:(this._state=Rt.LOADING,this._promise=Nve(this),this._promise)};function Uve(e,t){for(let n in e)if(e.hasOwnProperty(n)){let i=e[n],o=i.values,r=i.arrayOffsets,s=i.stringOffsets;d(o)&&(t[o]=!0),d(r)&&(t[r]=!0),d(s)&&(t[s]=!0)}}function kve(e,t){for(let n in e)if(e.hasOwnProperty(n)){let i=e[n],o=i.bufferView,r=i.arrayOffsetBufferView,s=i.stringOffsetBufferView;d(o)&&(t[o]=!0),d(r)&&(t[r]=!0),d(s)&&(t[s]=!0)}}function Dve(e){let t=e.propertyTables,n={};if(d(t))for(let i=0;i<t.length;i++){let o=t[i];Uve(o.properties,n)}return n}function Bve(e){let t=e.featureTables,n={};if(d(t)){for(let i in t)if(t.hasOwnProperty(i)){let r=t[i].properties;d(r)&&kve(r,n)}}return n}async function Yve(e){let t;d(e._extension)?t=Dve(e._extension):t=Bve(e._extensionLegacy);let n=[];for(let i in t)if(t.hasOwnProperty(i)){let o=Bi.getBufferViewLoader({gltf:e._gltf,bufferViewId:parseInt(i),gltfResource:e._gltfResource,baseResource:e._baseResource});e._bufferViewLoaders.push(o),e._bufferViewIds.push(i),n.push(o.load())}return Promise.all(n)}function Ove(e){let t={},n=e.propertyTextures;if(d(n))for(let i=0;i<n.length;i++){let r=n[i].properties;d(r)&&Kve(r,t)}return t}function Kve(e,t){for(let n in e)if(e.hasOwnProperty(n)){let i=e[n];t[i.index]=i}}function Hve(e){let t={},n=e.featureTextures;if(d(n)){for(let i in n)if(n.hasOwnProperty(i)){let r=n[i].properties;d(r)&&zve(r,t)}}return t}function zve(e,t){for(let n in e)if(e.hasOwnProperty(n)){let o=e[n].texture;t[o.index]=o}}function Jve(e){let t;d(e._extension)?t=Ove(e._extension):t=Hve(e._extensionLegacy);let n=e._gltf,i=e._gltfResource,o=e._baseResource,r=e._supportedImageFormats,s=e._frameState,a=e._asynchronous,c=[];for(let l in t)if(t.hasOwnProperty(l)){let u=Bi.getTextureLoader({gltf:n,textureInfo:t[l],gltfResource:i,baseResource:o,supportedImageFormats:r,frameState:s,asynchronous:a});e._textureLoaders.push(u),e._textureIds.push(l),c.push(u.load())}return Promise.all(c)}async function Qve(e){let t=g(e._extension,e._extensionLegacy),n;if(d(t.schemaUri)){let i=e._baseResource.getDerivedResource({url:t.schemaUri});n=Bi.getSchemaLoader({resource:i})}else n=Bi.getSchemaLoader({schema:t.schema});if(e._schemaLoader=n,await n.load(),!n.isDestroyed())return n.schema}vb.prototype.process=function(e){if(this._state===Rt.READY)return!0;if(this._state!==Rt.LOADED)return!1;let t=this._textureLoaders,n=t.length,i=!0;for(let a=0;a<n;++a){let l=t[a].process(e);i=i&&l}if(!i)return!1;let o=this._schemaLoader.schema,r={};for(let a=0;a<this._bufferViewIds.length;++a){let c=this._bufferViewIds[a],l=this._bufferViewLoaders[a];if(!l.isDestroyed()){let u=new Uint8Array(l.typedArray);r[c]=u}}let s={};for(let a=0;a<this._textureIds.length;++a){let c=this._textureIds[a],l=t[a];l.isDestroyed()||(s[c]=l.texture)}return d(this._extension)?this._structuralMetadata=OE({extension:this._extension,schema:o,bufferViews:r,textures:s}):this._structuralMetadata=KE({extension:this._extensionLegacy,schema:o,bufferViews:r,textures:s}),mne(this),this._state=Rt.READY,!0};function mne(e){let t=e._bufferViewLoaders,n=t.length;for(let i=0;i<n;++i)Bi.unload(t[i]);e._bufferViewLoaders.length=0,e._bufferViewIds.length=0}function jve(e){let t=e._textureLoaders,n=t.length;for(let i=0;i<n;++i)Bi.unload(t[i]);e._textureLoaders.length=0,e._textureIds.length=0}vb.prototype.unload=function(){mne(this),jve(this),d(this._schemaLoader)&&Bi.unload(this._schemaLoader),this._schemaLoader=void 0,this._structuralMetadata=void 0};var HE=vb;var Csn=T(S(),1);var DS={TRANSLATION:"TRANSLATION",ROTATION:"ROTATION",SCALE:"SCALE",FEATURE_ID:"_FEATURE_ID"};DS.fromGltfSemantic=function(e){let t=e,i=/^(\w+)_\d+$/.exec(e);switch(i!==null&&(t=i[1]),t){case"TRANSLATION":return DS.TRANSLATION;case"ROTATION":return DS.ROTATION;case"SCALE":return DS.SCALE;case"_FEATURE_ID":return DS.FEATURE_ID}};var Nr=Object.freeze(DS);var Ysn=T(S(),1);var vsn=T(S(),1);var qve=65534,$ve=255;function NM(e){e=g(e,g.EMPTY_OBJECT);let t=e.triangleIndices,n=e.outlineIndices,i=e.originalVertexCount;this._triangleIndices=t,this._originalVertexCount=i,this._edges=new pne(n,i),this._outlineCoordinatesTypedArray=void 0,this._extraVertices=[],ewe(this)}Object.defineProperties(NM.prototype,{updatedTriangleIndices:{get:function(){return this._triangleIndices}},outlineCoordinates:{get:function(){return this._outlineCoordinatesTypedArray}}});function ewe(e){let t=e._triangleIndices,n=e._edges,i=[],o=e._extraVertices,r=e._originalVertexCount,s={};for(let a=0;a<t.length;a+=3){let c=t[a],l=t[a+1],u=t[a+2],m=!1,p=m||n.hasEdge(c,l),y=m||n.hasEdge(l,u),f=m||n.hasEdge(u,c),x=hne(i,c,l,u,p,y,f);for(;d(x);){let _=s[x];if(!d(_)){_=r+o.length;let C=x;for(;C>=r;)C=o[C-r];o.push(C),s[x]=_}_>qve&&(t instanceof Uint16Array||t instanceof Uint8Array)?t=new Uint32Array(t):_>$ve&&t instanceof Uint8Array&&(t=new Uint16Array(t)),x===c?(c=_,t[a]=_):x===l?(l=_,t[a+1]=_):(u=_,t[a+2]=_),x=hne(i,c,l,u,p,y,f)}}e._triangleIndices=t,e._outlineCoordinatesTypedArray=new Float32Array(i)}function hne(e,t,n,i,o,r,s){let a=s?1:0,c=o?1:0,l=0,u=WY(e,t,a,c,l);if(u===0)return t;let m=0,p=o?1:0,y=r?1:0,f=WY(e,n,m,p,y);if(f===0)return n;let x=s?1:0,_=0,C=r?1:0,V=WY(e,i,x,_,C);if(V===0)return i;let L=u&f&V,Z,G,X;if(L&1)Z=0,G=1,X=2;else if(L&2)Z=0,X=1,G=2;else if(L&4)G=0,Z=1,X=2;else if(L&8)G=0,X=1,Z=2;else if(L&16)X=0,Z=1,G=2;else if(L&32)X=0,G=1,Z=2;else{let M=PY(u),b=PY(f),R=PY(V);return M<b&&M<R?t:b<R?n:i}let P=t*3;e[P+Z]=a,e[P+G]=c,e[P+X]=l;let v=n*3;e[v+Z]=m,e[v+G]=p,e[v+X]=y;let F=i*3;e[F+Z]=x,e[F+G]=_,e[F+X]=C}function WY(e,t,n,i,o){let r=t*3,s=e[r],a=e[r+1],c=e[r+2];return d(s)?(s===n&&a===i&&c===o)<<0|(s===n&&a===o&&c===i)<<1|(s===i&&a===n&&c===o)<<2|(s===i&&a===o&&c===n)<<3|(s===o&&a===n&&c===i)<<4|(s===o&&a===i&&c===n)<<5:63}function PY(e){return(e&1)+(e>>1&1)+(e>>2&1)+(e>>3&1)+(e>>4&1)+(e>>5&1)}NM.prototype.updateAttribute=function(e){let t=this._extraVertices,n=e.length,i=n/this._originalVertexCount,o=t.length,r=e.constructor,s=new r(e.length+o*i);s.set(e);for(let a=0;a<o;a++){let c=t[a]*i,l=n+a*i;for(let u=0;u<i;u++)s[l+u]=s[c+u]}return s};NM.createTexture=function(e){let t=e.cache.modelOutliningCache;if(d(t)||(t=e.cache.modelOutliningCache={}),d(t.outlineTexture))return t.outlineTexture;let n=Math.min(4096,kt.maximumTextureSize),i=n,o=fne(i),r=[];for(;i>1;)i>>=1,r.push(fne(i));let s=new Wt({context:e,source:{arrayBufferView:o,mipLevels:r},width:n,height:1,pixelFormat:st.LUMINANCE,sampler:new un({wrapS:Gn.CLAMP_TO_EDGE,wrapT:Gn.CLAMP_TO_EDGE,minificationFilter:cn.LINEAR_MIPMAP_LINEAR,magnificationFilter:Ti.LINEAR})});return t.outlineTexture=s,s};function fne(e){let t=new Uint8Array(e);return t[e-1]=192,e===8?t[e-1]=96:e===4?t[e-1]=48:e===2?t[e-1]=24:e===1&&(t[e-1]=12),t}function pne(e,t){this._originalVertexCount=t,this._edges=new Set;for(let n=0;n<e.length;n+=2){let i=e[n],o=e[n+1],r=Math.min(i,o),s=Math.max(i,o),a=r*this._originalVertexCount+s;this._edges.add(a)}}pne.prototype.hasEdge=function(e,t){let n=Math.min(e,t),i=Math.max(e,t),o=n*this._originalVertexCount+i;return this._edges.has(o)};var Px=NM;function bne(e){this.attribute=e,this.loadBuffer=!1,this.loadTypedArray=!1}function twe(e){this.indices=e,this.loadBuffer=!1,this.loadTypedArray=!1}function UM(e){this.primitive=e,this.attributePlans=[],this.indicesPlan=void 0,this.needsOutlines=!1,this.outlineIndices=void 0}UM.prototype.postProcess=function(e){this.needsOutlines&&(nwe(this),owe(this,e))};function nwe(e){let t=e.primitive,n=t.indices,i=t.attributes[0].count,o=new Px({triangleIndices:n.typedArray,outlineIndices:e.outlineIndices,originalVertexCount:i});n.typedArray=o.updatedTriangleIndices,n.indexDatatype=Ue.fromTypedArray(n.typedArray);let r=iwe(o.outlineCoordinates),s=new bne(r);s.loadBuffer=!0,s.loadTypedArray=!1,e.attributePlans.push(s),t.outlineCoordinates=s.attribute;let a=e.attributePlans,c=e.attributePlans.length;for(let l=0;l<c;l++){let u=a[l].attribute;u.typedArray=o.updateAttribute(u.typedArray)}}function iwe(e){let t=new wt.Attribute;return t.name="_OUTLINE_COORDINATES",t.typedArray=e,t.componentDatatype=Q.FLOAT,t.type=an.VEC3,t.normalized=!1,t.count=e.length/3,t}function owe(e,t){rwe(e.attributePlans,t),d(e.indicesPlan)&&swe(e.indicesPlan,t)}function rwe(e,t){let n=e.length;for(let i=0;i<n;i++){let o=e[i],r=o.attribute,s=r.typedArray;if(o.loadBuffer){let a=mt.createVertexBuffer({typedArray:s,context:t,usage:Ne.STATIC_DRAW});a.vertexArrayDestroyable=!1,r.buffer=a}o.loadTypedArray||(r.typedArray=void 0)}}function swe(e,t){let n=e.indices;if(e.loadBuffer){let i=mt.createIndexBuffer({typedArray:n.typedArray,context:t,usage:Ne.STATIC_DRAW,indexDatatype:n.indexDatatype});n.buffer=i,i.vertexArrayDestroyable=!1}e.loadTypedArray||(n.typedArray=void 0)}UM.AttributeLoadPlan=bne;UM.IndicesLoadPlan=twe;var vx=UM;var Hsn=T(S(),1);function awe(e){e=g(e,g.EMPTY_OBJECT),this.webp=g(e.webp,!1),this.basis=g(e.basis,!1)}var zE=awe;var cwe=wt.Attribute,lwe=wt.Indices,yne=wt.FeatureIdAttribute,gne=wt.FeatureIdTexture,xne=wt.FeatureIdImplicitRange,dwe=wt.MorphTarget,uwe=wt.Primitive,mwe=wt.Instances,hwe=wt.Skin,fwe=wt.Node,pwe=wt.AnimatedPropertyType,bwe=wt.AnimationSampler,ywe=wt.AnimationTarget,gwe=wt.AnimationChannel,xwe=wt.Animation,_we=wt.ArticulationStage,Twe=wt.Articulation,Swe=wt.Asset,Cwe=wt.Scene,Vwe=wt.Components,Lwe=wt.MetallicRoughness,Rwe=wt.SpecularGlossiness,Zwe=wt.Material,Eo={NOT_LOADED:0,LOADING:1,LOADED:2,PROCESSING:3,POST_PROCESSING:4,PROCESSED:5,READY:6,FAILED:7,UNLOADED:8};function Vm(e){e=g(e,g.EMPTY_OBJECT);let t=e.gltfResource,n=e.baseResource,i=e.typedArray,o=g(e.releaseGltfJson,!1),r=g(e.asynchronous,!0),s=g(e.incrementallyLoadTextures,!0),a=g(e.upAxis,Zo.Y),c=g(e.forwardAxis,Zo.Z),l=g(e.loadAttributesAsTypedArray,!1),u=g(e.loadAttributesFor2D,!1),m=g(e.loadIndicesForWireframe,!1),p=g(e.loadPrimitiveOutline,!0),y=g(e.loadForClassification,!1),f=g(e.renameBatchIdSemantic,!1);n=d(n)?n:t.clone(),this._gltfJson=e.gltfJson,this._gltfResource=t,this._baseResource=n,this._typedArray=i,this._releaseGltfJson=o,this._asynchronous=r,this._incrementallyLoadTextures=s,this._upAxis=a,this._forwardAxis=c,this._loadAttributesAsTypedArray=l,this._loadAttributesFor2D=u,this._loadIndicesForWireframe=m,this._loadPrimitiveOutline=p,this._loadForClassification=y,this._renameBatchIdSemantic=f,this._sortedPropertyTableIds=void 0,this._sortedFeatureTextureIds=void 0,this._gltfJsonLoader=void 0,this._state=Eo.NOT_LOADED,this._textureState=Eo.NOT_LOADED,this._promise=void 0,this._processError=void 0,this._textureErrors=[],this._primitiveLoadPlans=[],this._loaderPromises=[],this._textureLoaders=[],this._texturesPromises=[],this._textureCallbacks=[],this._bufferViewLoaders=[],this._geometryLoaders=[],this._geometryCallbacks=[],this._structuralMetadataLoader=void 0,this._loadResourcesPromise=void 0,this._resourcesLoaded=!1,this._texturesLoaded=!1,this._postProcessBuffers=[],this._components=void 0}d(Object.create)&&(Vm.prototype=Object.create(oo.prototype),Vm.prototype.constructor=Vm);Object.defineProperties(Vm.prototype,{cacheKey:{get:function(){}},components:{get:function(){return this._components}},gltfJson:{get:function(){return d(this._gltfJsonLoader)?this._gltfJsonLoader.gltf:this._gltfJson}},incrementallyLoadTextures:{get:function(){return this._incrementallyLoadTextures}},texturesLoaded:{get:function(){return this._texturesLoaded}}});async function Gwe(e){e._state=Eo.LOADING,e._textureState=Eo.LOADING;try{let t=Bi.getGltfJsonLoader({gltfResource:e._gltfResource,baseResource:e._baseResource,typedArray:e._typedArray,gltfJson:e._gltfJson});return e._gltfJsonLoader=t,await t.load(),e.isDestroyed()||e.isUnloaded()||t.isDestroyed()?void 0:(e._state=Eo.LOADED,e._textureState=Eo.LOADED,e)}catch(t){if(e.isDestroyed())return;e._state=Eo.FAILED,e._textureState=Eo.FAILED,kM(e,t)}}async function Ewe(e,t){Mt.supportsWebP.initialized||await Mt.supportsWebP.initialize();let n=new zE({webp:Mt.supportsWebP(),basis:t.context.supportsBasis}),i=e.gltfJson,o=RFe(e,i,n,t);return e._state=Eo.PROCESSING,e._textureState=Eo.PROCESSING,d(e._gltfJsonLoader)&&e._releaseGltfJson&&(Bi.unload(e._gltfJsonLoader),e._gltfJsonLoader=void 0),o}Vm.prototype.load=async function(){return d(this._promise)?this._promise:(this._promise=Gwe(this),this._promise)};function kM(e,t){e.unload();let n="Failed to load glTF";throw e.getError(n,t)}function Xwe(e,t){let n,i=!0,o=e._geometryLoaders,r=o.length;for(n=0;n<r;++n){let a=o[n].process(t);a&&d(e._geometryCallbacks[n])&&(e._geometryCallbacks[n](),e._geometryCallbacks[n]=void 0),i=i&&a}let s=e._structuralMetadataLoader;if(d(s)){let a=s.process(t);a&&(e._components.structuralMetadata=s.structuralMetadata),i=i&&a}i&&(e._state=Eo.POST_PROCESSING)}function Iwe(e,t){let n=e._primitiveLoadPlans,i=n.length;for(let o=0;o<i;o++){let r=n[o];r.postProcess(t),r.needsOutlines&&Wwe(e,r)}}function Wwe(e,t){let n=e._postProcessBuffers,i=t.primitive,o=i.outlineCoordinates;d(o)&&n.push(o.buffer);let r=i.attributes,s=r.length;for(let c=0;c<s;c++){let l=r[c];d(l.buffer)&&n.push(l.buffer)}let a=i.indices;d(a)&&d(a.buffer)&&n.push(a.buffer)}Vm.prototype._process=function(e){return this._state===Eo.READY?!0:(this._state===Eo.PROCESSING&&Xwe(this,e),this._resourcesLoaded&&this._state===Eo.POST_PROCESSING&&(Iwe(this,e.context),this._state=Eo.PROCESSED),this._resourcesLoaded&&this._state===Eo.PROCESSED?(Gne(this),this._typedArray=void 0,this._state=Eo.READY,!0):!1)};Vm.prototype._processTextures=function(e){if(this._textureState===Eo.READY)return!0;if(this._textureState!==Eo.PROCESSING)return!1;let t,n=!0,i=this._textureLoaders,o=i.length;for(t=0;t<o;++t){let r=i[t].process(e);r&&d(this._textureCallbacks[t])&&(this._textureCallbacks[t](),this._textureCallbacks[t]=void 0),n=n&&r}return n?(this._textureState=Eo.READY,this._texturesLoaded=!0,!0):!1};Vm.prototype.process=function(e){if(this._state===Eo.LOADED&&!d(this._loadResourcesPromise)&&(this._loadResourcesPromise=Ewe(this,e).then(()=>{this._resourcesLoaded=!0}).catch(o=>{this._processError=o})),d(this._processError)){this._state=Eo.FAILED;let o=this._processError;this._processError=void 0,kM(this,o)}let t=this._textureErrors.pop();if(d(t)){let o=this.getError("Failed to load glTF texture",t);throw o.name="TextureError",o}if(this._state===Eo.FAILED)return!1;let n=!1;try{n=this._process(e)}catch(o){this._state=Eo.FAILED,kM(this,o)}let i=!1;try{i=this._processTextures(e)}catch(o){this._textureState=Eo.FAILED,kM(this,o)}return this._incrementallyLoadTextures?n:n&&i};function Pwe(e,t,n,i,o,r,s,a){let l=t.accessors[n].bufferView;return Bi.getVertexBufferLoader({gltf:t,gltfResource:e._gltfResource,baseResource:e._baseResource,frameState:a,bufferViewId:l,draco:o,attributeSemantic:i,accessorId:n,asynchronous:e._asynchronous,loadBuffer:r,loadTypedArray:s})}function vwe(e,t,n,i,o,r,s){return Bi.getIndexBufferLoader({gltf:t,accessorId:n,gltfResource:e._gltfResource,baseResource:e._baseResource,frameState:s,draco:i,asynchronous:e._asynchronous,loadBuffer:o,loadTypedArray:r})}function wwe(e,t,n){let i=Bi.getBufferViewLoader({gltf:t,bufferViewId:n,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._bufferViewLoaders.push(i),i}function _ne(e,t,n){let i=t.byteOffset,o=bl(e,t),r=t.count,s=$l(t.type),a=t.componentType,c=Q.getSizeInBytes(a),l=c*s,u=r*s;if(o===l)return n=new Uint8Array(n),Q.createArrayBufferView(a,n.buffer,n.byteOffset+i,u);let m=Q.createTypedArray(a,u),p=new DataView(n.buffer),y=new Array(s),f=Rp(t.componentType);i=n.byteOffset+i;for(let x=0;x<r;++x){f(p,i,s,c,y);for(let _=0;_<s;++_)m[x*s+_]=y[_];i+=o}return m}function Fwe(e,t){let n=e.type;if(n===an.SCALAR)return t.fill(0);let i=an.getMathType(n);return t.fill(i.clone(i.ZERO))}function Awe(e,t,n,i){let o=e.type,r=e.count;if(o===an.SCALAR)for(let s=0;s<r;s++)n[s]=t[s];else if(o===an.VEC4&&i)for(let s=0;s<r;s++)n[s]=Ae.unpack(t,s*4);else{let s=an.getMathType(o),a=an.getNumberOfComponents(o);for(let c=0;c<r;c++)n[c]=s.unpack(t,c*a)}return n}async function Mwe(e,t,n,i,o,r){if(await t.load(),e.isDestroyed())return;let s=t.typedArray,a=_ne(n,i,s);o=g(o,!1),Awe(i,a,r,o)}function DM(e,t,n,i){let o=t.accessors[n],r=o.count,s=new Array(r),a=o.bufferView;if(d(a)){let c=wwe(e,t,a),l=Mwe(e,c,t,o,i,s);return e._loaderPromises.push(l),s}return Fwe(o,s)}function iu(e,t){if(d(t))return e===Number?t[0]:e.unpack(t)}function Nwe(e){return e===Number?0:new e}function Uwe(e){switch(e){case Q.BYTE:return 127;case Q.UNSIGNED_BYTE:return 255;case Q.SHORT:return 32767;case Q.UNSIGNED_SHORT:return 65535;default:return 1}}var kwe={VEC2:new D(-1,-1),VEC3:new h(-1,-1,-1),VEC4:new se(-1,-1,-1,-1)};function Dwe(e,t){let n=Uwe(e.componentDatatype),i=kwe[e.type],o=e.min;d(o)&&(o=t.divideByScalar(o,n,o),o=t.maximumByComponent(o,i,o));let r=e.max;d(r)&&(r=t.divideByScalar(r,n,r),r=t.maximumByComponent(r,i,r)),e.min=o,e.max=r}function Bwe(e,t,n){let i=e.decodeMatrix,o=iu(n,e.decodedMin),r=iu(n,e.decodedMax);d(o)&&d(r)&&(t.min=o,t.max=r);let s=new wt.Quantization;s.componentDatatype=t.componentDatatype,s.type=t.type,i.length===4?(s.quantizedVolumeOffset=i[2],s.quantizedVolumeStepSize=i[0]):i.length===9?(s.quantizedVolumeOffset=new D(i[6],i[7]),s.quantizedVolumeStepSize=new D(i[0],i[4])):i.length===16?(s.quantizedVolumeOffset=new h(i[12],i[13],i[14]),s.quantizedVolumeStepSize=new h(i[0],i[5],i[10])):i.length===25&&(s.quantizedVolumeOffset=new se(i[20],i[21],i[22],i[23]),s.quantizedVolumeStepSize=new se(i[0],i[6],i[12],i[18])),t.quantization=s}function Ywe(e,t,n,i,o){let r=e.accessors[t],s=an.getMathType(r.type),a=g(r.normalized,!1),c=new cwe;c.name=n,c.semantic=i,c.setIndex=o,c.constant=Nwe(s),c.componentDatatype=r.componentType,c.normalized=a,c.count=r.count,c.type=r.type,c.min=iu(s,r.min),c.max=iu(s,r.max),c.byteOffset=r.byteOffset,c.byteStride=bl(e,r),ri(r,"WEB3D_quantized_attributes")&&Bwe(r.extensions.WEB3D_quantized_attributes,c,s);let l=c.semantic===Ct.POSITION||c.semantic===Ct.NORMAL||c.semantic===Ct.TANGENT||c.semantic===Ct.TEXCOORD;return e.extensionsRequired?.includes("KHR_mesh_quantization")&&a&&l&&Dwe(c,s),c}function Tne(e){let n=/^\w+_(\d+)$/.exec(e);if(n!==null)return parseInt(n[1])}var Owe={gltfSemantic:void 0,renamedSemantic:void 0,modelSemantic:void 0};function vY(e,t,n){let i=n;e._renameBatchIdSemantic&&(n==="_BATCHID"||n==="BATCHID")&&(i="_FEATURE_ID_0");let o=t.fromGltfSemantic(i),r=Owe;return r.gltfSemantic=n,r.renamedSemantic=i,r.modelSemantic=o,r}function Kwe(e){let t=e===Ct.POSITION,n=e===Ct.FEATURE_ID,i=e===Ct.TEXCOORD;return t||n||i}function Hwe(e,t,n,i){if(e.byteOffset=0,e.byteStride=void 0,e.quantization=t.quantization,n&&(e.buffer=t.buffer),i){let o=d(t.quantization)?t.quantization.componentDatatype:e.componentDatatype;e.typedArray=Q.createArrayBufferView(o,t.typedArray.buffer)}}function zwe(e,t,n,i,o,r){if(o&&(n.buffer=i.buffer),r){let s=i.typedArray;n.typedArray=_ne(e,t,s),o||(n.byteOffset=0,n.byteStride=void 0)}}function Sne(e,t,n,i,o,r,s,a){let c=t.accessors[n],l=c.bufferView,u=i.gltfSemantic,m=i.renamedSemantic,p=i.modelSemantic,y=d(p)?Tne(m):void 0,x=Ywe(t,n,u,p,y);if(!d(o)&&!d(l))return x;let _=Pwe(e,t,n,u,o,r,s,a),C=e._geometryLoaders.length;e._geometryLoaders.push(_);let V=_.load();return e._loaderPromises.push(V),e._geometryCallbacks[C]=()=>{d(o)&&d(o.attributes)&&d(o.attributes[u])?Hwe(x,_,r,s):zwe(t,c,x,_,r,s)},x}function Cne(e,t,n,i,o,r,s,a){let c=i.modelSemantic,l=c===Ct.POSITION,u=c===Ct.FEATURE_ID,m=l&&!r&&e._loadAttributesFor2D&&!a.scene3DOnly,p=e._loadForClassification&&u,y=e._loadAttributesAsTypedArray,f=!y,x=y||m||p,V=Sne(e,t,n,i,o,s?!1:f,s?!0:x,a),L=new vx.AttributeLoadPlan(V);return L.loadBuffer=f,L.loadTypedArray=x,L}function Jwe(e,t,n,i,o,r){let s=d(i.ROTATION),a=d(i.TRANSLATION)&&d(t.accessors[i.TRANSLATION].min)&&d(t.accessors[i.TRANSLATION].max),c=vY(e,Nr,o),l=c.modelSemantic,u=l===Nr.TRANSLATION||l===Nr.ROTATION||l===Nr.SCALE,m=l===Nr.TRANSLATION,p=e._loadAttributesAsTypedArray||s&&u||!r.context.instancedArrays,y=!p,f=e._loadAttributesFor2D&&!r.scene3DOnly;return Sne(e,t,n,c,void 0,y,p||m&&(!a||f),r)}function Qwe(e,t,n,i,o,r,s){let a=t.accessors[n],c=a.bufferView;if(!d(i)&&!d(c))return;let l=new lwe;l.count=a.count;let u=e._loadAttributesAsTypedArray,m=e._loadIndicesForWireframe&&!s.context.webgl2,p=e._loadForClassification&&o,f=!u,x=u||m||p,V=vwe(e,t,n,i,r?!1:f,r?!0:x,s),L=e._geometryLoaders.length;e._geometryLoaders.push(V);let Z=V.load();e._loaderPromises.push(Z),e._geometryCallbacks[L]=()=>{l.indexDatatype=V.indexDatatype,l.buffer=V.buffer,l.typedArray=V.typedArray};let G=new vx.IndicesLoadPlan(l);return G.loadBuffer=f,G.loadTypedArray=x,G}function Gp(e,t,n,i,o,r){let s=yl.getImageIdFromTexture({gltf:t,textureId:n.index,supportedImageFormats:i});if(!d(s))return;let a=Bi.getTextureLoader({gltf:t,textureInfo:n,gltfResource:e._gltfResource,baseResource:e._baseResource,supportedImageFormats:i,frameState:o,asynchronous:e._asynchronous}),c=yl.createModelTextureReader({textureInfo:n}),l=e._textureLoaders.length;e._textureLoaders.push(a);let u=a.load().catch(m=>{if(!e.isDestroyed()){if(!e._incrementallyLoadTextures)throw m;e._textureState=Eo.FAILED,e._textureErrors.push(m)}});return e._texturesPromises.push(u),e._textureCallbacks[l]=()=>{c.texture=a.texture,d(r)&&(c.texture.sampler=r)},c}function jwe(e,t,n,i,o){let r=new Zwe,s=g(n.extensions,g.EMPTY_OBJECT),a=s.KHR_materials_pbrSpecularGlossiness,c=n.pbrMetallicRoughness;if(r.unlit=d(s.KHR_materials_unlit),d(a)){let l=new Rwe;r.specularGlossiness=l,d(a.diffuseTexture)&&(l.diffuseTexture=Gp(e,t,a.diffuseTexture,i,o)),d(a.specularGlossinessTexture)&&d(a.specularGlossinessTexture)&&(l.specularGlossinessTexture=Gp(e,t,a.specularGlossinessTexture,i,o)),l.diffuseFactor=iu(se,a.diffuseFactor),l.specularFactor=iu(h,a.specularFactor),l.glossinessFactor=a.glossinessFactor,r.pbrSpecularGlossiness=a}else if(d(c)){let l=new Lwe;d(c.baseColorTexture)&&(l.baseColorTexture=Gp(e,t,c.baseColorTexture,i,o)),d(c.metallicRoughnessTexture)&&(l.metallicRoughnessTexture=Gp(e,t,c.metallicRoughnessTexture,i,o)),l.baseColorFactor=iu(se,c.baseColorFactor),l.metallicFactor=c.metallicFactor,l.roughnessFactor=c.roughnessFactor,r.metallicRoughness=l}return d(n.emissiveTexture)&&(r.emissiveTexture=Gp(e,t,n.emissiveTexture,i,o)),d(n.normalTexture)&&!e._loadForClassification&&(r.normalTexture=Gp(e,t,n.normalTexture,i,o)),d(n.occlusionTexture)&&(r.occlusionTexture=Gp(e,t,n.occlusionTexture,i,o)),r.emissiveFactor=iu(h,n.emissiveFactor),r.alphaMode=n.alphaMode,r.alphaCutoff=n.alphaCutoff,r.doubleSided=n.doubleSided,r}function Vne(e,t){let n=new yne;return n.featureCount=e.featureCount,n.nullFeatureId=e.nullFeatureId,n.propertyTableId=e.propertyTable,n.setIndex=e.attribute,n.label=e.label,n.positionalLabel=t,n}function Lne(e,t,n,i){let o=new yne,r=e.featureIds;return o.featureCount=n,o.propertyTableId=t,o.setIndex=Tne(r.attribute),o.positionalLabel=i,o}function Rne(e,t){let n=new xne;return n.propertyTableId=e.propertyTable,n.featureCount=e.featureCount,n.nullFeatureId=e.nullFeatureId,n.label=e.label,n.positionalLabel=t,n.offset=0,n.repeat=1,n}function Zne(e,t,n,i){let o=new xne,r=e.featureIds;o.propertyTableId=t,o.featureCount=n,o.offset=g(r.constant,0);let s=g(r.divisor,0);return o.repeat=s===0?void 0:s,o.positionalLabel=i,o}function qwe(e,t,n,i,o,r){let s=new gne;s.featureCount=n.featureCount,s.nullFeatureId=n.nullFeatureId,s.propertyTableId=n.propertyTable,s.label=n.label,s.positionalLabel=r;let a=n.texture;s.textureReader=Gp(e,t,a,i,o,un.NEAREST);let l=(d(a.channels)?a.channels:[0]).map(function(u){return"rgba".charAt(u)}).join("");return s.textureReader.channels=l,s}function $we(e,t,n,i,o,r,s,a){let c=new gne,l=n.featureIds,u=l.texture;return c.featureCount=s,c.propertyTableId=i,c.textureReader=Gp(e,t,u,o,r,un.NEAREST),c.textureReader.channels=l.channels,c.positionalLabel=a,c}function eFe(e,t,n,i,o,r){let s=new dwe,a=void 0,c=!1;for(let l in n)if(n.hasOwnProperty(l)){let u=n[l],m=vY(e,Ct,l),p=Cne(e,t,u,m,a,c,i,r);s.attributes.push(p.attribute),o.attributePlans.push(p)}return s}function tFe(e,t,n,i,o,r){let s=new uwe,a=new vx(s);e._primitiveLoadPlans.push(a);let c=n.material;d(c)&&(s.material=jwe(e,t,t.materials[c],o,r));let l=g(n.extensions,g.EMPTY_OBJECT),u=!1,m=l.CESIUM_primitive_outline;e._loadPrimitiveOutline&&d(m)&&(u=!0,a.needsOutlines=!0,a.outlineIndices=nFe(e,t,m,a));let p=e._loadForClassification,y=l.KHR_draco_mesh_compression,f=!1,x=n.attributes;if(d(x)){for(let P in x)if(x.hasOwnProperty(P)){let v=x[P],F=vY(e,Ct,P),M=F.modelSemantic;if(p&&!Kwe(M))continue;M===Ct.FEATURE_ID&&(f=!0);let b=Cne(e,t,v,F,y,i,u,r);a.attributePlans.push(b),s.attributes.push(b.attribute)}}let _=n.targets;if(d(_)&&!p){let P=_.length;for(let v=0;v<P;++v)s.morphTargets.push(eFe(e,t,_[v],u,a,r))}let C=n.indices;if(d(C)){let P=Qwe(e,t,C,y,f,u,r);d(P)&&(a.indicesPlan=P,s.indices=P.indices)}let V=l.EXT_structural_metadata,L=l.EXT_mesh_features,Z=l.EXT_feature_metadata,G=d(Z);d(L)?iFe(e,t,s,L,o,r):G&&oFe(e,t,s,Z,o,r),d(V)?rFe(s,V):G&&sFe(e,s,Z);let X=n.mode;if(p&&X!==Fe.TRIANGLES)throw new me("Only triangle meshes can be used for classification.");return s.primitiveType=X,s}function nFe(e,t,n){let i=n.indices;return DM(e,t,i,!1)}function iFe(e,t,n,i,o,r){let s;d(i)&&d(i.featureIds)?s=i.featureIds:s=[];for(let a=0;a<s.length;a++){let c=s[a],l=`featureId_${a}`,u;d(c.texture)?u=qwe(e,t,c,o,r,l):d(c.attribute)?u=Vne(c,l):u=Rne(c,l),n.featureIds.push(u)}}function oFe(e,t,n,i,o,r){let s=t.extensions.EXT_feature_metadata.featureTables,a=0,c=i.featureIdAttributes;if(d(c)){let u=c.length;for(let m=0;m<u;++m){let p=c[m],y=p.featureTable,f=e._sortedPropertyTableIds.indexOf(y),x=s[y].count,_=`featureId_${a}`;a++;let C;d(p.featureIds.attribute)?C=Lne(p,f,x,_):C=Zne(p,f,x,_),n.featureIds.push(C)}}let l=i.featureIdTextures;if(d(l)){let u=l.length;for(let m=0;m<u;++m){let p=l[m],y=p.featureTable,f=e._sortedPropertyTableIds.indexOf(y),x=s[y].count,_=`featureId_${a}`;a++;let C=$we(e,t,p,f,o,r,x,_);n.featureIds.push(C)}}}function rFe(e,t){d(t)&&(d(t.propertyTextures)&&(e.propertyTextureIds=t.propertyTextures),d(t.propertyAttributes)&&(e.propertyAttributeIds=t.propertyAttributes))}function sFe(e,t,n){d(n.featureTextures)&&(t.propertyTextureIds=n.featureTextures.map(function(i){return e._sortedFeatureTextureIds.indexOf(i)}))}function aFe(e,t,n,i){let o=n.EXT_mesh_gpu_instancing,r=new mwe,s=o.attributes;if(d(s)){for(let u in s)if(s.hasOwnProperty(u)){let m=s[u];r.attributes.push(Jwe(e,t,m,s,u,i))}}let a=g(o.extensions,g.EMPTY_OBJECT),c=n.EXT_instance_features,l=a.EXT_feature_metadata;return d(c)?cFe(r,c):d(l)&&lFe(t,r,l,e._sortedPropertyTableIds),r}function cFe(e,t){let n=t.featureIds;for(let i=0;i<n.length;i++){let o=n[i],r=`instanceFeatureId_${i}`,s;d(o.attribute)?s=Vne(o,r):s=Rne(o,r),e.featureIds.push(s)}}function lFe(e,t,n,i){let o=e.extensions.EXT_feature_metadata.featureTables,r=n.featureIdAttributes;if(d(r)){let s=r.length;for(let a=0;a<s;++a){let c=r[a],l=c.featureTable,u=i.indexOf(l),m=o[l].count,p=`instanceFeatureId_${a}`,y;d(c.featureIds.attribute)?y=Lne(c,u,m,p):y=Zne(c,u,m,p),t.featureIds.push(y)}}}function dFe(e,t,n,i,o){let r=new fwe;r.name=n.name,r.matrix=iu(A,n.matrix),r.translation=iu(h,n.translation),r.rotation=iu(Ae,n.rotation),r.scale=iu(h,n.scale);let s=g(n.extensions,g.EMPTY_OBJECT),a=s.EXT_mesh_gpu_instancing,c=s.AGI_articulations;if(d(a)){if(e._loadForClassification)throw new me("Models with the EXT_mesh_gpu_instancing extension cannot be used for classification.");r.instances=aFe(e,t,s,o)}d(c)&&(r.articulationName=c.articulationName);let l=n.mesh;if(d(l)){let u=t.meshes[l],m=u.primitives,p=m.length;for(let _=0;_<p;++_)r.primitives.push(tFe(e,t,m[_],d(r.instances),i,o));let y=g(n.weights,u.weights),x=r.primitives[0].morphTargets.length;r.morphWeights=d(y)?y.slice():new Array(x).fill(0)}return r}function uFe(e,t,n,i){if(!d(t.nodes))return[];let o,r,s=t.nodes.length,a=new Array(s);for(o=0;o<s;++o){let c=dFe(e,t,t.nodes[o],n,i);c.index=o,a[o]=c}for(o=0;o<s;++o){let c=t.nodes[o].children;if(d(c)){let l=c.length;for(r=0;r<l;++r)a[o].children.push(a[c[r]])}}return a}function mFe(e,t,n,i){let o=new hwe,r=n.joints,s=r.length,a=new Array(s);for(let l=0;l<s;++l)a[l]=i[r[l]];o.joints=a;let c=n.inverseBindMatrices;return d(c)?o.inverseBindMatrices=DM(e,t,c):o.inverseBindMatrices=new Array(s).fill(A.IDENTITY),o}function hFe(e,t,n){let i=t.skins;if(e._loadForClassification||!d(i))return[];let o=t.skins.length,r=new Array(o);for(let a=0;a<o;++a){let c=mFe(e,t,t.skins[a],n);c.index=a,r[a]=c}let s=n.length;for(let a=0;a<s;++a){let c=t.nodes[a].skin;d(c)&&(n[a].skin=r[c])}return r}async function fFe(e,t,n,i,o,r){let s=new HE({gltf:t,extension:n,extensionLegacy:i,gltfResource:e._gltfResource,baseResource:e._baseResource,supportedImageFormats:o,frameState:r,asynchronous:e._asynchronous});return e._structuralMetadataLoader=s,s.load()}function pFe(e,t,n){let i=new bwe,o=n.input;i.input=DM(e,t,o);let r=n.interpolation;i.interpolation=g(Cm[r],Cm.LINEAR);let s=n.output;return i.output=DM(e,t,s,!0),i}function bFe(e,t){let n=new ywe,i=e.node;if(!d(i))return;n.node=t[i];let o=e.path.toUpperCase();return n.path=pwe[o],n}function yFe(e,t,n){let i=new gwe,o=e.sampler;return i.sampler=t[o],i.target=bFe(e.target,n),i}function gFe(e,t,n,i){let o,r=new xwe;r.name=n.name;let s=n.samplers,a=s.length,c=new Array(a);for(o=0;o<a;o++){let p=pFe(e,t,s[o]);p.index=o,c[o]=p}let l=n.channels,u=l.length,m=new Array(u);for(o=0;o<u;o++)m[o]=yFe(l[o],c,i);return r.samplers=c,r.channels=m,r}function xFe(e,t,n){let i=t.animations;if(e._loadForClassification||!d(i))return[];let o=t.animations.length,r=new Array(o);for(let s=0;s<o;++s){let a=gFe(e,t,t.animations[s],n);a.index=s,r[s]=a}return r}function _Fe(e){let t=new _we;t.name=e.name;let n=e.type.toUpperCase();return t.type=Ha[n],t.minimumValue=e.minimumValue,t.maximumValue=e.maximumValue,t.initialValue=e.initialValue,t}function TFe(e){let t=new Twe;t.name=e.name;let n=e.stages,i=n.length,o=new Array(i);for(let r=0;r<i;r++){let s=_Fe(n[r]);o[r]=s}return t.stages=o,t}function SFe(e){let n=g(e.extensions,g.EMPTY_OBJECT).AGI_articulations;if(!d(n))return[];let i=n.articulations;if(!d(i))return[];let o=i.length,r=new Array(o);for(let s=0;s<o;s++){let a=TFe(i[s]);r[s]=a}return r}function CFe(e){let t;return d(e.scenes)&&d(e.scene)&&(t=e.scenes[e.scene].nodes),t=g(t,e.nodes),t=d(t)?t:[],t}function VFe(e,t){let n=new Cwe,i=CFe(e);return n.nodes=i.map(function(o){return t[o]}),n}var LFe=new h;function RFe(e,t,n,i){let o=g(t.extensions,g.EMPTY_OBJECT),r=o.EXT_structural_metadata,s=o.EXT_feature_metadata,a=o.CESIUM_RTC;if(d(s)){let C=s.featureTables,V=s.featureTextures,L=d(C)?C:[],Z=d(V)?V:[];e._sortedPropertyTableIds=Object.keys(L).sort(),e._sortedFeatureTextureIds=Object.keys(Z).sort()}let c=uFe(e,t,n,i),l=hFe(e,t,c),u=xFe(e,t,c),m=SFe(t),p=VFe(t,c),y=new Vwe,f=new Swe,x=t.asset.copyright;if(d(x)){let C=x.split(";").map(function(V){return new St(V.trim())});f.credits=C}if(y.asset=f,y.scene=p,y.nodes=c,y.skins=l,y.animations=u,y.articulations=m,y.upAxis=e._upAxis,y.forwardAxis=e._forwardAxis,d(a)){let C=h.fromArray(a.center,0,LFe);y.transform=A.fromTranslation(C,y.transform)}if(e._components=y,d(r)||d(s)){let C=fFe(e,t,r,s,n,i);e._loaderPromises.push(C)}let _=[];return _.push.apply(_,e._loaderPromises),e._incrementallyLoadTextures||_.push.apply(_,e._texturesPromises),Promise.all(_)}function ZFe(e){let t=e._textureLoaders,n=t.length;for(let i=0;i<n;++i)t[i]=!t[i].isDestroyed()&&Bi.unload(t[i]);e._textureLoaders.length=0}function Gne(e){let t=e._bufferViewLoaders,n=t.length;for(let i=0;i<n;++i)t[i]=!t[i].isDestroyed()&&Bi.unload(t[i]);e._bufferViewLoaders.length=0}function GFe(e){let t=e._geometryLoaders,n=t.length;for(let i=0;i<n;++i)t[i]=!t[i].isDestroyed()&&Bi.unload(t[i]);e._geometryLoaders.length=0}function EFe(e){let t=e._postProcessBuffers,n=t.length;for(let i=0;i<n;i++){let o=t[i];o.isDestroyed()||o.destroy()}t.length=0}function XFe(e){d(e._structuralMetadataLoader)&&!e._structuralMetadataLoader.isDestroyed()&&(e._structuralMetadataLoader.destroy(),e._structuralMetadataLoader=void 0)}Vm.prototype.isUnloaded=function(){return this._state===Eo.UNLOADED};Vm.prototype.unload=function(){d(this._gltfJsonLoader)&&!this._gltfJsonLoader.isDestroyed()&&Bi.unload(this._gltfJsonLoader),this._gltfJsonLoader=void 0,ZFe(this),Gne(this),GFe(this),EFe(this),XFe(this),this._components=void 0,this._typedArray=void 0,this._state=Eo.UNLOADED};var Ep=Vm;var Gcn=T(S(),1);var Vcn=T(S(),1);var scn=T(S(),1);var Ian=T(S(),1);function wY(e,t,n){let i=e._gl;i.framebufferTexture2D(i.FRAMEBUFFER,t,n._target,n._texture,0)}function BM(e,t,n){let i=e._gl;i.framebufferRenderbuffer(i.FRAMEBUFFER,t,i.RENDERBUFFER,n._getRenderbuffer())}function Lm(e){e=g(e,g.EMPTY_OBJECT);let n=e.context._gl,i=kt.maximumColorAttachments;this._gl=n,this._framebuffer=n.createFramebuffer(),this._colorTextures=[],this._colorRenderbuffers=[],this._activeColorAttachments=[],this._depthTexture=void 0,this._depthRenderbuffer=void 0,this._stencilRenderbuffer=void 0,this._depthStencilTexture=void 0,this._depthStencilRenderbuffer=void 0,this.destroyAttachments=g(e.destroyAttachments,!0);let o=d(e.depthTexture)||d(e.depthRenderbuffer),r=d(e.depthStencilTexture)||d(e.depthStencilRenderbuffer);this._bind();let s,a,c,l,u;if(d(e.colorTextures)){let m=e.colorTextures;for(l=this._colorTextures.length=this._activeColorAttachments.length=m.length,c=0;c<l;++c)s=m[c],u=this._gl.COLOR_ATTACHMENT0+c,wY(this,u,s),this._activeColorAttachments[c]=u,this._colorTextures[c]=s}if(d(e.colorRenderbuffers)){let m=e.colorRenderbuffers;for(l=this._colorRenderbuffers.length=this._activeColorAttachments.length=m.length,c=0;c<l;++c)a=m[c],u=this._gl.COLOR_ATTACHMENT0+c,BM(this,u,a),this._activeColorAttachments[c]=u,this._colorRenderbuffers[c]=a}d(e.depthTexture)&&(s=e.depthTexture,wY(this,this._gl.DEPTH_ATTACHMENT,s),this._depthTexture=s),d(e.depthRenderbuffer)&&(a=e.depthRenderbuffer,BM(this,this._gl.DEPTH_ATTACHMENT,a),this._depthRenderbuffer=a),d(e.stencilRenderbuffer)&&(a=e.stencilRenderbuffer,BM(this,this._gl.STENCIL_ATTACHMENT,a),this._stencilRenderbuffer=a),d(e.depthStencilTexture)&&(s=e.depthStencilTexture,wY(this,this._gl.DEPTH_STENCIL_ATTACHMENT,s),this._depthStencilTexture=s),d(e.depthStencilRenderbuffer)&&(a=e.depthStencilRenderbuffer,BM(this,this._gl.DEPTH_STENCIL_ATTACHMENT,a),this._depthStencilRenderbuffer=a),this._unBind()}Object.defineProperties(Lm.prototype,{status:{get:function(){this._bind();let e=this._gl.checkFramebufferStatus(this._gl.FRAMEBUFFER);return this._unBind(),e}},numberOfColorAttachments:{get:function(){return this._activeColorAttachments.length}},depthTexture:{get:function(){return this._depthTexture}},depthRenderbuffer:{get:function(){return this._depthRenderbuffer}},stencilRenderbuffer:{get:function(){return this._stencilRenderbuffer}},depthStencilTexture:{get:function(){return this._depthStencilTexture}},depthStencilRenderbuffer:{get:function(){return this._depthStencilRenderbuffer}},hasDepthAttachment:{get:function(){return!!(this.depthTexture||this.depthRenderbuffer||this.depthStencilTexture||this.depthStencilRenderbuffer)}}});Lm.prototype._bind=function(){let e=this._gl;e.bindFramebuffer(e.FRAMEBUFFER,this._framebuffer)};Lm.prototype._unBind=function(){let e=this._gl;e.bindFramebuffer(e.FRAMEBUFFER,null)};Lm.prototype.bindDraw=function(){let e=this._gl;e.bindFramebuffer(e.DRAW_FRAMEBUFFER,this._framebuffer)};Lm.prototype.bindRead=function(){let e=this._gl;e.bindFramebuffer(e.READ_FRAMEBUFFER,this._framebuffer)};Lm.prototype._getActiveColorAttachments=function(){return this._activeColorAttachments};Lm.prototype.getColorTexture=function(e){return this._colorTextures[e]};Lm.prototype.getColorRenderbuffer=function(e){return this._colorRenderbuffers[e]};Lm.prototype.isDestroyed=function(){return!1};Lm.prototype.destroy=function(){if(this.destroyAttachments){let e=0,t=this._colorTextures,n=t.length;for(;e<n;++e){let o=t[e];d(o)&&o.destroy()}let i=this._colorRenderbuffers;for(n=i.length,e=0;e<n;++e){let o=i[e];d(o)&&o.destroy()}this._depthTexture=this._depthTexture&&this._depthTexture.destroy(),this._depthRenderbuffer=this._depthRenderbuffer&&this._depthRenderbuffer.destroy(),this._stencilRenderbuffer=this._stencilRenderbuffer&&this._stencilRenderbuffer.destroy(),this._depthStencilTexture=this._depthStencilTexture&&this._depthStencilTexture.destroy(),this._depthStencilRenderbuffer=this._depthStencilRenderbuffer&&this._depthStencilRenderbuffer.destroy()}return this._gl.deleteFramebuffer(this._framebuffer),ue(this)};var Os=Lm;var Man=T(S(),1);function BS(e){e=g(e,g.EMPTY_OBJECT);let t=e.context,n=e.width,i=e.height;this._width=n,this._height=i;let o=e.colorRenderbuffers,r=e.colorTextures;if(d(o)!==d(r))throw new fe("Both color renderbuffer and texture attachments must be provided.");let s=e.depthStencilRenderbuffer,a=e.depthStencilTexture;if(d(s)!==d(a))throw new fe("Both depth-stencil renderbuffer and texture attachments must be provided.");this._renderFramebuffer=new Os({context:t,colorRenderbuffers:o,depthStencilRenderbuffer:s,destroyAttachments:e.destroyAttachments}),this._colorFramebuffer=new Os({context:t,colorTextures:r,depthStencilTexture:a,destroyAttachments:e.destroyAttachments})}BS.prototype.getRenderFramebuffer=function(){return this._renderFramebuffer};BS.prototype.getColorFramebuffer=function(){return this._colorFramebuffer};BS.prototype.blitFramebuffers=function(e,t){this._renderFramebuffer.bindRead(),this._colorFramebuffer.bindDraw();let n=e._gl,i=0;this._colorFramebuffer._colorTextures.length>0&&(i|=n.COLOR_BUFFER_BIT),d(this._colorFramebuffer.depthStencilTexture)&&(i|=n.DEPTH_BUFFER_BIT|(t?n.STENCIL_BUFFER_BIT:0)),n.blitFramebuffer(0,0,this._width,this._height,0,0,this._width,this._height,i,n.NEAREST),n.bindFramebuffer(n.READ_FRAMEBUFFER,null),n.bindFramebuffer(n.DRAW_FRAMEBUFFER,null)};BS.prototype.isDestroyed=function(){return!1};BS.prototype.destroy=function(){return this._renderFramebuffer.destroy(),this._colorFramebuffer.destroy(),ue(this)};var JE=BS;var zan=T(S(),1);var kan=T(S(),1);var Tl={RGBA4:ne.RGBA4,RGBA8:ne.RGBA8,RGBA16F:ne.RGBA16F,RGBA32F:ne.RGBA32F,RGB5_A1:ne.RGB5_A1,RGB565:ne.RGB565,DEPTH_COMPONENT16:ne.DEPTH_COMPONENT16,STENCIL_INDEX8:ne.STENCIL_INDEX8,DEPTH_STENCIL:ne.DEPTH_STENCIL,DEPTH24_STENCIL8:ne.DEPTH24_STENCIL8,validate:function(e){return e===Tl.RGBA4||e===Tl.RGBA8||e===Tl.RGBA16F||e===Tl.RGBA32F||e===Tl.RGB5_A1||e===Tl.RGB565||e===Tl.DEPTH_COMPONENT16||e===Tl.STENCIL_INDEX8||e===Tl.DEPTH_STENCIL||e===Tl.DEPTH24_STENCIL8},getColorFormat:function(e){return e===ne.FLOAT?Tl.RGBA32F:e===ne.HALF_FLOAT_OES?Tl.RGBA16F:Tl.RGBA8}},Wc=Object.freeze(Tl);function QE(e){e=g(e,g.EMPTY_OBJECT);let n=e.context._gl,i=kt.maximumRenderbufferSize,o=g(e.format,Wc.RGBA4),r=d(e.width)?e.width:n.drawingBufferWidth,s=d(e.height)?e.height:n.drawingBufferHeight,a=g(e.numSamples,1);this._gl=n,this._format=o,this._width=r,this._height=s,this._renderbuffer=this._gl.createRenderbuffer(),n.bindRenderbuffer(n.RENDERBUFFER,this._renderbuffer),a>1?n.renderbufferStorageMultisample(n.RENDERBUFFER,a,o,r,s):n.renderbufferStorage(n.RENDERBUFFER,o,r,s),n.bindRenderbuffer(n.RENDERBUFFER,null)}Object.defineProperties(QE.prototype,{format:{get:function(){return this._format}},width:{get:function(){return this._width}},height:{get:function(){return this._height}}});QE.prototype._getRenderbuffer=function(){return this._renderbuffer};QE.prototype.isDestroyed=function(){return!1};QE.prototype.destroy=function(){return this._gl.deleteRenderbuffer(this._renderbuffer),ue(this)};var ed=QE;function ss(e){e=g(e,g.EMPTY_OBJECT),this._numSamples=g(e.numSamples,1),this._colorAttachmentsLength=g(e.colorAttachmentsLength,1),this._color=g(e.color,!0),this._depth=g(e.depth,!1),this._depthStencil=g(e.depthStencil,!1),this._supportsDepthTexture=g(e.supportsDepthTexture,!1),this._createColorAttachments=g(e.createColorAttachments,!0),this._createDepthAttachments=g(e.createDepthAttachments,!0),this._pixelDatatype=e.pixelDatatype,this._pixelFormat=e.pixelFormat,this._width=void 0,this._height=void 0,this._framebuffer=void 0,this._multisampleFramebuffer=void 0,this._colorTextures=void 0,this._color&&(this._colorTextures=new Array(this._colorAttachmentsLength),this._colorRenderbuffers=new Array(this._colorAttachmentsLength)),this._colorRenderbuffer=void 0,this._depthStencilRenderbuffer=void 0,this._depthStencilTexture=void 0,this._depthRenderbuffer=void 0,this._depthTexture=void 0,this._attachmentsDirty=!1}Object.defineProperties(ss.prototype,{framebuffer:{get:function(){return this._numSamples>1?this._multisampleFramebuffer.getRenderFramebuffer():this._framebuffer}},numSamples:{get:function(){return this._numSamples}},status:{get:function(){return this.framebuffer.status}}});ss.prototype.isDirty=function(e,t,n,i,o){n=g(n,1);let r=this._width!==e||this._height!==t,s=this._numSamples!==n,a=d(i)&&this._pixelDatatype!==i||d(o)&&this._pixelFormat!==o,c=n===1?d(this._framebuffer):d(this._multisampleFramebuffer);return this._attachmentsDirty||r||s||a||!c||this._color&&!d(this._colorTextures[0])};ss.prototype.update=function(e,t,n,i,o,r){if(i=e.msaa?g(i,1):1,o=g(o,this._color?g(this._pixelDatatype,Je.UNSIGNED_BYTE):void 0),r=g(r,this._color?g(this._pixelFormat,st.RGBA):void 0),this.isDirty(t,n,i,o,r)){if(this.destroy(),this._width=t,this._height=n,this._numSamples=i,this._pixelDatatype=o,this._pixelFormat=r,this._attachmentsDirty=!1,this._color&&this._createColorAttachments){for(let s=0;s<this._colorAttachmentsLength;++s)if(this._colorTextures[s]=new Wt({context:e,width:t,height:n,pixelFormat:r,pixelDatatype:o,sampler:un.NEAREST}),this._numSamples>1){let a=Wc.getColorFormat(o);this._colorRenderbuffers[s]=new ed({context:e,width:t,height:n,format:a,numSamples:this._numSamples})}}this._depthStencil&&this._createDepthAttachments&&(this._supportsDepthTexture&&e.depthTexture?(this._depthStencilTexture=new Wt({context:e,width:t,height:n,pixelFormat:st.DEPTH_STENCIL,pixelDatatype:Je.UNSIGNED_INT_24_8,sampler:un.NEAREST}),this._numSamples>1&&(this._depthStencilRenderbuffer=new ed({context:e,width:t,height:n,format:Wc.DEPTH24_STENCIL8,numSamples:this._numSamples}))):this._depthStencilRenderbuffer=new ed({context:e,width:t,height:n,format:Wc.DEPTH_STENCIL})),this._depth&&this._createDepthAttachments&&(this._supportsDepthTexture&&e.depthTexture?this._depthTexture=new Wt({context:e,width:t,height:n,pixelFormat:st.DEPTH_COMPONENT,pixelDatatype:Je.UNSIGNED_INT,sampler:un.NEAREST}):this._depthRenderbuffer=new ed({context:e,width:t,height:n,format:Wc.DEPTH_COMPONENT16})),this._numSamples>1?this._multisampleFramebuffer=new JE({context:e,width:this._width,height:this._height,colorTextures:this._colorTextures,colorRenderbuffers:this._colorRenderbuffers,depthStencilTexture:this._depthStencilTexture,depthStencilRenderbuffer:this._depthStencilRenderbuffer,destroyAttachments:!1}):this._framebuffer=new Os({context:e,colorTextures:this._colorTextures,depthTexture:this._depthTexture,depthRenderbuffer:this._depthRenderbuffer,depthStencilTexture:this._depthStencilTexture,depthStencilRenderbuffer:this._depthStencilRenderbuffer,destroyAttachments:!1})}};ss.prototype.getColorTexture=function(e){return e=g(e,0),this._colorTextures[e]};ss.prototype.setColorTexture=function(e,t){t=g(t,0),this._attachmentsDirty=e!==this._colorTextures[t],this._colorTextures[t]=e};ss.prototype.getColorRenderbuffer=function(e){return e=g(e,0),this._colorRenderbuffers[e]};ss.prototype.setColorRenderbuffer=function(e,t){t=g(t,0),this._attachmentsDirty=e!==this._colorRenderbuffers[t],this._colorRenderbuffers[t]=e};ss.prototype.getDepthRenderbuffer=function(){return this._depthRenderbuffer};ss.prototype.setDepthRenderbuffer=function(e){this._attachmentsDirty=e!==this._depthRenderbuffer,this._depthRenderbuffer=e};ss.prototype.getDepthTexture=function(){return this._depthTexture};ss.prototype.setDepthTexture=function(e){this._attachmentsDirty=e!==this._depthTexture,this._depthTexture=e};ss.prototype.getDepthStencilRenderbuffer=function(){return this._depthStencilRenderbuffer};ss.prototype.setDepthStencilRenderbuffer=function(e){this._attachmentsDirty=e!==this._depthStencilRenderbuffer,this._depthStencilRenderbuffer=e};ss.prototype.getDepthStencilTexture=function(){return this._depthStencilTexture};ss.prototype.setDepthStencilTexture=function(e){this._attachmentsDirty=e!==this._depthStencilTexture,this._depthStencilTexture=e};ss.prototype.prepareTextures=function(e,t){this._numSamples>1&&this._multisampleFramebuffer.blitFramebuffers(e,t)};ss.prototype.clear=function(e,t,n){let i=t.framebuffer;t.framebuffer=this.framebuffer,t.execute(e,n),t.framebuffer=i};ss.prototype.destroyFramebuffer=function(){this._framebuffer=this._framebuffer&&this._framebuffer.destroy(),this._multisampleFramebuffer=this._multisampleFramebuffer&&this._multisampleFramebuffer.destroy()};ss.prototype.destroy=function(){if(this._color){let e,t=this._colorTextures.length;for(e=0;e<t;++e){let n=this._colorTextures[e];this._createColorAttachments&&d(n)&&!n.isDestroyed()&&(this._colorTextures[e].destroy(),this._colorTextures[e]=void 0),d(n)&&n.isDestroyed()&&(this._colorTextures[e]=void 0);let i=this._colorRenderbuffers[e];this._createColorAttachments&&d(i)&&!i.isDestroyed()&&(this._colorRenderbuffers[e].destroy(),this._colorRenderbuffers[e]=void 0),d(i)&&i.isDestroyed()&&(this._colorRenderbuffers[e]=void 0)}}this._depthStencil&&(this._createDepthAttachments&&(this._depthStencilTexture=this._depthStencilTexture&&this._depthStencilTexture.destroy(),this._depthStencilRenderbuffer=this._depthStencilRenderbuffer&&this._depthStencilRenderbuffer.destroy()),d(this._depthStencilTexture)&&this._depthStencilTexture.isDestroyed()&&(this._depthStencilTexture=void 0),d(this._depthStencilRenderbuffer)&&this._depthStencilRenderbuffer.isDestroyed()&&(this._depthStencilRenderbuffer=void 0)),this._depth&&(this._createDepthAttachments&&(this._depthTexture=this._depthTexture&&this._depthTexture.destroy(),this._depthRenderbuffer=this._depthRenderbuffer&&this._depthRenderbuffer.destroy()),d(this._depthTexture)&&this._depthTexture.isDestroyed()&&(this._depthTexture=void 0),d(this._depthRenderbuffer)&&this._depthRenderbuffer.isDestroyed()&&(this._depthRenderbuffer=void 0)),this.destroyFramebuffer()};var mi=ss;var ccn=T(S(),1),jE=`uniform sampler2D u_pointCloud_colorGBuffer;
  5304. uniform sampler2D u_pointCloud_depthGBuffer;
  5305. uniform vec2 u_distanceAndEdlStrength;
  5306. in vec2 v_textureCoordinates;
  5307. vec2 neighborContribution(float log2Depth, vec2 offset)
  5308. {
  5309. float dist = u_distanceAndEdlStrength.x;
  5310. vec2 texCoordOrig = v_textureCoordinates + offset * dist;
  5311. vec2 texCoord0 = v_textureCoordinates + offset * floor(dist);
  5312. vec2 texCoord1 = v_textureCoordinates + offset * ceil(dist);
  5313. float depthOrLogDepth0 = czm_unpackDepth(texture(u_pointCloud_depthGBuffer, texCoord0));
  5314. float depthOrLogDepth1 = czm_unpackDepth(texture(u_pointCloud_depthGBuffer, texCoord1));
  5315. // ignore depth values that are the clear depth
  5316. if (depthOrLogDepth0 == 0.0 || depthOrLogDepth1 == 0.0) {
  5317. return vec2(0.0);
  5318. }
  5319. // interpolate the two adjacent depth values
  5320. float depthMix = mix(depthOrLogDepth0, depthOrLogDepth1, fract(dist));
  5321. vec4 eyeCoordinate = czm_windowToEyeCoordinates(texCoordOrig, depthMix);
  5322. return vec2(max(0.0, log2Depth - log2(-eyeCoordinate.z / eyeCoordinate.w)), 1.0);
  5323. }
  5324. void main()
  5325. {
  5326. float depthOrLogDepth = czm_unpackDepth(texture(u_pointCloud_depthGBuffer, v_textureCoordinates));
  5327. vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, depthOrLogDepth);
  5328. eyeCoordinate /= eyeCoordinate.w;
  5329. float log2Depth = log2(-eyeCoordinate.z);
  5330. if (depthOrLogDepth == 0.0) // 0.0 is the clear value for the gbuffer
  5331. {
  5332. discard;
  5333. }
  5334. vec4 color = texture(u_pointCloud_colorGBuffer, v_textureCoordinates);
  5335. // sample from neighbors left, right, down, up
  5336. vec2 texelSize = 1.0 / czm_viewport.zw;
  5337. vec2 responseAndCount = vec2(0.0);
  5338. responseAndCount += neighborContribution(log2Depth, vec2(-texelSize.x, 0.0));
  5339. responseAndCount += neighborContribution(log2Depth, vec2(+texelSize.x, 0.0));
  5340. responseAndCount += neighborContribution(log2Depth, vec2(0.0, -texelSize.y));
  5341. responseAndCount += neighborContribution(log2Depth, vec2(0.0, +texelSize.y));
  5342. float response = responseAndCount.x / responseAndCount.y;
  5343. float strength = u_distanceAndEdlStrength.y;
  5344. float shade = exp(-response * 300.0 * strength);
  5345. color.rgb *= shade;
  5346. out_FragColor = vec4(color);
  5347. // Input and output depth are the same.
  5348. gl_FragDepth = depthOrLogDepth;
  5349. }
  5350. `;function YS(){this._framebuffer=new mi({colorAttachmentsLength:2,depth:!0,supportsDepthTexture:!0}),this._drawCommand=void 0,this._clearCommand=void 0,this._strength=1,this._radius=1}Object.defineProperties(YS.prototype,{framebuffer:{get:function(){return this._framebuffer.framebuffer}},colorGBuffer:{get:function(){return this._framebuffer.getColorTexture(0)}},depthGBuffer:{get:function(){return this._framebuffer.getColorTexture(1)}}});function IFe(e){e._framebuffer.destroy(),e._drawCommand=void 0,e._clearCommand=void 0}var FY=new D;function WFe(e,t){let n=new Ye({defines:["LOG_DEPTH_WRITE"],sources:[jE]}),i={u_pointCloud_colorGBuffer:function(){return e.colorGBuffer},u_pointCloud_depthGBuffer:function(){return e.depthGBuffer},u_distanceAndEdlStrength:function(){return FY.x=e._radius,FY.y=e._strength,FY}},o=De.fromCache({blending:dn.ALPHA_BLEND,depthMask:!0,depthTest:{enabled:!0},stencilTest:Ft.setCesium3DTileBit(),stencilMask:Ft.CESIUM_3D_TILE_MASK});e._drawCommand=t.createViewportQuadCommand(n,{uniformMap:i,renderState:o,pass:Re.CESIUM_3D_TILE,owner:e}),e._clearCommand=new oi({framebuffer:e.framebuffer,color:new Y(0,0,0,0),depth:1,renderState:De.fromCache(),pass:Re.CESIUM_3D_TILE,owner:e})}function PFe(e,t){let n=t.drawingBufferWidth,i=t.drawingBufferHeight;e._framebuffer.update(t,n,i),WFe(e,t)}function Ene(e){return e.drawBuffers&&e.fragmentDepth}YS.isSupported=Ene;function vFe(e,t){let n=e.shaderCache.getDerivedShaderProgram(t,"EC");if(!d(n)){let i=t._attributeLocations,o=t.fragmentShaderSource.clone();o.sources.splice(0,0,`layout (location = 0) out vec4 out_FragData_0;
  5351. layout (location = 1) out vec4 out_FragData_1;`),o.sources=o.sources.map(function(r){return r=Ye.replaceMain(r,"czm_point_cloud_post_process_main"),r=r.replaceAll(/out_FragColor/g,"out_FragData_0"),r}),o.sources.push(`void main()
  5352. {
  5353. czm_point_cloud_post_process_main();
  5354. #ifdef LOG_DEPTH
  5355. czm_writeLogDepth();
  5356. out_FragData_1 = czm_packDepth(gl_FragDepth);
  5357. #else
  5358. out_FragData_1 = czm_packDepth(gl_FragCoord.z);
  5359. #endif
  5360. }`),n=e.shaderCache.createDerivedShaderProgram(t,"EC",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:o,attributeLocations:i})}return n}YS.prototype.update=function(e,t,n,i){if(!Ene(e.context))return;this._strength=n.eyeDomeLightingStrength,this._radius=n.eyeDomeLightingRadius*e.pixelRatio,PFe(this,e.context);let o,r=e.commandList,s=r.length;for(o=t;o<s;++o){let l=r[o];if(l.primitiveType!==Fe.POINTS||l.pass===Re.TRANSLUCENT)continue;let u,m,p=l.derivedCommands.pointCloudProcessor;d(p)&&(u=p.command,m=p.originalShaderProgram),(!d(u)||l.dirty||m!==l.shaderProgram||u.framebuffer!==this.framebuffer)&&(u=nt.shallowClone(l,u),u.framebuffer=this.framebuffer,u.shaderProgram=vFe(e.context,l.shaderProgram),u.castShadows=!1,u.receiveShadows=!1,d(p)||(p={command:u,originalShaderProgram:l.shaderProgram},l.derivedCommands.pointCloudProcessor=p),p.originalShaderProgram=l.shaderProgram),r[o]=u}let a=this._clearCommand,c=this._drawCommand;c.boundingVolume=i,r.push(c),r.push(a)};YS.prototype.isDestroyed=function(){return!1};YS.prototype.destroy=function(){return IFe(this),ue(this)};var Xp=YS;function Xne(e){let t=g(e,{});this.attenuation=g(t.attenuation,!1),this.geometricErrorScale=g(t.geometricErrorScale,1),this.maximumAttenuation=t.maximumAttenuation,this.baseResolution=t.baseResolution,this.eyeDomeLighting=g(t.eyeDomeLighting,!0),this.eyeDomeLightingStrength=g(t.eyeDomeLightingStrength,1),this.eyeDomeLightingRadius=g(t.eyeDomeLightingRadius,1),this.backFaceCulling=g(t.backFaceCulling,!1),this.normalShading=g(t.normalShading,!0)}Xne.isSupported=function(e){return Xp.isSupported(e.context)};var Kh=Xne;var Dcn=T(S(),1);var ya={},wFe=new se(0,0,0,1),Ja=new se,FFe=new He,AY=new D,MY=new D;ya.wgs84ToWindowCoordinates=function(e,t,n){return ya.wgs84WithEyeOffsetToWindowCoordinates(e,t,h.ZERO,n)};var Ine=new se,Wne=new h;function qE(e,t,n,i){let o=n.viewMatrix,r=A.multiplyByVector(o,se.fromElements(e.x,e.y,e.z,1,Ine),Ine),s=h.multiplyComponents(t,h.normalize(r,Wne),Wne);return r.x+=t.x+s.x,r.y+=t.y+s.y,r.z+=s.z,A.multiplyByVector(n.frustum.projectionMatrix,r,i)}var AFe=new he(Math.PI,W.PI_OVER_TWO),MFe=new h,NFe=new h;ya.wgs84WithEyeOffsetToWindowCoordinates=function(e,t,n,i){let o=e.frameState,r=ya.computeActualWgs84Position(o,t,wFe);if(!d(r))return;let s=e.canvas,a=FFe;a.x=0,a.y=0,a.width=s.clientWidth,a.height=s.clientHeight;let c=e.camera,l=!1;if(o.mode===ie.SCENE2D){let u=e.mapProjection,m=AFe,p=u.project(m,MFe),y=h.clone(c.position,NFe),f=c.frustum.clone(),x=A.computeViewportTransformation(a,0,1,new A),_=c.frustum.projectionMatrix,C=c.positionWC.y,V=h.fromElements(W.sign(C)*p.x-C,0,-c.positionWC.x),L=vt.pointToGLWindowCoordinates(_,x,V);if(C===0||L.x<=0||L.x>=s.clientWidth)l=!0;else{if(L.x>s.clientWidth*.5){a.width=L.x,c.frustum.right=p.x-C,Ja=qE(r,n,c,Ja),ya.clipToGLWindowCoordinates(a,Ja,AY),a.x+=L.x,c.position.x=-c.position.x;let Z=c.frustum.right;c.frustum.right=-c.frustum.left,c.frustum.left=-Z,Ja=qE(r,n,c,Ja),ya.clipToGLWindowCoordinates(a,Ja,MY)}else{a.x+=L.x,a.width-=L.x,c.frustum.left=-p.x-C,Ja=qE(r,n,c,Ja),ya.clipToGLWindowCoordinates(a,Ja,AY),a.x=a.x-a.width,c.position.x=-c.position.x;let Z=c.frustum.left;c.frustum.left=-c.frustum.right,c.frustum.right=-Z,Ja=qE(r,n,c,Ja),ya.clipToGLWindowCoordinates(a,Ja,MY)}h.clone(y,c.position),c.frustum=f.clone(),i=D.clone(AY,i),(i.x<0||i.x>s.clientWidth)&&(i.x=MY.x)}}if(o.mode!==ie.SCENE2D||l){if(Ja=qE(r,n,c,Ja),Ja.z<0&&!(c.frustum instanceof en)&&!(c.frustum instanceof yr))return;i=ya.clipToGLWindowCoordinates(a,Ja,i)}return i.y=s.clientHeight-i.y,i};ya.wgs84ToDrawingBufferCoordinates=function(e,t,n){if(n=ya.wgs84ToWindowCoordinates(e,t,n),!!d(n))return ya.transformWindowToDrawingBuffer(e,n,n)};var Ip=new h,UFe=new he;ya.computeActualWgs84Position=function(e,t,n){let i=e.mode;if(i===ie.SCENE3D)return h.clone(t,n);let o=e.mapProjection,r=o.ellipsoid.cartesianToCartographic(t,UFe);if(!d(r))return;if(o.project(r,Ip),i===ie.COLUMBUS_VIEW)return h.fromElements(Ip.z,Ip.x,Ip.y,n);if(i===ie.SCENE2D)return h.fromElements(0,Ip.x,Ip.y,n);let s=e.morphTime;return h.fromElements(W.lerp(Ip.z,t.x,s),W.lerp(Ip.x,t.y,s),W.lerp(Ip.y,t.z,s),n)};var Pne=new h,vne=new h,wne=new A;ya.clipToGLWindowCoordinates=function(e,t,n){return h.divideByScalar(t,t.w,Pne),A.computeViewportTransformation(e,0,1,wne),A.multiplyByPoint(wne,Pne,vne),D.fromCartesian3(vne,n)};ya.transformWindowToDrawingBuffer=function(e,t,n){let i=e.canvas,o=e.drawingBufferWidth/i.clientWidth,r=e.drawingBufferHeight/i.clientHeight;return D.fromElements(t.x*o,t.y*r,n)};var kFe=new se,Fne=new se;ya.drawingBufferToWgs84Coordinates=function(e,t,n,i){let r=e.context.uniformState,s=r.currentFrustum,a=s.x,c=s.y;if(e.frameState.useLogDepth){let y=n*r.log2FarDepthFromNearPlusOne,f=Math.pow(2,y)-1;n=c*(1-a/(f+a))/(c-a)}let l=e.view.passState.viewport,u=se.clone(se.UNIT_W,kFe);u.x=(t.x-l.x)/l.width*2-1,u.y=(t.y-l.y)/l.height*2-1,u.z=n*2-1,u.w=1;let m,p=e.camera.frustum;if(d(p.fovy)){m=A.multiplyByVector(r.inverseViewProjection,u,Fne);let y=1/m.w;h.multiplyByScalar(m,y,m)}else{let y=p.offCenterFrustum;d(y)&&(p=y),m=Fne,m.x=(u.x*(p.right-p.left)+p.left+p.right)*.5,m.y=(u.y*(p.top-p.bottom)+p.bottom+p.top)*.5,m.z=(u.z*(a-c)-a-c)*.5,m.w=1,m=A.multiplyByVector(r.inverseView,m,m)}return h.fromCartesian4(m,i)};var Ji=ya;var Ycn=T(S(),1),DFe={LEFT:-1,NONE:0,RIGHT:1},Pc=Object.freeze(DFe);var Nln=T(S(),1);var Qcn=T(S(),1);var OS={};OS._deprecationWarning=Qr;var Wp=Uint32Array.BYTES_PER_ELEMENT;OS.parse=function(e,t){let n=g(t,0);t=n;let i=new Uint8Array(e),o=new DataView(e);t+=Wp;let r=o.getUint32(t,!0);if(r!==1)throw new me(`Only Batched 3D Model version 1 is supported. Version ${r} is not.`);t+=Wp;let s=o.getUint32(t,!0);t+=Wp;let a=o.getUint32(t,!0);t+=Wp;let c=o.getUint32(t,!0);t+=Wp;let l=o.getUint32(t,!0);t+=Wp;let u=o.getUint32(t,!0);t+=Wp;let m;l>=570425344?(t-=Wp*2,m=a,l=c,u=0,a=0,c=0,OS._deprecationWarning("b3dm-legacy-header","This b3dm header is using the legacy format [batchLength] [batchTableByteLength]. The new format is [featureTableJsonByteLength] [featureTableBinaryByteLength] [batchTableJsonByteLength] [batchTableBinaryByteLength] from https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/Batched3DModel.")):u>=570425344&&(t-=Wp,m=l,l=a,u=c,a=0,c=0,OS._deprecationWarning("b3dm-legacy-header","This b3dm header is using the legacy format [batchTableJsonByteLength] [batchTableBinaryByteLength] [batchLength]. The new format is [featureTableJsonByteLength] [featureTableBinaryByteLength] [batchTableJsonByteLength] [batchTableBinaryByteLength] from https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/Batched3DModel."));let p;a===0?p={BATCH_LENGTH:g(m,0)}:(p=Go(i,t,a),t+=a);let y=new Uint8Array(e,t,c);t+=c;let f,x;l>0&&(f=Go(i,t,l),t+=l,u>0&&(x=new Uint8Array(e,t,u),x=new Uint8Array(x),t+=u));let _=n+s-t;if(_===0)throw new me("glTF byte length must be greater than 0.");let C;return t%4===0?C=new Uint8Array(e,t,_):(OS._deprecationWarning("b3dm-glb-unaligned","The embedded glb is not aligned to a 4-byte boundary."),C=new Uint8Array(i.subarray(t,t+_))),{batchLength:m,featureTableJson:p,featureTableBinary:y,batchTableJson:f,batchTableBinary:x,gltf:C}};var $E=OS;var tln=T(S(),1);function eX(e,t){this.json=e,this.buffer=t,this._cachedTypedArrays={},this.featuresLength=0}function Ane(e,t,n,i,o,r){let s=e._cachedTypedArrays,a=s[t];return d(a)||(a=Q.createArrayBufferView(n,e.buffer.buffer,e.buffer.byteOffset+r,o*i),s[t]=a),a}function BFe(e,t,n,i){let o=e._cachedTypedArrays,r=o[t];return d(r)||(r=Q.createTypedArray(n,i),o[t]=r),r}eX.prototype.getGlobalProperty=function(e,t,n){let i=this.json[e];if(d(i))return d(i.byteOffset)?(t=g(t,Q.UNSIGNED_INT),n=g(n,1),Ane(this,e,t,n,1,i.byteOffset)):i};eX.prototype.hasProperty=function(e){return d(this.json[e])};eX.prototype.getPropertyArray=function(e,t,n){let i=this.json[e];if(d(i))return d(i.byteOffset)?(d(i.componentType)&&(t=Q.fromName(i.componentType)),Ane(this,e,t,n,this.featuresLength,i.byteOffset)):BFe(this,e,t,i)};eX.prototype.getProperty=function(e,t,n,i,o){let r=this.json[e];if(!d(r))return;let s=this.getPropertyArray(e,t,n);if(n===1)return s[i];for(let a=0;a<n;++a)o[a]=s[n*i+a];return o};var Rm=eX;var _ln=T(S(),1);function tX(e){let t=e.count,n=e.batchTable,i=e.binaryBody,o=g(e.parseAsPropertyAttributes,!1),r=e.customAttributeOutput,s=YFe(n),a;d(s.jsonProperties)&&(a=new Zp({count:t,properties:s.jsonProperties}));let c;d(s.hierarchy)&&(c=new mx({extension:s.hierarchy,binaryBody:i}));let l=xm.BATCH_TABLE_CLASS_NAME,u=s.binaryProperties,m,p,y;if(o){let _=KFe(t,l,u,i,r);y=_.transcodedSchema,p=[new Wx({propertyAttribute:_.propertyAttributeJson,class:_.transcodedClass})]}else{let _=OFe(t,l,u,i);y=_.transcodedSchema;let C=_.featureTableJson;m=new pl({count:C.count,properties:C.properties,class:_.transcodedClass,bufferViews:_.bufferViewsTypedArrays}),p=[]}let f=[];if(d(m)||d(a)||d(c)){let _=new Ic({id:0,name:"Batch Table",count:t,metadataTable:m,jsonMetadataTable:a,batchTableHierarchy:c});f.push(_)}let x={schema:y,propertyTables:f,propertyAttributes:p,extensions:s.extensions,extras:s.extras};return new ba(x)}function YFe(e){let t=e.HIERARCHY,n=e.extras,i=e.extensions,o;d(t)?(tX._deprecationWarning("batchTableHierarchyExtension","The batch table HIERARCHY property has been moved to an extension. Use extensions.3DTILES_batch_table_hierarchy instead."),o=t):d(i)&&(o=i["3DTILES_batch_table_hierarchy"]);let r,s={};for(let a in e){if(!e.hasOwnProperty(a)||a==="HIERARCHY"||a==="extensions"||a==="extras")continue;let c=e[a];Array.isArray(c)?(r=d(r)?r:{},r[a]=c):s[a]=c}return{binaryProperties:s,jsonProperties:r,hierarchy:o,extras:n,extensions:i}}function OFe(e,t,n,i){let o={},r={},s={},a=0;for(let m in n){if(!n.hasOwnProperty(m))continue;if(!d(i))throw new me(`Property ${m} requires a batch table binary.`);let p=n[m],y=jl(p);r[m]={bufferView:a},o[m]=Mne(p),s[a]=y.createArrayBufferView(i.buffer,i.byteOffset+p.byteOffset,e),a++}let c={classes:{}};c.classes[t]={properties:o};let l=_m.fromJson(c);return{featureTableJson:{class:t,count:e,properties:r},bufferViewsTypedArrays:s,transcodedSchema:l,transcodedClass:l.classes[t]}}function KFe(e,t,n,i,o){let r={},s={},a=0;for(let m in n){if(!n.hasOwnProperty(m))continue;let p=n[m];if(!d(i)&&!d(p.typedArray))throw new me(`Property ${m} requires a batch table binary.`);let y=nn.sanitizeGlslIdentifier(m);(y===""||r.hasOwnProperty(y))&&(y=`property_${a}`,a++);let f=Mne(p);f.name=m,r[y]=f;let x=y.toUpperCase();x.startsWith("_")||(x=`_${x}`);let _=p.typedArray;d(_)||(_=jl(p).createArrayBufferView(i.buffer,i.byteOffset+p.byteOffset,e));let C=new wt.Attribute;C.name=x,C.count=e,C.type=p.type;let V=Q.fromTypedArray(_);(V===Q.INT||V===Q.UNSIGNED_INT||V===Q.DOUBLE)&&(tX._oneTimeWarning("Cast pnts property to floats",`Point cloud property "${x}" will be cast to a float array because INT, UNSIGNED_INT, and DOUBLE are not valid WebGL vertex attribute types. Some precision may be lost.`),_=new Float32Array(_)),C.componentDatatype=Q.fromTypedArray(_),C.typedArray=_,o.push(C),s[y]={attribute:x}}let c={classes:{}};c.classes[t]={properties:r};let l=_m.fromJson(c);return{class:t,propertyAttributeJson:{properties:s},transcodedSchema:l,transcodedClass:l.classes[t]}}function Mne(e){let t=HFe(e.componentType);return{type:e.type,componentType:t}}function HFe(e){switch(e){case"BYTE":return"INT8";case"UNSIGNED_BYTE":return"UINT8";case"SHORT":return"INT16";case"UNSIGNED_SHORT":return"UINT16";case"INT":return"INT32";case"UNSIGNED_INT":return"UINT32";case"FLOAT":return"FLOAT32";case"DOUBLE":return"FLOAT64"}}tX._deprecationWarning=Qr;tX._oneTimeWarning=Pt;var Pp=tX;var wx={UNLOADED:0,LOADING:1,PROCESSING:2,READY:3,FAILED:4},zFe=wt.FeatureIdAttribute;function wb(e){e=g(e,g.EMPTY_OBJECT);let t=e.b3dmResource,n=e.baseResource,i=e.arrayBuffer,o=g(e.byteOffset,0),r=g(e.releaseGltfJson,!1),s=g(e.asynchronous,!0),a=g(e.incrementallyLoadTextures,!0),c=g(e.upAxis,Zo.Y),l=g(e.forwardAxis,Zo.X),u=g(e.loadAttributesAsTypedArray,!1),m=g(e.loadAttributesFor2D,!1),p=g(e.loadIndicesForWireframe,!1),y=g(e.loadPrimitiveOutline,!0),f=g(e.loadForClassification,!1);n=d(n)?n:t.clone(),this._b3dmResource=t,this._baseResource=n,this._arrayBuffer=i,this._byteOffset=o,this._releaseGltfJson=r,this._asynchronous=s,this._incrementallyLoadTextures=a,this._upAxis=c,this._forwardAxis=l,this._loadAttributesAsTypedArray=u,this._loadAttributesFor2D=m,this._loadIndicesForWireframe=p,this._loadPrimitiveOutline=y,this._loadForClassification=f,this._state=wx.UNLOADED,this._promise=void 0,this._gltfLoader=void 0,this._batchLength=0,this._propertyTable=void 0,this._batchTable=void 0,this._components=void 0,this._transform=A.IDENTITY}d(Object.create)&&(wb.prototype=Object.create(oo.prototype),wb.prototype.constructor=wb);Object.defineProperties(wb.prototype,{texturesLoaded:{get:function(){return this._gltfLoader?.texturesLoaded}},cacheKey:{get:function(){}},components:{get:function(){return this._components}}});wb.prototype.load=function(){if(d(this._promise))return this._promise;let e=$E.parse(this._arrayBuffer,this._byteOffset),t=e.batchLength,n=e.featureTableJson,i=e.featureTableBinary,o=e.batchTableJson,r=e.batchTableBinary,s=new Rm(n,i);t=s.getGlobalProperty("BATCH_LENGTH"),this._batchLength=t;let a=s.getGlobalProperty("RTC_CENTER",Q.FLOAT,3);d(a)&&(this._transform=A.fromTranslation(h.fromArray(a))),this._batchTable={json:o,binary:r};let c=new Ep({typedArray:e.gltf,upAxis:this._upAxis,forwardAxis:this._forwardAxis,gltfResource:this._b3dmResource,baseResource:this._baseResource,releaseGltfJson:this._releaseGltfJson,incrementallyLoadTextures:this._incrementallyLoadTextures,loadAttributesAsTypedArray:this._loadAttributesAsTypedArray,loadAttributesFor2D:this._loadAttributesFor2D,loadIndicesForWireframe:this._loadIndicesForWireframe,loadPrimitiveOutline:this._loadPrimitiveOutline,loadForClassification:this._loadForClassification,renameBatchIdSemantic:!0});this._gltfLoader=c,this._state=wx.LOADING;let l=this;return this._promise=c.load().then(function(){if(!l.isDestroyed())return l._state=wx.PROCESSING,l}).catch(function(u){if(!l.isDestroyed())return JFe(l,u)}),this._promise};function JFe(e,t){e.unload(),e._state=wx.FAILED;let n="Failed to load b3dm";return t=e.getError(n,t),Promise.reject(t)}wb.prototype.process=function(e){if(this._state===wx.READY)return!0;if(this._state!==wx.PROCESSING||!this._gltfLoader.process(e))return!1;let n=this._gltfLoader.components;return n.transform=A.multiplyTransformation(this._transform,n.transform,n.transform),QFe(this,n),this._components=n,this._arrayBuffer=void 0,this._state=wx.READY,!0};function QFe(e,t){let n=e._batchTable,i=e._batchLength;if(i===0)return;let o;if(d(n.json))o=Pp({count:i,batchTable:n.json,binaryBody:n.binary});else{let a=new Ic({name:xm.BATCH_TABLE_CLASS_NAME,count:i});o=new ba({schema:{},propertyTables:[a]})}let r=t.scene.nodes,s=r.length;for(let a=0;a<s;a++)Nne(r[a]);t.structuralMetadata=o}function Nne(e){let t=e.children.length;for(let i=0;i<t;i++)Nne(e.children[i]);let n=e.primitives.length;for(let i=0;i<n;i++){let o=e.primitives[i],r=nn.getAttributeBySemantic(o,Ct.FEATURE_ID);if(d(r)){r.setIndex=0;let s=new zFe;s.propertyTableId=0,s.setIndex=0,s.positionalLabel="featureId_0",o.featureIds.push(s)}}}wb.prototype.unload=function(){d(this._gltfLoader)&&!this._gltfLoader.isDestroyed()&&this._gltfLoader.unload(),this._components=void 0,this._arrayBuffer=void 0};var nX=wb;var adn=T(S(),1);function Fb(e){e=g(e,g.EMPTY_OBJECT),this._geoJson=e.geoJson,this._components=void 0}d(Object.create)&&(Fb.prototype=Object.create(oo.prototype),Fb.prototype.constructor=Fb);Object.defineProperties(Fb.prototype,{cacheKey:{get:function(){}},components:{get:function(){return this._components}}});Fb.prototype.load=function(){return Promise.resolve(this)};Fb.prototype.process=function(e){return d(this._components)||(this._components=l9e(this._geoJson,e),this._geoJson=void 0),!0};function jFe(){this.lines=void 0,this.points=void 0,this.properties=void 0}function qFe(){this.features=[]}function NY(e){let t=e[0],n=e[1],i=g(e[2],0);return new h(t,n,i)}function UY(e){let t=e.length,n=new Array(t);for(let o=0;o<t;o++)n[o]=NY(e[o]);return[n]}function $Fe(e){let t=e.length,n=new Array(t);for(let i=0;i<t;i++)n[i]=UY(e[i])[0];return n}function Une(e){let t=e.length,n=new Array(t);for(let i=0;i<t;i++)n[i]=UY(e[i])[0];return n}function e9e(e){let t=e.length,n=[];for(let i=0;i<t;i++)Array.prototype.push.apply(n,Une(e[i]));return n}function t9e(e){return[NY(e)]}function n9e(e){let t=e.length,n=new Array(t);for(let i=0;i<t;i++)n[i]=NY(e[i]);return n}var i9e={LineString:UY,MultiLineString:$Fe,MultiPolygon:e9e,Polygon:Une,MultiPoint:n9e,Point:t9e},o9e={LineString:Fe.LINES,MultiLineString:Fe.LINES,MultiPolygon:Fe.LINES,Polygon:Fe.LINES,MultiPoint:Fe.POINTS,Point:Fe.POINTS};function kne(e,t){if(!d(e.geometry))return;let n=e.geometry.type,i=i9e[n],o=o9e[n],r=e.geometry.coordinates;if(!d(i)||!d(r))return;let s=new jFe;o===Fe.LINES?s.lines=i(r):o===Fe.POINTS&&(s.points=i(r)),s.properties=e.properties,t.features.push(s)}function r9e(e,t){let n=e.features,i=n.length;for(let o=0;o<i;o++)kne(n[o],t)}var s9e={FeatureCollection:r9e,Feature:kne},YM=new h;function a9e(e,t,n){let i=0,o=0,r=e.length;for(let F=0;F<r;F++){let M=e[F];if(d(M.lines)){let b=M.lines.length;for(let R=0;R<b;R++){let E=M.lines[R];i+=E.length,o+=(E.length-1)*2}}}let s=new Float32Array(i*3),a=new Float32Array(i),c=Ue.createTypedArray(i,o),l=Ue.fromTypedArray(c),u=new h(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),m=new h(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY),p=0,y=0;for(let F=0;F<r;F++){let M=e[F];if(!d(M.lines))continue;let b=M.lines.length;for(let R=0;R<b;R++){let E=M.lines[R],I=E.length;for(let w=0;w<I;w++){let N=E[w],B=h.fromDegrees(N.x,N.y,N.z,re.WGS84,YM),k=A.multiplyByPoint(t,B,YM);h.minimumByComponent(u,k,u),h.maximumByComponent(m,k,m),h.pack(k,s,p*3),a[p]=F,w<I-1&&(c[y*2]=p,c[y*2+1]=p+1,y++),p++}}}let f=mt.createVertexBuffer({typedArray:s,context:n.context,usage:Ne.STATIC_DRAW});f.vertexArrayDestroyable=!1;let x=mt.createVertexBuffer({typedArray:a,context:n.context,usage:Ne.STATIC_DRAW});x.vertexArrayDestroyable=!1;let _=mt.createIndexBuffer({typedArray:c,context:n.context,usage:Ne.STATIC_DRAW,indexDatatype:l});_.vertexArrayDestroyable=!1;let C=new wt.Attribute;C.semantic=Ct.POSITION,C.componentDatatype=Q.FLOAT,C.type=an.VEC3,C.count=i,C.min=u,C.max=m,C.buffer=f;let V=new wt.Attribute;V.semantic=Ct.FEATURE_ID,V.setIndex=0,V.componentDatatype=Q.FLOAT,V.type=an.SCALAR,V.count=i,V.buffer=x;let L=[C,V],Z=new wt.Material;Z.unlit=!0;let G=new wt.Indices;G.indexDatatype=l,G.count=c.length,G.buffer=_;let X=new wt.FeatureIdAttribute;X.featureCount=r,X.propertyTableId=0,X.setIndex=0,X.positionalLabel="featureId_0";let P=[X],v=new wt.Primitive;return v.attributes=L,v.indices=G,v.featureIds=P,v.primitiveType=Fe.LINES,v.material=Z,v}function c9e(e,t,n){let i=0,o=e.length;for(let L=0;L<o;L++){let Z=e[L];d(Z.points)&&(i+=Z.points.length)}let r=new Float32Array(i*3),s=new Float32Array(i),a=new h(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),c=new h(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY),l=0;for(let L=0;L<o;L++){let Z=e[L];if(!d(Z.points))continue;let G=Z.points.length;for(let X=0;X<G;X++){let P=Z.points[X],v=h.fromDegrees(P.x,P.y,P.z,re.WGS84,YM),F=A.multiplyByPoint(t,v,YM);h.minimumByComponent(a,F,a),h.maximumByComponent(c,F,c),h.pack(F,r,l*3),s[l]=L,l++}}let u=mt.createVertexBuffer({typedArray:r,context:n.context,usage:Ne.STATIC_DRAW});u.vertexArrayDestroyable=!1;let m=mt.createVertexBuffer({typedArray:s,context:n.context,usage:Ne.STATIC_DRAW});m.vertexArrayDestroyable=!1;let p=new wt.Attribute;p.semantic=Ct.POSITION,p.componentDatatype=Q.FLOAT,p.type=an.VEC3,p.count=i,p.min=a,p.max=c,p.buffer=u;let y=new wt.Attribute;y.semantic=Ct.FEATURE_ID,y.setIndex=0,y.componentDatatype=Q.FLOAT,y.type=an.SCALAR,y.count=i,y.buffer=m;let f=[p,y],x=new wt.Material;x.unlit=!0;let _=new wt.FeatureIdAttribute;_.featureCount=o,_.propertyTableId=0,_.setIndex=0,_.positionalLabel="featureId_0";let C=[_],V=new wt.Primitive;return V.attributes=f,V.featureIds=C,V.primitiveType=Fe.POINTS,V.material=x,V}function l9e(e,t){let n=new qFe,i=s9e[e.type];d(i)&&i(e,n);let o=n.features,r=o.length;if(r===0)throw new me("GeoJSON must have at least one feature");let s={};for(let F=0;F<r;F++){let M=o[F],b=g(M.properties,g.EMPTY_OBJECT);for(let R in b)b.hasOwnProperty(R)&&(d(s[R])||(s[R]=new Array(r)))}for(let F=0;F<r;F++){let M=o[F];for(let b in s)if(s.hasOwnProperty(b)){let R=g(M.properties[b],"");s[b][F]=R}}let a=new Zp({count:r,properties:s}),l=[new Ic({id:0,count:r,jsonMetadataTable:a})],u=_m.fromJson({}),m=new ba({schema:u,propertyTables:l}),p=new h(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),y=new h(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY),f=!1,x=!1;for(let F=0;F<r;F++){let M=o[F];if(d(M.lines)){f=!0;let b=M.lines.length;for(let R=0;R<b;R++){let E=M.lines[R],I=E.length;for(let w=0;w<I;w++)h.minimumByComponent(p,E[w],p),h.maximumByComponent(y,E[w],y)}}if(d(M.points)){x=!0;let b=M.points.length;for(let R=0;R<b;R++){let E=M.points[R];h.minimumByComponent(p,E,p),h.maximumByComponent(y,E,y)}}}let _=h.midpoint(p,y,new h),C=h.fromDegrees(_.x,_.y,_.z,re.WGS84,new h),V=vt.eastNorthUpToFixedFrame(C,re.WGS84,new A),L=A.inverseTransformation(V,new A),Z=[];f&&Z.push(a9e(o,L,t)),x&&Z.push(c9e(o,L,t));let G=new wt.Node;G.index=0,G.primitives=Z;let X=[G],P=new wt.Scene;P.nodes=X;let v=new wt.Components;return v.scene=P,v.nodes=X,v.transform=V,v.structuralMetadata=m,v}Fb.prototype.unload=function(){this._components=void 0};var iX=Fb;var Bdn=T(S(),1);var hdn=T(S(),1);var OM={};OM._deprecationWarning=Qr;var Ab=Uint32Array.BYTES_PER_ELEMENT;OM.parse=function(e,t){let n=g(t,0);t=n;let i=new Uint8Array(e),o=new DataView(e);t+=Ab;let r=o.getUint32(t,!0);if(r!==1)throw new me(`Only Instanced 3D Model version 1 is supported. Version ${r} is not.`);t+=Ab;let s=o.getUint32(t,!0);t+=Ab;let a=o.getUint32(t,!0);if(a===0)throw new me("featureTableJsonByteLength is zero, the feature table must be defined.");t+=Ab;let c=o.getUint32(t,!0);t+=Ab;let l=o.getUint32(t,!0);t+=Ab;let u=o.getUint32(t,!0);t+=Ab;let m=o.getUint32(t,!0);if(m!==1&&m!==0)throw new me(`Only glTF format 0 (uri) or 1 (embedded) are supported. Format ${m} is not.`);t+=Ab;let p=Go(i,t,a);t+=a;let y=new Uint8Array(e,t,c);t+=c;let f,x;l>0&&(f=Go(i,t,l),t+=l,u>0&&(x=new Uint8Array(e,t,u),x=new Uint8Array(x),t+=u));let _=n+s-t;if(_===0)throw new me("glTF byte length must be greater than 0.");let C;return t%4===0?C=new Uint8Array(e,t,_):(OM._deprecationWarning("i3dm-glb-unaligned","The embedded glb is not aligned to a 4-byte boundary."),C=new Uint8Array(i.subarray(t,t+_))),{gltfFormat:m,featureTableJson:p,featureTableBinary:y,batchTableJson:f,batchTableBinary:x,gltf:C}};var oX=OM;var vp={NOT_LOADED:0,LOADING:1,PROCESSING:2,POST_PROCESSING:3,READY:4,FAILED:5,UNLOADED:6},KM=wt.Attribute,d9e=wt.FeatureIdAttribute,Bne=wt.Instances;function wp(e){e=g(e,g.EMPTY_OBJECT);let t=e.i3dmResource,n=e.arrayBuffer,i=e.baseResource,o=g(e.byteOffset,0),r=g(e.releaseGltfJson,!1),s=g(e.asynchronous,!0),a=g(e.incrementallyLoadTextures,!0),c=g(e.upAxis,Zo.Y),l=g(e.forwardAxis,Zo.X),u=g(e.loadAttributesAsTypedArray,!1),m=g(e.loadIndicesForWireframe,!1),p=g(e.loadPrimitiveOutline,!0);i=d(i)?i:t.clone(),this._i3dmResource=t,this._baseResource=i,this._arrayBuffer=n,this._byteOffset=o,this._releaseGltfJson=r,this._asynchronous=s,this._incrementallyLoadTextures=a,this._upAxis=c,this._forwardAxis=l,this._loadAttributesAsTypedArray=u,this._loadIndicesForWireframe=m,this._loadPrimitiveOutline=p,this._state=vp.NOT_LOADED,this._promise=void 0,this._gltfLoader=void 0,this._buffers=[],this._components=void 0,this._transform=A.IDENTITY,this._batchTable=void 0,this._featureTable=void 0,this._instancesLength=0}d(Object.create)&&(wp.prototype=Object.create(oo.prototype),wp.prototype.constructor=wp);Object.defineProperties(wp.prototype,{texturesLoaded:{get:function(){return this._gltfLoader?.texturesLoaded}},cacheKey:{get:function(){}},components:{get:function(){return this._components}}});wp.prototype.load=function(){if(d(this._promise))return this._promise;let e=oX.parse(this._arrayBuffer,this._byteOffset),t=e.featureTableJson,n=e.featureTableBinary,i=e.batchTableJson,o=e.batchTableBinary,r=e.gltfFormat,s=new Rm(t,n);this._featureTable=s;let a=s.getGlobalProperty("INSTANCES_LENGTH");if(s.featuresLength=a,!d(a))throw new me("Feature table global property: INSTANCES_LENGTH must be defined");this._instancesLength=a;let c=s.getGlobalProperty("RTC_CENTER",Q.FLOAT,3);d(c)&&(this._transform=A.fromTranslation(h.fromArray(c))),this._batchTable={json:i,binary:o};let l={upAxis:this._upAxis,forwardAxis:this._forwardAxis,releaseGltfJson:this._releaseGltfJson,incrementallyLoadTextures:this._incrementallyLoadTextures,loadAttributesAsTypedArray:this._loadAttributesAsTypedArray,loadIndicesForWireframe:this._loadIndicesForWireframe,loadPrimitiveOutline:this._loadPrimitiveOutline};if(r===0){let m=ml(e.gltf);m=m.replace(/[\s\0]+$/,"");let p=this._baseResource.getDerivedResource({url:m});l.gltfResource=p,l.baseResource=p}else l.gltfResource=this._i3dmResource,l.typedArray=e.gltf;let u=new Ep(l);return this._gltfLoader=u,this._state=vp.LOADING,this._promise=u.load().then(()=>{if(!this.isDestroyed())return this._state=vp.PROCESSING,this}).catch(m=>{if(!this.isDestroyed())throw u9e(this,m)}),this._promise};function u9e(e,t){e.unload(),e._state=vp.FAILED;let n="Failed to load i3dm";return e.getError(n,t)}wp.prototype.process=function(e){if(this._state===vp.READY)return!0;let t=this._gltfLoader,n=!1;if(this._state===vp.PROCESSING&&(n=t.process(e)),!n)return!1;let i=t.components;return i.transform=A.multiplyTransformation(this._transform,i.transform,i.transform),f9e(this,i,e),m9e(this,i),this._components=i,this._arrayBuffer=void 0,this._state=vp.READY,!0};function m9e(e,t){let n=e._batchTable,i=e._instancesLength;if(i===0)return;let o;if(d(n.json))o=Pp({count:i,batchTable:n.json,binaryBody:n.binary});else{let r=new Ic({name:xm.BATCH_TABLE_CLASS_NAME,count:i});o=new ba({schema:{},propertyTables:[r]})}t.structuralMetadata=o}var HM=new h,kY=new Array(4),h9e=new A;function f9e(e,t,n){let i,o=e._featureTable,r=e._instancesLength;if(r===0)return;let s=o.getGlobalProperty("RTC_CENTER",Q.FLOAT,3),a=o.getGlobalProperty("EAST_NORTH_UP"),c=o.hasProperty("NORMAL_UP")||o.hasProperty("NORMAL_UP_OCT32P")||a,l=o.hasProperty("SCALE")||o.hasProperty("SCALE_NON_UNIFORM"),u=b9e(o,r),m;c&&(m=new Float32Array(4*r));let p;l&&(p=new Float32Array(3*r));let y=new Float32Array(r),f=h.unpackArray(u),x=new h,_=new h,C=new h,V=new h,L=new $,Z=new Ae,G=new Array(4),X=new h,P=new Array(3),v=new A;if(!d(s)||h.equals(h.unpack(s),h.ZERO)){let k=ce.fromPoints(f);for(i=0;i<f.length;i++)h.subtract(f[i],k.center,HM),u[3*i+0]=HM.x,u[3*i+1]=HM.y,u[3*i+2]=HM.z;let O=A.fromTranslation(k.center,h9e);t.transform=A.multiplyTransformation(O,t.transform,t.transform)}for(i=0;i<r;i++){x=h.clone(f[i]),d(s)&&h.add(x,h.unpack(s),x),c&&(y9e(o,a,i,Z,x,C,_,V,L,v),Ae.pack(Z,G,0),m[4*i+0]=G[0],m[4*i+1]=G[1],m[4*i+2]=G[2],m[4*i+3]=G[3]),l&&(g9e(o,i,X),h.pack(X,P,0),p[3*i+0]=P[0],p[3*i+1]=P[1],p[3*i+2]=P[2]);let k=o.getProperty("BATCH_ID",Q.UNSIGNED_SHORT,1,i);d(k)||(k=i),y[i]=k}let F=new Bne;F.transformInWorldSpace=!0;let M=e._buffers,b=new KM;if(b.name="Instance Translation",b.semantic=Nr.TRANSLATION,b.componentDatatype=Q.FLOAT,b.type=an.VEC3,b.count=r,b.typedArray=u,!c){let k=mt.createVertexBuffer({context:n.context,typedArray:u,usage:Ne.STATIC_DRAW});k.vertexArrayDestroyable=!1,M.push(k),b.buffer=k}if(F.attributes.push(b),c){let k=new KM;k.name="Instance Rotation",k.semantic=Nr.ROTATION,k.componentDatatype=Q.FLOAT,k.type=an.VEC4,k.count=r,k.typedArray=m,F.attributes.push(k)}if(l){let k=new KM;if(k.name="Instance Scale",k.semantic=Nr.SCALE,k.componentDatatype=Q.FLOAT,k.type=an.VEC3,k.count=r,c)k.typedArray=p;else{let O=mt.createVertexBuffer({context:n.context,typedArray:p,usage:Ne.STATIC_DRAW});O.vertexArrayDestroyable=!1,M.push(O),k.buffer=O}F.attributes.push(k)}let R=new KM;R.name="Instance Feature ID",R.setIndex=0,R.semantic=Nr.FEATURE_ID,R.componentDatatype=Q.FLOAT,R.type=an.SCALAR,R.count=r;let E=mt.createVertexBuffer({context:n.context,typedArray:y,usage:Ne.STATIC_DRAW});E.vertexArrayDestroyable=!1,M.push(E),R.buffer=E,F.attributes.push(R);let I=new d9e;I.propertyTableId=0,I.setIndex=0,I.positionalLabel="instanceFeatureId_0",F.featureIds.push(I);let w=t.nodes,N=w.length,B=!1;for(i=0;i<N;i++){let k=w[i];k.primitives.length>0&&(k.instances=B?p9e(F):F,B=!0)}}function p9e(e){let t=new Bne;t.transformInWorldSpace=e.transformInWorldSpace;let n=e.attributes,i=n.length;for(let o=0;o<i;o++){let r=Ke(n[o],!1);t.attributes.push(r)}return t.featureIds=e.featureIds,t}function b9e(e,t){if(e.hasProperty("POSITION"))return e.getPropertyArray("POSITION",Q.FLOAT,3);if(e.hasProperty("POSITION_QUANTIZED")){let n=e.getPropertyArray("POSITION_QUANTIZED",Q.UNSIGNED_SHORT,3),i=e.getGlobalProperty("QUANTIZED_VOLUME_OFFSET",Q.FLOAT,3);if(!d(i))throw new me("Global property: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.");let o=e.getGlobalProperty("QUANTIZED_VOLUME_SCALE",Q.FLOAT,3);if(!d(o))throw new me("Global property: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.");let r=new Float32Array(n.length);for(let s=0;s<n.length/3;s++)for(let a=0;a<3;a++){let c=3*s+a;r[c]=n[c]/65535*o[a]+i[a]}return r}else throw new me("Either POSITION or POSITION_QUANTIZED must be defined for each instance.")}var Dne=new Array(4);function y9e(e,t,n,i,o,r,s,a,c,l){let u=e.getProperty("NORMAL_UP",Q.FLOAT,3,n,kY),m=e.getProperty("NORMAL_RIGHT",Q.FLOAT,3,n,Dne),p=!1;if(d(u)){if(!d(m))throw new me("To define a custom orientation, both NORMAL_UP and NORMAL_RIGHT must be defined.");h.unpack(u,0,r),h.unpack(m,0,s),p=!0}else{let y=e.getProperty("NORMAL_UP_OCT32P",Q.UNSIGNED_SHORT,2,n,kY),f=e.getProperty("NORMAL_RIGHT_OCT32P",Q.UNSIGNED_SHORT,2,n,Dne);if(d(y)){if(!d(f))throw new me("To define a custom orientation with oct-encoded vectors, both NORMAL_UP_OCT32P and NORMAL_RIGHT_OCT32P must be defined.");Kn.octDecodeInRange(y[0],y[1],65535,r),Kn.octDecodeInRange(f[0],f[1],65535,s),p=!0}else t?(vt.eastNorthUpToFixedFrame(o,re.WGS84,l),A.getMatrix3(l,c)):$.clone($.IDENTITY,c)}p&&(h.cross(s,r,a),h.normalize(a,a),$.setColumn(c,0,s,c),$.setColumn(c,1,r,c),$.setColumn(c,2,a,c)),Ae.fromRotationMatrix(c,i)}function g9e(e,t,n){n=h.fromElements(1,1,1,n);let i=e.getProperty("SCALE",Q.FLOAT,1,t);d(i)&&h.multiplyByScalar(n,i,n);let o=e.getProperty("SCALE_NON_UNIFORM",Q.FLOAT,3,t,kY);d(o)&&(n.x*=o[0],n.y*=o[1],n.z*=o[2])}function x9e(e){let t=e._buffers,n=t.length;for(let i=0;i<n;i++){let o=t[i];o.isDestroyed()||o.destroy()}t.length=0}wp.prototype.isUnloaded=function(){return this._state===vp.UNLOADED};wp.prototype.unload=function(){d(this._gltfLoader)&&!this._gltfLoader.isDestroyed()&&this._gltfLoader.unload(),x9e(this),this._components=void 0,this._arrayBuffer=void 0,this._state=vp.UNLOADED};var rX=wp;var lmn=T(S(),1);var $un=T(S(),1);var Odn=T(S(),1),_9e={STOPPED:0,ANIMATING:1},Zm=Object.freeze(_9e);var Yun=T(S(),1);var tun=T(S(),1);var qdn=T(S(),1);function KS(){this.times=void 0,this.points=void 0,fe.throwInstantiationError()}KS.getPointType=function(e){if(typeof e=="number")return Number;if(e instanceof h)return h;if(e instanceof Ae)return Ae};KS.prototype.evaluate=fe.throwInstantiationError;KS.prototype.findTimeInterval=function(e,t){let n=this.times,i=n.length;if(t=g(t,0),e>=n[t]){if(t+1<i&&e<n[t+1])return t;if(t+2<i&&e<n[t+2])return t+1}else if(t-1>=0&&e>=n[t-1])return t-1;let o;if(e>n[t])for(o=t;o<i-1&&!(e>=n[o]&&e<n[o+1]);++o);else for(o=t-1;o>=0&&!(e>=n[o]&&e<n[o+1]);--o);return o===i-1&&(o=i-2),o};KS.prototype.wrapTime=function(e){let t=this.times,n=t[t.length-1],i=t[0],o=n-i,r;return e<i&&(r=Math.floor((i-e)/o)+1,e+=r*o),e>n&&(r=Math.floor((e-n)/o)+1,e-=r*o),e};KS.prototype.clampTime=function(e){let t=this.times;return W.clamp(e,t[0],t[t.length-1])};var ro=KS;function HS(e){this._value=e,this._valueType=ro.getPointType(e)}Object.defineProperties(HS.prototype,{value:{get:function(){return this._value}}});HS.prototype.findTimeInterval=function(e){};HS.prototype.wrapTime=function(e){return 0};HS.prototype.clampTime=function(e){return 0};HS.prototype.evaluate=function(e,t){let n=this._value,i=this._valueType;return i===Number?n:i.clone(n,t)};var sX=HS;var _un=T(S(),1);var aun=T(S(),1);function zS(e){e=g(e,g.EMPTY_OBJECT);let t=e.points,n=e.times;this._times=n,this._points=t,this._pointType=ro.getPointType(t[0]),this._lastTimeIndex=0}Object.defineProperties(zS.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}}});zS.prototype.findTimeInterval=ro.prototype.findTimeInterval;zS.prototype.wrapTime=ro.prototype.wrapTime;zS.prototype.clampTime=ro.prototype.clampTime;zS.prototype.evaluate=function(e,t){let n=this.points,i=this.times,o=this._lastTimeIndex=this.findTimeInterval(e,this._lastTimeIndex),r=(e-i[o])/(i[o+1]-i[o]);return this._pointType===Number?(1-r)*n[o]+r*n[o+1]:(d(t)||(t=new h),h.lerp(n[o],n[o+1],r,t))};var Mb=zS;var dun=T(S(),1);var Yne={};Yne.solve=function(e,t,n,i){let o=new Array(n.length),r=new Array(i.length),s=new Array(i.length),a;for(a=0;a<r.length;a++)r[a]=new h,s[a]=new h;o[0]=n[0]/t[0],r[0]=h.multiplyByScalar(i[0],1/t[0],r[0]);let c;for(a=1;a<o.length;++a)c=1/(t[a]-o[a-1]*e[a-1]),o[a]=n[a]*c,r[a]=h.subtract(i[a],h.multiplyByScalar(r[a-1],e[a-1],r[a]),r[a]),r[a]=h.multiplyByScalar(r[a],c,r[a]);for(c=1/(t[a]-o[a-1]*e[a-1]),r[a]=h.subtract(i[a],h.multiplyByScalar(r[a-1],e[a-1],r[a]),r[a]),r[a]=h.multiplyByScalar(r[a],c,r[a]),s[s.length-1]=r[r.length-1],a=s.length-2;a>=0;--a)s[a]=h.subtract(r[a],h.multiplyByScalar(s[a+1],o[a],s[a]),s[a]);return s};var JS=Yne;var One=[],Kne=[],Hne=[],zne=[];function T9e(e,t,n){let i=One,o=Hne,r=Kne,s=zne;i.length=o.length=e.length-1,r.length=s.length=e.length;let a;i[0]=r[0]=1,o[0]=0;let c=s[0];for(d(c)||(c=s[0]=new h),h.clone(t,c),a=1;a<i.length-1;++a)i[a]=o[a]=1,r[a]=4,c=s[a],d(c)||(c=s[a]=new h),h.subtract(e[a+1],e[a-1],c),h.multiplyByScalar(c,3,c);return i[a]=0,o[a]=1,r[a]=4,c=s[a],d(c)||(c=s[a]=new h),h.subtract(e[a+1],e[a-1],c),h.multiplyByScalar(c,3,c),r[a+1]=1,c=s[a+1],d(c)||(c=s[a+1]=new h),h.clone(n,c),JS.solve(i,r,o,s)}function S9e(e){let t=One,n=Hne,i=Kne,o=zne;t.length=n.length=e.length-1,i.length=o.length=e.length;let r;t[0]=n[0]=1,i[0]=2;let s=o[0];for(d(s)||(s=o[0]=new h),h.subtract(e[1],e[0],s),h.multiplyByScalar(s,3,s),r=1;r<t.length;++r)t[r]=n[r]=1,i[r]=4,s=o[r],d(s)||(s=o[r]=new h),h.subtract(e[r+1],e[r-1],s),h.multiplyByScalar(s,3,s);return i[r]=2,s=o[r],d(s)||(s=o[r]=new h),h.subtract(e[r],e[r-1],s),h.multiplyByScalar(s,3,s),JS.solve(t,i,n,o)}function Sl(e){e=g(e,g.EMPTY_OBJECT);let t=e.points,n=e.times,i=e.inTangents,o=e.outTangents;this._times=n,this._points=t,this._pointType=ro.getPointType(t[0]),this._inTangents=i,this._outTangents=o,this._lastTimeIndex=0}Object.defineProperties(Sl.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}},inTangents:{get:function(){return this._inTangents}},outTangents:{get:function(){return this._outTangents}}});Sl.createC1=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.times,n=e.points,i=e.tangents,o=i.slice(0,i.length-1),r=i.slice(1,i.length);return new Sl({times:t,points:n,inTangents:r,outTangents:o})};Sl.createNaturalCubic=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.times,n=e.points;if(n.length<3)return new Mb({points:n,times:t});let i=S9e(n),o=i.slice(0,i.length-1),r=i.slice(1,i.length);return new Sl({times:t,points:n,inTangents:r,outTangents:o})};Sl.createClampedCubic=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.times,n=e.points,i=e.firstTangent,o=e.lastTangent,r=ro.getPointType(n[0]);if(n.length<3)return new Mb({points:n,times:t});let s=T9e(n,i,o),a=s.slice(0,s.length-1),c=s.slice(1,s.length);return new Sl({times:t,points:n,inTangents:c,outTangents:a})};Sl.hermiteCoefficientMatrix=new A(2,-3,0,1,-2,3,0,0,1,-2,1,0,1,-1,0,0);Sl.prototype.findTimeInterval=ro.prototype.findTimeInterval;var C9e=new se,QS=new h;Sl.prototype.wrapTime=ro.prototype.wrapTime;Sl.prototype.clampTime=ro.prototype.clampTime;Sl.prototype.evaluate=function(e,t){let n=this.points,i=this.times,o=this.inTangents,r=this.outTangents;this._lastTimeIndex=this.findTimeInterval(e,this._lastTimeIndex);let s=this._lastTimeIndex,a=i[s+1]-i[s],c=(e-i[s])/a,l=C9e;l.z=c,l.y=c*c,l.x=l.y*c,l.w=1;let u=A.multiplyByVector(Sl.hermiteCoefficientMatrix,l,l);u.z*=a,u.w*=a;let m=this._pointType;return m===Number?n[s]*u.x+n[s+1]*u.y+r[s]*u.z+o[s]*u.w:(d(t)||(t=new m),t=m.multiplyByScalar(n[s],u.x,t),m.multiplyByScalar(n[s+1],u.y,QS),m.add(t,QS,t),m.multiplyByScalar(r[s],u.z,QS),m.add(t,QS,t),m.multiplyByScalar(o[s],u.w,QS),m.add(t,QS,t))};var Nb=Sl;var Lun=T(S(),1);function jS(e){e=g(e,g.EMPTY_OBJECT);let t=e.points,n=e.times;this._times=n,this._points=t,this._pointType=ro.getPointType(t[0]),this._lastTimeIndex=0}Object.defineProperties(jS.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}}});jS.prototype.findTimeInterval=ro.prototype.findTimeInterval;jS.prototype.wrapTime=ro.prototype.wrapTime;jS.prototype.clampTime=ro.prototype.clampTime;jS.prototype.evaluate=function(e,t){let n=this.points;this._lastTimeIndex=this.findTimeInterval(e,this._lastTimeIndex);let i=this._lastTimeIndex,o=this._pointType;return o===Number?n[i]:(d(t)||(t=new o),o.clone(n[i],t))};var aX=jS;var Iun=T(S(),1);function V9e(e){let t=e.points,n=e.times;return function(i,o){d(o)||(o=new Ae);let r=e._lastTimeIndex=e.findTimeInterval(i,e._lastTimeIndex),s=(i-n[r])/(n[r+1]-n[r]),a=t[r],c=t[r+1];return Ae.fastSlerp(a,c,s,o)}}function qS(e){e=g(e,g.EMPTY_OBJECT);let t=e.points,n=e.times;this._times=n,this._points=t,this._evaluateFunction=V9e(this),this._lastTimeIndex=0}Object.defineProperties(qS.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}}});qS.prototype.findTimeInterval=ro.prototype.findTimeInterval;qS.prototype.wrapTime=ro.prototype.wrapTime;qS.prototype.clampTime=ro.prototype.clampTime;qS.prototype.evaluate=function(e,t){return this._evaluateFunction(e,t)};var cX=qS;var Fx=wt.AnimatedPropertyType;function BY(e){e=g(e,g.EMPTY_OBJECT);let t=e.channel,n=e.runtimeAnimation,i=e.runtimeNode;this._channel=t,this._runtimeAnimation=n,this._runtimeNode=i,this._splines=[],this._path=void 0,Z9e(this)}Object.defineProperties(BY.prototype,{channel:{get:function(){return this._channel}},runtimeAnimation:{get:function(){return this._runtimeAnimation}},runtimeNode:{get:function(){return this._runtimeNode}},splines:{get:function(){return this._splines}}});function L9e(e,t){let n=[],i=[],o=[],r=t.length;for(let s=0;s<r;s+=3)i.push(t[s]),n.push(t[s+1]),o.push(t[s+2]);return i.splice(0,1),o.length=o.length-1,new Nb({times:e,points:n,inTangents:i,outTangents:o})}function Jne(e,t,n,i){if(e.length===1&&t.length===1)return new sX(t[0]);switch(n){case Cm.STEP:return new aX({times:e,points:t});case Cm.CUBICSPLINE:return L9e(e,t);case Cm.LINEAR:return i===Fx.ROTATION?new cX({times:e,points:t}):new Mb({times:e,points:t})}}function R9e(e,t,n,i,o){let r=[];if(i===Fx.WEIGHTS){let a=t.length/o,c,l;for(c=0;c<o;c++){let u=new Array(a),m=c;if(n===Cm.CUBICSPLINE)for(l=0;l<a;l+=3)u[l]=t[m],u[l+1]=t[m+o],u[l+2]=t[m+2*o],m+=o*3;else for(l=0;l<a;l++)u[l]=t[m],m+=o;r.push(Jne(e,u,n,i))}}else r.push(Jne(e,t,n,i));return r}var DY;function Z9e(e){let t=e._channel,n=t.sampler,i=n.input,o=n.output,r=n.interpolation,a=t.target.path,c=e._runtimeNode,l=d(c.morphWeights)?c.morphWeights.length:1,u=R9e(i,o,r,a,l);switch(e._splines=u,e._path=a,a){case Fx.TRANSLATION:case Fx.SCALE:DY=new h;break;case Fx.ROTATION:DY=new Ae;break;case Fx.WEIGHTS:break}}BY.prototype.animate=function(e){let t=this._splines,n=this._path,i=this._runtimeAnimation.model,o=this._runtimeNode;if(n===Fx.WEIGHTS){let r=o.morphWeights,s=r.length;for(let a=0;a<s;a++){let c=t[a],l=i.clampAnimations?c.clampTime(e):c.wrapTime(e);r[a]=c.evaluate(l)}}else{if(o.userAnimated)return;{let r=t[0],s=i.clampAnimations?r.clampTime(e):r.wrapTime(e);o[n]=r.evaluate(s,DY)}}};var lX=BY;function YY(e,t,n){this._animation=t,this._name=t.name,this._runtimeChannels=void 0,this._startTime=te.clone(n.startTime),this._delay=g(n.delay,0),this._stopTime=te.clone(n.stopTime),this.removeOnStop=g(n.removeOnStop,!1),this._multiplier=g(n.multiplier,1),this._reverse=g(n.reverse,!1),this._loop=g(n.loop,_l.NONE),this._animationTime=n.animationTime,this._prevAnimationDelta=void 0,this.start=new ye,this.update=new ye,this.stop=new ye,this._state=Zm.STOPPED,this._computedStartTime=void 0,this._duration=void 0;let i=this;this._raiseStartEvent=function(){i.start.raiseEvent(e,i)},this._updateEventTime=0,this._raiseUpdateEvent=function(){i.update.raiseEvent(e,i,i._updateEventTime)},this._raiseStopEvent=function(){i.stop.raiseEvent(e,i)},this._model=e,this._localStartTime=void 0,this._localStopTime=void 0,G9e(this)}Object.defineProperties(YY.prototype,{animation:{get:function(){return this._animation}},name:{get:function(){return this._name}},runtimeChannels:{get:function(){return this._runtimeChannels}},model:{get:function(){return this._model}},localStartTime:{get:function(){return this._localStartTime}},localStopTime:{get:function(){return this._localStopTime}},startTime:{get:function(){return this._startTime}},delay:{get:function(){return this._delay}},stopTime:{get:function(){return this._stopTime}},multiplier:{get:function(){return this._multiplier}},reverse:{get:function(){return this._reverse}},loop:{get:function(){return this._loop}},animationTime:{get:function(){return this._animationTime}}});function G9e(e){let t=Number.MAX_VALUE,n=-Number.MAX_VALUE,i=e._model.sceneGraph,r=e._animation.channels,s=r.length,a=[];for(let c=0;c<s;c++){let l=r[c],u=l.target;if(!d(u))continue;let m=u.node.index,p=i._runtimeNodes[m],y=new lX({channel:l,runtimeAnimation:e,runtimeNode:p}),f=l.sampler.input;t=Math.min(t,f[0]),n=Math.max(n,f[f.length-1]),a.push(y)}e._runtimeChannels=a,e._localStartTime=t,e._localStopTime=n}YY.prototype.animate=function(e){let t=this._runtimeChannels,n=t.length;for(let i=0;i<n;i++)t[i].animate(e)};var dX=YY;function Fp(e){this.animationAdded=new ye,this.animationRemoved=new ye,this.animateWhilePaused=!1,this._model=e,this._runtimeAnimations=[],this._previousTime=void 0}Object.defineProperties(Fp.prototype,{length:{get:function(){return this._runtimeAnimations.length}},model:{get:function(){return this._model}}});function OY(e,t,n){let i=e._model,o=new dX(i,t,n);return e._runtimeAnimations.push(o),e.animationAdded.raiseEvent(i,o),o}Fp.prototype.add=function(e){e=g(e,g.EMPTY_OBJECT);let n=this._model.sceneGraph.components.animations,i=e.index;if(d(i))return OY(this,n[i],e);let o=n.length;for(let r=0;r<o;++r)if(n[r].name===e.name){i=r;break}return OY(this,n[i],e)};Fp.prototype.addAll=function(e){e=g(e,g.EMPTY_OBJECT);let n=this._model.sceneGraph.components.animations,i=[],o=n.length;for(let r=0;r<o;++r){let s=OY(this,n[r],e);i.push(s)}return i};Fp.prototype.remove=function(e){if(!d(e))return!1;let t=this._runtimeAnimations,n=t.indexOf(e);return n!==-1?(t.splice(n,1),this.animationRemoved.raiseEvent(this._model,e),!0):!1};Fp.prototype.removeAll=function(){let e=this._model,t=this._runtimeAnimations,n=t.length;this._runtimeAnimations.length=0;for(let i=0;i<n;++i)this.animationRemoved.raiseEvent(e,t[i])};Fp.prototype.contains=function(e){return d(e)?this._runtimeAnimations.indexOf(e)!==-1:!1};Fp.prototype.get=function(e){return this._runtimeAnimations[e]};var zM=[];function E9e(e,t,n){return function(){e.animationRemoved.raiseEvent(t,n)}}Fp.prototype.update=function(e){let t=this._runtimeAnimations,n=t.length;if(n===0)return this._previousTime=void 0,!1;if(!this.animateWhilePaused&&te.equals(e.time,this._previousTime))return!1;this._previousTime=te.clone(e.time,this._previousTime);let i=!1,o=e.time,r=this._model;for(let s=0;s<n;++s){let a=t[s];d(a._computedStartTime)||(a._computedStartTime=te.addSeconds(g(a.startTime,o),a.delay,new te)),d(a._duration)||(a._duration=a.localStopTime*(1/a.multiplier));let c=a._computedStartTime,l=a._duration,u=a.stopTime,m=te.lessThanOrEquals(c,o),p=d(u)&&te.greaterThan(o,u),y=0;if(l!==0){let _=te.secondsDifference(p?u:o,c);y=d(a._animationTime)?a._animationTime(l,_):_/l}let f=a.loop===_l.REPEAT||a.loop===_l.MIRRORED_REPEAT,x=(m||f&&!d(a.startTime))&&(y<=1||f)&&!p;if(y===a._prevAnimationDelta){let _=a._state===Zm.STOPPED;if(x!==_)continue}if(a._prevAnimationDelta=y,x||a._state===Zm.ANIMATING){if(x&&a._state===Zm.STOPPED&&(a._state=Zm.ANIMATING,a.start.numberOfListeners>0&&e.afterRender.push(a._raiseStartEvent)),a.loop===_l.REPEAT)y=y-Math.floor(y);else if(a.loop===_l.MIRRORED_REPEAT){let C=Math.floor(y),V=y-C;y=C%2===1?1-V:V}a.reverse&&(y=1-y);let _=y*l*a.multiplier;_=W.clamp(_,a.localStartTime,a.localStopTime),a.animate(_),a.update.numberOfListeners>0&&(a._updateEventTime=_,e.afterRender.push(a._raiseUpdateEvent)),i=!0,x||(a._state=Zm.STOPPED,a.stop.numberOfListeners>0&&e.afterRender.push(a._raiseStopEvent),a.removeOnStop&&zM.push(a))}}n=zM.length;for(let s=0;s<n;++s){let a=zM[s];t.splice(t.indexOf(a),1),e.afterRender.push(E9e(this,r,a))}return zM.length=0,i};var uX=Fp;var Gmn=T(S(),1);var hmn=T(S(),1);function Ax(e){this._model=e.model,this._featureTable=e.featureTable,this._featureId=e.featureId,this._color=void 0}Object.defineProperties(Ax.prototype,{show:{get:function(){return this._featureTable.getShow(this._featureId)},set:function(e){this._featureTable.setShow(this._featureId,e)}},color:{get:function(){return d(this._color)||(this._color=new Y),this._featureTable.getColor(this._featureId,this._color)},set:function(e){this._featureTable.setColor(this._featureId,e)}},primitive:{get:function(){return this._model}},featureTable:{get:function(){return this._featureTable}},featureId:{get:function(){return this._featureId}}});Ax.prototype.hasProperty=function(e){return this._featureTable.hasProperty(this._featureId,e)};Ax.prototype.getProperty=function(e){return this._featureTable.getProperty(this._featureId,e)};Ax.prototype.getPropertyInherited=function(e){return this._featureTable.hasPropertyBySemantic(this._featureId,e)?this._featureTable.getPropertyBySemantic(this._featureId,e):this._featureTable.getProperty(this._featureId,e)};Ax.prototype.getPropertyIds=function(e){return this._featureTable.getPropertyIds(e)};Ax.prototype.setProperty=function(e,t){return this._featureTable.setProperty(this._featureId,e,t)};var mX=Ax;var pmn=T(S(),1),hX={ALL_OPAQUE:0,ALL_TRANSLUCENT:1,OPAQUE_AND_TRANSLUCENT:2};hX.getStyleCommandsNeeded=function(e,t){return t===0?hX.ALL_OPAQUE:t===e?hX.ALL_TRANSLUCENT:hX.OPAQUE_AND_TRANSLUCENT};var Gm=Object.freeze(hX);var ymn=T(S(),1);var Ub={GLTF:"GLTF",TILE_GLTF:"TILE_GLTF",TILE_B3DM:"B3DM",TILE_I3DM:"I3DM",TILE_PNTS:"PNTS",TILE_GEOJSON:"TILE_GEOJSON"};Ub.is3DTiles=function(e){switch(e){case Ub.TILE_GLTF:case Ub.TILE_B3DM:case Ub.TILE_I3DM:case Ub.TILE_PNTS:case Ub.TILE_GEOJSON:return!0;case Ub.GLTF:return!1}};var nr=Object.freeze(Ub);function xr(e){let t=e.model,n=e.propertyTable;this._propertyTable=n,this._model=t,this._features=void 0,this._featuresLength=0,this._batchTexture=void 0,this._styleCommandsNeededDirty=!1,this._styleCommandsNeeded=Gm.ALL_OPAQUE,X9e(this)}Object.defineProperties(xr.prototype,{batchTexture:{get:function(){return this._batchTexture}},featuresLength:{get:function(){return this._featuresLength}},batchTextureByteLength:{get:function(){return d(this._batchTexture)?this._batchTexture.byteLength:0}},styleCommandsNeededDirty:{get:function(){return this._styleCommandsNeededDirty}}});function X9e(e){let t=e._model,n=nr.is3DTiles(t.type),i=e._propertyTable.count;if(i===0)return;let o,r=new Array(i);if(n){let s=t.content;for(o=0;o<i;o++)r[o]=new Ts(s,o)}else for(o=0;o<i;o++)r[o]=new mX({model:t,featureId:o,featureTable:e});e._features=r,e._featuresLength=i,e._batchTexture=new Xc({featuresLength:i,owner:e,statistics:n?t.content.tileset.statistics:void 0})}xr.prototype.update=function(e){this._styleCommandsNeededDirty=!1,this._batchTexture.update(void 0,e);let t=Gm.getStyleCommandsNeeded(this._featuresLength,this._batchTexture.translucentFeaturesLength);this._styleCommandsNeeded!==t&&(this._styleCommandsNeededDirty=!0,this._styleCommandsNeeded=t)};xr.prototype.setShow=function(e,t){this._batchTexture.setShow(e,t)};xr.prototype.setAllShow=function(e){this._batchTexture.setAllShow(e)};xr.prototype.getShow=function(e){return this._batchTexture.getShow(e)};xr.prototype.setColor=function(e,t){this._batchTexture.setColor(e,t)};xr.prototype.setAllColor=function(e){this._batchTexture.setAllColor(e)};xr.prototype.getColor=function(e,t){return this._batchTexture.getColor(e,t)};xr.prototype.getPickColor=function(e){return this._batchTexture.getPickColor(e)};xr.prototype.getFeature=function(e){return this._features[e]};xr.prototype.hasProperty=function(e,t){return this._propertyTable.hasProperty(e,t)};xr.prototype.hasPropertyBySemantic=function(e,t){return this._propertyTable.hasPropertyBySemantic(e,t)};xr.prototype.getProperty=function(e,t){return this._propertyTable.getProperty(e,t)};xr.prototype.getPropertyBySemantic=function(e,t){return this._propertyTable.getPropertyBySemantic(e,t)};xr.prototype.getPropertyIds=function(e){return this._propertyTable.getPropertyIds(e)};xr.prototype.setProperty=function(e,t,n){return this._propertyTable.setProperty(e,t,n)};xr.prototype.isClass=function(e,t){return this._propertyTable.isClass(e,t)};xr.prototype.isExactClass=function(e,t){return this._propertyTable.isExactClass(e,t)};xr.prototype.getExactClassName=function(e){return this._propertyTable.getExactClassName(e)};var I9e=new Y;xr.prototype.applyStyle=function(e){if(!d(e)){this.setAllColor(Xc.DEFAULT_COLOR_VALUE),this.setAllShow(Xc.DEFAULT_SHOW_VALUE);return}for(let t=0;t<this._featuresLength;t++){let n=this.getFeature(t),i=d(e.color)?g(e.color.evaluateColor(n,I9e),Xc.DEFAULT_COLOR_VALUE):Xc.DEFAULT_COLOR_VALUE,o=d(e.show)?g(e.show.evaluate(n),Xc.DEFAULT_SHOW_VALUE):Xc.DEFAULT_SHOW_VALUE;this.setColor(t,i),this.setShow(t,o)}};xr.prototype.isDestroyed=function(){return!1};xr.prototype.destroy=function(e){this._batchTexture=this._batchTexture&&this._batchTexture.destroy(),ue(this)};var fX=xr;var tTn=T(S(),1);var Ehn=T(S(),1);var Xmn=T(S(),1),pX=`czm_modelMaterial defaultModelMaterial()
  5361. {
  5362. czm_modelMaterial material;
  5363. material.diffuse = vec3(0.0);
  5364. material.specular = vec3(1.0);
  5365. material.roughness = 1.0;
  5366. material.occlusion = 1.0;
  5367. material.normalEC = vec3(0.0, 0.0, 1.0);
  5368. material.emissive = vec3(0.0);
  5369. material.alpha = 1.0;
  5370. return material;
  5371. }
  5372. vec4 handleAlpha(vec3 color, float alpha)
  5373. {
  5374. #ifdef ALPHA_MODE_MASK
  5375. if (alpha < u_alphaCutoff) {
  5376. discard;
  5377. }
  5378. #endif
  5379. return vec4(color, alpha);
  5380. }
  5381. SelectedFeature selectedFeature;
  5382. void main()
  5383. {
  5384. #ifdef HAS_MODEL_SPLITTER
  5385. modelSplitterStage();
  5386. #endif
  5387. czm_modelMaterial material = defaultModelMaterial();
  5388. ProcessedAttributes attributes;
  5389. geometryStage(attributes);
  5390. FeatureIds featureIds;
  5391. featureIdStage(featureIds, attributes);
  5392. Metadata metadata;
  5393. MetadataClass metadataClass;
  5394. MetadataStatistics metadataStatistics;
  5395. metadataStage(metadata, metadataClass, metadataStatistics, attributes);
  5396. #ifdef HAS_SELECTED_FEATURE_ID
  5397. selectedFeatureIdStage(selectedFeature, featureIds);
  5398. #endif
  5399. #ifndef CUSTOM_SHADER_REPLACE_MATERIAL
  5400. materialStage(material, attributes, selectedFeature);
  5401. #endif
  5402. #ifdef HAS_CUSTOM_FRAGMENT_SHADER
  5403. customShaderStage(material, attributes, featureIds, metadata, metadataClass, metadataStatistics);
  5404. #endif
  5405. lightingStage(material, attributes);
  5406. #ifdef HAS_SELECTED_FEATURE_ID
  5407. cpuStylingStage(material, selectedFeature);
  5408. #endif
  5409. #ifdef HAS_MODEL_COLOR
  5410. modelColorStage(material);
  5411. #endif
  5412. #ifdef HAS_PRIMITIVE_OUTLINE
  5413. primitiveOutlineStage(material);
  5414. #endif
  5415. vec4 color = handleAlpha(material.diffuse, material.alpha);
  5416. #ifdef HAS_CLIPPING_PLANES
  5417. modelClippingPlanesStage(color);
  5418. #endif
  5419. #if defined(HAS_SILHOUETTE) && defined(HAS_NORMALS)
  5420. silhouetteStage(color);
  5421. #endif
  5422. out_FragColor = color;
  5423. }
  5424. `;var Wmn=T(S(),1),bX=`precision highp float;
  5425. czm_modelVertexOutput defaultVertexOutput(vec3 positionMC) {
  5426. czm_modelVertexOutput vsOutput;
  5427. vsOutput.positionMC = positionMC;
  5428. vsOutput.pointSize = 1.0;
  5429. return vsOutput;
  5430. }
  5431. void main()
  5432. {
  5433. // Initialize the attributes struct with all
  5434. // attributes except quantized ones.
  5435. ProcessedAttributes attributes;
  5436. initializeAttributes(attributes);
  5437. // Dequantize the quantized ones and add them to the
  5438. // attributes struct.
  5439. #ifdef USE_DEQUANTIZATION
  5440. dequantizationStage(attributes);
  5441. #endif
  5442. #ifdef HAS_MORPH_TARGETS
  5443. morphTargetsStage(attributes);
  5444. #endif
  5445. #ifdef HAS_SKINNING
  5446. skinningStage(attributes);
  5447. #endif
  5448. #ifdef HAS_PRIMITIVE_OUTLINE
  5449. primitiveOutlineStage();
  5450. #endif
  5451. // Compute the bitangent according to the formula in the glTF spec.
  5452. // Normal and tangents can be affected by morphing and skinning, so
  5453. // the bitangent should not be computed until their values are finalized.
  5454. #ifdef HAS_BITANGENTS
  5455. attributes.bitangentMC = normalize(cross(attributes.normalMC, attributes.tangentMC) * attributes.tangentSignMC);
  5456. #endif
  5457. FeatureIds featureIds;
  5458. featureIdStage(featureIds, attributes);
  5459. #ifdef HAS_SELECTED_FEATURE_ID
  5460. SelectedFeature feature;
  5461. selectedFeatureIdStage(feature, featureIds);
  5462. // Handle any show properties that come from the style.
  5463. cpuStylingStage(attributes.positionMC, feature);
  5464. #endif
  5465. #if defined(USE_2D_POSITIONS) || defined(USE_2D_INSTANCING)
  5466. // The scene mode 2D pipeline stage and instancing stage add a different
  5467. // model view matrix to accurately project the model to 2D. However, the
  5468. // output positions and normals should be transformed by the 3D matrices
  5469. // to keep the data the same for the fragment shader.
  5470. mat4 modelView = czm_modelView3D;
  5471. mat3 normal = czm_normal3D;
  5472. #else
  5473. // These are used for individual model projection because they will
  5474. // automatically change based on the scene mode.
  5475. mat4 modelView = czm_modelView;
  5476. mat3 normal = czm_normal;
  5477. #endif
  5478. // Update the position for this instance in place
  5479. #ifdef HAS_INSTANCING
  5480. // The legacy instance stage is used when rendering i3dm models that
  5481. // encode instances transforms in world space, as opposed to glTF models
  5482. // that use EXT_mesh_gpu_instancing, where instance transforms are encoded
  5483. // in object space.
  5484. #ifdef USE_LEGACY_INSTANCING
  5485. mat4 instanceModelView;
  5486. mat3 instanceModelViewInverseTranspose;
  5487. legacyInstancingStage(attributes, instanceModelView, instanceModelViewInverseTranspose);
  5488. modelView = instanceModelView;
  5489. normal = instanceModelViewInverseTranspose;
  5490. #else
  5491. instancingStage(attributes);
  5492. #endif
  5493. #ifdef USE_PICKING
  5494. v_pickColor = a_pickColor;
  5495. #endif
  5496. #endif
  5497. Metadata metadata;
  5498. MetadataClass metadataClass;
  5499. MetadataStatistics metadataStatistics;
  5500. metadataStage(metadata, metadataClass, metadataStatistics, attributes);
  5501. #ifdef HAS_CUSTOM_VERTEX_SHADER
  5502. czm_modelVertexOutput vsOutput = defaultVertexOutput(attributes.positionMC);
  5503. customShaderStage(vsOutput, attributes, featureIds, metadata, metadataClass, metadataStatistics);
  5504. #endif
  5505. // Compute the final position in each coordinate system needed.
  5506. // This returns the value that will be assigned to gl_Position.
  5507. vec4 positionClip = geometryStage(attributes, modelView, normal);
  5508. #ifdef HAS_SILHOUETTE
  5509. silhouetteStage(attributes, positionClip);
  5510. #endif
  5511. #ifdef HAS_POINT_CLOUD_SHOW_STYLE
  5512. float show = pointCloudShowStylingStage(attributes, metadata);
  5513. #else
  5514. float show = 1.0;
  5515. #endif
  5516. #ifdef HAS_POINT_CLOUD_BACK_FACE_CULLING
  5517. show *= pointCloudBackFaceCullingStage();
  5518. #endif
  5519. #ifdef HAS_POINT_CLOUD_COLOR_STYLE
  5520. v_pointCloudColor = pointCloudColorStylingStage(attributes, metadata);
  5521. #endif
  5522. #ifdef PRIMITIVE_TYPE_POINTS
  5523. #ifdef HAS_CUSTOM_VERTEX_SHADER
  5524. gl_PointSize = vsOutput.pointSize;
  5525. #elif defined(HAS_POINT_CLOUD_POINT_SIZE_STYLE) || defined(HAS_POINT_CLOUD_ATTENUATION)
  5526. gl_PointSize = pointCloudPointSizeStylingStage(attributes, metadata);
  5527. #else
  5528. gl_PointSize = 1.0;
  5529. #endif
  5530. gl_PointSize *= show;
  5531. #endif
  5532. gl_Position = show * positionClip;
  5533. }
  5534. `;var Kmn=T(S(),1);function HY(e){e=g(e,g.EMPTY_OBJECT);let t=e.command,n=e.primitiveRenderResources,i=n.model;this._command=t,this._model=i,this._runtimePrimitive=n.runtimePrimitive,this._modelMatrix=t.modelMatrix,this._boundingVolume=t.boundingVolume,this._cullFace=t.renderState.cull.face;let o=i.classificationType;this._classificationType=o,this._classifiesTerrain=o!==kn.CESIUM_3D_TILE,this._classifies3DTiles=o!==kn.TERRAIN,this._useDebugWireframe=i._enableDebugWireframe&&i.debugWireframe,this._pickId=n.pickId,this._commandListTerrain=[],this._commandList3DTiles=[],this._commandListIgnoreShow=[],this._commandListDebugWireframe=[],this._commandListTerrainPicking=[],this._commandList3DTilesPicking=[],w9e(this)}function W9e(e){return{colorMask:{red:!1,green:!1,blue:!1,alpha:!1},stencilTest:{enabled:!0,frontFunction:e,frontOperation:{fail:ht.KEEP,zFail:ht.DECREMENT_WRAP,zPass:ht.KEEP},backFunction:e,backOperation:{fail:ht.KEEP,zFail:ht.INCREMENT_WRAP,zPass:ht.KEEP},reference:Ft.CESIUM_3D_TILE_MASK,mask:Ft.CESIUM_3D_TILE_MASK},stencilMask:Ft.CLASSIFICATION_MASK,depthTest:{enabled:!0,func:Ua.LESS_OR_EQUAL},depthMask:!1}}var P9e={stencilTest:{enabled:!0,frontFunction:Dn.NOT_EQUAL,frontOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},backFunction:Dn.NOT_EQUAL,backOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},reference:0,mask:Ft.CLASSIFICATION_MASK},stencilMask:Ft.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1,blending:dn.PRE_MULTIPLIED_ALPHA_BLEND},v9e={stencilTest:{enabled:!0,frontFunction:Dn.NOT_EQUAL,frontOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},backFunction:Dn.NOT_EQUAL,backOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},reference:0,mask:Ft.CLASSIFICATION_MASK},stencilMask:Ft.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1},qne=[];function w9e(e){let t=e._command,n=qne;if(e._useDebugWireframe){t.pass=Re.OPAQUE,n.length=0,n.push(t),e._commandListDebugWireframe=yX(e,n,e._commandListDebugWireframe);let r=e._commandListDebugWireframe,s=r.length;for(let a=0;a<s;a++){let c=r[a];c.count*=2,c.offset*=2}return}let o=e.model.allowPicking;if(e._classifiesTerrain){let r=Re.TERRAIN_CLASSIFICATION,s=KY(t,r),a=Qne(t,r);n.length=0,n.push(s,a),e._commandListTerrain=yX(e,n,e._commandListTerrain),o&&(e._commandListTerrainPicking=jne(e,n,e._commandListTerrainPicking))}if(e._classifies3DTiles){let r=Re.CESIUM_3D_TILE_CLASSIFICATION,s=KY(t,r),a=Qne(t,r);n.length=0,n.push(s,a),e._commandList3DTiles=yX(e,n,e._commandList3DTiles),o&&(e._commandList3DTilesPicking=jne(e,n,e._commandList3DTilesPicking))}}function yX(e,t,n){let i=e._runtimePrimitive,o=i.batchLengths,r=i.batchOffsets,s=o.length,a=t.length;for(let c=0;c<s;c++){let l=o[c],u=r[c];for(let m=0;m<a;m++){let p=t[m],y=nt.shallowClone(p);y.count=l,y.offset=u,n.push(y)}}return n}function KY(e,t){let n=nt.shallowClone(e);n.cull=!1,n.pass=t;let i=t===Re.TERRAIN_CLASSIFICATION?Dn.ALWAYS:Dn.EQUAL,o=W9e(i);return n.renderState=De.fromCache(o),n}function Qne(e,t){let n=nt.shallowClone(e);return n.cull=!1,n.pass=t,n.renderState=De.fromCache(P9e),n}var F9e=[];function jne(e,t,n){let i=De.fromCache(v9e),o=t[0],r=t[1],s=nt.shallowClone(o);s.cull=!0,s.pickOnly=!0;let a=nt.shallowClone(r);a.cull=!0,a.pickOnly=!0,a.renderState=i,a.pickId=e._pickId;let c=F9e;return c.length=0,c.push(s,a),yX(e,c,n)}Object.defineProperties(HY.prototype,{command:{get:function(){return this._command}},runtimePrimitive:{get:function(){return this._runtimePrimitive}},batchLengths:{get:function(){return this._runtimePrimitive.batchLengths}},batchOffsets:{get:function(){return this._runtimePrimitive.batchOffsets}},model:{get:function(){return this._model}},classificationType:{get:function(){return this._classificationType}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._modelMatrix=A.clone(e,this._modelMatrix);let t=this._runtimePrimitive.boundingSphere;this._boundingVolume=ce.transform(t,this._modelMatrix,this._boundingVolume)}},boundingVolume:{get:function(){return this._boundingVolume}},cullFace:{get:function(){return this._cullFace},set:function(e){this._cullFace=e}}});HY.prototype.pushCommands=function(e,t){let n=e.passes;if(n.render){if(this._useDebugWireframe){t.push.apply(t,this._commandListDebugWireframe);return}if(this._classifiesTerrain&&t.push.apply(t,this._commandListTerrain),this._classifies3DTiles&&t.push.apply(t,this._commandList3DTiles),e.invertClassification&&this._classifies3DTiles){if(this._commandListIgnoreShow.length===0){let o=Re.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW,r=KY(this._command,o),s=qne;s.length=0,s.push(r),this._commandListIgnoreShow=yX(this,s,this._commandListIgnoreShow)}t.push.apply(t,this._commandListIgnoreShow)}}return n.pick&&(this._classifiesTerrain&&t.push.apply(t,this._commandListTerrainPicking),this._classifies3DTiles&&t.push.apply(t,this._commandList3DTilesPicking)),t};var gX=HY;var hhn=T(S(),1);function JM(e){e=g(e,g.EMPTY_OBJECT);let t=e.command,n=e.primitiveRenderResources,i=n.model;this._model=i;let o=n.runtimePrimitive;this._runtimePrimitive=o;let r=t.pass===Re.TRANSLUCENT,a=!o.primitive.material.doubleSided&&!r,c=n.hasSilhouette,l=!r&&!c,u=n.hasSkipLevelOfDetail&&!r,m=c;this._command=t,this._modelMatrix=A.clone(t.modelMatrix),this._boundingVolume=ce.clone(t.boundingVolume),this._modelMatrix2D=new A,this._boundingVolume2D=new ce,this._modelMatrix2DDirty=!1,this._backFaceCulling=t.renderState.cull.enabled,this._cullFace=t.renderState.cull.face,this._shadows=i.shadows,this._debugShowBoundingVolume=t.debugShowBoundingVolume,this._usesBackFaceCulling=a,this._needsTranslucentCommand=l,this._needsSkipLevelOfDetailCommands=u,this._needsSilhouetteCommands=m,this._originalCommand=void 0,this._translucentCommand=void 0,this._skipLodBackfaceCommand=void 0,this._skipLodStencilCommand=void 0,this._silhouetteModelCommand=void 0,this._silhouetteColorCommand=void 0,this._derivedCommands=[],this._has2DCommands=!1,A9e(this)}function Ap(e){this.command=e.command,this.updateShadows=e.updateShadows,this.updateBackFaceCulling=e.updateBackFaceCulling,this.updateCullFace=e.updateCullFace,this.updateDebugShowBoundingVolume=e.updateDebugShowBoundingVolume,this.is2D=g(e.is2D,!1),this.derivedCommand2D=void 0}Ap.clone=function(e){return new Ap({command:e.command,updateShadows:e.updateShadows,updateBackFaceCulling:e.updateBackFaceCulling,updateCullFace:e.updateCullFace,updateDebugShowBoundingVolume:e.updateDebugShowBoundingVolume,is2D:e.is2D,derivedCommand2D:e.derivedCommand2D})};function A9e(e){let t=e._command;t.modelMatrix=e._modelMatrix,t.boundingVolume=e._boundingVolume;let n=e._model,i=e._usesBackFaceCulling,o=e._derivedCommands;e._originalCommand=new Ap({command:t,updateShadows:!0,updateBackFaceCulling:i,updateCullFace:i,updateDebugShowBoundingVolume:!0,is2D:!1}),o.push(e._originalCommand),e._needsTranslucentCommand&&(e._translucentCommand=new Ap({command:Y9e(t),updateShadows:!0,updateBackFaceCulling:!1,updateCullFace:!1,updateDebugShowBoundingVolume:!0}),o.push(e._translucentCommand)),e._needsSkipLevelOfDetailCommands&&(e._skipLodBackfaceCommand=new Ap({command:Q9e(t),updateShadows:!1,updateBackFaceCulling:!1,updateCullFace:i,updateDebugShowBoundingVolume:!1}),e._skipLodStencilCommand=new Ap({command:j9e(t,n),updateShadows:!0,updateBackFaceCulling:i,updateCullFace:i,updateDebugShowBoundingVolume:!0}),o.push(e._skipLodBackfaceCommand),o.push(e._skipLodStencilCommand)),e._needsSilhouetteCommands&&(e._silhouetteModelCommand=new Ap({command:O9e(t,n),updateShadows:!0,updateBackFaceCulling:i,updateCullFace:i,updateDebugShowBoundingVolume:!0}),e._silhouetteColorCommand=new Ap({command:K9e(t,n),updateShadows:!1,updateBackFaceCulling:!1,updateCullFace:!1,updateDebugShowBoundingVolume:!1}),o.push(e._silhouetteModelCommand),o.push(e._silhouetteColorCommand))}Object.defineProperties(JM.prototype,{command:{get:function(){return this._command}},runtimePrimitive:{get:function(){return this._runtimePrimitive}},model:{get:function(){return this._model}},primitiveType:{get:function(){return this._command.primitiveType}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._modelMatrix=A.clone(e,this._modelMatrix),this._modelMatrix2DDirty=!0,this._boundingVolume=ce.transform(this.runtimePrimitive.boundingSphere,this._modelMatrix,this._boundingVolume)}},boundingVolume:{get:function(){return this._boundingVolume}},shadows:{get:function(){return this._shadows},set:function(e){this._shadows=e,N9e(this)}},backFaceCulling:{get:function(){return this._backFaceCulling},set:function(e){this._backFaceCulling!==e&&(this._backFaceCulling=e,U9e(this))}},cullFace:{get:function(){return this._cullFace},set:function(e){this._cullFace!==e&&(this._cullFace=e,k9e(this))}},debugShowBoundingVolume:{get:function(){return this._debugShowBoundingVolume},set:function(e){this._debugShowBoundingVolume!==e&&(this._debugShowBoundingVolume=e,D9e(this))}}});function M9e(e,t){let n=e._modelMatrix;e._modelMatrix2D=A.clone(n,e._modelMatrix2D),e._modelMatrix2D[13]-=W.sign(n[13])*2*W.PI*t.mapProjection.ellipsoid.maximumRadius,e._boundingVolume2D=ce.transform(e.runtimePrimitive.boundingSphere,e._modelMatrix2D,e._boundingVolume2D)}function N9e(e){let t=e.shadows,n=xn.castShadows(t),i=xn.receiveShadows(t),o=e._derivedCommands;for(let r=0;r<o.length;++r){let s=o[r];if(s.updateShadows){let a=s.command;a.castShadows=n,a.receiveShadows=i}}}function U9e(e){let t=e.backFaceCulling,n=e._derivedCommands;for(let i=0;i<n.length;++i){let o=n[i];if(o.updateBackFaceCulling){let r=o.command,s=Ke(r.renderState,!0);s.cull.enabled=t,r.renderState=De.fromCache(s)}}}function k9e(e){let t=e.cullFace,n=e._derivedCommands;for(let i=0;i<n.length;++i){let o=n[i];if(o.updateCullFace){let r=o.command,s=Ke(r.renderState,!0);s.cull.face=t,r.renderState=De.fromCache(s)}}}function D9e(e){let t=e.debugShowBoundingVolume,n=e._derivedCommands;for(let i=0;i<n.length;++i){let o=n[i];if(o.updateDebugShowBoundingVolume){let r=o.command;r.debugShowBoundingVolume=t}}}JM.prototype.pushCommands=function(e,t){let n=$ne(this,e);n&&!this._has2DCommands&&(B9e(this),this._has2DCommands=!0,this._modelMatrix2DDirty=!0),this._modelMatrix2DDirty&&(M9e(this,e),this._modelMatrix2DDirty=!1);let i=this.model.styleCommandsNeeded;if(!(this._needsTranslucentCommand&&d(i)&&(i!==Gm.ALL_OPAQUE&&eC(t,this._translucentCommand,n),i===Gm.ALL_TRANSLUCENT))){if(this._needsSkipLevelOfDetailCommands){let{tileset:o,tile:r}=this._model.content;if(o.hasMixedContent){r._finalResolution||eC(o._backfaceCommands,this._skipLodBackfaceCommand,n),H9e(this,r,n),eC(t,this._skipLodStencilCommand,n);return}}if(this._needsSilhouetteCommands){eC(t,this._silhouetteModelCommand,n);return}return eC(t,this._originalCommand,n),t}};JM.prototype.pushSilhouetteCommands=function(e,t){let n=$ne(this,e);return eC(t,this._silhouetteColorCommand,n),t};function eC(e,t,n){e.push(t.command),n&&e.push(t.derivedCommand2D.command)}function $ne(e,t){if(t.mode!==ie.SCENE2D||e.model._projectTo2D)return!1;let i=e.model.sceneGraph._boundingSphere2D,o=i.center.y-i.radius,r=i.center.y+i.radius,s=t.mapProjection.ellipsoid.maximumRadius*W.PI;return o<s&&r>s||o<-s&&r>-s}function $S(e,t){if(!d(t))return;let n=Ap.clone(t),i=nt.shallowClone(t.command);return i.modelMatrix=e._modelMatrix2D,i.boundingVolume=e._boundingVolume2D,n.command=i,n.updateShadows=!1,n.is2D=!0,t.derivedCommand2D=n,e._derivedCommands.push(n),n}function B9e(e){$S(e,e._originalCommand),$S(e,e._translucentCommand),$S(e,e._skipLodBackfaceCommand),$S(e,e._skipLodStencilCommand),$S(e,e._silhouetteModelCommand),$S(e,e._silhouetteColorCommand)}function Y9e(e){let t=nt.shallowClone(e);t.pass=Re.TRANSLUCENT;let n=Ke(e.renderState,!0);return n.cull.enabled=!1,n.depthMask=!1,n.blending=dn.ALPHA_BLEND,t.renderState=De.fromCache(n),t}function O9e(e,t){let n=t._silhouetteId%255,i=nt.shallowClone(e),o=Ke(e.renderState,!0);return o.stencilTest={enabled:!0,frontFunction:ne.ALWAYS,backFunction:ne.ALWAYS,reference:n,mask:-1,frontOperation:{fail:ne.KEEP,zFail:ne.KEEP,zPass:ne.REPLACE},backOperation:{fail:ne.KEEP,zFail:ne.KEEP,zPass:ne.REPLACE}},t.isInvisible()&&(o.colorMask={red:!1,green:!1,blue:!1,alpha:!1}),i.renderState=De.fromCache(o),i}function K9e(e,t){let n=t._silhouetteId%255,i=nt.shallowClone(e),o=Ke(e.renderState,!0);o.cull.enabled=!1,(e.pass===Re.TRANSLUCENT||t.silhouetteColor.alpha<1)&&(i.pass=Re.TRANSLUCENT,o.depthMask=!1,o.blending=dn.ALPHA_BLEND),o.stencilTest={enabled:!0,frontFunction:ne.NOTEQUAL,backFunction:ne.NOTEQUAL,reference:n,mask:-1,frontOperation:{fail:ne.KEEP,zFail:ne.KEEP,zPass:ne.KEEP},backOperation:{fail:ne.KEEP,zFail:ne.KEEP,zPass:ne.KEEP}};let s=Ke(e.uniformMap);return s.model_silhouettePass=function(){return!0},i.renderState=De.fromCache(o),i.uniformMap=s,i.castShadows=!1,i.receiveShadows=!1,i}function H9e(e,t,n){let i=e._skipLodStencilCommand,o=i.command,r=t._selectionDepth,s=z9e(o);if(r!==s){let a=J9e(r),c=Ke(o.renderState,!0);c.stencilTest.reference=a,o.renderState=De.fromCache(c),n&&(i.derivedCommand2D.renderState=c)}}function z9e(e){return(e.renderState.stencilTest.reference&Ft.SKIP_LOD_MASK)>>>Ft.SKIP_LOD_BIT_SHIFT}function J9e(e){return Ft.CESIUM_3D_TILE_MASK|e<<Ft.SKIP_LOD_BIT_SHIFT}function Q9e(e){let t=nt.shallowClone(e),n=Ke(e.renderState,!0);n.cull.enabled=!0,n.cull.face=bi.FRONT,n.colorMask={red:!1,green:!1,blue:!1,alpha:!1},n.polygonOffset={enabled:!0,factor:5,units:5};let i=Ke(t.uniformMap),o=new D(5,5);return i.u_polygonOffset=function(){return o},t.renderState=De.fromCache(n),t.uniformMap=i,t.castShadows=!1,t.receiveShadows=!1,t}function j9e(e){let t=nt.shallowClone(e),n=Ke(e.renderState,!0),{stencilTest:i}=n;return i.enabled=!0,i.mask=Ft.SKIP_LOD_MASK,i.reference=Ft.CESIUM_3D_TILE_MASK,i.frontFunction=Dn.GREATER_OR_EQUAL,i.frontOperation.zPass=ht.REPLACE,i.backFunction=Dn.GREATER_OR_EQUAL,i.backOperation.zPass=ht.REPLACE,n.stencilMask=Ft.CESIUM_3D_TILE_MASK|Ft.SKIP_LOD_MASK,t.renderState=De.fromCache(n),t}var xX=JM;function q9e(e,t){let n=e.shaderBuilder;n.addVertexLines(bX),n.addFragmentLines(pX);let i=$9e(e),o=new ti({context:t.context,indexBuffer:i,attributes:e.attributes}),r=e.model;r._pipelineResources.push(o);let s=n.buildShaderProgram(t.context);r._pipelineResources.push(s);let a=e.alphaOptions.pass,c=r.sceneGraph,l=t.mode===ie.SCENE3D,u,m;if(!l&&!t.scene3DOnly&&r._projectTo2D)u=A.multiplyTransformation(c._computedModelMatrix,e.runtimeNode.computedTransform,new A),m=e.runtimePrimitive.boundingSphere2D;else{let V=l?c._computedModelMatrix:c._computedModelMatrix2D;u=A.multiplyTransformation(V,e.runtimeNode.computedTransform,new A),m=ce.transform(e.boundingSphere,u,e.boundingSphere)}let p=Ke(De.fromCache(e.renderStateOptions),!0);p.cull.face=nn.getCullFace(u,e.primitiveType),p=De.fromCache(p);let y=d(r.classificationType),f=y?!1:xn.castShadows(r.shadows),x=y?!1:xn.receiveShadows(r.shadows),_=y?void 0:e.pickId,C=new nt({boundingVolume:m,modelMatrix:u,uniformMap:e.uniformMap,renderState:p,vertexArray:o,shaderProgram:s,cull:r.cull,pass:a,count:e.count,owner:r,pickId:_,instanceCount:e.instanceCount,primitiveType:e.primitiveType,debugShowBoundingVolume:r.debugShowBoundingVolume,castShadows:f,receiveShadows:x});return y?new gX({primitiveRenderResources:e,command:C}):new xX({primitiveRenderResources:e,command:C})}function $9e(e){let t=e.wireframeIndexBuffer;if(d(t))return t;let n=e.indices;if(d(n))return n.buffer}var _X=q9e;var Ahn=T(S(),1);var Ihn=T(S(),1);var Mx={VERTEX:0,FRAGMENT:1,BOTH:2};Mx.includesVertexShader=function(e){return e===Mx.VERTEX||e===Mx.BOTH};Mx.includesFragmentShader=function(e){return e===Mx.FRAGMENT||e===Mx.BOTH};var Le=Object.freeze(Mx);var eie={name:"TilesetPipelineStage"};eie.process=function(e,t,n){if(t.hasSkipLevelOfDetail(n)){e.shaderBuilder.addDefine("POLYGON_OFFSET",void 0,Le.FRAGMENT);let r={u_polygonOffset:function(){return D.ZERO}};e.uniformMap=xt(r,e.uniformMap),e.hasSkipLevelOfDetail=!0}let i=e.renderStateOptions;i.stencilTest=Ft.setCesium3DTileBit(),i.stencilMask=Ft.CESIUM_3D_TILE_MASK};var TX=eie;var Khn=T(S(),1);var Nhn=T(S(),1),SX=`vec3 proceduralIBL(
  5535. vec3 positionEC,
  5536. vec3 normalEC,
  5537. vec3 lightDirectionEC,
  5538. vec3 lightColorHdr,
  5539. czm_pbrParameters pbrParameters
  5540. ) {
  5541. vec3 v = -positionEC;
  5542. vec3 positionWC = vec3(czm_inverseView * vec4(positionEC, 1.0));
  5543. vec3 vWC = -normalize(positionWC);
  5544. vec3 l = normalize(lightDirectionEC);
  5545. vec3 n = normalEC;
  5546. vec3 r = normalize(czm_inverseViewRotation * normalize(reflect(v, n)));
  5547. float NdotL = clamp(dot(n, l), 0.001, 1.0);
  5548. float NdotV = abs(dot(n, v)) + 0.001;
  5549. // Figure out if the reflection vector hits the ellipsoid
  5550. float vertexRadius = length(positionWC);
  5551. float horizonDotNadir = 1.0 - min(1.0, czm_ellipsoidRadii.x / vertexRadius);
  5552. float reflectionDotNadir = dot(r, normalize(positionWC));
  5553. // Flipping the X vector is a cheap way to get the inverse of czm_temeToPseudoFixed, since that's a rotation about Z.
  5554. r.x = -r.x;
  5555. r = -normalize(czm_temeToPseudoFixed * r);
  5556. r.x = -r.x;
  5557. vec3 diffuseColor = pbrParameters.diffuseColor;
  5558. float roughness = pbrParameters.roughness;
  5559. vec3 specularColor = pbrParameters.f0;
  5560. float inverseRoughness = 1.04 - roughness;
  5561. inverseRoughness *= inverseRoughness;
  5562. vec3 sceneSkyBox = czm_textureCube(czm_environmentMap, r).rgb * inverseRoughness;
  5563. float atmosphereHeight = 0.05;
  5564. float blendRegionSize = 0.1 * ((1.0 - inverseRoughness) * 8.0 + 1.1 - horizonDotNadir);
  5565. float blendRegionOffset = roughness * -1.0;
  5566. float farAboveHorizon = clamp(horizonDotNadir - blendRegionSize * 0.5 + blendRegionOffset, 1.0e-10 - blendRegionSize, 0.99999);
  5567. float aroundHorizon = clamp(horizonDotNadir + blendRegionSize * 0.5, 1.0e-10 - blendRegionSize, 0.99999);
  5568. float farBelowHorizon = clamp(horizonDotNadir + blendRegionSize * 1.5, 1.0e-10 - blendRegionSize, 0.99999);
  5569. float smoothstepHeight = smoothstep(0.0, atmosphereHeight, horizonDotNadir);
  5570. vec3 belowHorizonColor = mix(vec3(0.1, 0.15, 0.25), vec3(0.4, 0.7, 0.9), smoothstepHeight);
  5571. vec3 nadirColor = belowHorizonColor * 0.5;
  5572. vec3 aboveHorizonColor = mix(vec3(0.9, 1.0, 1.2), belowHorizonColor, roughness * 0.5);
  5573. vec3 blueSkyColor = mix(vec3(0.18, 0.26, 0.48), aboveHorizonColor, reflectionDotNadir * inverseRoughness * 0.5 + 0.75);
  5574. vec3 zenithColor = mix(blueSkyColor, sceneSkyBox, smoothstepHeight);
  5575. vec3 blueSkyDiffuseColor = vec3(0.7, 0.85, 0.9);
  5576. float diffuseIrradianceFromEarth = (1.0 - horizonDotNadir) * (reflectionDotNadir * 0.25 + 0.75) * smoothstepHeight;
  5577. float diffuseIrradianceFromSky = (1.0 - smoothstepHeight) * (1.0 - (reflectionDotNadir * 0.25 + 0.25));
  5578. vec3 diffuseIrradiance = blueSkyDiffuseColor * clamp(diffuseIrradianceFromEarth + diffuseIrradianceFromSky, 0.0, 1.0);
  5579. float notDistantRough = (1.0 - horizonDotNadir * roughness * 0.8);
  5580. vec3 specularIrradiance = mix(zenithColor, aboveHorizonColor, smoothstep(farAboveHorizon, aroundHorizon, reflectionDotNadir) * notDistantRough);
  5581. specularIrradiance = mix(specularIrradiance, belowHorizonColor, smoothstep(aroundHorizon, farBelowHorizon, reflectionDotNadir) * inverseRoughness);
  5582. specularIrradiance = mix(specularIrradiance, nadirColor, smoothstep(farBelowHorizon, 1.0, reflectionDotNadir) * inverseRoughness);
  5583. // Luminance model from page 40 of http://silviojemma.com/public/papers/lighting/spherical-harmonic-lighting.pdf
  5584. #ifdef USE_SUN_LUMINANCE
  5585. // Angle between sun and zenith
  5586. float LdotZenith = clamp(dot(normalize(czm_inverseViewRotation * l), vWC), 0.001, 1.0);
  5587. float S = acos(LdotZenith);
  5588. // Angle between zenith and current pixel
  5589. float NdotZenith = clamp(dot(normalize(czm_inverseViewRotation * n), vWC), 0.001, 1.0);
  5590. // Angle between sun and current pixel
  5591. float gamma = acos(NdotL);
  5592. float numerator = ((0.91 + 10.0 * exp(-3.0 * gamma) + 0.45 * pow(NdotL, 2.0)) * (1.0 - exp(-0.32 / NdotZenith)));
  5593. float denominator = (0.91 + 10.0 * exp(-3.0 * S) + 0.45 * pow(LdotZenith,2.0)) * (1.0 - exp(-0.32));
  5594. float luminance = model_luminanceAtZenith * (numerator / denominator);
  5595. #endif
  5596. vec2 brdfLut = texture(czm_brdfLut, vec2(NdotV, roughness)).rg;
  5597. vec3 iblColor = (diffuseIrradiance * diffuseColor * model_iblFactor.x) + (specularIrradiance * czm_srgbToLinear(specularColor * brdfLut.x + brdfLut.y) * model_iblFactor.y);
  5598. float maximumComponent = max(max(lightColorHdr.x, lightColorHdr.y), lightColorHdr.z);
  5599. vec3 lightColor = lightColorHdr / max(maximumComponent, 1.0);
  5600. iblColor *= lightColor;
  5601. #ifdef USE_SUN_LUMINANCE
  5602. iblColor *= luminance;
  5603. #endif
  5604. return iblColor;
  5605. }
  5606. #if defined(DIFFUSE_IBL) || defined(SPECULAR_IBL)
  5607. vec3 textureIBL(
  5608. vec3 positionEC,
  5609. vec3 normalEC,
  5610. vec3 lightDirectionEC,
  5611. czm_pbrParameters pbrParameters
  5612. ) {
  5613. vec3 diffuseColor = pbrParameters.diffuseColor;
  5614. float roughness = pbrParameters.roughness;
  5615. vec3 specularColor = pbrParameters.f0;
  5616. vec3 v = -positionEC;
  5617. vec3 n = normalEC;
  5618. vec3 l = normalize(lightDirectionEC);
  5619. vec3 h = normalize(v + l);
  5620. float NdotV = abs(dot(n, v)) + 0.001;
  5621. float VdotH = clamp(dot(v, h), 0.0, 1.0);
  5622. const mat3 yUpToZUp = mat3(
  5623. -1.0, 0.0, 0.0,
  5624. 0.0, 0.0, -1.0,
  5625. 0.0, 1.0, 0.0
  5626. );
  5627. vec3 cubeDir = normalize(yUpToZUp * model_iblReferenceFrameMatrix * normalize(reflect(-v, n)));
  5628. #ifdef DIFFUSE_IBL
  5629. #ifdef CUSTOM_SPHERICAL_HARMONICS
  5630. vec3 diffuseIrradiance = czm_sphericalHarmonics(cubeDir, model_sphericalHarmonicCoefficients);
  5631. #else
  5632. vec3 diffuseIrradiance = czm_sphericalHarmonics(cubeDir, czm_sphericalHarmonicCoefficients);
  5633. #endif
  5634. #else
  5635. vec3 diffuseIrradiance = vec3(0.0);
  5636. #endif
  5637. #ifdef SPECULAR_IBL
  5638. vec3 r0 = specularColor.rgb;
  5639. float reflectance = max(max(r0.r, r0.g), r0.b);
  5640. vec3 r90 = vec3(clamp(reflectance * 25.0, 0.0, 1.0));
  5641. vec3 F = fresnelSchlick2(r0, r90, VdotH);
  5642. vec2 brdfLut = texture(czm_brdfLut, vec2(NdotV, roughness)).rg;
  5643. #ifdef CUSTOM_SPECULAR_IBL
  5644. vec3 specularIBL = czm_sampleOctahedralProjection(model_specularEnvironmentMaps, model_specularEnvironmentMapsSize, cubeDir, roughness * model_specularEnvironmentMapsMaximumLOD, model_specularEnvironmentMapsMaximumLOD);
  5645. #else
  5646. vec3 specularIBL = czm_sampleOctahedralProjection(czm_specularEnvironmentMaps, czm_specularEnvironmentMapSize, cubeDir, roughness * czm_specularEnvironmentMapsMaximumLOD, czm_specularEnvironmentMapsMaximumLOD);
  5647. #endif
  5648. specularIBL *= F * brdfLut.x + brdfLut.y;
  5649. #else
  5650. vec3 specularIBL = vec3(0.0);
  5651. #endif
  5652. return diffuseColor * diffuseIrradiance + specularColor * specularIBL;
  5653. }
  5654. #endif
  5655. vec3 imageBasedLightingStage(
  5656. vec3 positionEC,
  5657. vec3 normalEC,
  5658. vec3 lightDirectionEC,
  5659. vec3 lightColorHdr,
  5660. czm_pbrParameters pbrParameters
  5661. ) {
  5662. #if defined(DIFFUSE_IBL) || defined(SPECULAR_IBL)
  5663. // Environment maps were provided, use them for IBL
  5664. return textureIBL(
  5665. positionEC,
  5666. normalEC,
  5667. lightDirectionEC,
  5668. pbrParameters
  5669. );
  5670. #else
  5671. // Use the procedural IBL if there are no environment maps
  5672. return proceduralIBL(
  5673. positionEC,
  5674. normalEC,
  5675. lightDirectionEC,
  5676. lightColorHdr,
  5677. pbrParameters
  5678. );
  5679. #endif
  5680. }`;var tie={name:"ImageBasedLightingPipelineStage"};tie.process=function(e,t,n){let i=t.imageBasedLighting,o=e.shaderBuilder;o.addDefine("USE_IBL_LIGHTING",void 0,Le.FRAGMENT),o.addUniform("vec2","model_iblFactor",Le.FRAGMENT),hm.isSupported(n.context)&&((i.useSphericalHarmonics||i.useSpecularEnvironmentMaps||i.enabled)&&o.addUniform("mat3","model_iblReferenceFrameMatrix",Le.FRAGMENT),d(i.sphericalHarmonicCoefficients)?(o.addDefine("DIFFUSE_IBL",void 0,Le.FRAGMENT),o.addDefine("CUSTOM_SPHERICAL_HARMONICS",void 0,Le.FRAGMENT),o.addUniform("vec3","model_sphericalHarmonicCoefficients[9]",Le.FRAGMENT)):i.useDefaultSphericalHarmonics&&o.addDefine("DIFFUSE_IBL",void 0,Le.FRAGMENT),d(i.specularEnvironmentMapAtlas)&&i.specularEnvironmentMapAtlas.ready?(o.addDefine("SPECULAR_IBL",void 0,Le.FRAGMENT),o.addDefine("CUSTOM_SPECULAR_IBL",void 0,Le.FRAGMENT),o.addUniform("sampler2D","model_specularEnvironmentMaps",Le.FRAGMENT),o.addUniform("vec2","model_specularEnvironmentMapsSize",Le.FRAGMENT),o.addUniform("float","model_specularEnvironmentMapsMaximumLOD",Le.FRAGMENT)):t.useDefaultSpecularMaps&&o.addDefine("SPECULAR_IBL",void 0,Le.FRAGMENT)),d(i.luminanceAtZenith)&&(o.addDefine("USE_SUN_LUMINANCE",void 0,Le.FRAGMENT),o.addUniform("float","model_luminanceAtZenith",Le.FRAGMENT)),o.addFragmentLines(SX);let r={model_iblFactor:function(){return i.imageBasedLightingFactor},model_iblReferenceFrameMatrix:function(){return t._iblReferenceFrameMatrix},model_luminanceAtZenith:function(){return i.luminanceAtZenith},model_sphericalHarmonicCoefficients:function(){return i.sphericalHarmonicCoefficients},model_specularEnvironmentMaps:function(){return i.specularEnvironmentMapAtlas.texture},model_specularEnvironmentMapsSize:function(){return i.specularEnvironmentMapAtlas.texture.dimensions},model_specularEnvironmentMapsMaximumLOD:function(){return i.specularEnvironmentMapAtlas.maximumMipmapLevel}};e.uniformMap=xt(r,e.uniformMap)};var CX=tie;var sfn=T(S(),1);var efn=T(S(),1);var eAe=W.EPSILON16;function JY(e){e=g(e,g.EMPTY_OBJECT);let t=e.stage,n=e.runtimeArticulation;this._stage=t,this._runtimeArticulation=n,this._name=t.name,this._type=t.type,this._minimumValue=t.minimumValue,this._maximumValue=t.maximumValue,this._currentValue=t.initialValue}Object.defineProperties(JY.prototype,{stage:{get:function(){return this._stage}},runtimeArticulation:{get:function(){return this._runtimeArticulation}},name:{get:function(){return this._name}},type:{get:function(){return this._type}},minimumValue:{get:function(){return this._minimumValue}},maximumValue:{get:function(){return this._maximumValue}},currentValue:{get:function(){return this._currentValue},set:function(e){e=W.clamp(e,this.minimumValue,this.maximumValue),W.equalsEpsilon(this._currentValue,e,eAe)||(this._currentValue=e,this.runtimeArticulation._dirty=!0)}}});var tAe=new h,zY=new $;JY.prototype.applyStageToMatrix=function(e){let t=this.type,n=this.currentValue,i=tAe,o;switch(t){case Ha.XROTATE:o=$.fromRotationX(W.toRadians(n),zY),e=A.multiplyByMatrix3(e,o,e);break;case Ha.YROTATE:o=$.fromRotationY(W.toRadians(n),zY),e=A.multiplyByMatrix3(e,o,e);break;case Ha.ZROTATE:o=$.fromRotationZ(W.toRadians(n),zY),e=A.multiplyByMatrix3(e,o,e);break;case Ha.XTRANSLATE:i.x=n,i.y=0,i.z=0,e=A.multiplyByTranslation(e,i,e);break;case Ha.YTRANSLATE:i.x=0,i.y=n,i.z=0,e=A.multiplyByTranslation(e,i,e);break;case Ha.ZTRANSLATE:i.x=0,i.y=0,i.z=n,e=A.multiplyByTranslation(e,i,e);break;case Ha.XSCALE:i.x=n,i.y=1,i.z=1,e=A.multiplyByScale(e,i,e);break;case Ha.YSCALE:i.x=1,i.y=n,i.z=1,e=A.multiplyByScale(e,i,e);break;case Ha.ZSCALE:i.x=1,i.y=1,i.z=n,e=A.multiplyByScale(e,i,e);break;case Ha.UNIFORMSCALE:e=A.multiplyByUniformScale(e,n,e);break;default:break}return e};var VX=JY;function QM(e){e=g(e,g.EMPTY_OBJECT);let t=e.articulation,n=e.sceneGraph;this._articulation=t,this._sceneGraph=n,this._name=t.name,this._runtimeStages=[],this._runtimeStagesByName={},this._runtimeNodes=[],this._dirty=!0,nAe(this)}Object.defineProperties(QM.prototype,{articulation:{get:function(){return this._articulation}},sceneGraph:{get:function(){return this._sceneGraph}},name:{get:function(){return this._name}},runtimeStages:{get:function(){return this._runtimeStages}},runtimeNodes:{get:function(){return this._runtimeNodes}}});function nAe(e){let n=e.articulation.stages,i=n.length,o=e._runtimeStages,r=e._runtimeStagesByName;for(let s=0;s<i;s++){let a=n[s],c=new VX({stage:a,runtimeArticulation:e});o.push(c);let l=a.name;r[l]=c}}QM.prototype.setArticulationStage=function(e,t){let n=this._runtimeStagesByName[e];d(n)&&(n.currentValue=t)};var iAe=new A,oAe=new A;QM.prototype.apply=function(){if(!this._dirty)return;this._dirty=!1;let e=A.clone(A.IDENTITY,iAe),t,n=this._runtimeStages,i=n.length;for(t=0;t<i;t++)e=n[t].applyStageToMatrix(e);let o=this._runtimeNodes,r=o.length;for(t=0;t<r;t++){let s=o[t],a=A.multiplyTransformation(s.originalTransform,e,oAe);s.transform=a}};var LX=QM;var pfn=T(S(),1);var cfn=T(S(),1),RX=`void modelColorStage(inout czm_modelMaterial material)
  5681. {
  5682. material.diffuse = mix(material.diffuse, model_color.rgb, model_colorBlend);
  5683. float highlight = ceil(model_colorBlend);
  5684. material.diffuse *= mix(model_color.rgb, vec3(1.0), highlight);
  5685. material.alpha *= model_color.a;
  5686. }`;var tC={name:"ModelColorPipelineStage",COLOR_UNIFORM_NAME:"model_color",COLOR_BLEND_UNIFORM_NAME:"model_colorBlend"};tC.process=function(e,t,n){let i=e.shaderBuilder;i.addDefine("HAS_MODEL_COLOR",void 0,Le.FRAGMENT),i.addFragmentLines(RX);let o={},r=t.color;r.alpha===0&&!t.hasSilhouette(n)&&(e.renderStateOptions.colorMask={red:!1,green:!1,blue:!1,alpha:!1}),r.alpha<1&&(e.alphaOptions.pass=Re.TRANSLUCENT),i.addUniform("vec4",tC.COLOR_UNIFORM_NAME,Le.FRAGMENT),o[tC.COLOR_UNIFORM_NAME]=function(){return t.color},i.addUniform("float",tC.COLOR_BLEND_UNIFORM_NAME,Le.FRAGMENT),o[tC.COLOR_BLEND_UNIFORM_NAME]=function(){return Ka.getColorBlend(t.colorBlendMode,t.colorBlendAmount)},e.uniformMap=xt(o,e.uniformMap)};var kb=tC;var Lfn=T(S(),1);var yfn=T(S(),1),ZX=`#ifdef USE_CLIPPING_PLANES_FLOAT_TEXTURE
  5687. vec4 getClippingPlane(
  5688. highp sampler2D packedClippingPlanes,
  5689. int clippingPlaneNumber,
  5690. mat4 transform
  5691. ) {
  5692. int pixY = clippingPlaneNumber / CLIPPING_PLANES_TEXTURE_WIDTH;
  5693. int pixX = clippingPlaneNumber - (pixY * CLIPPING_PLANES_TEXTURE_WIDTH);
  5694. float pixelWidth = 1.0 / float(CLIPPING_PLANES_TEXTURE_WIDTH);
  5695. float pixelHeight = 1.0 / float(CLIPPING_PLANES_TEXTURE_HEIGHT);
  5696. float u = (float(pixX) + 0.5) * pixelWidth; // sample from center of pixel
  5697. float v = (float(pixY) + 0.5) * pixelHeight;
  5698. vec4 plane = texture(packedClippingPlanes, vec2(u, v));
  5699. return czm_transformPlane(plane, transform);
  5700. }
  5701. #else
  5702. // Handle uint8 clipping texture instead
  5703. vec4 getClippingPlane(
  5704. highp sampler2D packedClippingPlanes,
  5705. int clippingPlaneNumber,
  5706. mat4 transform
  5707. ) {
  5708. int clippingPlaneStartIndex = clippingPlaneNumber * 2; // clipping planes are two pixels each
  5709. int pixY = clippingPlaneStartIndex / CLIPPING_PLANES_TEXTURE_WIDTH;
  5710. int pixX = clippingPlaneStartIndex - (pixY * CLIPPING_PLANES_TEXTURE_WIDTH);
  5711. float pixelWidth = 1.0 / float(CLIPPING_PLANES_TEXTURE_WIDTH);
  5712. float pixelHeight = 1.0 / float(CLIPPING_PLANES_TEXTURE_HEIGHT);
  5713. float u = (float(pixX) + 0.5) * pixelWidth; // sample from center of pixel
  5714. float v = (float(pixY) + 0.5) * pixelHeight;
  5715. vec4 oct32 = texture(packedClippingPlanes, vec2(u, v)) * 255.0;
  5716. vec2 oct = vec2(oct32.x * 256.0 + oct32.y, oct32.z * 256.0 + oct32.w);
  5717. vec4 plane;
  5718. plane.xyz = czm_octDecode(oct, 65535.0);
  5719. plane.w = czm_unpackFloat(texture(packedClippingPlanes, vec2(u + pixelWidth, v)));
  5720. return czm_transformPlane(plane, transform);
  5721. }
  5722. #endif
  5723. float clip(vec4 fragCoord, sampler2D clippingPlanes, mat4 clippingPlanesMatrix) {
  5724. vec4 position = czm_windowToEyeCoordinates(fragCoord);
  5725. vec3 clipNormal = vec3(0.0);
  5726. vec3 clipPosition = vec3(0.0);
  5727. float pixelWidth = czm_metersPerPixel(position);
  5728. #ifdef UNION_CLIPPING_REGIONS
  5729. float clipAmount; // For union planes, we want to get the min distance. So we set the initial value to the first plane distance in the loop below.
  5730. #else
  5731. float clipAmount = 0.0;
  5732. bool clipped = true;
  5733. #endif
  5734. for (int i = 0; i < CLIPPING_PLANES_LENGTH; ++i) {
  5735. vec4 clippingPlane = getClippingPlane(clippingPlanes, i, clippingPlanesMatrix);
  5736. clipNormal = clippingPlane.xyz;
  5737. clipPosition = -clippingPlane.w * clipNormal;
  5738. float amount = dot(clipNormal, (position.xyz - clipPosition)) / pixelWidth;
  5739. #ifdef UNION_CLIPPING_REGIONS
  5740. clipAmount = czm_branchFreeTernary(i == 0, amount, min(amount, clipAmount));
  5741. if (amount <= 0.0) {
  5742. discard;
  5743. }
  5744. #else
  5745. clipAmount = max(amount, clipAmount);
  5746. clipped = clipped && (amount <= 0.0);
  5747. #endif
  5748. }
  5749. #ifndef UNION_CLIPPING_REGIONS
  5750. if (clipped) {
  5751. discard;
  5752. }
  5753. #endif
  5754. return clipAmount;
  5755. }
  5756. void modelClippingPlanesStage(inout vec4 color)
  5757. {
  5758. float clipDistance = clip(gl_FragCoord, model_clippingPlanes, model_clippingPlanesMatrix);
  5759. vec4 clippingPlanesEdgeColor = vec4(1.0);
  5760. clippingPlanesEdgeColor.rgb = model_clippingPlanesEdgeStyle.rgb;
  5761. float clippingPlanesEdgeWidth = model_clippingPlanesEdgeStyle.a;
  5762. if (clipDistance > 0.0 && clipDistance < clippingPlanesEdgeWidth) {
  5763. color = clippingPlanesEdgeColor;
  5764. }
  5765. }
  5766. `;var nie={name:"ModelClippingPlanesPipelineStage"},rAe=new D;nie.process=function(e,t,n){let i=t.clippingPlanes,o=n.context,r=e.shaderBuilder;r.addDefine("HAS_CLIPPING_PLANES",void 0,Le.FRAGMENT),r.addDefine("CLIPPING_PLANES_LENGTH",i.length,Le.FRAGMENT),i.unionClippingRegions&&r.addDefine("UNION_CLIPPING_REGIONS",void 0,Le.FRAGMENT),rs.useFloatTexture(o)&&r.addDefine("USE_CLIPPING_PLANES_FLOAT_TEXTURE",void 0,Le.FRAGMENT);let s=rs.getTextureResolution(i,o,rAe);r.addDefine("CLIPPING_PLANES_TEXTURE_WIDTH",s.x,Le.FRAGMENT),r.addDefine("CLIPPING_PLANES_TEXTURE_HEIGHT",s.y,Le.FRAGMENT),r.addUniform("sampler2D","model_clippingPlanes",Le.FRAGMENT),r.addUniform("vec4","model_clippingPlanesEdgeStyle",Le.FRAGMENT),r.addUniform("mat4","model_clippingPlanesMatrix",Le.FRAGMENT),r.addFragmentLines(ZX);let a={model_clippingPlanes:function(){return i.texture},model_clippingPlanesEdgeStyle:function(){let c=Y.clone(i.edgeColor);return c.alpha=i.edgeWidth,c},model_clippingPlanesMatrix:function(){return t._clippingPlanesMatrix}};e.uniformMap=xt(a,e.uniformMap)};var GX=nie;var Gfn=T(S(),1);function iie(e,t){this._model=e,this._runtimeNode=t}Object.defineProperties(iie.prototype,{name:{get:function(){return this._runtimeNode._name}},id:{get:function(){return this._runtimeNode._id}},show:{get:function(){return this._runtimeNode.show},set:function(e){this._runtimeNode.show=e}},matrix:{get:function(){return this._runtimeNode.transform},set:function(e){d(e)?(this._runtimeNode.transform=e,this._runtimeNode.userAnimated=!0,this._model._userAnimationDirty=!0):(this._runtimeNode.transform=this.originalMatrix,this._runtimeNode.userAnimated=!1)}},originalMatrix:{get:function(){return this._runtimeNode.originalTransform}}});var EX=iie;var Tpn=T(S(),1);var npn=T(S(),1);var Xfn=T(S(),1),XX=`mat4 getInstancingTransform()
  5767. {
  5768. mat4 instancingTransform;
  5769. #ifdef HAS_INSTANCE_MATRICES
  5770. instancingTransform = mat4(
  5771. a_instancingTransformRow0.x, a_instancingTransformRow1.x, a_instancingTransformRow2.x, 0.0, // Column 1
  5772. a_instancingTransformRow0.y, a_instancingTransformRow1.y, a_instancingTransformRow2.y, 0.0, // Column 2
  5773. a_instancingTransformRow0.z, a_instancingTransformRow1.z, a_instancingTransformRow2.z, 0.0, // Column 3
  5774. a_instancingTransformRow0.w, a_instancingTransformRow1.w, a_instancingTransformRow2.w, 1.0 // Column 4
  5775. );
  5776. #else
  5777. vec3 translation = vec3(0.0, 0.0, 0.0);
  5778. vec3 scale = vec3(1.0, 1.0, 1.0);
  5779. #ifdef HAS_INSTANCE_TRANSLATION
  5780. translation = a_instanceTranslation;
  5781. #endif
  5782. #ifdef HAS_INSTANCE_SCALE
  5783. scale = a_instanceScale;
  5784. #endif
  5785. instancingTransform = mat4(
  5786. scale.x, 0.0, 0.0, 0.0,
  5787. 0.0, scale.y, 0.0, 0.0,
  5788. 0.0, 0.0, scale.z, 0.0,
  5789. translation.x, translation.y, translation.z, 1.0
  5790. );
  5791. #endif
  5792. return instancingTransform;
  5793. }
  5794. #ifdef USE_2D_INSTANCING
  5795. mat4 getInstancingTransform2D()
  5796. {
  5797. mat4 instancingTransform2D;
  5798. #ifdef HAS_INSTANCE_MATRICES
  5799. instancingTransform2D = mat4(
  5800. a_instancingTransform2DRow0.x, a_instancingTransform2DRow1.x, a_instancingTransform2DRow2.x, 0.0, // Column 1
  5801. a_instancingTransform2DRow0.y, a_instancingTransform2DRow1.y, a_instancingTransform2DRow2.y, 0.0, // Column 2
  5802. a_instancingTransform2DRow0.z, a_instancingTransform2DRow1.z, a_instancingTransform2DRow2.z, 0.0, // Column 3
  5803. a_instancingTransform2DRow0.w, a_instancingTransform2DRow1.w, a_instancingTransform2DRow2.w, 1.0 // Column 4
  5804. );
  5805. #else
  5806. vec3 translation2D = vec3(0.0, 0.0, 0.0);
  5807. vec3 scale = vec3(1.0, 1.0, 1.0);
  5808. #ifdef HAS_INSTANCE_TRANSLATION
  5809. translation2D = a_instanceTranslation2D;
  5810. #endif
  5811. #ifdef HAS_INSTANCE_SCALE
  5812. scale = a_instanceScale;
  5813. #endif
  5814. instancingTransform2D = mat4(
  5815. scale.x, 0.0, 0.0, 0.0,
  5816. 0.0, scale.y, 0.0, 0.0,
  5817. 0.0, 0.0, scale.z, 0.0,
  5818. translation2D.x, translation2D.y, translation2D.z, 1.0
  5819. );
  5820. #endif
  5821. return instancingTransform2D;
  5822. }
  5823. #endif
  5824. `;var Wfn=T(S(),1),IX=`void instancingStage(inout ProcessedAttributes attributes)
  5825. {
  5826. vec3 positionMC = attributes.positionMC;
  5827. mat4 instancingTransform = getInstancingTransform();
  5828. attributes.positionMC = (instancingTransform * vec4(positionMC, 1.0)).xyz;
  5829. #ifdef HAS_NORMALS
  5830. vec3 normalMC = attributes.normalMC;
  5831. attributes.normalMC = (instancingTransform * vec4(normalMC, 0.0)).xyz;
  5832. #endif
  5833. #ifdef USE_2D_INSTANCING
  5834. mat4 instancingTransform2D = getInstancingTransform2D();
  5835. attributes.position2D = (instancingTransform2D * vec4(positionMC, 1.0)).xyz;
  5836. #endif
  5837. }
  5838. `;var vfn=T(S(),1),WX=`void legacyInstancingStage(
  5839. inout ProcessedAttributes attributes,
  5840. out mat4 instanceModelView,
  5841. out mat3 instanceModelViewInverseTranspose)
  5842. {
  5843. vec3 positionMC = attributes.positionMC;
  5844. mat4 instancingTransform = getInstancingTransform();
  5845. mat4 instanceModel = instancingTransform * u_instance_nodeTransform;
  5846. instanceModelView = u_instance_modifiedModelView;
  5847. instanceModelViewInverseTranspose = mat3(u_instance_modifiedModelView * instanceModel);
  5848. attributes.positionMC = (instanceModel * vec4(positionMC, 1.0)).xyz;
  5849. #ifdef USE_2D_INSTANCING
  5850. mat4 instancingTransform2D = getInstancingTransform2D();
  5851. attributes.position2D = (instancingTransform2D * vec4(positionMC, 1.0)).xyz;
  5852. #endif
  5853. }
  5854. `;var jM=new A,sAe=new A,aAe=new A,rie={name:"InstancingPipelineStage",_getInstanceTransformsAsMatrices:die,_transformsToTypedArray:jY};rie.process=function(e,t,n){let i=t.instances,o=i.attributes[0].count,r=e.shaderBuilder;r.addDefine("HAS_INSTANCING"),r.addVertexLines(XX);let s=e.model,a=s.sceneGraph,c=e.runtimeNode,l=n.mode!==ie.SCENE3D&&!n.scene3DOnly&&s._projectTo2D,u=[];SAe(e,n,i,u,l),LAe(e,n,i,u);let m={};if(i.transformInWorldSpace?(r.addDefine("USE_LEGACY_INSTANCING",void 0,Le.VERTEX),r.addUniform("mat4","u_instance_modifiedModelView",Le.VERTEX),r.addUniform("mat4","u_instance_nodeTransform",Le.VERTEX),m.u_instance_modifiedModelView=function(){let p=A.multiplyTransformation(s.modelMatrix,a.components.transform,jM);return l?A.multiplyTransformation(n.context.uniformState.view3D,p,jM):(n.mode!==ie.SCENE3D&&(p=vt.basisTo2D(n.mapProjection,p,jM)),A.multiplyTransformation(n.context.uniformState.view,p,jM))},m.u_instance_nodeTransform=function(){return A.multiplyTransformation(a.axisCorrectionMatrix,c.computedTransform,sAe)},r.addVertexLines(WX)):r.addVertexLines(IX),l){r.addDefine("USE_2D_INSTANCING",void 0,Le.VERTEX),r.addUniform("mat4","u_modelView2D",Le.VERTEX);let p=n.context,y=A.fromTranslation(c.instancingReferencePoint2D,new A);m.u_modelView2D=function(){return A.multiplyTransformation(p.uniformState.view,y,aAe)}}e.uniformMap=xt(m,e.uniformMap),e.instanceCount=o,e.attributes.push.apply(e.attributes,u)};var PX=new A,cAe=new h;function lAe(e,t,n,i,o){let r=A.multiplyTransformation(t,e,PX);return r=A.multiplyTransformation(r,n,PX),o=vt.basisTo2D(i.mapProjection,r,o),o}function dAe(e,t,n,i,o){let r=A.fromTranslation(e,PX),s=A.multiplyTransformation(t,r,PX);s=A.multiplyTransformation(s,n,PX);let a=A.getTranslation(s,cAe);return o=Ji.computeActualWgs84Position(i,a,o),o}function sie(e,t,n){let i=e.model,o=i.sceneGraph;e.runtimeNode.node.instances.transformInWorldSpace?(t=A.multiplyTransformation(i.modelMatrix,o.components.transform,t),n=A.multiplyTransformation(o.axisCorrectionMatrix,e.runtimeNode.computedTransform,n)):(t=A.clone(o.computedModelMatrix,t),t=A.multiplyTransformation(t,e.runtimeNode.computedTransform,t),n=A.clone(A.IDENTITY,n))}var aie=new A,cie=new A,uAe=new A,mAe=new h;function hAe(e,t,n,i){let o=aie,r=cie;sie(t,o,r);let a=t.runtimeNode.instancingReferencePoint2D,c=e.length;for(let l=0;l<c;l++){let u=e[l],m=lAe(u,o,r,n,uAe),p=A.getTranslation(m,mAe),y=h.subtract(p,a,p);i[l]=A.setTranslation(m,y,i[l])}return i}function fAe(e,t,n,i){let o=aie,r=cie;sie(t,o,r);let a=t.runtimeNode.instancingReferencePoint2D,c=e.length;for(let l=0;l<c;l++){let u=e[l],m=dAe(u,o,r,n,u);i[l]=h.subtract(m,a,i[l])}return i}var pAe=new h,bAe=new h;function lie(e,t){let n=e.runtimeNode,i=e.model.sceneGraph.computedModelMatrix,o=A.multiplyByPoint(i,n.instancingTranslationMin,pAe),r=Ji.computeActualWgs84Position(t,o,o),s=A.multiplyByPoint(i,n.instancingTranslationMax,bAe),a=Ji.computeActualWgs84Position(t,s,s);n.instancingReferencePoint2D=h.lerp(r,a,.5,new h)}function jY(e){let n=e.length,i=new Float32Array(n*12);for(let o=0;o<n;o++){let r=e[o],s=12*o;i[s+0]=r[0],i[s+1]=r[4],i[s+2]=r[8],i[s+3]=r[12],i[s+4]=r[1],i[s+5]=r[5],i[s+6]=r[9],i[s+7]=r[13],i[s+8]=r[2],i[s+9]=r[6],i[s+10]=r[10],i[s+11]=r[14]}return i}function yAe(e){let n=e.length,i=new Float32Array(n*3);for(let o=0;o<n;o++){let r=e[o],s=3*o;i[s+0]=r[0],i[s+1]=r[4],i[s+2]=r[8]}return i}var gAe=new h,xAe=new Ae,_Ae=new h;function die(e,t,n){let i=new Array(t),o=nn.getAttributeBySemantic(e,Nr.TRANSLATION),r=nn.getAttributeBySemantic(e,Nr.ROTATION),s=nn.getAttributeBySemantic(e,Nr.SCALE),a=new h(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE),c=new h(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),l=d(o),u=d(r),m=d(s),p=l?o.typedArray:new Float32Array(t*3),y=u?r.typedArray:new Float32Array(t*4);u&&r.normalized&&(y=Kn.dequantize(y,r.componentDatatype,r.type,t));let f;m?f=s.typedArray:(f=new Float32Array(t*3),f.fill(1));for(let _=0;_<t;_++){let C=new h(p[_*3],p[_*3+1],p[_*3+2],gAe);h.maximumByComponent(a,C,a),h.minimumByComponent(c,C,c);let V=new Ae(y[_*4],y[_*4+1],y[_*4+2],u?y[_*4+3]:1,xAe),L=new h(f[_*3],f[_*3+1],f[_*3+2],_Ae),Z=A.fromTranslationQuaternionRotationScale(C,V,L,new A);i[_]=Z}let x=n.runtimeNode;return x.instancingTranslationMin=c,x.instancingTranslationMax=a,l&&(o.typedArray=void 0),u&&(r.typedArray=void 0),m&&(s.typedArray=void 0),i}function TAe(e,t,n){let i=new Array(t),o=e.typedArray,r=new h(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),s=new h(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE);for(let c=0;c<t;c++){let l=new h(o[c*3],o[c*3+1],o[c*3+2]);i[c]=l,h.minimumByComponent(r,l,r),h.maximumByComponent(s,l,s)}let a=n.runtimeNode;return a.instancingTranslationMin=r,a.instancingTranslationMax=s,e.typedArray=void 0,i}function qY(e,t){let n=mt.createVertexBuffer({context:t.context,typedArray:e,usage:Ne.STATIC_DRAW});return n.vertexArrayDestroyable=!1,n}function SAe(e,t,n,i,o){let r=nn.getAttributeBySemantic(n,Nr.ROTATION);d(r)?CAe(e,n,i,t,o):VAe(e,n,i,t,o)}function CAe(e,t,n,i,o){let r=e.shaderBuilder,s=t.attributes[0].count,a=e.model,c=e.runtimeNode;r.addDefine("HAS_INSTANCE_MATRICES");let l="Transform",u,m=c.instancingTransformsBuffer;if(!d(m)){u=die(t,s,e);let x=jY(u);m=qY(x,i),a._modelResources.push(m),c.instancingTransformsBuffer=m}if(oie(e,m,n,l),!o)return;let p=Ke(i);p.mode=ie.COLUMBUS_VIEW,lie(e,p);let y=c.instancingTransformsBuffer2D;if(!d(y)){let x=hAe(u,e,p,u),_=jY(x);y=qY(_,i),a._modelResources.push(y),c.instancingTransformsBuffer2D=y}oie(e,y,n,"Transform2D")}function VAe(e,t,n,i,o){let r=e.shaderBuilder,s=e.runtimeNode,a=nn.getAttributeBySemantic(t,Nr.TRANSLATION),c=nn.getAttributeBySemantic(t,Nr.SCALE);if(d(c)){r.addDefine("HAS_INSTANCE_SCALE");let C="Scale";QY(e,c.buffer,c.byteOffset,c.byteStride,n,C)}if(!d(a))return;let l,u=a.typedArray;d(u)?l=TAe(a,a.count,e):d(s.instancingTranslationMin)||(s.instancingTranslationMin=a.min,s.instancingTranslationMax=a.max),r.addDefine("HAS_INSTANCE_TRANSLATION");let m="Translation";if(QY(e,a.buffer,a.byteOffset,a.byteStride,n,m),!o)return;let p=Ke(i);p.mode=ie.COLUMBUS_VIEW,lie(e,p);let y=s.instancingTranslationBuffer2D;if(!d(y)){let C=fAe(l,e,p,l),V=yAe(C);y=qY(V,i),e.model._modelResources.push(y),s.instancingTranslationBuffer2D=y}QY(e,y,0,void 0,n,"Translation2D")}function oie(e,t,n,i){let r=Q.getSizeInBytes(Q.FLOAT),s=r*12,a=[{index:e.attributeIndex++,vertexBuffer:t,componentsPerAttribute:4,componentDatatype:Q.FLOAT,normalize:!1,offsetInBytes:0,strideInBytes:s,instanceDivisor:1},{index:e.attributeIndex++,vertexBuffer:t,componentsPerAttribute:4,componentDatatype:Q.FLOAT,normalize:!1,offsetInBytes:r*4,strideInBytes:s,instanceDivisor:1},{index:e.attributeIndex++,vertexBuffer:t,componentsPerAttribute:4,componentDatatype:Q.FLOAT,normalize:!1,offsetInBytes:r*8,strideInBytes:s,instanceDivisor:1}],c=e.shaderBuilder;c.addAttribute("vec4",`a_instancing${i}Row0`),c.addAttribute("vec4",`a_instancing${i}Row1`),c.addAttribute("vec4",`a_instancing${i}Row2`),n.push.apply(n,a)}function QY(e,t,n,i,o,r){o.push({index:e.attributeIndex++,vertexBuffer:t,componentsPerAttribute:3,componentDatatype:Q.FLOAT,normalize:!1,offsetInBytes:n,strideInBytes:i,instanceDivisor:1}),e.shaderBuilder.addAttribute("vec3",`a_instance${r}`)}function LAe(e,t,n,i){let o=n.attributes,r=e.shaderBuilder;for(let s=0;s<o.length;s++){let a=o[s];a.semantic===Nr.FEATURE_ID&&(a.setIndex>=e.featureIdVertexAttributeSetIndex&&(e.featureIdVertexAttributeSetIndex=a.setIndex+1),i.push({index:e.attributeIndex++,vertexBuffer:a.buffer,componentsPerAttribute:an.getNumberOfComponents(a.type),componentDatatype:a.componentDatatype,normalize:!1,offsetInBytes:a.byteOffset,strideInBytes:a.byteStride,instanceDivisor:1}),r.addAttribute("float",`a_instanceFeatureId_${a.setIndex}`))}}var vX=rie;var apn=T(S(),1);var $Y={};$Y.name="ModelMatrixUpdateStage";$Y.update=function(e,t,n){let i=n.mode!==ie.SCENE3D;if(!(i&&t._model._projectTo2D)&&e._transformDirty){let o=i?t._computedModelMatrix2D:t._computedModelMatrix;uie(e,t,o,e.transformToRoot),e._transformDirty=!1}};function uie(e,t,n,i){let o;i=A.multiplyTransformation(i,e.transform,new A),e.updateComputedTransform();let r=e.runtimePrimitives.length;for(o=0;o<r;o++){let c=e.runtimePrimitives[o].drawCommand;c.modelMatrix=A.multiplyTransformation(n,i,c.modelMatrix),c.cullFace=nn.getCullFace(c.modelMatrix,c.primitiveType)}let s=e.children.length;for(o=0;o<s;o++){let a=t._runtimeNodes[e.children[o]];a._transformToRoot=A.clone(i,a._transformToRoot),uie(a,t,n,i),a._transformDirty=!1}}var wX=$Y;var dpn=T(S(),1);var mie={name:"NodeStatisticsPipelineStage",_countInstancingAttributes:hie,_countGeneratedBuffers:fie};mie.process=function(e,t,n){let i=e.model.statistics,o=t.instances,r=e.runtimeNode;hie(i,o),fie(i,r)};function hie(e,t){if(!d(t))return;let n=t.attributes,i=n.length;for(let o=0;o<i;o++){let r=n[o];d(r.buffer)&&e.addBuffer(r.buffer,!1)}}function fie(e,t){d(t.instancingTransformsBuffer)&&e.addBuffer(t.instancingTransformsBuffer,!1),d(t.instancingTransformsBuffer2D)&&e.addBuffer(t.instancingTransformsBuffer2D,!1),d(t.instancingTranslationBuffer2D)&&e.addBuffer(t.instancingTranslationBuffer2D,!1)}var FX=mie;function nC(e){e=g(e,g.EMPTY_OBJECT);let t=e.node,n=e.transform,i=e.transformToRoot,o=e.sceneGraph,r=e.children;this._node=t,this._name=t.name,this._id=t.index,this._sceneGraph=o,this._children=r,this._originalTransform=A.clone(n,this._originalTransform),this._transform=A.clone(n,this._transform),this._transformToRoot=A.clone(i,this._transformToRoot),this._computedTransform=new A,this._transformDirty=!1,this._transformParameters=void 0,this._morphWeights=[],this._runtimeSkin=void 0,this._computedJointMatrices=[],this.show=!0,this.userAnimated=!1,this.pipelineStages=[],this.runtimePrimitives=[],this.updateStages=[],this.instancingTranslationMin=void 0,this.instancingTranslationMax=void 0,this.instancingTransformsBuffer=void 0,this.instancingTransformsBuffer2D=void 0,this.instancingTranslationBuffer2D=void 0,this.instancingReferencePoint2D=void 0,RAe(this)}Object.defineProperties(nC.prototype,{node:{get:function(){return this._node}},sceneGraph:{get:function(){return this._sceneGraph}},children:{get:function(){return this._children}},transform:{get:function(){return this._transform},set:function(e){this._transformDirty=!0,this._transform=A.clone(e,this._transform)}},transformToRoot:{get:function(){return this._transformToRoot}},computedTransform:{get:function(){return this._computedTransform}},originalTransform:{get:function(){return this._originalTransform}},translation:{get:function(){return d(this._transformParameters)?this._transformParameters.translation:void 0},set:function(e){let t=this._transformParameters,n=t.translation;h.equals(n,e)||(t.translation=h.clone(e,t.translation),eO(this,t))}},rotation:{get:function(){return d(this._transformParameters)?this._transformParameters.rotation:void 0},set:function(e){let t=this._transformParameters,n=t.rotation;Ae.equals(n,e)||(t.rotation=Ae.clone(e,t.rotation),eO(this,t))}},scale:{get:function(){return d(this._transformParameters)?this._transformParameters.scale:void 0},set:function(e){let t=this._transformParameters,n=t.scale;h.equals(n,e)||(t.scale=h.clone(e,t.scale),eO(this,t))}},morphWeights:{get:function(){return this._morphWeights},set:function(e){let t=e.length;for(let n=0;n<t;n++)this._morphWeights[n]=e[n]}},runtimeSkin:{get:function(){return this._runtimeSkin}},computedJointMatrices:{get:function(){return this._computedJointMatrices}}});function RAe(e){let t=e.transform,n=e.transformToRoot,i=e._computedTransform;e._computedTransform=A.multiply(n,t,i);let o=e.node;d(o.matrix)||(e._transformParameters=new fb(o.translation,o.rotation,o.scale)),d(o.morphWeights)&&(e._morphWeights=o.morphWeights.slice());let r=o.articulationName;if(d(r)){let c=e.sceneGraph._runtimeArticulations[r];d(c)&&c.runtimeNodes.push(e)}}function eO(e,t){e._transformDirty=!0,e._transform=A.fromTranslationRotationScale(t,e._transform)}nC.prototype.getChild=function(e){return this.sceneGraph._runtimeNodes[this.children[e]]};nC.prototype.configurePipeline=function(){let e=this.node,t=this.pipelineStages;t.length=0;let n=this.updateStages;n.length=0,d(e.instances)&&t.push(vX),t.push(FX),n.push(wX)};nC.prototype.updateComputedTransform=function(){this._computedTransform=A.multiply(this._transformToRoot,this._transform,this._computedTransform)};nC.prototype.updateJointMatrices=function(){let e=this._runtimeSkin;if(!d(e))return;e.updateJointMatrices();let t=this._computedJointMatrices,n=e.jointMatrices,i=n.length;for(let o=0;o<i;o++){d(t[o])||(t[o]=new A);let r=A.multiplyTransformation(this.transformToRoot,this.transform,t[o]),s=A.inverseTransformation(r,t[o]);t[o]=A.multiplyTransformation(s,n[o],t[o])}};var AX=nC;var Cxn=T(S(),1);var Gpn=T(S(),1);var pie={name:"AlphaPipelineStage"};pie.process=function(e,t,n){let i=e.alphaOptions,o=e.model;i.pass=g(i.pass,o.opaquePass);let r=e.renderStateOptions;i.pass===Re.TRANSLUCENT&&(r.cull.enabled=!1,r.depthMask=!1,r.blending=dn.ALPHA_BLEND);let s=e.shaderBuilder,a=e.uniformMap;d(i.alphaCutoff)&&(s.addDefine("ALPHA_MODE_MASK",void 0,Le.FRAGMENT),s.addUniform("float","u_alphaCutoff",Le.FRAGMENT),a.u_alphaCutoff=function(){return i.alphaCutoff})};var MX=pie;var Wpn=T(S(),1);var bie={name:"BatchTexturePipelineStage"};bie.process=function(e,t,n){let i=e.shaderBuilder,o={},r=e.model,s=r.featureTables[r.featureTableId],a=s.featuresLength;i.addUniform("int","model_featuresLength"),o.model_featuresLength=function(){return a};let c=s.batchTexture;i.addUniform("sampler2D","model_batchTexture"),o.model_batchTexture=function(){return g(c.batchTexture,c.defaultTexture)},i.addUniform("vec4","model_textureStep"),o.model_textureStep=function(){return c.textureStep},c.textureDimensions.y>1&&(i.addDefine("MULTILINE_BATCH_TEXTURE"),i.addUniform("vec2","model_textureDimensions"),o.model_textureDimensions=function(){return c.textureDimensions}),e.uniformMap=xt(o,e.uniformMap)};var NX=bie;var Npn=T(S(),1);var yie={name:"ClassificationPipelineStage"};yie.process=function(e,t,n){e.shaderBuilder.addDefine("HAS_CLASSIFICATION",void 0,Le.BOTH);let o=e.runtimePrimitive;d(o.batchLengths)||ZAe(t,o)};function ZAe(e,t){let n=nn.getAttributeBySemantic(e,Ct.POSITION);if(!d(n))throw new me("Primitives must have a position attribute to be used for classification.");let i,o=e.indices,r=d(o);r&&(i=o.typedArray,o.typedArray=void 0);let s=r?o.count:n.count,a=nn.getAttributeBySemantic(e,Ct.FEATURE_ID,0);if(!d(a)){t.batchLengths=[s],t.batchOffsets=[0];return}let c=a.typedArray;a.typedArray=void 0;let l=[],u=[0],m=r?i[0]:0,p=c[m],y=0;for(let x=1;x<s;x++){let _=r?i[x]:x,C=c[_];if(C!==p){let V=x-y,L=x;l.push(V),u.push(L),y=L,p=C}}let f=s-y;l.push(f),t.batchLengths=l,t.batchOffsets=u}var UX=yie;var qpn=T(S(),1);var kpn=T(S(),1),kX=`void filterByPassType(inout vec3 positionMC, vec4 featureColor)
  5855. {
  5856. bool styleTranslucent = (featureColor.a != 1.0);
  5857. // Only render translucent features in the translucent pass (if the style or the original command has translucency).
  5858. if (czm_pass == czm_passTranslucent && !styleTranslucent && !model_commandTranslucent)
  5859. {
  5860. // If the model has a translucent silhouette, it needs to render during the silhouette color command,
  5861. // (i.e. the command where model_silhouettePass = true), even if the model isn't translucent.
  5862. #ifdef HAS_SILHOUETTE
  5863. positionMC *= float(model_silhouettePass);
  5864. #else
  5865. positionMC *= 0.0;
  5866. #endif
  5867. }
  5868. // If the current pass is not the translucent pass and the style is not translucent, don't render the feature.
  5869. else if (czm_pass != czm_passTranslucent && styleTranslucent)
  5870. {
  5871. positionMC *= 0.0;
  5872. }
  5873. }
  5874. void cpuStylingStage(inout vec3 positionMC, inout SelectedFeature feature)
  5875. {
  5876. float show = ceil(feature.color.a);
  5877. positionMC *= show;
  5878. #if defined(HAS_SELECTED_FEATURE_ID_ATTRIBUTE) && !defined(HAS_CLASSIFICATION)
  5879. filterByPassType(positionMC, feature.color);
  5880. #endif
  5881. }
  5882. `;var Bpn=T(S(),1),DX=`void filterByPassType(vec4 featureColor)
  5883. {
  5884. bool styleTranslucent = (featureColor.a != 1.0);
  5885. // Only render translucent features in the translucent pass (if the style or the original command has translucency).
  5886. if (czm_pass == czm_passTranslucent && !styleTranslucent && !model_commandTranslucent)
  5887. {
  5888. // If the model has a translucent silhouette, it needs to render during the silhouette color command,
  5889. // (i.e. the command where model_silhouettePass = true), even if the model isn't translucent.
  5890. #ifdef HAS_SILHOUETTE
  5891. if(!model_silhouettePass) {
  5892. discard;
  5893. }
  5894. #else
  5895. discard;
  5896. #endif
  5897. }
  5898. // If the current pass is not the translucent pass and the style is not translucent, don't render the feature.
  5899. else if (czm_pass != czm_passTranslucent && styleTranslucent)
  5900. {
  5901. discard;
  5902. }
  5903. }
  5904. void cpuStylingStage(inout czm_modelMaterial material, SelectedFeature feature)
  5905. {
  5906. vec4 featureColor = feature.color;
  5907. if (featureColor.a == 0.0)
  5908. {
  5909. discard;
  5910. }
  5911. // If a feature ID vertex attribute is used, the pass type filter is applied in the vertex shader.
  5912. // So, we only apply in in the fragment shader if the feature ID texture is used.
  5913. #if defined(HAS_SELECTED_FEATURE_ID_TEXTURE) && !defined(HAS_CLASSIFICATION)
  5914. filterByPassType(featureColor);
  5915. #endif
  5916. featureColor = czm_gammaCorrect(featureColor);
  5917. // Classification models compute the diffuse differently.
  5918. #ifdef HAS_CLASSIFICATION
  5919. material.diffuse = featureColor.rgb * featureColor.a;
  5920. #else
  5921. float highlight = ceil(model_colorBlend);
  5922. material.diffuse *= mix(featureColor.rgb, vec3(1.0), highlight);
  5923. #endif
  5924. material.alpha *= featureColor.a;
  5925. }
  5926. `;var gie={name:"CPUStylingPipelineStage"};gie.process=function(e,t,n){let i=e.model,o=e.shaderBuilder;o.addVertexLines(kX),o.addFragmentLines(DX),o.addDefine("USE_CPU_STYLING",void 0,Le.BOTH),d(i.color)||(o.addUniform("float",kb.COLOR_BLEND_UNIFORM_NAME,Le.FRAGMENT),e.uniformMap[kb.COLOR_BLEND_UNIFORM_NAME]=function(){return Ka.getColorBlend(i.colorBlendMode,i.colorBlendAmount)}),o.addUniform("bool","model_commandTranslucent",Le.BOTH),e.uniformMap.model_commandTranslucent=function(){return e.alphaOptions.pass===Re.TRANSLUCENT}};var BX=gie;var e0n=T(S(),1),xie={MODIFY_MATERIAL:"MODIFY_MATERIAL",REPLACE_MATERIAL:"REPLACE_MATERIAL"};xie.getDefineName=function(e){return`CUSTOM_SHADER_${e}`};var Mp=Object.freeze(xie);var J0n=T(S(),1);var n0n=T(S(),1),YX=`void customShaderStage(
  5927. inout czm_modelVertexOutput vsOutput,
  5928. inout ProcessedAttributes attributes,
  5929. FeatureIds featureIds,
  5930. Metadata metadata,
  5931. MetadataClass metadataClass,
  5932. MetadataStatistics metadataStatistics
  5933. ) {
  5934. // VertexInput and initializeInputStruct() are dynamically generated in JS,
  5935. // see CustomShaderPipelineStage.js
  5936. VertexInput vsInput;
  5937. initializeInputStruct(vsInput, attributes);
  5938. vsInput.featureIds = featureIds;
  5939. vsInput.metadata = metadata;
  5940. vsInput.metadataClass = metadataClass;
  5941. vsInput.metadataStatistics = metadataStatistics;
  5942. vertexMain(vsInput, vsOutput);
  5943. attributes.positionMC = vsOutput.positionMC;
  5944. }
  5945. `;var o0n=T(S(),1),OX=`void customShaderStage(
  5946. inout czm_modelMaterial material,
  5947. ProcessedAttributes attributes,
  5948. FeatureIds featureIds,
  5949. Metadata metadata,
  5950. MetadataClass metadataClass,
  5951. MetadataStatistics metadataStatistics
  5952. ) {
  5953. // FragmentInput and initializeInputStruct() are dynamically generated in JS,
  5954. // see CustomShaderPipelineStage.js
  5955. FragmentInput fsInput;
  5956. initializeInputStruct(fsInput, attributes);
  5957. fsInput.featureIds = featureIds;
  5958. fsInput.metadata = metadata;
  5959. fsInput.metadataClass = metadataClass;
  5960. fsInput.metadataStatistics = metadataStatistics;
  5961. fragmentMain(fsInput, material);
  5962. }
  5963. `;var T0n=T(S(),1);var s0n=T(S(),1),KX=`void featureIdStage(out FeatureIds featureIds, ProcessedAttributes attributes) {
  5964. initializeFeatureIds(featureIds, attributes);
  5965. initializeFeatureIdAliases(featureIds);
  5966. }
  5967. `;var c0n=T(S(),1),HX=`void featureIdStage(out FeatureIds featureIds, ProcessedAttributes attributes)
  5968. {
  5969. initializeFeatureIds(featureIds, attributes);
  5970. initializeFeatureIdAliases(featureIds);
  5971. setFeatureIdVaryings();
  5972. }
  5973. `;var Ai={name:"FeatureIdPipelineStage",STRUCT_ID_FEATURE_IDS_VS:"FeatureIdsVS",STRUCT_ID_FEATURE_IDS_FS:"FeatureIdsFS",STRUCT_NAME_FEATURE_IDS:"FeatureIds",FUNCTION_ID_INITIALIZE_FEATURE_IDS_VS:"initializeFeatureIdsVS",FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS:"initializeFeatureIdsFS",FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_VS:"initializeFeatureIdAliasesVS",FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_FS:"initializeFeatureIdAliasesFS",FUNCTION_SIGNATURE_INITIALIZE_FEATURE_IDS:"void initializeFeatureIds(out FeatureIds featureIds, ProcessedAttributes attributes)",FUNCTION_SIGNATURE_INITIALIZE_FEATURE_ID_ALIASES:"void initializeFeatureIdAliases(inout FeatureIds featureIds)",FUNCTION_ID_SET_FEATURE_ID_VARYINGS:"setFeatureIdVaryings",FUNCTION_SIGNATURE_SET_FEATURE_ID_VARYINGS:"void setFeatureIdVaryings()"};Ai.process=function(e,t,n){let i=e.shaderBuilder;GAe(i);let o=e.runtimeNode.node.instances;d(o)&&EAe(e,o,n),XAe(e,t,n),i.addVertexLines(HX),i.addFragmentLines(KX)};function GAe(e){e.addStruct(Ai.STRUCT_ID_FEATURE_IDS_VS,Ai.STRUCT_NAME_FEATURE_IDS,Le.VERTEX),e.addStruct(Ai.STRUCT_ID_FEATURE_IDS_FS,Ai.STRUCT_NAME_FEATURE_IDS,Le.FRAGMENT),e.addFunction(Ai.FUNCTION_ID_INITIALIZE_FEATURE_IDS_VS,Ai.FUNCTION_SIGNATURE_INITIALIZE_FEATURE_IDS,Le.VERTEX),e.addFunction(Ai.FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS,Ai.FUNCTION_SIGNATURE_INITIALIZE_FEATURE_IDS,Le.FRAGMENT),e.addFunction(Ai.FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_VS,Ai.FUNCTION_SIGNATURE_INITIALIZE_FEATURE_ID_ALIASES,Le.VERTEX),e.addFunction(Ai.FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_FS,Ai.FUNCTION_SIGNATURE_INITIALIZE_FEATURE_ID_ALIASES,Le.FRAGMENT),e.addFunction(Ai.FUNCTION_ID_SET_FEATURE_ID_VARYINGS,Ai.FUNCTION_SIGNATURE_SET_FEATURE_ID_VARYINGS,Le.VERTEX)}function EAe(e,t,n){let i=t.featureIds,o=t.attributes[0].count;for(let r=0;r<i.length;r++){let s=i[r],a=s.positionalLabel;s instanceof wt.FeatureIdAttribute?IAe(e,s,a):_ie(e,s,a,o,1,n);let c=s.label;d(c)&&Tie(e,a,c,Le.BOTH)}}function XAe(e,t,n){let i=t.featureIds,r=nn.getAttributeBySemantic(t,Ct.POSITION).count;for(let s=0;s<i.length;s++){let a=i[s],c=a.positionalLabel,l=Le.BOTH;a instanceof wt.FeatureIdAttribute?WAe(e,a,c):a instanceof wt.FeatureIdImplicitRange?_ie(e,a,c,r,void 0,n):(PAe(e,a,c,s,n),l=Le.FRAGMENT);let u=a.label;d(u)&&Tie(e,c,u,l)}}function IAe(e,t,n){let i=e.shaderBuilder;i.addStructField(Ai.STRUCT_ID_FEATURE_IDS_VS,"int",n),i.addStructField(Ai.STRUCT_ID_FEATURE_IDS_FS,"int",n);let o=t.setIndex,r=n.replace(/_\d+$/,"_"),s=`a_${r}${o}`,a=`v_${r}${o}`,c=`featureIds.${n} = int(czm_round(${s}));`,l=`featureIds.${n} = int(czm_round(${a}));`;i.addFunctionLines(Ai.FUNCTION_ID_INITIALIZE_FEATURE_IDS_VS,[c]),i.addFunctionLines(Ai.FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS,[l]),i.addVarying("float",a),i.addFunctionLines(Ai.FUNCTION_ID_SET_FEATURE_ID_VARYINGS,[`${a} = ${s};`])}function WAe(e,t,n){let i=e.shaderBuilder;i.addStructField(Ai.STRUCT_ID_FEATURE_IDS_VS,"int",n),i.addStructField(Ai.STRUCT_ID_FEATURE_IDS_FS,"int",n);let o=t.setIndex,r=n.replace(/_\d+$/,"_"),s=[`featureIds.${n} = int(czm_round(attributes.${r}${o}));`];i.addFunctionLines(Ai.FUNCTION_ID_INITIALIZE_FEATURE_IDS_VS,s),i.addFunctionLines(Ai.FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS,s)}function _ie(e,t,n,i,o,r){vAe(e,t,i,o,r);let s=e.shaderBuilder,a=`a_implicit_${n}`;s.addAttribute("float",a);let c=`v_implicit_${n}`;s.addVarying("float",c),s.addStructField(Ai.STRUCT_ID_FEATURE_IDS_VS,"int",n),s.addStructField(Ai.STRUCT_ID_FEATURE_IDS_FS,"int",n),s.addFunctionLines(Ai.FUNCTION_ID_SET_FEATURE_ID_VARYINGS,[`${c} = ${a};`]),s.addFunctionLines(Ai.FUNCTION_ID_INITIALIZE_FEATURE_IDS_VS,[`featureIds.${n} = int(czm_round(${a}));`]),s.addFunctionLines(Ai.FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS,[`featureIds.${n} = int(czm_round(${c}));`])}function PAe(e,t,n,i,o){let r=`u_featureIdTexture_${i}`,s=e.uniformMap,a=t.textureReader;s[r]=function(){return g(a.texture,o.context.defaultTexture)};let c=a.channels,l=e.shaderBuilder;l.addStructField(Ai.STRUCT_ID_FEATURE_IDS_FS,"int",n),l.addUniform("sampler2D",r,Le.FRAGMENT);let u=`v_texCoord_${a.texCoord}`,m=`texture(${r}, ${u}).${c}`,p=`featureIds.${n} = czm_unpackUint(${m});`;l.addFunctionLines(Ai.FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS,[p])}function Tie(e,t,n,i){let o=e.shaderBuilder,r=Le.includesVertexShader(i);r&&o.addStructField(Ai.STRUCT_ID_FEATURE_IDS_VS,"int",n),o.addStructField(Ai.STRUCT_ID_FEATURE_IDS_FS,"int",n);let s=[`featureIds.${n} = featureIds.${t};`];r&&o.addFunctionLines(Ai.FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_VS,s),o.addFunctionLines(Ai.FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_FS,s)}function vAe(e,t,n,i,o){let r=e.model,s,a;if(d(t.repeat)){let l=wAe(t,n);s=mt.createVertexBuffer({context:o.context,typedArray:l,usage:Ne.STATIC_DRAW}),s.vertexArrayDestroyable=!1,r._pipelineResources.push(s);let u=!1;r.statistics.addBuffer(s,u)}else a=[t.offset];let c={index:e.attributeIndex++,instanceDivisor:i,value:a,vertexBuffer:s,normalize:!1,componentsPerAttribute:1,componentDatatype:Q.FLOAT,strideInBytes:Q.getSizeInBytes(Q.FLOAT),offsetInBytes:0};e.attributes.push(c)}function wAe(e,t){let n=e.offset,i=e.repeat,o=new Float32Array(t);for(let r=0;r<t;r++)o[r]=n+Math.floor(r/i);return o}var Db=Ai;var P0n=T(S(),1);var C0n=T(S(),1),zX=`void metadataStage(
  5974. out Metadata metadata,
  5975. out MetadataClass metadataClass,
  5976. out MetadataStatistics metadataStatistics,
  5977. ProcessedAttributes attributes
  5978. )
  5979. {
  5980. initializeMetadata(metadata, metadataClass, metadataStatistics, attributes);
  5981. }
  5982. `;var L0n=T(S(),1),JX=`void metadataStage(
  5983. out Metadata metadata,
  5984. out MetadataClass metadataClass,
  5985. out MetadataStatistics metadataStatistics,
  5986. ProcessedAttributes attributes
  5987. )
  5988. {
  5989. initializeMetadata(metadata, metadataClass, metadataStatistics, attributes);
  5990. setMetadataVaryings();
  5991. }
  5992. `;var Vi={name:"MetadataPipelineStage",STRUCT_ID_METADATA_VS:"MetadataVS",STRUCT_ID_METADATA_FS:"MetadataFS",STRUCT_NAME_METADATA:"Metadata",STRUCT_ID_METADATA_CLASS_VS:"MetadataClassVS",STRUCT_ID_METADATA_CLASS_FS:"MetadataClassFS",STRUCT_NAME_METADATA_CLASS:"MetadataClass",STRUCT_ID_METADATA_STATISTICS_VS:"MetadataStatisticsVS",STRUCT_ID_METADATA_STATISTICS_FS:"MetadataStatisticsFS",STRUCT_NAME_METADATA_STATISTICS:"MetadataStatistics",FUNCTION_ID_INITIALIZE_METADATA_VS:"initializeMetadataVS",FUNCTION_ID_INITIALIZE_METADATA_FS:"initializeMetadataFS",FUNCTION_SIGNATURE_INITIALIZE_METADATA:"void initializeMetadata(out Metadata metadata, out MetadataClass metadataClass, out MetadataStatistics metadataStatistics, ProcessedAttributes attributes)",FUNCTION_ID_SET_METADATA_VARYINGS:"setMetadataVaryings",FUNCTION_SIGNATURE_SET_METADATA_VARYINGS:"void setMetadataVaryings()",METADATA_CLASS_FIELDS:[{specName:"noData",shaderName:"noData"},{specName:"default",shaderName:"defaultValue"},{specName:"min",shaderName:"minValue"},{specName:"max",shaderName:"maxValue"}],METADATA_STATISTICS_FIELDS:[{specName:"min",shaderName:"minValue"},{specName:"max",shaderName:"maxValue"},{specName:"mean",shaderName:"mean",type:"float"},{specName:"median",shaderName:"median"},{specName:"standardDeviation",shaderName:"standardDeviation",type:"float"},{specName:"variance",shaderName:"variance",type:"float"},{specName:"sum",shaderName:"sum"}]};Vi.process=function(e,t,n){let{shaderBuilder:i,model:o}=e,{structuralMetadata:r={},content:s}=o,a=s?.tileset.metadataExtension?.statistics,c=FAe(r.propertyAttributes,t,a),l=MAe(r.propertyTextures,a),u=c.concat(l);UAe(i,u),BAe(i),i.addVertexLines(JX),i.addFragmentLines(zX);for(let m=0;m<c.length;m++){let p=c[m];YAe(e,p)}for(let m=0;m<l.length;m++){let p=l[m];KAe(e,p)}};function FAe(e,t,n){return d(e)?e.flatMap(i=>AAe(i,t,n)):[]}function AAe(e,t,n){let{getAttributeByName:i,getAttributeInfo:o,sanitizeGlslIdentifier:r}=nn,s=e.class.id,a=n?.classes[s],c=Object.entries(e.properties),l=new Array(c.length);for(let u=0;u<c.length;u++){let[m,p]=c[u],y=i(t,p.attribute),{glslType:f,variableName:x}=o(y);l[u]={metadataVariable:r(m),property:p,type:p.classProperty.type,glslType:f,variableName:x,propertyStatistics:a?.properties[m],shaderDestination:Le.BOTH}}return l}function MAe(e,t){return d(e)?e.flatMap(n=>NAe(n,t)):[]}function NAe(e,t){let{sanitizeGlslIdentifier:n}=nn,i=e.class.id,o=t?.classes[i],r=Object.entries(e.properties).filter(([a,c])=>c.isGpuCompatible()),s=new Array(r.length);for(let a=0;a<r.length;a++){let[c,l]=r[a];s[a]={metadataVariable:n(c),property:l,type:l.classProperty.type,glslType:l.getGlslType(),propertyStatistics:o?.properties[c],shaderDestination:Le.FRAGMENT}}return s}function UAe(e,t){let n=new Set,i=new Set;for(let a=0;a<t.length;a++){let{type:c,glslType:l,propertyStatistics:u}=t[a];n.add(l),d(u)&&c!==Ot.ENUM&&i.add(l)}let o=Vi.METADATA_CLASS_FIELDS;for(let a of n){let c=`${a}MetadataClass`;s(c,a,o)}let r=Vi.METADATA_STATISTICS_FIELDS;for(let a of i){let c=`${a}MetadataStatistics`;s(c,a,r)}function s(a,c,l){e.addStruct(a,a,Le.BOTH);for(let u=0;u<l.length;u++){let{shaderName:m}=l[u],p=l[u].type==="float"?DAe(c):c;e.addStructField(a,p,m)}}}var kAe={int:"float",ivec2:"vec2",ivec3:"vec3",ivec4:"vec4"};function DAe(e){let t=kAe[e];return d(t)?t:e}function BAe(e){e.addStruct(Vi.STRUCT_ID_METADATA_VS,Vi.STRUCT_NAME_METADATA,Le.VERTEX),e.addStruct(Vi.STRUCT_ID_METADATA_FS,Vi.STRUCT_NAME_METADATA,Le.FRAGMENT),e.addStruct(Vi.STRUCT_ID_METADATA_CLASS_VS,Vi.STRUCT_NAME_METADATA_CLASS,Le.VERTEX),e.addStruct(Vi.STRUCT_ID_METADATA_CLASS_FS,Vi.STRUCT_NAME_METADATA_CLASS,Le.FRAGMENT),e.addStruct(Vi.STRUCT_ID_METADATA_STATISTICS_VS,Vi.STRUCT_NAME_METADATA_STATISTICS,Le.VERTEX),e.addStruct(Vi.STRUCT_ID_METADATA_STATISTICS_FS,Vi.STRUCT_NAME_METADATA_STATISTICS,Le.FRAGMENT),e.addFunction(Vi.FUNCTION_ID_INITIALIZE_METADATA_VS,Vi.FUNCTION_SIGNATURE_INITIALIZE_METADATA,Le.VERTEX),e.addFunction(Vi.FUNCTION_ID_INITIALIZE_METADATA_FS,Vi.FUNCTION_SIGNATURE_INITIALIZE_METADATA,Le.FRAGMENT),e.addFunction(Vi.FUNCTION_ID_SET_METADATA_VARYINGS,Vi.FUNCTION_SIGNATURE_SET_METADATA_VARYINGS,Le.VERTEX)}function YAe(e,t){OAe(e,t),Sie(e.shaderBuilder,t),Cie(e.shaderBuilder,t)}function OAe(e,t){let{shaderBuilder:n}=e,{metadataVariable:i,property:o,glslType:r}=t,s=Lie({valueExpression:`attributes.${t.variableName}`,renderResources:e,glslType:r,metadataVariable:i,shaderDestination:Le.BOTH,property:o});n.addStructField(Vi.STRUCT_ID_METADATA_VS,r,i),n.addStructField(Vi.STRUCT_ID_METADATA_FS,r,i);let a=`metadata.${i} = ${s};`;n.addFunctionLines(Vi.FUNCTION_ID_INITIALIZE_METADATA_VS,[a]),n.addFunctionLines(Vi.FUNCTION_ID_INITIALIZE_METADATA_FS,[a])}function KAe(e,t){HAe(e,t),Sie(e.shaderBuilder,t),Cie(e.shaderBuilder,t)}function HAe(e,t){let{shaderBuilder:n,uniformMap:i}=e,{metadataVariable:o,glslType:r,property:s}=t,{texCoord:a,channels:c,index:l,texture:u}=s.textureReader,m=`u_propertyTexture_${l}`;i.hasOwnProperty(m)||(n.addUniform("sampler2D",m,Le.FRAGMENT),i[m]=()=>u),n.addStructField(Vi.STRUCT_ID_METADATA_FS,r,o);let p=`attributes.texCoord_${a}`,y=`texture(${m}, ${p}).${c}`,f=s.unpackInShader(y),x=Lie({valueExpression:f,renderResources:e,glslType:r,metadataVariable:o,shaderDestination:Le.FRAGMENT,property:s}),_=`metadata.${o} = ${x};`;n.addFunctionLines(Vi.FUNCTION_ID_INITIALIZE_METADATA_FS,[_])}function Sie(e,t){let{classProperty:n}=t.property,{metadataVariable:i,glslType:o,shaderDestination:r}=t,s=Vie(Vi.METADATA_CLASS_FIELDS,n,`metadataClass.${i}`,o),a=`${o}MetadataClass`;e.addStructField(Vi.STRUCT_ID_METADATA_CLASS_FS,a,i),e.addFunctionLines(Vi.FUNCTION_ID_INITIALIZE_METADATA_FS,s),Le.includesVertexShader(r)&&(e.addStructField(Vi.STRUCT_ID_METADATA_CLASS_VS,a,i),e.addFunctionLines(Vi.FUNCTION_ID_INITIALIZE_METADATA_VS,s))}function Cie(e,t){let{propertyStatistics:n}=t;if(!d(n))return;let{metadataVariable:i,type:o,glslType:r}=t;if(o===Ot.ENUM)return;let s=Vi.METADATA_STATISTICS_FIELDS,a=`metadataStatistics.${i}`,c=Vie(s,n,a,r),l=`${r}MetadataStatistics`;e.addStructField(Vi.STRUCT_ID_METADATA_STATISTICS_FS,l,i),e.addFunctionLines(Vi.FUNCTION_ID_INITIALIZE_METADATA_FS,c),Le.includesVertexShader(t.shaderDestination)&&(e.addStructField(Vi.STRUCT_ID_METADATA_STATISTICS_VS,l,i),e.addFunctionLines(Vi.FUNCTION_ID_INITIALIZE_METADATA_VS,c))}function Vie(e,t,n,i){function o(r){let s=t[r.specName];if(d(s))return`${n}.${r.shaderName} = ${i}(${s});`}return d(t)?e.map(o).filter(d):[]}function Lie(e){let{valueExpression:t,property:n}=e;if(!n.hasValueTransform)return t;let i=e.metadataVariable,o=`u_${i}_offset`,r=`u_${i}_scale`,{shaderBuilder:s,uniformMap:a}=e.renderResources,{glslType:c,shaderDestination:l}=e;s.addUniform(c,o,l),s.addUniform(c,r,l);let{offset:u,scale:m}=n;return a[o]=()=>u,a[r]=()=>m,`czm_valueTransform(${o}, ${r}, ${t})`}var ou=Vi;var w0n=T(S(),1),zAe={INHERIT:0,OPAQUE:1,TRANSLUCENT:2},Bb=Object.freeze(zAe);var Ks={name:"CustomShaderPipelineStage",STRUCT_ID_ATTRIBUTES_VS:"AttributesVS",STRUCT_ID_ATTRIBUTES_FS:"AttributesFS",STRUCT_NAME_ATTRIBUTES:"Attributes",STRUCT_ID_VERTEX_INPUT:"VertexInput",STRUCT_NAME_VERTEX_INPUT:"VertexInput",STRUCT_ID_FRAGMENT_INPUT:"FragmentInput",STRUCT_NAME_FRAGMENT_INPUT:"FragmentInput",FUNCTION_ID_INITIALIZE_INPUT_STRUCT_VS:"initializeInputStructVS",FUNCTION_SIGNATURE_INITIALIZE_INPUT_STRUCT_VS:"void initializeInputStruct(out VertexInput vsInput, ProcessedAttributes attributes)",FUNCTION_ID_INITIALIZE_INPUT_STRUCT_FS:"initializeInputStructFS",FUNCTION_SIGNATURE_INITIALIZE_INPUT_STRUCT_FS:"void initializeInputStruct(out FragmentInput fsInput, ProcessedAttributes attributes)",_oneTimeWarning:Pt};Ks.process=function(e,t,n){let{shaderBuilder:i,model:o,alphaOptions:r}=e,{customShader:s}=o,{lightingModel:a,translucencyMode:c}=s;d(a)&&(e.lightingOptions.lightingModel=a),c===Bb.TRANSLUCENT?r.pass=Re.TRANSLUCENT:c===Bb.OPAQUE&&(r.pass=void 0);let l=nMe(s,t);if(!l.customShaderEnabled)return;if(sMe(i,s,l),l.shouldComputePositionWC&&i.addDefine("COMPUTE_POSITION_WC_CUSTOM_SHADER",void 0,Le.BOTH),d(s.vertexShaderText)&&i.addDefine("HAS_CUSTOM_VERTEX_SHADER",void 0,Le.VERTEX),d(s.fragmentShaderText)){i.addDefine("HAS_CUSTOM_FRAGMENT_SHADER",void 0,Le.FRAGMENT);let p=Mp.getDefineName(s.mode);i.addDefine(p,void 0,Le.FRAGMENT)}let u=s.uniforms;for(let p in u)if(u.hasOwnProperty(p)){let y=u[p];i.addUniform(y.type,p)}let m=s.varyings;for(let p in m)if(m.hasOwnProperty(p)){let y=m[p];i.addVarying(y,p)}e.uniformMap=xt(e.uniformMap,s.uniformMap)};function JAe(e){let t={};for(let n=0;n<e.length;n++){let i=nn.getAttributeInfo(e[n]);t[i.variableName]=i}return t}var QAe={position:"vec3",normal:"vec3",tangent:"vec3",bitangent:"vec3",texCoord:"vec2",color:"vec4",joints:"ivec4",weights:"vec4"},jAe={position:"vec3(0.0)",normal:"vec3(0.0, 0.0, 1.0)",tangent:"vec3(1.0, 0.0, 0.0)",bitangent:"vec3(0.0, 1.0, 0.0)",texCoord:"vec2(0.0)",color:"vec4(1.0)",joints:"ivec4(0)",weights:"vec4(0.0)"};function Rie(e){let t=e.replace(/_[0-9]+$/,"");t=t.replace(/(MC|EC)$/,"");let n=QAe[t],i=jAe[t];if(d(n))return{attributeField:[n,e],value:i}}function qAe(e,t){if(!d(e.vertexShaderText))return{enabled:!1};let n=e.usedVariablesVertex.attributeSet,i=Zie(t,n,!1),o=Gie(t,n,!1),r,s=[],a=[];for(let c in i){if(!i.hasOwnProperty(c))continue;let u=[i[c].glslType,c];s.push(u),r=`vsInput.attributes.${c} = attributes.${c};`,a.push(r)}for(let c=0;c<o.length;c++){let l=o[c],u=Rie(l);if(!d(u))return Ks._oneTimeWarning("CustomShaderPipelineStage.incompatiblePrimitiveVS",`Primitive is missing attribute ${l}, disabling custom vertex shader`),{enabled:!1};s.push(u.attributeField),r=`vsInput.attributes.${l} = ${u.value};`,a.push(r)}return{enabled:!0,attributeFields:s,initializationLines:a}}function $Ae(e){let t=[],n=[],i=e.usedVariablesFragment.attributeSet;return i.hasOwnProperty("positionWC")&&(t.push(["vec3","positionWC"]),n.push("fsInput.attributes.positionWC = attributes.positionWC;")),i.hasOwnProperty("positionEC")&&(t.push(["vec3","positionEC"]),n.push("fsInput.attributes.positionEC = attributes.positionEC;")),{attributeFields:t,initializationLines:n}}function eMe(e,t){if(!d(e.fragmentShaderText))return{enabled:!1};let n=e.usedVariablesFragment.attributeSet,i=Zie(t,n,!0),o=Gie(t,n,!0),r,s=[],a=[];for(let l in i){if(!i.hasOwnProperty(l))continue;let m=[i[l].glslType,l];s.push(m),r=`fsInput.attributes.${l} = attributes.${l};`,a.push(r)}for(let l=0;l<o.length;l++){let u=o[l],m=Rie(u);if(!d(m))return Ks._oneTimeWarning("CustomShaderPipelineStage.incompatiblePrimitiveFS",`Primitive is missing attribute ${u}, disabling custom fragment shader.`),{enabled:!1};s.push(m.attributeField),r=`fsInput.attributes.${u} = ${m.value};`,a.push(r)}let c=$Ae(e);return{enabled:!0,attributeFields:s.concat(c.attributeFields),initializationLines:c.initializationLines.concat(a)}}var tMe={positionWC:!0,positionEC:!0};function Zie(e,t,n){let i={};for(let o in e){if(!e.hasOwnProperty(o))continue;let r=e[o],s=o;n&&o==="normalMC"?s="normalEC":n&&o==="tangentMC"&&(s="tangentEC",r.glslType="vec3"),t.hasOwnProperty(s)&&(i[s]=r)}return i}function Gie(e,t,n){let i=[];for(let o in t){if(!t.hasOwnProperty(o)||tMe.hasOwnProperty(o))continue;let r=o;n&&o==="normalEC"?r="normalMC":n&&o==="tangentEC"&&(r="tangentMC"),e.hasOwnProperty(r)||i.push(o)}return i}function nMe(e,t){let n=JAe(t.attributes),i=qAe(e,n),o=eMe(e,n),s=e.usedVariablesFragment.attributeSet.hasOwnProperty("positionWC")&&o.enabled;return{vertexLines:i,fragmentLines:o,customShaderEnabled:i.enabled||o.enabled,shouldComputePositionWC:s}}function iMe(e,t){let n=Ks.STRUCT_ID_ATTRIBUTES_VS;e.addStruct(n,Ks.STRUCT_NAME_ATTRIBUTES,Le.VERTEX);let{attributeFields:i,initializationLines:o}=t;for(let s=0;s<i.length;s++){let[a,c]=i[s];e.addStructField(n,a,c)}n=Ks.STRUCT_ID_VERTEX_INPUT,e.addStruct(n,Ks.STRUCT_NAME_VERTEX_INPUT,Le.VERTEX),e.addStructField(n,Ks.STRUCT_NAME_ATTRIBUTES,"attributes"),e.addStructField(n,Db.STRUCT_NAME_FEATURE_IDS,"featureIds"),e.addStructField(n,ou.STRUCT_NAME_METADATA,"metadata"),e.addStructField(n,ou.STRUCT_NAME_METADATA_CLASS,"metadataClass"),e.addStructField(n,ou.STRUCT_NAME_METADATA_STATISTICS,"metadataStatistics");let r=Ks.FUNCTION_ID_INITIALIZE_INPUT_STRUCT_VS;e.addFunction(r,Ks.FUNCTION_SIGNATURE_INITIALIZE_INPUT_STRUCT_VS,Le.VERTEX),e.addFunctionLines(r,o)}function oMe(e,t){let n=Ks.STRUCT_ID_ATTRIBUTES_FS;e.addStruct(n,Ks.STRUCT_NAME_ATTRIBUTES,Le.FRAGMENT);let{attributeFields:i,initializationLines:o}=t;for(let s=0;s<i.length;s++){let[a,c]=i[s];e.addStructField(n,a,c)}n=Ks.STRUCT_ID_FRAGMENT_INPUT,e.addStruct(n,Ks.STRUCT_NAME_FRAGMENT_INPUT,Le.FRAGMENT),e.addStructField(n,Ks.STRUCT_NAME_ATTRIBUTES,"attributes"),e.addStructField(n,Db.STRUCT_NAME_FEATURE_IDS,"featureIds"),e.addStructField(n,ou.STRUCT_NAME_METADATA,"metadata"),e.addStructField(n,ou.STRUCT_NAME_METADATA_CLASS,"metadataClass"),e.addStructField(n,ou.STRUCT_NAME_METADATA_STATISTICS,"metadataStatistics");let r=Ks.FUNCTION_ID_INITIALIZE_INPUT_STRUCT_FS;e.addFunction(r,Ks.FUNCTION_SIGNATURE_INITIALIZE_INPUT_STRUCT_FS,Le.FRAGMENT),e.addFunctionLines(r,o)}var rMe=[];function sMe(e,t,n){let{vertexLines:i,fragmentLines:o}=n,r=rMe;i.enabled&&(iMe(e,i),r.length=0,r.push("#line 0",t.vertexShaderText,YX),e.addVertexLines(r)),o.enabled&&(oMe(e,o),r.length=0,r.push("#line 0",t.fragmentShaderText,OX),e.addFragmentLines(r))}var QX=Ks;var nbn=T(S(),1);var jX={name:"DequantizationPipelineStage",FUNCTION_ID_DEQUANTIZATION_STAGE_VS:"dequantizationStage",FUNCTION_SIGNATURE_DEQUANTIZATION_STAGE_VS:"void dequantizationStage(inout ProcessedAttributes attributes)"};jX.process=function(e,t,n){let i=e.shaderBuilder,o=e.model,r=d(o.classificationType);i.addDefine("USE_DEQUANTIZATION",void 0,Le.VERTEX),i.addFunction(jX.FUNCTION_ID_DEQUANTIZATION_STAGE_VS,jX.FUNCTION_SIGNATURE_DEQUANTIZATION_STAGE_VS,Le.VERTEX);let s=t.attributes;for(let a=0;a<s.length;a++){let c=s[a],l=c.quantization;if(!d(l))continue;let u=c.semantic===Ct.POSITION,m=c.semantic===Ct.TEXCOORD;if(r&&!u&&!m)continue;let p=nn.getAttributeInfo(c);cMe(i,p),aMe(e,p)}};function aMe(e,t){let n=e.shaderBuilder,i=e.uniformMap,o=t.variableName,r=t.attribute.quantization;if(r.octEncoded){let s=`model_normalizationRange_${o}`;n.addUniform("float",s,Le.VERTEX),i[s]=function(){return r.normalizationRange}}else{let s=`model_quantizedVolumeOffset_${o}`,a=`model_quantizedVolumeStepSize_${o}`,c=t.glslType;n.addUniform(c,s,Le.VERTEX),n.addUniform(c,a,Le.VERTEX);let l=r.quantizedVolumeOffset,u=r.quantizedVolumeStepSize;/^color_\d+$/.test(o)&&(l=Eie(l,0),u=Eie(u,1)),i[s]=function(){return l},i[a]=function(){return u}}}function Eie(e,t){return e instanceof se?e:new se(e.x,e.y,e.z,t)}function cMe(e,t){let n=t.variableName,i=t.attribute.quantization,o;i.octEncoded?o=lMe(n,i):o=dMe(n),e.addFunctionLines(jX.FUNCTION_ID_DEQUANTIZATION_STAGE_VS,[o])}function lMe(e,t){let n=`attributes.${e}`,i=`a_quantized_${e}`,o=`model_normalizationRange_${e}`,r=t.octEncodedZXY?".zxy":".xyz";return`${n} = czm_octDecode(${i}, ${o})${r};`}function dMe(e){let t=`attributes.${e}`,n=`a_quantized_${e}`,i=`model_quantizedVolumeOffset_${e}`,o=`model_quantizedVolumeStepSize_${e}`;return`${t} = ${i} + ${n} * ${o};`}var qX=jX;var Xbn=T(S(),1);var obn=T(S(),1),$X=`void geometryStage(out ProcessedAttributes attributes)
  5993. {
  5994. attributes.positionMC = v_positionMC;
  5995. attributes.positionEC = v_positionEC;
  5996. #ifdef COMPUTE_POSITION_WC_CUSTOM_SHADER
  5997. attributes.positionWC = v_positionWC;
  5998. #endif
  5999. #ifdef HAS_NORMALS
  6000. // renormalize after interpolation
  6001. attributes.normalEC = normalize(v_normalEC);
  6002. #endif
  6003. #ifdef HAS_TANGENTS
  6004. attributes.tangentEC = normalize(v_tangentEC);
  6005. #endif
  6006. #ifdef HAS_BITANGENTS
  6007. attributes.bitangentEC = normalize(v_bitangentEC);
  6008. #endif
  6009. // Everything else is dynamically generated in GeometryPipelineStage
  6010. setDynamicVaryings(attributes);
  6011. }
  6012. `;var sbn=T(S(),1),eI=`vec4 geometryStage(inout ProcessedAttributes attributes, mat4 modelView, mat3 normal)
  6013. {
  6014. vec4 computedPosition;
  6015. // Compute positions in different coordinate systems
  6016. vec3 positionMC = attributes.positionMC;
  6017. v_positionMC = positionMC;
  6018. v_positionEC = (modelView * vec4(positionMC, 1.0)).xyz;
  6019. #if defined(USE_2D_POSITIONS) || defined(USE_2D_INSTANCING)
  6020. vec3 position2D = attributes.position2D;
  6021. vec3 positionEC = (u_modelView2D * vec4(position2D, 1.0)).xyz;
  6022. computedPosition = czm_projection * vec4(positionEC, 1.0);
  6023. #else
  6024. computedPosition = czm_projection * vec4(v_positionEC, 1.0);
  6025. #endif
  6026. // Sometimes the custom shader and/or style needs this
  6027. #if defined(COMPUTE_POSITION_WC_CUSTOM_SHADER) || defined(COMPUTE_POSITION_WC_STYLE)
  6028. // Note that this is a 32-bit position which may result in jitter on small
  6029. // scales.
  6030. v_positionWC = (czm_model * vec4(positionMC, 1.0)).xyz;
  6031. #endif
  6032. #ifdef HAS_NORMALS
  6033. v_normalEC = normalize(normal * attributes.normalMC);
  6034. #endif
  6035. #ifdef HAS_TANGENTS
  6036. v_tangentEC = normalize(normal * attributes.tangentMC);
  6037. #endif
  6038. #ifdef HAS_BITANGENTS
  6039. v_bitangentEC = normalize(normal * attributes.bitangentMC);
  6040. #endif
  6041. // All other varyings need to be dynamically generated in
  6042. // GeometryPipelineStage
  6043. setDynamicVaryings(attributes);
  6044. return computedPosition;
  6045. }
  6046. `;var bbn=T(S(),1);var cbn=T(S(),1),iC=`vec2 computeSt(float featureId)
  6047. {
  6048. float stepX = model_textureStep.x;
  6049. float centerX = model_textureStep.y;
  6050. #ifdef MULTILINE_BATCH_TEXTURE
  6051. float stepY = model_textureStep.z;
  6052. float centerY = model_textureStep.w;
  6053. float xId = mod(featureId, model_textureDimensions.x);
  6054. float yId = floor(featureId / model_textureDimensions.x);
  6055. return vec2(centerX + (xId * stepX), centerY + (yId * stepY));
  6056. #else
  6057. return vec2(centerX + (featureId * stepX), 0.5);
  6058. #endif
  6059. }
  6060. void selectedFeatureIdStage(out SelectedFeature feature, FeatureIds featureIds)
  6061. {
  6062. int featureId = featureIds.SELECTED_FEATURE_ID;
  6063. if (featureId < model_featuresLength)
  6064. {
  6065. vec2 featureSt = computeSt(float(featureId));
  6066. feature.id = featureId;
  6067. feature.st = featureSt;
  6068. feature.color = texture(model_batchTexture, featureSt);
  6069. }
  6070. // Floating point comparisons can be unreliable in GLSL, so we
  6071. // increment the feature ID to make sure it's always greater
  6072. // then the model_featuresLength - a condition we check for in the
  6073. // pick ID, to avoid sampling the pick texture if the feature ID is
  6074. // greater than the number of features.
  6075. else
  6076. {
  6077. feature.id = model_featuresLength + 1;
  6078. feature.st = vec2(0.0);
  6079. feature.color = vec4(1.0);
  6080. }
  6081. #ifdef HAS_NULL_FEATURE_ID
  6082. if (featureId == model_nullFeatureId) {
  6083. feature.id = featureId;
  6084. feature.st = vec2(0.0);
  6085. feature.color = vec4(1.0);
  6086. }
  6087. #endif
  6088. }
  6089. `;var tI={name:"SelectedFeatureIdPipelineStage",STRUCT_ID_SELECTED_FEATURE:"SelectedFeature",STRUCT_NAME_SELECTED_FEATURE:"SelectedFeature",FUNCTION_ID_FEATURE_VARYINGS_VS:"updateFeatureStructVS",FUNCTION_ID_FEATURE_VARYINGS_FS:"updateFeatureStructFS",FUNCTION_SIGNATURE_UPDATE_FEATURE:"void updateFeatureStruct(inout SelectedFeature feature)"};tI.process=function(e,t,n){let i=e.shaderBuilder;e.hasPropertyTable=!0;let o=e.model,r=e.runtimeNode.node,s=uMe(o,r,t),a=s.shaderDestination;i.addDefine("HAS_SELECTED_FEATURE_ID",void 0,a),i.addDefine("SELECTED_FEATURE_ID",s.variableName,a),i.addDefine(s.featureIdDefine,void 0,a),mMe(i);let c=s.featureIds.nullFeatureId,l=e.uniformMap;d(c)&&(i.addDefine("HAS_NULL_FEATURE_ID",void 0,a),i.addUniform("int","model_nullFeatureId",a),l.model_nullFeatureId=function(){return c}),s.shaderDestination===Le.BOTH&&i.addVertexLines(iC),i.addFragmentLines(iC)};function Xie(e){return e instanceof wt.FeatureIdTexture?"HAS_SELECTED_FEATURE_ID_TEXTURE":"HAS_SELECTED_FEATURE_ID_ATTRIBUTE"}function Iie(e){return e instanceof wt.FeatureIdTexture?Le.FRAGMENT:Le.BOTH}function uMe(e,t,n){let i,o;return d(t.instances)&&(o=nn.getFeatureIdsByLabel(t.instances.featureIds,e.instanceFeatureIdLabel),d(o))?(i=g(o.label,o.positionalLabel),{featureIds:o,variableName:i,shaderDestination:Iie(o),featureIdDefine:Xie(o)}):(o=nn.getFeatureIdsByLabel(n.featureIds,e.featureIdLabel),i=g(o.label,o.positionalLabel),{featureIds:o,variableName:i,shaderDestination:Iie(o),featureIdDefine:Xie(o)})}function mMe(e){e.addStructField(tI.STRUCT_ID_SELECTED_FEATURE,"int","id"),e.addStructField(tI.STRUCT_ID_SELECTED_FEATURE,"vec2","st"),e.addStructField(tI.STRUCT_ID_SELECTED_FEATURE,"vec4","color")}var Yb=tI;var Cs={name:"GeometryPipelineStage",STRUCT_ID_PROCESSED_ATTRIBUTES_VS:"ProcessedAttributesVS",STRUCT_ID_PROCESSED_ATTRIBUTES_FS:"ProcessedAttributesFS",STRUCT_NAME_PROCESSED_ATTRIBUTES:"ProcessedAttributes",FUNCTION_ID_INITIALIZE_ATTRIBUTES:"initializeAttributes",FUNCTION_SIGNATURE_INITIALIZE_ATTRIBUTES:"void initializeAttributes(out ProcessedAttributes attributes)",FUNCTION_ID_SET_DYNAMIC_VARYINGS_VS:"setDynamicVaryingsVS",FUNCTION_ID_SET_DYNAMIC_VARYINGS_FS:"setDynamicVaryingsFS",FUNCTION_SIGNATURE_SET_DYNAMIC_VARYINGS:"void setDynamicVaryings(inout ProcessedAttributes attributes)"};Cs.process=function(e,t,n){let i=e.shaderBuilder,o=e.model;i.addStruct(Cs.STRUCT_ID_PROCESSED_ATTRIBUTES_VS,"ProcessedAttributes",Le.VERTEX),i.addStruct(Cs.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,"ProcessedAttributes",Le.FRAGMENT),i.addStruct(Yb.STRUCT_ID_SELECTED_FEATURE,Yb.STRUCT_NAME_SELECTED_FEATURE,Le.BOTH),i.addFunction(Cs.FUNCTION_ID_INITIALIZE_ATTRIBUTES,Cs.FUNCTION_SIGNATURE_INITIALIZE_ATTRIBUTES,Le.VERTEX),i.addVarying("vec3","v_positionWC"),i.addVarying("vec3","v_positionEC"),i.addStructField(Cs.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,"vec3","positionWC"),i.addStructField(Cs.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,"vec3","positionEC"),i.addFunction(Cs.FUNCTION_ID_SET_DYNAMIC_VARYINGS_VS,Cs.FUNCTION_SIGNATURE_SET_DYNAMIC_VARYINGS,Le.VERTEX),i.addFunction(Cs.FUNCTION_ID_SET_DYNAMIC_VARYINGS_FS,Cs.FUNCTION_SIGNATURE_SET_DYNAMIC_VARYINGS,Le.FRAGMENT),o.type===nr.TILE_PNTS&&i.addDefine("HAS_SRGB_COLOR",void 0,Le.FRAGMENT);let s=n.mode!==ie.SCENE3D&&!n.scene3DOnly&&o._projectTo2D,a=d(e.runtimeNode.node.instances),c=s&&!a,l=t.attributes.length;for(let u=0;u<l;u++){let m=t.attributes[u],p=an.getAttributeLocationCount(m.type),y=m.semantic===Ct.POSITION,f;p>1?(f=e.attributeIndex,e.attributeIndex+=p):y&&!c?f=0:f=e.attributeIndex++,hMe(e,m,f,p,s,a)}SMe(i,t.attributes),t.primitiveType===Fe.POINTS&&i.addDefine("PRIMITIVE_TYPE_POINTS"),i.addVertexLines(eI),i.addFragmentLines($X)};function hMe(e,t,n,i,o,r){let s=e.shaderBuilder,a=nn.getAttributeInfo(t),c=o&&!r;i>1?bMe(e,t,n,i):pMe(e,t,n,c),gMe(s,a,c),yMe(s,a),d(t.semantic)&&fMe(s,t),xMe(s,a,o),_Me(s,a,c),TMe(s,a)}function fMe(e,t){let n=t.semantic,i=t.setIndex;switch(n){case Ct.NORMAL:e.addDefine("HAS_NORMALS");break;case Ct.TANGENT:e.addDefine("HAS_TANGENTS");break;case Ct.FEATURE_ID:e.addDefine(`HAS${n}_${i}`);break;case Ct.TEXCOORD:case Ct.COLOR:e.addDefine(`HAS_${n}_${i}`)}}function pMe(e,t,n,i){let o=t.quantization,r,s;d(o)?(r=o.type,s=o.componentDatatype):(r=t.type,s=t.componentDatatype);let a=t.semantic,c=t.setIndex;a===Ct.FEATURE_ID&&c>=e.featureIdVertexAttributeSetIndex&&(e.featureIdVertexAttributeSetIndex=c+1);let l=a===Ct.POSITION,u=l?0:n,m=an.getNumberOfComponents(r),p={index:u,value:d(t.buffer)?void 0:t.constant,vertexBuffer:t.buffer,count:t.count,componentsPerAttribute:m,componentDatatype:s,offsetInBytes:t.byteOffset,strideInBytes:t.byteStride,normalize:t.normalized};if(e.attributes.push(p),!l||!i)return;let y=e.runtimePrimitive.positionBuffer2D,f={index:n,vertexBuffer:y,count:t.count,componentsPerAttribute:m,componentDatatype:Q.FLOAT,offsetInBytes:0,strideInBytes:void 0,normalize:t.normalized};e.attributes.push(f)}function bMe(e,t,n,i){let o=t.quantization,r,s;d(o)?(r=o.type,s=o.componentDatatype):(r=t.type,s=t.componentDatatype);let a=t.normalized,l=an.getNumberOfComponents(r)/i,u=Q.getSizeInBytes(s),m=l*u,p=t.byteStride;for(let y=0;y<i;y++){let f=t.byteOffset+y*m,x={index:n+y,vertexBuffer:t.buffer,componentsPerAttribute:l,componentDatatype:s,offsetInBytes:f,strideInBytes:p,normalize:a};e.attributes.push(x)}}function yMe(e,t){let n=t.variableName,i=`v_${n}`,o;n==="normalMC"?(i="v_normalEC",o=t.glslType):n==="tangentMC"?(o="vec3",i="v_tangentEC"):o=t.glslType,e.addVarying(o,i)}function gMe(e,t,n){let i=t.attribute.semantic,o=t.variableName,r,s;t.isQuantized?(r=`a_quantized_${o}`,s=t.quantizedGlslType):(r=`a_${o}`,s=t.glslType);let a=i===Ct.POSITION;a?e.setPositionAttribute(s,r):e.addAttribute(s,r),a&&n&&e.addAttribute("vec3","a_position2D")}function xMe(e,t,n){let i=Cs.STRUCT_ID_PROCESSED_ATTRIBUTES_VS,o=Cs.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,r=t.variableName;r==="tangentMC"?(e.addStructField(i,"vec3","tangentMC"),e.addStructField(i,"float","tangentSignMC"),e.addStructField(o,"vec3","tangentEC")):r==="normalMC"?(e.addStructField(i,"vec3","normalMC"),e.addStructField(o,"vec3","normalEC")):(e.addStructField(i,t.glslType,r),e.addStructField(o,t.glslType,r)),r==="positionMC"&&n&&e.addStructField(i,"vec3","position2D")}function _Me(e,t,n){let i=Cs.FUNCTION_ID_INITIALIZE_ATTRIBUTES,o=t.variableName;if(o==="positionMC"&&n){let a="attributes.position2D = a_position2D;";e.addFunctionLines(i,[a])}if(t.isQuantized)return;let s=[];o==="tangentMC"?(s.push("attributes.tangentMC = a_tangentMC.xyz;"),s.push("attributes.tangentSignMC = a_tangentMC.w;")):s.push(`attributes.${o} = a_${o};`),e.addFunctionLines(i,s)}function TMe(e,t){let n=t.attribute.semantic,i=t.attribute.setIndex;if(d(n)&&!d(i))return;let o=Cs.FUNCTION_ID_SET_DYNAMIC_VARYINGS_VS,r=t.variableName,s=`v_${r} = attributes.${r};`;e.addFunctionLines(o,[s]),o=Cs.FUNCTION_ID_SET_DYNAMIC_VARYINGS_FS,s=`attributes.${r} = v_${r};`,e.addFunctionLines(o,[s])}function SMe(e,t){let n=!1,i=!1;for(let o=0;o<t.length;o++){let r=t[o];r.semantic===Ct.NORMAL?n=!0:r.semantic===Ct.TANGENT&&(i=!0)}!n||!i||(e.addDefine("HAS_BITANGENTS"),e.addVarying("vec3","v_bitangentEC"),e.addStructField(Cs.STRUCT_ID_PROCESSED_ATTRIBUTES_VS,"vec3","bitangentMC"),e.addStructField(Cs.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,"vec3","bitangentEC"))}var nI=Cs;var Ubn=T(S(),1);var Wbn=T(S(),1),iI=`#ifdef LIGHTING_PBR
  6090. vec3 computePbrLighting(czm_modelMaterial inputMaterial, ProcessedAttributes attributes)
  6091. {
  6092. czm_pbrParameters pbrParameters;
  6093. pbrParameters.diffuseColor = inputMaterial.diffuse;
  6094. pbrParameters.f0 = inputMaterial.specular;
  6095. pbrParameters.roughness = inputMaterial.roughness;
  6096. #ifdef USE_CUSTOM_LIGHT_COLOR
  6097. vec3 lightColorHdr = model_lightColorHdr;
  6098. #else
  6099. vec3 lightColorHdr = czm_lightColorHdr;
  6100. #endif
  6101. vec3 color = inputMaterial.diffuse;
  6102. #ifdef HAS_NORMALS
  6103. color = czm_pbrLighting(
  6104. attributes.positionEC,
  6105. inputMaterial.normalEC,
  6106. czm_lightDirectionEC,
  6107. lightColorHdr,
  6108. pbrParameters
  6109. );
  6110. #ifdef USE_IBL_LIGHTING
  6111. color += imageBasedLightingStage(
  6112. attributes.positionEC,
  6113. inputMaterial.normalEC,
  6114. czm_lightDirectionEC,
  6115. lightColorHdr,
  6116. pbrParameters
  6117. );
  6118. #endif
  6119. #endif
  6120. color *= inputMaterial.occlusion;
  6121. color += inputMaterial.emissive;
  6122. // In HDR mode, the frame buffer is in linear color space. The
  6123. // post-processing stages (see PostProcessStageCollection) will handle
  6124. // tonemapping. However, if HDR is not enabled, we must tonemap else large
  6125. // values may be clamped to 1.0
  6126. #ifndef HDR
  6127. color = czm_acesTonemapping(color);
  6128. #endif
  6129. return color;
  6130. }
  6131. #endif
  6132. void lightingStage(inout czm_modelMaterial material, ProcessedAttributes attributes)
  6133. {
  6134. // Even though the lighting will only set the diffuse color,
  6135. // pass all other properties so further stages have access to them.
  6136. vec3 color = vec3(0.0);
  6137. #ifdef LIGHTING_PBR
  6138. color = computePbrLighting(material, attributes);
  6139. #else // unlit
  6140. color = material.diffuse;
  6141. #endif
  6142. #ifdef HAS_POINT_CLOUD_COLOR_STYLE
  6143. // The colors resulting from point cloud styles are adjusted differently.
  6144. color = czm_gammaCorrect(color);
  6145. #elif !defined(HDR)
  6146. // If HDR is not enabled, the frame buffer stores sRGB colors rather than
  6147. // linear colors so the linear value must be converted.
  6148. color = czm_linearToSrgb(color);
  6149. #endif
  6150. material.diffuse = color;
  6151. }
  6152. `;var vbn=T(S(),1),CMe={UNLIT:0,PBR:1},Hh=Object.freeze(CMe);var Wie={name:"LightingPipelineStage"};Wie.process=function(e,t){let n=e.model,i=e.lightingOptions,o=e.shaderBuilder;if(d(n.lightColor)){o.addDefine("USE_CUSTOM_LIGHT_COLOR",void 0,Le.FRAGMENT),o.addUniform("vec3","model_lightColorHdr",Le.FRAGMENT);let s=e.uniformMap;s.model_lightColorHdr=function(){return n.lightColor}}i.lightingModel===Hh.PBR?o.addDefine("LIGHTING_PBR",void 0,Le.FRAGMENT):o.addDefine("LIGHTING_UNLIT",void 0,Le.FRAGMENT),o.addFragmentLines(iI)};var oI=Wie;var iyn=T(S(),1);var Dbn=T(S(),1),rI=`// If the style color is white, it implies the feature has not been styled.
  6153. bool isDefaultStyleColor(vec3 color)
  6154. {
  6155. return all(greaterThan(color, vec3(1.0 - czm_epsilon3)));
  6156. }
  6157. vec3 blend(vec3 sourceColor, vec3 styleColor, float styleColorBlend)
  6158. {
  6159. vec3 blendColor = mix(sourceColor, styleColor, styleColorBlend);
  6160. vec3 color = isDefaultStyleColor(styleColor.rgb) ? sourceColor : blendColor;
  6161. return color;
  6162. }
  6163. vec2 computeTextureTransform(vec2 texCoord, mat3 textureTransform)
  6164. {
  6165. return vec2(textureTransform * vec3(texCoord, 1.0));
  6166. }
  6167. #ifdef HAS_NORMALS
  6168. vec3 computeNormal(ProcessedAttributes attributes)
  6169. {
  6170. // Geometry normal. This is already normalized
  6171. vec3 ng = attributes.normalEC;
  6172. vec3 normal = ng;
  6173. #if defined(HAS_NORMAL_TEXTURE) && !defined(HAS_WIREFRAME)
  6174. vec2 normalTexCoords = TEXCOORD_NORMAL;
  6175. #ifdef HAS_NORMAL_TEXTURE_TRANSFORM
  6176. normalTexCoords = computeTextureTransform(normalTexCoords, u_normalTextureTransform);
  6177. #endif
  6178. // If HAS_BITANGENTS is set, then HAS_TANGENTS is also set
  6179. #ifdef HAS_BITANGENTS
  6180. vec3 t = attributes.tangentEC;
  6181. vec3 b = attributes.bitangentEC;
  6182. mat3 tbn = mat3(t, b, ng);
  6183. vec3 n = texture(u_normalTexture, normalTexCoords).rgb;
  6184. normal = normalize(tbn * (2.0 * n - 1.0));
  6185. #elif (__VERSION__ == 300 || defined(GL_OES_standard_derivatives))
  6186. // If derivatives are available (not IE 10), compute tangents
  6187. vec3 positionEC = attributes.positionEC;
  6188. vec3 pos_dx = dFdx(positionEC);
  6189. vec3 pos_dy = dFdy(positionEC);
  6190. vec3 tex_dx = dFdx(vec3(normalTexCoords,0.0));
  6191. vec3 tex_dy = dFdy(vec3(normalTexCoords,0.0));
  6192. vec3 t = (tex_dy.t * pos_dx - tex_dx.t * pos_dy) / (tex_dx.s * tex_dy.t - tex_dy.s * tex_dx.t);
  6193. t = normalize(t - ng * dot(ng, t));
  6194. vec3 b = normalize(cross(ng, t));
  6195. mat3 tbn = mat3(t, b, ng);
  6196. vec3 n = texture(u_normalTexture, normalTexCoords).rgb;
  6197. normal = normalize(tbn * (2.0 * n - 1.0));
  6198. #endif
  6199. #endif
  6200. #ifdef HAS_DOUBLE_SIDED_MATERIAL
  6201. if (czm_backFacing()) {
  6202. normal = -normal;
  6203. }
  6204. #endif
  6205. return normal;
  6206. }
  6207. #endif
  6208. void materialStage(inout czm_modelMaterial material, ProcessedAttributes attributes, SelectedFeature feature)
  6209. {
  6210. #ifdef HAS_NORMALS
  6211. material.normalEC = computeNormal(attributes);
  6212. #endif
  6213. vec4 baseColorWithAlpha = vec4(1.0);
  6214. // Regardless of whether we use PBR, set a base color
  6215. #ifdef HAS_BASE_COLOR_TEXTURE
  6216. vec2 baseColorTexCoords = TEXCOORD_BASE_COLOR;
  6217. #ifdef HAS_BASE_COLOR_TEXTURE_TRANSFORM
  6218. baseColorTexCoords = computeTextureTransform(baseColorTexCoords, u_baseColorTextureTransform);
  6219. #endif
  6220. baseColorWithAlpha = czm_srgbToLinear(texture(u_baseColorTexture, baseColorTexCoords));
  6221. #ifdef HAS_BASE_COLOR_FACTOR
  6222. baseColorWithAlpha *= u_baseColorFactor;
  6223. #endif
  6224. #elif defined(HAS_BASE_COLOR_FACTOR)
  6225. baseColorWithAlpha = u_baseColorFactor;
  6226. #endif
  6227. #ifdef HAS_POINT_CLOUD_COLOR_STYLE
  6228. baseColorWithAlpha = v_pointCloudColor;
  6229. #elif defined(HAS_COLOR_0)
  6230. vec4 color = attributes.color_0;
  6231. // .pnts files store colors in the sRGB color space
  6232. #ifdef HAS_SRGB_COLOR
  6233. color = czm_srgbToLinear(color);
  6234. #endif
  6235. baseColorWithAlpha *= color;
  6236. #endif
  6237. material.diffuse = baseColorWithAlpha.rgb;
  6238. material.alpha = baseColorWithAlpha.a;
  6239. #ifdef USE_CPU_STYLING
  6240. material.diffuse = blend(material.diffuse, feature.color.rgb, model_colorBlend);
  6241. #endif
  6242. #ifdef HAS_OCCLUSION_TEXTURE
  6243. vec2 occlusionTexCoords = TEXCOORD_OCCLUSION;
  6244. #ifdef HAS_OCCLUSION_TEXTURE_TRANSFORM
  6245. occlusionTexCoords = computeTextureTransform(occlusionTexCoords, u_occlusionTextureTransform);
  6246. #endif
  6247. material.occlusion = texture(u_occlusionTexture, occlusionTexCoords).r;
  6248. #endif
  6249. #ifdef HAS_EMISSIVE_TEXTURE
  6250. vec2 emissiveTexCoords = TEXCOORD_EMISSIVE;
  6251. #ifdef HAS_EMISSIVE_TEXTURE_TRANSFORM
  6252. emissiveTexCoords = computeTextureTransform(emissiveTexCoords, u_emissiveTextureTransform);
  6253. #endif
  6254. vec3 emissive = czm_srgbToLinear(texture(u_emissiveTexture, emissiveTexCoords).rgb);
  6255. #ifdef HAS_EMISSIVE_FACTOR
  6256. emissive *= u_emissiveFactor;
  6257. #endif
  6258. material.emissive = emissive;
  6259. #elif defined(HAS_EMISSIVE_FACTOR)
  6260. material.emissive = u_emissiveFactor;
  6261. #endif
  6262. #if defined(LIGHTING_PBR) && defined(USE_SPECULAR_GLOSSINESS)
  6263. #ifdef HAS_SPECULAR_GLOSSINESS_TEXTURE
  6264. vec2 specularGlossinessTexCoords = TEXCOORD_SPECULAR_GLOSSINESS;
  6265. #ifdef HAS_SPECULAR_GLOSSINESS_TEXTURE_TRANSFORM
  6266. specularGlossinessTexCoords = computeTextureTransform(specularGlossinessTexCoords, u_specularGlossinessTextureTransform);
  6267. #endif
  6268. vec4 specularGlossiness = czm_srgbToLinear(texture(u_specularGlossinessTexture, specularGlossinessTexCoords));
  6269. vec3 specular = specularGlossiness.rgb;
  6270. float glossiness = specularGlossiness.a;
  6271. #ifdef HAS_SPECULAR_FACTOR
  6272. specular *= u_specularFactor;
  6273. #endif
  6274. #ifdef HAS_GLOSSINESS_FACTOR
  6275. glossiness *= u_glossinessFactor;
  6276. #endif
  6277. #else
  6278. #ifdef HAS_SPECULAR_FACTOR
  6279. vec3 specular = clamp(u_specularFactor, vec3(0.0), vec3(1.0));
  6280. #else
  6281. vec3 specular = vec3(1.0);
  6282. #endif
  6283. #ifdef HAS_GLOSSINESS_FACTOR
  6284. float glossiness = clamp(u_glossinessFactor, 0.0, 1.0);
  6285. #else
  6286. float glossiness = 1.0;
  6287. #endif
  6288. #endif
  6289. #ifdef HAS_DIFFUSE_TEXTURE
  6290. vec2 diffuseTexCoords = TEXCOORD_DIFFUSE;
  6291. #ifdef HAS_DIFFUSE_TEXTURE_TRANSFORM
  6292. diffuseTexCoords = computeTextureTransform(diffuseTexCoords, u_diffuseTextureTransform);
  6293. #endif
  6294. vec4 diffuse = czm_srgbToLinear(texture(u_diffuseTexture, diffuseTexCoords));
  6295. #ifdef HAS_DIFFUSE_FACTOR
  6296. diffuse *= u_diffuseFactor;
  6297. #endif
  6298. #elif defined(HAS_DIFFUSE_FACTOR)
  6299. vec4 diffuse = clamp(u_diffuseFactor, vec4(0.0), vec4(1.0));
  6300. #else
  6301. vec4 diffuse = vec4(1.0);
  6302. #endif
  6303. czm_pbrParameters parameters = czm_pbrSpecularGlossinessMaterial(
  6304. diffuse.rgb,
  6305. specular,
  6306. glossiness
  6307. );
  6308. material.diffuse = parameters.diffuseColor;
  6309. // the specular glossiness extension's alpha overrides anything set
  6310. // by the base material.
  6311. material.alpha = diffuse.a;
  6312. material.specular = parameters.f0;
  6313. material.roughness = parameters.roughness;
  6314. #elif defined(LIGHTING_PBR)
  6315. #ifdef HAS_METALLIC_ROUGHNESS_TEXTURE
  6316. vec2 metallicRoughnessTexCoords = TEXCOORD_METALLIC_ROUGHNESS;
  6317. #ifdef HAS_METALLIC_ROUGHNESS_TEXTURE_TRANSFORM
  6318. metallicRoughnessTexCoords = computeTextureTransform(metallicRoughnessTexCoords, u_metallicRoughnessTextureTransform);
  6319. #endif
  6320. vec3 metallicRoughness = texture(u_metallicRoughnessTexture, metallicRoughnessTexCoords).rgb;
  6321. float metalness = clamp(metallicRoughness.b, 0.0, 1.0);
  6322. float roughness = clamp(metallicRoughness.g, 0.04, 1.0);
  6323. #ifdef HAS_METALLIC_FACTOR
  6324. metalness *= u_metallicFactor;
  6325. #endif
  6326. #ifdef HAS_ROUGHNESS_FACTOR
  6327. roughness *= u_roughnessFactor;
  6328. #endif
  6329. #else
  6330. #ifdef HAS_METALLIC_FACTOR
  6331. float metalness = clamp(u_metallicFactor, 0.0, 1.0);
  6332. #else
  6333. float metalness = 1.0;
  6334. #endif
  6335. #ifdef HAS_ROUGHNESS_FACTOR
  6336. float roughness = clamp(u_roughnessFactor, 0.04, 1.0);
  6337. #else
  6338. float roughness = 1.0;
  6339. #endif
  6340. #endif
  6341. czm_pbrParameters parameters = czm_pbrMetallicRoughnessMaterial(
  6342. material.diffuse,
  6343. metalness,
  6344. roughness
  6345. );
  6346. material.diffuse = parameters.diffuseColor;
  6347. material.specular = parameters.f0;
  6348. material.roughness = parameters.roughness;
  6349. #endif
  6350. }
  6351. `;var VMe=wt.Material,tO=wt.MetallicRoughness,nO=wt.SpecularGlossiness,Pie={name:"MaterialPipelineStage",_processTexture:Ob,_processTextureTransform:vie};Pie.process=function(e,t,n){let i=t.material,o=e.model,r=d(o.classificationType),s=r,a=e.uniformMap,c=e.shaderBuilder,l=n.context.defaultTexture,u=n.context.defaultNormalTexture,m=n.context.defaultEmissiveTexture;LMe(i,a,c,l,u,m,s),d(i.specularGlossiness)?RMe(i,a,c,l,s):ZMe(i,a,c,l,s);let p=nn.getAttributeBySemantic(t,Ct.NORMAL),y=e.lightingOptions;i.unlit||!p||r?y.lightingModel=Hh.UNLIT:y.lightingModel=Hh.PBR;let f=o.backFaceCulling&&!i.doubleSided;e.renderStateOptions.cull.enabled=f;let x=e.alphaOptions;i.alphaMode===Oh.BLEND?x.pass=Re.TRANSLUCENT:i.alphaMode===Oh.MASK&&(x.alphaCutoff=i.alphaCutoff),c.addFragmentLines(rI),i.doubleSided&&c.addDefine("HAS_DOUBLE_SIDED_MATERIAL",void 0,Le.BOTH)};function vie(e,t,n,i,o){let r=`HAS_${o}_TEXTURE_TRANSFORM`;e.addDefine(r,void 0,Le.FRAGMENT);let s=`${i}Transform`;e.addUniform("mat3",s,Le.FRAGMENT),t[s]=function(){return n.transform}}function Ob(e,t,n,i,o,r){e.addUniform("sampler2D",i,Le.FRAGMENT),t[i]=function(){return g(n.texture,r)};let s=`HAS_${o}_TEXTURE`;e.addDefine(s,void 0,Le.FRAGMENT);let c=`v_texCoord_${n.texCoord}`,l=`TEXCOORD_${o}`;e.addDefine(l,c,Le.FRAGMENT);let u=n.transform;d(u)&&!$.equals(u,$.IDENTITY)&&vie(e,t,n,i,o)}function LMe(e,t,n,i,o,r,s){let a=e.emissiveFactor;if(d(a)&&!h.equals(a,VMe.DEFAULT_EMISSIVE_FACTOR)){n.addUniform("vec3","u_emissiveFactor",Le.FRAGMENT),t.u_emissiveFactor=function(){return e.emissiveFactor},n.addDefine("HAS_EMISSIVE_FACTOR",void 0,Le.FRAGMENT);let u=e.emissiveTexture;d(u)&&!s&&Ob(n,t,u,"u_emissiveTexture","EMISSIVE",r)}let c=e.normalTexture;d(c)&&!s&&Ob(n,t,c,"u_normalTexture","NORMAL",o);let l=e.occlusionTexture;d(l)&&!s&&Ob(n,t,l,"u_occlusionTexture","OCCLUSION",i)}function RMe(e,t,n,i,o){let r=e.specularGlossiness;n.addDefine("USE_SPECULAR_GLOSSINESS",void 0,Le.FRAGMENT);let s=r.diffuseTexture;d(s)&&!o&&Ob(n,t,s,"u_diffuseTexture","DIFFUSE",i);let a=r.diffuseFactor;d(a)&&!se.equals(a,nO.DEFAULT_DIFFUSE_FACTOR)&&(n.addUniform("vec4","u_diffuseFactor",Le.FRAGMENT),t.u_diffuseFactor=function(){return r.diffuseFactor},n.addDefine("HAS_DIFFUSE_FACTOR",void 0,Le.FRAGMENT));let c=r.specularGlossinessTexture;d(c)&&!o&&Ob(n,t,c,"u_specularGlossinessTexture","SPECULAR_GLOSSINESS",i);let l=r.specularFactor;d(l)&&!h.equals(l,nO.DEFAULT_SPECULAR_FACTOR)&&(n.addUniform("vec3","u_specularFactor",Le.FRAGMENT),t.u_specularFactor=function(){return r.specularFactor},n.addDefine("HAS_SPECULAR_FACTOR",void 0,Le.FRAGMENT));let u=r.glossinessFactor;d(u)&&u!==nO.DEFAULT_GLOSSINESS_FACTOR&&(n.addUniform("float","u_glossinessFactor",Le.FRAGMENT),t.u_glossinessFactor=function(){return r.glossinessFactor},n.addDefine("HAS_GLOSSINESS_FACTOR",void 0,Le.FRAGMENT))}function ZMe(e,t,n,i,o){let r=e.metallicRoughness;n.addDefine("USE_METALLIC_ROUGHNESS",void 0,Le.FRAGMENT);let s=r.baseColorTexture;d(s)&&!o&&Ob(n,t,s,"u_baseColorTexture","BASE_COLOR",i);let a=r.baseColorFactor;d(a)&&!se.equals(a,tO.DEFAULT_BASE_COLOR_FACTOR)&&(n.addUniform("vec4","u_baseColorFactor",Le.FRAGMENT),t.u_baseColorFactor=function(){return r.baseColorFactor},n.addDefine("HAS_BASE_COLOR_FACTOR",void 0,Le.FRAGMENT));let c=r.metallicRoughnessTexture;d(c)&&!o&&Ob(n,t,c,"u_metallicRoughnessTexture","METALLIC_ROUGHNESS",i);let l=r.metallicFactor;d(l)&&l!==tO.DEFAULT_METALLIC_FACTOR&&(n.addUniform("float","u_metallicFactor",Le.FRAGMENT),t.u_metallicFactor=function(){return r.metallicFactor},n.addDefine("HAS_METALLIC_FACTOR",void 0,Le.FRAGMENT));let u=r.roughnessFactor;d(u)&&u!==tO.DEFAULT_ROUGHNESS_FACTOR&&(n.addUniform("float","u_roughnessFactor",Le.FRAGMENT),t.u_roughnessFactor=function(){return r.roughnessFactor},n.addDefine("HAS_ROUGHNESS_FACTOR",void 0,Le.FRAGMENT))}var sI=Pie;var hyn=T(S(),1);var ryn=T(S(),1),aI=`void morphTargetsStage(inout ProcessedAttributes attributes)
  6352. {
  6353. vec3 positionMC = attributes.positionMC;
  6354. attributes.positionMC = getMorphedPosition(positionMC);
  6355. #ifdef HAS_NORMALS
  6356. vec3 normalMC = attributes.normalMC;
  6357. attributes.normalMC = getMorphedNormal(normalMC);
  6358. #endif
  6359. #ifdef HAS_TANGENTS
  6360. vec3 tangentMC = attributes.tangentMC;
  6361. attributes.tangentMC = getMorphedTangent(tangentMC);
  6362. #endif
  6363. }`;var ga={name:"MorphTargetsPipelineStage",FUNCTION_ID_GET_MORPHED_POSITION:"getMorphedPosition",FUNCTION_SIGNATURE_GET_MORPHED_POSITION:"vec3 getMorphedPosition(in vec3 position)",FUNCTION_ID_GET_MORPHED_NORMAL:"getMorphedNormal",FUNCTION_SIGNATURE_GET_MORPHED_NORMAL:"vec3 getMorphedNormal(in vec3 normal)",FUNCTION_ID_GET_MORPHED_TANGENT:"getMorphedTangent",FUNCTION_SIGNATURE_GET_MORPHED_TANGENT:"vec3 getMorphedTangent(in vec3 tangent)"};ga.process=function(e,t){let n=e.shaderBuilder;n.addDefine("HAS_MORPH_TARGETS",void 0,Le.VERTEX),PMe(n);let i=t.morphTargets.length;for(let a=0;a<i;a++){let c=t.morphTargets[a].attributes,l=c.length;for(let u=0;u<l;u++){let m=c[u],p=m.semantic;p!==Ct.POSITION&&p!==Ct.NORMAL&&p!==Ct.TANGENT||(EMe(e,m,e.attributeIndex,a),e.attributeIndex++)}}vMe(n);let r=e.runtimeNode.morphWeights.length;n.addUniform("float",`u_morphWeights[${r}]`,Le.VERTEX),n.addVertexLines(aI);let s={u_morphWeights:function(){return e.runtimeNode.morphWeights}};e.uniformMap=xt(s,e.uniformMap)};var GMe={attributeString:void 0,functionId:void 0};function EMe(e,t,n,i){let o=e.shaderBuilder;XMe(e,t,n);let r=IMe(t,GMe);WMe(o,r,i)}function XMe(e,t,n){let i={index:n,value:d(t.buffer)?void 0:t.constant,vertexBuffer:t.buffer,componentsPerAttribute:an.getNumberOfComponents(t.type),componentDatatype:t.componentDatatype,offsetInBytes:t.byteOffset,strideInBytes:t.byteStride,normalize:t.normalized};e.attributes.push(i)}function IMe(e,t){switch(e.semantic){case Ct.POSITION:t.attributeString="Position",t.functionId=ga.FUNCTION_ID_GET_MORPHED_POSITION;break;case Ct.NORMAL:t.attributeString="Normal",t.functionId=ga.FUNCTION_ID_GET_MORPHED_NORMAL;break;case Ct.TANGENT:t.attributeString="Tangent",t.functionId=ga.FUNCTION_ID_GET_MORPHED_TANGENT;break;default:break}return t}function WMe(e,t,n){let i=t.attributeString,o=`a_target${i}_${n}`,r=`morphed${i} += u_morphWeights[${n}] * a_target${i}_${n};`;e.addAttribute("vec3",o),e.addFunctionLines(t.functionId,[r])}function PMe(e){e.addFunction(ga.FUNCTION_ID_GET_MORPHED_POSITION,ga.FUNCTION_SIGNATURE_GET_MORPHED_POSITION,Le.VERTEX);let t="vec3 morphedPosition = position;";e.addFunctionLines(ga.FUNCTION_ID_GET_MORPHED_POSITION,[t]),e.addFunction(ga.FUNCTION_ID_GET_MORPHED_NORMAL,ga.FUNCTION_SIGNATURE_GET_MORPHED_NORMAL,Le.VERTEX);let n="vec3 morphedNormal = normal;";e.addFunctionLines(ga.FUNCTION_ID_GET_MORPHED_NORMAL,[n]),e.addFunction(ga.FUNCTION_ID_GET_MORPHED_TANGENT,ga.FUNCTION_SIGNATURE_GET_MORPHED_TANGENT,Le.VERTEX);let i="vec3 morphedTangent = tangent;";e.addFunctionLines(ga.FUNCTION_ID_GET_MORPHED_TANGENT,[i])}function vMe(e){let t="return morphedPosition;";e.addFunctionLines(ga.FUNCTION_ID_GET_MORPHED_POSITION,[t]);let n="return morphedNormal;";e.addFunctionLines(ga.FUNCTION_ID_GET_MORPHED_NORMAL,[n]);let i="return morphedTangent;";e.addFunctionLines(ga.FUNCTION_ID_GET_MORPHED_TANGENT,[i])}var cI=ga;var Vyn=T(S(),1);var wie={name:"PickingPipelineStage"};wie.process=function(e,t,n){let i=n.context,o=e.runtimeNode,r=e.shaderBuilder,s=e.model,a=o.node.instances;if(e.hasPropertyTable)wMe(e,t,a,i);else if(d(a))FMe(e,i);else{let c=Fie(e),l=i.createPickId(c);s._pipelineResources.push(l),s._pickIds.push(l),r.addUniform("vec4","czm_pickColor",Le.FRAGMENT);let u=e.uniformMap;u.czm_pickColor=function(){return l.color},e.pickId="czm_pickColor"}};function Fie(e,t){let n=e.model;if(d(n.pickObject))return n.pickObject;let i={model:n,node:e.runtimeNode,primitive:e.runtimePrimitive},o;if(nr.is3DTiles(n.type)){let r=n.content;o={content:r,primitive:r.tileset,detail:i}}else o={primitive:n,detail:i};return o.id=n.id,d(t)&&(o.instanceId=t),o}function wMe(e,t,n){let i=e.model,o,r,s=i.featureIdLabel,a=i.instanceFeatureIdLabel;d(i.featureTableId)?o=i.featureTableId:d(n)?(r=nn.getFeatureIdsByLabel(n.featureIds,a),o=r.propertyTableId):(r=nn.getFeatureIdsByLabel(t.featureIds,s),o=r.propertyTableId);let c=i.featureTables[o];e.shaderBuilder.addUniform("sampler2D","model_pickTexture",Le.FRAGMENT);let u=c.batchTexture;e.uniformMap.model_pickTexture=function(){return g(u.pickTexture,u.defaultTexture)},e.pickId="((selectedFeature.id < int(model_featuresLength)) ? texture(model_pickTexture, selectedFeature.st) : vec4(0.0))"}function FMe(e,t){let n=e.instanceCount,i=new Array(n),o=new Uint8Array(n*4),r=e.model,s=r._pipelineResources;for(let m=0;m<n;m++){let p=Fie(e,m),y=t.createPickId(p);s.push(y),i[m]=y;let f=y.color;o[m*4+0]=Y.floatToByte(f.red),o[m*4+1]=Y.floatToByte(f.green),o[m*4+2]=Y.floatToByte(f.blue),o[m*4+3]=Y.floatToByte(f.alpha)}r._pickIds=i;let a=mt.createVertexBuffer({context:t,typedArray:o,usage:Ne.STATIC_DRAW});a.vertexArrayDestroyable=!1;let c=!1;r.statistics.addBuffer(a,c),s.push(a);let l={index:e.attributeIndex++,vertexBuffer:a,componentsPerAttribute:4,componentDatatype:Q.UNSIGNED_BYTE,normalize:!0,offsetInBytes:0,strideInBytes:0,instanceDivisor:1};e.attributes.push(l);let u=e.shaderBuilder;u.addDefine("USE_PICKING",void 0,Le.BOTH),u.addAttribute("vec4","a_pickColor"),u.addVarying("vec4","v_pickColor"),e.pickId="v_pickColor"}var lI=wie;var Hyn=T(S(),1);var Ryn=T(S(),1),AMe={ADD:0,REPLACE:1},Wo=Object.freeze(AMe);var Gyn=T(S(),1),dI=`float getPointSizeFromAttenuation(vec3 positionEC) {
  6364. // Variables are packed into a single vector to minimize gl.uniformXXX() calls
  6365. float pointSize = model_pointCloudParameters.x;
  6366. float geometricError = model_pointCloudParameters.y;
  6367. float depthMultiplier = model_pointCloudParameters.z;
  6368. float depth = -positionEC.z;
  6369. return min((geometricError / depth) * depthMultiplier, pointSize);
  6370. }
  6371. #ifdef HAS_POINT_CLOUD_SHOW_STYLE
  6372. float pointCloudShowStylingStage(in ProcessedAttributes attributes, in Metadata metadata) {
  6373. float tiles3d_tileset_time = model_pointCloudParameters.w;
  6374. return float(getShowFromStyle(attributes, metadata, tiles3d_tileset_time));
  6375. }
  6376. #endif
  6377. #ifdef HAS_POINT_CLOUD_COLOR_STYLE
  6378. vec4 pointCloudColorStylingStage(in ProcessedAttributes attributes, in Metadata metadata) {
  6379. float tiles3d_tileset_time = model_pointCloudParameters.w;
  6380. return getColorFromStyle(attributes, metadata, tiles3d_tileset_time);
  6381. }
  6382. #endif
  6383. #ifdef HAS_POINT_CLOUD_POINT_SIZE_STYLE
  6384. float pointCloudPointSizeStylingStage(in ProcessedAttributes attributes, in Metadata metadata) {
  6385. float tiles3d_tileset_time = model_pointCloudParameters.w;
  6386. return float(getPointSizeFromStyle(attributes, metadata, tiles3d_tileset_time));
  6387. }
  6388. #elif defined(HAS_POINT_CLOUD_ATTENUATION)
  6389. float pointCloudPointSizeStylingStage(in ProcessedAttributes attributes, in Metadata metadata) {
  6390. return getPointSizeFromAttenuation(v_positionEC);
  6391. }
  6392. #endif
  6393. #ifdef HAS_POINT_CLOUD_BACK_FACE_CULLING
  6394. float pointCloudBackFaceCullingStage() {
  6395. #if defined(HAS_NORMALS) && !defined(HAS_DOUBLE_SIDED_MATERIAL)
  6396. // This needs to be computed in eye coordinates so we can't use attributes.normalMC
  6397. return step(-v_normalEC.z, 0.0);
  6398. #else
  6399. return 1.0;
  6400. #endif
  6401. }
  6402. #endif`;var MMe=new se,Mie={name:"PointCloudStylingPipelineStage"};Mie.process=function(e,t,n){let i=e.shaderBuilder,o=e.model,r=o.style,s=o.structuralMetadata,a=d(s)?s.propertyAttributes:void 0,c=d(o.featureTableId)&&o.featureTables[o.featureTableId].featuresLength>0,l=!d(a)&&c;if(d(r)&&!l){let x=DMe(a),_=BMe(r,x);YMe(i,_);let V=OMe(_).indexOf("normalMC")>=0,L=nn.getAttributeBySemantic(t,Ct.NORMAL);if(V&&!L)throw new me("Style references the NORMAL semantic but the point cloud does not have normals");i.addDefine("COMPUTE_POSITION_WC_STYLE",void 0,Le.VERTEX),_.styleTranslucent&&(e.alphaOptions.pass=Re.TRANSLUCENT)}let u=o.pointCloudShading;u.attenuation&&i.addDefine("HAS_POINT_CLOUD_ATTENUATION",void 0,Le.VERTEX),u.backFaceCulling&&i.addDefine("HAS_POINT_CLOUD_BACK_FACE_CULLING",void 0,Le.VERTEX);let m,p,y;nr.is3DTiles(o.type)&&(p=!0,m=o.content,y=m.tile.refine===Wo.ADD),i.addUniform("vec4","model_pointCloudParameters",Le.VERTEX),i.addVertexLines(dI);let f=e.uniformMap;f.model_pointCloudParameters=function(){let x=MMe,_=1;p&&(_=y?5:m.tileset.memoryAdjustedScreenSpaceError),x.x=g(u.maximumAttenuation,_),x.x*=n.pixelRatio;let C=NMe(e,t,u,m);x.y=C*u.geometricErrorScale;let V=n.context,L=n.camera.frustum,Z;return n.mode===ie.SCENE2D||L instanceof en?Z=Number.POSITIVE_INFINITY:Z=V.drawingBufferHeight/n.camera.frustum.sseDenominator,x.z=Z,p&&(x.w=m.tileset.timeSinceLoad),x}};var Aie=new h;function NMe(e,t,n,i){if(d(i)){let u=i.tile.geometricError;if(u>0)return u}if(d(n.baseResolution))return n.baseResolution;let o=nn.getAttributeBySemantic(t,Ct.POSITION),r=o.count,s=e.runtimeNode.transform,a=h.subtract(o.max,o.min,Aie);a=A.multiplyByPointAsVector(s,a,Aie);let c=a.x*a.y*a.z;return W.cbrt(c/r)}var UMe={colorStyleFunction:void 0,showStyleFunction:void 0,pointSizeStyleFunction:void 0,styleTranslucent:!1},kMe={POSITION:"attributes.positionMC",POSITION_ABSOLUTE:"v_positionWC",COLOR:"attributes.color_0",NORMAL:"attributes.normalMC"};function DMe(e){let t=Ke(kMe);if(!d(e))return t;for(let n=0;n<e.length;n++){let o=e[n].properties;for(let r in o)o.hasOwnProperty(r)&&(t[r]=`metadata.${r}`)}return t}var iO="ProcessedAttributes attributes, Metadata metadata, float tiles3d_tileset_time";function BMe(e,t){let n=UMe,i={translucent:!1};return n.colorStyleFunction=e.getColorShaderFunction(`getColorFromStyle(${iO})`,t,i),n.showStyleFunction=e.getShowShaderFunction(`getShowFromStyle(${iO})`,t,i),n.pointSizeStyleFunction=e.getPointSizeShaderFunction(`getPointSizeFromStyle(${iO})`,t,i),n.styleTranslucent=d(n.colorStyleFunction)&&i.translucent,n}function YMe(e,t){let n=t.colorStyleFunction;d(n)&&(e.addDefine("HAS_POINT_CLOUD_COLOR_STYLE",void 0,Le.BOTH),e.addVertexLines(n),e.addVarying("vec4","v_pointCloudColor"));let i=t.showStyleFunction;d(i)&&(e.addDefine("HAS_POINT_CLOUD_SHOW_STYLE",void 0,Le.VERTEX),e.addVertexLines(i));let o=t.pointSizeStyleFunction;d(o)&&(e.addDefine("HAS_POINT_CLOUD_POINT_SIZE_STYLE",void 0,Le.VERTEX),e.addVertexLines(o))}function oO(e,t){let n=/attributes\.(\w+)/g,i=n.exec(e);for(;i!==null;){let o=i[1];t.indexOf(o)===-1&&t.push(o),i=n.exec(e)}}function OMe(e){let t=e.colorStyleFunction,n=e.showStyleFunction,i=e.pointSizeStyleFunction,o=[];return d(t)&&oO(t,o),d(n)&&oO(n,o),d(i)&&oO(i,o),o}var uI=Mie;var ogn=T(S(),1);var Jyn=T(S(),1),mI=`void primitiveOutlineStage() {
  6403. v_outlineCoordinates = a_outlineCoordinates;
  6404. }
  6405. `;var jyn=T(S(),1),hI=`void primitiveOutlineStage(inout czm_modelMaterial material) {
  6406. if (!model_showOutline) {
  6407. return;
  6408. }
  6409. float outlineX =
  6410. texture(model_outlineTexture, vec2(v_outlineCoordinates.x, 0.5)).r;
  6411. float outlineY =
  6412. texture(model_outlineTexture, vec2(v_outlineCoordinates.y, 0.5)).r;
  6413. float outlineZ =
  6414. texture(model_outlineTexture, vec2(v_outlineCoordinates.z, 0.5)).r;
  6415. float outlineness = max(outlineX, max(outlineY, outlineZ));
  6416. material.diffuse = mix(material.diffuse, model_outlineColor.rgb, model_outlineColor.a * outlineness);
  6417. }
  6418. `;var Nie={name:"PrimitiveOutlinePipelineStage"};Nie.process=function(e,t,n){let i=e.shaderBuilder,o=e.uniformMap;i.addDefine("HAS_PRIMITIVE_OUTLINE",void 0,Le.BOTH),i.addAttribute("vec3","a_outlineCoordinates"),i.addVarying("vec3","v_outlineCoordinates");let r=t.outlineCoordinates,s={index:e.attributeIndex++,vertexBuffer:r.buffer,componentsPerAttribute:an.getNumberOfComponents(r.type),componentDatatype:r.componentDatatype,offsetInBytes:r.byteOffset,strideInBytes:r.byteStride,normalize:r.normalized};e.attributes.push(s),i.addUniform("sampler2D","model_outlineTexture",Le.FRAGMENT);let a=Px.createTexture(n.context);o.model_outlineTexture=function(){return a};let c=e.model;i.addUniform("vec4","model_outlineColor",Le.FRAGMENT),o.model_outlineColor=function(){return c.outlineColor},i.addUniform("bool","model_showOutline",Le.FRAGMENT),o.model_showOutline=function(){return c.showOutline},i.addVertexLines(mI),i.addFragmentLines(hI)};var fI=Nie;var dgn=T(S(),1);var Uie={name:"PrimitiveStatisticsPipelineStage",_countGeometry:kie,_count2DPositions:Die,_countMorphTargetAttributes:Bie,_countMaterialTextures:Yie,_countFeatureIdTextures:Oie,_countBinaryMetadata:Kie};Uie.process=function(e,t,n){let i=e.model,o=i.statistics;kie(o,t),Die(o,e.runtimePrimitive),Bie(o,t),Yie(o,t.material),Oie(o,t.featureIds),Kie(o,i)};function kie(e,t){let n=d(t.indices)?t.indices.count:nn.getAttributeBySemantic(t,"POSITION").count,i=t.primitiveType;i===Fe.POINTS?e.pointsLength+=n:Fe.isTriangles(i)&&(e.trianglesLength+=KMe(i,n));let o=t.attributes,r=o.length;for(let c=0;c<r;c++){let l=o[c];if(d(l.buffer)){let u=d(l.typedArray);e.addBuffer(l.buffer,u)}}let s=t.outlineCoordinates;d(s)&&d(s.buffer)&&e.addBuffer(s.buffer,!1);let a=t.indices;if(d(a)&&d(a.buffer)){let c=d(a.typedArray);e.addBuffer(a.buffer,c)}}function KMe(e,t){switch(e){case Fe.TRIANGLES:return t/3;case Fe.TRIANGLE_STRIP:case Fe.TRIANGLE_FAN:return Math.max(t-2,0);default:return 0}}function Die(e,t){let n=t.positionBuffer2D;d(n)&&e.addBuffer(n,!0)}function Bie(e,t){let n=t.morphTargets;if(!d(n))return;let i=!1,o=n.length;for(let r=0;r<o;r++){let s=n[r].attributes,a=s.length;for(let c=0;c<a;c++){let l=s[c];d(l.buffer)&&e.addBuffer(l.buffer,i)}}}function Yie(e,t){let n=HMe(t),i=n.length;for(let o=0;o<i;o++){let r=n[o];d(r)&&d(r.texture)&&e.addTexture(r.texture)}}function HMe(e){let t=e.metallicRoughness,n=[e.emissiveTexture,e.normalTexture,e.occlusionTexture,t.baseColorTexture,t.metallicRoughnessTexture],i=e.specularGlossiness;return d(i)&&(n.push(i.diffuseTexture),n.push(i.specularGlossinessTexture)),n}function Oie(e,t){let n=t.length;for(let i=0;i<n;i++){let o=t[i];if(o instanceof wt.FeatureIdTexture){let r=o.textureReader;d(r.texture)&&e.addTexture(r.texture)}}}function Kie(e,t){let n=t.structuralMetadata;d(n)&&(zMe(e,n),e.propertyTablesByteLength+=n.propertyTablesByteLength);let i=t.featureTables;if(!d(i))return;let o=i.length;for(let r=0;r<o;r++){let s=i[r];e.addBatchTexture(s.batchTexture)}}function zMe(e,t){let n=t.propertyTextures;if(!d(n))return;let i=n.length;for(let o=0;o<i;o++){let s=n[o].properties;for(let a in s)if(s.hasOwnProperty(a)){let l=s[a].textureReader;d(l.texture)&&e.addTexture(l.texture)}}}var pI=Uie;var Lgn=T(S(),1);var JMe=new A,QMe=new A,Hie={name:"SceneMode2DPipelineStage"};Hie.process=function(e,t,n){let i=nn.getAttributeBySemantic(t,Ct.POSITION),o=e.shaderBuilder,r=e.model,s=r.sceneGraph.computedModelMatrix,a=e.runtimeNode.computedTransform,c=A.multiplyTransformation(s,a,JMe),l=$Me(e,c,n),u=e.runtimePrimitive;u.boundingSphere2D=l;let m=e.runtimeNode.node.instances;if(d(m))return;if(d(i.typedArray)){let x=nNe(i,c,l,n);u.positionBuffer2D=x,r._modelResources.push(x),i.typedArray=void 0}o.addDefine("USE_2D_POSITIONS",void 0,Le.VERTEX),o.addUniform("mat4","u_modelView2D",Le.VERTEX);let p=A.fromTranslation(l.center,new A),y=n.context,f={u_modelView2D:function(){return A.multiplyTransformation(y.uniformState.view,p,QMe)}};e.uniformMap=xt(f,e.uniformMap)};var jMe=new h,qMe=new h;function $Me(e,t,n){let i=A.multiplyByPoint(t,e.positionMin,jMe),o=Ji.computeActualWgs84Position(n,i,i),r=A.multiplyByPoint(t,e.positionMax,qMe),s=Ji.computeActualWgs84Position(n,r,r);return ce.fromCornerPoints(o,s,new ce)}var zie=new h;function eNe(e,t){let n=e.length,i=new Float32Array(n),o=t.quantizedVolumeOffset,r=t.quantizedVolumeStepSize;for(let s=0;s<n;s+=3){let a=h.fromArray(e,s,zie),c=h.multiplyComponents(a,r,a),l=h.add(c,o,c);i[s]=l.x,i[s+1]=l.y,i[s+2]=l.z}return i}function tNe(e,t,n,i){let o;d(e.quantization)?o=eNe(e.typedArray,e.quantization):o=e.typedArray.slice();let r=e.byteOffset/Float32Array.BYTES_PER_ELEMENT,s=o.length,a=d(e.byteStride)?e.byteStride/Float32Array.BYTES_PER_ELEMENT:3;for(let c=r;c<s;c+=a){let l=h.fromArray(o,c,zie);if(isNaN(l.x)||isNaN(l.y)||isNaN(l.z))continue;let u=A.multiplyByPoint(t,l,l),m=Ji.computeActualWgs84Position(i,u,u),p=h.subtract(m,n,m);o[c]=p.x,o[c+1]=p.y,o[c+2]=p.z}return o}function nNe(e,t,n,i){let o=Ke(i);o.mode=ie.COLUMBUS_VIEW;let r=n.center,s=tNe(e,t,r,o),a=mt.createVertexBuffer({context:i.context,typedArray:s,usage:Ne.STATIC_DRAW});return a.vertexArrayDestroyable=!1,a}var bI=Hie;var Pgn=T(S(),1);var Zgn=T(S(),1),yI=`void skinningStage(inout ProcessedAttributes attributes)
  6419. {
  6420. mat4 skinningMatrix = getSkinningMatrix();
  6421. mat3 skinningMatrixMat3 = mat3(skinningMatrix);
  6422. vec4 positionMC = vec4(attributes.positionMC, 1.0);
  6423. attributes.positionMC = vec3(skinningMatrix * positionMC);
  6424. #ifdef HAS_NORMALS
  6425. vec3 normalMC = attributes.normalMC;
  6426. attributes.normalMC = skinningMatrixMat3 * normalMC;
  6427. #endif
  6428. #ifdef HAS_TANGENTS
  6429. vec3 tangentMC = attributes.tangentMC;
  6430. attributes.tangentMC = skinningMatrixMat3 * tangentMC;
  6431. #endif
  6432. }`;var Nx={name:"SkinningPipelineStage",FUNCTION_ID_GET_SKINNING_MATRIX:"getSkinningMatrix",FUNCTION_SIGNATURE_GET_SKINNING_MATRIX:"mat4 getSkinningMatrix()"};Nx.process=function(e,t){let n=e.shaderBuilder;n.addDefine("HAS_SKINNING",void 0,Le.VERTEX),oNe(n,t);let i=e.runtimeNode,o=i.computedJointMatrices;n.addUniform("mat4",`u_jointMatrices[${o.length}]`,Le.VERTEX),n.addVertexLines(yI);let r={u_jointMatrices:function(){return i.computedJointMatrices}};e.uniformMap=xt(r,e.uniformMap)};function iNe(e){let t=-1,n=e.attributes,i=n.length;for(let o=0;o<i;o++){let r=n[o];(r.semantic===Ct.JOINTS||r.semantic===Ct.WEIGHTS)&&(t=Math.max(t,r.setIndex))}return t}function oNe(e,t){e.addFunction(Nx.FUNCTION_ID_GET_SKINNING_MATRIX,Nx.FUNCTION_SIGNATURE_GET_SKINNING_MATRIX,Le.VERTEX);let n="mat4 skinnedMatrix = mat4(0);";e.addFunctionLines(Nx.FUNCTION_ID_GET_SKINNING_MATRIX,[n]);let i,o,r=["x","y","z","w"],s=iNe(t);for(i=0;i<=s;i++)for(o=0;o<=3;o++){let c=r[o],l=`skinnedMatrix += a_weights_${i}.${c} * u_jointMatrices[int(a_joints_${i}.${c})];`;e.addFunctionLines(Nx.FUNCTION_ID_GET_SKINNING_MATRIX,[l])}let a="return skinnedMatrix;";e.addFunctionLines(Nx.FUNCTION_ID_GET_SKINNING_MATRIX,[a])}var gI=Nx;var Jgn=T(S(),1);var Mgn=T(S(),1);var rO={};function rNe(e){let t=Ue.createTypedArray(e,e*2),n=e,i=0;for(let o=0;o<n;o+=3)t[i++]=o,t[i++]=o+1,t[i++]=o+1,t[i++]=o+2,t[i++]=o+2,t[i++]=o;return t}function sNe(e,t){let n=t.length,i=Ue.createTypedArray(e,n*2),o=0;for(let r=0;r<n;r+=3){let s=t[r],a=t[r+1],c=t[r+2];i[o++]=s,i[o++]=a,i[o++]=a,i[o++]=c,i[o++]=c,i[o++]=s}return i}function aNe(e){let t=e-2,n=2+t*4,i=Ue.createTypedArray(e,n),o=0;i[o++]=0,i[o++]=1;for(let r=0;r<t;r++)i[o++]=r+1,i[o++]=r+2,i[o++]=r+2,i[o++]=r;return i}function cNe(e,t){let i=t.length-2,o=2+i*4,r=Ue.createTypedArray(e,o),s=0;r[s++]=t[0],r[s++]=t[1];for(let a=0;a<i;a++){let c=t[a],l=t[a+1],u=t[a+2];r[s++]=l,r[s++]=u,r[s++]=u,r[s++]=c}return r}function lNe(e){let t=e-2,n=2+t*4,i=Ue.createTypedArray(e,n),o=0;i[o++]=0,i[o++]=1;for(let r=0;r<t;r++)i[o++]=r+1,i[o++]=r+2,i[o++]=r+2,i[o++]=0;return i}function dNe(e,t){let i=t.length-2,o=2+i*4,r=Ue.createTypedArray(e,o),s=0,a=t[0];r[s++]=a,r[s++]=t[1];for(let c=0;c<i;c++){let l=t[c+1],u=t[c+2];r[s++]=l,r[s++]=u,r[s++]=u,r[s++]=a}return r}rO.createWireframeIndices=function(e,t,n){let i=d(n);if(e===Fe.TRIANGLES)return i?sNe(t,n):rNe(t);if(e===Fe.TRIANGLE_STRIP)return i?cNe(t,n):aNe(t);if(e===Fe.TRIANGLE_FAN)return i?dNe(t,n):lNe(t)};rO.getWireframeIndicesCount=function(e,t){return e===Fe.TRIANGLES?t*2:e===Fe.TRIANGLE_STRIP||e===Fe.TRIANGLE_FAN?2+(t-2)*4:t};var oC=rO;var Jie={name:"WireframePipelineStage"};Jie.process=function(e,t,n){e.shaderBuilder.addDefine("HAS_WIREFRAME",void 0,Le.FRAGMENT);let o=e.model,r=uNe(t,e.indices,n);o._pipelineResources.push(r),e.wireframeIndexBuffer=r;let s=!1;o.statistics.addBuffer(r,s);let a=e.primitiveType,c=e.count;e.primitiveType=Fe.LINES,e.count=oC.getWireframeIndicesCount(a,c)};function uNe(e,t,n){let o=nn.getAttributeBySemantic(e,Ct.POSITION).count,r=n.context.webgl2,s;if(d(t)){let u=t.buffer,m=t.count;d(u)&&r?(s=u.sizeInBytes===m?new Uint8Array(m):Ue.createTypedArray(o,m),u.getBufferData(s)):s=t.typedArray}let a=e.primitiveType,c=oC.createWireframeIndices(a,o,s),l=Ue.fromSizeInBytes(c.BYTES_PER_ELEMENT);return mt.createIndexBuffer({context:n.context,typedArray:c,usage:Ne.STATIC_DRAW,indexDatatype:l})}var xI=Jie;function Qie(e){e=g(e,g.EMPTY_OBJECT);let t=e.primitive,n=e.node,i=e.model;this.primitive=t,this.node=n,this.model=i,this.pipelineStages=[],this.drawCommand=void 0,this.boundingSphere=void 0,this.boundingSphere2D=void 0,this.positionBuffer2D=void 0,this.batchLengths=void 0,this.batchOffsets=void 0,this.updateStages=[]}Qie.prototype.configurePipeline=function(e){let t=this.pipelineStages;t.length=0;let n=this.primitive,i=this.node,o=this.model,r=o.customShader,s=o.style,a=e.context.webgl2,l=e.mode!==ie.SCENE3D&&!e.scene3DOnly&&o._projectTo2D,u=d(n.morphTargets)&&n.morphTargets.length>0,m=d(i.skin),p=d(r),f=!(p&&d(r.fragmentShaderText))||r.mode!==Mp.REPLACE_MATERIAL,x=nn.hasQuantizedAttributes(n.attributes),_=o.debugWireframe&&Fe.isTriangles(n.primitiveType)&&(o._enableDebugWireframe||a),C=o.pointCloudShading,V=d(C)&&C.attenuation,L=d(C)&&C.backFaceCulling,Z=n.primitiveType===Fe.POINTS&&(d(s)||V||L),G=o._enableShowOutline&&d(n.outlineCoordinates),X=mNe(o,i,n),P=d(o.classificationType);l&&t.push(bI),t.push(nI),_&&t.push(xI),P&&t.push(UX),u&&t.push(cI),m&&t.push(gI),Z&&t.push(uI),x&&t.push(qX),f&&t.push(sI),t.push(Db),t.push(ou),X.hasPropertyTable&&(t.push(Yb),t.push(NX),t.push(BX)),p&&t.push(QX),t.push(oI),o.allowPicking&&t.push(lI),G&&t.push(fI),t.push(MX),t.push(pI)};function mNe(e,t,n){let i;return d(t.instances)&&(i=nn.getFeatureIdsByLabel(t.instances.featureIds,e.instanceFeatureIdLabel),d(i))?{hasFeatureIds:!0,hasPropertyTable:d(i.propertyTableId)}:(i=nn.getFeatureIdsByLabel(n.featureIds,e.featureIdLabel),d(i)?{hasFeatureIds:!0,hasPropertyTable:d(i.propertyTableId)}:{hasFeatureIds:!1,hasPropertyTable:!1})}var _I=Qie;var Zxn=T(S(),1);function sO(e){e=g(e,g.EMPTY_OBJECT),this._sceneGraph=e.sceneGraph;let t=e.skin;this._skin=t,this._inverseBindMatrices=void 0,this._joints=[],this._jointMatrices=[],hNe(this)}Object.defineProperties(sO.prototype,{skin:{get:function(){return this._skin}},sceneGraph:{get:function(){return this._sceneGraph}},inverseBindMatrices:{get:function(){return this._inverseBindMatrices}},joints:{get:function(){return this._joints}},jointMatrices:{get:function(){return this._jointMatrices}}});function hNe(e){let t=e.skin,n=t.inverseBindMatrices;e._inverseBindMatrices=n;let i=t.joints,o=i.length,r=e.sceneGraph._runtimeNodes,s=e.joints,a=e._jointMatrices;for(let c=0;c<o;c++){let l=i[c].index,u=r[l];s.push(u);let m=n[c],p=jie(u,m,new A);a.push(p)}}function jie(e,t,n){let i=A.multiplyTransformation(e.transformToRoot,e.transform,n);return n=A.multiplyTransformation(i,t,n),n}sO.prototype.updateJointMatrices=function(){let e=this._jointMatrices,t=e.length;for(let n=0;n<t;n++){let i=this.joints[n],o=this.inverseBindMatrices[n];e[n]=jie(i,o,e[n])}};var TI=sO;var Jxn=T(S(),1);var Exn=T(S(),1);function fNe(){this.pass=void 0,this.alphaCutoff=void 0}var SI=fNe;var Bxn=T(S(),1);var Ixn=T(S(),1);function aO(e){this.name=e,this.fields=[]}aO.prototype.addField=function(e,t){let n=` ${e} ${t};`;this.fields.push(n)};aO.prototype.generateGlslLines=function(){let e=this.fields;return e.length===0&&(e=[" float _empty;"]),[].concat(`struct ${this.name}`,"{",e,"};")};var CI=aO;var Pxn=T(S(),1);function cO(e){this.signature=e,this.body=[]}cO.prototype.addLines=function(e){let t=this.body;if(Array.isArray(e)){let n=e.length;for(let i=0;i<n;i++)t.push(` ${e[i]}`)}else t.push(` ${e}`)};cO.prototype.generateGlslLines=function(){return[].concat(this.signature,"{",this.body,"}")};var VI=cO;function vc(){this._positionAttributeLine=void 0,this._nextAttributeLocation=1,this._attributeLocations={},this._attributeLines=[],this._structs={},this._functions={},this._vertexShaderParts={defineLines:[],uniformLines:[],shaderLines:[],varyingLines:[],structIds:[],functionIds:[]},this._fragmentShaderParts={defineLines:[],uniformLines:[],shaderLines:[],varyingLines:[],structIds:[],functionIds:[]}}Object.defineProperties(vc.prototype,{attributeLocations:{get:function(){return this._attributeLocations}}});vc.prototype.addDefine=function(e,t,n){n=g(n,Le.BOTH);let i=e;d(t)&&(i+=` ${t.toString()}`),Le.includesVertexShader(n)&&this._vertexShaderParts.defineLines.push(i),Le.includesFragmentShader(n)&&this._fragmentShaderParts.defineLines.push(i)};vc.prototype.addStruct=function(e,t,n){this._structs[e]=new CI(t),Le.includesVertexShader(n)&&this._vertexShaderParts.structIds.push(e),Le.includesFragmentShader(n)&&this._fragmentShaderParts.structIds.push(e)};vc.prototype.addStructField=function(e,t,n){this._structs[e].addField(t,n)};vc.prototype.addFunction=function(e,t,n){this._functions[e]=new VI(t),Le.includesVertexShader(n)&&this._vertexShaderParts.functionIds.push(e),Le.includesFragmentShader(n)&&this._fragmentShaderParts.functionIds.push(e)};vc.prototype.addFunctionLines=function(e,t){this._functions[e].addLines(t)};vc.prototype.addUniform=function(e,t,n){n=g(n,Le.BOTH);let i=`uniform ${e} ${t};`;Le.includesVertexShader(n)&&this._vertexShaderParts.uniformLines.push(i),Le.includesFragmentShader(n)&&this._fragmentShaderParts.uniformLines.push(i)};vc.prototype.setPositionAttribute=function(e,t){return this._positionAttributeLine=`in ${e} ${t};`,this._attributeLocations[t]=0,0};vc.prototype.addAttribute=function(e,t){let n=`in ${e} ${t};`;this._attributeLines.push(n);let i=this._nextAttributeLocation;return this._attributeLocations[t]=i,this._nextAttributeLocation+=bNe(e),i};vc.prototype.addVarying=function(e,t){let n=`${e} ${t};`;this._vertexShaderParts.varyingLines.push(`out ${n}`),this._fragmentShaderParts.varyingLines.push(`in ${n}`)};vc.prototype.addVertexLines=function(e){let t=this._vertexShaderParts.shaderLines;Array.isArray(e)?t.push.apply(t,e):t.push(e)};vc.prototype.addFragmentLines=function(e){let t=this._fragmentShaderParts.shaderLines;Array.isArray(e)?t.push.apply(t,e):t.push(e)};vc.prototype.buildShaderProgram=function(e){let t=d(this._positionAttributeLine)?[this._positionAttributeLine]:[],n=pNe(this),i=yNe(this),o=t.concat(this._attributeLines,this._vertexShaderParts.uniformLines,this._vertexShaderParts.varyingLines,n.vertexLines,i.vertexLines,this._vertexShaderParts.shaderLines).join(`
  6433. `),r=new Ye({defines:this._vertexShaderParts.defineLines,sources:[o]}),s=this._fragmentShaderParts.uniformLines.concat(this._fragmentShaderParts.varyingLines,n.fragmentLines,i.fragmentLines,this._fragmentShaderParts.shaderLines).join(`
  6434. `),a=new Ye({defines:this._fragmentShaderParts.defineLines,sources:[s]});return Qt.fromCache({context:e,vertexShaderSource:r,fragmentShaderSource:a,attributeLocations:this._attributeLocations})};vc.prototype.clone=function(){return Ke(this,!0)};function pNe(e){let t=[],n=[],i,o=e._vertexShaderParts.structIds,r,s,a;for(i=0;i<o.length;i++)r=o[i],s=e._structs[r],a=s.generateGlslLines(),t.push.apply(t,a);for(o=e._fragmentShaderParts.structIds,i=0;i<o.length;i++)r=o[i],s=e._structs[r],a=s.generateGlslLines(),n.push.apply(n,a);return{vertexLines:t,fragmentLines:n}}function bNe(e){switch(e){case"mat2":return 2;case"mat3":return 3;case"mat4":return 4;default:return 1}}function yNe(e){let t=[],n=[],i,o=e._vertexShaderParts.functionIds,r,s,a;for(i=0;i<o.length;i++)r=o[i],s=e._functions[r],a=s.generateGlslLines(),t.push.apply(t,a);for(o=e._fragmentShaderParts.functionIds,i=0;i<o.length;i++)r=o[i],s=e._functions[r],a=s.generateGlslLines(),n.push.apply(n,a);return{vertexLines:t,fragmentLines:n}}var Ux=vc;function gNe(e){this.shaderBuilder=new Ux,this.model=e,this.uniformMap={},this.alphaOptions=new SI,this.renderStateOptions=De.getState(De.fromCache({depthTest:{enabled:!0,func:Ua.LESS_OR_EQUAL}})),this.hasSilhouette=!1,this.hasSkipLevelOfDetail=!1}var LI=gNe;var s_n=T(S(),1);var jxn=T(S(),1),RI=`void silhouetteStage(inout vec4 color) {
  6435. if(model_silhouettePass) {
  6436. color = czm_gammaCorrect(model_silhouetteColor);
  6437. }
  6438. }`;var $xn=T(S(),1),ZI=`void silhouetteStage(in ProcessedAttributes attributes, inout vec4 positionClip) {
  6439. #ifdef HAS_NORMALS
  6440. if(model_silhouettePass) {
  6441. vec3 normal = normalize(czm_normal3D * attributes.normalMC);
  6442. normal.x *= czm_projection[0][0];
  6443. normal.y *= czm_projection[1][1];
  6444. positionClip.xy += normal.xy * positionClip.w * model_silhouetteSize * czm_pixelRatio / czm_viewport.z;
  6445. }
  6446. #endif
  6447. }
  6448. `;var qM={name:"ModelSilhouettePipelineStage"};qM.silhouettesLength=0;qM.process=function(e,t,n){d(t._silhouetteId)||(t._silhouetteId=++qM.silhouettesLength);let i=e.shaderBuilder;i.addDefine("HAS_SILHOUETTE",void 0,Le.BOTH),i.addVertexLines(ZI),i.addFragmentLines(RI),i.addUniform("vec4","model_silhouetteColor",Le.FRAGMENT),i.addUniform("float","model_silhouetteSize",Le.VERTEX),i.addUniform("bool","model_silhouettePass",Le.BOTH);let o={model_silhouetteColor:function(){return t.silhouetteColor},model_silhouetteSize:function(){return t.silhouetteSize},model_silhouettePass:function(){return!1}};e.uniformMap=xt(o,e.uniformMap),e.hasSilhouette=!0};var GI=qM;var h_n=T(S(),1);var c_n=T(S(),1),EI=`void modelSplitterStage()
  6449. {
  6450. // Don't split when rendering the shadow map, because it is rendered from
  6451. // the perspective of a totally different camera.
  6452. #ifndef SHADOW_MAP
  6453. if (model_splitDirection < 0.0 && gl_FragCoord.x > czm_splitPosition) discard;
  6454. if (model_splitDirection > 0.0 && gl_FragCoord.x < czm_splitPosition) discard;
  6455. #endif
  6456. }
  6457. `;var $M={name:"ModelSplitterPipelineStage",SPLIT_DIRECTION_UNIFORM_NAME:"model_splitDirection"};$M.process=function(e,t,n){let i=e.shaderBuilder;i.addDefine("HAS_MODEL_SPLITTER",void 0,Le.FRAGMENT),i.addFragmentLines(EI);let o={};i.addUniform("float",$M.SPLIT_DIRECTION_UNIFORM_NAME,Le.FRAGMENT),o[$M.SPLIT_DIRECTION_UNIFORM_NAME]=function(){return t.splitDirection},e.uniformMap=xt(o,e.uniformMap)};var XI=$M;var b_n=T(S(),1);function xNe(e,t){this.model=e.model,this.shaderBuilder=e.shaderBuilder.clone(),this.uniformMap=Ke(e.uniformMap),this.alphaOptions=Ke(e.alphaOptions),this.renderStateOptions=Ke(e.renderStateOptions,!0),this.hasSilhouette=e.hasSilhouette,this.hasSkipLevelOfDetail=e.hasSkipLevelOfDetail,this.runtimeNode=t,this.attributes=[],this.attributeIndex=1,this.featureIdVertexAttributeSetIndex=0,this.instanceCount=0}var II=xNe;var G_n=T(S(),1);var __n=T(S(),1);function _Ne(e){e=g(e,g.EMPTY_OBJECT),this.lightingModel=g(e.lightingModel,Hh.UNLIT)}var WI=_Ne;function TNe(e,t){this.model=e.model,this.runtimeNode=e.runtimeNode,this.attributes=e.attributes.slice(),this.attributeIndex=e.attributeIndex,this.featureIdVertexAttributeSetIndex=e.featureIdVertexAttributeSetIndex,this.uniformMap=Ke(e.uniformMap),this.alphaOptions=Ke(e.alphaOptions),this.renderStateOptions=Ke(e.renderStateOptions,!0),this.hasSilhouette=e.hasSilhouette,this.hasSkipLevelOfDetail=e.hasSkipLevelOfDetail,this.shaderBuilder=e.shaderBuilder.clone(),this.instanceCount=e.instanceCount,this.runtimePrimitive=t;let n=t.primitive;this.count=d(n.indices)?n.indices.count:nn.getAttributeBySemantic(n,"POSITION").count,this.hasPropertyTable=!1,this.indices=n.indices,this.wireframeIndexBuffer=void 0,this.primitiveType=n.primitiveType;let i=nn.getPositionMinMax(n,this.runtimeNode.instancingTranslationMin,this.runtimeNode.instancingTranslationMax);this.positionMin=h.clone(i.min,new h),this.positionMax=h.clone(i.max,new h),this.boundingSphere=ce.fromCornerPoints(this.positionMin,this.positionMax,new ce),this.lightingOptions=new WI,this.pickId=void 0}var PI=TNe;function td(e){e=g(e,g.EMPTY_OBJECT);let t=e.modelComponents;this._model=e.model,this._components=t,this._pipelineStages=[],this._updateStages=[],this._runtimeNodes=[],this._rootNodes=[],this._skinnedNodes=[],this._runtimeSkins=[],this.modelPipelineStages=[],this._boundingSphere=void 0,this._boundingSphere2D=void 0,this._computedModelMatrix=A.clone(A.IDENTITY),this._computedModelMatrix2D=A.clone(A.IDENTITY),this._axisCorrectionMatrix=nn.getAxisCorrectionMatrix(t.upAxis,t.forwardAxis,new A),this._runtimeArticulations={},SNe(this)}Object.defineProperties(td.prototype,{components:{get:function(){return this._components}},computedModelMatrix:{get:function(){return this._computedModelMatrix}},axisCorrectionMatrix:{get:function(){return this._axisCorrectionMatrix}},boundingSphere:{get:function(){return this._boundingSphere}}});function SNe(e){let t=e._components,n=t.scene,o=e._model.modelMatrix;qie(e,o);let r=t.articulations,s=r.length,a=e._runtimeArticulations;for(let V=0;V<s;V++){let L=r[V],Z=new LX({articulation:L,sceneGraph:e}),G=Z.name;a[G]=Z}let c=t.nodes,l=c.length;e._runtimeNodes=new Array(l);let m=n.nodes.length,p=A.IDENTITY;for(let V=0;V<m;V++){let L=n.nodes[V],Z=$ie(e,L,p);e._rootNodes.push(Z)}let y=t.skins,f=e._runtimeSkins,x=y.length;for(let V=0;V<x;V++){let L=y[V];f.push(new TI({skin:L,sceneGraph:e}))}let _=e._skinnedNodes,C=_.length;for(let V=0;V<C;V++){let L=_[V],Z=e._runtimeNodes[L],X=c[L].skin.index;Z._runtimeSkin=f[X],Z.updateJointMatrices()}e.applyArticulations()}function qie(e,t){let n=e._components,i=e._model;e._computedModelMatrix=A.multiplyTransformation(t,n.transform,e._computedModelMatrix),e._computedModelMatrix=A.multiplyTransformation(e._computedModelMatrix,e._axisCorrectionMatrix,e._computedModelMatrix),e._computedModelMatrix=A.multiplyByUniformScale(e._computedModelMatrix,i.computedScale,e._computedModelMatrix)}var CNe=new h;function VNe(e,t){let n=e._computedModelMatrix,i=A.getTranslation(n,CNe);if(!h.equals(i,h.ZERO))e._computedModelMatrix2D=vt.basisTo2D(t.mapProjection,n,e._computedModelMatrix2D);else{let o=e.boundingSphere.center,r=vt.wgs84To2DModelMatrix(t.mapProjection,o,e._computedModelMatrix2D);e._computedModelMatrix2D=A.multiply(r,n,e._computedModelMatrix2D)}e._boundingSphere2D=ce.transform(e._boundingSphere,e._computedModelMatrix2D,e._boundingSphere2D)}function $ie(e,t,n){let i=[],o=nn.getNodeTransform(t),r=t.children.length;for(let u=0;u<r;u++){let m=t.children[u],p=A.multiplyTransformation(n,o,new A),y=$ie(e,m,p);i.push(y)}let s=new AX({node:t,transform:o,transformToRoot:n,children:i,sceneGraph:e}),a=t.primitives.length;for(let u=0;u<a;u++)s.runtimePrimitives.push(new _I({primitive:t.primitives[u],node:t,model:e._model}));let c=t.index;e._runtimeNodes[c]=s,d(t.skin)&&e._skinnedNodes.push(c);let l=t.name;if(d(l)){let u=e._model,m=new EX(u,s);u._nodesByName[l]=m}return c}var LNe=new h,RNe=new h,ZNe=new h,GNe=new h;td.prototype.buildDrawCommands=function(e){let t=this._model,n=new LI(t);t.statistics.clear(),this.configurePipeline(e);let i=this.modelPipelineStages,o,r,s;for(o=0;o<i.length;o++)i[o].process(n,t,e);let a=h.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,LNe),c=h.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,RNe);for(o=0;o<this._runtimeNodes.length;o++){let l=this._runtimeNodes[o];if(!d(l))continue;l.configurePipeline();let u=l.pipelineStages,m=new II(n,l);for(r=0;r<u.length;r++)u[r].process(m,l.node,e);let p=l.computedTransform;for(r=0;r<l.runtimePrimitives.length;r++){let y=l.runtimePrimitives[r];y.configurePipeline(e);let f=y.pipelineStages,x=new PI(m,y);for(s=0;s<f.length;s++)f[s].process(x,y.primitive,e);y.boundingSphere=ce.clone(x.boundingSphere,new ce);let _=A.multiplyByPoint(p,x.positionMin,ZNe),C=A.multiplyByPoint(p,x.positionMax,GNe);h.minimumByComponent(a,_,a),h.maximumByComponent(c,C,c);let V=_X(x,e);y.drawCommand=V}}this._boundingSphere=ce.fromCornerPoints(a,c,new ce),this._boundingSphere=ce.transformWithoutScale(this._boundingSphere,this._axisCorrectionMatrix,this._boundingSphere),this._boundingSphere=ce.transform(this._boundingSphere,this._components.transform,this._boundingSphere),t._boundingSphere=ce.transform(this._boundingSphere,t.modelMatrix,t._boundingSphere),t._initialRadius=t._boundingSphere.radius,t._boundingSphere.radius*=t._clampedScale};td.prototype.configurePipeline=function(e){let t=this.modelPipelineStages;t.length=0;let n=this._model;d(n.color)&&t.push(kb),!d(n.classificationType)&&(n.imageBasedLighting.enabled&&t.push(CX),n.isClippingEnabled()&&t.push(GX),n.hasSilhouette(e)&&t.push(GI),d(n.splitDirection)&&n.splitDirection!==Pc.NONE&&t.push(XI),nr.is3DTiles(n.type)&&t.push(TX))};td.prototype.update=function(e,t){let n,i,o;for(n=0;n<this._runtimeNodes.length;n++){let r=this._runtimeNodes[n];if(!d(r))continue;for(i=0;i<r.updateStages.length;i++)r.updateStages[i].update(r,this,e);let s=e.mode!==ie.SCENE3D&&this._model._projectTo2D;for(t&&!s&&this.updateJointMatrices(),i=0;i<r.runtimePrimitives.length;i++){let a=r.runtimePrimitives[i];for(o=0;o<a.updateStages.length;o++)a.updateStages[o].update(a,this)}}};td.prototype.updateModelMatrix=function(e,t){qie(this,e),t.mode!==ie.SCENE3D&&VNe(this,t);let n=this._rootNodes;for(let i=0;i<n.length;i++){let o=this._runtimeNodes[n[i]];o._transformDirty=!0}};td.prototype.updateJointMatrices=function(){let e=this._skinnedNodes,t=e.length;for(let n=0;n<t;n++){let i=e[n];this._runtimeNodes[i].updateJointMatrices()}};function eoe(e,t,n,i,o){if(n&&!t.show)return;let r=t.children.length;for(let c=0;c<r;c++){let l=t.getChild(c);eoe(e,l,n,i,o)}let s=t.runtimePrimitives,a=s.length;for(let c=0;c<a;c++){let l=s[c];i(l,o)}}function eN(e,t,n,i){let o=e._rootNodes,r=o.length;for(let s=0;s<r;s++){let a=o[s],c=e._runtimeNodes[a];eoe(e,c,t,n,i)}}var ENe={backFaceCulling:void 0};td.prototype.updateBackFaceCulling=function(e){let t=ENe;t.backFaceCulling=e,eN(this,!1,XNe,t)};function XNe(e,t){let n=e.drawCommand;n.backFaceCulling=t.backFaceCulling}var INe={shadowMode:void 0};td.prototype.updateShadows=function(e){let t=INe;t.shadowMode=e,eN(this,!1,WNe,t)};function WNe(e,t){let n=e.drawCommand;n.shadows=t.shadowMode}var PNe={debugShowBoundingVolume:void 0};td.prototype.updateShowBoundingVolume=function(e){let t=PNe;t.debugShowBoundingVolume=e,eN(this,!1,vNe,t)};function vNe(e,t){let n=e.drawCommand;n.debugShowBoundingVolume=t.debugShowBoundingVolume}var toe=[],wNe={frameState:void 0,hasSilhouette:void 0};td.prototype.pushDrawCommands=function(e){let t=toe;t.length=0;let n=wNe;n.hasSilhouette=this._model.hasSilhouette(e),n.frameState=e,eN(this,!0,FNe,n),e.commandList.push.apply(e.commandList,t)};function FNe(e,t){let n=t.frameState,i=t.hasSilhouette,o=n.passes,r=toe,s=e.drawCommand;s.pushCommands(n,n.commandList),i&&!o.pick&&s.pushSilhouetteCommands(n,r)}td.prototype.setArticulationStage=function(e,t){let n=e.split(" ");if(n.length!==2)return;let i=n[0],o=n[1],r=this._runtimeArticulations[i];d(r)&&r.setArticulationStage(o,t)};td.prototype.applyArticulations=function(){let e=this._runtimeArticulations;for(let t in e)e.hasOwnProperty(t)&&e[t].apply()};var vI=td;var oTn=T(S(),1);function rC(){this.pointsLength=0,this.trianglesLength=0,this.geometryByteLength=0,this.texturesByteLength=0,this.propertyTablesByteLength=0,this._bufferIdSet={},this._textureIdSet={},this._batchTextureIdMap=new Tt}Object.defineProperties(rC.prototype,{batchTexturesByteLength:{get:function(){let e=this._batchTextureIdMap.length,t=this._batchTextureIdMap.values,n=0;for(let i=0;i<e;i++)n+=t[i].byteLength;return n}}});rC.prototype.clear=function(){this.pointsLength=0,this.trianglesLength=0,this.geometryByteLength=0,this.texturesByteLength=0,this.propertyTablesByteLength=0,this._bufferIdSet={},this._textureIdSet={},this._batchTextureIdMap.removeAll()};rC.prototype.addBuffer=function(e,t){if(!this._bufferIdSet.hasOwnProperty(e._id)){let n=t?2:1;this.geometryByteLength+=e.sizeInBytes*n}this._bufferIdSet[e._id]=!0};rC.prototype.addTexture=function(e){this._textureIdSet.hasOwnProperty(e._id)||(this.texturesByteLength+=e.sizeInBytes),this._textureIdSet[e._id]=!0};rC.prototype.addBatchTexture=function(e){this._batchTextureIdMap.contains(e._id)||this._batchTextureIdMap.set(e._id,e)};var wI=rC;var kTn=T(S(),1);var roe=T(oA(),1);var yTn=T(S(),1);var noe={},kx=Uint32Array.BYTES_PER_ELEMENT;noe.parse=function(e,t){t=g(t,0);let n=new Uint8Array(e),i=new DataView(e);t+=kx;let o=i.getUint32(t,!0);if(o!==1)throw new me(`Only Point Cloud tile version 1 is supported. Version ${o} is not.`);t+=kx,t+=kx;let r=i.getUint32(t,!0);if(r===0)throw new me("Feature table must have a byte length greater than zero");t+=kx;let s=i.getUint32(t,!0);t+=kx;let a=i.getUint32(t,!0);t+=kx;let c=i.getUint32(t,!0);t+=kx;let l=Go(n,t,r);t+=r;let u=new Uint8Array(e,t,s);t+=s;let m,p;a>0&&(m=Go(n,t,a),t+=a,c>0&&(p=new Uint8Array(e,t,c),t+=c));let y=new Rm(l,u),f=y.getGlobalProperty("POINTS_LENGTH");if(y.featuresLength=f,!d(f))throw new me("Feature table global property: POINTS_LENGTH must be defined");let x=y.getGlobalProperty("RTC_CENTER",Q.FLOAT,3);d(x)&&(x=h.unpack(x));let _=ANe(y,m);if(_.rtcCenter=x,_.pointsLength=f,!_.hasPositions){let C=MNe(y);_.positions=C,_.hasPositions=_.hasPositions||d(C)}if(!_.hasPositions)throw new me("Either POSITION or POSITION_QUANTIZED must be defined.");if(!_.hasNormals){let C=UNe(y);_.normals=C,_.hasNormals=_.hasNormals||d(C)}if(!_.hasColors){let C=NNe(y);_.colors=C,_.hasColors=_.hasColors||d(C),_.hasConstantColor=d(_.constantColor),_.isTranslucent=d(C)&&C.isTranslucent}if(!_.hasBatchIds){let C=kNe(y);_.batchIds=C,_.hasBatchIds=_.hasBatchIds||d(C)}if(_.hasBatchIds){let C=y.getGlobalProperty("BATCH_LENGTH");if(!d(C))throw new me("Global property: BATCH_LENGTH must be defined when BATCH_ID is defined.");_.batchLength=C}return d(p)&&(p=new Uint8Array(p),_.batchTableJson=m,_.batchTableBinary=p),_};function ANe(e,t){let n=e.json,i,o,r,s=d(n.extensions)?n.extensions["3DTILES_draco_point_compression"]:void 0,a=d(t)&&d(t.extensions)?t.extensions["3DTILES_draco_point_compression"]:void 0;d(a)&&(r=a.properties);let c,l,u,m,p;if(d(s)){o=s.properties;let f=s.byteOffset,x=s.byteLength;if(!d(o)||!d(f)||!d(x))throw new me("Draco properties, byteOffset, and byteLength must be defined");i=e.buffer.slice(f,f+x),c=d(o.POSITION),l=d(o.RGB)||d(o.RGBA),u=d(o.NORMAL),m=d(o.BATCH_ID),p=d(o.RGBA)}let y;return d(i)&&(y={buffer:i,featureTableProperties:o,batchTableProperties:r,properties:xt(o,r),dequantizeInShader:!0}),{draco:y,hasPositions:c,hasColors:l,isTranslucent:p,hasNormals:u,hasBatchIds:m}}function MNe(e){let t=e.json,n;if(d(t.POSITION))return n=e.getPropertyArray("POSITION",Q.FLOAT,3),{name:Ct.POSITION,semantic:Ct.POSITION,typedArray:n,isQuantized:!1,componentDatatype:Q.FLOAT,type:an.VEC3};if(d(t.POSITION_QUANTIZED)){n=e.getPropertyArray("POSITION_QUANTIZED",Q.UNSIGNED_SHORT,3);let i=e.getGlobalProperty("QUANTIZED_VOLUME_SCALE",Q.FLOAT,3);if(!d(i))throw new me("Global property: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.");let o=65535,r=e.getGlobalProperty("QUANTIZED_VOLUME_OFFSET",Q.FLOAT,3);if(!d(r))throw new me("Global property: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.");return{name:Ct.POSITION,semantic:Ct.POSITION,typedArray:n,isQuantized:!0,componentDatatype:Q.FLOAT,type:an.VEC3,quantizedRange:o,quantizedVolumeOffset:h.unpack(r),quantizedVolumeScale:h.unpack(i),quantizedComponentDatatype:Q.UNSIGNED_SHORT,quantizedType:an.VEC3}}}function NNe(e){let t=e.json,n;if(d(t.RGBA))return n=e.getPropertyArray("RGBA",Q.UNSIGNED_BYTE,4),{name:Ct.COLOR,semantic:Ct.COLOR,setIndex:0,typedArray:n,componentDatatype:Q.UNSIGNED_BYTE,type:an.VEC4,normalized:!0,isRGB565:!1,isTranslucent:!0};if(d(t.RGB))return n=e.getPropertyArray("RGB",Q.UNSIGNED_BYTE,3),{name:"COLOR",semantic:Ct.COLOR,setIndex:0,typedArray:n,componentDatatype:Q.UNSIGNED_BYTE,type:an.VEC3,normalized:!0,isRGB565:!1,isTranslucent:!1};if(d(t.RGB565))return n=e.getPropertyArray("RGB565",Q.UNSIGNED_SHORT,1),{name:"COLOR",semantic:Ct.COLOR,setIndex:0,typedArray:n,componentDatatype:Q.FLOAT,type:an.VEC3,normalized:!1,isRGB565:!0,isTranslucent:!1};if(d(t.CONSTANT_RGBA)){let i=e.getGlobalProperty("CONSTANT_RGBA",Q.UNSIGNED_BYTE,4),o=i[3],r=Y.fromBytes(i[0],i[1],i[2],o),s=o<255;return{name:Ct.COLOR,semantic:Ct.COLOR,setIndex:0,constantColor:r,componentDatatype:Q.FLOAT,type:an.VEC4,isQuantized:!1,isTranslucent:s}}}function UNe(e){let t=e.json,n;if(d(t.NORMAL))return n=e.getPropertyArray("NORMAL",Q.FLOAT,3),{name:Ct.NORMAL,semantic:Ct.NORMAL,typedArray:n,octEncoded:!1,octEncodedZXY:!1,componentDatatype:Q.FLOAT,type:an.VEC3};if(d(t.NORMAL_OCT16P)){n=e.getPropertyArray("NORMAL_OCT16P",Q.UNSIGNED_BYTE,2);let i=8;return{name:Ct.NORMAL,semantic:Ct.NORMAL,typedArray:n,octEncoded:!0,octEncodedZXY:!1,quantizedRange:(1<<i)-1,quantizedType:an.VEC2,quantizedComponentDatatype:Q.UNSIGNED_BYTE,componentDatatype:Q.FLOAT,type:an.VEC3}}}function kNe(e){let t=e.json;if(d(t.BATCH_ID)){let n=e.getPropertyArray("BATCH_ID",Q.UNSIGNED_SHORT,1);return{name:Ct.FEATURE_ID,semantic:Ct.FEATURE_ID,setIndex:0,typedArray:n,componentDatatype:Q.fromTypedArray(n),type:an.SCALAR}}}var Dx=noe;var DNe=wt.Components,BNe=wt.Scene,YNe=wt.Node,ONe=wt.Primitive,KNe=wt.Attribute,ioe=wt.Quantization,HNe=wt.FeatureIdAttribute,zNe=wt.Material,JNe=wt.MetallicRoughness;function Kb(e){e=g(e,g.EMPTY_OBJECT);let t=e.arrayBuffer,n=g(e.byteOffset,0);this._arrayBuffer=t,this._byteOffset=n,this._loadAttributesFor2D=g(e.loadAttributesFor2D,!1),this._parsedContent=void 0,this._decodePromise=void 0,this._decodedAttributes=void 0,this._promise=void 0,this._error=void 0,this._state=Rt.UNLOADED,this._buffers=[],this._components=void 0,this._transform=A.IDENTITY}d(Object.create)&&(Kb.prototype=Object.create(oo.prototype),Kb.prototype.constructor=Kb);Object.defineProperties(Kb.prototype,{cacheKey:{get:function(){}},components:{get:function(){return this._components}},transform:{get:function(){return this._transform}}});Kb.prototype.load=function(){if(d(this._promise))return this._promise;this._parsedContent=Dx.parse(this._arrayBuffer,this._byteOffset),this._state=Rt.PROCESSING,this._promise=Promise.resolve(this)};Kb.prototype.process=function(e){if(d(this._error)){let t=this._error;throw this._error=void 0,t}if(this._state===Rt.READY)return!0;if(this._state===Rt.PROCESSING){if(d(this._decodePromise))return!1;this._decodePromise=QNe(this,e.context)}return!1};function QNe(e,t){let i=e._parsedContent.draco,o;if(d(i)?o=Vp.decodePointCloud(i,t):o=Promise.resolve(),!!d(o))return e._decodePromise=o,o.then(function(r){if(!e.isDestroyed())return d(r)&&jNe(e,i,r),c5e(e,t),e._state=Rt.READY,e}).catch(function(r){e.unload(),e._state=Rt.FAILED;let s="Failed to load Draco pnts";e._error=e.getError(s,r)})}function jNe(e,t,n){e._state=Rt.READY;let i=e._parsedContent,o;if(d(n.POSITION)){if(o={name:"POSITION",semantic:Ct.POSITION,typedArray:n.POSITION.array,componentDatatype:Q.FLOAT,type:an.VEC3,isQuantized:!1},d(n.POSITION.data.quantization)){let a=n.POSITION.data.quantization,c=a.range,l=h.fromElements(c,c,c),u=h.unpack(a.minValues),m=(1<<a.quantizationBits)-1;o.isQuantized=!0,o.quantizedRange=m,o.quantizedVolumeOffset=u,o.quantizedVolumeScale=l,o.quantizedComponentDatatype=m<=255?Q.UNSIGNED_BYTE:Q.UNSIGNED_SHORT,o.quantizedType=an.VEC3}i.positions=o}if(d(n.NORMAL)){if(o={name:"NORMAL",semantic:Ct.NORMAL,typedArray:n.NORMAL.array,componentDatatype:Q.FLOAT,type:an.VEC3,isQuantized:!1,octEncoded:!1,octEncodedZXY:!1},d(n.NORMAL.data.quantization)){let a=(1<<n.NORMAL.data.quantization.quantizationBits)-1;o.quantizedRange=a,o.octEncoded=!0,o.octEncodedZXY=!0,o.quantizedComponentDatatype=Q.UNSIGNED_BYTE,o.quantizedType=an.VEC2}i.normals=o}if(d(n.RGBA)?i.colors={name:"COLOR",semantic:Ct.COLOR,setIndex:0,typedArray:n.RGBA.array,componentDatatype:Q.UNSIGNED_BYTE,type:an.VEC4,normalized:!0,isTranslucent:!0}:d(n.RGB)&&(i.colors={name:"COLOR",semantic:Ct.COLOR,setIndex:0,typedArray:n.RGB.array,componentDatatype:Q.UNSIGNED_BYTE,type:an.VEC3,normalized:!0,isTranslucent:!1}),d(n.BATCH_ID)){let a=n.BATCH_ID.array;i.batchIds={name:"_FEATURE_ID",semantic:Ct.FEATURE_ID,setIndex:0,typedArray:a,componentDatatype:Q.fromTypedArray(a),type:an.SCALAR}}let r=i.batchTableJson,s=t.batchTableProperties;for(let a in s)if(s.hasOwnProperty(a)){let c=n[a];d(r)||(r={}),i.hasDracoBatchTable=!0;let l=c.data;r[a]={byteOffset:l.byteOffset,type:qNe(l.componentsPerAttribute),componentType:$Ne(l.componentDatatype),typedArray:c.array}}i.batchTableJson=r}function qNe(e){switch(e){case 1:return"SCALAR";case 2:return"VEC2";case 3:return"VEC3";case 4:return"VEC4"}}function $Ne(e){switch(e){case ne.BYTE:return"BYTE";case ne.UNSIGNED_BYTE:return"UNSIGNED_BYTE";case ne.SHORT:return"SHORT";case ne.UNSIGNED_SHORT:return"UNSIGNED_SHORT";case ne.INT:return"INT";case ne.UNSIGNED_INT:return"UNSIGNED_INT";case ne.DOUBLE:return"DOUBLE";case ne.FLOAT:return"FLOAT"}}function FI(e,t,n){let i=t.typedArray,o;if(t.octEncoded&&(o=new ioe,o.octEncoded=t.octEncoded,o.octEncodedZXY=t.octEncodedZXY,o.normalizationRange=t.quantizedRange,o.type=t.quantizedType,o.componentDatatype=t.quantizedComponentDatatype),t.isQuantized){o=new ioe;let a=t.quantizedRange;o.normalizationRange=a,o.quantizedVolumeOffset=h.ZERO;let c=t.quantizedVolumeScale;o.quantizedVolumeDimensions=c,o.quantizedVolumeStepSize=h.divideByScalar(c,a,new h),o.componentDatatype=t.quantizedComponentDatatype,o.type=t.quantizedType}let r=new KNe;if(r.name=t.name,r.semantic=t.semantic,r.setIndex=t.setIndex,r.componentDatatype=t.componentDatatype,r.type=t.type,r.normalized=g(t.normalized,!1),r.min=t.min,r.max=t.max,r.quantization=o,t.isRGB565&&(i=Kn.decodeRGB565(i)),d(t.constantColor)){let a=new Array(4);r.constant=Y.pack(t.constantColor,a)}else{let a=mt.createVertexBuffer({typedArray:i,context:n,usage:Ne.STATIC_DRAW});a.vertexArrayDestroyable=!1,e._buffers.push(a),r.buffer=a}let s=e._loadAttributesFor2D;return r.semantic===Ct.POSITION&&s&&(r.typedArray=i),r}var ooe,tN;function e5e(e){if(!d(tN)){ooe=new roe.default(0),tN=new Array(e);for(let t=0;t<e;++t)tN[t]=ooe.random()}return tN}var t5e=new h,n5e=new h,i5e=new h;function o5e(e){let t=e.typedArray,n=20,i=t.length/3,o=Math.min(i,n),r=e5e(n),s=Number.MAX_VALUE,a=-Number.MAX_VALUE,c=h.fromElements(s,s,s,t5e),l=h.fromElements(a,a,a,n5e),u,m,p;if(e.isQuantized)c=h.ZERO,l=e.quantizedVolumeScale;else for(u=0;u<o;++u)m=Math.floor(r[u]*i),p=h.unpack(t,m*3,i5e),h.minimumByComponent(c,p,c),h.maximumByComponent(l,p,l);e.min=h.clone(c),e.max=h.clone(l)}var r5e={name:Ct.COLOR,semantic:Ct.COLOR,setIndex:0,constantColor:Y.DARKGRAY,componentDatatype:Q.FLOAT,type:an.VEC4,isQuantized:!1,isTranslucent:!1};function s5e(e,t,n){let i=[],o,r=t.positions;return d(r)&&(o5e(r),o=FI(e,r,n),o.count=t.pointsLength,i.push(o)),d(t.normals)&&(o=FI(e,t.normals,n),i.push(o)),d(t.colors)?(o=FI(e,t.colors,n),i.push(o)):(o=FI(e,r5e,n),i.push(o)),d(t.batchIds)&&(o=FI(e,t.batchIds,n),i.push(o)),i}function a5e(e,t){let n=e.batchLength,i=e.pointsLength,o=e.batchTableBinary,r=!d(e.batchIds);if(d(o)||e.hasDracoBatchTable){let s=g(n,i);return Pp({count:s,batchTable:e.batchTableJson,binaryBody:o,parseAsPropertyAttributes:r,customAttributeOutput:t})}return new ba({schema:{},propertyTables:[]})}function c5e(e,t){let n=e._parsedContent,i=new JNe;i.metallicFactor=0,i.roughnessFactor=.9;let o=new zNe;o.metallicRoughness=i;let r=n.colors;d(r)&&r.isTranslucent&&(o.alphaMode=Oh.BLEND);let s=!d(n.normals);o.unlit=s;let a=new ONe;if(a.attributes=s5e(e,n,t),a.primitiveType=Fe.POINTS,a.material=o,d(n.batchIds)){let y=new HNe;y.propertyTableId=0,y.setIndex=0,y.positionalLabel="featureId_0",a.featureIds.push(y)}let c=new YNe;c.index=0,c.primitives=[a];let l=new BNe;l.nodes=[c],l.upAxis=Zo.Z,l.forwardAxis=Zo.X;let u=new DNe;u.scene=l,u.nodes=[c];let m=[];u.structuralMetadata=a5e(n,m),m.length>0&&l5e(e,a,m,t),d(n.rtcCenter)&&(u.transform=A.multiplyByTranslation(u.transform,n.rtcCenter,u.transform));let p=n.positions;d(p)&&p.isQuantized&&(u.transform=A.multiplyByTranslation(u.transform,p.quantizedVolumeOffset,u.transform)),e._components=u,e._parsedContent=void 0,e._arrayBuffer=void 0}function l5e(e,t,n,i){let o=t.attributes,r=n.length;for(let s=0;s<r;s++){let a=n[s],c=mt.createVertexBuffer({typedArray:a.typedArray,context:i,usage:Ne.STATIC_DRAW});c.vertexArrayDestroyable=!1,e._buffers.push(c),a.buffer=c,a.typedArray=void 0,o.push(a)}t.propertyAttributeIds=[0]}Kb.prototype.unload=function(){let e=this._buffers;for(let t=0;t<e.length;t++)e[t].destroy();e.length=0,this._components=void 0,this._parsedContent=void 0,this._arrayBuffer=void 0};var AI=Kb;function To(e){e=g(e,g.EMPTY_OBJECT),this._loader=e.loader,this._resource=e.resource,this.type=g(e.type,nr.GLTF),this.modelMatrix=A.clone(g(e.modelMatrix,A.IDENTITY)),this._modelMatrix=A.clone(this.modelMatrix),this._scale=g(e.scale,1),this._minimumPixelSize=g(e.minimumPixelSize,0),this._maximumScale=e.maximumScale,this._clampedScale=d(this._maximumScale)?Math.min(this._scale,this._maximumScale):this._scale,this._computedScale=this._clampedScale,this._updateModelMatrix=!1,this.referenceMatrix=void 0,this._iblReferenceFrameMatrix=$.clone($.IDENTITY),this._resourcesLoaded=!1,this._drawCommandsBuilt=!1,this._ready=!1,this._customShader=e.customShader,this._content=e.content,this._texturesLoaded=!1,this._defaultTexture=void 0,this._activeAnimations=new uX(this),this._clampAnimations=g(e.clampAnimations,!0),this._userAnimationDirty=!1,this._id=e.id,this._idDirty=!1,this._color=Y.clone(e.color),this._colorBlendMode=g(e.colorBlendMode,Ka.HIGHLIGHT),this._colorBlendAmount=g(e.colorBlendAmount,.5);let t=g(e.silhouetteColor,Y.RED);this._silhouetteColor=Y.clone(t),this._silhouetteSize=g(e.silhouetteSize,0),this._silhouetteDirty=!1,this._silhouetteId=void 0,this._cull=g(e.cull,!0),this._opaquePass=g(e.opaquePass,Re.OPAQUE),this._allowPicking=g(e.allowPicking,!0),this._show=g(e.show,!0),this._style=void 0,this._styleDirty=!1,this._styleCommandsNeeded=void 0;let n=g(e.featureIdLabel,"featureId_0");typeof n=="number"&&(n=`featureId_${n}`),this._featureIdLabel=n;let i=g(e.instanceFeatureIdLabel,"instanceFeatureId_0");typeof i=="number"&&(i=`instanceFeatureId_${i}`),this._instanceFeatureIdLabel=i,this._featureTables=[],this._featureTableId=void 0,this._featureTableIdDirty=!0,this._pipelineResources=[],this._modelResources=[],this._pickIds=[],this._boundingSphere=new ce,this._initialRadius=void 0,this._heightReference=g(e.heightReference,Oe.NONE),this._heightDirty=this._heightReference!==Oe.NONE,this._removeUpdateHeightCallback=void 0,this._clampedModelMatrix=void 0;let o=e.scene;d(o)&&d(o.terrainProviderChanged)&&(this._terrainProviderChangedCallback=o.terrainProviderChanged.addEventListener(function(){this._heightDirty=!0},this)),this._scene=o,this._distanceDisplayCondition=e.distanceDisplayCondition;let r=new Kh(e.pointCloudShading);this._pointCloudShading=r,this._attenuation=r.attenuation,this._pointCloudBackFaceCulling=r.backFaceCulling;let s=e.clippingPlanes;d(s)&&s.owner===void 0?rs.setOwner(s,this,"_clippingPlanes"):this._clippingPlanes=s,this._clippingPlanesState=0,this._clippingPlanesMatrix=A.clone(A.IDENTITY),this._lightColor=h.clone(e.lightColor),this._imageBasedLighting=d(e.imageBasedLighting)?e.imageBasedLighting:new dx,this._shouldDestroyImageBasedLighting=!d(e.imageBasedLighting),this._backFaceCulling=g(e.backFaceCulling,!0),this._backFaceCullingDirty=!1,this._shadows=g(e.shadows,xn.ENABLED),this._shadowsDirty=!1,this._debugShowBoundingVolumeDirty=!1,this._debugShowBoundingVolume=g(e.debugShowBoundingVolume,!1),this._enableDebugWireframe=g(e.enableDebugWireframe,!1),this._enableShowOutline=g(e.enableShowOutline,!0),this._debugWireframe=g(e.debugWireframe,!1),this._debugWireframe===!0&&this._enableDebugWireframe===!1&&this.type===nr.GLTF&&Pt("model-debug-wireframe-ignored","enableDebugWireframe must be set to true in Model.fromGltf, otherwise debugWireframe will be ignored.");let a=e.credit;typeof a=="string"&&(a=new St(a)),this._credits=[],this._credit=a,this._resourceCredits=[],this._gltfCredits=[],this._showCreditsOnScreen=g(e.showCreditsOnScreen,!1),this._showCreditsOnScreenDirty=!0,this._splitDirection=g(e.splitDirection,Pc.NONE),this._enableShowOutline=g(e.enableShowOutline,!0),this.showOutline=g(e.showOutline,!0),this.outlineColor=g(e.outlineColor,Y.BLACK),this._classificationType=e.classificationType,this._statistics=new wI,this._sceneMode=void 0,this._projectTo2D=g(e.projectTo2D,!1),this._skipLevelOfDetail=!1,this._ignoreCommands=g(e.ignoreCommands,!1),this._errorEvent=new ye,this._readyEvent=new ye,this._texturesReadyEvent=new ye,this._sceneGraph=void 0,this._nodesByName={},this.pickObject=e.pickObject}function lO(e,t){if(e._errorEvent.numberOfListeners>0){e._errorEvent.raiseEvent(t);return}console.log(t)}function d5e(e,t){let n=e._featureTables,i=t.propertyTables,o=i.length;for(let r=0;r<o;r++){let s=i[r],a=new fX({model:e,propertyTable:s});n.push(a)}return n}function u5e(e,t){let n=t._featureIdLabel,i=t._instanceFeatureIdLabel,o,r,s,a;for(o=0;o<e.nodes.length;o++)if(a=e.nodes[o],d(a.instances)&&(s=nn.getFeatureIdsByLabel(a.instances.featureIds,i),d(s)&&d(s.propertyTableId)))return s.propertyTableId;for(o=0;o<e.nodes.length;o++)for(a=e.nodes[o],r=0;r<a.primitives.length;r++){let c=a.primitives[r],l=nn.getFeatureIdsByLabel(c.featureIds,n);if(d(l))return l.propertyTableId}if(t._featureTables.length===1)return 0}function uO(e,t){if(!d(e)&&!d(t))return!1;if(d(e)!==d(t))return!0;let n=e.alpha,i=t.alpha;return Math.floor(n)!==Math.floor(i)||Math.ceil(n)!==Math.ceil(i)}Object.defineProperties(To.prototype,{ready:{get:function(){return this._ready}},errorEvent:{get:function(){return this._errorEvent}},readyEvent:{get:function(){return this._readyEvent}},incrementallyLoadTextures:{get:function(){return g(this._loader.incrementallyLoadTextures,!1)}},texturesReadyEvent:{get:function(){return this._texturesReadyEvent}},loader:{get:function(){return this._loader}},statistics:{get:function(){return this._statistics}},activeAnimations:{get:function(){return this._activeAnimations}},clampAnimations:{get:function(){return this._clampAnimations},set:function(e){this._clampAnimations=e}},cull:{get:function(){return this._cull}},opaquePass:{get:function(){return this._opaquePass}},pointCloudShading:{get:function(){return this._pointCloudShading},set:function(e){e!==this._pointCloudShading&&this.resetDrawCommands(),this._pointCloudShading=e}},customShader:{get:function(){return this._customShader},set:function(e){e!==this._customShader&&this.resetDrawCommands(),this._customShader=e}},sceneGraph:{get:function(){return this._sceneGraph}},content:{get:function(){return this._content}},heightReference:{get:function(){return this._heightReference},set:function(e){e!==this._heightReference&&(this._heightDirty=!0),this._heightReference=e}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){this._distanceDisplayCondition=Gt.clone(e,this._distanceDisplayCondition)}},structuralMetadata:{get:function(){return this._sceneGraph.components.structuralMetadata}},featureTableId:{get:function(){return this._featureTableId},set:function(e){this._featureTableId=e}},featureTables:{get:function(){return this._featureTables},set:function(e){this._featureTables=e}},id:{get:function(){return this._id},set:function(e){e!==this._id&&(this._idDirty=!0),this._id=e}},allowPicking:{get:function(){return this._allowPicking}},style:{get:function(){return this._style},set:function(e){this._style=e,this._styleDirty=!0}},color:{get:function(){return this._color},set:function(e){uO(e,this._color)&&this.resetDrawCommands(),this._color=Y.clone(e,this._color)}},colorBlendMode:{get:function(){return this._colorBlendMode},set:function(e){this._colorBlendMode=e}},colorBlendAmount:{get:function(){return this._colorBlendAmount},set:function(e){this._colorBlendAmount=e}},silhouetteColor:{get:function(){return this._silhouetteColor},set:function(e){if(!Y.equals(e,this._silhouetteColor)){let t=uO(e,this._silhouetteColor);this._silhouetteDirty=this._silhouetteDirty||t}this._silhouetteColor=Y.clone(e,this._silhouetteColor)}},silhouetteSize:{get:function(){return this._silhouetteSize},set:function(e){if(e!==this._silhouetteSize){let t=this._silhouetteSize,n=e>0&&t===0||e===0&&t>0;this._silhouetteDirty=this._silhouetteDirty||n,this._backFaceCullingDirty=this._backFaceCullingDirty||n}this._silhouetteSize=e}},boundingSphere:{get:function(){let e=d(this._clampedModelMatrix)?this._clampedModelMatrix:this.modelMatrix;return coe(this,e),this._boundingSphere}},debugShowBoundingVolume:{get:function(){return this._debugShowBoundingVolume},set:function(e){this._debugShowBoundingVolume!==e&&(this._debugShowBoundingVolumeDirty=!0),this._debugShowBoundingVolume=e}},debugWireframe:{get:function(){return this._debugWireframe},set:function(e){this._debugWireframe!==e&&this.resetDrawCommands(),this._debugWireframe=e,this._debugWireframe===!0&&this._enableDebugWireframe===!1&&this.type===nr.GLTF&&Pt("model-debug-wireframe-ignored","enableDebugWireframe must be set to true in Model.fromGltfAsync, otherwise debugWireframe will be ignored.")}},show:{get:function(){return this._show},set:function(e){this._show=e}},featureIdLabel:{get:function(){return this._featureIdLabel},set:function(e){typeof e=="number"&&(e=`featureId_${e}`),e!==this._featureIdLabel&&(this._featureTableIdDirty=!0),this._featureIdLabel=e}},instanceFeatureIdLabel:{get:function(){return this._instanceFeatureIdLabel},set:function(e){typeof e=="number"&&(e=`instanceFeatureId_${e}`),e!==this._instanceFeatureIdLabel&&(this._featureTableIdDirty=!0),this._instanceFeatureIdLabel=e}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){e!==this._clippingPlanes&&(rs.setOwner(e,this,"_clippingPlanes"),this.resetDrawCommands())}},lightColor:{get:function(){return this._lightColor},set:function(e){d(e)!==d(this._lightColor)&&this.resetDrawCommands(),this._lightColor=h.clone(e,this._lightColor)}},imageBasedLighting:{get:function(){return this._imageBasedLighting},set:function(e){e!==this._imageBasedLighting&&(this._shouldDestroyImageBasedLighting&&!this._imageBasedLighting.isDestroyed()&&this._imageBasedLighting.destroy(),this._imageBasedLighting=e,this._shouldDestroyImageBasedLighting=!1,this.resetDrawCommands())}},backFaceCulling:{get:function(){return this._backFaceCulling},set:function(e){e!==this._backFaceCulling&&(this._backFaceCullingDirty=!0),this._backFaceCulling=e}},scale:{get:function(){return this._scale},set:function(e){e!==this._scale&&(this._updateModelMatrix=!0),this._scale=e}},computedScale:{get:function(){return this._computedScale}},minimumPixelSize:{get:function(){return this._minimumPixelSize},set:function(e){e!==this._minimumPixelSize&&(this._updateModelMatrix=!0),this._minimumPixelSize=e}},maximumScale:{get:function(){return this._maximumScale},set:function(e){e!==this._maximumScale&&(this._updateModelMatrix=!0),this._maximumScale=e}},shadows:{get:function(){return this._shadows},set:function(e){e!==this._shadows&&(this._shadowsDirty=!0),this._shadows=e}},credit:{get:function(){return this._credit}},showCreditsOnScreen:{get:function(){return this._showCreditsOnScreen},set:function(e){this._showCreditsOnScreen!==e&&(this._showCreditsOnScreenDirty=!0),this._showCreditsOnScreen=e}},splitDirection:{get:function(){return this._splitDirection},set:function(e){this._splitDirection!==e&&this.resetDrawCommands(),this._splitDirection=e}},classificationType:{get:function(){return this._classificationType}},pickIds:{get:function(){return this._pickIds}},styleCommandsNeeded:{get:function(){return this._styleCommandsNeeded}}});To.prototype.getNode=function(e){return this._nodesByName[e]};To.prototype.setArticulationStage=function(e,t){this._sceneGraph.setArticulationStage(e,t)};To.prototype.applyArticulations=function(){this._sceneGraph.applyArticulations()};To.prototype.makeStyleDirty=function(){this._styleDirty=!0};To.prototype.resetDrawCommands=function(){this._drawCommandsBuilt=!1};var m5e=new A,h5e=new $,f5e=new A;To.prototype.update=function(e){let t=!1;try{t=p5e(this,e)}catch(n){if(!this._loader.incrementallyLoadTextures&&n.name==="TextureError")lO(this,n);else{let i=nn.getError("model",this._resource,n);lO(this,i)}}if(b5e(this,e),y5e(this,e),!this._resourcesLoaded&&t){this._resourcesLoaded=!0;let n=this._loader.components;if(!d(n)){if(this._loader.isUnloaded())return;let r=nn.getError("model",this._resource,new me("Failed to load model."));lO(r),this._rejectLoad=this._rejectLoad&&this._rejectLoad(r)}let i=n.structuralMetadata;d(i)&&i.propertyTableCount>0&&d5e(this,i);let o=new vI({model:this,modelComponents:n});this._sceneGraph=o,this._gltfCredits=o.components.asset.credits}if(!(!this._resourcesLoaded||e.mode===ie.MORPHING)){if(g5e(this),x5e(this),_5e(this,e),T5e(this),S5e(this,e),C5e(this,e),V5e(this,e),L5e(this,e),this._defaultTexture=e.context.defaultTexture,R5e(this,e),Z5e(this,e),G5e(this),E5e(this,e),W5e(this,e),!this._ready){e.afterRender.push(()=>{this._ready=!0,this._readyEvent.raiseEvent(this)});return}this._loader.incrementallyLoadTextures&&!this._texturesLoaded&&this._loader.texturesLoaded&&(this.resetDrawCommands(),this._texturesLoaded=!0,this._texturesReadyEvent.raiseEvent(this)),I5e(this),P5e(this,e),v5e(this),w5e(this,e)}};function p5e(e,t){return!e._resourcesLoaded||e._loader.incrementallyLoadTextures&&!e._texturesLoaded?(t.afterRender.push(()=>!0),e._loader.process(t)):!0}function b5e(e,t){d(e._customShader)&&e._customShader.update(t)}function y5e(e,t){e._imageBasedLighting.update(t),e._imageBasedLighting.shouldRegenerateShaders&&e.resetDrawCommands()}function g5e(e){if(!e._featureTableIdDirty)return;e._featureTableIdDirty=!1;let t=e._sceneGraph.components,n=t.structuralMetadata;d(n)&&n.propertyTableCount>0&&(e.featureTableId=u5e(t,e),e._styleDirty=!0,e.resetDrawCommands())}function x5e(e){e._styleDirty&&(e.applyStyle(e._style),e._styleDirty=!1)}function _5e(e,t){let n=e._featureTables,i=n.length,o=!1;for(let r=0;r<i;r++)n[r].update(t),n[r].styleCommandsNeededDirty&&(o=!0);o&&aoe(e)}function aoe(e){let t=e.featureTables[e.featureTableId];e._styleCommandsNeeded=Gm.getStyleCommandsNeeded(t.featuresLength,t.batchTexture.translucentFeaturesLength)}function T5e(e){let t=e.pointCloudShading;t.attenuation!==e._attenuation&&(e.resetDrawCommands(),e._attenuation=t.attenuation),t.backFaceCulling!==e._pointCloudBackFaceCulling&&(e.resetDrawCommands(),e._pointCloudBackFaceCulling=t.backFaceCulling)}function S5e(e,t){e._silhouetteDirty&&(loe(t)&&e.resetDrawCommands(),e._silhouetteDirty=!1)}function C5e(e,t){let n=e.hasSkipLevelOfDetail(t);n!==e._skipLevelOfDetail&&(e.resetDrawCommands(),e._skipLevelOfDetail=n)}function V5e(e,t){let n=0;e.isClippingEnabled()&&(e._clippingPlanes.owner===e&&e._clippingPlanes.update(t),n=e._clippingPlanes.clippingPlanesState),n!==e._clippingPlanesState&&(e.resetDrawCommands(),e._clippingPlanesState=n)}function L5e(e,t){t.mode!==e._sceneMode&&(e._projectTo2D?e.resetDrawCommands():e._updateModelMatrix=!0,e._sceneMode=t.mode)}function R5e(e,t){e._drawCommandsBuilt||(e.destroyPipelineResources(),e._sceneGraph.buildDrawCommands(t),e._drawCommandsBuilt=!0)}function Z5e(e,t){A.equals(e.modelMatrix,e._modelMatrix)||(e._updateModelMatrix=!0,e._modelMatrix=A.clone(e.modelMatrix,e._modelMatrix))}var zh=new h,nN=new he;function G5e(e){if(!e._updateModelMatrix&&!e._heightDirty&&e._minimumPixelSize===0)return;d(e._removeUpdateHeightCallback)&&(e._removeUpdateHeightCallback(),e._removeUpdateHeightCallback=void 0);let t=e._scene;if(!d(t)||!d(t.globe)||e.heightReference===Oe.NONE){e._clampedModelMatrix=void 0;return}let n=t.globe,i=n.ellipsoid,o=e.modelMatrix;zh.x=o[12],zh.y=o[13],zh.z=o[14];let r=i.cartesianToCartographic(zh);d(e._clampedModelMatrix)||(e._clampedModelMatrix=A.clone(o,new A));let s=n._surface;e._removeUpdateHeightCallback=s.updateHeight(r,soe(e,i,r));let a=n.getHeight(r);if(d(a)){let c=soe(e,i,r);he.clone(r,nN),nN.height=a,i.cartographicToCartesian(nN,zh),c(zh)}e._heightDirty=!1,e._updateModelMatrix=!0}function E5e(e,t){if(!e._updateModelMatrix&&e._minimumPixelSize===0)return;let n=d(e._clampedModelMatrix)?e._clampedModelMatrix:e.modelMatrix;coe(e,n),X5e(e,n,t)}function coe(e,t){e._clampedScale=d(e._maximumScale)?Math.min(e._scale,e._maximumScale):e._scale,e._boundingSphere.center=h.multiplyByScalar(e._sceneGraph.boundingSphere.center,e._clampedScale,e._boundingSphere.center),e._boundingSphere.radius=e._initialRadius*e._clampedScale,e._boundingSphere=ce.transform(e._boundingSphere,t,e._boundingSphere)}function X5e(e,t,n){let i=e.scale;if(e.minimumPixelSize!==0&&!e._projectTo2D){let o=n.context,r=Math.max(o.drawingBufferWidth,o.drawingBufferHeight);A.getTranslation(t,zh),e._sceneMode!==ie.SCENE3D&&Ji.computeActualWgs84Position(n,zh,zh);let s=e._boundingSphere.radius,a=F5e(zh,s,n),c=1/a;Math.min(c*(2*s),r)<e.minimumPixelSize&&(i=e.minimumPixelSize*a/(2*e._initialRadius))}e._computedScale=d(e.maximumScale)?Math.min(e.maximumScale,i):i}function I5e(e){if(!e._idDirty)return;e._idDirty=!1;let t=e._id,n=e._pickIds,i=n.length;for(let o=0;o<i;++o)n[o].object.id=t}function W5e(e,t){let n=d(e._clampedModelMatrix)?e._clampedModelMatrix:e.modelMatrix,i=g(e.referenceMatrix,n),o=t.context,r=e._imageBasedLighting;if(r.useSphericalHarmonicCoefficients||r.useSpecularEnvironmentMaps){let s=h5e,a=m5e;a=A.multiply(o.uniformState.view3D,i,a),s=A.getMatrix3(a,s),s=$.getRotation(s,s),e._iblReferenceFrameMatrix=$.transpose(s,e._iblReferenceFrameMatrix)}if(e.isClippingEnabled()){let s=f5e;s=A.multiply(o.uniformState.view3D,i,s),s=A.multiply(s,e._clippingPlanes.modelMatrix,s),e._clippingPlanesMatrix=A.inverseTranspose(s,e._clippingPlanesMatrix)}}function P5e(e,t){let n=e._sceneGraph;if(e._updateModelMatrix||e._minimumPixelSize!==0){let o=d(e._clampedModelMatrix)?e._clampedModelMatrix:e.modelMatrix;n.updateModelMatrix(o,t),e._updateModelMatrix=!1}e._backFaceCullingDirty&&(n.updateBackFaceCulling(e._backFaceCulling),e._backFaceCullingDirty=!1),e._shadowsDirty&&(n.updateShadows(e._shadows),e._shadowsDirty=!1),e._debugShowBoundingVolumeDirty&&(n.updateShowBoundingVolume(e._debugShowBoundingVolume),e._debugShowBoundingVolumeDirty=!1);let i=!1;d(e.classificationType)||(i=e._userAnimationDirty||e._activeAnimations.update(t)),n.update(t,i),e._userAnimationDirty=!1}function v5e(e){if(!e._showCreditsOnScreenDirty)return;e._showCreditsOnScreenDirty=!1,e._credits.length=0;let t=e._showCreditsOnScreen;if(d(e._credit)){let s=St.clone(e._credit);s.showOnScreen=s.showOnScreen||t,e._credits.push(s)}let n=e._resourceCredits,i=n.length;for(let s=0;s<i;s++){let a=St.clone(n[s]);a.showOnScreen=a.showOnScreen||t,e._credits.push(a)}let o=e._gltfCredits,r=o.length;for(let s=0;s<r;s++){let a=St.clone(o[s]);a.showOnScreen=a.showOnScreen||t,e._credits.push(a)}}function w5e(e,t){let n=M5e(e,t),i=e.isInvisible(),o=e.hasSilhouette(t),r=e._show&&e._computedScale!==0&&n&&(!i||o),s=t.passes,a=s.render||s.pick&&e.allowPicking;r&&!e._ignoreCommands&&a&&(N5e(e,t),e._sceneGraph.pushDrawCommands(t))}var dO=new ce;function F5e(e,t,n){return dO.center=e,dO.radius=t,n.camera.getPixelSize(dO,n.context.drawingBufferWidth,n.context.drawingBufferHeight)}function soe(e,t,n){return function(i){if(e.heightReference===Oe.RELATIVE_TO_GROUND){let r=t.cartesianToCartographic(i,nN);r.height+=n.height,t.cartographicToCartesian(r,i)}let o=e._clampedModelMatrix;A.clone(e.modelMatrix,o),o[12]=i.x,o[13]=i.y,o[14]=i.z,e._heightDirty=!0}}var A5e=new h;function M5e(e,t){let n=e.distanceDisplayCondition;if(!d(n))return!0;let i=n.near*n.near,o=n.far*n.far,r;if(t.mode===ie.SCENE2D){let a=(t.camera.frustum.right-t.camera.frustum.left)*.5;r=a*a}else{let s=A.getTranslation(e.modelMatrix,A5e);Ji.computeActualWgs84Position(t,s,s),r=h.distanceSquared(s,t.camera.positionWC)}return r>=i&&r<=o}function N5e(e,t){let n=t.creditDisplay,i=e._credits,o=i.length;for(let r=0;r<o;r++)n.addCreditToNextFrame(i[r])}To.prototype.isTranslucent=function(){let e=this.color;return d(e)&&e.alpha>0&&e.alpha<1};To.prototype.isInvisible=function(){let e=this.color;return d(e)&&e.alpha===0};function loe(e){return e.context.stencilBuffer}To.prototype.hasSilhouette=function(e){return loe(e)&&this._silhouetteSize>0&&this._silhouetteColor.alpha>0&&!d(this._classificationType)};To.prototype.hasSkipLevelOfDetail=function(e){if(!nr.is3DTiles(this.type))return!1;let t=e.context.stencilBuffer,n=this._content.tileset;return t&&n.isSkippingLevelOfDetail};To.prototype.isClippingEnabled=function(){let e=this._clippingPlanes;return d(e)&&e.enabled&&e.length!==0};To.prototype.isDestroyed=function(){return!1};To.prototype.destroy=function(){let e=this._loader;d(e)&&e.destroy();let t=this._featureTables;if(d(t)){let i=t.length;for(let o=0;o<i;o++)t[o].destroy()}this.destroyPipelineResources(),this.destroyModelResources(),d(this._removeUpdateHeightCallback)&&(this._removeUpdateHeightCallback(),this._removeUpdateHeightCallback=void 0),d(this._terrainProviderChangedCallback)&&(this._terrainProviderChangedCallback(),this._terrainProviderChangedCallback=void 0);let n=this._clippingPlanes;d(n)&&!n.isDestroyed()&&n.owner===this&&n.destroy(),this._clippingPlanes=void 0,this._shouldDestroyImageBasedLighting&&!this._imageBasedLighting.isDestroyed()&&this._imageBasedLighting.destroy(),this._imageBasedLighting=void 0,ue(this)};To.prototype.destroyPipelineResources=function(){let e=this._pipelineResources;for(let t=0;t<e.length;t++)e[t].destroy();this._pipelineResources.length=0,this._pickIds.length=0};To.prototype.destroyModelResources=function(){let e=this._modelResources;for(let t=0;t<e.length;t++)e[t].destroy();this._modelResources.length=0};To.fromGltfAsync=async function(e){e=g(e,g.EMPTY_OBJECT);let t=g(e.url,e.gltf),n={releaseGltfJson:e.releaseGltfJson,asynchronous:e.asynchronous,incrementallyLoadTextures:e.incrementallyLoadTextures,upAxis:e.upAxis,forwardAxis:e.forwardAxis,loadAttributesFor2D:e.projectTo2D,loadIndicesForWireframe:e.enableDebugWireframe,loadPrimitiveOutline:e.enableShowOutline,loadForClassification:d(e.classificationType)},i=g(e.basePath,""),o=Ee.createIfNeeded(i);d(t.asset)?(n.gltfJson=t,n.baseResource=o,n.gltfResource=o):t instanceof Uint8Array?(n.typedArray=t,n.baseResource=o,n.gltfResource=o):n.gltfResource=Ee.createIfNeeded(t);let r=new Ep(n),a=d(e.content)?nr.TILE_GLTF:nr.GLTF,c=n.gltfResource,l=MI(r,a,e);l.resource=c;try{await r.load()}catch(y){throw r.destroy(),nn.getError("model",c,y)}let u=e.gltfCallback;d(u)&&u(r.gltfJson);let m=new To(l),p=m._resource.credits;if(d(p)){let y=p.length;for(let f=0;f<y;f++)m._resourceCredits.push(St.clone(p[f]))}return m};To.fromB3dm=async function(e){let t={b3dmResource:e.resource,arrayBuffer:e.arrayBuffer,byteOffset:e.byteOffset,releaseGltfJson:e.releaseGltfJson,asynchronous:e.asynchronous,incrementallyLoadTextures:e.incrementallyLoadTextures,upAxis:e.upAxis,forwardAxis:e.forwardAxis,loadAttributesFor2D:e.projectTo2D,loadIndicesForWireframe:e.enableDebugWireframe,loadPrimitiveOutline:e.enableShowOutline,loadForClassification:d(e.classificationType)},n=new nX(t);try{await n.load();let i=MI(n,nr.TILE_B3DM,e);return new To(i)}catch(i){throw n.destroy(),i}};To.fromPnts=async function(e){let t={arrayBuffer:e.arrayBuffer,byteOffset:e.byteOffset,loadAttributesFor2D:e.projectTo2D},n=new AI(t);try{await n.load();let i=MI(n,nr.TILE_PNTS,e);return new To(i)}catch(i){throw n.destroy(),i}};To.fromI3dm=async function(e){let t={i3dmResource:e.resource,arrayBuffer:e.arrayBuffer,byteOffset:e.byteOffset,releaseGltfJson:e.releaseGltfJson,asynchronous:e.asynchronous,incrementallyLoadTextures:e.incrementallyLoadTextures,upAxis:e.upAxis,forwardAxis:e.forwardAxis,loadAttributesFor2D:e.projectTo2D,loadIndicesForWireframe:e.enableDebugWireframe,loadPrimitiveOutline:e.enableShowOutline},n=new rX(t);try{await n.load();let i=MI(n,nr.TILE_I3DM,e);return new To(i)}catch(i){throw n.destroy(),i}};To.fromGeoJson=async function(e){let t={geoJson:e.geoJson},n=new iX(t),i=MI(n,nr.TILE_GEOJSON,e);return new To(i)};var U5e=new Y;To.prototype.applyColorAndShow=function(e){let t=Y.clone(this._color,U5e),n=d(e)&&d(e.color),i=d(e)&&d(e.show);this._color=n?e.color.evaluateColor(void 0,this._color):Y.clone(Y.WHITE,this._color),this._show=i?e.show.evaluate(void 0):!0,uO(t,this._color)&&this.resetDrawCommands()};To.prototype.applyStyle=function(e){let t=this.type===nr.TILE_PNTS,n=d(this.featureTableId)&&this.featureTables[this.featureTableId].featuresLength>0,i=d(this.structuralMetadata)?this.structuralMetadata.propertyAttributes:void 0,o=d(i)&&d(i[0]);if(t&&(!n||o)){this.resetDrawCommands();return}n?(this.featureTables[this.featureTableId].applyStyle(e),aoe(this,e)):(this.applyColorAndShow(e),this._styleCommandsNeeded=void 0)};function MI(e,t,n){return{loader:e,type:t,resource:n.resource,show:n.show,modelMatrix:n.modelMatrix,scale:n.scale,minimumPixelSize:n.minimumPixelSize,maximumScale:n.maximumScale,id:n.id,allowPicking:n.allowPicking,clampAnimations:n.clampAnimations,shadows:n.shadows,debugShowBoundingVolume:n.debugShowBoundingVolume,enableDebugWireframe:n.enableDebugWireframe,debugWireframe:n.debugWireframe,cull:n.cull,opaquePass:n.opaquePass,customShader:n.customShader,content:n.content,heightReference:n.heightReference,scene:n.scene,distanceDisplayCondition:n.distanceDisplayCondition,color:n.color,colorBlendAmount:n.colorBlendAmount,colorBlendMode:n.colorBlendMode,silhouetteColor:n.silhouetteColor,silhouetteSize:n.silhouetteSize,enableShowOutline:n.enableShowOutline,showOutline:n.showOutline,outlineColor:n.outlineColor,clippingPlanes:n.clippingPlanes,lightColor:n.lightColor,imageBasedLighting:n.imageBasedLighting,backFaceCulling:n.backFaceCulling,credit:n.credit,showCreditsOnScreen:n.showCreditsOnScreen,splitDirection:n.splitDirection,projectTo2D:n.projectTo2D,featureIdLabel:n.featureIdLabel,instanceFeatureIdLabel:n.instanceFeatureIdLabel,pointCloudShading:n.pointCloudShading,classificationType:n.classificationType,pickObject:n.pickObject}}var Em=To;function Vs(e,t,n){this._tileset=e,this._tile=t,this._resource=n,this._model=void 0,this._metadata=void 0,this._group=void 0,this._ready=!1}Object.defineProperties(Vs.prototype,{featuresLength:{get:function(){let e=this._model,t=e.featureTables,n=e.featureTableId;return d(t)&&d(t[n])?t[n].featuresLength:0}},pointsLength:{get:function(){return this._model.statistics.pointsLength}},trianglesLength:{get:function(){return this._model.statistics.trianglesLength}},geometryByteLength:{get:function(){return this._model.statistics.geometryByteLength}},texturesByteLength:{get:function(){return this._model.statistics.texturesByteLength}},batchTableByteLength:{get:function(){let e=this._model.statistics;return e.propertyTablesByteLength+e.batchTexturesByteLength}},innerContents:{get:function(){}},ready:{get:function(){return this._ready}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},batchTable:{get:function(){let e=this._model,t=e.featureTables,n=e.featureTableId;if(d(t)&&d(t[n]))return t[n]}},metadata:{get:function(){return this._metadata},set:function(e){this._metadata=e}},group:{get:function(){return this._group},set:function(e){this._group=e}}});Vs.prototype.getFeature=function(e){let t=this._model,n=t.featureTableId;return t.featureTables[n].getFeature(e)};Vs.prototype.hasProperty=function(e,t){let n=this._model,i=n.featureTableId;return d(i)?n.featureTables[i].hasProperty(e,t):!1};Vs.prototype.applyDebugSettings=function(e,t){t=e?t:Y.WHITE,this.featuresLength===0?this._model.color=t:d(this.batchTable)&&this.batchTable.setAllColor(t)};Vs.prototype.applyStyle=function(e){this._model.style=e};Vs.prototype.update=function(e,t){let n=this._model,i=this._tile;n.colorBlendAmount=e.colorBlendAmount,n.colorBlendMode=e.colorBlendMode,n.modelMatrix=i.computedTransform,n.customShader=e.customShader,n.featureIdLabel=e.featureIdLabel,n.instanceFeatureIdLabel=e.instanceFeatureIdLabel,n.lightColor=e.lightColor,n.imageBasedLighting=e.imageBasedLighting,n.backFaceCulling=e.backFaceCulling,n.shadows=e.shadows,n.showCreditsOnScreen=e.showCreditsOnScreen,n.splitDirection=e.splitDirection,n.debugWireframe=e.debugWireframe,n.showOutline=e.showOutline,n.outlineColor=e.outlineColor,n.pointCloudShading=e.pointCloudShading;let o=e.clippingPlanes;n.referenceMatrix=e.clippingPlanesOriginMatrix,d(o)&&i.clippingPlanesDirty&&(n._clippingPlanes=o.enabled&&i._isClipped?o:void 0),d(o)&&d(n._clippingPlanes)&&n._clippingPlanes!==o&&(n._clippingPlanes=o,n._clippingPlanesState=0),n.update(t),!this._ready&&n.ready&&(n.activeAnimations.addAll({loop:_l.REPEAT}),this._ready=!0)};Vs.prototype.isDestroyed=function(){return!1};Vs.prototype.destroy=function(){return this._model=this._model&&this._model.destroy(),ue(this)};Vs.fromGltf=async function(e,t,n,i){let o=new Vs(e,t,n),s=NI(e,t,o,{gltf:i,basePath:n}),a=e.vectorClassificationOnly?void 0:e.classificationType;s.classificationType=a;let c=await Em.fromGltfAsync(s);return o._model=c,o};Vs.fromB3dm=async function(e,t,n,i,o){let r=new Vs(e,t,n),a=NI(e,t,r,{arrayBuffer:i,byteOffset:o,resource:n}),c=e.vectorClassificationOnly?void 0:e.classificationType;a.classificationType=c;let l=await Em.fromB3dm(a);return r._model=l,r};Vs.fromI3dm=async function(e,t,n,i,o){let r=new Vs(e,t,n),a=NI(e,t,r,{arrayBuffer:i,byteOffset:o,resource:n}),c=await Em.fromI3dm(a);return r._model=c,r};Vs.fromPnts=async function(e,t,n,i,o){let r=new Vs(e,t,n),a=NI(e,t,r,{arrayBuffer:i,byteOffset:o,resource:n}),c=await Em.fromPnts(a);return r._model=c,r};Vs.fromGeoJson=async function(e,t,n,i){let o=new Vs(e,t,n),s=NI(e,t,o,{geoJson:i,resource:n}),a=await Em.fromGeoJson(s);return o._model=a,o};function NI(e,t,n,i){let o={cull:!1,releaseGltfJson:!0,opaquePass:Re.CESIUM_3D_TILE,modelMatrix:t.computedTransform,upAxis:e._modelUpAxis,forwardAxis:e._modelForwardAxis,incrementallyLoadTextures:!1,customShader:e.customShader,content:n,colorBlendMode:e.colorBlendMode,colorBlendAmount:e.colorBlendAmount,lightColor:e.lightColor,imageBasedLighting:e.imageBasedLighting,featureIdLabel:e.featureIdLabel,instanceFeatureIdLabel:e.instanceFeatureIdLabel,pointCloudShading:e.pointCloudShading,clippingPlanes:e.clippingPlanes,backFaceCulling:e.backFaceCulling,shadows:e.shadows,showCreditsOnScreen:e.showCreditsOnScreen,splitDirection:e.splitDirection,enableDebugWireframe:e._enableDebugWireframe,debugWireframe:e.debugWireframe,projectTo2D:e._projectTo2D,enableShowOutline:e._enableShowOutline,showOutline:e.showOutline,outlineColor:e.outlineColor};return xt(i,o)}var Jh=Vs;var MSn=T(S(),1);function Xm(e,t,n){this._tileset=e,this._tile=t,this._resource=n,this.featurePropertiesDirty=!1,this._metadata=void 0,this._group=void 0,this._ready=!1}Object.defineProperties(Xm.prototype,{featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return 0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){}},ready:{get:function(){return this._ready}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},batchTable:{get:function(){}},metadata:{get:function(){return this._metadata},set:function(e){this._metadata=e}},group:{get:function(){return this._group},set:function(e){this._group=e}}});Xm.fromJson=function(e,t,n,i){let o=new Xm(e,t,n);return o._tileset.loadTileset(o._resource,i,o._tile),o._ready=!0,o};Xm.prototype.hasProperty=function(e,t){return!1};Xm.prototype.getFeature=function(e){};Xm.prototype.applyDebugSettings=function(e,t){};Xm.prototype.applyStyle=function(e){};Xm.prototype.update=function(e,t){};Xm.prototype.isDestroyed=function(){return!1};Xm.prototype.destroy=function(){return ue(this)};var UI=Xm;var jZn=T(S(),1);var QLn=T(S(),1);var y1n=T(S(),1);var zSn=T(S(),1);function Ls(e,t,n,i){let o=Ls._verifyAttributes(t);n=g(n,0);let r=[],s={},a,c,l=o.length;for(let m=0;m<l;++m){let p=o[m];if(p.vertexBuffer){r.push(p);continue}c=p.usage,a=s[c],d(a)||(a=s[c]=[]),a.push(p)}function u(m,p){return Q.getSizeInBytes(p.componentDatatype)-Q.getSizeInBytes(m.componentDatatype)}this._allBuffers=[];for(c in s)if(s.hasOwnProperty(c)){a=s[c],a.sort(u);let m=Ls._vertexSizeInBytes(a),p=a[0].usage,y={vertexSizeInBytes:m,vertexBuffer:void 0,usage:p,needsCommit:!1,arrayBuffer:void 0,arrayViews:Ls._createArrayViews(a,m)};this._allBuffers.push(y)}this._size=0,this._instanced=g(i,!1),this._precreated=r,this._context=e,this.writers=void 0,this.va=void 0,this.resize(n)}Ls._verifyAttributes=function(e){let t=[];for(let i=0;i<e.length;++i){let o=e[i],r={index:g(o.index,i),enabled:g(o.enabled,!0),componentsPerAttribute:o.componentsPerAttribute,componentDatatype:g(o.componentDatatype,Q.FLOAT),normalize:g(o.normalize,!1),vertexBuffer:o.vertexBuffer,usage:g(o.usage,Ne.STATIC_DRAW)};t.push(r)}let n=new Array(t.length);for(let i=0;i<t.length;++i){let r=t[i].index;n[r]=!0}return t};Ls._vertexSizeInBytes=function(e){let t=0,n=e.length;for(let s=0;s<n;++s){let a=e[s];t+=a.componentsPerAttribute*Q.getSizeInBytes(a.componentDatatype)}let i=n>0?Q.getSizeInBytes(e[0].componentDatatype):0,o=i>0?t%i:0,r=o===0?0:i-o;return t+=r,t};Ls._createArrayViews=function(e,t){let n=[],i=0,o=e.length;for(let r=0;r<o;++r){let s=e[r],a=s.componentDatatype;n.push({index:s.index,enabled:s.enabled,componentsPerAttribute:s.componentsPerAttribute,componentDatatype:a,normalize:s.normalize,offsetInBytes:i,vertexSizeInComponentType:t/Q.getSizeInBytes(a),view:void 0}),i+=s.componentsPerAttribute*Q.getSizeInBytes(a)}return n};Ls.prototype.resize=function(e){this._size=e;let t=this._allBuffers;this.writers=[];for(let n=0,i=t.length;n<i;++n){let o=t[n];Ls._resize(o,this._size),Ls._appendWriters(this.writers,o)}mO(this)};Ls._resize=function(e,t){if(e.vertexSizeInBytes>0){let n=new ArrayBuffer(t*e.vertexSizeInBytes);if(d(e.arrayBuffer)){let r=new Uint8Array(n),s=new Uint8Array(e.arrayBuffer),a=s.length;for(let c=0;c<a;++c)r[c]=s[c]}let i=e.arrayViews,o=i.length;for(let r=0;r<o;++r){let s=i[r];s.view=Q.createArrayBufferView(s.componentDatatype,n,s.offsetInBytes)}e.arrayBuffer=n}};var k5e=[function(e,t,n){return function(i,o){t[i*n]=o,e.needsCommit=!0}},function(e,t,n){return function(i,o,r){let s=i*n;t[s]=o,t[s+1]=r,e.needsCommit=!0}},function(e,t,n){return function(i,o,r,s){let a=i*n;t[a]=o,t[a+1]=r,t[a+2]=s,e.needsCommit=!0}},function(e,t,n){return function(i,o,r,s,a){let c=i*n;t[c]=o,t[c+1]=r,t[c+2]=s,t[c+3]=a,e.needsCommit=!0}}];Ls._appendWriters=function(e,t){let n=t.arrayViews,i=n.length;for(let o=0;o<i;++o){let r=n[o];e[r.index]=k5e[r.componentsPerAttribute-1](t,r.view,r.vertexSizeInComponentType)}};Ls.prototype.commit=function(e){let t=!1,n=this._allBuffers,i,o,r;for(o=0,r=n.length;o<r;++o)i=n[o],t=D5e(this,i)||t;if(t||!d(this.va)){mO(this);let s=this.va=[],a=W.SIXTY_FOUR_KILOBYTES-4,c=d(e)&&!this._instanced?Math.ceil(this._size/a):1;for(let l=0;l<c;++l){let u=[];for(o=0,r=n.length;o<r;++o){i=n[o];let m=l*(i.vertexSizeInBytes*a);Ls._appendAttributes(u,i,m,this._instanced)}u=u.concat(this._precreated),s.push({va:new ti({context:this._context,attributes:u,indexBuffer:e}),indicesCount:1.5*(l!==c-1?a:this._size%a)})}}};function D5e(e,t){if(t.needsCommit&&t.vertexSizeInBytes>0){t.needsCommit=!1;let n=t.vertexBuffer,i=e._size*t.vertexSizeInBytes,o=d(n);if(!o||n.sizeInBytes<i)return o&&n.destroy(),t.vertexBuffer=mt.createVertexBuffer({context:e._context,typedArray:t.arrayBuffer,usage:t.usage}),t.vertexBuffer.vertexArrayDestroyable=!1,!0;t.vertexBuffer.copyFromArrayView(t.arrayBuffer)}return!1}Ls._appendAttributes=function(e,t,n,i){let o=t.arrayViews,r=o.length;for(let s=0;s<r;++s){let a=o[s];e.push({index:a.index,enabled:a.enabled,componentsPerAttribute:a.componentsPerAttribute,componentDatatype:a.componentDatatype,normalize:a.normalize,vertexBuffer:t.vertexBuffer,offsetInBytes:n+a.offsetInBytes,strideInBytes:t.vertexSizeInBytes,instanceDivisor:i?1:0})}};Ls.prototype.subCommit=function(e,t){let n=this._allBuffers;for(let i=0,o=n.length;i<o;++i)B5e(n[i],e,t)};function B5e(e,t,n){if(e.needsCommit&&e.vertexSizeInBytes>0){let i=e.vertexSizeInBytes*t,o=e.vertexSizeInBytes*n;e.vertexBuffer.copyFromArrayView(new Uint8Array(e.arrayBuffer,i,o),i)}}Ls.prototype.endSubCommits=function(){let e=this._allBuffers;for(let t=0,n=e.length;t<n;++t)e[t].needsCommit=!1};function mO(e){let t=e.va;if(!d(t))return;let n=t.length;for(let i=0;i<n;++i)t[i].va.destroy();e.va=void 0}Ls.prototype.isDestroyed=function(){return!1};Ls.prototype.destroy=function(){let e=this._allBuffers;for(let t=0,n=e.length;t<n;++t){let i=e[t];i.vertexBuffer=i.vertexBuffer&&i.vertexBuffer.destroy()}return mO(this),ue(this)};var Np=Ls;var QSn=T(S(),1),kI=`uniform sampler2D u_atlas;
  6458. #ifdef VECTOR_TILE
  6459. uniform vec4 u_highlightColor;
  6460. #endif
  6461. in vec2 v_textureCoordinates;
  6462. in vec4 v_pickColor;
  6463. in vec4 v_color;
  6464. #ifdef SDF
  6465. in vec4 v_outlineColor;
  6466. in float v_outlineWidth;
  6467. #endif
  6468. #ifdef FRAGMENT_DEPTH_CHECK
  6469. in vec4 v_textureCoordinateBounds; // the min and max x and y values for the texture coordinates
  6470. in vec4 v_originTextureCoordinateAndTranslate; // texture coordinate at the origin, billboard translate (used for label glyphs)
  6471. in vec4 v_compressed; // x: eyeDepth, y: applyTranslate & enableDepthCheck, z: dimensions, w: imageSize
  6472. in mat2 v_rotationMatrix;
  6473. const float SHIFT_LEFT12 = 4096.0;
  6474. const float SHIFT_LEFT1 = 2.0;
  6475. const float SHIFT_RIGHT12 = 1.0 / 4096.0;
  6476. const float SHIFT_RIGHT1 = 1.0 / 2.0;
  6477. float getGlobeDepth(vec2 adjustedST, vec2 depthLookupST, bool applyTranslate, vec2 dimensions, vec2 imageSize)
  6478. {
  6479. vec2 lookupVector = imageSize * (depthLookupST - adjustedST);
  6480. lookupVector = v_rotationMatrix * lookupVector;
  6481. vec2 labelOffset = (dimensions - imageSize) * (depthLookupST - vec2(0.0, v_originTextureCoordinateAndTranslate.y)); // aligns label glyph with bounding rectangle. Will be zero for billboards because dimensions and imageSize will be equal
  6482. vec2 translation = v_originTextureCoordinateAndTranslate.zw;
  6483. if (applyTranslate)
  6484. {
  6485. // this is only needed for labels where the horizontal origin is not LEFT
  6486. // it moves the label back to where the "origin" should be since all label glyphs are set to HorizontalOrigin.LEFT
  6487. translation += (dimensions * v_originTextureCoordinateAndTranslate.xy * vec2(1.0, 0.0));
  6488. }
  6489. vec2 st = ((lookupVector - translation + labelOffset) + gl_FragCoord.xy) / czm_viewport.zw;
  6490. float logDepthOrDepth = czm_unpackDepth(texture(czm_globeDepthTexture, st));
  6491. if (logDepthOrDepth == 0.0)
  6492. {
  6493. return 0.0; // not on the globe
  6494. }
  6495. vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth);
  6496. return eyeCoordinate.z / eyeCoordinate.w;
  6497. }
  6498. #endif
  6499. #ifdef SDF
  6500. // Get the distance from the edge of a glyph at a given position sampling an SDF texture.
  6501. float getDistance(vec2 position)
  6502. {
  6503. return texture(u_atlas, position).r;
  6504. }
  6505. // Samples the sdf texture at the given position and produces a color based on the fill color and the outline.
  6506. vec4 getSDFColor(vec2 position, float outlineWidth, vec4 outlineColor, float smoothing)
  6507. {
  6508. float distance = getDistance(position);
  6509. if (outlineWidth > 0.0)
  6510. {
  6511. // Don't get the outline edge exceed the SDF_EDGE
  6512. float outlineEdge = clamp(SDF_EDGE - outlineWidth, 0.0, SDF_EDGE);
  6513. float outlineFactor = smoothstep(SDF_EDGE - smoothing, SDF_EDGE + smoothing, distance);
  6514. vec4 sdfColor = mix(outlineColor, v_color, outlineFactor);
  6515. float alpha = smoothstep(outlineEdge - smoothing, outlineEdge + smoothing, distance);
  6516. return vec4(sdfColor.rgb, sdfColor.a * alpha);
  6517. }
  6518. else
  6519. {
  6520. float alpha = smoothstep(SDF_EDGE - smoothing, SDF_EDGE + smoothing, distance);
  6521. return vec4(v_color.rgb, v_color.a * alpha);
  6522. }
  6523. }
  6524. #endif
  6525. void main()
  6526. {
  6527. vec4 color = texture(u_atlas, v_textureCoordinates);
  6528. #ifdef SDF
  6529. float outlineWidth = v_outlineWidth;
  6530. vec4 outlineColor = v_outlineColor;
  6531. // Get the current distance
  6532. float distance = getDistance(v_textureCoordinates);
  6533. #if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives))
  6534. float smoothing = fwidth(distance);
  6535. // Get an offset that is approximately half the distance to the neighbor pixels
  6536. // 0.354 is approximately half of 1/sqrt(2)
  6537. vec2 sampleOffset = 0.354 * vec2(dFdx(v_textureCoordinates) + dFdy(v_textureCoordinates));
  6538. // Sample the center point
  6539. vec4 center = getSDFColor(v_textureCoordinates, outlineWidth, outlineColor, smoothing);
  6540. // Sample the 4 neighbors
  6541. vec4 color1 = getSDFColor(v_textureCoordinates + vec2(sampleOffset.x, sampleOffset.y), outlineWidth, outlineColor, smoothing);
  6542. vec4 color2 = getSDFColor(v_textureCoordinates + vec2(-sampleOffset.x, sampleOffset.y), outlineWidth, outlineColor, smoothing);
  6543. vec4 color3 = getSDFColor(v_textureCoordinates + vec2(-sampleOffset.x, -sampleOffset.y), outlineWidth, outlineColor, smoothing);
  6544. vec4 color4 = getSDFColor(v_textureCoordinates + vec2(sampleOffset.x, -sampleOffset.y), outlineWidth, outlineColor, smoothing);
  6545. // Equally weight the center sample and the 4 neighboring samples
  6546. color = (center + color1 + color2 + color3 + color4)/5.0;
  6547. #else
  6548. // If no derivatives available (IE 10?), just do a single sample
  6549. float smoothing = 1.0/32.0;
  6550. color = getSDFColor(v_textureCoordinates, outlineWidth, outlineColor, smoothing);
  6551. #endif
  6552. color = czm_gammaCorrect(color);
  6553. #else
  6554. color = czm_gammaCorrect(color);
  6555. color *= czm_gammaCorrect(v_color);
  6556. #endif
  6557. // Fully transparent parts of the billboard are not pickable.
  6558. #if !defined(OPAQUE) && !defined(TRANSLUCENT)
  6559. if (color.a < 0.005) // matches 0/255 and 1/255
  6560. {
  6561. discard;
  6562. }
  6563. #else
  6564. // The billboard is rendered twice. The opaque pass discards translucent fragments
  6565. // and the translucent pass discards opaque fragments.
  6566. #ifdef OPAQUE
  6567. if (color.a < 0.995) // matches < 254/255
  6568. {
  6569. discard;
  6570. }
  6571. #else
  6572. if (color.a >= 0.995) // matches 254/255 and 255/255
  6573. {
  6574. discard;
  6575. }
  6576. #endif
  6577. #endif
  6578. #ifdef VECTOR_TILE
  6579. color *= u_highlightColor;
  6580. #endif
  6581. out_FragColor = color;
  6582. #ifdef LOG_DEPTH
  6583. czm_writeLogDepth();
  6584. #endif
  6585. #ifdef FRAGMENT_DEPTH_CHECK
  6586. float temp = v_compressed.y;
  6587. temp = temp * SHIFT_RIGHT1;
  6588. float temp2 = (temp - floor(temp)) * SHIFT_LEFT1;
  6589. bool enableDepthTest = temp2 != 0.0;
  6590. bool applyTranslate = floor(temp) != 0.0;
  6591. if (enableDepthTest) {
  6592. temp = v_compressed.z;
  6593. temp = temp * SHIFT_RIGHT12;
  6594. vec2 dimensions;
  6595. dimensions.y = (temp - floor(temp)) * SHIFT_LEFT12;
  6596. dimensions.x = floor(temp);
  6597. temp = v_compressed.w;
  6598. temp = temp * SHIFT_RIGHT12;
  6599. vec2 imageSize;
  6600. imageSize.y = (temp - floor(temp)) * SHIFT_LEFT12;
  6601. imageSize.x = floor(temp);
  6602. vec2 adjustedST = v_textureCoordinates - v_textureCoordinateBounds.xy;
  6603. adjustedST = adjustedST / vec2(v_textureCoordinateBounds.z - v_textureCoordinateBounds.x, v_textureCoordinateBounds.w - v_textureCoordinateBounds.y);
  6604. float epsilonEyeDepth = v_compressed.x + czm_epsilon1;
  6605. float globeDepth1 = getGlobeDepth(adjustedST, v_originTextureCoordinateAndTranslate.xy, applyTranslate, dimensions, imageSize);
  6606. // negative values go into the screen
  6607. if (globeDepth1 != 0.0 && globeDepth1 > epsilonEyeDepth)
  6608. {
  6609. float globeDepth2 = getGlobeDepth(adjustedST, vec2(0.0, 1.0), applyTranslate, dimensions, imageSize); // top left corner
  6610. if (globeDepth2 != 0.0 && globeDepth2 > epsilonEyeDepth)
  6611. {
  6612. float globeDepth3 = getGlobeDepth(adjustedST, vec2(1.0, 1.0), applyTranslate, dimensions, imageSize); // top right corner
  6613. if (globeDepth3 != 0.0 && globeDepth3 > epsilonEyeDepth)
  6614. {
  6615. discard;
  6616. }
  6617. }
  6618. }
  6619. }
  6620. #endif
  6621. }
  6622. `;var qSn=T(S(),1),DI=`#ifdef INSTANCED
  6623. in vec2 direction;
  6624. #endif
  6625. in vec4 positionHighAndScale;
  6626. in vec4 positionLowAndRotation;
  6627. in vec4 compressedAttribute0; // pixel offset, translate, horizontal origin, vertical origin, show, direction, texture coordinates (texture offset)
  6628. in vec4 compressedAttribute1; // aligned axis, translucency by distance, image width
  6629. in vec4 compressedAttribute2; // label horizontal origin, image height, color, pick color, size in meters, valid aligned axis, 13 bits free
  6630. in vec4 eyeOffset; // eye offset in meters, 4 bytes free (texture range)
  6631. in vec4 scaleByDistance; // near, nearScale, far, farScale
  6632. in vec4 pixelOffsetScaleByDistance; // near, nearScale, far, farScale
  6633. in vec4 compressedAttribute3; // distance display condition near, far, disableDepthTestDistance, dimensions
  6634. in vec2 sdf; // sdf outline color (rgb) and width (w)
  6635. #if defined(VERTEX_DEPTH_CHECK) || defined(FRAGMENT_DEPTH_CHECK)
  6636. in vec4 textureCoordinateBoundsOrLabelTranslate; // the min and max x and y values for the texture coordinates
  6637. #endif
  6638. #ifdef VECTOR_TILE
  6639. in float a_batchId;
  6640. #endif
  6641. out vec2 v_textureCoordinates;
  6642. #ifdef FRAGMENT_DEPTH_CHECK
  6643. out vec4 v_textureCoordinateBounds;
  6644. out vec4 v_originTextureCoordinateAndTranslate;
  6645. out vec4 v_compressed; // x: eyeDepth, y: applyTranslate & enableDepthCheck, z: dimensions, w: imageSize
  6646. out mat2 v_rotationMatrix;
  6647. #endif
  6648. out vec4 v_pickColor;
  6649. out vec4 v_color;
  6650. #ifdef SDF
  6651. out vec4 v_outlineColor;
  6652. out float v_outlineWidth;
  6653. #endif
  6654. const float UPPER_BOUND = 32768.0;
  6655. const float SHIFT_LEFT16 = 65536.0;
  6656. const float SHIFT_LEFT12 = 4096.0;
  6657. const float SHIFT_LEFT8 = 256.0;
  6658. const float SHIFT_LEFT7 = 128.0;
  6659. const float SHIFT_LEFT5 = 32.0;
  6660. const float SHIFT_LEFT3 = 8.0;
  6661. const float SHIFT_LEFT2 = 4.0;
  6662. const float SHIFT_LEFT1 = 2.0;
  6663. const float SHIFT_RIGHT12 = 1.0 / 4096.0;
  6664. const float SHIFT_RIGHT8 = 1.0 / 256.0;
  6665. const float SHIFT_RIGHT7 = 1.0 / 128.0;
  6666. const float SHIFT_RIGHT5 = 1.0 / 32.0;
  6667. const float SHIFT_RIGHT3 = 1.0 / 8.0;
  6668. const float SHIFT_RIGHT2 = 1.0 / 4.0;
  6669. const float SHIFT_RIGHT1 = 1.0 / 2.0;
  6670. vec4 addScreenSpaceOffset(vec4 positionEC, vec2 imageSize, float scale, vec2 direction, vec2 origin, vec2 translate, vec2 pixelOffset, vec3 alignedAxis, bool validAlignedAxis, float rotation, bool sizeInMeters, out mat2 rotationMatrix, out float mpp)
  6671. {
  6672. // Note the halfSize cannot be computed in JavaScript because it is sent via
  6673. // compressed vertex attributes that coerce it to an integer.
  6674. vec2 halfSize = imageSize * scale * 0.5;
  6675. halfSize *= ((direction * 2.0) - 1.0);
  6676. vec2 originTranslate = origin * abs(halfSize);
  6677. #if defined(ROTATION) || defined(ALIGNED_AXIS)
  6678. if (validAlignedAxis || rotation != 0.0)
  6679. {
  6680. float angle = rotation;
  6681. if (validAlignedAxis)
  6682. {
  6683. vec4 projectedAlignedAxis = czm_modelView3D * vec4(alignedAxis, 0.0);
  6684. angle += sign(-projectedAlignedAxis.x) * acos(sign(projectedAlignedAxis.y) * (projectedAlignedAxis.y * projectedAlignedAxis.y) /
  6685. (projectedAlignedAxis.x * projectedAlignedAxis.x + projectedAlignedAxis.y * projectedAlignedAxis.y));
  6686. }
  6687. float cosTheta = cos(angle);
  6688. float sinTheta = sin(angle);
  6689. rotationMatrix = mat2(cosTheta, sinTheta, -sinTheta, cosTheta);
  6690. halfSize = rotationMatrix * halfSize;
  6691. }
  6692. else
  6693. {
  6694. rotationMatrix = mat2(1.0, 0.0, 0.0, 1.0);
  6695. }
  6696. #endif
  6697. mpp = czm_metersPerPixel(positionEC);
  6698. positionEC.xy += (originTranslate + halfSize) * czm_branchFreeTernary(sizeInMeters, 1.0, mpp);
  6699. positionEC.xy += (translate + pixelOffset) * mpp;
  6700. return positionEC;
  6701. }
  6702. #ifdef VERTEX_DEPTH_CHECK
  6703. float getGlobeDepth(vec4 positionEC)
  6704. {
  6705. vec4 posWC = czm_eyeToWindowCoordinates(positionEC);
  6706. float globeDepth = czm_unpackDepth(texture(czm_globeDepthTexture, posWC.xy / czm_viewport.zw));
  6707. if (globeDepth == 0.0)
  6708. {
  6709. return 0.0; // not on the globe
  6710. }
  6711. vec4 eyeCoordinate = czm_windowToEyeCoordinates(posWC.xy, globeDepth);
  6712. return eyeCoordinate.z / eyeCoordinate.w;
  6713. }
  6714. #endif
  6715. void main()
  6716. {
  6717. // Modifying this shader may also require modifications to Billboard._computeScreenSpacePosition
  6718. // unpack attributes
  6719. vec3 positionHigh = positionHighAndScale.xyz;
  6720. vec3 positionLow = positionLowAndRotation.xyz;
  6721. float scale = positionHighAndScale.w;
  6722. #if defined(ROTATION) || defined(ALIGNED_AXIS)
  6723. float rotation = positionLowAndRotation.w;
  6724. #else
  6725. float rotation = 0.0;
  6726. #endif
  6727. float compressed = compressedAttribute0.x;
  6728. vec2 pixelOffset;
  6729. pixelOffset.x = floor(compressed * SHIFT_RIGHT7);
  6730. compressed -= pixelOffset.x * SHIFT_LEFT7;
  6731. pixelOffset.x -= UPPER_BOUND;
  6732. vec2 origin;
  6733. origin.x = floor(compressed * SHIFT_RIGHT5);
  6734. compressed -= origin.x * SHIFT_LEFT5;
  6735. origin.y = floor(compressed * SHIFT_RIGHT3);
  6736. compressed -= origin.y * SHIFT_LEFT3;
  6737. #ifdef FRAGMENT_DEPTH_CHECK
  6738. vec2 depthOrigin = origin.xy;
  6739. #endif
  6740. origin -= vec2(1.0);
  6741. float show = floor(compressed * SHIFT_RIGHT2);
  6742. compressed -= show * SHIFT_LEFT2;
  6743. #ifdef INSTANCED
  6744. vec2 textureCoordinatesBottomLeft = czm_decompressTextureCoordinates(compressedAttribute0.w);
  6745. vec2 textureCoordinatesRange = czm_decompressTextureCoordinates(eyeOffset.w);
  6746. vec2 textureCoordinates = textureCoordinatesBottomLeft + direction * textureCoordinatesRange;
  6747. #else
  6748. vec2 direction;
  6749. direction.x = floor(compressed * SHIFT_RIGHT1);
  6750. direction.y = compressed - direction.x * SHIFT_LEFT1;
  6751. vec2 textureCoordinates = czm_decompressTextureCoordinates(compressedAttribute0.w);
  6752. #endif
  6753. float temp = compressedAttribute0.y * SHIFT_RIGHT8;
  6754. pixelOffset.y = -(floor(temp) - UPPER_BOUND);
  6755. vec2 translate;
  6756. translate.y = (temp - floor(temp)) * SHIFT_LEFT16;
  6757. temp = compressedAttribute0.z * SHIFT_RIGHT8;
  6758. translate.x = floor(temp) - UPPER_BOUND;
  6759. translate.y += (temp - floor(temp)) * SHIFT_LEFT8;
  6760. translate.y -= UPPER_BOUND;
  6761. temp = compressedAttribute1.x * SHIFT_RIGHT8;
  6762. float temp2 = floor(compressedAttribute2.w * SHIFT_RIGHT2);
  6763. vec2 imageSize = vec2(floor(temp), temp2);
  6764. #ifdef FRAGMENT_DEPTH_CHECK
  6765. float labelHorizontalOrigin = floor(compressedAttribute2.w - (temp2 * SHIFT_LEFT2));
  6766. float applyTranslate = 0.0;
  6767. if (labelHorizontalOrigin != 0.0) // is a billboard, so set apply translate to false
  6768. {
  6769. applyTranslate = 1.0;
  6770. labelHorizontalOrigin -= 2.0;
  6771. depthOrigin.x = labelHorizontalOrigin + 1.0;
  6772. }
  6773. depthOrigin = vec2(1.0) - (depthOrigin * 0.5);
  6774. #endif
  6775. #ifdef EYE_DISTANCE_TRANSLUCENCY
  6776. vec4 translucencyByDistance;
  6777. translucencyByDistance.x = compressedAttribute1.z;
  6778. translucencyByDistance.z = compressedAttribute1.w;
  6779. translucencyByDistance.y = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0;
  6780. temp = compressedAttribute1.y * SHIFT_RIGHT8;
  6781. translucencyByDistance.w = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0;
  6782. #endif
  6783. #if defined(VERTEX_DEPTH_CHECK) || defined(FRAGMENT_DEPTH_CHECK)
  6784. temp = compressedAttribute3.w;
  6785. temp = temp * SHIFT_RIGHT12;
  6786. vec2 dimensions;
  6787. dimensions.y = (temp - floor(temp)) * SHIFT_LEFT12;
  6788. dimensions.x = floor(temp);
  6789. #endif
  6790. #ifdef ALIGNED_AXIS
  6791. vec3 alignedAxis = czm_octDecode(floor(compressedAttribute1.y * SHIFT_RIGHT8));
  6792. temp = compressedAttribute2.z * SHIFT_RIGHT5;
  6793. bool validAlignedAxis = (temp - floor(temp)) * SHIFT_LEFT1 > 0.0;
  6794. #else
  6795. vec3 alignedAxis = vec3(0.0);
  6796. bool validAlignedAxis = false;
  6797. #endif
  6798. vec4 pickColor;
  6799. vec4 color;
  6800. temp = compressedAttribute2.y;
  6801. temp = temp * SHIFT_RIGHT8;
  6802. pickColor.b = (temp - floor(temp)) * SHIFT_LEFT8;
  6803. temp = floor(temp) * SHIFT_RIGHT8;
  6804. pickColor.g = (temp - floor(temp)) * SHIFT_LEFT8;
  6805. pickColor.r = floor(temp);
  6806. temp = compressedAttribute2.x;
  6807. temp = temp * SHIFT_RIGHT8;
  6808. color.b = (temp - floor(temp)) * SHIFT_LEFT8;
  6809. temp = floor(temp) * SHIFT_RIGHT8;
  6810. color.g = (temp - floor(temp)) * SHIFT_LEFT8;
  6811. color.r = floor(temp);
  6812. temp = compressedAttribute2.z * SHIFT_RIGHT8;
  6813. bool sizeInMeters = floor((temp - floor(temp)) * SHIFT_LEFT7) > 0.0;
  6814. temp = floor(temp) * SHIFT_RIGHT8;
  6815. pickColor.a = (temp - floor(temp)) * SHIFT_LEFT8;
  6816. pickColor /= 255.0;
  6817. color.a = floor(temp);
  6818. color /= 255.0;
  6819. ///////////////////////////////////////////////////////////////////////////
  6820. vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);
  6821. vec4 positionEC = czm_modelViewRelativeToEye * p;
  6822. #if defined(FRAGMENT_DEPTH_CHECK) || defined(VERTEX_DEPTH_CHECK)
  6823. float eyeDepth = positionEC.z;
  6824. #endif
  6825. positionEC = czm_eyeOffset(positionEC, eyeOffset.xyz);
  6826. positionEC.xyz *= show;
  6827. ///////////////////////////////////////////////////////////////////////////
  6828. #if defined(EYE_DISTANCE_SCALING) || defined(EYE_DISTANCE_TRANSLUCENCY) || defined(EYE_DISTANCE_PIXEL_OFFSET) || defined(DISTANCE_DISPLAY_CONDITION) || defined(DISABLE_DEPTH_DISTANCE)
  6829. float lengthSq;
  6830. if (czm_sceneMode == czm_sceneMode2D)
  6831. {
  6832. // 2D camera distance is a special case
  6833. // treat all billboards as flattened to the z=0.0 plane
  6834. lengthSq = czm_eyeHeight2D.y;
  6835. }
  6836. else
  6837. {
  6838. lengthSq = dot(positionEC.xyz, positionEC.xyz);
  6839. }
  6840. #endif
  6841. #ifdef EYE_DISTANCE_SCALING
  6842. float distanceScale = czm_nearFarScalar(scaleByDistance, lengthSq);
  6843. scale *= distanceScale;
  6844. translate *= distanceScale;
  6845. // push vertex behind near plane for clipping
  6846. if (scale == 0.0)
  6847. {
  6848. positionEC.xyz = vec3(0.0);
  6849. }
  6850. #endif
  6851. float translucency = 1.0;
  6852. #ifdef EYE_DISTANCE_TRANSLUCENCY
  6853. translucency = czm_nearFarScalar(translucencyByDistance, lengthSq);
  6854. // push vertex behind near plane for clipping
  6855. if (translucency == 0.0)
  6856. {
  6857. positionEC.xyz = vec3(0.0);
  6858. }
  6859. #endif
  6860. #ifdef EYE_DISTANCE_PIXEL_OFFSET
  6861. float pixelOffsetScale = czm_nearFarScalar(pixelOffsetScaleByDistance, lengthSq);
  6862. pixelOffset *= pixelOffsetScale;
  6863. #endif
  6864. #ifdef DISTANCE_DISPLAY_CONDITION
  6865. float nearSq = compressedAttribute3.x;
  6866. float farSq = compressedAttribute3.y;
  6867. if (lengthSq < nearSq || lengthSq > farSq)
  6868. {
  6869. positionEC.xyz = vec3(0.0);
  6870. }
  6871. #endif
  6872. mat2 rotationMatrix;
  6873. float mpp;
  6874. #ifdef DISABLE_DEPTH_DISTANCE
  6875. float disableDepthTestDistance = compressedAttribute3.z;
  6876. #endif
  6877. #ifdef VERTEX_DEPTH_CHECK
  6878. if (lengthSq < disableDepthTestDistance) {
  6879. float depthsilon = 10.0;
  6880. vec2 labelTranslate = textureCoordinateBoundsOrLabelTranslate.xy;
  6881. vec4 pEC1 = addScreenSpaceOffset(positionEC, dimensions, scale, vec2(0.0), origin, labelTranslate, pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp);
  6882. float globeDepth1 = getGlobeDepth(pEC1);
  6883. if (globeDepth1 != 0.0 && pEC1.z + depthsilon < globeDepth1)
  6884. {
  6885. vec4 pEC2 = addScreenSpaceOffset(positionEC, dimensions, scale, vec2(0.0, 1.0), origin, labelTranslate, pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp);
  6886. float globeDepth2 = getGlobeDepth(pEC2);
  6887. if (globeDepth2 != 0.0 && pEC2.z + depthsilon < globeDepth2)
  6888. {
  6889. vec4 pEC3 = addScreenSpaceOffset(positionEC, dimensions, scale, vec2(1.0), origin, labelTranslate, pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp);
  6890. float globeDepth3 = getGlobeDepth(pEC3);
  6891. if (globeDepth3 != 0.0 && pEC3.z + depthsilon < globeDepth3)
  6892. {
  6893. positionEC.xyz = vec3(0.0);
  6894. }
  6895. }
  6896. }
  6897. }
  6898. #endif
  6899. positionEC = addScreenSpaceOffset(positionEC, imageSize, scale, direction, origin, translate, pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp);
  6900. gl_Position = czm_projection * positionEC;
  6901. v_textureCoordinates = textureCoordinates;
  6902. #ifdef LOG_DEPTH
  6903. czm_vertexLogDepth();
  6904. #endif
  6905. #ifdef DISABLE_DEPTH_DISTANCE
  6906. if (disableDepthTestDistance == 0.0 && czm_minimumDisableDepthTestDistance != 0.0)
  6907. {
  6908. disableDepthTestDistance = czm_minimumDisableDepthTestDistance;
  6909. }
  6910. if (disableDepthTestDistance != 0.0)
  6911. {
  6912. // Don't try to "multiply both sides" by w. Greater/less-than comparisons won't work for negative values of w.
  6913. float zclip = gl_Position.z / gl_Position.w;
  6914. bool clipped = (zclip < -1.0 || zclip > 1.0);
  6915. if (!clipped && (disableDepthTestDistance < 0.0 || (lengthSq > 0.0 && lengthSq < disableDepthTestDistance)))
  6916. {
  6917. // Position z on the near plane.
  6918. gl_Position.z = -gl_Position.w;
  6919. #ifdef LOG_DEPTH
  6920. v_depthFromNearPlusOne = 1.0;
  6921. #endif
  6922. }
  6923. }
  6924. #endif
  6925. #ifdef FRAGMENT_DEPTH_CHECK
  6926. if (sizeInMeters) {
  6927. translate /= mpp;
  6928. dimensions /= mpp;
  6929. imageSize /= mpp;
  6930. }
  6931. #if defined(ROTATION) || defined(ALIGNED_AXIS)
  6932. v_rotationMatrix = rotationMatrix;
  6933. #else
  6934. v_rotationMatrix = mat2(1.0, 0.0, 0.0, 1.0);
  6935. #endif
  6936. float enableDepthCheck = 0.0;
  6937. if (lengthSq < disableDepthTestDistance)
  6938. {
  6939. enableDepthCheck = 1.0;
  6940. }
  6941. float dw = floor(clamp(dimensions.x, 0.0, SHIFT_LEFT12));
  6942. float dh = floor(clamp(dimensions.y, 0.0, SHIFT_LEFT12));
  6943. float iw = floor(clamp(imageSize.x, 0.0, SHIFT_LEFT12));
  6944. float ih = floor(clamp(imageSize.y, 0.0, SHIFT_LEFT12));
  6945. v_compressed.x = eyeDepth;
  6946. v_compressed.y = applyTranslate * SHIFT_LEFT1 + enableDepthCheck;
  6947. v_compressed.z = dw * SHIFT_LEFT12 + dh;
  6948. v_compressed.w = iw * SHIFT_LEFT12 + ih;
  6949. v_originTextureCoordinateAndTranslate.xy = depthOrigin;
  6950. v_originTextureCoordinateAndTranslate.zw = translate;
  6951. v_textureCoordinateBounds = textureCoordinateBoundsOrLabelTranslate;
  6952. #endif
  6953. #ifdef SDF
  6954. vec4 outlineColor;
  6955. float outlineWidth;
  6956. temp = sdf.x;
  6957. temp = temp * SHIFT_RIGHT8;
  6958. outlineColor.b = (temp - floor(temp)) * SHIFT_LEFT8;
  6959. temp = floor(temp) * SHIFT_RIGHT8;
  6960. outlineColor.g = (temp - floor(temp)) * SHIFT_LEFT8;
  6961. outlineColor.r = floor(temp);
  6962. temp = sdf.y;
  6963. temp = temp * SHIFT_RIGHT8;
  6964. float temp3 = (temp - floor(temp)) * SHIFT_LEFT8;
  6965. temp = floor(temp) * SHIFT_RIGHT8;
  6966. outlineWidth = (temp - floor(temp)) * SHIFT_LEFT8;
  6967. outlineColor.a = floor(temp);
  6968. outlineColor /= 255.0;
  6969. v_outlineWidth = outlineWidth / 255.0;
  6970. v_outlineColor = outlineColor;
  6971. v_outlineColor.a *= translucency;
  6972. #endif
  6973. v_pickColor = pickColor;
  6974. v_color = color;
  6975. v_color.a *= translucency;
  6976. }
  6977. `;var gCn=T(S(),1);function Li(e,t){e=g(e,g.EMPTY_OBJECT);let n=e.translucencyByDistance,i=e.pixelOffsetScaleByDistance,o=e.scaleByDistance,r=e.distanceDisplayCondition;d(n)&&(n=It.clone(n)),d(i)&&(i=It.clone(i)),d(o)&&(o=It.clone(o)),d(r)&&(r=Gt.clone(r)),this._show=g(e.show,!0),this._position=h.clone(g(e.position,h.ZERO)),this._actualPosition=h.clone(this._position),this._pixelOffset=D.clone(g(e.pixelOffset,D.ZERO)),this._translate=new D(0,0),this._eyeOffset=h.clone(g(e.eyeOffset,h.ZERO)),this._heightReference=g(e.heightReference,Oe.NONE),this._verticalOrigin=g(e.verticalOrigin,In.CENTER),this._horizontalOrigin=g(e.horizontalOrigin,pi.CENTER),this._scale=g(e.scale,1),this._color=Y.clone(g(e.color,Y.WHITE)),this._rotation=g(e.rotation,0),this._alignedAxis=h.clone(g(e.alignedAxis,h.ZERO)),this._width=e.width,this._height=e.height,this._scaleByDistance=o,this._translucencyByDistance=n,this._pixelOffsetScaleByDistance=i,this._sizeInMeters=g(e.sizeInMeters,!1),this._distanceDisplayCondition=r,this._disableDepthTestDistance=e.disableDepthTestDistance,this._id=e.id,this._collection=g(e.collection,t),this._pickId=void 0,this._pickPrimitive=g(e._pickPrimitive,this),this._billboardCollection=t,this._dirty=!1,this._index=-1,this._batchIndex=void 0,this._imageIndex=-1,this._imageIndexPromise=void 0,this._imageId=void 0,this._image=void 0,this._imageSubRegion=void 0,this._imageWidth=void 0,this._imageHeight=void 0,this._labelDimensions=void 0,this._labelHorizontalOrigin=void 0,this._labelTranslate=void 0;let s=e.image,a=e.imageId;d(s)&&(d(a)||(typeof s=="string"?a=s:d(s.src)?a=s.src:a=Yn()),this._imageId=a,this._image=s),d(e.imageSubRegion)&&(this._imageId=a,this._imageSubRegion=e.imageSubRegion),d(this._billboardCollection._textureAtlas)&&this._loadImage(),this._actualClampedPosition=void 0,this._removeCallbackFunc=void 0,this._mode=ie.SCENE3D,this._clusterShow=!0,this._outlineColor=Y.clone(g(e.outlineColor,Y.BLACK)),this._outlineWidth=g(e.outlineWidth,0),this._updateClamping()}var doe=Li.SHOW_INDEX=0,oN=Li.POSITION_INDEX=1,poe=Li.PIXEL_OFFSET_INDEX=2,Y5e=Li.EYE_OFFSET_INDEX=3,O5e=Li.HORIZONTAL_ORIGIN_INDEX=4,K5e=Li.VERTICAL_ORIGIN_INDEX=5,H5e=Li.SCALE_INDEX=6,rN=Li.IMAGE_INDEX_INDEX=7,uoe=Li.COLOR_INDEX=8,z5e=Li.ROTATION_INDEX=9,J5e=Li.ALIGNED_AXIS_INDEX=10,Q5e=Li.SCALE_BY_DISTANCE_INDEX=11,j5e=Li.TRANSLUCENCY_BY_DISTANCE_INDEX=12,q5e=Li.PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX=13,$5e=Li.DISTANCE_DISPLAY_CONDITION=14,eUe=Li.DISABLE_DEPTH_DISTANCE=15;Li.TEXTURE_COORDINATE_BOUNDS=16;var moe=Li.SDF_INDEX=17;Li.NUMBER_OF_PROPERTIES=18;function Po(e,t){let n=e._billboardCollection;d(n)&&(n._updateBillboard(e,t),e._dirty=!0)}Object.defineProperties(Li.prototype,{show:{get:function(){return this._show},set:function(e){this._show!==e&&(this._show=e,Po(this,doe))}},position:{get:function(){return this._position},set:function(e){let t=this._position;h.equals(t,e)||(h.clone(e,t),h.clone(e,this._actualPosition),this._updateClamping(),Po(this,oN))}},heightReference:{get:function(){return this._heightReference},set:function(e){let t=this._heightReference;e!==t&&(this._heightReference=e,this._updateClamping(),Po(this,oN))}},pixelOffset:{get:function(){return this._pixelOffset},set:function(e){let t=this._pixelOffset;D.equals(t,e)||(D.clone(e,t),Po(this,poe))}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){let t=this._scaleByDistance;It.equals(t,e)||(this._scaleByDistance=It.clone(e,t),Po(this,Q5e))}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){let t=this._translucencyByDistance;It.equals(t,e)||(this._translucencyByDistance=It.clone(e,t),Po(this,j5e))}},pixelOffsetScaleByDistance:{get:function(){return this._pixelOffsetScaleByDistance},set:function(e){let t=this._pixelOffsetScaleByDistance;It.equals(t,e)||(this._pixelOffsetScaleByDistance=It.clone(e,t),Po(this,q5e))}},eyeOffset:{get:function(){return this._eyeOffset},set:function(e){let t=this._eyeOffset;h.equals(t,e)||(h.clone(e,t),Po(this,Y5e))}},horizontalOrigin:{get:function(){return this._horizontalOrigin},set:function(e){this._horizontalOrigin!==e&&(this._horizontalOrigin=e,Po(this,O5e))}},verticalOrigin:{get:function(){return this._verticalOrigin},set:function(e){this._verticalOrigin!==e&&(this._verticalOrigin=e,Po(this,K5e))}},scale:{get:function(){return this._scale},set:function(e){this._scale!==e&&(this._scale=e,Po(this,H5e))}},color:{get:function(){return this._color},set:function(e){let t=this._color;Y.equals(t,e)||(Y.clone(e,t),Po(this,uoe))}},rotation:{get:function(){return this._rotation},set:function(e){this._rotation!==e&&(this._rotation=e,Po(this,z5e))}},alignedAxis:{get:function(){return this._alignedAxis},set:function(e){let t=this._alignedAxis;h.equals(t,e)||(h.clone(e,t),Po(this,J5e))}},width:{get:function(){return g(this._width,this._imageWidth)},set:function(e){this._width!==e&&(this._width=e,Po(this,rN))}},height:{get:function(){return g(this._height,this._imageHeight)},set:function(e){this._height!==e&&(this._height=e,Po(this,rN))}},sizeInMeters:{get:function(){return this._sizeInMeters},set:function(e){this._sizeInMeters!==e&&(this._sizeInMeters=e,Po(this,uoe))}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){Gt.equals(e,this._distanceDisplayCondition)||(this._distanceDisplayCondition=Gt.clone(e,this._distanceDisplayCondition),Po(this,$5e))}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){this._disableDepthTestDistance!==e&&(this._disableDepthTestDistance=e,Po(this,eUe))}},id:{get:function(){return this._id},set:function(e){this._id=e,d(this._pickId)&&(this._pickId.object.id=e)}},pickPrimitive:{get:function(){return this._pickPrimitive},set:function(e){this._pickPrimitive=e,d(this._pickId)&&(this._pickId.object.primitive=e)}},pickId:{get:function(){return this._pickId}},image:{get:function(){return this._imageId},set:function(e){d(e)?typeof e=="string"?this.setImage(e,e):e instanceof Ee?this.setImage(e.url,e):d(e.src)?this.setImage(e.src,e):this.setImage(Yn(),e):(this._imageIndex=-1,this._imageSubRegion=void 0,this._imageId=void 0,this._image=void 0,this._imageIndexPromise=void 0,Po(this,rN))}},ready:{get:function(){return this._imageIndex!==-1}},_clampedPosition:{get:function(){return this._actualClampedPosition},set:function(e){this._actualClampedPosition=h.clone(e,this._actualClampedPosition),Po(this,oN)}},clusterShow:{get:function(){return this._clusterShow},set:function(e){this._clusterShow!==e&&(this._clusterShow=e,Po(this,doe))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){let t=this._outlineColor;Y.equals(t,e)||(Y.clone(e,t),Po(this,moe))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){this._outlineWidth!==e&&(this._outlineWidth=e,Po(this,moe))}}});Li.prototype.getPickId=function(e){return d(this._pickId)||(this._pickId=e.createPickId({primitive:this._pickPrimitive,collection:this._collection,id:this._id})),this._pickId};Li.prototype._updateClamping=function(){Li._updateClamping(this._billboardCollection,this)};var BI=new he,hoe=new h;Li._updateClamping=function(e,t){let n=e._scene;if(!d(n)||!d(n.globe))return;let i=n.globe,o=i.ellipsoid,r=i._surface,s=n.frameState.mode,a=s!==t._mode;if(t._mode=s,(t._heightReference===Oe.NONE||a)&&d(t._removeCallbackFunc)&&(t._removeCallbackFunc(),t._removeCallbackFunc=void 0,t._clampedPosition=void 0),t._heightReference===Oe.NONE||!d(t._position))return;let c=o.cartesianToCartographic(t._position);if(!d(c)){t._actualClampedPosition=void 0;return}d(t._removeCallbackFunc)&&t._removeCallbackFunc();function l(m){if(t._heightReference===Oe.RELATIVE_TO_GROUND)if(t._mode===ie.SCENE3D){let p=o.cartesianToCartographic(m,BI);p.height+=c.height,o.cartographicToCartesian(p,m)}else m.x+=c.height;t._clampedPosition=h.clone(m,t._clampedPosition)}t._removeCallbackFunc=r.updateHeight(c,l),he.clone(c,BI);let u=i.getHeight(c);d(u)&&(BI.height=u),o.cartographicToCartesian(BI,hoe),l(hoe)};Li.prototype._loadImage=function(){let e=this._billboardCollection._textureAtlas,t=this._imageId,n=this._image,i=this._imageSubRegion,o,r=this;function s(c){if(r._imageId!==t||r._image!==n||!He.equals(r._imageSubRegion,i))return;let l=e.textureCoordinates[c];r._imageWidth=e.texture.width*l.width,r._imageHeight=e.texture.height*l.height,r._imageIndex=c,r._ready=!0,r._image=void 0,r._imageIndexPromise=void 0,Po(r,rN);let u=r._billboardCollection._scene;d(u)&&u.frameState.afterRender.push(()=>!0)}if(d(n)&&(o=e.addImage(t,n)),d(i)&&(o=e.addSubRegion(t,i)),this._imageIndexPromise=o,!d(o))return;let a=e.getImageIndex(t);if(d(a)&&!d(i)){s(a);return}o.then(s).catch(function(c){console.error(`Error loading image for billboard: ${c}`),r._imageIndexPromise=void 0})};Li.prototype.setImage=function(e,t){this._imageId!==e&&(this._imageIndex=-1,this._imageSubRegion=void 0,this._imageId=e,this._image=t,d(this._billboardCollection._textureAtlas)&&this._loadImage())};Li.prototype.setImageSubRegion=function(e,t){this._imageId===e&&He.equals(this._imageSubRegion,t)||(this._imageIndex=-1,this._imageId=e,this._imageSubRegion=He.clone(t),d(this._billboardCollection._textureAtlas)&&this._loadImage())};Li.prototype._setTranslate=function(e){let t=this._translate;D.equals(t,e)||(D.clone(e,t),Po(this,poe))};Li.prototype._getActualPosition=function(){return d(this._clampedPosition)?this._clampedPosition:this._actualPosition};Li.prototype._setActualPosition=function(e){d(this._clampedPosition)||h.clone(e,this._actualPosition),Po(this,oN)};var foe=new se;Li._computeActualPosition=function(e,t,n,i){return d(e._clampedPosition)?(n.mode!==e._mode&&e._updateClamping(),e._clampedPosition):n.mode===ie.SCENE3D?t:(A.multiplyByPoint(i,t,foe),Ji.computeActualWgs84Position(n,foe))};var boe=new h;Li._computeScreenSpacePosition=function(e,t,n,i,o,r){let s=A.multiplyByPoint(e,t,boe),a=Ji.wgs84WithEyeOffsetToWindowCoordinates(o,s,n,r);if(d(a))return D.add(a,i,a),a};var iN=new D(0,0);Li.prototype.computeScreenSpacePosition=function(e,t){let n=this._billboardCollection;d(t)||(t=new D),D.clone(this._pixelOffset,iN),D.add(iN,this._translate,iN);let i=n.modelMatrix,o=this._position;if(d(this._clampedPosition)&&(o=this._clampedPosition,e.mode!==ie.SCENE3D)){let s=e.mapProjection,a=s.ellipsoid,c=s.unproject(o,BI);o=a.cartographicToCartesian(c,boe),i=A.IDENTITY}return Li._computeScreenSpacePosition(i,o,this._eyeOffset,iN,e,t)};Li.getScreenSpaceBoundingBox=function(e,t,n){let i=e.width,o=e.height,r=e.scale;i*=r,o*=r;let s=t.x;e.horizontalOrigin===pi.RIGHT?s-=i:e.horizontalOrigin===pi.CENTER&&(s-=i*.5);let a=t.y;return e.verticalOrigin===In.BOTTOM||e.verticalOrigin===In.BASELINE?a-=o:e.verticalOrigin===In.CENTER&&(a-=o*.5),d(n)||(n=new He),n.x=s,n.y=a,n.width=i,n.height=o,n};Li.prototype.equals=function(e){return this===e||d(e)&&this._id===e._id&&h.equals(this._position,e._position)&&this._imageId===e._imageId&&this._show===e._show&&this._scale===e._scale&&this._verticalOrigin===e._verticalOrigin&&this._horizontalOrigin===e._horizontalOrigin&&this._heightReference===e._heightReference&&He.equals(this._imageSubRegion,e._imageSubRegion)&&Y.equals(this._color,e._color)&&D.equals(this._pixelOffset,e._pixelOffset)&&D.equals(this._translate,e._translate)&&h.equals(this._eyeOffset,e._eyeOffset)&&It.equals(this._scaleByDistance,e._scaleByDistance)&&It.equals(this._translucencyByDistance,e._translucencyByDistance)&&It.equals(this._pixelOffsetScaleByDistance,e._pixelOffsetScaleByDistance)&&Gt.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance};Li.prototype._destroy=function(){d(this._customData)&&(this._billboardCollection._scene.globe._surface.removeTileCustomData(this._customData),this._customData=void 0),d(this._removeCallbackFunc)&&(this._removeCallbackFunc(),this._removeCallbackFunc=void 0),this.image=void 0,this._pickId=this._pickId&&this._pickId.destroy(),this._billboardCollection=void 0};var uo=Li;var _Cn=T(S(),1),tUe={OPAQUE:0,TRANSLUCENT:1,OPAQUE_AND_TRANSLUCENT:2},So=Object.freeze(tUe);var SCn=T(S(),1),nUe={FONT_SIZE:48,PADDING:10,RADIUS:8,CUTOFF:.25},Rs=Object.freeze(nUe);var wCn=T(S(),1);function Up(e,t,n,i,o){this.bottomLeft=g(e,D.ZERO),this.topRight=g(t,D.ZERO),this.childNode1=n,this.childNode2=i,this.imageIndex=o}var iUe=new D(16,16);function Hb(e){e=g(e,g.EMPTY_OBJECT);let t=g(e.borderWidthInPixels,1),n=g(e.initialSize,iUe);this._context=e.context,this._pixelFormat=g(e.pixelFormat,st.RGBA),this._borderWidthInPixels=t,this._textureCoordinates=[],this._guid=Yn(),this._idHash={},this._indexHash={},this._initialSize=n,this._root=void 0}Object.defineProperties(Hb.prototype,{borderWidthInPixels:{get:function(){return this._borderWidthInPixels}},textureCoordinates:{get:function(){return this._textureCoordinates}},texture:{get:function(){return d(this._texture)||(this._texture=new Wt({context:this._context,width:this._initialSize.x,height:this._initialSize.y,pixelFormat:this._pixelFormat})),this._texture}},numberOfImages:{get:function(){return this._textureCoordinates.length}},guid:{get:function(){return this._guid}}});function oUe(e,t){let n=e._context,i=e.numberOfImages,o=2,r=e._borderWidthInPixels;if(i>0){let s=e._texture.width,a=e._texture.height,c=o*(s+t.width+r),l=o*(a+t.height+r),u=s/c,m=a/l,p=new Up(new D(s+r,r),new D(c,a)),y=new Up(new D,new D(c,a),e._root,p),f=new Up(new D(r,a+r),new D(c,l)),x=new Up(new D,new D(c,l),y,f);for(let V=0;V<e._textureCoordinates.length;V++){let L=e._textureCoordinates[V];d(L)&&(L.x*=u,L.y*=m,L.width*=u,L.height*=m)}let _=new Wt({context:e._context,width:c,height:l,pixelFormat:e._pixelFormat}),C=new Os({context:n,colorTextures:[e._texture],destroyAttachments:!1});C._bind(),_.copyFromFramebuffer(0,0,0,0,c,l),C._unBind(),C.destroy(),e._texture=e._texture&&e._texture.destroy(),e._texture=_,e._root=x}else{let s=o*(t.width+2*r),a=o*(t.height+2*r);s<e._initialSize.x&&(s=e._initialSize.x),a<e._initialSize.y&&(a=e._initialSize.y),e._texture=e._texture&&e._texture.destroy(),e._texture=new Wt({context:e._context,width:s,height:a,pixelFormat:e._pixelFormat}),e._root=new Up(new D(r,r),new D(s,a))}}function sN(e,t,n){if(d(t)){if(!d(t.childNode1)&&!d(t.childNode2)){if(d(t.imageIndex))return;let i=t.topRight.x-t.bottomLeft.x,o=t.topRight.y-t.bottomLeft.y,r=i-n.width,s=o-n.height;if(r<0||s<0)return;if(r===0&&s===0)return t;if(r>s){t.childNode1=new Up(new D(t.bottomLeft.x,t.bottomLeft.y),new D(t.bottomLeft.x+n.width,t.topRight.y));let a=t.bottomLeft.x+n.width+e._borderWidthInPixels;a<t.topRight.x&&(t.childNode2=new Up(new D(a,t.bottomLeft.y),new D(t.topRight.x,t.topRight.y)))}else{t.childNode1=new Up(new D(t.bottomLeft.x,t.bottomLeft.y),new D(t.topRight.x,t.bottomLeft.y+n.height));let a=t.bottomLeft.y+n.height+e._borderWidthInPixels;a<t.topRight.y&&(t.childNode2=new Up(new D(t.bottomLeft.x,a),new D(t.topRight.x,t.topRight.y)))}return sN(e,t.childNode1,n)}return sN(e,t.childNode1,n)||sN(e,t.childNode2,n)}}function yoe(e,t,n){let i=sN(e,e._root,t);if(d(i)){i.imageIndex=n;let o=e._texture.width,r=e._texture.height,s=i.topRight.x-i.bottomLeft.x,a=i.topRight.y-i.bottomLeft.y,c=i.bottomLeft.x/o,l=i.bottomLeft.y/r,u=s/o,m=a/r;e._textureCoordinates[n]=new He(c,l,u,m),e._texture.copyFrom({source:t,xOffset:i.bottomLeft.x,yOffset:i.bottomLeft.y})}else oUe(e,t),yoe(e,t,n);e._guid=Yn()}function goe(e,t){if(!d(e)||e.isDestroyed())return-1;let n=e.numberOfImages;return yoe(e,t,n),n}Hb.prototype.getImageIndex=function(e){return this._indexHash[e]};Hb.prototype.addImageSync=function(e,t){let n=this._indexHash[e];return d(n)||(n=goe(this,t),this._idHash[e]=Promise.resolve(n),this._indexHash[e]=n),n};Hb.prototype.addImage=function(e,t){let n=this._idHash[e];if(d(n))return n;typeof t=="function"?t=t(e):(typeof t=="string"||t instanceof Ee)&&(t=Ee.createIfNeeded(t).fetchImage());let i=this;return n=Promise.resolve(t).then(function(o){let r=goe(i,o);return i._indexHash[e]=r,r}),this._idHash[e]=n,n};Hb.prototype.addSubRegion=function(e,t){let n=this._idHash[e];if(!d(n))throw new me(`image with id "${e}" not found in the atlas.`);let i=this;return Promise.resolve(n).then(function(o){if(o===-1)return-1;let r=i._texture.width,s=i._texture.height,a=i._textureCoordinates[o],c=a.x+t.x/r,l=a.y+t.y/s,u=t.width/r,m=t.height/s,p=i._textureCoordinates.push(new He(c,l,u,m))-1;return i._indexHash[e]=p,i._guid=Yn(),p})};Hb.prototype.isDestroyed=function(){return!1};Hb.prototype.destroy=function(){return this._texture=this._texture&&this._texture.destroy(),ue(this)};var zb=Hb;var rUe=uo.SHOW_INDEX,OI=uo.POSITION_INDEX,xoe=uo.PIXEL_OFFSET_INDEX,_oe=uo.EYE_OFFSET_INDEX,sUe=uo.HORIZONTAL_ORIGIN_INDEX,aUe=uo.VERTICAL_ORIGIN_INDEX,cUe=uo.SCALE_INDEX,YI=uo.IMAGE_INDEX_INDEX,Toe=uo.COLOR_INDEX,lUe=uo.ROTATION_INDEX,dUe=uo.ALIGNED_AXIS_INDEX,Soe=uo.SCALE_BY_DISTANCE_INDEX,Coe=uo.TRANSLUCENCY_BY_DISTANCE_INDEX,Voe=uo.PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX,Loe=uo.DISTANCE_DISPLAY_CONDITION,uUe=uo.DISABLE_DEPTH_DISTANCE,mUe=uo.TEXTURE_COORDINATE_BOUNDS,Roe=uo.SDF_INDEX,xO=uo.NUMBER_OF_PROPERTIES,xo,hUe={positionHighAndScale:0,positionLowAndRotation:1,compressedAttribute0:2,compressedAttribute1:3,compressedAttribute2:4,eyeOffset:5,scaleByDistance:6,pixelOffsetScaleByDistance:7,compressedAttribute3:8,textureCoordinateBoundsOrLabelTranslate:9,a_batchId:10,sdf:11},fUe={direction:0,positionHighAndScale:1,positionLowAndRotation:2,compressedAttribute0:3,compressedAttribute1:4,compressedAttribute2:5,eyeOffset:6,scaleByDistance:7,pixelOffsetScaleByDistance:8,compressedAttribute3:9,textureCoordinateBoundsOrLabelTranslate:10,a_batchId:11,sdf:12};function au(e){e=g(e,g.EMPTY_OBJECT),this._scene=e.scene,this._batchTable=e.batchTable,this._textureAtlas=void 0,this._textureAtlasGUID=void 0,this._destroyTextureAtlas=!0,this._sp=void 0,this._spTranslucent=void 0,this._rsOpaque=void 0,this._rsTranslucent=void 0,this._vaf=void 0,this._billboards=[],this._billboardsToUpdate=[],this._billboardsToUpdateIndex=0,this._billboardsRemoved=!1,this._createVertexArray=!1,this._shaderRotation=!1,this._compiledShaderRotation=!1,this._shaderAlignedAxis=!1,this._compiledShaderAlignedAxis=!1,this._shaderScaleByDistance=!1,this._compiledShaderScaleByDistance=!1,this._shaderTranslucencyByDistance=!1,this._compiledShaderTranslucencyByDistance=!1,this._shaderPixelOffsetScaleByDistance=!1,this._compiledShaderPixelOffsetScaleByDistance=!1,this._shaderDistanceDisplayCondition=!1,this._compiledShaderDistanceDisplayCondition=!1,this._shaderDisableDepthDistance=!1,this._compiledShaderDisableDepthDistance=!1,this._shaderClampToGround=!1,this._compiledShaderClampToGround=!1,this._propertiesChanged=new Uint32Array(xO),this._maxSize=0,this._maxEyeOffset=0,this._maxScale=1,this._maxPixelOffset=0,this._allHorizontalCenter=!0,this._allVerticalCenter=!0,this._allSizedInMeters=!0,this._baseVolume=new ce,this._baseVolumeWC=new ce,this._baseVolume2D=new ce,this._boundingVolume=new ce,this._boundingVolumeDirty=!1,this._colorCommands=[],this.show=g(e.show,!0),this.modelMatrix=A.clone(g(e.modelMatrix,A.IDENTITY)),this._modelMatrix=A.clone(A.IDENTITY),this.debugShowBoundingVolume=g(e.debugShowBoundingVolume,!1),this.debugShowTextureAtlas=g(e.debugShowTextureAtlas,!1),this.blendOption=g(e.blendOption,So.OPAQUE_AND_TRANSLUCENT),this._blendOption=void 0,this._mode=ie.SCENE3D,this._buffersUsage=[Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW],this._highlightColor=Y.clone(Y.WHITE);let t=this;this._uniforms={u_atlas:function(){return t._textureAtlas.texture},u_highlightColor:function(){return t._highlightColor}};let n=this._scene;d(n)&&d(n.terrainProviderChanged)&&(this._removeCallbackFunc=n.terrainProviderChanged.addEventListener(function(){let i=this._billboards,o=i.length;for(let r=0;r<o;++r)d(i[r])&&i[r]._updateClamping()},this))}Object.defineProperties(au.prototype,{length:{get:function(){return _O(this),this._billboards.length}},textureAtlas:{get:function(){return this._textureAtlas},set:function(e){this._textureAtlas!==e&&(this._textureAtlas=this._destroyTextureAtlas&&this._textureAtlas&&this._textureAtlas.destroy(),this._textureAtlas=e,this._createVertexArray=!0)}},destroyTextureAtlas:{get:function(){return this._destroyTextureAtlas},set:function(e){this._destroyTextureAtlas=e}}});function Zoe(e){let t=e.length;for(let n=0;n<t;++n)e[n]&&e[n]._destroy()}au.prototype.add=function(e){let t=new uo(e,this);return t._index=this._billboards.length,this._billboards.push(t),this._createVertexArray=!0,t};au.prototype.remove=function(e){return this.contains(e)?(this._billboards[e._index]=void 0,this._billboardsRemoved=!0,this._createVertexArray=!0,e._destroy(),!0):!1};au.prototype.removeAll=function(){Zoe(this._billboards),this._billboards=[],this._billboardsToUpdate=[],this._billboardsToUpdateIndex=0,this._billboardsRemoved=!1,this._createVertexArray=!0};function _O(e){if(e._billboardsRemoved){e._billboardsRemoved=!1;let t=[],n=e._billboards,i=n.length;for(let o=0,r=0;o<i;++o){let s=n[o];d(s)&&(s._index=r++,t.push(s))}e._billboards=t}}au.prototype._updateBillboard=function(e,t){e._dirty||(this._billboardsToUpdate[this._billboardsToUpdateIndex++]=e),++this._propertiesChanged[t]};au.prototype.contains=function(e){return d(e)&&e._billboardCollection===this};au.prototype.get=function(e){return _O(this),this._billboards[e]};var hO;function pUe(e){let n=e.cache.billboardCollection_indexBufferBatched;if(d(n))return n;let i=16384*6-6,o=new Uint16Array(i);for(let r=0,s=0;r<i;r+=6,s+=4)o[r]=s,o[r+1]=s+1,o[r+2]=s+2,o[r+3]=s+0,o[r+4]=s+2,o[r+5]=s+3;return n=mt.createIndexBuffer({context:e,typedArray:o,usage:Ne.STATIC_DRAW,indexDatatype:Ue.UNSIGNED_SHORT}),n.vertexArrayDestroyable=!1,e.cache.billboardCollection_indexBufferBatched=n,n}function bUe(e){let t=e.cache.billboardCollection_indexBufferInstanced;return d(t)||(t=mt.createIndexBuffer({context:e,typedArray:new Uint16Array([0,1,2,0,2,3]),usage:Ne.STATIC_DRAW,indexDatatype:Ue.UNSIGNED_SHORT}),t.vertexArrayDestroyable=!1,e.cache.billboardCollection_indexBufferInstanced=t),t}function yUe(e){let t=e.cache.billboardCollection_vertexBufferInstanced;return d(t)||(t=mt.createVertexBuffer({context:e,typedArray:new Float32Array([0,0,1,0,1,1,0,1]),usage:Ne.STATIC_DRAW}),t.vertexArrayDestroyable=!1,e.cache.billboardCollection_vertexBufferInstanced=t),t}au.prototype.computeNewBuffersUsage=function(){let e=this._buffersUsage,t=!1,n=this._propertiesChanged;for(let i=0;i<xO;++i){let o=n[i]===0?Ne.STATIC_DRAW:Ne.STREAM_DRAW;t=t||e[i]!==o,e[i]=o}return t};function gUe(e,t,n,i,o,r){let s=[{index:xo.positionHighAndScale,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[OI]},{index:xo.positionLowAndRotation,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[OI]},{index:xo.compressedAttribute0,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[xoe]},{index:xo.compressedAttribute1,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[Coe]},{index:xo.compressedAttribute2,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[Toe]},{index:xo.eyeOffset,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[_oe]},{index:xo.scaleByDistance,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[Soe]},{index:xo.pixelOffsetScaleByDistance,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[Voe]},{index:xo.compressedAttribute3,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[Loe]},{index:xo.textureCoordinateBoundsOrLabelTranslate,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[mUe]}];i&&s.push({index:xo.direction,componentsPerAttribute:2,componentDatatype:Q.FLOAT,vertexBuffer:yUe(e)}),d(o)&&s.push({index:xo.a_batchId,componentsPerAttribute:1,componentDatatype:Q.FLOAT,bufferUsage:Ne.STATIC_DRAW}),r&&s.push({index:xo.sdf,componentsPerAttribute:2,componentDatatype:Q.FLOAT,usage:n[Roe]});let a=i?t:4*t;return new Np(e,s,a,i)}var fO=new On;function Goe(e,t,n,i,o){let r,s=i[xo.positionHighAndScale],a=i[xo.positionLowAndRotation],c=o._getActualPosition();e._mode===ie.SCENE3D&&(ce.expand(e._baseVolume,c,e._baseVolume),e._boundingVolumeDirty=!0),On.fromCartesian(c,fO);let l=o.scale,u=o.rotation;u!==0&&(e._shaderRotation=!0),e._maxScale=Math.max(e._maxScale,l);let m=fO.high,p=fO.low;e._instanced?(r=o._index,s(r,m.x,m.y,m.z,l),a(r,p.x,p.y,p.z,u)):(r=o._index*4,s(r+0,m.x,m.y,m.z,l),s(r+1,m.x,m.y,m.z,l),s(r+2,m.x,m.y,m.z,l),s(r+3,m.x,m.y,m.z,l),a(r+0,p.x,p.y,p.z,u),a(r+1,p.x,p.y,p.z,u),a(r+2,p.x,p.y,p.z,u),a(r+3,p.x,p.y,p.z,u))}var su=new D,ru=32768,sC=65536,pO=4096,Qh=256,xUe=128,_Ue=32,TUe=8,Eoe=4,SUe=1/256,Xoe=0,Ioe=2,Woe=3,Poe=1;function voe(e,t,n,i,o){let r,s=i[xo.compressedAttribute0],a=o.pixelOffset,c=a.x,l=a.y,u=o._translate,m=u.x,p=u.y;e._maxPixelOffset=Math.max(e._maxPixelOffset,Math.abs(c+m),Math.abs(-l+p));let y=o.horizontalOrigin,f=o._verticalOrigin,x=o.show&&o.clusterShow;o.color.alpha===0&&(x=!1),f===In.BASELINE&&(f=In.BOTTOM),e._allHorizontalCenter=e._allHorizontalCenter&&y===pi.CENTER,e._allVerticalCenter=e._allVerticalCenter&&f===In.CENTER;let _=0,C=0,V=0,L=0,Z=o._imageIndex;if(Z!==-1){let B=n[Z];_=B.x,C=B.y,V=B.width,L=B.height}let G=_+V,X=C+L,P=Math.floor(W.clamp(c,-ru,ru)+ru)*xUe;P+=(y+1)*_Ue,P+=(f+1)*TUe,P+=(x?1:0)*Eoe;let v=Math.floor(W.clamp(l,-ru,ru)+ru)*Qh,F=Math.floor(W.clamp(m,-ru,ru)+ru)*Qh,M=(W.clamp(p,-ru,ru)+ru)*SUe,b=Math.floor(M),R=Math.floor((M-b)*Qh);v+=b,F+=R,su.x=_,su.y=C;let E=Kn.compressTextureCoordinates(su);su.x=G;let I=Kn.compressTextureCoordinates(su);su.y=X;let w=Kn.compressTextureCoordinates(su);su.x=_;let N=Kn.compressTextureCoordinates(su);e._instanced?(r=o._index,s(r,P,v,F,E)):(r=o._index*4,s(r+0,P+Xoe,v,F,E),s(r+1,P+Ioe,v,F,I),s(r+2,P+Woe,v,F,w),s(r+3,P+Poe,v,F,N))}function woe(e,t,n,i,o){let r,s=i[xo.compressedAttribute1],a=o.alignedAxis;h.equals(a,h.ZERO)||(e._shaderAlignedAxis=!0);let c=0,l=1,u=1,m=1,p=o.translucencyByDistance;d(p)&&(c=p.near,l=p.nearValue,u=p.far,m=p.farValue,(l!==1||m!==1)&&(e._shaderTranslucencyByDistance=!0));let y=0,f=o._imageIndex;f!==-1&&(y=n[f].width);let x=e._textureAtlas.texture.width,_=Math.round(g(o.width,x*y));e._maxSize=Math.max(e._maxSize,_);let C=W.clamp(_,0,sC),V=0;Math.abs(h.magnitudeSquared(a)-1)<W.EPSILON6&&(V=Kn.octEncodeFloat(a)),l=W.clamp(l,0,1),l=l===1?255:l*255|0,C=C*Qh+l,m=W.clamp(m,0,1),m=m===1?255:m*255|0,V=V*Qh+m,e._instanced?(r=o._index,s(r,C,V,c,u)):(r=o._index*4,s(r+0,C,V,c,u),s(r+1,C,V,c,u),s(r+2,C,V,c,u),s(r+3,C,V,c,u))}function yO(e,t,n,i,o){let r,s=i[xo.compressedAttribute2],a=o.color,c=d(e._batchTable)?Y.WHITE:o.getPickId(t.context).color,l=o.sizeInMeters?1:0,u=Math.abs(h.magnitudeSquared(o.alignedAxis)-1)<W.EPSILON6?1:0;e._allSizedInMeters=e._allSizedInMeters&&l===1;let m=0,p=o._imageIndex;p!==-1&&(m=n[p].height);let y=e._textureAtlas.texture.dimensions,f=Math.round(g(o.height,y.y*m));e._maxSize=Math.max(e._maxSize,f);let x=g(o._labelHorizontalOrigin,-2);x+=2;let _=f*Eoe+x,C=Y.floatToByte(a.red),V=Y.floatToByte(a.green),L=Y.floatToByte(a.blue),Z=C*sC+V*Qh+L;C=Y.floatToByte(c.red),V=Y.floatToByte(c.green),L=Y.floatToByte(c.blue);let G=C*sC+V*Qh+L,X=Y.floatToByte(a.alpha)*sC+Y.floatToByte(c.alpha)*Qh;X+=l*2+u,e._instanced?(r=o._index,s(r,Z,G,X,_)):(r=o._index*4,s(r+0,Z,G,X,_),s(r+1,Z,G,X,_),s(r+2,Z,G,X,_),s(r+3,Z,G,X,_))}function gO(e,t,n,i,o){let r,s=i[xo.eyeOffset],a=o.eyeOffset,c=a.z;if(o._heightReference!==Oe.NONE&&(c*=1.005),e._maxEyeOffset=Math.max(e._maxEyeOffset,Math.abs(a.x),Math.abs(a.y),Math.abs(c)),e._instanced){let l=0,u=0,m=o._imageIndex;if(m!==-1){let y=n[m];l=y.width,u=y.height}su.x=l,su.y=u;let p=Kn.compressTextureCoordinates(su);r=o._index,s(r,a.x,a.y,c,p)}else r=o._index*4,s(r+0,a.x,a.y,c,0),s(r+1,a.x,a.y,c,0),s(r+2,a.x,a.y,c,0),s(r+3,a.x,a.y,c,0)}function Foe(e,t,n,i,o){let r,s=i[xo.scaleByDistance],a=0,c=1,l=1,u=1,m=o.scaleByDistance;d(m)&&(a=m.near,c=m.nearValue,l=m.far,u=m.farValue,(c!==1||u!==1)&&(e._shaderScaleByDistance=!0)),e._instanced?(r=o._index,s(r,a,c,l,u)):(r=o._index*4,s(r+0,a,c,l,u),s(r+1,a,c,l,u),s(r+2,a,c,l,u),s(r+3,a,c,l,u))}function Aoe(e,t,n,i,o){let r,s=i[xo.pixelOffsetScaleByDistance],a=0,c=1,l=1,u=1,m=o.pixelOffsetScaleByDistance;d(m)&&(a=m.near,c=m.nearValue,l=m.far,u=m.farValue,(c!==1||u!==1)&&(e._shaderPixelOffsetScaleByDistance=!0)),e._instanced?(r=o._index,s(r,a,c,l,u)):(r=o._index*4,s(r+0,a,c,l,u),s(r+1,a,c,l,u),s(r+2,a,c,l,u),s(r+3,a,c,l,u))}function Moe(e,t,n,i,o){let r,s=i[xo.compressedAttribute3],a=0,c=Number.MAX_VALUE,l=o.distanceDisplayCondition;d(l)&&(a=l.near,c=l.far,a*=a,c*=c,e._shaderDistanceDisplayCondition=!0);let u=o.disableDepthTestDistance,m=o.heightReference===Oe.CLAMP_TO_GROUND&&t.context.depthTexture;d(u)||(u=m?5e3:0),u*=u,(m||u>0)&&(e._shaderDisableDepthDistance=!0,u===Number.POSITIVE_INFINITY&&(u=-1));let p,y;if(d(o._labelDimensions))y=o._labelDimensions.x,p=o._labelDimensions.y;else{let C=0,V=0,L=o._imageIndex;if(L!==-1){let G=n[L];C=G.height,V=G.width}p=Math.round(g(o.height,e._textureAtlas.texture.dimensions.y*C));let Z=e._textureAtlas.texture.width;y=Math.round(g(o.width,Z*V))}let f=Math.floor(W.clamp(y,0,pO)),x=Math.floor(W.clamp(p,0,pO)),_=f*pO+x;e._instanced?(r=o._index,s(r,a,c,u,_)):(r=o._index*4,s(r+0,a,c,u,_),s(r+1,a,c,u,_),s(r+2,a,c,u,_),s(r+3,a,c,u,_))}function Noe(e,t,n,i,o){if(o.heightReference===Oe.CLAMP_TO_GROUND){let f=e._scene,x=t.context,_=t.globeTranslucencyState.translucent,C=d(f.globe)&&f.globe.depthTestAgainstTerrain;e._shaderClampToGround=x.depthTexture&&!_&&C}let r,s=i[xo.textureCoordinateBoundsOrLabelTranslate];if(kt.maximumVertexTextureImageUnits>0){let f=0,x=0;d(o._labelTranslate)&&(f=o._labelTranslate.x,x=o._labelTranslate.y),e._instanced?(r=o._index,s(r,f,x,0,0)):(r=o._index*4,s(r+0,f,x,0,0),s(r+1,f,x,0,0),s(r+2,f,x,0,0),s(r+3,f,x,0,0));return}let a=0,c=0,l=0,u=0,m=o._imageIndex;if(m!==-1){let f=n[m];a=f.x,c=f.y,l=f.width,u=f.height}let p=a+l,y=c+u;e._instanced?(r=o._index,s(r,a,c,p,y)):(r=o._index*4,s(r+0,a,c,p,y),s(r+1,a,c,p,y),s(r+2,a,c,p,y),s(r+3,a,c,p,y))}function CUe(e,t,n,i,o){if(!d(e._batchTable))return;let r=i[xo.a_batchId],s=o._batchIndex,a;e._instanced?(a=o._index,r(a,s)):(a=o._index*4,r(a+0,s),r(a+1,s),r(a+2,s),r(a+3,s))}function Uoe(e,t,n,i,o){if(!e._sdf)return;let r,s=i[xo.sdf],a=o.outlineColor,c=o.outlineWidth,l=Y.floatToByte(a.red),u=Y.floatToByte(a.green),m=Y.floatToByte(a.blue),p=l*sC+u*Qh+m,y=c/Rs.RADIUS,f=Y.floatToByte(a.alpha)*sC+Y.floatToByte(y)*Qh;e._instanced?(r=o._index,s(r,p,f)):(r=o._index*4,s(r+0,p+Xoe,f),s(r+1,p+Ioe,f),s(r+2,p+Woe,f),s(r+3,p+Poe,f))}function VUe(e,t,n,i,o){Goe(e,t,n,i,o),voe(e,t,n,i,o),woe(e,t,n,i,o),yO(e,t,n,i,o),gO(e,t,n,i,o),Foe(e,t,n,i,o),Aoe(e,t,n,i,o),Moe(e,t,n,i,o),Noe(e,t,n,i,o),CUe(e,t,n,i,o),Uoe(e,t,n,i,o)}function bO(e,t,n,i,o,r){let s;i.mode===ie.SCENE3D?(s=e._baseVolume,e._boundingVolumeDirty=!0):s=e._baseVolume2D;let a=[];for(let c=0;c<n;++c){let l=t[c],u=l.position,m=uo._computeActualPosition(l,u,i,o);d(m)&&(l._setActualPosition(m),r?a.push(m):ce.expand(s,m,s))}r&&ce.fromPoints(a,s)}function LUe(e,t){let n=t.mode,i=e._billboards,o=e._billboardsToUpdate,r=e._modelMatrix;e._createVertexArray||e._mode!==n||n!==ie.SCENE3D&&!A.equals(r,e.modelMatrix)?(e._mode=n,A.clone(e.modelMatrix,r),e._createVertexArray=!0,(n===ie.SCENE3D||n===ie.SCENE2D||n===ie.COLUMBUS_VIEW)&&bO(e,i,i.length,t,r,!0)):n===ie.MORPHING?bO(e,i,i.length,t,r,!0):(n===ie.SCENE2D||n===ie.COLUMBUS_VIEW)&&bO(e,o,e._billboardsToUpdateIndex,t,r,!1)}function RUe(e,t,n){let i=1;(!e._allSizedInMeters||e._maxPixelOffset!==0)&&(i=t.camera.getPixelSize(n,t.context.drawingBufferWidth,t.context.drawingBufferHeight));let o=i*e._maxScale*e._maxSize*2;e._allHorizontalCenter&&e._allVerticalCenter&&(o*=.5);let r=i*e._maxPixelOffset+e._maxEyeOffset;n.radius+=o+r}function ZUe(e,t){let n=`uniform sampler2D billboard_texture;
  6978. in vec2 v_textureCoordinates;
  6979. void main()
  6980. {
  6981. out_FragColor = texture(billboard_texture, v_textureCoordinates);
  6982. }
  6983. `,i=t.createViewportQuadCommand(n,{uniformMap:{billboard_texture:function(){return e._textureAtlas.texture}}});return i.pass=Re.OVERLAY,i}var GUe=[];au.prototype.update=function(e){if(_O(this),!this.show)return;let t=this._billboards,n=t.length,i=e.context;this._instanced=i.instancedArrays,xo=this._instanced?fUe:hUe,hO=this._instanced?bUe:pUe;let o=this._textureAtlas;if(!d(o)){o=this._textureAtlas=new zb({context:i});for(let v=0;v<n;++v)t[v]._loadImage()}let r=o.textureCoordinates;if(r.length===0)return;LUe(this,e),t=this._billboards,n=t.length;let s=this._billboardsToUpdate,a=this._billboardsToUpdateIndex,c=this._propertiesChanged,l=o.guid,u=this._createVertexArray||this._textureAtlasGUID!==l;this._textureAtlasGUID=l;let m,p=e.passes,y=p.pick;if(u||!y&&this.computeNewBuffersUsage()){this._createVertexArray=!1;for(let v=0;v<xO;++v)c[v]=0;if(this._vaf=this._vaf&&this._vaf.destroy(),n>0){this._vaf=gUe(i,n,this._buffersUsage,this._instanced,this._batchTable,this._sdf),m=this._vaf.writers;for(let v=0;v<n;++v){let F=this._billboards[v];F._dirty=!1,VUe(this,e,r,m,F)}this._vaf.commit(hO(i))}this._billboardsToUpdateIndex=0}else if(a>0){let v=GUe;v.length=0,(c[OI]||c[lUe]||c[cUe])&&v.push(Goe),(c[YI]||c[xoe]||c[sUe]||c[aUe]||c[rUe])&&(v.push(voe),this._instanced&&v.push(gO)),(c[YI]||c[dUe]||c[Coe])&&(v.push(woe),v.push(yO)),(c[YI]||c[Toe])&&v.push(yO),c[_oe]&&v.push(gO),c[Soe]&&v.push(Foe),c[Voe]&&v.push(Aoe),(c[Loe]||c[uUe]||c[YI]||c[OI])&&v.push(Moe),(c[YI]||c[OI])&&v.push(Noe),c[Roe]&&v.push(Uoe);let F=v.length;if(m=this._vaf.writers,a/n>.1){for(let M=0;M<a;++M){let b=s[M];b._dirty=!1;for(let R=0;R<F;++R)v[R](this,e,r,m,b)}this._vaf.commit(hO(i))}else{for(let M=0;M<a;++M){let b=s[M];b._dirty=!1;for(let R=0;R<F;++R)v[R](this,e,r,m,b);this._instanced?this._vaf.subCommit(b._index,1):this._vaf.subCommit(b._index*4,4)}this._vaf.endSubCommits()}this._billboardsToUpdateIndex=0}if(a>n*1.5&&(s.length=n),!d(this._vaf)||!d(this._vaf.va))return;this._boundingVolumeDirty&&(this._boundingVolumeDirty=!1,ce.transform(this._baseVolume,this.modelMatrix,this._baseVolumeWC));let f,x=A.IDENTITY;e.mode===ie.SCENE3D?(x=this.modelMatrix,f=ce.clone(this._baseVolumeWC,this._boundingVolume)):f=ce.clone(this._baseVolume2D,this._boundingVolume),RUe(this,e,f);let _=this._blendOption!==this.blendOption;if(this._blendOption=this.blendOption,_){this._blendOption===So.OPAQUE||this._blendOption===So.OPAQUE_AND_TRANSLUCENT?this._rsOpaque=De.fromCache({depthTest:{enabled:!0,func:ne.LESS},depthMask:!0}):this._rsOpaque=void 0;let v=this._blendOption===So.TRANSLUCENT;this._blendOption===So.TRANSLUCENT||this._blendOption===So.OPAQUE_AND_TRANSLUCENT?this._rsTranslucent=De.fromCache({depthTest:{enabled:!0,func:v?ne.LEQUAL:ne.LESS},depthMask:v,blending:dn.ALPHA_BLEND}):this._rsTranslucent=void 0}this._shaderDisableDepthDistance=this._shaderDisableDepthDistance||e.minimumDisableDepthTestDistance!==0;let C,V,L,Z,G,X=kt.maximumVertexTextureImageUnits>0;if(_||this._shaderRotation!==this._compiledShaderRotation||this._shaderAlignedAxis!==this._compiledShaderAlignedAxis||this._shaderScaleByDistance!==this._compiledShaderScaleByDistance||this._shaderTranslucencyByDistance!==this._compiledShaderTranslucencyByDistance||this._shaderPixelOffsetScaleByDistance!==this._compiledShaderPixelOffsetScaleByDistance||this._shaderDistanceDisplayCondition!==this._compiledShaderDistanceDisplayCondition||this._shaderDisableDepthDistance!==this._compiledShaderDisableDepthDistance||this._shaderClampToGround!==this._compiledShaderClampToGround||this._sdf!==this._compiledSDF){C=DI,V=kI,G=[],d(this._batchTable)&&(G.push("VECTOR_TILE"),C=this._batchTable.getVertexShaderCallback(!1,"a_batchId",void 0)(C),V=this._batchTable.getFragmentShaderCallback(!1,void 0)(V)),L=new Ye({defines:G,sources:[C]}),this._instanced&&L.defines.push("INSTANCED"),this._shaderRotation&&L.defines.push("ROTATION"),this._shaderAlignedAxis&&L.defines.push("ALIGNED_AXIS"),this._shaderScaleByDistance&&L.defines.push("EYE_DISTANCE_SCALING"),this._shaderTranslucencyByDistance&&L.defines.push("EYE_DISTANCE_TRANSLUCENCY"),this._shaderPixelOffsetScaleByDistance&&L.defines.push("EYE_DISTANCE_PIXEL_OFFSET"),this._shaderDistanceDisplayCondition&&L.defines.push("DISTANCE_DISPLAY_CONDITION"),this._shaderDisableDepthDistance&&L.defines.push("DISABLE_DEPTH_DISTANCE"),this._shaderClampToGround&&(X?L.defines.push("VERTEX_DEPTH_CHECK"):L.defines.push("FRAGMENT_DEPTH_CHECK"));let v=1-Rs.CUTOFF;this._sdf&&L.defines.push("SDF");let F=d(this._batchTable)?"VECTOR_TILE":"";this._blendOption===So.OPAQUE_AND_TRANSLUCENT&&(Z=new Ye({defines:["OPAQUE",F],sources:[V]}),this._shaderClampToGround&&(X?Z.defines.push("VERTEX_DEPTH_CHECK"):Z.defines.push("FRAGMENT_DEPTH_CHECK")),this._sdf&&(Z.defines.push("SDF"),Z.defines.push(`SDF_EDGE ${v}`)),this._sp=Qt.replaceCache({context:i,shaderProgram:this._sp,vertexShaderSource:L,fragmentShaderSource:Z,attributeLocations:xo}),Z=new Ye({defines:["TRANSLUCENT",F],sources:[V]}),this._shaderClampToGround&&(X?Z.defines.push("VERTEX_DEPTH_CHECK"):Z.defines.push("FRAGMENT_DEPTH_CHECK")),this._sdf&&(Z.defines.push("SDF"),Z.defines.push(`SDF_EDGE ${v}`)),this._spTranslucent=Qt.replaceCache({context:i,shaderProgram:this._spTranslucent,vertexShaderSource:L,fragmentShaderSource:Z,attributeLocations:xo})),this._blendOption===So.OPAQUE&&(Z=new Ye({defines:[F],sources:[V]}),this._shaderClampToGround&&(X?Z.defines.push("VERTEX_DEPTH_CHECK"):Z.defines.push("FRAGMENT_DEPTH_CHECK")),this._sdf&&(Z.defines.push("SDF"),Z.defines.push(`SDF_EDGE ${v}`)),this._sp=Qt.replaceCache({context:i,shaderProgram:this._sp,vertexShaderSource:L,fragmentShaderSource:Z,attributeLocations:xo})),this._blendOption===So.TRANSLUCENT&&(Z=new Ye({defines:[F],sources:[V]}),this._shaderClampToGround&&(X?Z.defines.push("VERTEX_DEPTH_CHECK"):Z.defines.push("FRAGMENT_DEPTH_CHECK")),this._sdf&&(Z.defines.push("SDF"),Z.defines.push(`SDF_EDGE ${v}`)),this._spTranslucent=Qt.replaceCache({context:i,shaderProgram:this._spTranslucent,vertexShaderSource:L,fragmentShaderSource:Z,attributeLocations:xo})),this._compiledShaderRotation=this._shaderRotation,this._compiledShaderAlignedAxis=this._shaderAlignedAxis,this._compiledShaderScaleByDistance=this._shaderScaleByDistance,this._compiledShaderTranslucencyByDistance=this._shaderTranslucencyByDistance,this._compiledShaderPixelOffsetScaleByDistance=this._shaderPixelOffsetScaleByDistance,this._compiledShaderDistanceDisplayCondition=this._shaderDistanceDisplayCondition,this._compiledShaderDisableDepthDistance=this._shaderDisableDepthDistance,this._compiledShaderClampToGround=this._shaderClampToGround,this._compiledSDF=this._sdf}let P=e.commandList;if(p.render||p.pick){let v=this._colorCommands,F=this._blendOption===So.OPAQUE,M=this._blendOption===So.OPAQUE_AND_TRANSLUCENT,b=this._vaf.va,R=b.length,E=this._uniforms,I;d(this._batchTable)?(E=this._batchTable.getUniformMapCallback()(E),I=this._batchTable.getPickId()):I="v_pickColor",v.length=R;let w=M?R*2:R;for(let N=0;N<w;++N){let B=v[N];d(B)||(B=v[N]=new nt);let k=F||M&&N%2===0;B.pass=k||!M?Re.OPAQUE:Re.TRANSLUCENT,B.owner=this;let O=M?Math.floor(N/2):N;B.boundingVolume=f,B.modelMatrix=x,B.count=b[O].indicesCount,B.shaderProgram=k?this._sp:this._spTranslucent,B.uniformMap=E,B.vertexArray=b[O].va,B.renderState=k?this._rsOpaque:this._rsTranslucent,B.debugShowBoundingVolume=this.debugShowBoundingVolume,B.pickId=I,this._instanced&&(B.count=6,B.instanceCount=n),P.push(B)}this.debugShowTextureAtlas&&(d(this.debugCommand)||(this.debugCommand=ZUe(this,e.context)),P.push(this.debugCommand))}};au.prototype.isDestroyed=function(){return!1};au.prototype.destroy=function(){return d(this._removeCallbackFunc)&&(this._removeCallbackFunc(),this._removeCallbackFunc=void 0),this._textureAtlas=this._destroyTextureAtlas&&this._textureAtlas&&this._textureAtlas.destroy(),this._sp=this._sp&&this._sp.destroy(),this._spTranslucent=this._spTranslucent&&this._spTranslucent.destroy(),this._vaf=this._vaf&&this._vaf.destroy(),Zoe(this._billboards),ue(this)};var nd=au;var Z1n=T(S(),1);var x1n=T(S(),1);function EUe(e,t,n,i,o){return function(){let r=document.createElement("canvas"),s=o+2*i;r.height=r.width=s;let a=r.getContext("2d");return a.clearRect(0,0,s,s),i!==0&&(a.beginPath(),a.arc(s/2,s/2,s/2,0,2*Math.PI,!0),a.closePath(),a.fillStyle=n,a.fill(),e<1&&(a.save(),a.globalCompositeOperation="destination-out",a.beginPath(),a.arc(s/2,s/2,o/2,0,2*Math.PI,!0),a.closePath(),a.fillStyle="black",a.fill(),a.restore())),a.beginPath(),a.arc(s/2,s/2,o/2,0,2*Math.PI,!0),a.closePath(),a.fillStyle=t,a.fill(),r}}var Bx=EUe;function Hs(e,t,n,i,o){this._content=e,this._billboard=n,this._label=i,this._polyline=o,this._batchId=t,this._billboardImage=void 0,this._billboardColor=void 0,this._billboardOutlineColor=void 0,this._billboardOutlineWidth=void 0,this._billboardSize=void 0,this._pointSize=void 0,this._color=void 0,this._pointSize=void 0,this._pointOutlineColor=void 0,this._pointOutlineWidth=void 0,this._heightOffset=void 0,this._pickIds=new Array(3),aC(this)}var XUe=new he;Object.defineProperties(Hs.prototype,{show:{get:function(){return this._label.show},set:function(e){this._label.show=e,this._billboard.show=e,this._polyline.show=e}},color:{get:function(){return this._color},set:function(e){this._color=Y.clone(e,this._color),aC(this)}},pointSize:{get:function(){return this._pointSize},set:function(e){this._pointSize=e,aC(this)}},pointOutlineColor:{get:function(){return this._pointOutlineColor},set:function(e){this._pointOutlineColor=Y.clone(e,this._pointOutlineColor),aC(this)}},pointOutlineWidth:{get:function(){return this._pointOutlineWidth},set:function(e){this._pointOutlineWidth=e,aC(this)}},labelColor:{get:function(){return this._label.fillColor},set:function(e){this._label.fillColor=e,this._polyline.show=this._label.show&&e.alpha>0}},labelOutlineColor:{get:function(){return this._label.outlineColor},set:function(e){this._label.outlineColor=e}},labelOutlineWidth:{get:function(){return this._label.outlineWidth},set:function(e){this._label.outlineWidth=e}},font:{get:function(){return this._label.font},set:function(e){this._label.font=e}},labelStyle:{get:function(){return this._label.style},set:function(e){this._label.style=e}},labelText:{get:function(){return this._label.text},set:function(e){d(e)||(e=""),this._label.text=e}},backgroundColor:{get:function(){return this._label.backgroundColor},set:function(e){this._label.backgroundColor=e}},backgroundPadding:{get:function(){return this._label.backgroundPadding},set:function(e){this._label.backgroundPadding=e}},backgroundEnabled:{get:function(){return this._label.showBackground},set:function(e){this._label.showBackground=e}},scaleByDistance:{get:function(){return this._label.scaleByDistance},set:function(e){this._label.scaleByDistance=e,this._billboard.scaleByDistance=e}},translucencyByDistance:{get:function(){return this._label.translucencyByDistance},set:function(e){this._label.translucencyByDistance=e,this._billboard.translucencyByDistance=e}},distanceDisplayCondition:{get:function(){return this._label.distanceDisplayCondition},set:function(e){this._label.distanceDisplayCondition=e,this._polyline.distanceDisplayCondition=e,this._billboard.distanceDisplayCondition=e}},heightOffset:{get:function(){return this._heightOffset},set:function(e){let t=g(this._heightOffset,0),n=this._content.tileset.ellipsoid,i=n.cartesianToCartographic(this._billboard.position,XUe);i.height=i.height-t+e;let o=n.cartographicToCartesian(i);this._billboard.position=o,this._label.position=this._billboard.position,this._polyline.positions=[this._polyline.positions[0],o],this._heightOffset=e}},anchorLineEnabled:{get:function(){return this._polyline.show},set:function(e){this._polyline.show=e}},anchorLineColor:{get:function(){return this._polyline.material.uniforms.color},set:function(e){this._polyline.material.uniforms.color=Y.clone(e,this._polyline.material.uniforms.color)}},image:{get:function(){return this._billboardImage},set:function(e){let t=this._billboardImage!==e;this._billboardImage=e,t&&aC(this)}},disableDepthTestDistance:{get:function(){return this._label.disableDepthTestDistance},set:function(e){this._label.disableDepthTestDistance=e,this._billboard.disableDepthTestDistance=e}},horizontalOrigin:{get:function(){return this._billboard.horizontalOrigin},set:function(e){this._billboard.horizontalOrigin=e}},verticalOrigin:{get:function(){return this._billboard.verticalOrigin},set:function(e){this._billboard.verticalOrigin=e}},labelHorizontalOrigin:{get:function(){return this._label.horizontalOrigin},set:function(e){this._label.horizontalOrigin=e}},labelVerticalOrigin:{get:function(){return this._label.verticalOrigin},set:function(e){this._label.verticalOrigin=e}},content:{get:function(){return this._content}},tileset:{get:function(){return this._content.tileset}},primitive:{get:function(){return this._content.tileset}},pickIds:{get:function(){let e=this._pickIds;return e[0]=this._billboard.pickId,e[1]=this._label.pickId,e[2]=this._polyline.pickId,e}}});Hs.defaultColor=Y.WHITE;Hs.defaultPointOutlineColor=Y.BLACK;Hs.defaultPointOutlineWidth=0;Hs.defaultPointSize=8;function aC(e){let t=e._billboard;if(d(e._billboardImage)&&e._billboardImage!==t.image){t.image=e._billboardImage;return}if(d(e._billboardImage))return;let n=g(e._color,Hs.defaultColor),i=g(e._pointOutlineColor,Hs.defaultPointOutlineColor),o=g(e._pointOutlineWidth,Hs.defaultPointOutlineWidth),r=g(e._pointSize,Hs.defaultPointSize),s=e._billboardColor,a=e._billboardOutlineColor,c=e._billboardOutlineWidth,l=e._billboardSize;if(Y.equals(n,s)&&Y.equals(i,a)&&o===c&&r===l)return;e._billboardColor=Y.clone(n,e._billboardColor),e._billboardOutlineColor=Y.clone(i,e._billboardOutlineColor),e._billboardOutlineWidth=o,e._billboardSize=r;let u=n.alpha,m=n.toCssColorString(),p=i.toCssColorString(),y=JSON.stringify([m,r,p,o]);t.setImage(y,Bx(u,m,p,o,r))}Hs.prototype.hasProperty=function(e){return this._content.batchTable.hasProperty(this._batchId,e)};Hs.prototype.getPropertyIds=function(e){return this._content.batchTable.getPropertyIds(this._batchId,e)};Hs.prototype.getProperty=function(e){return this._content.batchTable.getProperty(this._batchId,e)};Hs.prototype.getPropertyInherited=function(e){return Ts.getPropertyInherited(this._content,this._batchId,e)};Hs.prototype.setProperty=function(e,t){this._content.batchTable.setProperty(this._batchId,e,t),this._content.featurePropertiesDirty=!0};Hs.prototype.isExactClass=function(e){return this._content.batchTable.isExactClass(this._batchId,e)};Hs.prototype.isClass=function(e){return this._content.batchTable.isClass(this._batchId,e)};Hs.prototype.getExactClassName=function(){return this._content.batchTable.getExactClassName(this._batchId)};var kp=Hs;var xVn=T(S(),1);var W1n=T(S(),1);function IUe(e,t,n,i,o){let r=e.measureText(t);if(!!/\S/.test(t)){let a=document.defaultView.getComputedStyle(e.canvas).getPropertyValue("font-size").replace("px",""),c=document.createElement("canvas"),l=100,u=r.width+l|0,m=3*a,p=m/2;c.width=u,c.height=m;let y=c.getContext("2d");y.font=n,y.fillStyle="white",y.fillRect(0,0,c.width+1,c.height+1),i&&(y.strokeStyle="black",y.lineWidth=e.lineWidth,y.strokeText(t,l/2,p)),o&&(y.fillStyle="black",y.fillText(t,l/2,p));let f=y.getImageData(0,0,u,m).data,x=f.length,_=u*4,C,V,L,Z;for(C=0;C<x;++C)if(f[C]!==255){L=C/_|0;break}for(C=x-1;C>=0;--C)if(f[C]!==255){Z=C/_|0;break}let G=-1;for(C=0;C<u&&G===-1;++C)for(V=0;V<m;++V){let X=C*4+V*_;if(f[X]!==255||f[X+1]!==255||f[X+2]!==255||f[X+3]!==255){G=C;break}}return{width:r.width,height:Z-L,ascent:p-L,descent:Z-p,minx:G-l/2}}return{width:r.width,height:0,ascent:0,descent:0,minx:0}}var Yx;function WUe(e,t){if(e==="")return;t=g(t,g.EMPTY_OBJECT);let n=g(t.font,"10px sans-serif"),i=g(t.stroke,!1),o=g(t.fill,!0),r=g(t.strokeWidth,1),s=g(t.backgroundColor,Y.TRANSPARENT),a=g(t.padding,0),c=a*2,l=document.createElement("canvas");l.width=1,l.height=1,l.style.font=n;let u=l.getContext("2d",{willReadFrequently:!0});d(Yx)||(d(u.imageSmoothingEnabled)?Yx="imageSmoothingEnabled":d(u.mozImageSmoothingEnabled)?Yx="mozImageSmoothingEnabled":d(u.webkitImageSmoothingEnabled)?Yx="webkitImageSmoothingEnabled":d(u.msImageSmoothingEnabled)&&(Yx="msImageSmoothingEnabled")),u.font=n,u.lineJoin="round",u.lineWidth=r,u[Yx]=!1,l.style.visibility="hidden",document.body.appendChild(l);let m=IUe(u,e,n,i,o);l.dimensions=m,document.body.removeChild(l),l.style.visibility="";let p=-m.minx,y=Math.ceil(m.width)+p+c,f=m.height+c,x=f-m.ascent+a,_=f-x+c;if(l.width=y,l.height=f,u.font=n,u.lineJoin="round",u.lineWidth=r,u[Yx]=!1,s!==Y.TRANSPARENT&&(u.fillStyle=s.toCssColorString(),u.fillRect(0,0,l.width,l.height)),i){let C=g(t.strokeColor,Y.BLACK);u.strokeStyle=C.toCssColorString(),u.strokeText(e,p+a,_)}if(o){let C=g(t.fillColor,Y.WHITE);u.fillStyle=C.toCssColorString(),u.fillText(e,p+a,_)}return l}var Ox=WUe;var joe=T(Yoe(),1);var q1n=T(S(),1);var F1n=T(S(),1),vUe={FILL:0,OUTLINE:1,FILL_AND_OUTLINE:2},vo=Object.freeze(vUe);var Ooe={},Koe=0,wUe=256,FUe=new Y(.165,.165,.165,.8),AUe=new D(7,5),qr=Object.freeze({LTR:0,RTL:1,WEAK:2,BRACKETS:3});function Kx(e){!e._rebindAllGlyphs&&!e._repositionAllGlyphs&&e._labelCollection._labelsToUpdate.push(e),e._rebindAllGlyphs=!0}function HI(e){!e._rebindAllGlyphs&&!e._repositionAllGlyphs&&e._labelCollection._labelsToUpdate.push(e),e._repositionAllGlyphs=!0}function zI(e,t){return document.defaultView.getComputedStyle(e,null).getPropertyValue(t)}function zoe(e){let t=Ooe[e._font];if(!d(t)){let n=document.createElement("div");n.style.position="absolute",n.style.opacity=0,n.style.font=e._font,document.body.appendChild(n);let i=parseFloat(zI(n,"line-height"));isNaN(i)&&(i=void 0),t={family:zI(n,"font-family"),size:zI(n,"font-size").replace("px",""),style:zI(n,"font-style"),weight:zI(n,"font-weight"),lineHeight:i},document.body.removeChild(n),Koe<wUe&&(Ooe[e._font]=t,Koe++)}e._fontFamily=t.family,e._fontSize=t.size,e._fontStyle=t.style,e._fontWeight=t.weight,e._lineHeight=t.lineHeight}function Dp(e,t){e=g(e,g.EMPTY_OBJECT);let n=e.translucencyByDistance,i=e.pixelOffsetScaleByDistance,o=e.scaleByDistance,r=e.distanceDisplayCondition;d(n)&&(n=It.clone(n)),d(i)&&(i=It.clone(i)),d(o)&&(o=It.clone(o)),d(r)&&(r=Gt.clone(r)),this._renderedText=void 0,this._text=void 0,this._show=g(e.show,!0),this._font=g(e.font,"30px sans-serif"),this._fillColor=Y.clone(g(e.fillColor,Y.WHITE)),this._outlineColor=Y.clone(g(e.outlineColor,Y.BLACK)),this._outlineWidth=g(e.outlineWidth,1),this._showBackground=g(e.showBackground,!1),this._backgroundColor=Y.clone(g(e.backgroundColor,FUe)),this._backgroundPadding=D.clone(g(e.backgroundPadding,AUe)),this._style=g(e.style,vo.FILL),this._verticalOrigin=g(e.verticalOrigin,In.BASELINE),this._horizontalOrigin=g(e.horizontalOrigin,pi.LEFT),this._pixelOffset=D.clone(g(e.pixelOffset,D.ZERO)),this._eyeOffset=h.clone(g(e.eyeOffset,h.ZERO)),this._position=h.clone(g(e.position,h.ZERO)),this._scale=g(e.scale,1),this._id=e.id,this._translucencyByDistance=n,this._pixelOffsetScaleByDistance=i,this._scaleByDistance=o,this._heightReference=g(e.heightReference,Oe.NONE),this._distanceDisplayCondition=r,this._disableDepthTestDistance=e.disableDepthTestDistance,this._labelCollection=t,this._glyphs=[],this._backgroundBillboard=void 0,this._batchIndex=void 0,this._rebindAllGlyphs=!0,this._repositionAllGlyphs=!0,this._actualClampedPosition=void 0,this._removeCallbackFunc=void 0,this._mode=void 0,this._clusterShow=!0,this.text=g(e.text,""),this._relativeSize=1,zoe(this),this._updateClamping()}Object.defineProperties(Dp.prototype,{show:{get:function(){return this._show},set:function(e){if(this._show!==e){this._show=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i].billboard;d(r)&&(r.show=e)}let n=this._backgroundBillboard;d(n)&&(n.show=e)}}},position:{get:function(){return this._position},set:function(e){let t=this._position;if(!h.equals(t,e)){h.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o].billboard;d(s)&&(s.position=e)}let i=this._backgroundBillboard;d(i)&&(i.position=e),this._updateClamping()}}},heightReference:{get:function(){return this._heightReference},set:function(e){if(e!==this._heightReference){this._heightReference=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i].billboard;d(r)&&(r.heightReference=e)}let n=this._backgroundBillboard;d(n)&&(n.heightReference=e),HI(this),this._updateClamping()}}},text:{get:function(){return this._text},set:function(e){if(this._text!==e){this._text=e;let t=e.replace(/\u00ad/g,"");this._renderedText=Dp.enableRightToLeftDetection?BUe(t):t,Kx(this)}}},font:{get:function(){return this._font},set:function(e){this._font!==e&&(this._font=e,Kx(this),zoe(this))}},fillColor:{get:function(){return this._fillColor},set:function(e){let t=this._fillColor;Y.equals(t,e)||(Y.clone(e,t),Kx(this))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){let t=this._outlineColor;Y.equals(t,e)||(Y.clone(e,t),Kx(this))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){this._outlineWidth!==e&&(this._outlineWidth=e,Kx(this))}},showBackground:{get:function(){return this._showBackground},set:function(e){this._showBackground!==e&&(this._showBackground=e,Kx(this))}},backgroundColor:{get:function(){return this._backgroundColor},set:function(e){let t=this._backgroundColor;if(!Y.equals(t,e)){Y.clone(e,t);let n=this._backgroundBillboard;d(n)&&(n.color=t)}}},backgroundPadding:{get:function(){return this._backgroundPadding},set:function(e){let t=this._backgroundPadding;D.equals(t,e)||(D.clone(e,t),HI(this))}},style:{get:function(){return this._style},set:function(e){this._style!==e&&(this._style=e,Kx(this))}},pixelOffset:{get:function(){return this._pixelOffset},set:function(e){let t=this._pixelOffset;if(!D.equals(t,e)){D.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o];d(s.billboard)&&(s.billboard.pixelOffset=e)}let i=this._backgroundBillboard;d(i)&&(i.pixelOffset=e)}}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){let t=this._translucencyByDistance;if(!It.equals(t,e)){this._translucencyByDistance=It.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o];d(s.billboard)&&(s.billboard.translucencyByDistance=e)}let i=this._backgroundBillboard;d(i)&&(i.translucencyByDistance=e)}}},pixelOffsetScaleByDistance:{get:function(){return this._pixelOffsetScaleByDistance},set:function(e){let t=this._pixelOffsetScaleByDistance;if(!It.equals(t,e)){this._pixelOffsetScaleByDistance=It.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o];d(s.billboard)&&(s.billboard.pixelOffsetScaleByDistance=e)}let i=this._backgroundBillboard;d(i)&&(i.pixelOffsetScaleByDistance=e)}}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){let t=this._scaleByDistance;if(!It.equals(t,e)){this._scaleByDistance=It.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o];d(s.billboard)&&(s.billboard.scaleByDistance=e)}let i=this._backgroundBillboard;d(i)&&(i.scaleByDistance=e)}}},eyeOffset:{get:function(){return this._eyeOffset},set:function(e){let t=this._eyeOffset;if(!h.equals(t,e)){h.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o];d(s.billboard)&&(s.billboard.eyeOffset=e)}let i=this._backgroundBillboard;d(i)&&(i.eyeOffset=e)}}},horizontalOrigin:{get:function(){return this._horizontalOrigin},set:function(e){this._horizontalOrigin!==e&&(this._horizontalOrigin=e,HI(this))}},verticalOrigin:{get:function(){return this._verticalOrigin},set:function(e){if(this._verticalOrigin!==e){this._verticalOrigin=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];d(r.billboard)&&(r.billboard.verticalOrigin=e)}let n=this._backgroundBillboard;d(n)&&(n.verticalOrigin=e),HI(this)}}},scale:{get:function(){return this._scale},set:function(e){if(this._scale!==e){this._scale=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];d(r.billboard)&&(r.billboard.scale=e*this._relativeSize)}let n=this._backgroundBillboard;d(n)&&(n.scale=e*this._relativeSize),HI(this)}}},totalScale:{get:function(){return this._scale*this._relativeSize}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){if(!Gt.equals(e,this._distanceDisplayCondition)){this._distanceDisplayCondition=Gt.clone(e,this._distanceDisplayCondition);let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];d(r.billboard)&&(r.billboard.distanceDisplayCondition=e)}let n=this._backgroundBillboard;d(n)&&(n.distanceDisplayCondition=e)}}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){if(this._disableDepthTestDistance!==e){this._disableDepthTestDistance=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];d(r.billboard)&&(r.billboard.disableDepthTestDistance=e)}let n=this._backgroundBillboard;d(n)&&(n.disableDepthTestDistance=e)}}},id:{get:function(){return this._id},set:function(e){if(this._id!==e){this._id=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];d(r.billboard)&&(r.billboard.id=e)}let n=this._backgroundBillboard;d(n)&&(n.id=e)}}},pickId:{get:function(){if(!(this._glyphs.length===0||!d(this._glyphs[0].billboard)))return this._glyphs[0].billboard.pickId}},_clampedPosition:{get:function(){return this._actualClampedPosition},set:function(e){this._actualClampedPosition=h.clone(e,this._actualClampedPosition);let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];d(r.billboard)&&(r.billboard._clampedPosition=e)}let n=this._backgroundBillboard;d(n)&&(n._clampedPosition=e)}},clusterShow:{get:function(){return this._clusterShow},set:function(e){if(this._clusterShow!==e){this._clusterShow=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];d(r.billboard)&&(r.billboard.clusterShow=e)}let n=this._backgroundBillboard;d(n)&&(n.clusterShow=e)}}}});Dp.prototype._updateClamping=function(){uo._updateClamping(this._labelCollection,this)};Dp.prototype.computeScreenSpacePosition=function(e,t){d(t)||(t=new D);let i=this._labelCollection.modelMatrix,o=d(this._actualClampedPosition)?this._actualClampedPosition:this._position;return uo._computeScreenSpacePosition(i,o,this._eyeOffset,this._pixelOffset,e,t)};Dp.getScreenSpaceBoundingBox=function(e,t,n){let i=0,o=0,r=0,s=0,a=e.totalScale,c=e._backgroundBillboard;if(d(c))i=t.x+c._translate.x,o=t.y-c._translate.y,r=c.width*a,s=c.height*a,e.verticalOrigin===In.BOTTOM||e.verticalOrigin===In.BASELINE?o-=s:e.verticalOrigin===In.CENTER&&(o-=s*.5);else{i=Number.POSITIVE_INFINITY,o=Number.POSITIVE_INFINITY;let l=0,u=0,m=e._glyphs,p=m.length;for(let y=0;y<p;++y){let f=m[y],x=f.billboard;if(!d(x))continue;let _=t.x+x._translate.x,C=t.y-x._translate.y,V=f.dimensions.width*a,L=f.dimensions.height*a;e.verticalOrigin===In.BOTTOM||e.verticalOrigin===In.BASELINE?C-=L:e.verticalOrigin===In.CENTER&&(C-=L*.5),e._verticalOrigin===In.TOP?C+=Rs.PADDING*a:(e._verticalOrigin===In.BOTTOM||e._verticalOrigin===In.BASELINE)&&(C-=Rs.PADDING*a),i=Math.min(i,_),o=Math.min(o,C),l=Math.max(l,_+V),u=Math.max(u,C+L)}r=l-i,s=u-o}return d(n)||(n=new He),n.x=i,n.y=o,n.width=r,n.height=s,n};Dp.prototype.equals=function(e){return this===e||d(e)&&this._show===e._show&&this._scale===e._scale&&this._outlineWidth===e._outlineWidth&&this._showBackground===e._showBackground&&this._style===e._style&&this._verticalOrigin===e._verticalOrigin&&this._horizontalOrigin===e._horizontalOrigin&&this._heightReference===e._heightReference&&this._renderedText===e._renderedText&&this._font===e._font&&h.equals(this._position,e._position)&&Y.equals(this._fillColor,e._fillColor)&&Y.equals(this._outlineColor,e._outlineColor)&&Y.equals(this._backgroundColor,e._backgroundColor)&&D.equals(this._backgroundPadding,e._backgroundPadding)&&D.equals(this._pixelOffset,e._pixelOffset)&&h.equals(this._eyeOffset,e._eyeOffset)&&It.equals(this._translucencyByDistance,e._translucencyByDistance)&&It.equals(this._pixelOffsetScaleByDistance,e._pixelOffsetScaleByDistance)&&It.equals(this._scaleByDistance,e._scaleByDistance)&&Gt.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance&&this._id===e._id};Dp.prototype.isDestroyed=function(){return!1};Dp.enableRightToLeftDetection=!1;function MUe(e,t){let n=/[a-zA-Z0-9]/,i=/[()[\]{}<>]/,o=[],r="",s=qr.LTR,a="",c=e.length;for(let l=0;l<c;++l){let u=e.charAt(l);t.test(u)?a=qr.RTL:n.test(u)?a=qr.LTR:i.test(u)?a=qr.BRACKETS:a=qr.WEAK,l===0&&(s=a),s===a&&a!==qr.BRACKETS?r+=u:(r!==""&&o.push({Type:s,Word:r}),s=a,r=u)}return o.push({Type:a,Word:r}),o}function NUe(e){return e.split("").reverse().join("")}function JI(e,t,n){return e.slice(0,t)+n+e.slice(t)}function UUe(e){switch(e){case"(":return")";case")":return"(";case"[":return"]";case"]":return"[";case"{":return"}";case"}":return"{";case"<":return">";case">":return"<"}}var kUe="\u05D0-\u05EA",DUe="\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF",Hoe=new RegExp(`[${kUe}${DUe}]`);function BUe(e){let t=e.split(`
  6984. `),n="";for(let i=0;i<t.length;i++){let o=t[i],r=Hoe.test(o.charAt(0)),s=MUe(o,Hoe),a=0,c="";for(let l=0;l<s.length;++l){let u=s[l],m=u.Type===qr.BRACKETS?UUe(u.Word):NUe(u.Word);r?u.Type===qr.RTL?(c=m+c,a=0):u.Type===qr.LTR?(c=JI(c,a,u.Word),a+=u.Word.length):(u.Type===qr.WEAK||u.Type===qr.BRACKETS)&&(u.Type===qr.WEAK&&s[l-1].Type===qr.BRACKETS?c=m+c:s[l-1].Type===qr.RTL?(c=m+c,a=0):s.length>l+1?s[l+1].Type===qr.RTL?(c=m+c,a=0):(c=JI(c,a,u.Word),a+=u.Word.length):c=JI(c,0,m)):u.Type===qr.RTL?c=JI(c,a,m):u.Type===qr.LTR?(c+=u.Word,a=c.length):(u.Type===qr.WEAK||u.Type===qr.BRACKETS)&&(l>0&&s[l-1].Type===qr.RTL?s.length>l+1?s[l+1].Type===qr.RTL?c=JI(c,a,m):(c+=u.Word,a=c.length):c+=u.Word:(c+=u.Word,a=c.length))}n+=c,i<t.length-1&&(n+=`
  6985. `)}return n}var Jb=Dp;var qoe=T(Joe(),1);function OUe(){this.textureInfo=void 0,this.dimensions=void 0,this.billboard=void 0}function KUe(e,t,n){this.labelCollection=e,this.index=t,this.dimensions=n}var HUe=1.2,$oe="ID_WHITE_PIXEL",TO=new D(4,4),zUe=new He(1,1,1,1);function JUe(e){let t=document.createElement("canvas");t.width=TO.x,t.height=TO.y;let n=t.getContext("2d");return n.fillStyle="#fff",n.fillRect(0,0,t.width,t.height),e.addImage($oe,t)}var cu={};function QUe(e,t,n,i,o,r,s){return cu.font=t,cu.fillColor=n,cu.strokeColor=i,cu.strokeWidth=o,cu.padding=Rs.PADDING,s===In.CENTER?cu.textBaseline="middle":s===In.TOP?cu.textBaseline="top":cu.textBaseline="bottom",cu.fill=r===vo.FILL||r===vo.FILL_AND_OUTLINE,cu.stroke=r===vo.OUTLINE||r===vo.FILL_AND_OUTLINE,cu.backgroundColor=Y.BLACK,Ox(e,cu)}function SO(e,t){t.textureInfo=void 0,t.dimensions=void 0;let n=t.billboard;d(n)&&(n.show=!1,n.image=void 0,d(n._removeCallbackFunc)&&(n._removeCallbackFunc(),n._removeCallbackFunc=void 0),e._spareBillboards.push(n),t.billboard=void 0)}function jUe(e,t,n,i){i.index=e.addImageSync(t,n)}var qUe=new qoe.default;function $Ue(e,t){let n=t._renderedText,i=qUe.splitGraphemes(n),o=i.length,r=t._glyphs,s=r.length,a,c,l;if(t._relativeSize=t._fontSize/Rs.FONT_SIZE,o<s)for(c=o;c<s;++c)SO(e,r[c]);r.length=o;let u=t.show&&t._showBackground&&n.split(`
  6986. `).join("").length>0,m=t._backgroundBillboard,p=e._backgroundBillboardCollection;u?(d(m)||(m=p.add({collection:e,image:$oe,imageSubRegion:zUe}),t._backgroundBillboard=m),m.color=t._backgroundColor,m.show=t._show,m.position=t._position,m.eyeOffset=t._eyeOffset,m.pixelOffset=t._pixelOffset,m.horizontalOrigin=pi.LEFT,m.verticalOrigin=t._verticalOrigin,m.heightReference=t._heightReference,m.scale=t.totalScale,m.pickPrimitive=t,m.id=t._id,m.translucencyByDistance=t._translucencyByDistance,m.pixelOffsetScaleByDistance=t._pixelOffsetScaleByDistance,m.scaleByDistance=t._scaleByDistance,m.distanceDisplayCondition=t._distanceDisplayCondition,m.disableDepthTestDistance=t._disableDepthTestDistance,m.clusterShow=t.clusterShow):d(m)&&(p.remove(m),t._backgroundBillboard=m=void 0);let y=e._glyphTextureCache;for(l=0;l<o;++l){let f=i[l],x=t._verticalOrigin,_=JSON.stringify([f,t._fontFamily,t._fontStyle,t._fontWeight,+x]),C=y[_];if(!d(C)){let V=`${t._fontStyle} ${t._fontWeight} ${Rs.FONT_SIZE}px ${t._fontFamily}`,L=QUe(f,V,Y.WHITE,Y.WHITE,0,vo.FILL,x);if(C=new KUe(e,-1,L.dimensions),y[_]=C,L.width>0&&L.height>0){let Z=(0,joe.default)(L,{cutoff:Rs.CUTOFF,radius:Rs.RADIUS}),G=L.getContext("2d"),X=L.width,P=L.height,v=G.getImageData(0,0,X,P);for(let F=0;F<X;F++)for(let M=0;M<P;M++){let b=M*X+F,R=Z[b]*255,E=b*4;v.data[E+0]=R,v.data[E+1]=R,v.data[E+2]=R,v.data[E+3]=R}G.putImageData(v,0,0),f!==" "&&jUe(e._textureAtlas,_,L,C)}}if(a=r[l],d(a)?C.index===-1?SO(e,a):d(a.textureInfo)&&(a.textureInfo=void 0):(a=new OUe,r[l]=a),a.textureInfo=C,a.dimensions=C.dimensions,C.index!==-1){let V=a.billboard,L=e._spareBillboards;d(V)||(L.length>0?V=L.pop():(V=e._billboardCollection.add({collection:e}),V._labelDimensions=new D,V._labelTranslate=new D),a.billboard=V),V.show=t._show,V.position=t._position,V.eyeOffset=t._eyeOffset,V.pixelOffset=t._pixelOffset,V.horizontalOrigin=pi.LEFT,V.verticalOrigin=t._verticalOrigin,V.heightReference=t._heightReference,V.scale=t.totalScale,V.pickPrimitive=t,V.id=t._id,V.image=_,V.translucencyByDistance=t._translucencyByDistance,V.pixelOffsetScaleByDistance=t._pixelOffsetScaleByDistance,V.scaleByDistance=t._scaleByDistance,V.distanceDisplayCondition=t._distanceDisplayCondition,V.disableDepthTestDistance=t._disableDepthTestDistance,V._batchIndex=t._batchIndex,V.outlineColor=t.outlineColor,t.style===vo.FILL_AND_OUTLINE?(V.color=t._fillColor,V.outlineWidth=t.outlineWidth):t.style===vo.FILL?(V.color=t._fillColor,V.outlineWidth=0):t.style===vo.OUTLINE&&(V.color=Y.TRANSPARENT,V.outlineWidth=t.outlineWidth)}}t._repositionAllGlyphs=!0}function Qoe(e,t,n){return t===pi.CENTER?-e/2:t===pi.RIGHT?-(e+n.x):n.x}var ir=new D,eke=new D;function tke(e){let t=e._glyphs,n=e._renderedText,i,o,r=0,s=0,a=[],c=Number.NEGATIVE_INFINITY,l=0,u=1,m,p=t.length,y=e._backgroundBillboard,f=D.clone(d(y)?e._backgroundPadding:D.ZERO,eke);for(f.x/=e._relativeSize,f.y/=e._relativeSize,m=0;m<p;++m)n.charAt(m)===`
  6987. `?(a.push(r),++u,r=0):(i=t[m],o=i.dimensions,l=Math.max(l,o.height-o.descent),c=Math.max(c,o.descent),r+=o.width-o.minx,m<p-1&&(r+=t[m+1].dimensions.minx),s=Math.max(s,r));a.push(r);let x=l+c,_=e.totalScale,C=e._horizontalOrigin,V=e._verticalOrigin,L=0,Z=a[L],G=Qoe(Z,C,f),X=(d(e._lineHeight)?e._lineHeight:HUe*e._fontSize)/e._relativeSize,P=X*(u-1),v=s,F=x+P;d(y)&&(v+=f.x*2,F+=f.y*2,y._labelHorizontalOrigin=C),ir.x=G*_,ir.y=0;let M=!0,b=0;for(m=0;m<p;++m)if(n.charAt(m)===`
  6988. `)++L,b+=X,Z=a[L],G=Qoe(Z,C,f),ir.x=G*_,M=!0;else if(i=t[m],o=i.dimensions,V===In.TOP?(ir.y=o.height-l-f.y,ir.y+=Rs.PADDING):V===In.CENTER?ir.y=(P+o.height-l)/2:V===In.BASELINE?(ir.y=P,ir.y-=Rs.PADDING):(ir.y=P+c+f.y,ir.y-=Rs.PADDING),ir.y=(ir.y-o.descent-b)*_,M&&(ir.x-=Rs.PADDING*_,M=!1),d(i.billboard)&&(i.billboard._setTranslate(ir),i.billboard._labelDimensions.x=v,i.billboard._labelDimensions.y=F,i.billboard._labelHorizontalOrigin=C),m<p-1){let R=t[m+1];ir.x+=(o.width-o.minx+R.dimensions.minx)*_}if(d(y)&&n.split(`
  6989. `).join("").length>0&&(C===pi.CENTER?G=-s/2-f.x:C===pi.RIGHT?G=-(s+f.x*2):G=0,ir.x=G*_,V===In.TOP?ir.y=x-l-c:V===In.CENTER?ir.y=(x-l)/2-c:V===In.BASELINE?ir.y=-f.y-c:ir.y=0,ir.y=ir.y*_,y.width=v,y.height=F,y._setTranslate(ir),y._labelTranslate=D.clone(ir,y._labelTranslate)),e.heightReference===Oe.CLAMP_TO_GROUND)for(m=0;m<p;++m){i=t[m];let R=i.billboard;d(R)&&(R._labelTranslate=D.clone(ir,R._labelTranslate))}}function ere(e,t){let n=t._glyphs;for(let i=0,o=n.length;i<o;++i)SO(e,n[i]);d(t._backgroundBillboard)&&(e._backgroundBillboardCollection.remove(t._backgroundBillboard),t._backgroundBillboard=void 0),t._labelCollection=void 0,d(t._removeCallbackFunc)&&t._removeCallbackFunc(),ue(t)}function jh(e){e=g(e,g.EMPTY_OBJECT),this._scene=e.scene,this._batchTable=e.batchTable,this._textureAtlas=void 0,this._backgroundTextureAtlas=void 0,this._backgroundBillboardCollection=new nd({scene:this._scene}),this._backgroundBillboardCollection.destroyTextureAtlas=!1,this._billboardCollection=new nd({scene:this._scene,batchTable:this._batchTable}),this._billboardCollection.destroyTextureAtlas=!1,this._billboardCollection._sdf=!0,this._spareBillboards=[],this._glyphTextureCache={},this._labels=[],this._labelsToUpdate=[],this._totalGlyphCount=0,this._highlightColor=Y.clone(Y.WHITE),this.show=g(e.show,!0),this.modelMatrix=A.clone(g(e.modelMatrix,A.IDENTITY)),this.debugShowBoundingVolume=g(e.debugShowBoundingVolume,!1),this.blendOption=g(e.blendOption,So.OPAQUE_AND_TRANSLUCENT)}Object.defineProperties(jh.prototype,{length:{get:function(){return this._labels.length}}});jh.prototype.add=function(e){let t=new Jb(e,this);return this._labels.push(t),this._labelsToUpdate.push(t),t};jh.prototype.remove=function(e){if(d(e)&&e._labelCollection===this){let t=this._labels.indexOf(e);if(t!==-1)return this._labels.splice(t,1),ere(this,e),!0}return!1};jh.prototype.removeAll=function(){let e=this._labels;for(let t=0,n=e.length;t<n;++t)ere(this,e[t]);e.length=0};jh.prototype.contains=function(e){return d(e)&&e._labelCollection===this};jh.prototype.get=function(e){return this._labels[e]};jh.prototype.update=function(e){if(!this.show)return;let t=this._billboardCollection,n=this._backgroundBillboardCollection;t.modelMatrix=this.modelMatrix,t.debugShowBoundingVolume=this.debugShowBoundingVolume,n.modelMatrix=this.modelMatrix,n.debugShowBoundingVolume=this.debugShowBoundingVolume;let i=e.context;d(this._textureAtlas)||(this._textureAtlas=new zb({context:i}),t.textureAtlas=this._textureAtlas),d(this._backgroundTextureAtlas)||(this._backgroundTextureAtlas=new zb({context:i,initialSize:TO}),n.textureAtlas=this._backgroundTextureAtlas,JUe(this._backgroundTextureAtlas));let o=this._labelsToUpdate.length;for(let s=0;s<o;++s){let a=this._labelsToUpdate[s];if(a.isDestroyed())continue;let c=a._glyphs.length;a._rebindAllGlyphs&&($Ue(this,a),a._rebindAllGlyphs=!1),a._repositionAllGlyphs&&(tke(a),a._repositionAllGlyphs=!1);let l=a._glyphs.length-c;this._totalGlyphCount+=l}let r=n.length>0?So.TRANSLUCENT:this.blendOption;t.blendOption=r,n.blendOption=r,t._highlightColor=this._highlightColor,n._highlightColor=this._highlightColor,this._labelsToUpdate.length=0,n.update(e),t.update(e)};jh.prototype.isDestroyed=function(){return!1};jh.prototype.destroy=function(){return this.removeAll(),this._billboardCollection=this._billboardCollection.destroy(),this._textureAtlas=this._textureAtlas&&this._textureAtlas.destroy(),this._backgroundBillboardCollection=this._backgroundBillboardCollection.destroy(),this._backgroundTextureAtlas=this._backgroundTextureAtlas&&this._backgroundTextureAtlas.destroy(),ue(this)};var qh=jh;var ILn=T(S(),1);var TVn=T(S(),1),QI=`in vec3 position3DHigh;
  6990. in vec3 position3DLow;
  6991. in vec3 position2DHigh;
  6992. in vec3 position2DLow;
  6993. in vec3 prevPosition3DHigh;
  6994. in vec3 prevPosition3DLow;
  6995. in vec3 prevPosition2DHigh;
  6996. in vec3 prevPosition2DLow;
  6997. in vec3 nextPosition3DHigh;
  6998. in vec3 nextPosition3DLow;
  6999. in vec3 nextPosition2DHigh;
  7000. in vec3 nextPosition2DLow;
  7001. in vec4 texCoordExpandAndBatchIndex;
  7002. out vec2 v_st;
  7003. out float v_width;
  7004. out vec4 v_pickColor;
  7005. out float v_polylineAngle;
  7006. void main()
  7007. {
  7008. float texCoord = texCoordExpandAndBatchIndex.x;
  7009. float expandDir = texCoordExpandAndBatchIndex.y;
  7010. bool usePrev = texCoordExpandAndBatchIndex.z < 0.0;
  7011. float batchTableIndex = texCoordExpandAndBatchIndex.w;
  7012. vec2 widthAndShow = batchTable_getWidthAndShow(batchTableIndex);
  7013. float width = widthAndShow.x + 0.5;
  7014. float show = widthAndShow.y;
  7015. if (width < 1.0)
  7016. {
  7017. show = 0.0;
  7018. }
  7019. vec4 pickColor = batchTable_getPickColor(batchTableIndex);
  7020. vec4 p, prev, next;
  7021. if (czm_morphTime == 1.0)
  7022. {
  7023. p = czm_translateRelativeToEye(position3DHigh.xyz, position3DLow.xyz);
  7024. prev = czm_translateRelativeToEye(prevPosition3DHigh.xyz, prevPosition3DLow.xyz);
  7025. next = czm_translateRelativeToEye(nextPosition3DHigh.xyz, nextPosition3DLow.xyz);
  7026. }
  7027. else if (czm_morphTime == 0.0)
  7028. {
  7029. p = czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy);
  7030. prev = czm_translateRelativeToEye(prevPosition2DHigh.zxy, prevPosition2DLow.zxy);
  7031. next = czm_translateRelativeToEye(nextPosition2DHigh.zxy, nextPosition2DLow.zxy);
  7032. }
  7033. else
  7034. {
  7035. p = czm_columbusViewMorph(
  7036. czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy),
  7037. czm_translateRelativeToEye(position3DHigh.xyz, position3DLow.xyz),
  7038. czm_morphTime);
  7039. prev = czm_columbusViewMorph(
  7040. czm_translateRelativeToEye(prevPosition2DHigh.zxy, prevPosition2DLow.zxy),
  7041. czm_translateRelativeToEye(prevPosition3DHigh.xyz, prevPosition3DLow.xyz),
  7042. czm_morphTime);
  7043. next = czm_columbusViewMorph(
  7044. czm_translateRelativeToEye(nextPosition2DHigh.zxy, nextPosition2DLow.zxy),
  7045. czm_translateRelativeToEye(nextPosition3DHigh.xyz, nextPosition3DLow.xyz),
  7046. czm_morphTime);
  7047. }
  7048. #ifdef DISTANCE_DISPLAY_CONDITION
  7049. vec3 centerHigh = batchTable_getCenterHigh(batchTableIndex);
  7050. vec4 centerLowAndRadius = batchTable_getCenterLowAndRadius(batchTableIndex);
  7051. vec3 centerLow = centerLowAndRadius.xyz;
  7052. float radius = centerLowAndRadius.w;
  7053. vec2 distanceDisplayCondition = batchTable_getDistanceDisplayCondition(batchTableIndex);
  7054. float lengthSq;
  7055. if (czm_sceneMode == czm_sceneMode2D)
  7056. {
  7057. lengthSq = czm_eyeHeight2D.y;
  7058. }
  7059. else
  7060. {
  7061. vec4 center = czm_translateRelativeToEye(centerHigh.xyz, centerLow.xyz);
  7062. lengthSq = max(0.0, dot(center.xyz, center.xyz) - radius * radius);
  7063. }
  7064. float nearSq = distanceDisplayCondition.x * distanceDisplayCondition.x;
  7065. float farSq = distanceDisplayCondition.y * distanceDisplayCondition.y;
  7066. if (lengthSq < nearSq || lengthSq > farSq)
  7067. {
  7068. show = 0.0;
  7069. }
  7070. #endif
  7071. float polylineAngle;
  7072. vec4 positionWC = getPolylineWindowCoordinates(p, prev, next, expandDir, width, usePrev, polylineAngle);
  7073. gl_Position = czm_viewportOrthographic * positionWC * show;
  7074. v_st.s = texCoord;
  7075. v_st.t = czm_writeNonPerspective(clamp(expandDir, 0.0, 1.0), gl_Position.w);
  7076. v_width = width;
  7077. v_pickColor = pickColor;
  7078. v_polylineAngle = polylineAngle;
  7079. }
  7080. `;var KVn=T(S(),1);var vVn=T(S(),1);var wc={};wc.numberOfPoints=function(e,t,n){let i=h.distance(e,t);return Math.ceil(i/n)};wc.numberOfPointsRhumbLine=function(e,t,n){let i=Math.pow(e.longitude-t.longitude,2)+Math.pow(e.latitude-t.latitude,2);return Math.max(1,Math.ceil(Math.sqrt(i/(n*n))))};var nke=new he;wc.extractHeights=function(e,t){let n=e.length,i=new Array(n);for(let o=0;o<n;o++){let r=e[o];i[o]=t.cartesianToCartographic(r,nke).height}return i};var ike=new A,oke=new h,tre=new h,rke=new sn(h.UNIT_X,0),nre=new h,ske=new sn(h.UNIT_X,0),ake=new h,cke=new h,VO=[];function ore(e,t,n){let i=VO;i.length=e;let o;if(t===n){for(o=0;o<e;o++)i[o]=t;return i}let s=(n-t)/e;for(o=0;o<e;o++){let a=t+o*s;i[o]=a}return i}var lN=new he,cN=new he,Qb=new h,LO=new h,lke=new h,CO=new jd,jI=new ma;function dke(e,t,n,i,o,r,s,a){let c=i.scaleToGeodeticSurface(e,LO),l=i.scaleToGeodeticSurface(t,lke),u=wc.numberOfPoints(e,t,n),m=i.cartesianToCartographic(c,lN),p=i.cartesianToCartographic(l,cN),y=ore(u,o,r);CO.setEndPoints(m,p);let f=CO.surfaceDistance/u,x=a;m.height=o;let _=i.cartographicToCartesian(m,Qb);h.pack(_,s,x),x+=3;for(let C=1;C<u;C++){let V=CO.interpolateUsingSurfaceDistance(C*f,cN);V.height=y[C],_=i.cartographicToCartesian(V,Qb),h.pack(_,s,x),x+=3}return x}function uke(e,t,n,i,o,r,s,a){let c=i.cartesianToCartographic(e,lN),l=i.cartesianToCartographic(t,cN),u=wc.numberOfPointsRhumbLine(c,l,n);c.height=0,l.height=0;let m=ore(u,o,r);jI.ellipsoid.equals(i)||(jI=new ma(void 0,void 0,i)),jI.setEndPoints(c,l);let p=jI.surfaceDistance/u,y=a;c.height=o;let f=i.cartographicToCartesian(c,Qb);h.pack(f,s,y),y+=3;for(let x=1;x<u;x++){let _=jI.interpolateUsingSurfaceDistance(x*p,cN);_.height=m[x],f=i.cartographicToCartesian(_,Qb),h.pack(f,s,y),y+=3}return y}wc.wrapLongitude=function(e,t){let n=[],i=[];if(d(e)&&e.length>0){t=g(t,A.IDENTITY);let o=A.inverseTransformation(t,ike),r=A.multiplyByPoint(o,h.ZERO,oke),s=h.normalize(A.multiplyByPointAsVector(o,h.UNIT_Y,tre),tre),a=sn.fromPointNormal(r,s,rke),c=h.normalize(A.multiplyByPointAsVector(o,h.UNIT_X,nre),nre),l=sn.fromPointNormal(r,c,ske),u=1;n.push(h.clone(e[0]));let m=n[0],p=e.length;for(let y=1;y<p;++y){let f=e[y];if(sn.getPointDistance(l,m)<0||sn.getPointDistance(l,f)<0){let x=Si.lineSegmentPlane(m,f,a,ake);if(d(x)){let _=h.multiplyByScalar(s,5e-9,cke);sn.getPointDistance(a,m)<0&&h.negate(_,_),n.push(h.add(x,_,new h)),i.push(u+1),h.negate(_,_),n.push(h.add(x,_,new h)),u=1}}n.push(h.clone(e[y])),u++,m=f}i.push(u)}return{positions:n,lengths:i}};wc.generateArc=function(e){d(e)||(e={});let t=e.positions,n=t.length,i=g(e.ellipsoid,re.WGS84),o=g(e.height,0),r=Array.isArray(o);if(n<1)return[];if(n===1){let x=i.scaleToGeodeticSurface(t[0],LO);if(o=r?o[0]:o,o!==0){let _=i.geodeticSurfaceNormal(x,Qb);h.multiplyByScalar(_,o,_),h.add(x,_,x)}return[x.x,x.y,x.z]}let s=e.minDistance;if(!d(s)){let x=g(e.granularity,W.RADIANS_PER_DEGREE);s=W.chordLength(x,i.maximumRadius)}let a=0,c;for(c=0;c<n-1;c++)a+=wc.numberOfPoints(t[c],t[c+1],s);let l=(a+1)*3,u=new Array(l),m=0;for(c=0;c<n-1;c++){let x=t[c],_=t[c+1],C=r?o[c]:o,V=r?o[c+1]:o;m=dke(x,_,s,i,C,V,u,m)}VO.length=0;let p=t[n-1],y=i.cartesianToCartographic(p,lN);y.height=r?o[n-1]:o;let f=i.cartographicToCartesian(y,Qb);return h.pack(f,u,l-3),u};var ire=new he,mke=new he;wc.generateRhumbArc=function(e){d(e)||(e={});let t=e.positions,n=t.length,i=g(e.ellipsoid,re.WGS84),o=g(e.height,0),r=Array.isArray(o);if(n<1)return[];if(n===1){let C=i.scaleToGeodeticSurface(t[0],LO);if(o=r?o[0]:o,o!==0){let V=i.geodeticSurfaceNormal(C,Qb);h.multiplyByScalar(V,o,V),h.add(C,V,C)}return[C.x,C.y,C.z]}let s=g(e.granularity,W.RADIANS_PER_DEGREE),a=0,c,l=i.cartesianToCartographic(t[0],ire),u;for(c=0;c<n-1;c++)u=i.cartesianToCartographic(t[c+1],mke),a+=wc.numberOfPointsRhumbLine(l,u,s),l=he.clone(u,ire);let m=(a+1)*3,p=new Array(m),y=0;for(c=0;c<n-1;c++){let C=t[c],V=t[c+1],L=r?o[c]:o,Z=r?o[c+1]:o;y=uke(C,V,s,i,L,Z,p,y)}VO.length=0;let f=t[n-1],x=i.cartesianToCartographic(f,lN);x.height=r?o[n-1]:o;let _=i.cartographicToCartesian(x,Qb);return h.pack(_,p,m-3),p};wc.generateCartesianArc=function(e){let t=wc.generateArc(e),n=t.length/3,i=new Array(n);for(let o=0;o<n;o++)i[o]=h.unpack(t,o*3);return i};wc.generateCartesianRhumbArc=function(e){let t=wc.generateRhumbArc(e),n=t.length/3,i=new Array(n);for(let o=0;o<n;o++)i[o]=h.unpack(t,o*3);return i};var Xi=wc;function id(e,t){e=g(e,g.EMPTY_OBJECT),this._show=g(e.show,!0),this._width=g(e.width,1),this._loop=g(e.loop,!1),this._distanceDisplayCondition=e.distanceDisplayCondition,this._material=e.material,d(this._material)||(this._material=ki.fromType(ki.ColorType,{color:new Y(1,1,1,1)}));let n=e.positions;d(n)||(n=[]),this._positions=n,this._actualPositions=go(n,h.equalsEpsilon),this._loop&&this._actualPositions.length>2&&(this._actualPositions===this._positions&&(this._actualPositions=n.slice()),this._actualPositions.push(h.clone(this._actualPositions[0]))),this._length=this._actualPositions.length,this._id=e.id;let i;d(t)&&(i=A.clone(t.modelMatrix)),this._modelMatrix=i,this._segments=Xi.wrapLongitude(this._actualPositions,i),this._actualLength=void 0,this._propertiesChanged=new Uint32Array(sre),this._polylineCollection=t,this._dirty=!1,this._pickId=void 0,this._boundingVolume=ce.fromPoints(this._actualPositions),this._boundingVolumeWC=ce.transform(this._boundingVolume,this._modelMatrix),this._boundingVolume2D=new ce}var rre=id.POSITION_INDEX=0,hke=id.SHOW_INDEX=1,fke=id.WIDTH_INDEX=2,pke=id.MATERIAL_INDEX=3,qI=id.POSITION_SIZE_INDEX=4,bke=id.DISTANCE_DISPLAY_CONDITION=5,sre=id.NUMBER_OF_PROPERTIES=6;function Bp(e,t){++e._propertiesChanged[t];let n=e._polylineCollection;d(n)&&(n._updatePolyline(e,t),e._dirty=!0)}Object.defineProperties(id.prototype,{show:{get:function(){return this._show},set:function(e){e!==this._show&&(this._show=e,Bp(this,hke))}},positions:{get:function(){return this._positions},set:function(e){let t=go(e,h.equalsEpsilon);this._loop&&t.length>2&&(t===e&&(t=e.slice()),t.push(h.clone(t[0]))),(this._actualPositions.length!==t.length||this._actualPositions.length!==this._length)&&Bp(this,qI),this._positions=e,this._actualPositions=t,this._length=t.length,this._boundingVolume=ce.fromPoints(this._actualPositions,this._boundingVolume),this._boundingVolumeWC=ce.transform(this._boundingVolume,this._modelMatrix,this._boundingVolumeWC),Bp(this,rre),this.update()}},material:{get:function(){return this._material},set:function(e){this._material!==e&&(this._material=e,Bp(this,pke))}},width:{get:function(){return this._width},set:function(e){let t=this._width;e!==t&&(this._width=e,Bp(this,fke))}},loop:{get:function(){return this._loop},set:function(e){if(e!==this._loop){let t=this._actualPositions;e?t.length>2&&!h.equals(t[0],t[t.length-1])&&(t.length===this._positions.length&&(this._actualPositions=t=this._positions.slice()),t.push(h.clone(t[0]))):t.length>2&&h.equals(t[0],t[t.length-1])&&(t.length-1===this._positions.length?this._actualPositions=this._positions:t.pop()),this._loop=e,Bp(this,qI)}}},id:{get:function(){return this._id},set:function(e){this._id=e,d(this._pickId)&&(this._pickId.object.id=e)}},pickId:{get:function(){return this._pickId}},isDestroyed:{get:function(){return!d(this._polylineCollection)}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){Gt.equals(e,this._distanceDisplayCondition)||(this._distanceDisplayCondition=Gt.clone(e,this._distanceDisplayCondition),Bp(this,bke))}}});id.prototype.update=function(){let e=A.IDENTITY;d(this._polylineCollection)&&(e=this._polylineCollection.modelMatrix);let t=this._segments.positions.length,n=this._segments.lengths,i=this._propertiesChanged[rre]>0||this._propertiesChanged[qI]>0;if((!A.equals(e,this._modelMatrix)||i)&&(this._segments=Xi.wrapLongitude(this._actualPositions,e),this._boundingVolumeWC=ce.transform(this._boundingVolume,e,this._boundingVolumeWC)),this._modelMatrix=A.clone(e,this._modelMatrix),this._segments.positions.length!==t)Bp(this,qI);else{let o=n.length;for(let r=0;r<o;++r)if(n[r]!==this._segments.lengths[r]){Bp(this,qI);break}}};id.prototype.getPickId=function(e){return d(this._pickId)||(this._pickId=e.createPickId({primitive:this,collection:this._polylineCollection,id:this._id})),this._pickId};id.prototype._clean=function(){this._dirty=!1;let e=this._propertiesChanged;for(let t=0;t<sre-1;++t)e[t]=0};id.prototype._destroy=function(){this._pickId=this._pickId&&this._pickId.destroy(),this._material=this._material&&this._material.destroy(),this._polylineCollection=void 0};var lu=id;var yke=lu.SHOW_INDEX,gke=lu.WIDTH_INDEX,ZO=lu.POSITION_INDEX,xke=lu.MATERIAL_INDEX,are=lu.POSITION_SIZE_INDEX,_ke=lu.DISTANCE_DISPLAY_CONDITION,fre=lu.NUMBER_OF_PROPERTIES,Cl={texCoordExpandAndBatchIndex:0,position3DHigh:1,position3DLow:2,position2DHigh:3,position2DLow:4,prevPosition3DHigh:5,prevPosition3DLow:6,prevPosition2DHigh:7,prevPosition2DLow:8,nextPosition3DHigh:9,nextPosition3DLow:10,nextPosition2DHigh:11,nextPosition2DLow:12};function Im(e){e=g(e,g.EMPTY_OBJECT),this.show=g(e.show,!0),this.modelMatrix=A.clone(g(e.modelMatrix,A.IDENTITY)),this._modelMatrix=A.clone(A.IDENTITY),this.debugShowBoundingVolume=g(e.debugShowBoundingVolume,!1),this._opaqueRS=void 0,this._translucentRS=void 0,this._colorCommands=[],this._polylinesUpdated=!1,this._polylinesRemoved=!1,this._createVertexArray=!1,this._propertiesChanged=new Uint32Array(fre),this._polylines=[],this._polylineBuckets={},this._positionBufferUsage={bufferUsage:Ne.STATIC_DRAW,frameCount:0},this._mode=void 0,this._polylinesToUpdate=[],this._vertexArrays=[],this._positionBuffer=void 0,this._texCoordExpandAndBatchIndexBuffer=void 0,this._batchTable=void 0,this._createBatchTable=!1,this._useHighlightColor=!1,this._highlightColor=Y.clone(Y.WHITE);let t=this;this._uniformMap={u_highlightColor:function(){return t._highlightColor}}}Object.defineProperties(Im.prototype,{length:{get:function(){return GO(this),this._polylines.length}}});Im.prototype.add=function(e){let t=new lu(e,this);return t._index=this._polylines.length,this._polylines.push(t),this._createVertexArray=!0,this._createBatchTable=!0,t};Im.prototype.remove=function(e){if(this.contains(e)){if(this._polylinesRemoved=!0,this._createVertexArray=!0,this._createBatchTable=!0,d(e._bucket)){let t=e._bucket;t.shaderProgram=t.shaderProgram&&t.shaderProgram.destroy()}return e._destroy(),!0}return!1};Im.prototype.removeAll=function(){EO(this),xre(this),this._polylineBuckets={},this._polylinesRemoved=!1,this._polylines.length=0,this._polylinesToUpdate.length=0,this._createVertexArray=!0};Im.prototype.contains=function(e){return d(e)&&e._polylineCollection===this};Im.prototype.get=function(e){return GO(this),this._polylines[e]};function Tke(e,t){d(e._batchTable)&&e._batchTable.destroy();let n=[{functionName:"batchTable_getWidthAndShow",componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:2},{functionName:"batchTable_getPickColor",componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:4,normalize:!0},{functionName:"batchTable_getCenterHigh",componentDatatype:Q.FLOAT,componentsPerAttribute:3},{functionName:"batchTable_getCenterLowAndRadius",componentDatatype:Q.FLOAT,componentsPerAttribute:4},{functionName:"batchTable_getDistanceDisplayCondition",componentDatatype:Q.FLOAT,componentsPerAttribute:2}];e._batchTable=new Ng(t,n,e._polylines.length)}var pre=new On,bre=new se,yre=new D;Im.prototype.update=function(e){if(GO(this),this._polylines.length===0||!this.show)return;Zke(this,e);let t=e.context,n=e.mapProjection,i,o=this._propertiesChanged;if(this._createBatchTable){if(kt.maximumVertexTextureImageUnits===0)throw new me("Vertex texture fetch support is required to render polylines. The maximum number of vertex texture image units must be greater than zero.");Tke(this,t),this._createBatchTable=!1}if(this._createVertexArray||Cke(this))dre(this,t,n);else if(this._polylinesUpdated){let c=this._polylinesToUpdate;if(this._mode!==ie.SCENE3D){let l=c.length;for(let u=0;u<l;++u)i=c[u],i.update()}if(o[are]||o[xke])dre(this,t,n);else{let l=c.length,u=this._polylineBuckets;for(let m=0;m<l;++m){i=c[m],o=i._propertiesChanged;let p=i._bucket,y=0;for(let f in u)if(u.hasOwnProperty(f)){if(u[f]===p){o[ZO]&&p.writeUpdate(y,i,this._positionBuffer,n);break}y+=u[f].lengthOfPositions}if((o[yke]||o[gke])&&this._batchTable.setBatchedAttribute(i._index,0,new D(i._width,i._show)),this._batchTable.attributes.length>2){if(o[ZO]||o[are]){let f=e.mode===ie.SCENE2D?i._boundingVolume2D:i._boundingVolumeWC,x=On.fromCartesian(f.center,pre),_=se.fromElements(x.low.x,x.low.y,x.low.z,f.radius,bre);this._batchTable.setBatchedAttribute(i._index,2,x.high),this._batchTable.setBatchedAttribute(i._index,3,_)}if(o[_ke]){let f=yre;f.x=0,f.y=Number.MAX_VALUE;let x=i.distanceDisplayCondition;d(x)&&(f.x=x.near,f.y=x.far),this._batchTable.setBatchedAttribute(i._index,4,f)}}i._clean()}}c.length=0,this._polylinesUpdated=!1}o=this._propertiesChanged;for(let c=0;c<fre;++c)o[c]=0;let r=A.IDENTITY;e.mode===ie.SCENE3D&&(r=this.modelMatrix);let s=e.passes,a=e.morphTime!==0;if((!d(this._opaqueRS)||this._opaqueRS.depthTest.enabled!==a)&&(this._opaqueRS=De.fromCache({depthMask:a,depthTest:{enabled:a}})),(!d(this._translucentRS)||this._translucentRS.depthTest.enabled!==a)&&(this._translucentRS=De.fromCache({blending:dn.ALPHA_BLEND,depthMask:!a,depthTest:{enabled:a}})),this._batchTable.update(e),s.render||s.pick){let c=this._colorCommands;Ske(this,e,c,r)}};var $I=new ce,cre=new ce;function Ske(e,t,n,i){let o=t.context,r=t.commandList,s=n.length,a=0,c=!0,l=e._vertexArrays,u=e.debugShowBoundingVolume,p=e._batchTable.getUniformMapCallback(),y=l.length;for(let f=0;f<y;++f){let x=l[f],_=x.buckets,C=_.length;for(let V=0;V<C;++V){let L=_[V],Z=L.offset,G=L.bucket.shaderProgram,X=L.bucket.polylines,P=X.length,v,F,M=0,b,R;for(let E=0;E<P;++E){let I=X[E],w=Lke(I._material);if(w!==v){if(d(v)&&M>0){let O=F.isTranslucent();a>=s?(b=new nt({owner:e}),n.push(b)):b=n[a],++a,R=xt(p(F._uniforms),e._uniformMap),b.boundingVolume=ce.clone($I,b.boundingVolume),b.modelMatrix=i,b.shaderProgram=G,b.vertexArray=x.va,b.renderState=O?e._translucentRS:e._opaqueRS,b.pass=O?Re.TRANSLUCENT:Re.OPAQUE,b.debugShowBoundingVolume=u,b.pickId="v_pickColor",b.uniformMap=R,b.count=M,b.offset=Z,Z+=M,M=0,c=!0,r.push(b)}F=I._material,F.update(o),v=w}let N=I._locatorBuckets,B=N.length;for(let O=0;O<B;++O){let U=N[O];U.locator===L&&(M+=U.count)}let k;t.mode===ie.SCENE3D?k=I._boundingVolumeWC:t.mode===ie.COLUMBUS_VIEW?k=I._boundingVolume2D:t.mode===ie.SCENE2D?d(I._boundingVolume2D)&&(k=ce.clone(I._boundingVolume2D,cre),k.center.x=0):d(I._boundingVolumeWC)&&d(I._boundingVolume2D)&&(k=ce.union(I._boundingVolumeWC,I._boundingVolume2D,cre)),c?(c=!1,ce.clone(k,$I)):ce.union(k,$I,$I)}d(v)&&M>0&&(a>=s?(b=new nt({owner:e}),n.push(b)):b=n[a],++a,R=xt(p(F._uniforms),e._uniformMap),b.boundingVolume=ce.clone($I,b.boundingVolume),b.modelMatrix=i,b.shaderProgram=G,b.vertexArray=x.va,b.renderState=F.isTranslucent()?e._translucentRS:e._opaqueRS,b.pass=F.isTranslucent()?Re.TRANSLUCENT:Re.OPAQUE,b.debugShowBoundingVolume=u,b.pickId="v_pickColor",b.uniformMap=R,b.count=M,b.offset=Z,c=!0,r.push(b)),v=void 0}}n.length=a}Im.prototype.isDestroyed=function(){return!1};Im.prototype.destroy=function(){return gre(this),EO(this),xre(this),this._batchTable=this._batchTable&&this._batchTable.destroy(),ue(this)};function Cke(e){let t=!1,n=e._propertiesChanged,i=e._positionBufferUsage;return n[ZO]?(i.bufferUsage!==Ne.STREAM_DRAW&&(t=!0,i.bufferUsage=Ne.STREAM_DRAW),i.frameCount=100):i.bufferUsage!==Ne.STATIC_DRAW&&(i.frameCount===0?(t=!0,i.bufferUsage=Ne.STATIC_DRAW):i.frameCount--),t}var lre=[0,0,0];function dre(e,t,n){e._createVertexArray=!1,EO(e),gre(e),Rke(e);let i=[[]],o=i[0],r=e._batchTable,s=e._useHighlightColor,a=[0],c=0,l=[[]],u=0,m=e._polylineBuckets,p,y;for(p in m)m.hasOwnProperty(p)&&(y=m[p],y.updateShader(t,r,s),u+=y.lengthOfPositions);if(u>0){let f=e._mode,x=new Float32Array(6*u*3),_=new Float32Array(u*4),C,V=0,L=0,Z=0;for(p in m)if(m.hasOwnProperty(p)){y=m[p],y.write(x,_,V,L,Z,r,t,n),f===ie.MORPHING&&(d(C)||(C=new Float32Array(6*u*3)),y.writeForMorph(C,V));let R=y.lengthOfPositions;V+=6*R*3,L+=R*4,Z+=R*4,c=y.updateIndices(i,a,l,c)}let G=e._positionBufferUsage.bufferUsage,X=Ne.STATIC_DRAW;e._positionBuffer=mt.createVertexBuffer({context:t,typedArray:x,usage:G});let P;d(C)&&(P=mt.createVertexBuffer({context:t,typedArray:C,usage:G})),e._texCoordExpandAndBatchIndexBuffer=mt.createVertexBuffer({context:t,typedArray:_,usage:X});let v=3*Float32Array.BYTES_PER_ELEMENT,F=4*Float32Array.BYTES_PER_ELEMENT,M=0,b=i.length;for(let R=0;R<b;++R)if(o=i[R],o.length>0){let E=new Uint16Array(o),I=mt.createIndexBuffer({context:t,typedArray:E,usage:Ne.STATIC_DRAW,indexDatatype:Ue.UNSIGNED_SHORT});M+=a[R];let w=6*(R*(v*W.SIXTY_FOUR_KILOBYTES)-M*v),N=v+w,B=v+N,k=v+B,O=v+k,U=v+O,J=R*(F*W.SIXTY_FOUR_KILOBYTES)-M*F,z=[{index:Cl.position3DHigh,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:w,strideInBytes:6*v},{index:Cl.position3DLow,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:N,strideInBytes:6*v},{index:Cl.position2DHigh,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:w,strideInBytes:6*v},{index:Cl.position2DLow,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:N,strideInBytes:6*v},{index:Cl.prevPosition3DHigh,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:B,strideInBytes:6*v},{index:Cl.prevPosition3DLow,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:k,strideInBytes:6*v},{index:Cl.prevPosition2DHigh,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:B,strideInBytes:6*v},{index:Cl.prevPosition2DLow,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:k,strideInBytes:6*v},{index:Cl.nextPosition3DHigh,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:O,strideInBytes:6*v},{index:Cl.nextPosition3DLow,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:U,strideInBytes:6*v},{index:Cl.nextPosition2DHigh,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:O,strideInBytes:6*v},{index:Cl.nextPosition2DLow,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:U,strideInBytes:6*v},{index:Cl.texCoordExpandAndBatchIndex,componentsPerAttribute:4,componentDatatype:Q.FLOAT,vertexBuffer:e._texCoordExpandAndBatchIndexBuffer,offsetInBytes:J}],ee,K,j,q;f===ie.SCENE3D?(K=e._positionBuffer,ee="vertexBuffer",j=lre,q="value"):f===ie.SCENE2D||f===ie.COLUMBUS_VIEW?(K=lre,ee="value",j=e._positionBuffer,q="vertexBuffer"):(K=P,ee="vertexBuffer",j=e._positionBuffer,q="vertexBuffer"),z[0][ee]=K,z[1][ee]=K,z[2][q]=j,z[3][q]=j,z[4][ee]=K,z[5][ee]=K,z[6][q]=j,z[7][q]=j,z[8][ee]=K,z[9][ee]=K,z[10][q]=j,z[11][q]=j;let be=new ti({context:t,attributes:z,indexBuffer:I});e._vertexArrays.push({va:be,buckets:l[R]})}}}function Vke(e,t){return t instanceof Wt?t.id:t}var dN=[];function Lke(e){let t=ki._uniformList[e.type],n=t.length;dN.length=2*n;let i=0;for(let o=0;o<n;++o){let r=t[o];dN[i]=r,dN[i+1]=e._uniforms[r](),i+=2}return`${e.type}:${JSON.stringify(dN,Vke)}`}function Rke(e){let t=e._mode,n=e._modelMatrix,i=e._polylineBuckets={},o=e._polylines,r=o.length;for(let s=0;s<r;++s){let a=o[s];if(a._actualPositions.length>1){a.update();let c=a.material,l=i[c.type];d(l)||(l=i[c.type]=new $h(c,t,n)),l.addPolyline(a)}}}function Zke(e,t){let n=t.mode;(e._mode!==n||!A.equals(e._modelMatrix,e.modelMatrix))&&(e._mode=n,e._modelMatrix=A.clone(e.modelMatrix),e._createVertexArray=!0)}function GO(e){if(e._polylinesRemoved){e._polylinesRemoved=!1;let t=[],n=[],i=0,o,r=e._polylines.length;for(let s=0;s<r;++s)o=e._polylines[s],o.isDestroyed||(o._index=i++,n.push(o),t.push(o));e._polylines=t,e._polylinesToUpdate=n}}function EO(e){let t=e._polylines,n=t.length;for(let i=0;i<n;++i)if(!t[i].isDestroyed){let o=t[i]._bucket;d(o)&&(o.shaderProgram=o.shaderProgram&&o.shaderProgram.destroy())}}function gre(e){let t=e._vertexArrays.length;for(let n=0;n<t;++n)e._vertexArrays[n].va.destroy();e._vertexArrays.length=0}Im.prototype._updatePolyline=function(e,t){this._polylinesUpdated=!0,e._dirty||this._polylinesToUpdate.push(e),++this._propertiesChanged[t]};function xre(e){let t=e._polylines,n=t.length;for(let i=0;i<n;++i)t[i].isDestroyed||t[i]._destroy()}function RO(e,t,n){this.count=e,this.offset=t,this.bucket=n}function $h(e,t,n){this.polylines=[],this.lengthOfPositions=0,this.material=e,this.shaderProgram=void 0,this.mode=t,this.modelMatrix=n}$h.prototype.addPolyline=function(e){this.polylines.push(e),e._actualLength=this.getPolylinePositionsLength(e),this.lengthOfPositions+=e._actualLength,e._bucket=this};$h.prototype.updateShader=function(e,t,n){if(d(this.shaderProgram))return;let i=["DISTANCE_DISPLAY_CONDITION"];n&&i.push("VECTOR_TILE"),this.material.shaderSource.search(/in\s+float\s+v_polylineAngle;/g)!==-1&&i.push("POLYLINE_DASH"),Mt.isInternetExplorer()||i.push("CLIP_POLYLINE");let o=new Ye({defines:i,sources:[`in vec4 v_pickColor;
  7081. `,this.material.shaderSource,Qg]}),r=t.getVertexShaderCallback()(QI),s=new Ye({defines:i,sources:[zl,r]});this.shaderProgram=Qt.fromCache({context:e,vertexShaderSource:s,fragmentShaderSource:o,attributeLocations:Cl})};function _re(e){return h.dot(h.UNIT_X,e._boundingVolume.center)<0||e._boundingVolume.intersectPlane(sn.ORIGIN_ZX_PLANE)===qt.INTERSECTING}$h.prototype.getPolylinePositionsLength=function(e){let t;if(this.mode===ie.SCENE3D||!_re(e))return t=e._actualPositions.length,t*4-4;let n=0,i=e._segments.lengths;t=i.length;for(let o=0;o<t;++o)n+=i[o]*4-4;return n};var as=new h,du=new h,uu=new h,uN=new h,Gke=new se,Eke=new D;$h.prototype.write=function(e,t,n,i,o,r,s,a){let c=this.mode,l=a.ellipsoid.maximumRadius*W.PI,u=this.polylines,m=u.length;for(let p=0;p<m;++p){let y=u[p],f=y.width,x=y.show&&f>0,_=y._index,C=this.getSegments(y,a),V=C.positions,L=C.lengths,Z=V.length,G=y.getPickId(s).color,X=0,P=0,v;for(let B=0;B<Z;++B){B===0?y._loop?v=V[Z-2]:(v=uN,h.subtract(V[0],V[1],v),h.add(V[0],v,v)):v=V[B-1],h.clone(v,du),h.clone(V[B],as),B===Z-1?y._loop?v=V[1]:(v=uN,h.subtract(V[Z-1],V[Z-2],v),h.add(V[Z-1],v,v)):v=V[B+1],h.clone(v,uu);let k=L[X];B===P+k&&(P+=k,++X);let O=B-P===0,U=B===P+L[X]-1;c===ie.SCENE2D&&(du.z=0,as.z=0,uu.z=0),(c===ie.SCENE2D||c===ie.MORPHING)&&(O||U)&&l-Math.abs(as.x)<1&&((as.x<0&&du.x>0||as.x>0&&du.x<0)&&h.clone(as,du),(as.x<0&&uu.x>0||as.x>0&&uu.x<0)&&h.clone(as,uu));let J=O?2:0,z=U?2:4;for(let ee=J;ee<z;++ee){On.writeElements(as,e,n),On.writeElements(du,e,n+6),On.writeElements(uu,e,n+12);let K=ee-2<0?-1:1;t[o]=B/(Z-1),t[o+1]=2*(ee%2)-1,t[o+2]=K,t[o+3]=_,n+=6*3,o+=4}}let F=Gke;F.x=Y.floatToByte(G.red),F.y=Y.floatToByte(G.green),F.z=Y.floatToByte(G.blue),F.w=Y.floatToByte(G.alpha);let M=Eke;M.x=f,M.y=x?1:0;let b=c===ie.SCENE2D?y._boundingVolume2D:y._boundingVolumeWC,R=On.fromCartesian(b.center,pre),E=R.high,I=se.fromElements(R.low.x,R.low.y,R.low.z,b.radius,bre),w=yre;w.x=0,w.y=Number.MAX_VALUE;let N=y.distanceDisplayCondition;d(N)&&(w.x=N.near,w.y=N.far),r.setBatchedAttribute(_,0,M),r.setBatchedAttribute(_,1,F),r.attributes.length>2&&(r.setBatchedAttribute(_,2,E),r.setBatchedAttribute(_,3,I),r.setBatchedAttribute(_,4,w))}};var Xke=new h,Ike=new h,Wke=new h,ure=new h;$h.prototype.writeForMorph=function(e,t){let n=this.modelMatrix,i=this.polylines,o=i.length;for(let r=0;r<o;++r){let s=i[r],a=s._segments.positions,c=s._segments.lengths,l=a.length,u=0,m=0;for(let p=0;p<l;++p){let y;p===0?s._loop?y=a[l-2]:(y=ure,h.subtract(a[0],a[1],y),h.add(a[0],y,y)):y=a[p-1],y=A.multiplyByPoint(n,y,Ike);let f=A.multiplyByPoint(n,a[p],Xke),x;p===l-1?s._loop?x=a[1]:(x=ure,h.subtract(a[l-1],a[l-2],x),h.add(a[l-1],x,x)):x=a[p+1],x=A.multiplyByPoint(n,x,Wke);let _=c[u];p===m+_&&(m+=_,++u);let C=p-m===0,V=p===m+c[u]-1,L=C?2:0,Z=V?2:4;for(let G=L;G<Z;++G)On.writeElements(f,e,t),On.writeElements(y,e,t+6),On.writeElements(x,e,t+12),t+=6*3}}};var Pke=new Array(1);$h.prototype.updateIndices=function(e,t,n,i){let o=n.length-1,r=new RO(0,i,this);n[o].push(r);let s=0,a=e[e.length-1],c=0;a.length>0&&(c=a[a.length-1]+1);let l=this.polylines,u=l.length;for(let m=0;m<u;++m){let p=l[m];p._locatorBuckets=[];let y;if(this.mode===ie.SCENE3D){y=Pke;let x=p._actualPositions.length;if(x>0)y[0]=x;else continue}else y=p._segments.lengths;let f=y.length;if(f>0){let x=0;for(let _=0;_<f;++_){let C=y[_]-1;for(let V=0;V<C;++V)c+4>W.SIXTY_FOUR_KILOBYTES&&(p._locatorBuckets.push({locator:r,count:x}),x=0,t.push(4),a=[],e.push(a),c=0,r.count=s,s=0,i=0,r=new RO(0,0,this),n[++o]=[r]),a.push(c,c+2,c+1),a.push(c+1,c+2,c+3),x+=6,s+=6,i+=6,c+=4}p._locatorBuckets.push({locator:r,count:x}),c+4>W.SIXTY_FOUR_KILOBYTES&&(t.push(0),a=[],e.push(a),c=0,r.count=s,i=0,s=0,r=new RO(0,0,this),n[++o]=[r])}p._clean()}return r.count=s,i};$h.prototype.getPolylineStartIndex=function(e){let t=this.polylines,n=0,i=t.length;for(let o=0;o<i;++o){let r=t[o];if(r===e)break;n+=r._actualLength}return n};var cC={positions:void 0,lengths:void 0},mre=new Array(1),vke=new h,wke=new he;$h.prototype.getSegments=function(e,t){let n=e._actualPositions;if(this.mode===ie.SCENE3D)return mre[0]=n.length,cC.positions=n,cC.lengths=mre,cC;_re(e)&&(n=e._segments.positions);let i=t.ellipsoid,o=[],r=this.modelMatrix,s=n.length,a,c=vke;for(let l=0;l<s;++l)a=n[l],c=A.multiplyByPoint(r,a,c),o.push(t.project(i.cartesianToCartographic(c,wke)));if(o.length>0){e._boundingVolume2D=ce.fromPoints(o,e._boundingVolume2D);let l=e._boundingVolume2D.center;e._boundingVolume2D.center=new h(l.z,l.x,l.y)}return cC.positions=o,cC.lengths=e._segments.lengths,cC};var hre;$h.prototype.writeUpdate=function(e,t,n,i){let o=this.mode,r=i.ellipsoid.maximumRadius*W.PI,s=t._actualLength;if(s){e+=this.getPolylineStartIndex(t);let a=hre,c=6*s*3;!d(a)||a.length<c?a=hre=new Float32Array(c):a.length>c&&(a=new Float32Array(a.buffer,0,c));let l=this.getSegments(t,i),u=l.positions,m=l.lengths,p=0,y=0,f=0,x;s=u.length;for(let _=0;_<s;++_){_===0?t._loop?x=u[s-2]:(x=uN,h.subtract(u[0],u[1],x),h.add(u[0],x,x)):x=u[_-1],h.clone(x,du),h.clone(u[_],as),_===s-1?t._loop?x=u[1]:(x=uN,h.subtract(u[s-1],u[s-2],x),h.add(u[s-1],x,x)):x=u[_+1],h.clone(x,uu);let C=m[y];_===f+C&&(f+=C,++y);let V=_-f===0,L=_===f+m[y]-1;o===ie.SCENE2D&&(du.z=0,as.z=0,uu.z=0),(o===ie.SCENE2D||o===ie.MORPHING)&&(V||L)&&r-Math.abs(as.x)<1&&((as.x<0&&du.x>0||as.x>0&&du.x<0)&&h.clone(as,du),(as.x<0&&uu.x>0||as.x>0&&uu.x<0)&&h.clone(as,uu));let Z=V?2:0,G=L?2:4;for(let X=Z;X<G;++X)On.writeElements(as,a,p),On.writeElements(du,a,p+6),On.writeElements(uu,a,p+12),p+=6*3}n.copyFromArrayView(a,6*3*Float32Array.BYTES_PER_ELEMENT*e)}};var Wm=Im;function jb(e){this._positions=e.positions,this._batchTable=e.batchTable,this._batchIds=e.batchIds,this._rectangle=e.rectangle,this._minHeight=e.minimumHeight,this._maxHeight=e.maximumHeight,this._billboardCollection=new nd({batchTable:e.batchTable}),this._labelCollection=new qh({batchTable:e.batchTable}),this._polylineCollection=new Wm,this._polylineCollection._useHighlightColor=!0,this._packedBuffer=void 0,this._ready=!1,this._promise=void 0,this._error=void 0}Object.defineProperties(jb.prototype,{ready:{get:function(){return this._ready}},pointsLength:{get:function(){return this._billboardCollection.length}},texturesByteLength:{get:function(){let e=this._billboardCollection.textureAtlas.texture.sizeInBytes,t=this._labelCollection._textureAtlas.texture.sizeInBytes;return e+t}}});function Fke(e,t){let n=e._rectangle,i=e._minHeight,o=e._maxHeight,r=2+de.packedLength+re.packedLength,s=new Float64Array(r),a=0;return s[a++]=i,s[a++]=o,de.pack(n,s,a),a+=de.packedLength,re.pack(t,s,a),s}var Ake=new yi("createVectorTilePoints",5),Mke=new h;function Nke(e,t){let n=e._positions,i=e._packedBuffer;d(i)||(n=e._positions=n.slice(),e._batchIds=e._batchIds.slice(),i=e._packedBuffer=Fke(e,t));let o=[n.buffer,i.buffer],r={positions:n.buffer,packedBuffer:i.buffer},s=Ake.scheduleTask(r,o);if(d(s))return s.then(a=>{if(e.isDestroyed())return;e._positions=new Float64Array(a.positions);let c=e._billboardCollection,l=e._labelCollection,u=e._polylineCollection;n=e._positions;let m=e._batchIds,p=n.length/3;for(let y=0;y<p;++y){let f=m[y],x=h.unpack(n,y*3,Mke),_=c.add();_.position=x,_._batchIndex=f;let C=l.add();C.text=" ",C.position=x,C._batchIndex=f;let V=u.add();V.positions=[h.clone(x),h.clone(x)]}e._positions=void 0,e._packedBuffer=void 0,e._ready=!0}).catch(a=>{e.isDestroyed()||(e._error=a)})}jb.prototype.createFeatures=function(e,t){let n=this._billboardCollection,i=this._labelCollection,o=this._polylineCollection,r=this._batchIds,s=r.length;for(let a=0;a<s;++a){let c=r[a],l=n.get(a),u=i.get(a),m=o.get(a);t[c]=new kp(e,c,l,u,m)}};jb.prototype.applyDebugSettings=function(e,t){e?(Y.clone(t,this._billboardCollection._highlightColor),Y.clone(t,this._labelCollection._highlightColor),Y.clone(t,this._polylineCollection._highlightColor)):(Y.clone(Y.WHITE,this._billboardCollection._highlightColor),Y.clone(Y.WHITE,this._labelCollection._highlightColor),Y.clone(Y.WHITE,this._polylineCollection._highlightColor))};function Uke(e,t){let n=e._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];s.show=!0,s.pointSize=kp.defaultPointSize,s.color=kp.defaultColor,s.pointOutlineColor=kp.defaultPointOutlineColor,s.pointOutlineWidth=kp.defaultPointOutlineWidth,s.labelColor=Y.WHITE,s.labelOutlineColor=Y.WHITE,s.labelOutlineWidth=1,s.font="30px sans-serif",s.labelStyle=vo.FILL,s.labelText=void 0,s.backgroundColor=new Y(.165,.165,.165,.8),s.backgroundPadding=new D(7,5),s.backgroundEnabled=!1,s.scaleByDistance=void 0,s.translucencyByDistance=void 0,s.distanceDisplayCondition=void 0,s.heightOffset=0,s.anchorLineEnabled=!1,s.anchorLineColor=Y.WHITE,s.image=void 0,s.disableDepthTestDistance=0,s.horizontalOrigin=pi.CENTER,s.verticalOrigin=In.CENTER,s.labelHorizontalOrigin=pi.RIGHT,s.labelVerticalOrigin=In.BASELINE}}var kke=new Y,Dke=new Y,Bke=new Y,Yke=new Y,Oke=new Y,Kke=new Y,eW=new It,tW=new It,XO=new Gt;jb.prototype.applyStyle=function(e,t){if(!d(e)){Uke(this,t);return}let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];if(d(e.show)&&(s.show=e.show.evaluate(s)),d(e.pointSize)&&(s.pointSize=e.pointSize.evaluate(s)),d(e.color)&&(s.color=e.color.evaluateColor(s,kke)),d(e.pointOutlineColor)&&(s.pointOutlineColor=e.pointOutlineColor.evaluateColor(s,Dke)),d(e.pointOutlineWidth)&&(s.pointOutlineWidth=e.pointOutlineWidth.evaluate(s)),d(e.labelColor)&&(s.labelColor=e.labelColor.evaluateColor(s,Bke)),d(e.labelOutlineColor)&&(s.labelOutlineColor=e.labelOutlineColor.evaluateColor(s,Yke)),d(e.labelOutlineWidth)&&(s.labelOutlineWidth=e.labelOutlineWidth.evaluate(s)),d(e.font)&&(s.font=e.font.evaluate(s)),d(e.labelStyle)&&(s.labelStyle=e.labelStyle.evaluate(s)),d(e.labelText)?s.labelText=e.labelText.evaluate(s):s.labelText=void 0,d(e.backgroundColor)&&(s.backgroundColor=e.backgroundColor.evaluateColor(s,Oke)),d(e.backgroundPadding)&&(s.backgroundPadding=e.backgroundPadding.evaluate(s)),d(e.backgroundEnabled)&&(s.backgroundEnabled=e.backgroundEnabled.evaluate(s)),d(e.scaleByDistance)){let a=e.scaleByDistance.evaluate(s);d(a)?(eW.near=a.x,eW.nearValue=a.y,eW.far=a.z,eW.farValue=a.w,s.scaleByDistance=eW):s.scaleByDistance=void 0}else s.scaleByDistance=void 0;if(d(e.translucencyByDistance)){let a=e.translucencyByDistance.evaluate(s);d(a)?(tW.near=a.x,tW.nearValue=a.y,tW.far=a.z,tW.farValue=a.w,s.translucencyByDistance=tW):s.translucencyByDistance=void 0}else s.translucencyByDistance=void 0;if(d(e.distanceDisplayCondition)){let a=e.distanceDisplayCondition.evaluate(s);d(a)?(XO.near=a.x,XO.far=a.y,s.distanceDisplayCondition=XO):s.distanceDisplayCondition=void 0}else s.distanceDisplayCondition=void 0;d(e.heightOffset)&&(s.heightOffset=e.heightOffset.evaluate(s)),d(e.anchorLineEnabled)&&(s.anchorLineEnabled=e.anchorLineEnabled.evaluate(s)),d(e.anchorLineColor)&&(s.anchorLineColor=e.anchorLineColor.evaluateColor(s,Kke)),d(e.image)?s.image=e.image.evaluate(s):s.image=void 0,d(e.disableDepthTestDistance)&&(s.disableDepthTestDistance=e.disableDepthTestDistance.evaluate(s)),d(e.horizontalOrigin)&&(s.horizontalOrigin=e.horizontalOrigin.evaluate(s)),d(e.verticalOrigin)&&(s.verticalOrigin=e.verticalOrigin.evaluate(s)),d(e.labelHorizontalOrigin)&&(s.labelHorizontalOrigin=e.labelHorizontalOrigin.evaluate(s)),d(e.labelVerticalOrigin)&&(s.labelVerticalOrigin=e.labelVerticalOrigin.evaluate(s))}};jb.prototype.update=function(e){if(!this._ready){if(d(this._promise)||(this._promise=Nke(this,e.mapProjection.ellipsoid)),d(this._error)){let t=this._error;throw this._error=void 0,t}return}this._polylineCollection.update(e),this._billboardCollection.update(e),this._labelCollection.update(e)};jb.prototype.isDestroyed=function(){return!1};jb.prototype.destroy=function(){return this._billboardCollection=this._billboardCollection&&this._billboardCollection.destroy(),this._labelCollection=this._labelCollection&&this._labelCollection.destroy(),this._polylineCollection=this._polylineCollection&&this._polylineCollection.destroy(),ue(this)};var nW=jb;var uRn=T(S(),1);function Yp(e){this._batchTable=e.batchTable,this._batchIds=e.batchIds,this._positions=e.positions,this._counts=e.counts,this._indices=e.indices,this._indexCounts=e.indexCounts,this._indexOffsets=void 0,this._batchTableColors=void 0,this._packedBuffer=void 0,this._batchedPositions=void 0,this._transferrableBatchIds=void 0,this._vertexBatchIds=void 0,this._ellipsoid=g(e.ellipsoid,re.WGS84),this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._polygonMinimumHeights=e.polygonMinimumHeights,this._polygonMaximumHeights=e.polygonMaximumHeights,this._center=g(e.center,h.ZERO),this._rectangle=e.rectangle,this._center=void 0,this._boundingVolume=e.boundingVolume,this._boundingVolumes=void 0,this._batchedIndices=void 0,this._ready=!1,this._promise=void 0,this._error=void 0,this._primitive=void 0,this.debugWireframe=!1,this.forceRebatch=!1,this.classificationType=kn.BOTH}Object.defineProperties(Yp.prototype,{trianglesLength:{get:function(){return d(this._primitive)?this._primitive.trianglesLength:0}},geometryByteLength:{get:function(){return d(this._primitive)?this._primitive.geometryByteLength:0}},ready:{get:function(){return this._ready}}});function Hke(e){let t=new Float64Array(3+h.packedLength+re.packedLength+de.packedLength),n=0;return t[n++]=e._indices.BYTES_PER_ELEMENT,t[n++]=e._minimumHeight,t[n++]=e._maximumHeight,h.pack(e._center,t,n),n+=h.packedLength,re.pack(e._ellipsoid,t,n),n+=re.packedLength,de.pack(e._rectangle,t,n),t}function zke(e,t){let n=1,i=t[n++],o=e._boundingVolumes=new Array(i);for(let a=0;a<i;++a)o[a]=Wn.unpack(t,n),n+=Wn.packedLength;let r=t[n++],s=e._batchedIndices=new Array(r);for(let a=0;a<r;++a){let c=Y.unpack(t,n);n+=Y.packedLength;let l=t[n++],u=t[n++],m=t[n++],p=new Array(m);for(let y=0;y<m;++y)p[y]=t[n++];s[a]=new Dh({color:c,offset:l,count:u,batchIds:p})}}var Jke=new yi("createVectorTilePolygons",5),Qke=new Y;function jke(e){if(d(e._primitive))return;let t=e._positions,n=e._counts,i=e._indexCounts,o=e._indices,r=e._transferrableBatchIds,s=e._batchTableColors,a=e._packedBuffer;if(!d(s)){t=e._positions=e._positions.slice(),n=e._counts=e._counts.slice(),i=e._indexCounts=e._indexCounts.slice(),o=e._indices=e._indices.slice(),e._center=e._ellipsoid.cartographicToCartesian(de.center(e._rectangle)),r=e._transferrableBatchIds=new Uint32Array(e._batchIds),s=e._batchTableColors=new Uint32Array(r.length);let y=e._batchTable,f=s.length;for(let x=0;x<f;++x){let _=y.getColor(x,Qke);s[x]=_.toRgba()}a=e._packedBuffer=Hke(e)}let c=[t.buffer,n.buffer,i.buffer,o.buffer,r.buffer,s.buffer,a.buffer],l={packedBuffer:a.buffer,positions:t.buffer,counts:n.buffer,indexCounts:i.buffer,indices:o.buffer,batchIds:r.buffer,batchTableColors:s.buffer},u=e._polygonMinimumHeights,m=e._polygonMaximumHeights;d(u)&&d(m)&&(u=u.slice(),m=m.slice(),c.push(u.buffer,m.buffer),l.minimumHeights=u,l.maximumHeights=m);let p=Jke.scheduleTask(l,c);if(d(p))return p.then(y=>{if(e.isDestroyed())return;e._positions=void 0,e._counts=void 0,e._polygonMinimumHeights=void 0,e._polygonMaximumHeights=void 0;let f=new Float64Array(y.packedBuffer),x=f[0];zke(e,f),e._indices=Ue.getSizeInBytes(x)===2?new Uint16Array(y.indices):new Uint32Array(y.indices),e._indexOffsets=new Uint32Array(y.indexOffsets),e._indexCounts=new Uint32Array(y.indexCounts),e._batchedPositions=new Float32Array(y.positions),e._vertexBatchIds=new Uint16Array(y.batchIds),qke(e),e._ready=!0}).catch(y=>{e.isDestroyed()||(e._error=y)})}function qke(e){d(e._primitive)||(e._primitive=new px({batchTable:e._batchTable,positions:e._batchedPositions,batchIds:e._batchIds,vertexBatchIds:e._vertexBatchIds,indices:e._indices,indexOffsets:e._indexOffsets,indexCounts:e._indexCounts,batchedIndices:e._batchedIndices,boundingVolume:e._boundingVolume,boundingVolumes:e._boundingVolumes,center:e._center}),e._batchTable=void 0,e._batchIds=void 0,e._positions=void 0,e._counts=void 0,e._indices=void 0,e._indexCounts=void 0,e._indexOffsets=void 0,e._batchTableColors=void 0,e._packedBuffer=void 0,e._batchedPositions=void 0,e._transferrableBatchIds=void 0,e._vertexBatchIds=void 0,e._ellipsoid=void 0,e._minimumHeight=void 0,e._maximumHeight=void 0,e._polygonMinimumHeights=void 0,e._polygonMaximumHeights=void 0,e._center=void 0,e._rectangle=void 0,e._boundingVolume=void 0,e._boundingVolumes=void 0,e._batchedIndices=void 0)}Yp.prototype.createFeatures=function(e,t){this._primitive.createFeatures(e,t)};Yp.prototype.applyDebugSettings=function(e,t){this._primitive.applyDebugSettings(e,t)};Yp.prototype.applyStyle=function(e,t){this._primitive.applyStyle(e,t)};Yp.prototype.updateCommands=function(e,t){this._primitive.updateCommands(e,t)};Yp.prototype.update=function(e){if(!this._ready){if(d(this._promise)||(this._promise=jke(this)),d(this._error)){let t=this._error;throw this._error=void 0,t}return}this._primitive.debugWireframe=this.debugWireframe,this._primitive.forceRebatch=this.forceRebatch,this._primitive.classificationType=this.classificationType,this._primitive.update(e)};Yp.prototype.isDestroyed=function(){return!1};Yp.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),ue(this)};var iW=Yp;var NRn=T(S(),1);var hRn=T(S(),1),oW=`in vec4 currentPosition;
  7082. in vec4 previousPosition;
  7083. in vec4 nextPosition;
  7084. in vec2 expandAndWidth;
  7085. in float a_batchId;
  7086. uniform mat4 u_modifiedModelView;
  7087. void main()
  7088. {
  7089. float expandDir = expandAndWidth.x;
  7090. float width = abs(expandAndWidth.y) + 0.5;
  7091. bool usePrev = expandAndWidth.y < 0.0;
  7092. vec4 p = u_modifiedModelView * currentPosition;
  7093. vec4 prev = u_modifiedModelView * previousPosition;
  7094. vec4 next = u_modifiedModelView * nextPosition;
  7095. float angle;
  7096. vec4 positionWC = getPolylineWindowCoordinatesEC(p, prev, next, expandDir, width, usePrev, angle);
  7097. gl_Position = czm_viewportOrthographic * positionWC;
  7098. }
  7099. `;function Pm(e){this._positions=e.positions,this._widths=e.widths,this._counts=e.counts,this._batchIds=e.batchIds,this._ellipsoid=g(e.ellipsoid,re.WGS84),this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._center=e.center,this._rectangle=e.rectangle,this._boundingVolume=e.boundingVolume,this._batchTable=e.batchTable,this._va=void 0,this._sp=void 0,this._rs=void 0,this._uniformMap=void 0,this._command=void 0,this._transferrableBatchIds=void 0,this._packedBuffer=void 0,this._keepDecodedPositions=e.keepDecodedPositions,this._decodedPositions=void 0,this._decodedPositionOffsets=void 0,this._currentPositions=void 0,this._previousPositions=void 0,this._nextPositions=void 0,this._expandAndWidth=void 0,this._vertexBatchIds=void 0,this._indices=void 0,this._constantColor=Y.clone(Y.WHITE),this._highlightColor=this._constantColor,this._trianglesLength=0,this._geometryByteLength=0,this._ready=!1,this._promise=void 0,this._error=void 0}Object.defineProperties(Pm.prototype,{trianglesLength:{get:function(){return this._trianglesLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},ready:{get:function(){return this._ready}}});function $ke(e){let t=e._rectangle,n=e._minimumHeight,i=e._maximumHeight,o=e._ellipsoid,r=e._center,s=2+de.packedLength+re.packedLength+h.packedLength,a=new Float64Array(s),c=0;return a[c++]=n,a[c++]=i,de.pack(t,a,c),c+=de.packedLength,re.pack(o,a,c),c+=re.packedLength,h.pack(r,a,c),a}var eDe=new yi("createVectorTilePolylines",5),lC={previousPosition:0,currentPosition:1,nextPosition:2,expandAndWidth:3,a_batchId:4};function tDe(e,t){if(d(e._va))return;let n=e._positions,i=e._widths,o=e._counts,r=e._transferrableBatchIds,s=e._packedBuffer;d(s)||(n=e._positions=n.slice(),i=e._widths=i.slice(),o=e._counts=o.slice(),r=e._transferrableBatchIds=e._batchIds.slice(),s=e._packedBuffer=$ke(e));let a=[n.buffer,i.buffer,o.buffer,r.buffer,s.buffer],c={positions:n.buffer,widths:i.buffer,counts:o.buffer,batchIds:r.buffer,packedBuffer:s.buffer,keepDecodedPositions:e._keepDecodedPositions},l=eDe.scheduleTask(c,a);if(d(l))return l.then(function(u){if(e.isDestroyed())return;e._keepDecodedPositions&&(e._decodedPositions=new Float64Array(u.decodedPositions),e._decodedPositionOffsets=new Uint32Array(u.decodedPositionOffsets)),e._currentPositions=new Float32Array(u.currentPositions),e._previousPositions=new Float32Array(u.previousPositions),e._nextPositions=new Float32Array(u.nextPositions),e._expandAndWidth=new Float32Array(u.expandAndWidth),e._vertexBatchIds=new Uint16Array(u.batchIds);let m=u.indexDatatype;e._indices=m===Ue.UNSIGNED_SHORT?new Uint16Array(u.indices):new Uint32Array(u.indices),nDe(e,t),e._ready=!0}).catch(u=>{e.isDestroyed()||(e._error=u)})}function nDe(e,t){if(!d(e._va)){let n=e._currentPositions,i=e._previousPositions,o=e._nextPositions,r=e._expandAndWidth,s=e._vertexBatchIds,a=e._indices,c=i.byteLength+n.byteLength+o.byteLength;c+=r.byteLength+s.byteLength+a.byteLength,e._trianglesLength=a.length/3,e._geometryByteLength=c;let l=mt.createVertexBuffer({context:t,typedArray:i,usage:Ne.STATIC_DRAW}),u=mt.createVertexBuffer({context:t,typedArray:n,usage:Ne.STATIC_DRAW}),m=mt.createVertexBuffer({context:t,typedArray:o,usage:Ne.STATIC_DRAW}),p=mt.createVertexBuffer({context:t,typedArray:r,usage:Ne.STATIC_DRAW}),y=mt.createVertexBuffer({context:t,typedArray:s,usage:Ne.STATIC_DRAW}),f=mt.createIndexBuffer({context:t,typedArray:a,usage:Ne.STATIC_DRAW,indexDatatype:a.BYTES_PER_ELEMENT===2?Ue.UNSIGNED_SHORT:Ue.UNSIGNED_INT}),x=[{index:lC.previousPosition,vertexBuffer:l,componentDatatype:Q.FLOAT,componentsPerAttribute:3},{index:lC.currentPosition,vertexBuffer:u,componentDatatype:Q.FLOAT,componentsPerAttribute:3},{index:lC.nextPosition,vertexBuffer:m,componentDatatype:Q.FLOAT,componentsPerAttribute:3},{index:lC.expandAndWidth,vertexBuffer:p,componentDatatype:Q.FLOAT,componentsPerAttribute:2},{index:lC.a_batchId,vertexBuffer:y,componentDatatype:Q.UNSIGNED_SHORT,componentsPerAttribute:1}];e._va=new ti({context:t,attributes:x,indexBuffer:f}),e._positions=void 0,e._widths=void 0,e._counts=void 0,e._ellipsoid=void 0,e._minimumHeight=void 0,e._maximumHeight=void 0,e._rectangle=void 0,e._transferrableBatchIds=void 0,e._packedBuffer=void 0,e._currentPositions=void 0,e._previousPositions=void 0,e._nextPositions=void 0,e._expandAndWidth=void 0,e._vertexBatchIds=void 0,e._indices=void 0}}var rW=new A,Tre=new h;function iDe(e,t){d(e._uniformMap)||(e._uniformMap={u_modifiedModelView:function(){let n=t.uniformState.view;return A.clone(n,rW),A.multiplyByPoint(rW,e._center,Tre),A.setTranslation(rW,Tre,rW),rW},u_highlightColor:function(){return e._highlightColor}})}function oDe(e){if(d(e._rs))return;let t={enabled:!0,factor:-5,units:-5};e._rs=De.fromCache({blending:dn.ALPHA_BLEND,depthMask:!1,depthTest:{enabled:!0},polygonOffset:t})}var rDe=`uniform vec4 u_highlightColor;
  7100. void main()
  7101. {
  7102. out_FragColor = u_highlightColor;
  7103. }
  7104. `;function sDe(e,t){if(d(e._sp))return;let n=e._batchTable,i=n.getVertexShaderCallback(!1,"a_batchId",void 0)(oW),o=n.getFragmentShaderCallback(!1,void 0,!1)(rDe),r=new Ye({defines:["VECTOR_TILE",Mt.isInternetExplorer()?"":"CLIP_POLYLINE"],sources:[zl,i]}),s=new Ye({defines:["VECTOR_TILE"],sources:[o]});e._sp=Qt.fromCache({context:t,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:lC})}function aDe(e,t){if(!d(e._command)){let n=e._batchTable.getUniformMapCallback()(e._uniformMap);e._command=new nt({owner:e,vertexArray:e._va,renderState:e._rs,shaderProgram:e._sp,uniformMap:n,boundingVolume:e._boundingVolume,pass:Re.TRANSLUCENT,pickId:e._batchTable.getPickId()})}t.commandList.push(e._command)}Pm.getPolylinePositions=function(e,t){let n=e._batchIds,i=e._decodedPositions,o=e._decodedPositionOffsets;if(!d(n)||!d(i))return;let r,s,a=n.length,c=0,l=0;for(r=0;r<a;++r)n[r]===t&&(c+=o[r+1]-o[r]);if(c===0)return;let u=new Float64Array(c*3);for(r=0;r<a;++r)if(n[r]===t){let m=o[r],p=o[r+1]-m;for(s=0;s<p;++s){let y=(m+s)*3;u[l++]=i[y],u[l++]=i[y+1],u[l++]=i[y+2]}}return u};Pm.prototype.getPositions=function(e){return Pm.getPolylinePositions(this,e)};Pm.prototype.createFeatures=function(e,t){let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o];t[r]=new Ts(e,r)}};Pm.prototype.applyDebugSettings=function(e,t){this._highlightColor=e?t:this._constantColor};function cDe(e,t){let n=e._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];s.show=!0,s.color=Y.WHITE}}var lDe=new Y,dDe=Y.WHITE,uDe=!0;Pm.prototype.applyStyle=function(e,t){if(!d(e)){cDe(this,t);return}let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];s.color=d(e.color)?e.color.evaluateColor(s,lDe):dDe,s.show=d(e.show)?e.show.evaluate(s):uDe}};Pm.prototype.update=function(e){let t=e.context;if(!this._ready){if(d(this._promise)||(this._promise=tDe(this,t)),d(this._error)){let i=this._error;throw this._error=void 0,i}return}iDe(this,t),sDe(this,t),oDe(this);let n=e.passes;(n.render||n.pick)&&aDe(this,e)};Pm.prototype.isDestroyed=function(){return!1};Pm.prototype.destroy=function(){return this._va=this._va&&this._va.destroy(),this._sp=this._sp&&this._sp.destroy(),ue(this)};var Hx=Pm;var LZn=T(S(),1);var kRn=T(S(),1),sW=`in vec3 startEllipsoidNormal;
  7105. in vec3 endEllipsoidNormal;
  7106. in vec4 startPositionAndHeight;
  7107. in vec4 endPositionAndHeight;
  7108. in vec4 startFaceNormalAndVertexCorner;
  7109. in vec4 endFaceNormalAndHalfWidth;
  7110. in float a_batchId;
  7111. uniform mat4 u_modifiedModelView;
  7112. uniform vec2 u_minimumMaximumVectorHeights;
  7113. out vec4 v_startPlaneEC;
  7114. out vec4 v_endPlaneEC;
  7115. out vec4 v_rightPlaneEC;
  7116. out float v_halfWidth;
  7117. out vec3 v_volumeUpEC;
  7118. void main()
  7119. {
  7120. // vertex corner IDs
  7121. // 3-----------7
  7122. // /| left /|
  7123. // / | 1 / |
  7124. // 2-----------6 5 end
  7125. // | / | /
  7126. // start |/ right |/
  7127. // 0-----------4
  7128. //
  7129. float isEnd = floor(startFaceNormalAndVertexCorner.w * 0.251); // 0 for front, 1 for end
  7130. float isTop = floor(startFaceNormalAndVertexCorner.w * mix(0.51, 0.19, isEnd)); // 0 for bottom, 1 for top
  7131. vec3 forward = endPositionAndHeight.xyz - startPositionAndHeight.xyz;
  7132. vec3 right = normalize(cross(forward, startEllipsoidNormal));
  7133. vec4 position = vec4(startPositionAndHeight.xyz, 1.0);
  7134. position.xyz += forward * isEnd;
  7135. v_volumeUpEC = czm_normal * normalize(cross(right, forward));
  7136. // Push for volume height
  7137. float offset;
  7138. vec3 ellipsoidNormal = mix(startEllipsoidNormal, endEllipsoidNormal, isEnd);
  7139. // offset height to create volume
  7140. offset = mix(startPositionAndHeight.w, endPositionAndHeight.w, isEnd);
  7141. offset = mix(u_minimumMaximumVectorHeights.y, u_minimumMaximumVectorHeights.x, isTop) - offset;
  7142. position.xyz += offset * ellipsoidNormal;
  7143. // move from RTC to EC
  7144. position = u_modifiedModelView * position;
  7145. right = czm_normal * right;
  7146. // Push for width in a direction that is in the start or end plane and in a plane with right
  7147. // N = normalEC ("right-facing" direction for push)
  7148. // R = right
  7149. // p = angle between N and R
  7150. // w = distance to push along R if R == N
  7151. // d = distance to push along N
  7152. //
  7153. // N R
  7154. // { p| } * cos(p) = dot(N, R) = w / d
  7155. // d | |w * d = w / dot(N, R)
  7156. // { | }
  7157. // o---------- polyline segment ---->
  7158. //
  7159. vec3 scratchNormal = mix(-startFaceNormalAndVertexCorner.xyz, endFaceNormalAndHalfWidth.xyz, isEnd);
  7160. scratchNormal = cross(scratchNormal, mix(startEllipsoidNormal, endEllipsoidNormal, isEnd));
  7161. vec3 miterPushNormal = czm_normal * normalize(scratchNormal);
  7162. offset = 2.0 * endFaceNormalAndHalfWidth.w * max(0.0, czm_metersPerPixel(position)); // offset = widthEC
  7163. offset = offset / dot(miterPushNormal, right);
  7164. position.xyz += miterPushNormal * (offset * sign(0.5 - mod(startFaceNormalAndVertexCorner.w, 2.0)));
  7165. gl_Position = czm_depthClamp(czm_projection * position);
  7166. position = u_modifiedModelView * vec4(startPositionAndHeight.xyz, 1.0);
  7167. vec3 startNormalEC = czm_normal * startFaceNormalAndVertexCorner.xyz;
  7168. v_startPlaneEC = vec4(startNormalEC, -dot(startNormalEC, position.xyz));
  7169. v_rightPlaneEC = vec4(right, -dot(right, position.xyz));
  7170. position = u_modifiedModelView * vec4(endPositionAndHeight.xyz, 1.0);
  7171. vec3 endNormalEC = czm_normal * endFaceNormalAndHalfWidth.xyz;
  7172. v_endPlaneEC = vec4(endNormalEC, -dot(endNormalEC, position.xyz));
  7173. v_halfWidth = endFaceNormalAndHalfWidth.w;
  7174. }
  7175. `;var BRn=T(S(),1),aW=`in vec4 v_startPlaneEC;
  7176. in vec4 v_endPlaneEC;
  7177. in vec4 v_rightPlaneEC;
  7178. in float v_halfWidth;
  7179. in vec3 v_volumeUpEC;
  7180. uniform vec4 u_highlightColor;
  7181. void main()
  7182. {
  7183. float logDepthOrDepth = czm_branchFreeTernary(czm_sceneMode == czm_sceneMode2D, gl_FragCoord.z, czm_unpackDepth(texture(czm_globeDepthTexture, gl_FragCoord.xy / czm_viewport.zw)));
  7184. // Discard for sky
  7185. if (logDepthOrDepth == 0.0) {
  7186. #ifdef DEBUG_SHOW_VOLUME
  7187. out_FragColor = vec4(0.0, 0.0, 1.0, 0.5);
  7188. return;
  7189. #else // DEBUG_SHOW_VOLUME
  7190. discard;
  7191. #endif // DEBUG_SHOW_VOLUME
  7192. }
  7193. vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth);
  7194. eyeCoordinate /= eyeCoordinate.w;
  7195. float halfMaxWidth = v_halfWidth * czm_metersPerPixel(eyeCoordinate);
  7196. // Expand halfMaxWidth if direction to camera is almost perpendicular with the volume's up direction
  7197. halfMaxWidth += halfMaxWidth * (1.0 - dot(-normalize(eyeCoordinate.xyz), v_volumeUpEC));
  7198. // Check distance of the eye coordinate against the right-facing plane
  7199. float widthwiseDistance = czm_planeDistance(v_rightPlaneEC, eyeCoordinate.xyz);
  7200. // Check eye coordinate against the mitering planes
  7201. float distanceFromStart = czm_planeDistance(v_startPlaneEC, eyeCoordinate.xyz);
  7202. float distanceFromEnd = czm_planeDistance(v_endPlaneEC, eyeCoordinate.xyz);
  7203. if (abs(widthwiseDistance) > halfMaxWidth || distanceFromStart < 0.0 || distanceFromEnd < 0.0) {
  7204. #ifdef DEBUG_SHOW_VOLUME
  7205. out_FragColor = vec4(logDepthOrDepth, 0.0, 0.0, 0.5);
  7206. return;
  7207. #else // DEBUG_SHOW_VOLUME
  7208. discard;
  7209. #endif // DEBUG_SHOW_VOLUME
  7210. }
  7211. out_FragColor = u_highlightColor;
  7212. czm_writeDepthClamp();
  7213. }
  7214. `;function Op(e){this._positions=e.positions,this._widths=e.widths,this._counts=e.counts,this._batchIds=e.batchIds,this._ellipsoid=g(e.ellipsoid,re.WGS84),this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._center=e.center,this._rectangle=e.rectangle,this._batchTable=e.batchTable,this._va=void 0,this._sp=void 0,this._rs=void 0,this._uniformMap=void 0,this._command=void 0,this._transferrableBatchIds=void 0,this._packedBuffer=void 0,this._minimumMaximumVectorHeights=new D(li._defaultMinTerrainHeight,li._defaultMaxTerrainHeight),this._boundingVolume=Wn.fromRectangle(e.rectangle,li._defaultMinTerrainHeight,li._defaultMaxTerrainHeight,this._ellipsoid),this._classificationType=e.classificationType,this._keepDecodedPositions=e.keepDecodedPositions,this._decodedPositions=void 0,this._decodedPositionOffsets=void 0,this._startEllipsoidNormals=void 0,this._endEllipsoidNormals=void 0,this._startPositionAndHeights=void 0,this._startFaceNormalAndVertexCornerIds=void 0,this._endPositionAndHeights=void 0,this._endFaceNormalAndHalfWidths=void 0,this._vertexBatchIds=void 0,this._indices=void 0,this._constantColor=Y.clone(Y.WHITE),this._highlightColor=this._constantColor,this._trianglesLength=0,this._geometryByteLength=0,this._ready=!1,this._promise=void 0,this._error=void 0}Object.defineProperties(Op.prototype,{trianglesLength:{get:function(){return this._trianglesLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},ready:{get:function(){return this._ready}}});function mDe(e,t,n){let i=li.getMinimumMaximumHeights(t,n),o=i.minimumTerrainHeight,r=i.maximumTerrainHeight,s=e._minimumMaximumVectorHeights;s.x=o,s.y=r;let a=e._boundingVolume,c=e._rectangle;Wn.fromRectangle(c,o,r,n,a)}function hDe(e){let t=e._rectangle,n=e._minimumHeight,i=e._maximumHeight,o=e._ellipsoid,r=e._center,s=2+de.packedLength+re.packedLength+h.packedLength,a=new Float64Array(s),c=0;return a[c++]=n,a[c++]=i,de.pack(t,a,c),c+=de.packedLength,re.pack(o,a,c),c+=re.packedLength,h.pack(r,a,c),a}var fDe=new yi("createVectorTileClampedPolylines"),qb={startEllipsoidNormal:0,endEllipsoidNormal:1,startPositionAndHeight:2,endPositionAndHeight:3,startFaceNormalAndVertexCorner:4,endFaceNormalAndHalfWidth:5,a_batchId:6};function pDe(e,t){if(d(e._va))return;let n=e._positions,i=e._widths,o=e._counts,r=e._transferrableBatchIds,s=e._packedBuffer;d(s)||(n=e._positions=n.slice(),i=e._widths=i.slice(),o=e._counts=o.slice(),r=e._transferrableBatchIds=e._batchIds.slice(),s=e._packedBuffer=hDe(e));let a=[n.buffer,i.buffer,o.buffer,r.buffer,s.buffer],c={positions:n.buffer,widths:i.buffer,counts:o.buffer,batchIds:r.buffer,packedBuffer:s.buffer,keepDecodedPositions:e._keepDecodedPositions},l=fDe.scheduleTask(c,a);if(d(l))return l.then(function(u){if(e.isDestroyed())return;e._keepDecodedPositions&&(e._decodedPositions=new Float64Array(u.decodedPositions),e._decodedPositionOffsets=new Uint32Array(u.decodedPositionOffsets)),e._startEllipsoidNormals=new Float32Array(u.startEllipsoidNormals),e._endEllipsoidNormals=new Float32Array(u.endEllipsoidNormals),e._startPositionAndHeights=new Float32Array(u.startPositionAndHeights),e._startFaceNormalAndVertexCornerIds=new Float32Array(u.startFaceNormalAndVertexCornerIds),e._endPositionAndHeights=new Float32Array(u.endPositionAndHeights),e._endFaceNormalAndHalfWidths=new Float32Array(u.endFaceNormalAndHalfWidths),e._vertexBatchIds=new Uint16Array(u.vertexBatchIds);let m=u.indexDatatype;e._indices=m===Ue.UNSIGNED_SHORT?new Uint16Array(u.indices):new Uint32Array(u.indices),bDe(e,t),e._ready=!0}).catch(u=>{e.isDestroyed()||(e._error=u)})}function bDe(e,t){if(!d(e._va)){let n=e._startEllipsoidNormals,i=e._endEllipsoidNormals,o=e._startPositionAndHeights,r=e._endPositionAndHeights,s=e._startFaceNormalAndVertexCornerIds,a=e._endFaceNormalAndHalfWidths,c=e._vertexBatchIds,l=e._indices,u=n.byteLength+i.byteLength;u+=o.byteLength+r.byteLength,u+=s.byteLength+a.byteLength,u+=c.byteLength+l.byteLength,e._trianglesLength=l.length/3,e._geometryByteLength=u;let m=mt.createVertexBuffer({context:t,typedArray:n,usage:Ne.STATIC_DRAW}),p=mt.createVertexBuffer({context:t,typedArray:i,usage:Ne.STATIC_DRAW}),y=mt.createVertexBuffer({context:t,typedArray:o,usage:Ne.STATIC_DRAW}),f=mt.createVertexBuffer({context:t,typedArray:r,usage:Ne.STATIC_DRAW}),x=mt.createVertexBuffer({context:t,typedArray:s,usage:Ne.STATIC_DRAW}),_=mt.createVertexBuffer({context:t,typedArray:a,usage:Ne.STATIC_DRAW}),C=mt.createVertexBuffer({context:t,typedArray:c,usage:Ne.STATIC_DRAW}),V=mt.createIndexBuffer({context:t,typedArray:l,usage:Ne.STATIC_DRAW,indexDatatype:l.BYTES_PER_ELEMENT===2?Ue.UNSIGNED_SHORT:Ue.UNSIGNED_INT}),L=[{index:qb.startEllipsoidNormal,vertexBuffer:m,componentDatatype:Q.FLOAT,componentsPerAttribute:3},{index:qb.endEllipsoidNormal,vertexBuffer:p,componentDatatype:Q.FLOAT,componentsPerAttribute:3},{index:qb.startPositionAndHeight,vertexBuffer:y,componentDatatype:Q.FLOAT,componentsPerAttribute:4},{index:qb.endPositionAndHeight,vertexBuffer:f,componentDatatype:Q.FLOAT,componentsPerAttribute:4},{index:qb.startFaceNormalAndVertexCorner,vertexBuffer:x,componentDatatype:Q.FLOAT,componentsPerAttribute:4},{index:qb.endFaceNormalAndHalfWidth,vertexBuffer:_,componentDatatype:Q.FLOAT,componentsPerAttribute:4},{index:qb.a_batchId,vertexBuffer:C,componentDatatype:Q.UNSIGNED_SHORT,componentsPerAttribute:1}];e._va=new ti({context:t,attributes:L,indexBuffer:V}),e._positions=void 0,e._widths=void 0,e._counts=void 0,e._ellipsoid=void 0,e._minimumHeight=void 0,e._maximumHeight=void 0,e._rectangle=void 0,e._transferrableBatchIds=void 0,e._packedBuffer=void 0,e._startEllipsoidNormals=void 0,e._endEllipsoidNormals=void 0,e._startPositionAndHeights=void 0,e._startFaceNormalAndVertexCornerIds=void 0,e._endPositionAndHeights=void 0,e._endFaceNormalAndHalfWidths=void 0,e._vertexBatchIds=void 0,e._indices=void 0}}var cW=new A,Sre=new h;function yDe(e,t){d(e._uniformMap)||(e._uniformMap={u_modifiedModelView:function(){let n=t.uniformState.view;return A.clone(n,cW),A.multiplyByPoint(cW,e._center,Sre),A.setTranslation(cW,Sre,cW),cW},u_highlightColor:function(){return e._highlightColor},u_minimumMaximumVectorHeights:function(){return e._minimumMaximumVectorHeights}})}function Cre(e){return De.fromCache({cull:{enabled:!0,face:bi.FRONT},blending:dn.PRE_MULTIPLIED_ALPHA_BLEND,depthMask:!1,stencilTest:{enabled:e,frontFunction:Dn.EQUAL,frontOperation:{fail:ht.KEEP,zFail:ht.KEEP,zPass:ht.KEEP},backFunction:Dn.EQUAL,backOperation:{fail:ht.KEEP,zFail:ht.KEEP,zPass:ht.KEEP},reference:Ft.CESIUM_3D_TILE_MASK,mask:Ft.CESIUM_3D_TILE_MASK}})}function gDe(e){d(e._rs)||(e._rs=Cre(!1),e._rs3DTiles=Cre(!0))}function xDe(e,t){if(d(e._sp))return;let n=e._batchTable,i=n.getVertexShaderCallback(!1,"a_batchId",void 0)(sW),o=n.getFragmentShaderCallback(!1,void 0,!0)(aW),r=new Ye({defines:["VECTOR_TILE",Mt.isInternetExplorer()?"":"CLIP_POLYLINE"],sources:[zl,i]}),s=new Ye({defines:["VECTOR_TILE"],sources:[o]});e._sp=Qt.fromCache({context:t,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:qb})}function _De(e,t){let n=e._command;if(!d(e._command)){let o=e._batchTable.getUniformMapCallback()(e._uniformMap);n=e._command=new nt({owner:e,vertexArray:e._va,renderState:e._rs,shaderProgram:e._sp,uniformMap:o,boundingVolume:e._boundingVolume,pass:Re.TERRAIN_CLASSIFICATION,pickId:e._batchTable.getPickId()});let r=nt.shallowClone(n,n.derivedCommands.tileset);r.renderState=e._rs3DTiles,r.pass=Re.CESIUM_3D_TILE_CLASSIFICATION,n.derivedCommands.tileset=r}let i=e._classificationType;(i===kn.TERRAIN||i===kn.BOTH)&&t.commandList.push(n),(i===kn.CESIUM_3D_TILE||i===kn.BOTH)&&t.commandList.push(n.derivedCommands.tileset)}Op.prototype.getPositions=function(e){return Hx.getPolylinePositions(this,e)};Op.prototype.createFeatures=function(e,t){let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o];t[r]=new Ts(e,r)}};Op.prototype.applyDebugSettings=function(e,t){this._highlightColor=e?t:this._constantColor};function TDe(e,t){let n=e._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];s.show=!0,s.color=Y.WHITE}}var SDe=new Y,CDe=Y.WHITE,VDe=!0;Op.prototype.applyStyle=function(e,t){if(!d(e)){TDe(this,t);return}let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];s.color=d(e.color)?e.color.evaluateColor(s,SDe):CDe,s.show=d(e.show)?e.show.evaluate(s):VDe}};function LDe(e){return li.initialize().then(function(){mDe(e,e._rectangle,e._ellipsoid)}).catch(t=>{e.isDestroyed()||(e._error=t)})}Op.prototype.update=function(e){let t=e.context;if(!this._ready){if(d(this._promise)||(this._promise=LDe(this).then(pDe(this,t))),d(this._error)){let i=this._error;throw this._error=void 0,i}return}yDe(this,t),xDe(this,t),gDe(this);let n=e.passes;(n.render||n.pick)&&_De(this,e)};Op.prototype.isDestroyed=function(){return!1};Op.prototype.destroy=function(){return this._va=this._va&&this._va.destroy(),this._sp=this._sp&&this._sp.destroy(),ue(this)};var lW=Op;var IZn=T(S(),1);var IO=32767,RDe=new he,ZDe=new h;function GDe(e,t,n,i,o){let r=e.length/3,s=e.subarray(0,r),a=e.subarray(r,2*r),c=e.subarray(2*r,3*r);Kn.zigZagDeltaDecode(s,a,c);let l=new Float64Array(e.length);for(let u=0;u<r;++u){let m=s[u],p=a[u],y=c[u],f=W.lerp(t.west,t.east,m/IO),x=W.lerp(t.south,t.north,p/IO),_=W.lerp(n,i,y/IO),C=he.fromRadians(f,x,_,RDe),V=o.cartographicToCartesian(C,ZDe);h.pack(V,l,u*3)}return l}var dW=GDe;function ef(e,t,n,i,o){this._tileset=e,this._tile=t,this._resource=n,this._polygons=void 0,this._polylines=void 0,this._points=void 0,this._metadata=void 0,this._batchTable=void 0,this._features=void 0,this.featurePropertiesDirty=!1,this._group=void 0,this._ready=!1,PDe(this,i,o)}Object.defineProperties(ef.prototype,{featuresLength:{get:function(){return d(this._batchTable)?this._batchTable.featuresLength:0}},pointsLength:{get:function(){return d(this._points)?this._points.pointsLength:0}},trianglesLength:{get:function(){let e=0;return d(this._polygons)&&(e+=this._polygons.trianglesLength),d(this._polylines)&&(e+=this._polylines.trianglesLength),e}},geometryByteLength:{get:function(){let e=0;return d(this._polygons)&&(e+=this._polygons.geometryByteLength),d(this._polylines)&&(e+=this._polylines.geometryByteLength),e}},texturesByteLength:{get:function(){return d(this._points)?this._points.texturesByteLength:0}},batchTableByteLength:{get:function(){return d(this._batchTable)?this._batchTable.batchTableByteLength:0}},innerContents:{get:function(){}},ready:{get:function(){return this._ready}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},metadata:{get:function(){return this._metadata},set:function(e){this._metadata=e}},batchTable:{get:function(){return this._batchTable}},group:{get:function(){return this._group},set:function(e){this._group=e}}});function EDe(e){return function(t,n){d(e._polygons)&&e._polygons.updateCommands(t,n)}}function XDe(e,t){let n,i,o,r,s=g(e.POLYGONS_LENGTH,0),a=g(e.POLYLINES_LENGTH,0),c=g(e.POINTS_LENGTH,0);if(s>0&&d(e.POLYGON_BATCH_IDS)){let p=t.byteOffset+e.POLYGON_BATCH_IDS.byteOffset;n=new Uint16Array(t.buffer,p,s)}if(a>0&&d(e.POLYLINE_BATCH_IDS)){let p=t.byteOffset+e.POLYLINE_BATCH_IDS.byteOffset;i=new Uint16Array(t.buffer,p,a)}if(c>0&&d(e.POINT_BATCH_IDS)){let p=t.byteOffset+e.POINT_BATCH_IDS.byteOffset;o=new Uint16Array(t.buffer,p,c)}let l=d(n)||d(i)||d(o),u=s>0&&!d(n)||a>0&&!d(i)||c>0&&!d(o);if(l&&u)throw new me("If one group of batch ids is defined, then all batch ids must be defined");if(!d(n)&&!d(i)&&!d(o)){let p=0;if(!d(n)&&s>0)for(n=new Uint16Array(s),r=0;r<s;++r)n[r]=p++;if(!d(i)&&a>0)for(i=new Uint16Array(a),r=0;r<a;++r)i[r]=p++;if(!d(o)&&c>0)for(o=new Uint16Array(c),r=0;r<c;++r)o[r]=p++}return{polygons:n,polylines:i,points:o}}var vm=Uint32Array.BYTES_PER_ELEMENT;function IDe(e){return new Hx(e)}function WDe(e){return new lW(e)}function PDe(e,t,n){n=g(n,0);let i=new Uint8Array(t),o=new DataView(t);n+=vm;let r=o.getUint32(n,!0);if(r!==1)throw new me(`Only Vector tile version 1 is supported. Version ${r} is not.`);n+=vm;let s=o.getUint32(n,!0);if(n+=vm,s===0){e._ready=!0;return}let a=o.getUint32(n,!0);if(n+=vm,a===0)throw new me("Feature table must have a byte length greater than zero");let c=o.getUint32(n,!0);n+=vm;let l=o.getUint32(n,!0);n+=vm;let u=o.getUint32(n,!0);n+=vm;let m=o.getUint32(n,!0);n+=vm;let p=o.getUint32(n,!0);n+=vm;let y=o.getUint32(n,!0);n+=vm;let f=o.getUint32(n,!0);n+=vm;let x=Go(i,n,a);n+=a;let _=new Uint8Array(t,n,c);n+=c;let C,V;l>0&&(C=Go(i,n,l),n+=l,u>0&&(V=new Uint8Array(t,n,u),V=new Uint8Array(V),n+=u));let L=g(x.POLYGONS_LENGTH,0),Z=g(x.POLYLINES_LENGTH,0),G=g(x.POINTS_LENGTH,0),X=L+Z+G,P=new bp(e,X,C,V,EDe(e));if(e._batchTable=P,X===0)return;let v=new Rm(x,_),F=v.getGlobalProperty("REGION");if(!d(F))throw new me("Feature table global property: REGION must be defined");let M=de.unpack(F),b=F[4],R=F[5],E=e._tile.computedTransform,I=v.getGlobalProperty("RTC_CENTER",Q.FLOAT,3);d(I)?(I=h.unpack(I),A.multiplyByPoint(E,I,I)):(I=de.center(M),I.height=W.lerp(b,R,.5),I=re.WGS84.cartographicToCartesian(I));let w=XDe(x,_);if(n+=(4-n%4)%4,L>0){v.featuresLength=L;let N=g(v.getPropertyArray("POLYGON_COUNTS",Q.UNSIGNED_INT,1),v.getPropertyArray("POLYGON_COUNT",Q.UNSIGNED_INT,1));if(!d(N))throw new me("Feature table property: POLYGON_COUNTS must be defined when POLYGONS_LENGTH is greater than 0");let B=g(v.getPropertyArray("POLYGON_INDEX_COUNTS",Q.UNSIGNED_INT,1),v.getPropertyArray("POLYGON_INDEX_COUNT",Q.UNSIGNED_INT,1));if(!d(B))throw new me("Feature table property: POLYGON_INDEX_COUNTS must be defined when POLYGONS_LENGTH is greater than 0");let k=N.reduce(function(K,j){return K+j*2},0),O=B.reduce(function(K,j){return K+j},0),U=new Uint32Array(t,n,O);n+=m;let J=new Uint16Array(t,n,k);n+=p;let z,ee;d(x.POLYGON_MINIMUM_HEIGHTS)&&d(x.POLYGON_MAXIMUM_HEIGHTS)&&(z=v.getPropertyArray("POLYGON_MINIMUM_HEIGHTS",Q.FLOAT,1),ee=v.getPropertyArray("POLYGON_MAXIMUM_HEIGHTS",Q.FLOAT,1)),e._polygons=new iW({positions:J,counts:N,indexCounts:B,indices:U,minimumHeight:b,maximumHeight:R,polygonMinimumHeights:z,polygonMaximumHeights:ee,center:I,rectangle:M,boundingVolume:e.tile.boundingVolume.boundingVolume,batchTable:P,batchIds:w.polygons,modelMatrix:E})}if(Z>0){v.featuresLength=Z;let N=g(v.getPropertyArray("POLYLINE_COUNTS",Q.UNSIGNED_INT,1),v.getPropertyArray("POLYLINE_COUNT",Q.UNSIGNED_INT,1));if(!d(N))throw new me("Feature table property: POLYLINE_COUNTS must be defined when POLYLINES_LENGTH is greater than 0");let B=v.getPropertyArray("POLYLINE_WIDTHS",Q.UNSIGNED_SHORT,1);if(!d(B)){B=new Uint16Array(Z);for(let ee=0;ee<Z;++ee)B[ee]=2}let k=N.reduce(function(ee,K){return ee+K*3},0),O=new Uint16Array(t,n,k);n+=y;let U=e._tileset,J=U.examineVectorLinesFunction;if(d(J)){let ee=dW(new Uint16Array(O),M,b,R,re.WGS84);vDe(ee,N,w.polylines,P,e.url,J)}let z=IDe;d(U.classificationType)&&(z=WDe),e._polylines=z({positions:O,widths:B,counts:N,batchIds:w.polylines,minimumHeight:b,maximumHeight:R,center:I,rectangle:M,boundingVolume:e.tile.boundingVolume.boundingVolume,batchTable:P,classificationType:U.classificationType,keepDecodedPositions:U.vectorKeepDecodedPositions})}if(G>0){let N=new Uint16Array(t,n,G*3);n+=f,e._points=new nW({positions:N,batchIds:w.points,minimumHeight:b,maximumHeight:R,rectangle:M,batchTable:P})}}function WO(e){let t=e.featuresLength;if(!d(e._features)&&t>0){let n=new Array(t);d(e._polygons)&&e._polygons.createFeatures(e,n),d(e._polylines)&&e._polylines.createFeatures(e,n),d(e._points)&&e._points.createFeatures(e,n),e._features=n}}ef.prototype.hasProperty=function(e,t){return this._batchTable.hasProperty(e,t)};ef.prototype.getFeature=function(e){return d(this._features)||WO(this),this._features[e]};ef.prototype.applyDebugSettings=function(e,t){d(this._polygons)&&this._polygons.applyDebugSettings(e,t),d(this._polylines)&&this._polylines.applyDebugSettings(e,t),d(this._points)&&this._points.applyDebugSettings(e,t)};ef.prototype.applyStyle=function(e){d(this._features)||WO(this),d(this._polygons)&&this._polygons.applyStyle(e,this._features),d(this._polylines)&&this._polylines.applyStyle(e,this._features),d(this._points)&&this._points.applyStyle(e,this._features)};ef.prototype.update=function(e,t){let n=!0;d(this._polygons)&&(this._polygons.classificationType=this._tileset.classificationType,this._polygons.debugWireframe=this._tileset.debugWireframe,this._polygons.update(t),n=n&&this._polygons.ready),d(this._polylines)&&(this._polylines.update(t),n=n&&this._polylines.ready),d(this._points)&&(this._points.update(t),n=n&&this._points.ready),d(this._batchTable)&&n&&(d(this._features)||WO(this),this._batchTable.update(e,t),this._ready=!0)};ef.prototype.getPolylinePositions=function(e){let t=this._polylines;if(d(t))return t.getPositions(e)};ef.prototype.isDestroyed=function(){return!1};ef.prototype.destroy=function(){return this._polygons=this._polygons&&this._polygons.destroy(),this._polylines=this._polylines&&this._polylines.destroy(),this._points=this._points&&this._points.destroy(),this._batchTable=this._batchTable&&this._batchTable.destroy(),ue(this)};function vDe(e,t,n,i,o,r){let s=t.length,a=0;for(let c=0;c<s;c++){let l=t[c]*3,u=e.slice(a,a+l);a+=l,r(u,n[c],o,i)}}var uW=ef;var Vre={b3dm:function(e,t,n,i,o){return Jh.fromB3dm(e,t,n,i,o)},pnts:function(e,t,n,i,o){return Jh.fromPnts(e,t,n,i,o)},i3dm:function(e,t,n,i,o){return Jh.fromI3dm(e,t,n,i,o)},cmpt:function(e,t,n,i,o){return fE.fromTileType(e,t,n,i,o,Vre)},externalTileset:function(e,t,n,i){return UI.fromJson(e,t,n,i)},geom:function(e,t,n,i,o){return new bE(e,t,n,i,o)},vctr:function(e,t,n,i,o){return new uW(e,t,n,i,o)},subt:function(e,t,n,i,o){return US.fromSubtreeJson(e,t,n,void 0,i,o)},subtreeJson:function(e,t,n,i){return US.fromSubtreeJson(e,t,n,i)},glb:function(e,t,n,i,o){if(i.byteLength<12)throw new me("Invalid glb content");let a=new DataView(i,o).getUint32(8,!0),c=new Uint8Array(i,o,a);return Jh.fromGltf(e,t,n,c)},gltf:function(e,t,n,i){return Jh.fromGltf(e,t,n,i)},geoJson:function(e,t,n,i){return Jh.fromGeoJson(e,t,n,i)}},zx=Vre;var cGn=T(S(),1),wDe={UNLOADED:0,LOADING:1,PROCESSING:2,READY:3,EXPIRED:4,FAILED:5},wo=Object.freeze(wDe);var dGn=T(S(),1),wm={BATCHED_3D_MODEL:"b3dm",INSTANCED_3D_MODEL:"i3dm",COMPOSITE:"cmpt",POINT_CLOUD:"pnts",VECTOR:"vctr",GEOMETRY:"geom",GLTF:"gltf",GLTF_BINARY:"glb",IMPLICIT_SUBTREE:"subt",IMPLICIT_SUBTREE_JSON:"subtreeJson",EXTERNAL_TILESET:"externalTileset",MULTIPLE_CONTENT:"multipleContent",GEOJSON:"geoJson",VOXEL_BINARY:"voxl",VOXEL_JSON:"voxelJson"};wm.isBinaryFormat=function(e){switch(e){case wm.BATCHED_3D_MODEL:case wm.INSTANCED_3D_MODEL:case wm.COMPOSITE:case wm.POINT_CLOUD:case wm.VECTOR:case wm.GEOMETRY:case wm.IMPLICIT_SUBTREE:case wm.VOXEL_BINARY:case wm.GLTF_BINARY:return!0;default:return!1}};var cs=Object.freeze(wm);var mGn=T(S(),1),FDe={NOT_COMPUTED:-1,USE_OPTIMIZATION:1,SKIP_OPTIMIZATION:0},mu=Object.freeze(FDe);var fGn=T(S(),1),Zs={RENDER:0,PICK:1,SHADOW:2,PRELOAD:3,PRELOAD_FLIGHT:4,REQUEST_RENDER_MODE_DEFER_CHECK:5,MOST_DETAILED_PRELOAD:6,MOST_DETAILED_PICK:7,NUMBER_OF_PASSES:8},Kp=new Array(Zs.NUMBER_OF_PASSES);Kp[Zs.RENDER]=Object.freeze({pass:Zs.RENDER,isRender:!0,requestTiles:!0,ignoreCommands:!1});Kp[Zs.PICK]=Object.freeze({pass:Zs.PICK,isRender:!1,requestTiles:!1,ignoreCommands:!1});Kp[Zs.SHADOW]=Object.freeze({pass:Zs.SHADOW,isRender:!1,requestTiles:!0,ignoreCommands:!1});Kp[Zs.PRELOAD]=Object.freeze({pass:Zs.PRELOAD,isRender:!1,requestTiles:!0,ignoreCommands:!0});Kp[Zs.PRELOAD_FLIGHT]=Object.freeze({pass:Zs.PRELOAD_FLIGHT,isRender:!1,requestTiles:!0,ignoreCommands:!0});Kp[Zs.REQUEST_RENDER_MODE_DEFER_CHECK]=Object.freeze({pass:Zs.REQUEST_RENDER_MODE_DEFER_CHECK,isRender:!1,requestTiles:!0,ignoreCommands:!0});Kp[Zs.MOST_DETAILED_PRELOAD]=Object.freeze({pass:Zs.MOST_DETAILED_PRELOAD,isRender:!1,requestTiles:!0,ignoreCommands:!0});Kp[Zs.MOST_DETAILED_PICK]=Object.freeze({pass:Zs.MOST_DETAILED_PICK,isRender:!1,requestTiles:!1,ignoreCommands:!1});Zs.getPassOptions=function(e){return Kp[e]};var Xo=Object.freeze(Zs);var yGn=T(S(),1);function Hp(e,t){this._tileset=e,this._tile=t,this.featurePropertiesDirty=!1}Object.defineProperties(Hp.prototype,{featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return 0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){}},ready:{get:function(){return!0}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){}},metadata:{get:function(){},set:function(e){}},batchTable:{get:function(){}},group:{get:function(){},set:function(e){}}});Hp.prototype.hasProperty=function(e,t){return!1};Hp.prototype.getFeature=function(e){};Hp.prototype.applyDebugSettings=function(e,t){};Hp.prototype.applyStyle=function(e){};Hp.prototype.update=function(e,t){};Hp.prototype.isDestroyed=function(){return!1};Hp.prototype.destroy=function(){return ue(this)};var dC=Hp;var GGn=T(S(),1);var TGn=T(S(),1);function zp(e){e=g(e,g.EMPTY_OBJECT);let t=e.content,n=e.class;this._class=n,this._properties=t.properties,this._extensions=t.extensions,this._extras=t.extras}Object.defineProperties(zp.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});zp.prototype.hasProperty=function(e){return Mn.hasProperty(e,this._properties,this._class)};zp.prototype.hasPropertyBySemantic=function(e){return Mn.hasPropertyBySemantic(e,this._properties,this._class)};zp.prototype.getPropertyIds=function(e){return Mn.getPropertyIds(this._properties,this._class,e)};zp.prototype.getProperty=function(e){return Mn.getProperty(e,this._properties,this._class)};zp.prototype.setProperty=function(e,t){return Mn.setProperty(e,t,this._properties,this._class)};zp.prototype.getPropertyBySemantic=function(e){return Mn.getPropertyBySemantic(e,this._properties,this._class)};zp.prototype.setPropertyBySemantic=function(e,t){return Mn.setPropertyBySemantic(e,t,this._properties,this._class)};var mW=zp;function PO(e,t){let n=ri(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"]:t.metadata;if(!d(n))return;if(!d(e.schema)){PO._oneTimeWarning("findContentMetadata-missing-root-schema","Could not find a metadata schema for content metadata. For tilesets that contain external tilesets, make sure the schema is added to the root tileset.json.");return}let i=g(e.schema.classes,g.EMPTY_OBJECT);if(d(n.class)){let o=i[n.class];return new mW({content:n,class:o})}}PO._oneTimeWarning=Pt;var Jx=PO;var WGn=T(S(),1);function ADe(e,t){let n=e.metadataExtension;if(!d(n))return;let i=n.groups,o=ri(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"].group:t.group;if(typeof o=="number")return i[o];let r=n.groupIds.findIndex(function(s){return s===o});return r>=0?i[r]:void 0}var Qx=ADe;var BGn=T(S(),1);var FGn=T(S(),1);function Jp(e){e=g(e,g.EMPTY_OBJECT);let t=e.tile,n=e.class;this._class=n,this._properties=t.properties,this._extensions=t.extensions,this._extras=t.extras}Object.defineProperties(Jp.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});Jp.prototype.hasProperty=function(e){return Mn.hasProperty(e,this._properties,this._class)};Jp.prototype.hasPropertyBySemantic=function(e){return Mn.hasPropertyBySemantic(e,this._properties,this._class)};Jp.prototype.getPropertyIds=function(e){return Mn.getPropertyIds(this._properties,this._class,e)};Jp.prototype.getProperty=function(e){return Mn.getProperty(e,this._properties,this._class)};Jp.prototype.setProperty=function(e,t){return Mn.setProperty(e,t,this._properties,this._class)};Jp.prototype.getPropertyBySemantic=function(e){return Mn.getPropertyBySemantic(e,this._properties,this._class)};Jp.prototype.setPropertyBySemantic=function(e,t){return Mn.setPropertyBySemantic(e,t,this._properties,this._class)};var hW=Jp;function vO(e,t){let n=ri(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"]:t.metadata;if(!d(n))return;if(!d(e.schema)){vO._oneTimeWarning("findTileMetadata-missing-root-schema","Could not find a metadata schema for tile metadata. For tilesets that contain external tilesets, make sure the schema is added to the root tileset.json.");return}let i=g(e.schema.classes,g.EMPTY_OBJECT);if(d(n.class)){let o=i[n.class];return new hW({tile:n,class:o})}}vO._oneTimeWarning=Pt;var fW=vO;var uEn=T(S(),1);var QGn=T(S(),1);function MDe(e){let t=new Uint8Array(e),n=pm(t);if(n==="glTF"&&(n="glb"),cs.isBinaryFormat(n))return{contentType:n,binaryPayload:t};let i=NDe(t);if(d(i.root))return{contentType:cs.EXTERNAL_TILESET,jsonPayload:i};if(d(i.asset))return{contentType:cs.GLTF,jsonPayload:i};if(d(i.tileAvailability))return{contentType:cs.IMPLICIT_SUBTREE_JSON,jsonPayload:i};if(d(i.type))return{contentType:cs.GEOJSON,jsonPayload:i};if(d(i.voxelTable))return{contentType:cs.VOXEL_JSON,jsonPayload:i};throw new me("Invalid tile content.")}function NDe(e){let t;try{t=Go(e)}catch{throw new me("Invalid tile content.")}return t}var tf=MDe;function Fm(e,t,n,i){this._tileset=e,this._tile=t,this._tilesetResource=n,this._contents=[],this._contentsCreated=!1;let o=d(i.contents)?i.contents:i.content;this._innerContentHeaders=o,this._requestsInFlight=0,this._cancelCount=0;let r=this._innerContentHeaders.length;this._arrayFetchPromises=new Array(r),this._requests=new Array(r),this._ready=!1,this._innerContentResources=new Array(r),this._serverKeys=new Array(r);for(let s=0;s<r;s++){let a=n.getDerivedResource({url:o[s].uri}),c=wa.getServerKey(a.getUrlComponent());this._innerContentResources[s]=a,this._serverKeys[s]=c}}Object.defineProperties(Fm.prototype,{featurePropertiesDirty:{get:function(){let e=this._contents,t=e.length;for(let n=0;n<t;++n)if(e[n].featurePropertiesDirty)return!0;return!1},set:function(e){let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].featurePropertiesDirty=e}},featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return 0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){return this._contents}},ready:{get:function(){return this._contentsCreated?this._ready:!1}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){}},metadata:{get:function(){},set:function(){}},batchTable:{get:function(){}},group:{get:function(){},set:function(){}},innerContentUrls:{get:function(){return this._innerContentHeaders.map(function(e){return e.uri})}}});function wO(e,t){e._requestsInFlight+=t,e.tileset.statistics.numberOfPendingRequests+=t}function Lre(e,t){e._cancelCount++,e._tile._contentState=t;let n=e.tileset.statistics;n.numberOfPendingRequests-=e._requestsInFlight,n.numberOfAttemptedRequests+=e._requestsInFlight,e._requestsInFlight=0;let i=e._innerContentHeaders.length;e._arrayFetchPromises=new Array(i)}Fm.prototype.requestInnerContents=function(){if(!UDe(this._serverKeys)){this.tileset.statistics.numberOfAttemptedRequests+=this._serverKeys.length;return}let e=this._innerContentHeaders;wO(this,e.length);let t=this._cancelCount;for(let n=0;n<e.length;n++)this._arrayFetchPromises[n]=kDe(this,n,t,this._tile._contentState);return DDe(this)};function UDe(e){let t={};for(let n=0;n<e.length;n++){let i=e[n];d(t[i])?t[i]++:t[i]=1}for(let n in t)if(t.hasOwnProperty(n)&&!wa.serverHasOpenSlots(n,t[n]))return!1;return wa.heapHasOpenSlots(e.length)}function kDe(e,t,n,i){let o=e._innerContentResources[t].clone(),r=e.tile,s=function(){return r._priority},a=e._serverKeys[t],c=new Uo({throttle:!0,throttleByServer:!0,type:Hr.TILES3D,priorityFunction:s,serverKey:a});o.request=c,e._requests[t]=c;let l=o.fetchArrayBuffer();if(d(l))return l.then(function(u){if(!(n<e._cancelCount)){if(o.request.cancelled||o.request.state===$n.CANCELLED){Lre(e,i);return}return wO(e,-1),u}}).catch(function(u){if(!(n<e._cancelCount)){if(o.request.cancelled||o.request.state===$n.CANCELLED){Lre(e,i);return}wO(e,-1),Rre(e,t,u)}})}async function DDe(e){let t=e._cancelCount,n=await Promise.all(e._arrayFetchPromises);if(t<e._cancelCount)return;let i=n.map((r,s)=>BDe(e,r,s)),o=await Promise.all(i);return e._contentsCreated=!0,e._contents=o.filter(d),o}async function BDe(e,t,n){if(d(t))try{let i=tf(t);if(i.contentType===cs.EXTERNAL_TILESET)throw new me("External tilesets are disallowed inside multiple contents");e._disableSkipLevelOfDetail=e._disableSkipLevelOfDetail||i.contentType===cs.GEOMETRY||i.contentType===cs.VECTOR;let o=e._tileset,r=e._innerContentResources[n],s=e._tile,a,c=zx[i.contentType];d(i.binaryPayload)?a=await Promise.resolve(c(o,s,r,i.binaryPayload.buffer,0)):a=await Promise.resolve(c(o,s,r,i.jsonPayload));let l=e._innerContentHeaders[n];if(s.hasImplicitContentMetadata){let m=s.implicitSubtree,p=s.implicitCoordinates;a.metadata=m.getContentMetadataView(p,n)}else s.hasImplicitContent||(a.metadata=Jx(o,l));let u=Qx(o,l);return d(u)&&(a.group=new ux({metadata:u})),a}catch(i){Rre(e,n,i)}}function Rre(e,t,n){let i=e._tileset,o=e._innerContentResources[t].url,r=d(n.message)?n.message:n.toString();i.tileFailed.numberOfListeners>0?i.tileFailed.raiseEvent({url:o,message:r}):(console.log(`A content failed to load: ${o}`),console.log(`Error: ${r}`))}Fm.prototype.cancelRequests=function(){for(let e=0;e<this._requests.length;e++){let t=this._requests[e];d(t)&&t.cancel()}};Fm.prototype.hasProperty=function(e,t){return!1};Fm.prototype.getFeature=function(e){};Fm.prototype.applyDebugSettings=function(e,t){let n=this._contents,i=n.length;for(let o=0;o<i;++o)n[o].applyDebugSettings(e,t)};Fm.prototype.applyStyle=function(e){let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].applyStyle(e)};Fm.prototype.update=function(e,t){let n=this._contents,i=n.length,o=!0;for(let r=0;r<i;++r)n[r].update(e,t),o=o&&n[r].ready;!this._ready&&o&&(this._ready=!0)};Fm.prototype.isDestroyed=function(){return!1};Fm.prototype.destroy=function(){let e=this._contents,t=e.length;for(let n=0;n<t;++n)e[n].destroy();return ue(this)};var pW=Fm;var SXn=T(S(),1);var nXn=T(S(),1);var GEn=T(S(),1),wre=T(Ire(),1);var rBe=new h,sBe=new h,$b={};$b.computeArea2D=function(e){let t=e.length,n=0;for(let i=t-1,o=0;o<t;i=o++){let r=e[i],s=e[o];n+=r.x*s.y-s.x*r.y}return n*.5};$b.computeWindingOrder2D=function(e){return $b.computeArea2D(e)>0?Jr.COUNTER_CLOCKWISE:Jr.CLOCKWISE};$b.triangulate=function(e,t){let n=D.packArray(e);return(0,wre.default)(n,t,2)};var Fre=new h,Are=new h,Mre=new h,Wre=new h,Pre=new h,vre=new h,Qp=new h,Nre=new D,Ure=new D,kre=new D,mC=new D;$b.computeSubdivision=function(e,t,n,i,o){o=g(o,W.RADIANS_PER_DEGREE);let r=d(i),s=n.slice(0),a,c=t.length,l=new Array(c*3),u=new Array(c*2),m=0,p=0;for(a=0;a<c;a++){let L=t[a];if(l[m++]=L.x,l[m++]=L.y,l[m++]=L.z,r){let Z=i[a];u[p++]=Z.x,u[p++]=Z.y}}let y=[],f={},x=e.maximumRadius,_=W.chordLength(o,x),C=_*_;for(;s.length>0;){let L=s.pop(),Z=s.pop(),G=s.pop(),X=h.fromArray(l,G*3,Fre),P=h.fromArray(l,Z*3,Are),v=h.fromArray(l,L*3,Mre),F,M,b;r&&(F=D.fromArray(u,G*2,Nre),M=D.fromArray(u,Z*2,Ure),b=D.fromArray(u,L*2,kre));let R=h.multiplyByScalar(h.normalize(X,Wre),x,Wre),E=h.multiplyByScalar(h.normalize(P,Pre),x,Pre),I=h.multiplyByScalar(h.normalize(v,vre),x,vre),w=h.magnitudeSquared(h.subtract(R,E,Qp)),N=h.magnitudeSquared(h.subtract(E,I,Qp)),B=h.magnitudeSquared(h.subtract(I,R,Qp)),k=Math.max(w,N,B),O,U,J;k>C?w===k?(O=`${Math.min(G,Z)} ${Math.max(G,Z)}`,a=f[O],d(a)||(U=h.add(X,P,Qp),h.multiplyByScalar(U,.5,U),l.push(U.x,U.y,U.z),a=l.length/3-1,f[O]=a,r&&(J=D.add(F,M,mC),D.multiplyByScalar(J,.5,J),u.push(J.x,J.y))),s.push(G,a,L),s.push(a,Z,L)):N===k?(O=`${Math.min(Z,L)} ${Math.max(Z,L)}`,a=f[O],d(a)||(U=h.add(P,v,Qp),h.multiplyByScalar(U,.5,U),l.push(U.x,U.y,U.z),a=l.length/3-1,f[O]=a,r&&(J=D.add(M,b,mC),D.multiplyByScalar(J,.5,J),u.push(J.x,J.y))),s.push(Z,a,G),s.push(a,L,G)):B===k&&(O=`${Math.min(L,G)} ${Math.max(L,G)}`,a=f[O],d(a)||(U=h.add(v,X,Qp),h.multiplyByScalar(U,.5,U),l.push(U.x,U.y,U.z),a=l.length/3-1,f[O]=a,r&&(J=D.add(b,F,mC),D.multiplyByScalar(J,.5,J),u.push(J.x,J.y))),s.push(L,a,Z),s.push(a,G,Z)):(y.push(G),y.push(Z),y.push(L))}let V={attributes:{position:new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:l})},indices:y,primitiveType:Fe.TRIANGLES};return r&&(V.attributes.st=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:u})),new dt(V)};var aBe=new he,cBe=new he,lBe=new he,UO=new he;$b.computeRhumbLineSubdivision=function(e,t,n,i,o){o=g(o,W.RADIANS_PER_DEGREE);let r=d(i),s=n.slice(0),a,c=t.length,l=new Array(c*3),u=new Array(c*2),m=0,p=0;for(a=0;a<c;a++){let G=t[a];if(l[m++]=G.x,l[m++]=G.y,l[m++]=G.z,r){let X=i[a];u[p++]=X.x,u[p++]=X.y}}let y=[],f={},x=e.maximumRadius,_=W.chordLength(o,x),C=new ma(void 0,void 0,e),V=new ma(void 0,void 0,e),L=new ma(void 0,void 0,e);for(;s.length>0;){let G=s.pop(),X=s.pop(),P=s.pop(),v=h.fromArray(l,P*3,Fre),F=h.fromArray(l,X*3,Are),M=h.fromArray(l,G*3,Mre),b,R,E;r&&(b=D.fromArray(u,P*2,Nre),R=D.fromArray(u,X*2,Ure),E=D.fromArray(u,G*2,kre));let I=e.cartesianToCartographic(v,aBe),w=e.cartesianToCartographic(F,cBe),N=e.cartesianToCartographic(M,lBe);C.setEndPoints(I,w);let B=C.surfaceDistance;V.setEndPoints(w,N);let k=V.surfaceDistance;L.setEndPoints(N,I);let O=L.surfaceDistance,U=Math.max(B,k,O),J,z,ee,K,j;U>_?B===U?(J=`${Math.min(P,X)} ${Math.max(P,X)}`,a=f[J],d(a)||(z=C.interpolateUsingFraction(.5,UO),ee=(I.height+w.height)*.5,K=h.fromRadians(z.longitude,z.latitude,ee,e,Qp),l.push(K.x,K.y,K.z),a=l.length/3-1,f[J]=a,r&&(j=D.add(b,R,mC),D.multiplyByScalar(j,.5,j),u.push(j.x,j.y))),s.push(P,a,G),s.push(a,X,G)):k===U?(J=`${Math.min(X,G)} ${Math.max(X,G)}`,a=f[J],d(a)||(z=V.interpolateUsingFraction(.5,UO),ee=(w.height+N.height)*.5,K=h.fromRadians(z.longitude,z.latitude,ee,e,Qp),l.push(K.x,K.y,K.z),a=l.length/3-1,f[J]=a,r&&(j=D.add(R,E,mC),D.multiplyByScalar(j,.5,j),u.push(j.x,j.y))),s.push(X,a,P),s.push(a,G,P)):O===U&&(J=`${Math.min(G,P)} ${Math.max(G,P)}`,a=f[J],d(a)||(z=L.interpolateUsingFraction(.5,UO),ee=(N.height+I.height)*.5,K=h.fromRadians(z.longitude,z.latitude,ee,e,Qp),l.push(K.x,K.y,K.z),a=l.length/3-1,f[J]=a,r&&(j=D.add(E,b,mC),D.multiplyByScalar(j,.5,j),u.push(j.x,j.y))),s.push(G,a,X),s.push(a,P,X)):(y.push(P),y.push(X),y.push(G))}let Z={attributes:{position:new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:l})},indices:y,primitiveType:Fe.TRIANGLES};return r&&(Z.attributes.st=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:u})),new dt(Z)};$b.scaleToGeodeticHeight=function(e,t,n,i){n=g(n,re.WGS84);let o=rBe,r=sBe;if(t=g(t,0),i=g(i,!0),d(e)){let s=e.length;for(let a=0;a<s;a+=3)h.fromArray(e,a,r),i&&(r=n.scaleToGeodeticSurface(r,r)),t!==0&&(o=n.geodeticSurfaceNormal(r,o),h.multiplyByScalar(o,t,o),h.add(r,o,r)),e[a]=r.x,e[a+1]=r.y,e[a+2]=r.z}return e};var ai=$b;var AEn=T(S(),1);var Dre=Math.cos,Bre=Math.sin,dBe=Math.sqrt,DO={};DO.computePosition=function(e,t,n,i,o,r,s){let a=t.radiiSquared,c=e.nwCorner,l=e.boundingRectangle,u=c.latitude-e.granYCos*i+o*e.granXSin,m=Dre(u),p=Bre(u),y=a.z*p,f=c.longitude+i*e.granYSin+o*e.granXCos,x=m*Dre(f),_=m*Bre(f),C=a.x*x,V=a.y*_,L=dBe(C*x+V*_+y*p);if(r.x=C/L,r.y=V/L,r.z=y/L,n){let Z=e.stNwCorner;d(Z)?(u=Z.latitude-e.stGranYCos*i+o*e.stGranXSin,f=Z.longitude+i*e.stGranYSin+o*e.stGranXCos,s.x=(f-e.stWest)*e.lonScalar,s.y=(u-e.stSouth)*e.latScalar):(s.x=(f-l.west)*e.lonScalar,s.y=(u-l.south)*e.latScalar)}};var uBe=new $i,hu=new h,mBe=new he,bN=new h,kO=new Zi;function Yre(e,t,n,i,o,r,s){let a=Math.cos(t),c=i*a,l=n*a,u=Math.sin(t),m=i*u,p=n*u;hu=kO.project(e,hu),hu=h.subtract(hu,bN,hu);let y=$i.fromRotation(t,uBe);hu=$i.multiplyByVector(y,hu,hu),hu=h.add(hu,bN,hu),e=kO.unproject(hu,e),r-=1,s-=1;let f=e.latitude,x=f+r*p,_=f-c*s,C=f-c*s+r*p,V=Math.max(f,x,_,C),L=Math.min(f,x,_,C),Z=e.longitude,G=Z+r*l,X=Z+s*m,P=Z+s*m+r*l,v=Math.max(Z,G,X,P),F=Math.min(Z,G,X,P);return{north:V,south:L,east:v,west:F,granYCos:c,granYSin:m,granXCos:l,granXSin:p,nwCorner:e}}DO.computeOptions=function(e,t,n,i,o,r,s){let a=e.east,c=e.west,l=e.north,u=e.south,m=!1,p=!1;l===W.PI_OVER_TWO&&(m=!0),u===-W.PI_OVER_TWO&&(p=!0);let y,f=l-u;c>a?y=W.TWO_PI-c+a:y=a-c;let x=Math.ceil(y/t)+1,_=Math.ceil(f/t)+1,C=y/(x-1),V=f/(_-1),L=de.northwest(e,r),Z=de.center(e,mBe);(n!==0||i!==0)&&(Z.longitude<L.longitude&&(Z.longitude+=W.TWO_PI),bN=kO.project(Z,bN));let G=V,X=C,P=0,v=0,F=de.clone(e,o),M={granYCos:G,granYSin:P,granXCos:X,granXSin:v,nwCorner:L,boundingRectangle:F,width:x,height:_,northCap:m,southCap:p};if(n!==0){let b=Yre(L,n,C,V,Z,x,_);l=b.north,u=b.south,a=b.east,c=b.west,M.granYCos=b.granYCos,M.granYSin=b.granYSin,M.granXCos=b.granXCos,M.granXSin=b.granXSin,F.north=l,F.south=u,F.east=a,F.west=c}if(i!==0){n=n-i;let b=de.northwest(F,s),R=Yre(b,n,C,V,Z,x,_);M.stGranYCos=R.granYCos,M.stGranXCos=R.granXCos,M.stGranYSin=R.granYSin,M.stGranXSin=R.granXSin,M.stNwCorner=b,M.stWest=R.west,M.stSouth=R.south}return M};var ls=DO;var hBe=new ce,fBe=new ce,pBe=new h,bBe=new de;function Ore(e,t){let n=e._ellipsoid,i=t.height,o=t.width,r=t.northCap,s=t.southCap,a=i,c=2,l=0,u=4;r&&(c-=1,a-=1,l+=1,u-=2),s&&(c-=1,a-=1,l+=1,u-=2),l+=c*o+2*a-u;let m=new Float64Array(l*3),p=0,y=0,f,x=pBe;if(r)ls.computePosition(t,n,!1,y,0,x),m[p++]=x.x,m[p++]=x.y,m[p++]=x.z;else for(f=0;f<o;f++)ls.computePosition(t,n,!1,y,f,x),m[p++]=x.x,m[p++]=x.y,m[p++]=x.z;for(f=o-1,y=1;y<i;y++)ls.computePosition(t,n,!1,y,f,x),m[p++]=x.x,m[p++]=x.y,m[p++]=x.z;if(y=i-1,!s)for(f=o-2;f>=0;f--)ls.computePosition(t,n,!1,y,f,x),m[p++]=x.x,m[p++]=x.y,m[p++]=x.z;for(f=0,y=i-2;y>0;y--)ls.computePosition(t,n,!1,y,f,x),m[p++]=x.x,m[p++]=x.y,m[p++]=x.z;let _=m.length/3*2,C=Ue.createTypedArray(m.length/3,_),V=0;for(let Z=0;Z<m.length/3-1;Z++)C[V++]=Z,C[V++]=Z+1;C[V++]=m.length/3-1,C[V++]=0;let L=new dt({attributes:new hn,primitiveType:Fe.LINES});return L.attributes.position=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:m}),L.indices=C,L}function yBe(e,t){let n=e._surfaceHeight,i=e._extrudedHeight,o=e._ellipsoid,r=i,s=n,a=Ore(e,t),c=t.height,l=t.width,u=ai.scaleToGeodeticHeight(a.attributes.position.values,s,o,!1),m=u.length,p=new Float64Array(m*2);p.set(u);let y=ai.scaleToGeodeticHeight(a.attributes.position.values,r,o);p.set(y,m),a.attributes.position.values=p;let f=t.northCap,x=t.southCap,_=4;f&&(_-=1),x&&(_-=1);let C=(p.length/3+_)*2,V=Ue.createTypedArray(p.length/3,C);m=p.length/6;let L=0;for(let G=0;G<m-1;G++)V[L++]=G,V[L++]=G+1,V[L++]=G+m,V[L++]=G+m+1;V[L++]=m-1,V[L++]=0,V[L++]=m+m-1,V[L++]=m,V[L++]=0,V[L++]=m;let Z;if(f)Z=c-1;else{let G=l-1;V[L++]=G,V[L++]=G+m,Z=l+c-2}if(V[L++]=Z,V[L++]=Z+m,!x){let G=l+Z-1;V[L++]=G,V[L]=G+m}return a.indices=V,a}function fC(e){e=g(e,g.EMPTY_OBJECT);let t=e.rectangle,n=g(e.granularity,W.RADIANS_PER_DEGREE),i=g(e.ellipsoid,re.WGS84),o=g(e.rotation,0),r=g(e.height,0),s=g(e.extrudedHeight,r);this._rectangle=de.clone(t),this._granularity=n,this._ellipsoid=i,this._surfaceHeight=Math.max(r,s),this._rotation=o,this._extrudedHeight=Math.min(r,s),this._offsetAttribute=e.offsetAttribute,this._workerName="createRectangleOutlineGeometry"}fC.packedLength=de.packedLength+re.packedLength+5;fC.pack=function(e,t,n){return n=g(n,0),de.pack(e._rectangle,t,n),n+=de.packedLength,re.pack(e._ellipsoid,t,n),n+=re.packedLength,t[n++]=e._granularity,t[n++]=e._surfaceHeight,t[n++]=e._rotation,t[n++]=e._extrudedHeight,t[n]=g(e._offsetAttribute,-1),t};var Kre=new de,Hre=re.clone(re.UNIT_SPHERE),hC={rectangle:Kre,ellipsoid:Hre,granularity:void 0,height:void 0,rotation:void 0,extrudedHeight:void 0,offsetAttribute:void 0};fC.unpack=function(e,t,n){t=g(t,0);let i=de.unpack(e,t,Kre);t+=de.packedLength;let o=re.unpack(e,t,Hre);t+=re.packedLength;let r=e[t++],s=e[t++],a=e[t++],c=e[t++],l=e[t];return d(n)?(n._rectangle=de.clone(i,n._rectangle),n._ellipsoid=re.clone(o,n._ellipsoid),n._surfaceHeight=s,n._rotation=a,n._extrudedHeight=c,n._offsetAttribute=l===-1?void 0:l,n):(hC.granularity=r,hC.height=s,hC.rotation=a,hC.extrudedHeight=c,hC.offsetAttribute=l===-1?void 0:l,new fC(hC))};var gBe=new he;fC.createGeometry=function(e){let t=e._rectangle,n=e._ellipsoid,i=ls.computeOptions(t,e._granularity,e._rotation,0,bBe,gBe),o,r;if(W.equalsEpsilon(t.north,t.south,W.EPSILON10)||W.equalsEpsilon(t.east,t.west,W.EPSILON10))return;let s=e._surfaceHeight,a=e._extrudedHeight,c=!W.equalsEpsilon(s,a,0,W.EPSILON2),l;if(c){if(o=yBe(e,i),d(e._offsetAttribute)){let p=o.attributes.position.values.length/3,y=new Uint8Array(p);e._offsetAttribute===on.TOP?y=y.fill(1,0,p/2):(l=e._offsetAttribute===on.NONE?0:1,y=y.fill(l)),o.attributes.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:y})}let u=ce.fromRectangle3D(t,n,s,fBe),m=ce.fromRectangle3D(t,n,a,hBe);r=ce.union(u,m)}else{if(o=Ore(e,i),o.attributes.position.values=ai.scaleToGeodeticHeight(o.attributes.position.values,s,n,!1),d(e._offsetAttribute)){let u=o.attributes.position.values.length;l=e._offsetAttribute===on.NONE?0:1;let m=new Uint8Array(u/3).fill(l);o.attributes.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:m})}r=ce.fromRectangle3D(t,n,s)}return new dt({attributes:o.attributes,indices:o.indices,primitiveType:Fe.LINES,boundingSphere:r,offsetAttribute:e._offsetAttribute})};var qx=fC;function bC(e){this.rectangle=de.clone(e.rectangle),this.minimumHeight=g(e.minimumHeight,0),this.maximumHeight=g(e.maximumHeight,0),this.southwestCornerCartesian=new h,this.northeastCornerCartesian=new h,this.westNormal=new h,this.southNormal=new h,this.eastNormal=new h,this.northNormal=new h;let t=g(e.ellipsoid,re.WGS84);CBe(this,e.rectangle,t),this._orientedBoundingBox=void 0,this._boundingSphere=void 0,g(e.computeBoundingVolumes,!0)&&this.computeBoundingVolumes(t)}Object.defineProperties(bC.prototype,{boundingVolume:{get:function(){return this._orientedBoundingBox}},boundingSphere:{get:function(){return this._boundingSphere}}});bC.prototype.computeBoundingVolumes=function(e){this._orientedBoundingBox=Wn.fromRectangle(this.rectangle,this.minimumHeight,this.maximumHeight,e),this._boundingSphere=ce.fromOrientedBoundingBox(this._orientedBoundingBox)};var zre=new h,yN=new h,Jre=new h,xBe=new h,_Be=new h,TBe=new h,SBe=new h,fu=new he,Qre=new sn(h.UNIT_X,0),pC=new Sn;function CBe(e,t,n){n.cartographicToCartesian(de.southwest(t),e.southwestCornerCartesian),n.cartographicToCartesian(de.northeast(t),e.northeastCornerCartesian),fu.longitude=t.west,fu.latitude=(t.south+t.north)*.5,fu.height=0;let i=n.cartographicToCartesian(fu,TBe),o=h.cross(i,h.UNIT_Z,xBe);h.normalize(o,e.westNormal),fu.longitude=t.east;let r=n.cartographicToCartesian(fu,SBe),s=h.cross(h.UNIT_Z,r,zre);h.normalize(s,e.eastNormal);let a=h.subtract(i,r,zre);h.magnitude(a)===0&&(a=h.clone(o,a));let c=h.normalize(a,_Be),l=t.south,u;if(l>0){fu.longitude=(t.west+t.east)*.5,fu.latitude=l;let x=n.cartographicToCartesian(fu,pC.origin);h.clone(c,pC.direction);let _=sn.fromPointNormal(e.southwestCornerCartesian,e.westNormal,Qre);Si.rayPlane(pC,_,e.southwestCornerCartesian),u=n.geodeticSurfaceNormal(x,yN)}else u=n.geodeticSurfaceNormalCartographic(de.southeast(t),yN);let m=h.cross(u,a,Jre);h.normalize(m,e.southNormal);let p=t.north,y;if(p<0){fu.longitude=(t.west+t.east)*.5,fu.latitude=p;let x=n.cartographicToCartesian(fu,pC.origin);h.negate(c,pC.direction);let _=sn.fromPointNormal(e.northeastCornerCartesian,e.eastNormal,Qre);Si.rayPlane(pC,_,e.northeastCornerCartesian),y=n.geodeticSurfaceNormal(x,yN)}else y=n.geodeticSurfaceNormalCartographic(de.northwest(t),yN);let f=h.cross(a,y,Jre);h.normalize(f,e.northNormal)}var VBe=new h,LBe=new h,RBe=new h(0,-1,0),ZBe=new h(0,0,-1),jre=new h;function GBe(e,t){let n=t.camera,i=n.positionWC,o=n.positionCartographic,r=0;if(!de.contains(e.rectangle,o)){let l=e.southwestCornerCartesian,u=e.northeastCornerCartesian,m=e.westNormal,p=e.southNormal,y=e.eastNormal,f=e.northNormal;t.mode!==ie.SCENE3D&&(l=t.mapProjection.project(de.southwest(e.rectangle),VBe),l.z=l.y,l.y=l.x,l.x=0,u=t.mapProjection.project(de.northeast(e.rectangle),LBe),u.z=u.y,u.y=u.x,u.x=0,m=RBe,y=h.UNIT_Y,p=ZBe,f=h.UNIT_Z);let x=h.subtract(i,l,jre),_=h.dot(x,m),C=h.dot(x,p),V=h.subtract(i,u,jre),L=h.dot(V,y),Z=h.dot(V,f);_>0?r+=_*_:L>0&&(r+=L*L),C>0?r+=C*C:Z>0&&(r+=Z*Z)}let s,a,c;if(t.mode===ie.SCENE3D?(s=o.height,a=e.minimumHeight,c=e.maximumHeight):(s=i.x,a=0,c=0),s>c){let l=s-c;r+=l*l}else if(s<a){let l=a-s;r+=l*l}return Math.sqrt(r)}bC.prototype.distanceToCamera=function(e){let t=GBe(this,e);if(e.mode===ie.SCENE3D&&d(this._orientedBoundingBox)){let n=Math.sqrt(this._orientedBoundingBox.distanceSquaredTo(e.camera.positionWC));return Math.max(t,n)}return t};bC.prototype.intersectPlane=function(e){return this._orientedBoundingBox.intersectPlane(e)};bC.prototype.createDebugVolume=function(e){let t=new A.clone(A.IDENTITY),n=new qx({rectangle:this.rectangle,height:this.minimumHeight,extrudedHeight:this.maximumHeight}),i=new _t({geometry:n,id:"outline",modelMatrix:t,attributes:{color:Ut.fromColor(e)}});return new Zn({geometryInstances:i,appearance:new rn({translucent:!1,flat:!0}),asynchronous:!1})};var pu=bC;var MIn=T(S(),1);var _In=T(S(),1);var GXn=T(S(),1);var xW={},EBe=new h,qre=new h,$re=new h,ese=new h,tse=new Wn;xW.validOutline=function(e){let n=Wn.fromPoints(e,tse).halfAxes,i=$.getColumn(n,0,qre),o=$.getColumn(n,1,$re),r=$.getColumn(n,2,ese),s=h.magnitude(i),a=h.magnitude(o),c=h.magnitude(r);return!(s===0&&(a===0||c===0)||a===0&&c===0)};xW.computeProjectTo2DArguments=function(e,t,n,i){let o=Wn.fromPoints(e,tse),r=o.halfAxes,s=$.getColumn(r,0,qre),a=$.getColumn(r,1,$re),c=$.getColumn(r,2,ese),l=h.magnitude(s),u=h.magnitude(a),m=h.magnitude(c),p=Math.min(l,u,m);if(l===0&&(u===0||m===0)||u===0&&m===0)return!1;let y,f;return(p===u||p===m)&&(y=s),p===l?y=a:p===m&&(f=a),(p===l||p===u)&&(f=c),h.normalize(y,n),h.normalize(f,i),h.clone(o.center,t),!0};function nse(e,t,n,i,o){let r=h.subtract(e,t,EBe),s=h.dot(n,r),a=h.dot(i,r);return D.fromElements(s,a,o)}xW.createProjectPointsTo2DFunction=function(e,t,n){return function(i){let o=new Array(i.length);for(let r=0;r<i.length;r++)o[r]=nse(i[r],e,t,n);return o}};xW.createProjectPointTo2DFunction=function(e,t,n){return function(i,o){return nse(i,e,t,n,o)}};var jp=xW;var iIn=T(S(),1);var XXn=T(S(),1);function ey(){this._array=[],this._offset=0,this._length=0}Object.defineProperties(ey.prototype,{length:{get:function(){return this._length}}});ey.prototype.enqueue=function(e){this._array.push(e),this._length++};ey.prototype.dequeue=function(){if(this._length===0)return;let e=this._array,t=this._offset,n=e[t];return e[t]=void 0,t++,t>10&&t*2>e.length&&(this._array=e.slice(t),t=0),this._offset=t,this._length--,n};ey.prototype.peek=function(){if(this._length!==0)return this._array[this._offset]};ey.prototype.contains=function(e){return this._array.indexOf(e)!==-1};ey.prototype.clear=function(){this._array.length=this._offset=this._length=0};ey.prototype.sort=function(e){this._offset>0&&(this._array=this._array.slice(this._offset),this._offset=0),this._array.sort(e)};var ty=ey;var Ho={};Ho.computeHierarchyPackedLength=function(e,t){let n=0,i=[e];for(;i.length>0;){let o=i.pop();if(!d(o))continue;n+=2;let r=o.positions,s=o.holes;if(d(r)&&r.length>0&&(n+=r.length*t.packedLength),d(s)){let a=s.length;for(let c=0;c<a;++c)i.push(s[c])}}return n};Ho.packPolygonHierarchy=function(e,t,n,i){let o=[e];for(;o.length>0;){let r=o.pop();if(!d(r))continue;let s=r.positions,a=r.holes;if(t[n++]=d(s)?s.length:0,t[n++]=d(a)?a.length:0,d(s)){let c=s.length;for(let l=0;l<c;++l,n+=i.packedLength)i.pack(s[l],t,n)}if(d(a)){let c=a.length;for(let l=0;l<c;++l)o.push(a[l])}}return n};Ho.unpackPolygonHierarchy=function(e,t,n){let i=e[t++],o=e[t++],r=new Array(i),s=o>0?new Array(o):void 0;for(let a=0;a<i;++a,t+=n.packedLength)r[a]=n.unpack(e,t);for(let a=0;a<o;++a)s[a]=Ho.unpackPolygonHierarchy(e,t,n),t=s[a].startingIndex,delete s[a].startingIndex;return{positions:r,holes:s,startingIndex:t}};var $x=new D;function rse(e,t,n,i){return D.subtract(t,e,$x),D.multiplyByScalar($x,n/i,$x),D.add(e,$x,$x),[$x.x,$x.y]}var ny=new h;function XBe(e,t,n,i){return h.subtract(t,e,ny),h.multiplyByScalar(ny,n/i,ny),h.add(e,ny,ny),[ny.x,ny.y,ny.z]}Ho.subdivideLineCount=function(e,t,n){let o=h.distance(e,t)/n,r=Math.max(0,Math.ceil(W.log2(o)));return Math.pow(2,r)};var xN=new he,_N=new he,IBe=new he,WBe=new h,gN=new ma;Ho.subdivideRhumbLineCount=function(e,t,n,i){let o=e.cartesianToCartographic(t,xN),r=e.cartesianToCartographic(n,_N),a=new ma(o,r,e).surfaceDistance/i,c=Math.max(0,Math.ceil(W.log2(a)));return Math.pow(2,c)};Ho.subdivideTexcoordLine=function(e,t,n,i,o,r){let s=Ho.subdivideLineCount(n,i,o),a=D.distance(e,t),c=a/s,l=r;l.length=s*2;let u=0;for(let m=0;m<s;m++){let p=rse(e,t,m*c,a);l[u++]=p[0],l[u++]=p[1]}return l};Ho.subdivideLine=function(e,t,n,i){let o=Ho.subdivideLineCount(e,t,n),r=h.distance(e,t),s=r/o;d(i)||(i=[]);let a=i;a.length=o*3;let c=0;for(let l=0;l<o;l++){let u=XBe(e,t,l*s,r);a[c++]=u[0],a[c++]=u[1],a[c++]=u[2]}return a};Ho.subdivideTexcoordRhumbLine=function(e,t,n,i,o,r,s){let a=n.cartesianToCartographic(i,xN),c=n.cartesianToCartographic(o,_N);gN.setEndPoints(a,c);let l=gN.surfaceDistance/r,u=Math.max(0,Math.ceil(W.log2(l))),m=Math.pow(2,u),p=D.distance(e,t),y=p/m,f=s;f.length=m*2;let x=0;for(let _=0;_<m;_++){let C=rse(e,t,_*y,p);f[x++]=C[0],f[x++]=C[1]}return f};Ho.subdivideRhumbLine=function(e,t,n,i,o){let r=e.cartesianToCartographic(t,xN),s=e.cartesianToCartographic(n,_N),a=new ma(r,s,e),c=a.surfaceDistance/i,l=Math.max(0,Math.ceil(W.log2(c))),u=Math.pow(2,l),m=a.surfaceDistance/u;d(o)||(o=[]);let p=o;p.length=u*3;let y=0;for(let f=0;f<u;f++){let x=a.interpolateUsingSurfaceDistance(f*m,IBe),_=e.cartographicToCartesian(x,WBe);p[y++]=_.x,p[y++]=_.y,p[y++]=_.z}return p};var PBe=new h,vBe=new h,wBe=new h,FBe=new h;Ho.scaleToGeodeticHeightExtruded=function(e,t,n,i,o){i=g(i,re.WGS84);let r=PBe,s=vBe,a=wBe,c=FBe;if(d(e)&&d(e.attributes)&&d(e.attributes.position)){let l=e.attributes.position.values,u=l.length/2;for(let m=0;m<u;m+=3)h.fromArray(l,m,a),i.geodeticSurfaceNormal(a,r),c=i.scaleToGeodeticSurface(a,c),s=h.multiplyByScalar(r,n,s),s=h.add(c,s,s),l[m+u]=s.x,l[m+1+u]=s.y,l[m+2+u]=s.z,o&&(c=h.clone(a,c)),s=h.multiplyByScalar(r,t,s),s=h.add(c,s,s),l[m]=s.x,l[m+1]=s.y,l[m+2]=s.z}return e};Ho.polygonOutlinesFromHierarchy=function(e,t,n){let i=[],o=new ty;o.enqueue(e);let r,s,a;for(;o.length!==0;){let c=o.dequeue(),l=c.positions;if(t)for(a=l.length,r=0;r<a;r++)n.scaleToGeodeticSurface(l[r],l[r]);if(l=go(l,h.equalsEpsilon,!0),l.length<3)continue;let u=c.holes?c.holes.length:0;for(r=0;r<u;r++){let m=c.holes[r],p=m.positions;if(t)for(a=p.length,s=0;s<a;++s)n.scaleToGeodeticSurface(p[s],p[s]);if(p=go(p,h.equalsEpsilon,!0),p.length<3)continue;i.push(p);let y=0;for(d(m.holes)&&(y=m.holes.length),s=0;s<y;s++)o.enqueue(m.holes[s])}i.push(l)}return i};var ABe=new he;function MBe(e,t,n){let i=n.cartesianToCartographic(e,xN),o=n.cartesianToCartographic(t,_N);if(Math.sign(i.latitude)===Math.sign(o.latitude))return;gN.setEndPoints(i,o);let r=gN.findIntersectionWithLatitude(0,ABe);if(!d(r))return;let s=Math.min(i.longitude,o.longitude),a=Math.max(i.longitude,o.longitude);if(Math.abs(a-s)>W.PI){let c=s;s=a,a=c}if(!(r.longitude<s||r.longitude>a))return n.cartographicToCartesian(r)}function NBe(e,t,n,i){if(i===Jt.RHUMB)return MBe(e,t,n);let o=Si.lineSegmentPlane(e,t,sn.ORIGIN_XY_PLANE);if(d(o))return n.scaleToGeodeticSurface(o,o)}var UBe=new he;function kBe(e,t,n){let i=[],o,r,s,a,c,l=0;for(;l<e.length;){o=e[l],r=e[(l+1)%e.length],s=W.sign(o.z),a=W.sign(r.z);let u=m=>t.cartesianToCartographic(m,UBe).longitude;if(s===0)i.push({position:l,type:s,visited:!1,next:a,theta:u(o)});else if(a!==0){if(c=NBe(o,r,t,n),++l,!d(c))continue;e.splice(l,0,c),i.push({position:l,type:s,visited:!1,next:a,theta:u(c)})}++l}return i}function sse(e,t,n,i,o,r,s){let a=[],c=r,l=m=>p=>p.position===m,u=[];do{let m=n[c];a.push(m);let p=i.findIndex(l(c)),y=i[p];if(!d(y)){++c;continue}let{visited:f,type:x,next:_}=y;if(y.visited=!0,x===0){if(_===0){let Z=i[p-(s?1:-1)];if(Z?.position===c+1)Z.visited=!0;else{++c;continue}}if(!f&&s&&_>0||r===c&&!s&&_<0){++c;continue}}if(!(s?x>=0:x<=0)){++c;continue}f||u.push(c);let V=p+(s?1:-1),L=i[V];if(!d(L)){++c;continue}c=L.position}while(c<n.length&&c>=0&&c!==r&&a.length<n.length);e.splice(t,o,a);for(let m of u)t=sse(e,++t,n,i,0,m,!s);return t}Ho.splitPolygonsOnEquator=function(e,t,n,i){d(i)||(i=[]),i.splice(0,0,...e),i.length=e.length;let o=0;for(;o<i.length;){let r=i[o],s=r.slice();if(r.length<3){i[o]=s,++o;continue}let a=kBe(s,t,n);if(s.length===r.length||a.length<=1){i[o]=s,++o;continue}a.sort((l,u)=>l.theta-u.theta);let c=s[0].z>=0;o=sse(i,o,s,a,1,0,c)}return i};Ho.polygonsFromHierarchy=function(e,t,n,i,o,r){let s=[],a=[],c=new ty;c.enqueue(e);let l=d(r);for(;c.length!==0;){let u=c.dequeue(),m=u.positions,p=u.holes,y,f;if(i)for(f=m.length,y=0;y<f;y++)o.scaleToGeodeticSurface(m[y],m[y]);if(t||(m=go(m,h.equalsEpsilon,!0)),m.length<3)continue;let x=n(m);if(!d(x))continue;let _=[],C=ai.computeWindingOrder2D(x);if(C===Jr.CLOCKWISE&&(x.reverse(),m=m.slice().reverse()),l){l=!1;let X=[m];if(X=r(X,X),X.length>1){for(let P of X)c.enqueue(new ha(P,p));continue}}let V=m.slice(),L=d(p)?p.length:0,Z=[],G;for(y=0;y<L;y++){let X=p[y],P=X.positions;if(i)for(f=P.length,G=0;G<f;++G)o.scaleToGeodeticSurface(P[G],P[G]);if(t||(P=go(P,h.equalsEpsilon,!0)),P.length<3)continue;let v=n(P);if(!d(v))continue;C=ai.computeWindingOrder2D(v),C===Jr.CLOCKWISE&&(v.reverse(),P=P.slice().reverse()),Z.push(P),_.push(V.length),V=V.concat(P),x=x.concat(v);let F=0;for(d(X.holes)&&(F=X.holes.length),G=0;G<F;G++)c.enqueue(X.holes[G])}s.push({outerRing:m,holes:Z}),a.push({positions:V,positions2D:x,holes:_})}return{hierarchy:s,polygons:a}};var DBe=new D,BBe=new h,YBe=new Ae,OBe=new $;Ho.computeBoundingRectangle=function(e,t,n,i,o){let r=Ae.fromAxisAngle(e,i,YBe),s=$.fromQuaternion(r,OBe),a=Number.POSITIVE_INFINITY,c=Number.NEGATIVE_INFINITY,l=Number.POSITIVE_INFINITY,u=Number.NEGATIVE_INFINITY,m=n.length;for(let p=0;p<m;++p){let y=h.clone(n[p],BBe);$.multiplyByVector(s,y,y);let f=t(y,DBe);d(f)&&(a=Math.min(a,f.x),c=Math.max(c,f.x),l=Math.min(l,f.y),u=Math.max(u,f.y))}return o.x=a,o.y=l,o.width=c-a,o.height=u-l,o};Ho.createGeometryFromPositions=function(e,t,n,i,o,r,s){let a=ai.triangulate(t.positions2D,t.holes);a.length<3&&(a=[0,1,2]);let c=t.positions,l=d(n),u=l?n.positions:void 0;if(o){let m=c.length,p=new Array(m*3),y=0;for(let _=0;_<m;_++){let C=c[_];p[y++]=C.x,p[y++]=C.y,p[y++]=C.z}let f={attributes:{position:new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:p})},indices:a,primitiveType:Fe.TRIANGLES};l&&(f.attributes.st=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:D.packArray(u)}));let x=new dt(f);return r.normal?An.computeNormal(x):x}if(s===Jt.GEODESIC)return ai.computeSubdivision(e,c,a,u,i);if(s===Jt.RHUMB)return ai.computeRhumbLineSubdivision(e,c,a,u,i)};var ise=[],ose=[],KBe=new h,HBe=new h;Ho.computeWallGeometry=function(e,t,n,i,o,r){let s,a,c,l,u,m,p,y,f,x=e.length,_=0,C=0,V=d(t),L=V?t.positions:void 0;if(o)for(a=x*3*2,s=new Array(a*2),V&&(f=x*2*2,y=new Array(f*2)),c=0;c<x;c++)l=e[c],u=e[(c+1)%x],s[_]=s[_+a]=l.x,++_,s[_]=s[_+a]=l.y,++_,s[_]=s[_+a]=l.z,++_,s[_]=s[_+a]=u.x,++_,s[_]=s[_+a]=u.y,++_,s[_]=s[_+a]=u.z,++_,V&&(m=L[c],p=L[(c+1)%x],y[C]=y[C+f]=m.x,++C,y[C]=y[C+f]=m.y,++C,y[C]=y[C+f]=p.x,++C,y[C]=y[C+f]=p.y,++C);else{let v=W.chordLength(i,n.maximumRadius),F=0;if(r===Jt.GEODESIC)for(c=0;c<x;c++)F+=Ho.subdivideLineCount(e[c],e[(c+1)%x],v);else if(r===Jt.RHUMB)for(c=0;c<x;c++)F+=Ho.subdivideRhumbLineCount(n,e[c],e[(c+1)%x],v);for(a=(F+x)*3,s=new Array(a*2),V&&(f=(F+x)*2,y=new Array(f*2)),c=0;c<x;c++){l=e[c],u=e[(c+1)%x];let M,b;V&&(m=L[c],p=L[(c+1)%x]),r===Jt.GEODESIC?(M=Ho.subdivideLine(l,u,v,ose),V&&(b=Ho.subdivideTexcoordLine(m,p,l,u,v,ise))):r===Jt.RHUMB&&(M=Ho.subdivideRhumbLine(n,l,u,v,ose),V&&(b=Ho.subdivideTexcoordRhumbLine(m,p,n,l,u,v,ise)));let R=M.length;for(let E=0;E<R;++E,++_)s[_]=M[E],s[_+a]=M[E];if(s[_]=u.x,s[_+a]=u.x,++_,s[_]=u.y,s[_+a]=u.y,++_,s[_]=u.z,s[_+a]=u.z,++_,V){let E=b.length;for(let I=0;I<E;++I,++C)y[C]=b[I],y[C+f]=b[I];y[C]=p.x,y[C+f]=p.x,++C,y[C]=p.y,y[C+f]=p.y,++C}}}x=s.length;let Z=Ue.createTypedArray(x/3,x-e.length*6),G=0;for(x/=6,c=0;c<x;c++){let v=c,F=v+1,M=v+x,b=M+1;l=h.fromArray(s,v*3,KBe),u=h.fromArray(s,F*3,HBe),!h.equalsEpsilon(l,u,W.EPSILON10,W.EPSILON10)&&(Z[G++]=v,Z[G++]=M,Z[G++]=F,Z[G++]=F,Z[G++]=M,Z[G++]=b)}let X={attributes:new hn({position:new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:s})}),indices:Z,primitiveType:Fe.TRIANGLES};return V&&(X.attributes.st=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:y})),new dt(X)};var Bn=Ho;function zBe(e){let t=e.length,n=new Float64Array(t*3),i=Ue.createTypedArray(t,t*2),o=0,r=0;for(let a=0;a<t;a++){let c=e[a];n[o++]=c.x,n[o++]=c.y,n[o++]=c.z,i[r++]=a,i[r++]=(a+1)%t}let s=new hn({position:new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:n})});return new dt({attributes:s,indices:i,primitiveType:Fe.LINES})}function e_(e){e=g(e,g.EMPTY_OBJECT);let t=e.polygonHierarchy;this._polygonHierarchy=t,this._workerName="createCoplanarPolygonOutlineGeometry",this.packedLength=Bn.computeHierarchyPackedLength(t,h)+1}e_.fromPositions=function(e){e=g(e,g.EMPTY_OBJECT);let t={polygonHierarchy:{positions:e.positions}};return new e_(t)};e_.pack=function(e,t,n){return n=g(n,0),n=Bn.packPolygonHierarchy(e._polygonHierarchy,t,n,h),t[n]=e.packedLength,t};var JBe={polygonHierarchy:{}};e_.unpack=function(e,t,n){t=g(t,0);let i=Bn.unpackPolygonHierarchy(e,t,h);t=i.startingIndex,delete i.startingIndex;let o=e[t];return d(n)||(n=new e_(JBe)),n._polygonHierarchy=i,n.packedLength=o,n};e_.createGeometry=function(e){let t=e._polygonHierarchy,n=t.positions;if(n=go(n,h.equalsEpsilon,!0),n.length<3||!jp.validOutline(n))return;let o=Bn.polygonOutlinesFromHierarchy(t,!1);if(o.length===0)return;let r=[];for(let c=0;c<o.length;c++){let l=new _t({geometry:zBe(o[c])});r.push(l)}let s=An.combineInstances(r)[0],a=ce.fromPoints(t.positions);return new dt({attributes:s.attributes,indices:s.indices,primitiveType:s.primitiveType,boundingSphere:a})};var bu=e_;var TN=new he;function _W(e){let t=_p.fromToken(e.token),n=g(e.minimumHeight,0),i=g(e.maximumHeight,0),o=g(e.ellipsoid,re.WGS84);this.s2Cell=t,this.minimumHeight=n,this.maximumHeight=i,this.ellipsoid=o;let r=o3e(t,n,i,o);this._boundingPlanes=r;let s=c3e(r);this._vertices=s,this._edgeNormals=new Array(6),this._edgeNormals[0]=QO(r[0],s.slice(0,4));let a;for(a=0;a<4;a++)this._edgeNormals[0][a]=h.negate(this._edgeNormals[0][a],this._edgeNormals[0][a]);for(this._edgeNormals[1]=QO(r[1],s.slice(4,8)),a=0;a<4;a++)this._edgeNormals[2+a]=QO(r[2+a],[s[a%4],s[(a+1)%4],s[4+(a+1)%4],s[4+a]]);for(this._planeVertices=[this._vertices.slice(0,4),this._vertices.slice(4,8)],a=0;a<4;a++)this._planeVertices.push([this._vertices[a%4],this._vertices[(a+1)%4],this._vertices[4+(a+1)%4],this._vertices[4+a]]);let c=t.getCenter();TN=o.cartesianToCartographic(c,TN),TN.height=(i+n)/2,this.center=o.cartographicToCartesian(TN,c),this._boundingSphere=ce.fromPoints(s)}var QBe=new h,jBe=new he,qBe=new h,$Be=new he,e3e=new h,t3e=new h,n3e=new h,i3e=new h;function o3e(e,t,n,i){let o=new Array(6),r=e.getCenter(),s=i.geodeticSurfaceNormal(r,QBe),a=i.cartesianToCartographic(r,jBe);a.height=n;let c=i.cartographicToCartesian(a,qBe),l=sn.fromPointNormal(c,s);o[0]=l;let u=0,m,p=[],y,f;for(m=0;m<4;m++){y=e.getVertex(m),p[m]=y,f=i.cartesianToCartographic(y,$Be),f.height=t;let _=sn.getPointDistance(l,i.cartographicToCartesian(f,e3e));_<u&&(u=_)}let x=sn.clone(l);for(x.normal=h.negate(x.normal,x.normal),x.distance=x.distance*-1+u,o[1]=x,m=0;m<4;m++){y=p[m];let _=p[(m+1)%4],C=i.geodeticSurfaceNormal(y,t3e),V=h.subtract(_,y,i3e),L=h.cross(V,C,n3e);L=h.normalize(L,L),o[2+m]=sn.fromPointNormal(y,L)}return o}var t_=new h,n_=new h,i_=new h,BO=new h,YO=new h,OO=new h,r3e=new h,s3e=new h,a3e=new h,KO=new h,HO=new h,zO=new h,iy=new h,nf=new $;function ase(e,t,n){t_=e.normal,n_=t.normal,i_=n.normal,BO=h.multiplyByScalar(e.normal,-e.distance,BO),YO=h.multiplyByScalar(t.normal,-t.distance,YO),OO=h.multiplyByScalar(n.normal,-n.distance,OO),KO=h.multiplyByScalar(h.cross(n_,i_,r3e),h.dot(BO,t_),KO),HO=h.multiplyByScalar(h.cross(i_,t_,s3e),h.dot(YO,n_),HO),zO=h.multiplyByScalar(h.cross(t_,n_,a3e),h.dot(OO,i_),zO),nf[0]=t_.x,nf[1]=n_.x,nf[2]=i_.x,nf[3]=t_.y,nf[4]=n_.y,nf[5]=i_.y,nf[6]=t_.z,nf[7]=n_.z,nf[8]=i_.z;let i=$.determinant(nf);return iy=h.add(KO,HO,iy),iy=h.add(iy,zO,iy),new h(iy.x/i,iy.y/i,iy.z/i)}function c3e(e){let t=new Array(8);for(let n=0;n<4;n++)t[n]=ase(e[0],e[2+(n+3)%4],e[2+n%4]),t[n+4]=ase(e[1],e[2+(n+3)%4],e[2+n%4]);return t}var JO=new h,yC=new h;function QO(e,t){let n=[];for(let i=0;i<4;i++)JO=h.subtract(t[(i+1)%4],t[i],JO),yC=h.cross(e.normal,JO,yC),yC=h.normalize(yC,yC),n[i]=h.clone(yC);return n}Object.defineProperties(_W.prototype,{boundingVolume:{get:function(){return this}},boundingSphere:{get:function(){return this._boundingSphere}}});var jO=new h;_W.prototype.distanceToCamera=function(e){let t=e.camera.positionWC,n=[],i=[],o;sn.getPointDistance(this._boundingPlanes[0],t)>0?(n.push(0),i.push(this._planeVertices[0]),o=this._edgeNormals[0]):sn.getPointDistance(this._boundingPlanes[1],t)>0&&(n.push(1),i.push(this._planeVertices[1]),o=this._edgeNormals[1]);let r,s;for(r=0;r<4;r++)s=2+r,sn.getPointDistance(this._boundingPlanes[s],t)>0&&(n.push(s),i.push(this._planeVertices[s]),o=this._edgeNormals[s]);if(n.length===0)return 0;let a,c;if(n.length===1)return c=this._boundingPlanes[n[0]],a=qO(sn.projectPointOntoPlane(c,t,jO),i[0],c,o),h.distance(a,t);if(n.length===2){if(n[0]===0){let p=[this._vertices[4*n[0]+(n[1]-2)],this._vertices[4*n[0]+(n[1]-2+1)%4]];return a=cse(t,p[0],p[1]),h.distance(a,t)}let u=Number.MAX_VALUE,m;for(r=0;r<2;r++)c=this._boundingPlanes[n[r]],a=qO(sn.projectPointOntoPlane(c,t,jO),i[r],c,this._edgeNormals[n[r]]),m=h.distanceSquared(a,t),m<u&&(u=m);return Math.sqrt(u)}else if(n.length>3)return a=qO(sn.projectPointOntoPlane(this._boundingPlanes[1],t,jO),this._planeVertices[1],this._boundingPlanes[1],this._edgeNormals[1]),h.distance(a,t);let l=n[1]===2&&n[2]===5?0:1;return n[0]===0?h.distance(t,this._vertices[(n[1]-2+l)%4]):h.distance(t,this._vertices[4+(n[1]-2+l)%4])};var l3e=new h,d3e=new h;function cse(e,t,n){let i=h.subtract(n,t,l3e),o=h.subtract(e,t,d3e),r=h.dot(i,o);if(r<=0)return t;let s=h.dot(i,i);return r>=s?n:(r=r/s,new h((1-r)*t.x+r*n.x,(1-r)*t.y+r*n.y,(1-r)*t.z+r*n.z))}var u3e=new sn(h.UNIT_X,0);function qO(e,t,n,i){let o=Number.MAX_VALUE,r,s,a;for(let c=0;c<t.length;c++){let l=sn.fromPointNormal(t[c],i[c],u3e);sn.getPointDistance(l,e)<0||(a=cse(e,t[c],t[(c+1)%4]),r=h.distance(e,a),r<o&&(o=r,s=a))}return d(s)?s:e}_W.prototype.intersectPlane=function(e){let t=0,n=0;for(let i=0;i<this._vertices.length;i++)h.dot(e.normal,this._vertices[i])+e.distance<0?n++:t++;return t===this._vertices.length?qt.INSIDE:n===this._vertices.length?qt.OUTSIDE:qt.INTERSECTING};_W.prototype.createDebugVolume=function(e){let t=new A.clone(A.IDENTITY),n=new bu({polygonHierarchy:{positions:this._planeVertices[0]}}),i=bu.createGeometry(n),o=new _t({geometry:i,id:"outline",modelMatrix:t,attributes:{color:Ut.fromColor(e)}}),r=new bu({polygonHierarchy:{positions:this._planeVertices[1]}}),s=bu.createGeometry(r),a=new _t({geometry:s,id:"outline",modelMatrix:t,attributes:{color:Ut.fromColor(e)}}),c=[];for(let l=0;l<4;l++){let u=new bu({polygonHierarchy:{positions:this._planeVertices[2+l]}}),m=bu.createGeometry(u);c[l]=new _t({geometry:m,id:"outline",modelMatrix:t,attributes:{color:Ut.fromColor(e)}})}return new Zn({geometryInstances:[c[0],c[1],c[2],c[3],a,o],appearance:new rn({translucent:!1,flat:!0}),asynchronous:!1})};var TW=_W;var bWn=T(S(),1);var rWn=T(S(),1);var $In=T(S(),1);var m3e=new h(1,1,1),SN=Math.cos,CN=Math.sin;function gC(e){e=g(e,g.EMPTY_OBJECT);let t=g(e.radii,m3e),n=g(e.innerRadii,t),i=g(e.minimumClock,0),o=g(e.maximumClock,W.TWO_PI),r=g(e.minimumCone,0),s=g(e.maximumCone,W.PI),a=Math.round(g(e.stackPartitions,10)),c=Math.round(g(e.slicePartitions,8)),l=Math.round(g(e.subdivisions,128));this._radii=h.clone(t),this._innerRadii=h.clone(n),this._minimumClock=i,this._maximumClock=o,this._minimumCone=r,this._maximumCone=s,this._stackPartitions=a,this._slicePartitions=c,this._subdivisions=l,this._offsetAttribute=e.offsetAttribute,this._workerName="createEllipsoidOutlineGeometry"}gC.packedLength=2*h.packedLength+8;gC.pack=function(e,t,n){return n=g(n,0),h.pack(e._radii,t,n),n+=h.packedLength,h.pack(e._innerRadii,t,n),n+=h.packedLength,t[n++]=e._minimumClock,t[n++]=e._maximumClock,t[n++]=e._minimumCone,t[n++]=e._maximumCone,t[n++]=e._stackPartitions,t[n++]=e._slicePartitions,t[n++]=e._subdivisions,t[n]=g(e._offsetAttribute,-1),t};var lse=new h,dse=new h,qp={radii:lse,innerRadii:dse,minimumClock:void 0,maximumClock:void 0,minimumCone:void 0,maximumCone:void 0,stackPartitions:void 0,slicePartitions:void 0,subdivisions:void 0,offsetAttribute:void 0};gC.unpack=function(e,t,n){t=g(t,0);let i=h.unpack(e,t,lse);t+=h.packedLength;let o=h.unpack(e,t,dse);t+=h.packedLength;let r=e[t++],s=e[t++],a=e[t++],c=e[t++],l=e[t++],u=e[t++],m=e[t++],p=e[t];return d(n)?(n._radii=h.clone(i,n._radii),n._innerRadii=h.clone(o,n._innerRadii),n._minimumClock=r,n._maximumClock=s,n._minimumCone=a,n._maximumCone=c,n._stackPartitions=l,n._slicePartitions=u,n._subdivisions=m,n._offsetAttribute=p===-1?void 0:p,n):(qp.minimumClock=r,qp.maximumClock=s,qp.minimumCone=a,qp.maximumCone=c,qp.stackPartitions=l,qp.slicePartitions=u,qp.subdivisions=m,qp.offsetAttribute=p===-1?void 0:p,new gC(qp))};gC.createGeometry=function(e){let t=e._radii;if(t.x<=0||t.y<=0||t.z<=0)return;let n=e._innerRadii;if(n.x<=0||n.y<=0||n.z<=0)return;let i=e._minimumClock,o=e._maximumClock,r=e._minimumCone,s=e._maximumCone,a=e._subdivisions,c=re.fromCartesian3(t),l=e._slicePartitions+1,u=e._stackPartitions+1;l=Math.round(l*Math.abs(o-i)/W.TWO_PI),u=Math.round(u*Math.abs(s-r)/W.PI),l<2&&(l=2),u<2&&(u=2);let m=0,p=1,y=n.x!==t.x||n.y!==t.y||n.z!==t.z,f=!1,x=!1;y&&(p=2,r>0&&(f=!0,m+=l),s<Math.PI&&(x=!0,m+=l));let _=a*p*(u+l),C=new Float64Array(_*3),V=2*(_+m-(l+u)*p),L=Ue.createTypedArray(_,V),Z,G,X,P,v=0,F=new Array(u),M=new Array(u);for(Z=0;Z<u;Z++)P=r+Z*(s-r)/(u-1),F[Z]=CN(P),M[Z]=SN(P);let b=new Array(a),R=new Array(a);for(Z=0;Z<a;Z++)X=i+Z*(o-i)/(a-1),b[Z]=CN(X),R[Z]=SN(X);for(Z=0;Z<u;Z++)for(G=0;G<a;G++)C[v++]=t.x*F[Z]*R[G],C[v++]=t.y*F[Z]*b[G],C[v++]=t.z*M[Z];if(y)for(Z=0;Z<u;Z++)for(G=0;G<a;G++)C[v++]=n.x*F[Z]*R[G],C[v++]=n.y*F[Z]*b[G],C[v++]=n.z*M[Z];for(F.length=a,M.length=a,Z=0;Z<a;Z++)P=r+Z*(s-r)/(a-1),F[Z]=CN(P),M[Z]=SN(P);for(b.length=l,R.length=l,Z=0;Z<l;Z++)X=i+Z*(o-i)/(l-1),b[Z]=CN(X),R[Z]=SN(X);for(Z=0;Z<a;Z++)for(G=0;G<l;G++)C[v++]=t.x*F[Z]*R[G],C[v++]=t.y*F[Z]*b[G],C[v++]=t.z*M[Z];if(y)for(Z=0;Z<a;Z++)for(G=0;G<l;G++)C[v++]=n.x*F[Z]*R[G],C[v++]=n.y*F[Z]*b[G],C[v++]=n.z*M[Z];for(v=0,Z=0;Z<u*p;Z++){let w=Z*a;for(G=0;G<a-1;G++)L[v++]=w+G,L[v++]=w+G+1}let E=u*a*p;for(Z=0;Z<l;Z++)for(G=0;G<a-1;G++)L[v++]=E+Z+G*l,L[v++]=E+Z+(G+1)*l;if(y)for(E=u*a*p+l*a,Z=0;Z<l;Z++)for(G=0;G<a-1;G++)L[v++]=E+Z+G*l,L[v++]=E+Z+(G+1)*l;if(y){let w=u*a*p,N=w+a*l;if(f)for(Z=0;Z<l;Z++)L[v++]=w+Z,L[v++]=N+Z;if(x)for(w+=a*l-l,N+=a*l-l,Z=0;Z<l;Z++)L[v++]=w+Z,L[v++]=N+Z}let I=new hn({position:new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:C})});if(d(e._offsetAttribute)){let w=C.length,N=e._offsetAttribute===on.NONE?0:1,B=new Uint8Array(w/3).fill(N);I.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:B})}return new dt({attributes:I,indices:L,primitiveType:Fe.LINES,boundingSphere:ce.fromEllipsoid(c),offsetAttribute:e._offsetAttribute})};var od=gC;function xC(e){let t=g(e.radius,1),i={radii:new h(t,t,t),stackPartitions:e.stackPartitions,slicePartitions:e.slicePartitions,subdivisions:e.subdivisions};this._ellipsoidGeometry=new od(i),this._workerName="createSphereOutlineGeometry"}xC.packedLength=od.packedLength;xC.pack=function(e,t,n){return od.pack(e._ellipsoidGeometry,t,n)};var h3e=new od,o_={radius:void 0,radii:new h,stackPartitions:void 0,slicePartitions:void 0,subdivisions:void 0};xC.unpack=function(e,t,n){let i=od.unpack(e,t,h3e);return o_.stackPartitions=i._stackPartitions,o_.slicePartitions=i._slicePartitions,o_.subdivisions=i._subdivisions,d(n)?(h.clone(i._radii,o_.radii),n._ellipsoidGeometry=new od(o_),n):(o_.radius=i._radii.x,new xC(o_))};xC.createGeometry=function(e){return od.createGeometry(e._ellipsoidGeometry)};var $p=xC;function _C(e,t){t===0&&(t=W.EPSILON7),this._boundingSphere=new ce(e,t)}Object.defineProperties(_C.prototype,{center:{get:function(){return this._boundingSphere.center}},radius:{get:function(){return this._boundingSphere.radius}},boundingVolume:{get:function(){return this._boundingSphere}},boundingSphere:{get:function(){return this._boundingSphere}}});_C.prototype.distanceToCamera=function(e){let t=this._boundingSphere;return Math.max(0,h.distance(t.center,e.camera.positionWC)-t.radius)};_C.prototype.intersectPlane=function(e){return ce.intersectPlane(this._boundingSphere,e)};_C.prototype.update=function(e,t){h.clone(e,this._boundingSphere.center),this._boundingSphere.radius=t};_C.prototype.createDebugVolume=function(e){let t=new $p({radius:this.radius}),n=A.fromTranslation(this.center,new A.clone(A.IDENTITY)),i=new _t({geometry:t,id:"outline",modelMatrix:n,attributes:{color:Ut.fromColor(e)}});return new Zn({geometryInstances:i,appearance:new rn({translucent:!1,flat:!0}),asynchronous:!1})};var e0=_C;var EWn=T(S(),1);var f3e=new h,p3e=new h,b3e=new h,y3e=new h;function r_(e,t,n){n=h.cross(e,t,n);let i=h.magnitude(n);return h.multiplyByScalar(n,W.EPSILON7/i,n)}function $O(e,t){let n=h.normalize(e,y3e),i=h.equalsEpsilon(n,h.UNIT_X,W.EPSILON6)?h.UNIT_Y:h.UNIT_X;return r_(e,i,t)}function use(e){let t=$.getColumn(e,0,f3e),n=$.getColumn(e,1,p3e),i=$.getColumn(e,2,b3e),o=h.equals(t,h.ZERO),r=h.equals(n,h.ZERO),s=h.equals(i,h.ZERO);return!o&&!r&&!s?e:o&&r&&s?(e[0]=W.EPSILON7,e[4]=W.EPSILON7,e[8]=W.EPSILON7,e):(o&&!r&&!s?t=r_(n,i,t):!o&&r&&!s?n=r_(t,i,n):!o&&!r&&s?i=r_(n,t,i):o?r?s||(t=$O(i,t),n=r_(i,t,n)):(t=$O(n,t),i=r_(n,t,i)):(n=$O(t,n),i=r_(n,t,i)),$.setColumn(e,0,t,e),$.setColumn(e,1,n,e),$.setColumn(e,2,i,e),e)}function TC(e,t){t=use(t),this._orientedBoundingBox=new Wn(e,t),this._boundingSphere=ce.fromOrientedBoundingBox(this._orientedBoundingBox)}Object.defineProperties(TC.prototype,{boundingVolume:{get:function(){return this._orientedBoundingBox}},boundingSphere:{get:function(){return this._boundingSphere}}});TC.prototype.distanceToCamera=function(e){return Math.sqrt(this._orientedBoundingBox.distanceSquaredTo(e.camera.positionWC))};TC.prototype.intersectPlane=function(e){return this._orientedBoundingBox.intersectPlane(e)};TC.prototype.update=function(e,t){h.clone(e,this._orientedBoundingBox.center),t=use(t),$.clone(t,this._orientedBoundingBox.halfAxes),ce.fromOrientedBoundingBox(this._orientedBoundingBox,this._boundingSphere)};TC.prototype.createDebugVolume=function(e){let t=new im({minimum:new h(-1,-1,-1),maximum:new h(1,1,1)}),n=A.fromRotationTranslation(this.boundingVolume.halfAxes,this.boundingVolume.center),i=new _t({geometry:t,id:"outline",modelMatrix:n,attributes:{color:Ut.fromColor(e)}});return new Zn({geometryInstances:i,appearance:new rn({translucent:!1,flat:!0}),asynchronous:!1})};var yu=TC;function zo(e,t,n,i){this._tileset=e,this._header=n;let o=d(n.contents),r=o&&n.contents.length>1||ri(n,"3DTILES_multiple_contents"),s=o&&!r?n.contents[0]:n.content;this._contentHeader=s,this.transform=d(n.transform)?A.unpack(n.transform):A.clone(A.IDENTITY);let a=d(i)?i.computedTransform:e.modelMatrix,c=A.multiply(a,this.transform,new A),l=d(i)?i._initialTransform:A.IDENTITY;this._initialTransform=A.multiply(l,this.transform,new A),this.computedTransform=c,this.metadata=fW(e,n),this._boundingVolume=this.createBoundingVolume(n.boundingVolume,c),this._boundingVolume2D=void 0;let u;d(s)&&d(s.boundingVolume)&&(u=this.createBoundingVolume(s.boundingVolume,c)),this._contentBoundingVolume=u,this._contentBoundingVolume2D=void 0;let m;d(n.viewerRequestVolume)&&(m=this.createBoundingVolume(n.viewerRequestVolume,c)),this._viewerRequestVolume=m,this.geometricError=n.geometricError,this._geometricError=n.geometricError,d(this._geometricError)||(this._geometricError=d(i)?i._geometricError:e._geometricError,zo._deprecationWarning("geometricErrorUndefined","Required property geometricError is undefined for this tile. Using parent's geometric error instead.")),this.updateGeometricErrorScale();let p;d(n.refine)?((n.refine==="replace"||n.refine==="add")&&zo._deprecationWarning("lowercase-refine",`This tile uses a lowercase refine "${n.refine}". Instead use "${n.refine.toUpperCase()}".`),p=n.refine.toUpperCase()==="REPLACE"?Wo.REPLACE:Wo.ADD):d(i)?p=i.refine:p=Wo.REPLACE,this.refine=p,this.children=[],this.parent=i;let y,f=!1,x,_,C;if(t=Ee.createIfNeeded(t),r)x=wo.UNLOADED,_=t.clone();else if(d(s)){let G=s.uri;d(s.url)&&(zo._deprecationWarning("contentUrl",'This tileset JSON uses the "content.url" property which has been deprecated. Use "content.uri" instead.'),G=s.url),G===""?(zo._deprecationWarning("contentUriEmpty","content.uri property is an empty string, which creates a circular dependency, making this tileset invalid. Omit the content property instead"),y=new dC(e,this),f=!0,x=wo.READY):(x=wo.UNLOADED,_=t.getDerivedResource({url:G}),C=wa.getServerKey(_.getUrlComponent()))}else y=new dC(e,this),f=!0,x=wo.READY;this._content=y,this._contentResource=_,this._contentState=x,this._expiredContent=void 0,this._serverKey=C,this.hasEmptyContent=f,this.hasTilesetContent=!1,this.hasImplicitContent=!1,this.hasImplicitContentMetadata=!1,this.hasMultipleContents=r,this.cacheNode=void 0;let V=n.expire,L,Z;d(V)&&(L=V.duration,d(V.date)&&(Z=te.fromIso8601(V.date))),this.expireDuration=L,this.expireDate=Z,this.lastStyleTime=0,this._optimChildrenWithinParent=mu.NOT_COMPUTED,this.clippingPlanesDirty=!1,this.priorityDeferred=!1,this.implicitTileset=void 0,this.implicitCoordinates=void 0,this.implicitSubtree=void 0,this._distanceToCamera=0,this._centerZDepth=0,this._screenSpaceError=0,this._screenSpaceErrorProgressiveResolution=0,this._visibilityPlaneMask=0,this._visible=!1,this._inRequestVolume=!1,this._finalResolution=!0,this._depth=0,this._stackLength=0,this._selectionDepth=0,this._updatedVisibilityFrame=0,this._touchedFrame=0,this._visitedFrame=0,this._selectedFrame=0,this._requestedFrame=0,this._ancestorWithContent=void 0,this._ancestorWithContentAvailable=void 0,this._refines=!1,this._shouldSelect=!1,this._isClipped=!0,this._clippingPlanesState=0,this._debugBoundingVolume=void 0,this._debugContentBoundingVolume=void 0,this._debugViewerRequestVolume=void 0,this._debugColor=Y.fromRandom({alpha:1}),this._debugColorizeTiles=!1,this._priority=0,this._priorityHolder=this,this._priorityProgressiveResolution=!1,this._priorityProgressiveResolutionScreenSpaceErrorLeaf=!1,this._priorityReverseScreenSpaceError=0,this._foveatedFactor=0,this._wasMinPriorityChild=!1,this._loadTimestamp=new te,this._commandsLength=0,this._color=void 0,this._colorDirty=!1,this._request=void 0}zo._deprecationWarning=Qr;Object.defineProperties(zo.prototype,{tileset:{get:function(){return this._tileset}},content:{get:function(){return this._content}},boundingVolume:{get:function(){return this._boundingVolume}},contentBoundingVolume:{get:function(){return g(this._contentBoundingVolume,this._boundingVolume)}},boundingSphere:{get:function(){return this._boundingVolume.boundingSphere}},isVisible:{get:function(){return this._visible&&this._inRequestVolume}},extras:{get:function(){return this._header.extras}},color:{get:function(){return d(this._color)||(this._color=new Y),Y.clone(this._color)},set:function(e){this._color=Y.clone(e,this._color),this._colorDirty=!0}},hasRenderableContent:{get:function(){return!this.hasEmptyContent&&!this.hasTilesetContent&&!this.hasImplicitContent}},contentAvailable:{get:function(){return this.contentReady&&this.hasRenderableContent||d(this._expiredContent)&&!this.contentFailed}},contentReady:{get:function(){return this._contentState===wo.READY}},contentUnloaded:{get:function(){return this._contentState===wo.UNLOADED}},hasUnloadedRenderableContent:{get:function(){return this.hasRenderableContent&&this.contentUnloaded}},contentExpired:{get:function(){return this._contentState===wo.EXPIRED}},contentFailed:{get:function(){return this._contentState===wo.FAILED}},commandsLength:{get:function(){return this._commandsLength}}});var oy=new h;function g3e(e,t){let{tileset:n,boundingSphere:i}=e,{radius:o,center:r}=i,{camera:s}=t,a=h.multiplyByScalar(s.directionWC,e._centerZDepth,oy),c=h.add(s.positionWC,a,oy),l=h.subtract(c,r,oy);if(h.magnitude(l)>o){let Z=h.normalize(l,oy),G=h.multiplyByScalar(Z,o,oy),X=h.add(r,G,oy),P=h.subtract(X,s.positionWC,oy),v=h.normalize(P,oy);e._foveatedFactor=1-Math.abs(h.dot(s.directionWC,v))}else e._foveatedFactor=0;let p=e.refine===Wo.REPLACE,y=n.isSkippingLevelOfDetail;if(p&&!y||!n.foveatedScreenSpaceError||n.foveatedConeSize===1||e._priorityProgressiveResolution&&p&&y||n._pass===Xo.PRELOAD_FLIGHT||n._pass===Xo.PRELOAD)return!1;let f=1-Math.cos(s.frustum.fov*.5),x=n.foveatedConeSize*f;if(e._foveatedFactor<=x)return!1;let _=f-x,C=W.clamp((e._foveatedFactor-x)/_,0,1),V=n.foveatedInterpolationCallback(n.foveatedMinimumScreenSpaceErrorRelaxation,n.memoryAdjustedScreenSpaceError,C),L=e._screenSpaceError===0&&d(e.parent)?e.parent._screenSpaceError*.5:e._screenSpaceError;return n.memoryAdjustedScreenSpaceError-V<=L}var fse=new te;zo.prototype.getScreenSpaceError=function(e,t,n){let i=this._tileset,o=g(n,1),r=d(this.parent)?this.parent.geometricError:i._scaledGeometricError,s=t?r:this.geometricError;if(s===0)return 0;let{camera:a,context:c}=e,l=a.frustum,u=c.drawingBufferWidth,m=c.drawingBufferHeight*o,p;if(e.mode===ie.SCENE2D||l instanceof en){let y=l.offCenterFrustum;d(y)&&(l=y);let f=Math.max(l.top-l.bottom,l.right-l.left)/Math.max(u,m);p=s/f}else{let y=Math.max(this._distanceToCamera,W.EPSILON7),f=l.sseDenominator;if(p=s*m/(y*f),i.dynamicScreenSpaceError){let x=i._dynamicScreenSpaceErrorComputedDensity,_=i.dynamicScreenSpaceErrorFactor,C=W.fog(y,x)*_;p-=C}}return p/=e.pixelRatio,p};function x3e(e,t){if(e.progressiveResolutionHeightFraction<=0||e.progressiveResolutionHeightFraction>.5)return!1;let n=e.memoryAdjustedScreenSpaceError,i=t._screenSpaceErrorProgressiveResolution>n;t._priorityProgressiveResolutionScreenSpaceErrorLeaf=!1;let o=t.parent,r=t._screenSpaceErrorProgressiveResolution<=n,s=d(o)&&o._screenSpaceErrorProgressiveResolution>n;return r&&s&&(t._priorityProgressiveResolutionScreenSpaceErrorLeaf=!0,i=!0),i}function _3e(e,t){let n=t.parent,o=d(n)&&(!e.isSkippingLevelOfDetail||t._screenSpaceError===0||n.hasTilesetContent||n.hasImplicitContent)?n._screenSpaceError:t._screenSpaceError;return e.root._screenSpaceError-o}zo.prototype.updateVisibility=function(e){let{parent:t,tileset:n}=this;if(this._updatedVisibilityFrame===n._updatedVisibilityFrame)return;let i=d(t)?t.computedTransform:n.modelMatrix,o=d(t)?t._visibilityPlaneMask:jr.MASK_INDETERMINATE;this.updateTransform(i),this._distanceToCamera=this.distanceToTile(e),this._centerZDepth=this.distanceToTileCenter(e),this._screenSpaceError=this.getScreenSpaceError(e,!1),this._screenSpaceErrorProgressiveResolution=this.getScreenSpaceError(e,!1,n.progressiveResolutionHeightFraction),this._visibilityPlaneMask=this.visibility(e,o),this._visible=this._visibilityPlaneMask!==jr.MASK_OUTSIDE,this._inRequestVolume=this.insideViewerRequestVolume(e),this._priorityReverseScreenSpaceError=_3e(n,this),this._priorityProgressiveResolution=x3e(n,this),this.priorityDeferred=g3e(this,e),this._updatedVisibilityFrame=n._updatedVisibilityFrame};zo.prototype.updateExpiration=function(){if(d(this.expireDate)&&this.contentReady&&!this.hasEmptyContent&&!this.hasMultipleContents){let e=te.now(fse);te.lessThan(this.expireDate,e)&&(this._contentState=wo.EXPIRED,this._expiredContent=this._content)}};function T3e(e){if(!d(e.expireDuration))return;let t=te.now(fse);te.addSeconds(t,e.expireDuration,t),d(e.expireDate)?te.lessThan(e.expireDate,t)&&te.clone(t,e.expireDate):e.expireDate=te.clone(t)}function S3e(e){return function(){return e._priority}}zo.prototype.requestContent=function(){if(!this.hasEmptyContent)return this.hasMultipleContents?C3e(this):L3e(this)};function C3e(e){let t=e._content,n=e._tileset;if(!d(t)){let o=ri(e._header,"3DTILES_multiple_contents")?e._header.extensions["3DTILES_multiple_contents"]:e._header;t=new pW(n,e,e._contentResource.clone(),o),e._content=t}let i=t.requestInnerContents();if(d(i))return e._contentState=wo.LOADING,i.then(o=>{if(!e.isDestroyed()&&d(o))return e._contentState=wo.PROCESSING,t}).catch(o=>{if(!e.isDestroyed())throw e._contentState=wo.FAILED,o})}async function V3e(e,t,n,i,o){let r=e._contentState;e._contentState=wo.LOADING,++t.statistics.numberOfPendingRequests;let s;try{s=await o}catch(a){if(--t.statistics.numberOfPendingRequests,e.isDestroyed())return;if(n.cancelled||n.state===$n.CANCELLED){e._contentState=r,++t.statistics.numberOfAttemptedRequests;return}throw e._contentState=wo.FAILED,a}if(e.isDestroyed()){--t.statistics.numberOfPendingRequests;return}if(n.cancelled||n.state===$n.CANCELLED){e._contentState=r,--t.statistics.numberOfPendingRequests,++t.statistics.numberOfAttemptedRequests;return}try{let a=await R3e(e,s);return--t.statistics.numberOfPendingRequests,e.isDestroyed()?void 0:(i&&(e.expireDate=void 0),e._content=a,e._contentState=wo.PROCESSING,a)}catch(a){if(--t.statistics.numberOfPendingRequests,e.isDestroyed())return;throw e._contentState=wo.FAILED,a}}function L3e(e){let t=e._contentResource.clone(),n=e.contentExpired;n&&t.setQueryParameters({expired:e.expireDate.toString()});let i=new Uo({throttle:!0,throttleByServer:!0,type:Hr.TILES3D,priorityFunction:S3e(e),serverKey:e._serverKey});e._request=i,t.request=i;let o=e._tileset,r=t.fetchArrayBuffer();if(!d(r)){++o.statistics.numberOfAttemptedRequests;return}return V3e(e,o,i,n,r)}async function R3e(e,t){let n=tf(t),i=e._tileset;i._disableSkipLevelOfDetail=i._disableSkipLevelOfDetail||n.contentType===cs.GEOMETRY||n.contentType===cs.VECTOR,(n.contentType===cs.IMPLICIT_SUBTREE||n.contentType===cs.IMPLICIT_SUBTREE_JSON)&&(e.hasImplicitContent=!0),n.contentType===cs.EXTERNAL_TILESET&&(e.hasTilesetContent=!0);let o,r=zx[n.contentType];if(e.isDestroyed())return;d(n.binaryPayload)?o=await Promise.resolve(r(i,e,e._contentResource,n.binaryPayload.buffer,0)):o=await Promise.resolve(r(i,e,e._contentResource,n.jsonPayload));let s=e._contentHeader;if(e.hasImplicitContentMetadata){let c=e.implicitSubtree,l=e.implicitCoordinates;o.metadata=c.getContentMetadataView(l,0)}else e.hasImplicitContent||(o.metadata=Jx(i,s));let a=Qx(i,s);return d(a)&&(o.group=new ux({metadata:a})),o}zo.prototype.cancelRequests=function(){this.hasMultipleContents?this._content.cancelRequests():this._request.cancel()};zo.prototype.unloadContent=function(){this.hasRenderableContent&&(this._content=this._content&&this._content.destroy(),this._contentState=wo.UNLOADED,this.lastStyleTime=0,this.clippingPlanesDirty=this._clippingPlanesState===0,this._clippingPlanesState=0,this._debugColorizeTiles=!1,this._debugBoundingVolume=this._debugBoundingVolume&&this._debugBoundingVolume.destroy(),this._debugContentBoundingVolume=this._debugContentBoundingVolume&&this._debugContentBoundingVolume.destroy(),this._debugViewerRequestVolume=this._debugViewerRequestVolume&&this._debugViewerRequestVolume.destroy())};var pse=new ce;function tK(e,t){if(t.mode!==ie.SCENE3D&&!d(e._boundingVolume2D)){let n=e._boundingVolume.boundingSphere,i=ce.projectTo2D(n,t.mapProjection,pse);e._boundingVolume2D=new e0(i.center,i.radius)}return t.mode!==ie.SCENE3D?e._boundingVolume2D:e._boundingVolume}function Z3e(e,t){if(t.mode!==ie.SCENE3D&&!d(e._contentBoundingVolume2D)){let n=e._contentBoundingVolume.boundingSphere,i=ce.projectTo2D(n,t.mapProjection,pse);e._contentBoundingVolume2D=new e0(i.center,i.radius)}return t.mode!==ie.SCENE3D?e._contentBoundingVolume2D:e._contentBoundingVolume}zo.prototype.visibility=function(e,t){let n=e.cullingVolume,i=tK(this,e),o=this._tileset,r=o.clippingPlanes;if(d(r)&&r.enabled){let s=r.computeIntersectionWithBoundingVolume(i,o.clippingPlanesOriginMatrix);if(this._isClipped=s!==qt.INSIDE,s===qt.OUTSIDE)return jr.MASK_OUTSIDE}return n.computeVisibilityWithPlaneMask(i,t)};zo.prototype.contentVisibility=function(e){if(!d(this._contentBoundingVolume))return qt.INSIDE;if(this._visibilityPlaneMask===jr.MASK_INSIDE)return qt.INSIDE;let t=e.cullingVolume,n=Z3e(this,e),i=this._tileset,o=i.clippingPlanes;if(d(o)&&o.enabled){let r=o.computeIntersectionWithBoundingVolume(n,i.clippingPlanesOriginMatrix);if(this._isClipped=r!==qt.INSIDE,r===qt.OUTSIDE)return qt.OUTSIDE}return t.computeVisibility(n)};zo.prototype.distanceToTile=function(e){return tK(this,e).distanceToCamera(e)};var G3e=new h;zo.prototype.distanceToTileCenter=function(e){let n=tK(this,e).boundingVolume,i=h.subtract(n.center,e.camera.positionWC,G3e);return h.dot(e.camera.directionWC,i)};zo.prototype.insideViewerRequestVolume=function(e){let t=this._viewerRequestVolume;return!d(t)||t.distanceToCamera(e)===0};var bse=new $,yse=new h,E3e=new $,gse=new h,xse=new de,X3e=new Wn,eK=new A;function I3e(e,t,n){let i=h.fromElements(e[0],e[1],e[2],gse),o=$.fromArray(e,3,E3e);i=A.multiplyByPoint(t,i,i);let r=A.getMatrix3(t,bse);return o=$.multiply(r,o,o),d(n)?(n.update(i,o),n):new yu(i,o)}function W3e(e,t,n,i){let o=de.unpack(e,0,xse),r=e[4],s=e[5],a=Wn.fromRectangle(o,r,s,re.WGS84,X3e),c=a.center,l=a.halfAxes;t=A.multiplyTransformation(t,A.inverseTransformation(n,eK),eK),c=A.multiplyByPoint(t,c,c);let u=A.getMatrix3(t,bse);return l=$.multiply(u,l,l),d(i)&&i instanceof yu?(i.update(c,l),i):new yu(c,l)}function P3e(e,t,n,i){if(!A.equalsEpsilon(t,n,W.EPSILON8))return W3e(e,t,n,i);if(d(i))return i;let o=de.unpack(e,0,xse);return new pu({rectangle:o,minimumHeight:e[4],maximumHeight:e[5]})}function v3e(e,t,n){let i=h.fromElements(e[0],e[1],e[2],gse),o=e[3];i=A.multiplyByPoint(t,i,i);let r=A.getScale(t,yse),s=h.maximumComponent(r);return o*=s,d(n)?(n.update(i,o),n):new e0(i,o)}zo.prototype.createBoundingVolume=function(e,t,n){let i=this.metadata,o;if(d(i)&&(o=Ex.parseBoundingVolumeSemantic("TILE",i)),d(o)&&(e=o),!d(e))throw new me("boundingVolume must be defined");if(ri(e,"3DTILES_bounding_volume_S2"))return new TW(e.extensions["3DTILES_bounding_volume_S2"]);let{box:r,region:s,sphere:a}=e;if(d(r))return I3e(r,t,n);if(d(s))return P3e(s,t,this._initialTransform,n);if(d(a))return v3e(a,t,n);throw new me("boundingVolume must contain a sphere, region, or box")};zo.prototype.updateTransform=function(e){e=g(e,A.IDENTITY);let t=A.multiplyTransformation(e,this.transform,eK);if(!!A.equals(t,this.computedTransform))return;A.clone(t,this.computedTransform);let i=this._header,o=this._contentHeader;this._boundingVolume=this.createBoundingVolume(i.boundingVolume,this.computedTransform,this._boundingVolume),d(this._contentBoundingVolume)&&(this._contentBoundingVolume=this.createBoundingVolume(o.boundingVolume,this.computedTransform,this._contentBoundingVolume)),d(this._viewerRequestVolume)&&(this._viewerRequestVolume=this.createBoundingVolume(i.viewerRequestVolume,this.computedTransform,this._viewerRequestVolume)),this.updateGeometricErrorScale(),this._debugBoundingVolume=this._debugBoundingVolume&&this._debugBoundingVolume.destroy(),this._debugContentBoundingVolume=this._debugContentBoundingVolume&&this._debugContentBoundingVolume.destroy(),this._debugViewerRequestVolume=this._debugViewerRequestVolume&&this._debugViewerRequestVolume.destroy()};zo.prototype.updateGeometricErrorScale=function(){let e=A.getScale(this.computedTransform,yse),t=h.maximumComponent(e);if(this.geometricError=this._geometricError*t,!d(this.parent)){let n=this._tileset;n._scaledGeometricError=n._geometricError*t}};function w3e(e,t,n,i){if(!i.isRender)return;let o=d(e._contentHeader)&&d(e._contentHeader.boundingVolume),r=t.debugShowBoundingVolume||t.debugShowContentBoundingVolume&&!o;if(r){let c;e._finalResolution?e.hasRenderableContent?c=Y.WHITE:c=Y.DARKGRAY:c=Y.YELLOW,d(e._debugBoundingVolume)||(e._debugBoundingVolume=e._boundingVolume.createDebugVolume(c)),e._debugBoundingVolume.update(n);let l=e._debugBoundingVolume.getGeometryInstanceAttributes("outline");l.color=Ut.toValue(c,l.color)}else!r&&d(e._debugBoundingVolume)&&(e._debugBoundingVolume=e._debugBoundingVolume.destroy());t.debugShowContentBoundingVolume&&o?(d(e._debugContentBoundingVolume)||(e._debugContentBoundingVolume=e._contentBoundingVolume.createDebugVolume(Y.BLUE)),e._debugContentBoundingVolume.update(n)):!t.debugShowContentBoundingVolume&&d(e._debugContentBoundingVolume)&&(e._debugContentBoundingVolume=e._debugContentBoundingVolume.destroy()),t.debugShowViewerRequestVolume&&d(e._viewerRequestVolume)?(d(e._debugViewerRequestVolume)||(e._debugViewerRequestVolume=e._viewerRequestVolume.createDebugVolume(Y.YELLOW)),e._debugViewerRequestVolume.update(n)):!t.debugShowViewerRequestVolume&&d(e._debugViewerRequestVolume)&&(e._debugViewerRequestVolume=e._debugViewerRequestVolume.destroy());let s=t.debugColorizeTiles&&!e._debugColorizeTiles||d(t._heatmap.tilePropertyName),a=!t.debugColorizeTiles&&e._debugColorizeTiles;s?(t._heatmap.colorize(e,n),e._debugColorizeTiles=!0,e.color=e._debugColor):a&&(e._debugColorizeTiles=!1,e.color=Y.WHITE),e._colorDirty&&(e._colorDirty=!1,e._content.applyDebugSettings(!0,e._color)),a&&t.makeStyleDirty()}function F3e(e,t,n){let i=e._expiredContent;if(!e.hasMultipleContents&&d(i)){if(!e.contentReady){try{i.update(t,n)}catch{}return}e._expiredContent.destroy(),e._expiredContent=void 0}if(d(e.content))try{e.content.update(t,n)}catch(o){throw e._contentState=wo.FAILED,o}}function A3e(e,t){let n=t.clippingPlanes,i=0;d(n)&&e._isClipped&&n.enabled&&(i=n.clippingPlanesState),i!==e._clippingPlanesState&&(e._clippingPlanesState=i,e.clippingPlanesDirty=!0)}zo.prototype.update=function(e,t,n){let{commandList:i}=t,o=i.length;A3e(this,e),w3e(this,e,t,n),F3e(this,e,t);let r=i.length;this._commandsLength=r-o;for(let s=o;s<r;++s){let a=i[s],c=a.pass===Re.TRANSLUCENT;a.depthForTranslucentClassification=c}this.clippingPlanesDirty=!1};var mse=[];zo.prototype.process=function(e,t){!this.contentExpired&&!this.contentReady&&this._content.ready&&(T3e(this),this._selectedFrame=0,this.lastStyleTime=0,te.now(this._loadTimestamp),this._contentState=wo.READY,!this.hasTilesetContent&&!this.hasImplicitContent&&(e._statistics.incrementLoadCounts(this.content),++e._statistics.numberOfTilesWithContentReady,++e._statistics.numberOfLoadedTilesTotal,e._cache.add(this)));let n=t.commandList;t.commandList=mse;try{this._content.update(e,t)}catch(i){throw this._contentState=wo.FAILED,i}mse.length=0,t.commandList=n};function hse(e,t,n){let i=e*Math.pow(10,t);return parseInt(i)*Math.pow(10,n)}function VN(e,t,n){return Math.max(W.normalize(e,t,n)-W.EPSILON7,0)}zo.prototype.updatePriority=function(){let e=this.tileset,t=e.preferLeaves,n=e._minimumPriority,i=e._maximumPriority,o=4,r=1,s=0,a=o,c=s+a,l=o,u=c+l,m=r,p=Math.pow(10,u),y=u+m,f=r,x=Math.pow(10,y),_=y+f,C=Math.pow(10,_),V=VN(this._depth,n.depth,i.depth);V=t?1-V:V;let Z=!e.isSkippingLevelOfDetail&&this.refine===Wo.REPLACE?VN(this._priorityHolder._distanceToCamera,n.distance,i.distance):VN(this._priorityReverseScreenSpaceError,n.reverseScreenSpaceError,i.reverseScreenSpaceError),G=hse(Z,a,s),X=this._priorityProgressiveResolution?0:p,P=VN(this._priorityHolder._foveatedFactor,n.foveatedFactor,i.foveatedFactor),v=hse(P,l,c),F=this.priorityDeferred?x:0,M=e._pass===Xo.PRELOAD_FLIGHT?0:C;this._priority=V+G+X+v+F+M};zo.prototype.isDestroyed=function(){return!1};zo.prototype.destroy=function(){return this._content=this._content&&this._content.destroy(),this._expiredContent=this._expiredContent&&!this._expiredContent.isDestroyed()&&this._expiredContent.destroy(),this._debugBoundingVolume=this._debugBoundingVolume&&this._debugBoundingVolume.destroy(),this._debugContentBoundingVolume=this._debugContentBoundingVolume&&this._debugContentBoundingVolume.destroy(),this._debugViewerRequestVolume=this._debugViewerRequestVolume&&this._debugViewerRequestVolume.destroy(),ue(this)};var gu=zo;var M2n=T(S(),1);var Z2n=T(S(),1);function t0(e){e=g(e,g.EMPTY_OBJECT);let t=e.id,n=e.group,i=e.class,o=d(n.properties)?n.properties:{};this._class=i,this._properties=o,this._id=t,this._extras=n.extras,this._extensions=n.extensions}Object.defineProperties(t0.prototype,{class:{get:function(){return this._class}},id:{get:function(){return this._id}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});t0.prototype.hasProperty=function(e){return Mn.hasProperty(e,this._properties,this._class)};t0.prototype.hasPropertyBySemantic=function(e){return Mn.hasPropertyBySemantic(e,this._properties,this._class)};t0.prototype.getPropertyIds=function(e){return Mn.getPropertyIds(this._properties,this._class,e)};t0.prototype.getProperty=function(e){return Mn.getProperty(e,this._properties,this._class)};t0.prototype.setProperty=function(e,t){return Mn.setProperty(e,t,this._properties,this._class)};t0.prototype.getPropertyBySemantic=function(e){return Mn.getPropertyBySemantic(e,this._properties,this._class)};t0.prototype.setPropertyBySemantic=function(e,t){return Mn.setPropertyBySemantic(e,t,this._properties,this._class)};var SC=t0;var W2n=T(S(),1);function n0(e){e=g(e,g.EMPTY_OBJECT);let t=e.tileset,n=e.class,i=d(t.properties)?t.properties:{};this._class=n,this._properties=i,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(n0.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});n0.prototype.hasProperty=function(e){return Mn.hasProperty(e,this._properties,this._class)};n0.prototype.hasPropertyBySemantic=function(e){return Mn.hasPropertyBySemantic(e,this._properties,this._class)};n0.prototype.getPropertyIds=function(e){return Mn.getPropertyIds(this._properties,this._class,e)};n0.prototype.getProperty=function(e){return Mn.getProperty(e,this._properties,this._class)};n0.prototype.setProperty=function(e,t){return Mn.setProperty(e,t,this._properties,this._class)};n0.prototype.getPropertyBySemantic=function(e){return Mn.getPropertyBySemantic(e,this._properties,this._class)};n0.prototype.setPropertyBySemantic=function(e,t){return Mn.setPropertyBySemantic(e,t,this._properties,this._class)};var SW=n0;function _se(e){e=g(e,g.EMPTY_OBJECT);let t=e.metadataJson,n=e.schema,i=g(t.metadata,t.tileset),o;d(i)&&(o=new SW({tileset:i,class:n.classes[i.class]}));let r=[],s=[],a=t.groups;if(Array.isArray(a)){let c=a.length;for(let l=0;l<c;l++){let u=a[l];s.push(new SC({group:u,class:n.classes[u.class]}))}}else if(d(a)){r=Object.keys(a).sort();let c=r.length;for(let l=0;l<c;l++){let u=r[l];if(a.hasOwnProperty(u)){let m=a[u];s.push(new SC({id:u,group:a[u],class:n.classes[m.class]}))}}}this._schema=n,this._groups=s,this._groupIds=r,this._tileset=o,this._statistics=t.statistics,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(_se.prototype,{schema:{get:function(){return this._schema}},groups:{get:function(){return this._groups}},groupIds:{get:function(){return this._groupIds}},tileset:{get:function(){return this._tileset}},statistics:{get:function(){return this._statistics}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});var s_=_se;var Y2n=T(S(),1);var Tse={},M3e=new h;Tse.checkChildrenWithinParent=function(e){let t=e.children,n=t.length,i=e.boundingVolume;if(i instanceof yu||i instanceof pu){let o=i._orientedBoundingBox;e._optimChildrenWithinParent=mu.USE_OPTIMIZATION;for(let r=0;r<n;++r){let a=t[r].boundingVolume;if(!(a instanceof yu||a instanceof pu)){e._optimChildrenWithinParent=mu.SKIP_OPTIMIZATION;break}let c=a._orientedBoundingBox,l=h.subtract(c.center,o.center,M3e),u=h.magnitude(l);h.divideByScalar(l,u,l);let m=Math.abs(o.halfAxes[0]*l.x)+Math.abs(o.halfAxes[1]*l.y)+Math.abs(o.halfAxes[2]*l.z)+Math.abs(o.halfAxes[3]*l.x)+Math.abs(o.halfAxes[4]*l.y)+Math.abs(o.halfAxes[5]*l.z)+Math.abs(o.halfAxes[6]*l.x)+Math.abs(o.halfAxes[7]*l.y)+Math.abs(o.halfAxes[8]*l.z),p=Math.abs(c.halfAxes[0]*l.x)+Math.abs(c.halfAxes[1]*l.y)+Math.abs(c.halfAxes[2]*l.z)+Math.abs(c.halfAxes[3]*l.x)+Math.abs(c.halfAxes[4]*l.y)+Math.abs(c.halfAxes[5]*l.z)+Math.abs(c.halfAxes[6]*l.x)+Math.abs(c.halfAxes[7]*l.y)+Math.abs(c.halfAxes[8]*l.z);if(m<=p+u){e._optimChildrenWithinParent=mu.SKIP_OPTIMIZATION;break}}}return e._optimChildrenWithinParent===mu.USE_OPTIMIZATION};var CW=Tse;var j2n=T(S(),1);var H2n=T(S(),1);function VW(){this.head=void 0,this.tail=void 0,this._length=0}Object.defineProperties(VW.prototype,{length:{get:function(){return this._length}}});function N3e(e,t,n){this.item=e,this.previous=t,this.next=n}VW.prototype.add=function(e){let t=new N3e(e,this.tail,void 0);return d(this.tail)?(this.tail.next=t,this.tail=t):(this.head=t,this.tail=t),++this._length,t};function Sse(e,t){d(t.previous)&&d(t.next)?(t.previous.next=t.next,t.next.previous=t.previous):d(t.previous)?(t.previous.next=void 0,e.tail=t.previous):d(t.next)?(t.next.previous=void 0,e.head=t.next):(e.head=void 0,e.tail=void 0),t.next=void 0,t.previous=void 0}VW.prototype.remove=function(e){d(e)&&(Sse(this,e),--this._length)};VW.prototype.splice=function(e,t){if(e===t)return;Sse(this,t);let n=e.next;e.next=t,this.tail===e?this.tail=t:n.previous=t,t.next=n,t.previous=e};var LW=VW;function a_(){this._list=new LW,this._sentinel=this._list.add(),this._trimTiles=!1}a_.prototype.reset=function(){this._list.splice(this._list.tail,this._sentinel)};a_.prototype.touch=function(e){let t=e.cacheNode;d(t)&&this._list.splice(this._sentinel,t)};a_.prototype.add=function(e){d(e.cacheNode)||(e.cacheNode=this._list.add(e))};a_.prototype.unloadTile=function(e,t,n){let i=t.cacheNode;d(i)&&(this._list.remove(i),t.cacheNode=void 0,n(e,t))};a_.prototype.unloadTiles=function(e,t){let n=this._trimTiles;this._trimTiles=!1;let i=this._list,o=this._sentinel,r=i.head;for(;r!==o&&(e.totalMemoryUsageInBytes>e.cacheBytes||n);){let s=r.item;r=r.next,this.unloadTile(e,s,t)}};a_.prototype.trim=function(){this._trimTiles=!0};var RW=a_;var iPn=T(S(),1);function LN(e){this.tilePropertyName=e,this._minimum=Number.MAX_VALUE,this._maximum=-Number.MAX_VALUE,this._previousMinimum=Number.MAX_VALUE,this._previousMaximum=-Number.MAX_VALUE,this._referenceMinimum={},this._referenceMaximum={}}function iK(e,t){let n;return t==="_loadTimestamp"?n=te.toDate(e).getTime():n=e,n}LN.prototype.setReferenceMinimumMaximum=function(e,t,n){this._referenceMinimum[n]=iK(e,n),this._referenceMaximum[n]=iK(t,n)};function U3e(e,t){let n=e.tilePropertyName;if(d(n)){let i=iK(t[n],n);return d(i)?(e._maximum=Math.max(i,e._maximum),e._minimum=Math.min(i,e._minimum),i):(e.tilePropertyName=void 0,i)}}var nK=[new Y(.1,.1,.1,1),new Y(.153,.278,.878,1),new Y(.827,.231,.49,1),new Y(.827,.188,.22,1),new Y(1,.592,.259,1),new Y(1,.843,0,1)];LN.prototype.colorize=function(e,t){let n=this.tilePropertyName;if(!d(n)||!e.contentAvailable||e._selectedFrame!==t.frameNumber)return;let i=U3e(this,e),o=this._previousMinimum,r=this._previousMaximum;if(o===Number.MAX_VALUE||r===-Number.MAX_VALUE)return;let s=r-o+W.EPSILON7,c=W.clamp(i-o,0,s)/s,l=nK.length-1,u=c*l,m=Math.floor(u),p=Math.ceil(u),y=u-m,f=nK[m],x=nK[p],_=Y.clone(Y.WHITE);_.red=W.lerp(f.red,x.red,y),_.green=W.lerp(f.green,x.green,y),_.blue=W.lerp(f.blue,x.blue,y),e._debugColor=_};LN.prototype.resetMinimumMaximum=function(){let e=this.tilePropertyName;if(d(e)){let t=this._referenceMinimum[e],n=this._referenceMaximum[e],i=d(t)&&d(n);this._previousMinimum=i?t:this._minimum,this._previousMaximum=i?n:this._maximum,this._minimum=Number.MAX_VALUE,this._maximum=-Number.MAX_VALUE}};var ZW=LN;var sPn=T(S(),1);function CC(){this.selected=0,this.visited=0,this.numberOfCommands=0,this.numberOfAttemptedRequests=0,this.numberOfPendingRequests=0,this.numberOfTilesProcessing=0,this.numberOfTilesWithContentReady=0,this.numberOfTilesTotal=0,this.numberOfLoadedTilesTotal=0,this.numberOfFeaturesSelected=0,this.numberOfFeaturesLoaded=0,this.numberOfPointsSelected=0,this.numberOfPointsLoaded=0,this.numberOfTrianglesSelected=0,this.numberOfTilesStyled=0,this.numberOfFeaturesStyled=0,this.numberOfTilesCulledWithChildrenUnion=0,this.geometryByteLength=0,this.texturesByteLength=0,this.batchTableByteLength=0}CC.prototype.clear=function(){this.selected=0,this.visited=0,this.numberOfCommands=0,this.numberOfAttemptedRequests=0,this.numberOfFeaturesSelected=0,this.numberOfPointsSelected=0,this.numberOfTrianglesSelected=0,this.numberOfTilesStyled=0,this.numberOfFeaturesStyled=0,this.numberOfTilesCulledWithChildrenUnion=0};function RN(e,t,n,i){let o=t.innerContents,r=t.pointsLength,s=t.trianglesLength,a=t.featuresLength,c=t.geometryByteLength,l=t.texturesByteLength,u=t.batchTableByteLength;if(i?(e.numberOfFeaturesLoaded+=n?-a:a,e.numberOfPointsLoaded+=n?-r:r,e.geometryByteLength+=n?-c:c,e.texturesByteLength+=n?-l:l,e.batchTableByteLength+=n?-u:u):(e.numberOfFeaturesSelected+=n?-a:a,e.numberOfPointsSelected+=n?-r:r,e.numberOfTrianglesSelected+=n?-s:s),d(o)){let m=o.length;for(let p=0;p<m;++p)RN(e,o[p],n,i)}}CC.prototype.incrementSelectionCounts=function(e){RN(this,e,!1,!1)};CC.prototype.incrementLoadCounts=function(e){RN(this,e,!1,!0)};CC.prototype.decrementLoadCounts=function(e){RN(this,e,!0,!0)};CC.clone=function(e,t){t.selected=e.selected,t.visited=e.visited,t.numberOfCommands=e.numberOfCommands,t.selected=e.selected,t.numberOfAttemptedRequests=e.numberOfAttemptedRequests,t.numberOfPendingRequests=e.numberOfPendingRequests,t.numberOfTilesProcessing=e.numberOfTilesProcessing,t.numberOfTilesWithContentReady=e.numberOfTilesWithContentReady,t.numberOfTilesTotal=e.numberOfTilesTotal,t.numberOfFeaturesSelected=e.numberOfFeaturesSelected,t.numberOfFeaturesLoaded=e.numberOfFeaturesLoaded,t.numberOfPointsSelected=e.numberOfPointsSelected,t.numberOfPointsLoaded=e.numberOfPointsLoaded,t.numberOfTrianglesSelected=e.numberOfTrianglesSelected,t.numberOfTilesStyled=e.numberOfTilesStyled,t.numberOfFeaturesStyled=e.numberOfFeaturesStyled,t.numberOfTilesCulledWithChildrenUnion=e.numberOfTilesCulledWithChildrenUnion,t.geometryByteLength=e.geometryByteLength,t.texturesByteLength=e.texturesByteLength,t.batchTableByteLength=e.batchTableByteLength};var i0=CC;var lPn=T(S(),1);function GW(){this._style=void 0,this._styleDirty=!1,this._lastStyleTime=0}Object.defineProperties(GW.prototype,{style:{get:function(){return this._style},set:function(e){e!==this._style&&(this._style=e,this._styleDirty=!0)}}});GW.prototype.makeDirty=function(){this._styleDirty=!0};GW.prototype.resetDirty=function(){this._styleDirty=!1};GW.prototype.applyStyle=function(e){if(!d(e.root)||d(this._style)&&!this._style._ready)return;let t=this._styleDirty;t&&++this._lastStyleTime;let n=this._lastStyleTime,i=e._statistics,o=t?e._selectedTiles:e._selectedTilesToStyle,r=o.length;for(let s=0;s<r;++s){let a=o[s];if(a.lastStyleTime!==n){let c=a.content;a.lastStyleTime=n,c.applyStyle(this._style),i.numberOfFeaturesStyled+=c.featuresLength,++i.numberOfTilesStyled}}};var EW=GW;var yPn=T(S(),1);function k3e(e,t,n){let i=ri(t,"3DTILES_implicit_tiling")?t.extensions["3DTILES_implicit_tiling"]:t.implicitTiling;this.baseResource=e,this.geometricError=t.geometricError,this.metadataSchema=n;let o=t.boundingVolume;if(!d(o.box)&&!d(o.region)&&!ri(o,"3DTILES_bounding_volume_S2")&&!ri(o,"3DTILES_bounding_volume_cylinder"))throw new me("Only box, region, 3DTILES_bounding_volume_S2, and 3DTILES_bounding_volume_cylinder are supported for implicit tiling");this.boundingVolume=o,this.refine=t.refine,this.subtreeUriTemplate=new Ee({url:i.subtrees.uri}),this.contentUriTemplates=[],this.contentHeaders=[];let r=D3e(t);for(let s=0;s<r.length;s++){let a=r[s];this.contentHeaders.push(Ke(a,!0));let c=new Ee({url:a.uri});this.contentUriTemplates.push(c)}this.contentCount=this.contentHeaders.length,this.tileHeader=B3e(t),this.subdivisionScheme=Mr[i.subdivisionScheme],this.branchingFactor=Mr.getBranchingFactor(this.subdivisionScheme),this.subtreeLevels=i.subtreeLevels,d(i.availableLevels)?this.availableLevels=i.availableLevels:this.availableLevels=i.maximumLevel+1}function D3e(e){if(ri(e,"3DTILES_multiple_contents")){let t=e.extensions["3DTILES_multiple_contents"];return d(t.contents)?t.contents:t.content}return d(e.contents)?e.contents:d(e.content)?[e.content]:[]}function B3e(e){let t=Ke(e,!0);return d(t.extensions)&&(delete t.extensions["3DTILES_implicit_tiling"],delete t.extensions["3DTILES_multiple_contents"],Object.keys(t.extensions).length===0&&delete t.extensions),delete t.implicitTiling,delete t.contents,delete t.content,t}var c_=k3e;var LPn=T(S(),1);var _Pn=T(S(),1);var XW={};function Cse(e){return e=(e^e<<8)&16711935,e=(e^e<<4)&252645135,e=(e^e<<2)&858993459,e=(e^e<<1)&1431655765,e}function oK(e){return e=(e^e<<16)&50331903,e=(e^e<<8)&50393103,e=(e^e<<4)&51130563,e=(e^e<<2)&153391689,e}function Vse(e){return e&=1431655765,e=(e^e>>1)&858993459,e=(e^e>>2)&252645135,e=(e^e>>4)&16711935,e=(e^e>>8)&65535,e}function rK(e){return e&=153391689,e=(e^e>>2)&51130563,e=(e^e>>4)&50393103,e=(e^e>>8)&4278190335,e=(e^e>>16)&1023,e}XW.encode2D=function(e,t){return(Cse(e)|Cse(t)<<1)>>>0};XW.decode2D=function(e,t){return d(t)||(t=new Array(2)),t[0]=Vse(e),t[1]=Vse(e>>1),t};XW.encode3D=function(e,t,n){return oK(e)|oK(t)<<1|oK(n)<<2};XW.decode3D=function(e,t){return d(t)||(t=new Array(3)),t[0]=rK(e),t[1]=rK(e>>1),t[2]=rK(e>>2),t};var ry=XW;function Fo(e){this.subdivisionScheme=e.subdivisionScheme,this.subtreeLevels=e.subtreeLevels,this.level=e.level,this.x=e.x,this.y=e.y,this.z=void 0,e.subdivisionScheme===Mr.OCTREE&&(this.z=e.z)}Object.defineProperties(Fo.prototype,{childIndex:{get:function(){let e=0;return e|=this.x&1,e|=(this.y&1)<<1,this.subdivisionScheme===Mr.OCTREE&&(e|=(this.z&1)<<2),e}},mortonIndex:{get:function(){return this.subdivisionScheme===Mr.OCTREE?ry.encode3D(this.x,this.y,this.z):ry.encode2D(this.x,this.y)}},tileIndex:{get:function(){let e=this.subdivisionScheme===Mr.OCTREE?((1<<3*this.level)-1)/7:((1<<2*this.level)-1)/3,t=this.mortonIndex;return e+t}}});Fo.prototype.getDescendantCoordinates=function(e){let t=this.level+e.level,n=(this.x<<e.level)+e.x,i=(this.y<<e.level)+e.y;if(this.subdivisionScheme===Mr.OCTREE){let o=(this.z<<e.level)+e.z;return new Fo({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:n,y:i,z:o})}return new Fo({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:n,y:i})};Fo.prototype.getAncestorCoordinates=function(e){let t=1<<e,n=this.level-e,i=Math.floor(this.x/t),o=Math.floor(this.y/t);if(this.subdivisionScheme===Mr.OCTREE){let r=Math.floor(this.z/t);return new Fo({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:n,x:i,y:o,z:r})}return new Fo({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:n,x:i,y:o})};Fo.prototype.getOffsetCoordinates=function(e){let t=e.level-this.level,n=1<<t,i=e.x%n,o=e.y%n;if(this.subdivisionScheme===Mr.OCTREE){let r=e.z%n;return new Fo({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:i,y:o,z:r})}return new Fo({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:i,y:o})};Fo.prototype.getChildCoordinates=function(e){let t=this.level+1,n=2*this.x+e%2,i=2*this.y+Math.floor(e/2)%2;if(this.subdivisionScheme===Mr.OCTREE){let o=2*this.z+Math.floor(e/4)%2;return new Fo({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:n,y:i,z:o})}return new Fo({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:n,y:i})};Fo.prototype.getSubtreeCoordinates=function(){return this.getAncestorCoordinates(this.level%this.subtreeLevels)};Fo.prototype.getParentSubtreeCoordinates=function(){return this.getAncestorCoordinates(this.level%this.subtreeLevels+this.subtreeLevels)};Fo.prototype.isAncestor=function(e){let t=e.level-this.level;if(t<=0)return!1;let n=e.x>>t,i=e.y>>t,o=this.x===n,r=this.y===i;if(this.subdivisionScheme===Mr.OCTREE){let s=e.z>>t,a=this.z===s;return o&&r&&a}return o&&r};Fo.prototype.isEqual=function(e){return this.subdivisionScheme===e.subdivisionScheme&&this.subtreeLevels===e.subtreeLevels&&this.level===e.level&&this.x===e.x&&this.y===e.y&&(this.subdivisionScheme===Mr.OCTREE?this.z===e.z:!0)};Fo.prototype.isImplicitTilesetRoot=function(){return this.level===0};Fo.prototype.isSubtreeRoot=function(){return this.level%this.subtreeLevels===0};Fo.prototype.isBottomOfSubtree=function(){return this.level%this.subtreeLevels===this.subtreeLevels-1};Fo.prototype.getTemplateValues=function(){let e={level:this.level,x:this.x,y:this.y};return this.subdivisionScheme===Mr.OCTREE&&(e.z=this.z),e};var Lse=[0,0,0];Fo.fromMortonIndex=function(e,t,n,i){let o;return e===Mr.OCTREE?(o=ry.decode3D(i,Lse),new Fo({subdivisionScheme:e,subtreeLevels:t,level:n,x:o[0],y:o[1],z:o[2]})):(o=ry.decode2D(i,Lse),new Fo({subdivisionScheme:e,subtreeLevels:t,level:n,x:o[0],y:o[1]}))};Fo.fromTileIndex=function(e,t,n){let i,o,r;return e===Mr.OCTREE?(i=Math.floor(W.log2(7*n+1)/3),o=((1<<3*i)-1)/7,r=n-o):(i=Math.floor(W.log2(3*n+1)/2),o=((1<<2*i)-1)/3,r=n-o),Fo.fromMortonIndex(e,t,i,r)};var l_=Fo;var MPn=T(S(),1);var WPn=T(S(),1);function o0(){}o0.selectTiles=function(e,t){fe.throwInstantiationError()};o0.sortChildrenByDistanceToCamera=function(e,t){return t._distanceToCamera===0&&e._distanceToCamera===0?t._centerZDepth-e._centerZDepth:t._distanceToCamera-e._distanceToCamera};o0.canTraverse=function(e){return e.children.length===0?!1:e.hasTilesetContent||e.hasImplicitContent?!e.contentExpired:e._screenSpaceError>e.tileset.memoryAdjustedScreenSpaceError};o0.selectTile=function(e,t){if(e.contentVisibility(t)===qt.OUTSIDE)return;let{content:n,tileset:i}=e;n.featurePropertiesDirty?(n.featurePropertiesDirty=!1,e.lastStyleTime=0,i._selectedTilesToStyle.push(e)):e._selectedFrame<t.frameNumber-1&&i._selectedTilesToStyle.push(e),e._selectedFrame=t.frameNumber,i._selectedTiles.push(e)};o0.visitTile=function(e,t){++e.tileset._statistics.visited,e._visitedFrame=t.frameNumber};o0.touchTile=function(e,t){e._touchedFrame!==t.frameNumber&&(e.tileset._cache.touch(e),e._touchedFrame=t.frameNumber)};o0.loadTile=function(e,t){let{tileset:n}=e;if(e._requestedFrame===t.frameNumber||!e.hasUnloadedRenderableContent&&!e.contentExpired||!Y3e(e,t))return;let i=t.camera.timeSinceMoved<n.foveatedTimeDelay;e.priorityDeferred&&i||(e._requestedFrame=t.frameNumber,n._requestedTiles.push(e))};function Y3e(e,t){let{tileset:n}=e;if(!n._cullRequestsWhileMoving)return!0;let{positionWCDeltaMagnitude:i,positionWCDeltaMagnitudeLastFrame:o}=t.camera,r=i!==0?i:o,s=Math.max(e.boundingSphere.radius*2,1);return n.cullRequestsWhileMovingMultiplier*r/s<1}o0.updateTile=function(e,t){Rse(e,t),e.updateExpiration(),e._wasMinPriorityChild=!1,e._priorityHolder=e,H3e(e),e._shouldSelect=!1,e._finalResolution=!0};function Rse(e,t){if(e.updateVisibility(t),!e.isVisible)return;let n=e.children.length>0;if((e.hasTilesetContent||e.hasImplicitContent)&&n){let r=e.children[0];Rse(r,t),e._visible=r._visible;return}if(O3e(e,t)){e._visible=!1;return}let i=e.refine===Wo.REPLACE,o=e._optimChildrenWithinParent===mu.USE_OPTIMIZATION;if(i&&o&&n&&!K3e(e,t)){++e.tileset._statistics.numberOfTilesCulledWithChildrenUnion,e._visible=!1;return}}function O3e(e,t){let{parent:n,tileset:i}=e;return!d(n)||n.hasTilesetContent||n.hasImplicitContent||n.refine!==Wo.ADD?!1:e.getScreenSpaceError(t,!0)<=i.memoryAdjustedScreenSpaceError}function K3e(e,t){let n=!1,i=e.children;for(let o=0;o<i.length;++o){let r=i[o];r.updateVisibility(t),n=n||r.isVisible}return n}function H3e(e){let t=e.tileset._minimumPriority,n=e.tileset._maximumPriority,i=e._priorityHolder;n.distance=Math.max(i._distanceToCamera,n.distance),t.distance=Math.min(i._distanceToCamera,t.distance),n.depth=Math.max(e._depth,n.depth),t.depth=Math.min(e._depth,t.depth),n.foveatedFactor=Math.max(i._foveatedFactor,n.foveatedFactor),t.foveatedFactor=Math.min(i._foveatedFactor,t.foveatedFactor),n.reverseScreenSpaceError=Math.max(e._priorityReverseScreenSpaceError,n.reverseScreenSpaceError),t.reverseScreenSpaceError=Math.min(e._priorityReverseScreenSpaceError,t.reverseScreenSpaceError)}var Gs=o0;function Zse(){}var IW={stack:new Ec,stackMaximumLength:0};Zse.selectTiles=function(e,t){e._selectedTiles.length=0,e._requestedTiles.length=0,e.hasMixedContent=!1;let n=!0,i=e.root;if(i.updateVisibility(t),!i.isVisible)return n;let{touchTile:o,visitTile:r}=Gs,s=IW.stack;for(s.push(i);s.length>0;){IW.stackMaximumLength=Math.max(IW.stackMaximumLength,s.length);let a=s.pop(),c=a.refine===Wo.ADD,l=a.refine===Wo.REPLACE,u=z3e(a);u&&J3e(a,s,t),(c||l&&!u)&&(Q3e(e,a),o(a,t),j3e(a,t),a.hasRenderableContent&&!a.contentAvailable&&(n=!1)),r(a,t)}return IW.stack.trim(IW.stackMaximumLength),n};function z3e(e){return e.children.length===0?!1:e.hasTilesetContent||e.hasImplicitContent?!e.contentExpired:(e.hasEmptyContent,!0)}function J3e(e,t,n){let{children:i}=e;for(let o=0;o<i.length;++o){let r=i[o];r.updateVisibility(n),r.isVisible&&t.push(r)}}function Q3e(e,t){(t.hasUnloadedRenderableContent||t.contentExpired)&&(t._priority=0,e._requestedTiles.push(t))}function j3e(e,t){e.contentAvailable&&e.contentVisibility(t)!==qt.OUTSIDE&&e.tileset._selectedTiles.push(e)}var WW=Zse;var YPn=T(S(),1);function Gse(){}var PW={stack:new Ec,stackMaximumLength:0},vW={stack:new Ec,stackMaximumLength:0};Gse.selectTiles=function(e,t){if(e._requestedTiles.length=0,e.debugFreezeFrame)return;e._selectedTiles.length=0,e._selectedTilesToStyle.length=0,e._emptyTiles.length=0,e.hasMixedContent=!1;let n=e.root;if(Gs.updateTile(n,t),!n.isVisible||n.getScreenSpaceError(t,!0)<=e.memoryAdjustedScreenSpaceError)return;$3e(n,t),PW.stack.trim(PW.stackMaximumLength),vW.stack.trim(vW.stackMaximumLength);let i=e._requestedTiles;for(let o=0;o<i.length;++o)i[o].updatePriority()};function sK(e,t){e.contentAvailable&&Gs.selectTile(e,t)}function q3e(e,t,n){let i=e.refine===Wo.REPLACE,{tileset:o,children:r}=e,{updateTile:s,loadTile:a,touchTile:c}=Gs;for(let f=0;f<r.length;++f)s(r[f],n);r.sort(Gs.sortChildrenByDistanceToCamera);let l=i&&e.hasRenderableContent,u=!0,m=!1,p=-1,y=Number.MAX_VALUE;for(let f=0;f<r.length;++f){let x=r[f];if(x.isVisible?(t.push(x),x._foveatedFactor<y&&(p=f,y=x._foveatedFactor),m=!0):(l||o.loadSiblings)&&(x._foveatedFactor<y&&(p=f,y=x._foveatedFactor),a(x,n),c(x,n)),l){let _;x._inRequestVolume?x.hasRenderableContent?_=x.contentAvailable:_=eYe(x,n):_=!1,u=u&&_}}if(m||(u=!1),p!==-1&&i){let f=r[p];f._wasMinPriorityChild=!0;let x=(e._wasMinPriorityChild||e===o.root)&&y<=e._priorityHolder._foveatedFactor?e._priorityHolder:e;x._foveatedFactor=Math.min(f._foveatedFactor,x._foveatedFactor),x._distanceToCamera=Math.min(f._distanceToCamera,x._distanceToCamera);for(let _=0;_<r.length;++_)r[_]._priorityHolder=x}return u}function $3e(e,t){let{tileset:n}=e,{canTraverse:i,loadTile:o,visitTile:r,touchTile:s}=Gs,a=PW.stack;for(a.push(e);a.length>0;){PW.stackMaximumLength=Math.max(PW.stackMaximumLength,a.length);let c=a.pop(),l=c.parent,u=!d(l)||l._refines;c._refines=i(c)?q3e(c,a,t)&&u:!1;let m=!c._refines&&u;c.hasRenderableContent?c.refine===Wo.ADD?(sK(c,t),o(c,t)):c.refine===Wo.REPLACE&&(o(c,t),m&&sK(c,t)):(n._emptyTiles.push(c),o(c,t),m&&sK(c,t)),r(c,t),s(c,t)}}function eYe(e,t){let{canTraverse:n,updateTile:i,loadTile:o,touchTile:r}=Gs,s=!0,a=vW.stack;for(a.push(e);a.length>0;){vW.stackMaximumLength=Math.max(vW.stackMaximumLength,a.length);let c=a.pop(),l=c.children,u=l.length,m=!c.hasRenderableContent&&n(c),p=!c.hasRenderableContent&&c.children.length===0;if(!m&&!c.contentAvailable&&!p&&(s=!1),i(c,t),c.isVisible||(o(c,t),r(c,t)),m)for(let y=0;y<u;++y){let f=l[y];a.push(f)}}return s}var wW=Gse;var QPn=T(S(),1);function Ese(){}var FW={stack:new Ec,stackMaximumLength:0},AW={stack:new Ec,stackMaximumLength:0},r0={stack:new Ec,stackMaximumLength:0,ancestorStack:new Ec,ancestorStackMaximumLength:0},tYe=2;Ese.selectTiles=function(e,t){if(e._requestedTiles.length=0,e.debugFreezeFrame)return;e._selectedTiles.length=0,e._selectedTilesToStyle.length=0,e._emptyTiles.length=0,e.hasMixedContent=!1;let n=e.root;if(Gs.updateTile(n,t),!n.isVisible||n.getScreenSpaceError(t,!0)<=e.memoryAdjustedScreenSpaceError)return;aYe(n,t),cYe(n,t),FW.stack.trim(FW.stackMaximumLength),AW.stack.trim(AW.stackMaximumLength),r0.stack.trim(r0.stackMaximumLength),r0.ancestorStack.trim(r0.ancestorStackMaximumLength);let i=e._requestedTiles;for(let o=0;o<i.length;++o)i[o].updatePriority()};function nYe(e,t){let{updateTile:n,touchTile:i,selectTile:o}=Gs,r=AW.stack;for(r.push(e);r.length>0;){AW.stackMaximumLength=Math.max(AW.stackMaximumLength,r.length);let a=r.pop().children;for(let c=0;c<a.length;++c){let l=a[c];l.isVisible&&(l.contentAvailable?(n(l,t),i(l,t),o(l,t)):l._depth-e._depth<tYe&&r.push(l))}}}function ZN(e,t){let n=e.contentAvailable?e:e._ancestorWithContentAvailable;d(n)?n._shouldSelect=!0:nYe(e,t)}function iYe(e,t){e._ancestorWithContent=void 0,e._ancestorWithContentAvailable=void 0;let{parent:n}=e;if(!d(n))return;let i=!n.hasUnloadedRenderableContent||n._requestedFrame===t.frameNumber;e._ancestorWithContent=i?n:n._ancestorWithContent,e._ancestorWithContentAvailable=n.contentAvailable?n:n._ancestorWithContentAvailable}function oYe(e,t){let n=t._ancestorWithContent;return!e.immediatelyLoadDesiredLevelOfDetail&&(t._priorityProgressiveResolutionScreenSpaceErrorLeaf||d(n)&&t._screenSpaceError<n._screenSpaceError/e.skipScreenSpaceErrorFactor&&t._depth>n._depth+e.skipLevels)}function rYe(e,t,n){let{tileset:i,children:o}=e,{updateTile:r,loadTile:s,touchTile:a}=Gs;for(let l=0;l<o.length;++l)r(o[l],n);o.sort(Gs.sortChildrenByDistanceToCamera);let c=!1;for(let l=0;l<o.length;++l){let u=o[l];u.isVisible?(t.push(u),c=!0):i.loadSiblings&&(s(u,n),a(u,n))}return c}function sYe(e,t){let{tileset:n}=e;return n.immediatelyLoadDesiredLevelOfDetail?!1:d(e._ancestorWithContent)?e._screenSpaceError===0?e.parent._screenSpaceError>t:e._screenSpaceError>t:!0}function aYe(e,t){let{tileset:n}=e,i=n.immediatelyLoadDesiredLevelOfDetail?Number.MAX_VALUE:Math.max(n.baseScreenSpaceError,n.memoryAdjustedScreenSpaceError),{canTraverse:o,loadTile:r,visitTile:s,touchTile:a}=Gs,c=FW.stack;for(c.push(e);c.length>0;){FW.stackMaximumLength=Math.max(FW.stackMaximumLength,c.length);let l=c.pop();iYe(l,t);let u=l.parent,m=!d(u)||u._refines;l._refines=o(l)?rYe(l,c,t)&&m:!1;let p=!l._refines&&m;l.hasRenderableContent?l.refine===Wo.ADD?(ZN(l,t),r(l,t)):l.refine===Wo.REPLACE&&(sYe(l,i)?(r(l,t),p&&ZN(l,t)):p?(ZN(l,t),r(l,t)):oYe(n,l)&&r(l,t)):(n._emptyTiles.push(l),r(l,t),p&&ZN(l,t)),s(l,t),a(l,t)}}function cYe(e,t){let{selectTile:n,canTraverse:i}=Gs,{stack:o,ancestorStack:r}=r0,s;for(o.push(e);o.length>0||r.length>0;){if(r0.stackMaximumLength=Math.max(r0.stackMaximumLength,o.length),r0.ancestorStackMaximumLength=Math.max(r0.ancestorStackMaximumLength,r.length),r.length>0){let l=r.peek();if(l._stackLength===o.length){r.pop(),l!==s&&(l._finalResolution=!1),n(l,t);continue}}let a=o.pop();if(!d(a))continue;let c=i(a);if(a._shouldSelect)if(a.refine===Wo.ADD)n(a,t);else{if(a._selectionDepth=r.length,a._selectionDepth>0&&(a.tileset.hasMixedContent=!0),s=a,!c){n(a,t);continue}r.push(a),a._stackLength=o.length}if(c){let l=a.children;for(let u=0;u<l.length;++u){let m=l[u];m.isVisible&&o.push(m)}}}}var MW=Ese;function Tr(e){e=g(e,g.EMPTY_OBJECT),this._url=void 0,this._basePath=void 0,this._root=void 0,this._resource=void 0,this._asset=void 0,this._properties=void 0,this._geometricError=void 0,this._scaledGeometricError=void 0,this._extensionsUsed=void 0,this._extensions=void 0,this._modelUpAxis=void 0,this._modelForwardAxis=void 0,this._cache=new RW,this._processingQueue=[],this._selectedTiles=[],this._emptyTiles=[],this._requestedTiles=[],this._selectedTilesToStyle=[],this._loadTimestamp=void 0,this._timeSinceLoad=0,this._updatedVisibilityFrame=0,this._updatedModelMatrixFrame=0,this._modelMatrixChanged=!1,this._previousModelMatrix=void 0,this._extras=void 0,this._credits=void 0,this._showCreditsOnScreen=g(e.showCreditsOnScreen,!1),this._cullWithChildrenBounds=g(e.cullWithChildrenBounds,!0),this._allTilesAdditive=!0,this._hasMixedContent=!1,this._stencilClearCommand=void 0,this._backfaceCommands=new Ec,this._maximumScreenSpaceError=g(e.maximumScreenSpaceError,16),this._memoryAdjustedScreenSpaceError=this._maximumScreenSpaceError,this._cacheBytes=g(e.cacheBytes,512*1024*1024);let t=g(e.maximumCacheOverflowBytes,512*1024*1024);this._maximumCacheOverflowBytes=t,this._styleEngine=new EW,this._styleApplied=!1,this._modelMatrix=d(e.modelMatrix)?A.clone(e.modelMatrix):A.clone(A.IDENTITY),this._statistics=new i0,this._statisticsLast=new i0,this._statisticsPerPass=new Array(Xo.NUMBER_OF_PASSES);for(let o=0;o<Xo.NUMBER_OF_PASSES;++o)this._statisticsPerPass[o]=new i0;this._requestedTilesInFlight=[],this._maximumPriority={foveatedFactor:-Number.MAX_VALUE,depth:-Number.MAX_VALUE,distance:-Number.MAX_VALUE,reverseScreenSpaceError:-Number.MAX_VALUE},this._minimumPriority={foveatedFactor:Number.MAX_VALUE,depth:Number.MAX_VALUE,distance:Number.MAX_VALUE,reverseScreenSpaceError:Number.MAX_VALUE},this._heatmap=new ZW(e.debugHeatmapTilePropertyName),this.cullRequestsWhileMoving=g(e.cullRequestsWhileMoving,!0),this._cullRequestsWhileMoving=!1,this.cullRequestsWhileMovingMultiplier=g(e.cullRequestsWhileMovingMultiplier,60),this.progressiveResolutionHeightFraction=W.clamp(g(e.progressiveResolutionHeightFraction,.3),0,.5),this.preferLeaves=g(e.preferLeaves,!1),this._tilesLoaded=!1,this._initialTilesLoaded=!1,this._tileDebugLabels=void 0,this._classificationType=e.classificationType,this._ellipsoid=g(e.ellipsoid,re.WGS84),this._initialClippingPlanesOriginMatrix=A.IDENTITY,this._clippingPlanesOriginMatrix=void 0,this._clippingPlanesOriginMatrixDirty=!0,this._vectorClassificationOnly=g(e.vectorClassificationOnly,!1),this._vectorKeepDecodedPositions=g(e.vectorKeepDecodedPositions,!1),this.preloadWhenHidden=g(e.preloadWhenHidden,!1),this.preloadFlightDestinations=g(e.preloadFlightDestinations,!0),this._pass=void 0,this.dynamicScreenSpaceError=g(e.dynamicScreenSpaceError,!1),this.foveatedScreenSpaceError=g(e.foveatedScreenSpaceError,!0),this._foveatedConeSize=g(e.foveatedConeSize,.1),this._foveatedMinimumScreenSpaceErrorRelaxation=g(e.foveatedMinimumScreenSpaceErrorRelaxation,0),this.foveatedInterpolationCallback=g(e.foveatedInterpolationCallback,W.lerp),this.foveatedTimeDelay=g(e.foveatedTimeDelay,.2),this.dynamicScreenSpaceErrorDensity=.00278,this.dynamicScreenSpaceErrorFactor=4,this.dynamicScreenSpaceErrorHeightFalloff=.25,this._dynamicScreenSpaceErrorComputedDensity=0,this.shadows=g(e.shadows,xn.ENABLED),this.show=g(e.show,!0),this.colorBlendMode=hl.HIGHLIGHT,this.colorBlendAmount=.5,this._pointCloudShading=new Kh(e.pointCloudShading),this._pointCloudEyeDomeLighting=new Xp,this.loadProgress=new ye,this.allTilesLoaded=new ye,this.initialTilesLoaded=new ye,this.tileLoad=new ye,this.tileUnload=new ye,this.tileFailed=new ye,this.tileVisible=new ye,this.skipLevelOfDetail=g(e.skipLevelOfDetail,!1),this._disableSkipLevelOfDetail=!1,this.baseScreenSpaceError=g(e.baseScreenSpaceError,1024),this.skipScreenSpaceErrorFactor=g(e.skipScreenSpaceErrorFactor,16),this.skipLevels=g(e.skipLevels,1),this.immediatelyLoadDesiredLevelOfDetail=g(e.immediatelyLoadDesiredLevelOfDetail,!1),this.loadSiblings=g(e.loadSiblings,!1),this._clippingPlanes=void 0,this.clippingPlanes=e.clippingPlanes,d(e.imageBasedLighting)?(this._imageBasedLighting=e.imageBasedLighting,this._shouldDestroyImageBasedLighting=!1):(this._imageBasedLighting=new dx,this._shouldDestroyImageBasedLighting=!0),this.lightColor=e.lightColor,this.backFaceCulling=g(e.backFaceCulling,!0),this._enableShowOutline=g(e.enableShowOutline,!0),this.showOutline=g(e.showOutline,!0),this.outlineColor=g(e.outlineColor,Y.BLACK),this.splitDirection=g(e.splitDirection,Pc.NONE),this._projectTo2D=g(e.projectTo2D,!1),this.debugFreezeFrame=g(e.debugFreezeFrame,!1),this.debugColorizeTiles=g(e.debugColorizeTiles,!1),this._enableDebugWireframe=g(e.enableDebugWireframe,!1),this.debugWireframe=g(e.debugWireframe,!1),this.debugWireframe===!0&&this._enableDebugWireframe===!1&&Pt("tileset-debug-wireframe-ignored","enableDebugWireframe must be set to true in the Cesium3DTileset constructor, otherwise debugWireframe will be ignored."),this.debugShowBoundingVolume=g(e.debugShowBoundingVolume,!1),this.debugShowContentBoundingVolume=g(e.debugShowContentBoundingVolume,!1),this.debugShowViewerRequestVolume=g(e.debugShowViewerRequestVolume,!1),this._tileDebugLabels=void 0,this.debugPickedTileLabelOnly=!1,this.debugPickedTile=void 0,this.debugPickPosition=void 0,this.debugShowGeometricError=g(e.debugShowGeometricError,!1),this.debugShowRenderingStatistics=g(e.debugShowRenderingStatistics,!1),this.debugShowMemoryUsage=g(e.debugShowMemoryUsage,!1),this.debugShowUrl=g(e.debugShowUrl,!1),this.examineVectorLinesFunction=void 0,this._metadataExtension=void 0,this._customShader=e.customShader;let n=g(e.featureIdLabel,"featureId_0");typeof n=="number"&&(n=`featureId_${n}`),this._featureIdLabel=n;let i=g(e.instanceFeatureIdLabel,"instanceFeatureId_0");typeof i=="number"&&(i=`instanceFeatureId_${i}`),this._instanceFeatureIdLabel=i}Object.defineProperties(Tr.prototype,{isCesium3DTileset:{get:function(){return!0}},asset:{get:function(){return this._asset}},extensions:{get:function(){return this._extensions}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){rs.setOwner(e,this,"_clippingPlanes")}},properties:{get:function(){return this._properties}},tilesLoaded:{get:function(){return this._tilesLoaded}},resource:{get:function(){return this._resource}},basePath:{get:function(){return Qr("Cesium3DTileset.basePath","Cesium3DTileset.basePath has been deprecated. All tiles are relative to the url of the tileset JSON file that contains them. Use the url property instead."),this._basePath}},style:{get:function(){return this._styleEngine.style},set:function(e){this._styleEngine.style=e}},customShader:{get:function(){return this._customShader},set:function(e){this._customShader=e}},hasMixedContent:{get:function(){return this._hasMixedContent},set:function(e){this._hasMixedContent=e}},isSkippingLevelOfDetail:{get:function(){return this.skipLevelOfDetail&&!d(this._classificationType)&&!this._disableSkipLevelOfDetail&&!this._allTilesAdditive}},metadataExtension:{get:function(){return this._metadataExtension}},metadata:{get:function(){if(d(this._metadataExtension))return this._metadataExtension.tileset}},schema:{get:function(){if(d(this._metadataExtension))return this._metadataExtension.schema}},maximumScreenSpaceError:{get:function(){return this._maximumScreenSpaceError},set:function(e){this._maximumScreenSpaceError=e,this._memoryAdjustedScreenSpaceError=e}},cacheBytes:{get:function(){return this._cacheBytes},set:function(e){this._cacheBytes=e}},maximumCacheOverflowBytes:{get:function(){return this._maximumCacheOverflowBytes},set:function(e){this._maximumCacheOverflowBytes=e}},memoryAdjustedScreenSpaceError:{get:function(){return this._memoryAdjustedScreenSpaceError}},pointCloudShading:{get:function(){return this._pointCloudShading},set:function(e){this._pointCloudShading=e}},root:{get:function(){return this._root}},boundingSphere:{get:function(){return this._root.updateTransform(this._modelMatrix),this._root.boundingSphere}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._modelMatrix=A.clone(e,this._modelMatrix)}},timeSinceLoad:{get:function(){return this._timeSinceLoad}},totalMemoryUsageInBytes:{get:function(){let e=this._statistics;return e.texturesByteLength+e.geometryByteLength+e.batchTableByteLength}},clippingPlanesOriginMatrix:{get:function(){return d(this._clippingPlanesOriginMatrix)?(this._clippingPlanesOriginMatrixDirty&&(A.multiply(this.root.computedTransform,this._initialClippingPlanesOriginMatrix,this._clippingPlanesOriginMatrix),this._clippingPlanesOriginMatrixDirty=!1),this._clippingPlanesOriginMatrix):A.IDENTITY}},styleEngine:{get:function(){return this._styleEngine}},statistics:{get:function(){return this._statistics}},classificationType:{get:function(){return this._classificationType}},ellipsoid:{get:function(){return this._ellipsoid}},foveatedConeSize:{get:function(){return this._foveatedConeSize},set:function(e){this._foveatedConeSize=e}},foveatedMinimumScreenSpaceErrorRelaxation:{get:function(){return this._foveatedMinimumScreenSpaceErrorRelaxation},set:function(e){this._foveatedMinimumScreenSpaceErrorRelaxation=e}},extras:{get:function(){return this._extras}},imageBasedLighting:{get:function(){return this._imageBasedLighting},set:function(e){e!==this._imageBasedLighting&&(this._shouldDestroyImageBasedLighting&&!this._imageBasedLighting.isDestroyed()&&this._imageBasedLighting.destroy(),this._imageBasedLighting=e,this._shouldDestroyImageBasedLighting=!1)}},vectorClassificationOnly:{get:function(){return this._vectorClassificationOnly}},vectorKeepDecodedPositions:{get:function(){return this._vectorKeepDecodedPositions}},showCreditsOnScreen:{get:function(){return this._showCreditsOnScreen},set:function(e){this._showCreditsOnScreen=e,Ase(this)}},featureIdLabel:{get:function(){return this._featureIdLabel},set:function(e){typeof e=="number"&&(e=`featureId_${e}`),this._featureIdLabel=e}},instanceFeatureIdLabel:{get:function(){return this._instanceFeatureIdLabel},set:function(e){typeof e=="number"&&(e=`instanceFeatureId_${e}`),this._instanceFeatureIdLabel=e}}});Tr.fromIonAssetId=async function(e,t){let n=await Ql.fromAssetId(e);return Tr.fromUrl(n,t)};Tr.fromUrl=async function(e,t){t=g(t,g.EMPTY_OBJECT);let n=Ee.createIfNeeded(e),i;n.extension==="json"?i=n.getBaseUri(!0):n.isDataUri&&(i="");let o=await Tr.loadJson(n),r=await lYe(n,o),s=new Tr(t);s._resource=n,s._url=n.url,s._basePath=i,s._metadataExtension=r,s._geometricError=o.geometricError,s._scaledGeometricError=o.geometricError;let a=o.asset;s._asset=a,s._extras=o.extras,Ase(s);let c=d(o.asset.gltfUpAxis)?Zo.fromName(o.asset.gltfUpAxis):Zo.Y,l=g(t.modelUpAxis,c),u=g(t.modelForwardAxis,Zo.X);s._properties=o.properties,s._extensionsUsed=o.extensionsUsed,s._extensions=o.extensions,s._modelUpAxis=l,s._modelForwardAxis=u,s._root=s.loadTileset(n,o);let p=s._root.createBoundingVolume(o.root.boundingVolume,A.IDENTITY).boundingSphere.center,y=s._ellipsoid.cartesianToCartographic(p);return d(y)&&y.height>li._defaultMinTerrainHeight&&(s._initialClippingPlanesOriginMatrix=vt.eastNorthUpToFixedFrame(p)),s._clippingPlanesOriginMatrix=A.clone(s._initialClippingPlanesOriginMatrix),s};Tr.loadJson=function(e){return Ee.createIfNeeded(e).fetchJson()};Tr.prototype.makeStyleDirty=function(){this._styleEngine.makeDirty()};Tr.prototype.loadTileset=function(e,t,n){let i=t.asset;if(!d(i))throw new me("Tileset must have an asset property.");if(i.version!=="0.0"&&i.version!=="1.0"&&i.version!=="1.1")throw new me("The tileset must be 3D Tiles version 0.0, 1.0, or 1.1");d(t.extensionsRequired)&&Tr.checkSupportedExtensions(t.extensionsRequired);let o=this._statistics,r=i.tilesetVersion;d(r)&&(this._basePath+=`?v=${r}`,e=e.clone(),e.setQueryParameters({v:r}));let s=Xse(this,e,t.root,n);d(n)&&(n.children.push(s),s._depth=n._depth+1);let a=[];for(a.push(s);a.length>0;){let c=a.pop();++o.numberOfTilesTotal,this._allTilesAdditive=this._allTilesAdditive&&c.refine===Wo.ADD;let l=c._header.children;if(d(l))for(let u=0;u<l.length;++u){let m=l[u],p=Xse(this,e,m,c);c.children.push(p),p._depth=c._depth+1,a.push(p)}this._cullWithChildrenBounds&&CW.checkChildrenWithinParent(c)}return s};function Xse(e,t,n,i){if(!(d(n.implicitTiling)||ri(n,"3DTILES_implicit_tiling")))return new gu(e,t,n,i);let r=e.schema,s=new c_(t,n,r),a=new l_({subdivisionScheme:s.subdivisionScheme,subtreeLevels:s.subtreeLevels,level:0,x:0,y:0,z:0}),c=s.subtreeUriTemplate.getDerivedResource({templateValues:a.getTemplateValues()}).url,u=Ke(n,!0);u.contents=[{uri:c}],delete u.content,delete u.extensions;let m=new gu(e,t,u,i);return m.implicitTileset=s,m.implicitCoordinates=a,m}async function lYe(e,t){let n=ri(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"]:t,i;if(d(n.schemaUri))e=e.getDerivedResource({url:n.schemaUri}),i=Bi.getSchemaLoader({resource:e});else if(d(n.schema))i=Bi.getSchemaLoader({schema:n.schema});else return;await i.load();let o=new s_({schema:i.schema,metadataJson:n});return Bi.unload(i),o}var Ise=new h,dYe=new he,uYe=new A,mYe=new h,hYe=new h,fYe=new h;function pYe(e,t){let n,i,o,r,s,a=t.camera,c=e._root,l=c.contentBoundingVolume;if(l instanceof pu)n=h.normalize(a.positionWC,Ise),i=a.directionWC,o=a.positionCartographic.height,r=l.minimumHeight,s=l.maximumHeight;else{let x=A.inverseTransformation(c.computedTransform,uYe),_=t.mapProjection.ellipsoid,C=l.boundingVolume,V=A.multiplyByPoint(x,C.center,mYe);if(h.magnitude(V)>_.minimumRadius){let L=he.fromCartesian(V,_,dYe);n=h.normalize(a.positionWC,Ise),i=a.directionWC,o=a.positionCartographic.height,r=0,s=L.height*2}else{let L=A.multiplyByPoint(x,a.positionWC,hYe);if(n=h.UNIT_Z,i=A.multiplyByPointAsVector(x,a.directionWC,fYe),i=h.normalize(i,i),o=L.z,l instanceof yu){let Z=c._header.boundingVolume.box[11];r=V.z-Z,s=V.z+Z}else if(l instanceof e0){let Z=C.radius;r=V.z-Z,s=V.z+Z}}}let u=e.dynamicScreenSpaceErrorHeightFalloff,m=r+(s-r)*u,p=s,y=W.clamp((o-m)/(p-m),0,1),f=1-Math.abs(h.dot(i,n));f=f*(1-y),e._dynamicScreenSpaceErrorComputedDensity=e.dynamicScreenSpaceErrorDensity*f}function bYe(e,t){if(t.hasEmptyContent)return;let{statistics:n}=e,i=t.contentExpired,o=t.requestContent();d(o)&&(o.then(r=>{!d(r)||t.isDestroyed()||e.isDestroyed()||(e._processingQueue.push(t),++n.numberOfTilesProcessing)}).catch(r=>{vse(r,e,t)}),i&&(t.hasTilesetContent||t.hasImplicitContent?RYe(e,t):(n.decrementLoadCounts(t.content),--n.numberOfTilesWithContentReady)),e._requestedTilesInFlight.push(t))}function Pse(e,t){return e._priority-t._priority}Tr.prototype.postPassesUpdate=function(e){d(this._root)&&(yYe(this,e),GYe(this,e),this._cache.unloadTiles(this,Fse),this._styleApplied&&this._styleEngine.resetDirty(),this._styleApplied=!1)};Tr.prototype.prePassesUpdate=function(e){if(!d(this._root))return;_Ye(this,e);let t=this._clippingPlanes;this._clippingPlanesOriginMatrixDirty=!0,d(t)&&t.enabled&&t.update(e),d(this._loadTimestamp)||(this._loadTimestamp=te.clone(e.time)),this._timeSinceLoad=Math.max(te.secondsDifference(e.time,this._loadTimestamp)*1e3,0),this.dynamicScreenSpaceError&&pYe(this,e),e.newFrame&&this._cache.reset()};function yYe(e,t){let n=e._requestedTilesInFlight,i=0;for(let o=0;o<n.length;++o){let r=n[o],s=t.frameNumber-r._touchedFrame>=1;if(r._contentState!==wo.LOADING){++i;continue}else if(s){r.cancelRequests(),++i;continue}i>0&&(n[o-i]=r)}n.length-=i}function gYe(e){let t=e._requestedTiles;t.sort(Pse);for(let n=0;n<t.length;++n)bYe(e,t[n])}function vse(e,t,n){if(t.isDestroyed())return;let i;n.isDestroyed()||(i=n._contentResource.url);let o=d(e.message)?e.message:e.toString();t.tileFailed.numberOfListeners>0?t.tileFailed.raiseEvent({url:i,message:o}):(console.log(`A 3D tile failed to load: ${i}`),console.log(`Error: ${o}`))}function xYe(e){let t=e._processingQueue,n=0;for(let i=0;i<t.length;++i){let o=t[i];if(o.isDestroyed()||o._contentState!==wo.PROCESSING){++n;continue}n>0&&(t[i-n]=o)}t.length-=n}function _Ye(e,t){xYe(e);let n=e._processingQueue,{cacheBytes:i,maximumCacheOverflowBytes:o,statistics:r}=e,s=i+o,a=!1;for(let c=0;c<n.length;++c){if(e.totalMemoryUsageInBytes>s){a=!0;break}let l=n[c];try{l.process(e,t),l.contentReady&&(--r.numberOfTilesProcessing,e.tileLoad.raiseEvent(l))}catch(u){--r.numberOfTilesProcessing,vse(u,e,l)}}e.totalMemoryUsageInBytes<i?SYe(e):a&&n.length>0&&TYe(e)}function TYe(e){e._memoryAdjustedScreenSpaceError*=1.02;let t=e._processingQueue;for(let n=0;n<t.length;++n)t[n].updatePriority();t.sort(Pse)}function SYe(e){e._memoryAdjustedScreenSpaceError=Math.max(e.memoryAdjustedScreenSpaceError/1.02,e.maximumScreenSpaceError)}var GN=new h,CYe={maximumFractionDigits:3};function Wse(e){let t=e/1048576;return t<1?t.toLocaleString(void 0,CYe):Math.round(t).toLocaleString()}function aK(e){let{halfAxes:t,radius:n,center:i}=e.boundingVolume.boundingVolume,o=h.clone(i,GN);if(d(t))o.x+=.75*(t[0]+t[3]+t[6]),o.y+=.75*(t[1]+t[4]+t[7]),o.z+=.75*(t[2]+t[5]+t[8]);else if(d(n)){let r=h.normalize(i,GN);r=h.multiplyByScalar(r,.75*n,GN),o=h.add(r,i,GN)}return o}function cK(e,t,n){let i="",o=0;if(t.debugShowGeometricError&&(i+=`
  7215. Geometric error: ${e.geometricError}`,o++),t.debugShowRenderingStatistics&&(i+=`
  7216. Commands: ${e.commandsLength}`,o++,e.content.pointsLength>0&&(i+=`
  7217. Points: ${e.content.pointsLength}`,o++),e.content.trianglesLength>0&&(i+=`
  7218. Triangles: ${e.content.trianglesLength}`,o++),i+=`
  7219. Features: ${e.content.featuresLength}`,o++),t.debugShowMemoryUsage&&(i+=`
  7220. Texture Memory: ${Wse(e.content.texturesByteLength)}`,i+=`
  7221. Geometry Memory: ${Wse(e.content.geometryByteLength)}`,o+=2),t.debugShowUrl)if(e.hasMultipleContents){i+=`
  7222. Urls:`;let s=e.content.innerContentUrls;for(let a=0;a<s.length;a++)i+=`
  7223. - ${s[a]}`;o+=s.length}else i+=`
  7224. Url: ${e._contentHeader.uri}`,o++;let r={text:i.substring(1),position:n,font:`${19-o}px sans-serif`,showBackground:!0,disableDepthTestDistance:Number.POSITIVE_INFINITY};return t._tileDebugLabels.add(r)}function VYe(e,t){let n=e._selectedTiles,i=n.length,o=e._emptyTiles,r=o.length;if(e._tileDebugLabels.removeAll(),e.debugPickedTileLabelOnly){if(d(e.debugPickedTile)){let s=d(e.debugPickPosition)?e.debugPickPosition:aK(e.debugPickedTile),a=cK(e.debugPickedTile,e,s);a.pixelOffset=new D(15,-15)}}else{for(let s=0;s<i;++s){let a=n[s];cK(a,e,aK(a))}for(let s=0;s<r;++s){let a=o[s];(a.hasTilesetContent||a.hasImplicitContent)&&cK(a,e,aK(a))}}e._tileDebugLabels.update(t)}function LYe(e,t,n){e._styleEngine.applyStyle(e),e._styleApplied=!0;let{commandList:i,context:o}=t,r=i.length,s=e._selectedTiles,a=e.isSkippingLevelOfDetail&&e._hasMixedContent&&o.stencilBuffer&&s.length>0;e._backfaceCommands.length=0,a&&(d(e._stencilClearCommand)||(e._stencilClearCommand=new oi({stencil:0,pass:Re.CESIUM_3D_TILE,renderState:De.fromCache({stencilMask:Ft.SKIP_LOD_MASK})})),i.push(e._stencilClearCommand));let{statistics:c,tileVisible:l}=e,u=n.isRender,m=i.length;for(let f=0;f<s.length;++f){let x=s[f];u&&l.raiseEvent(x),x.update(e,t,n),c.incrementSelectionCounts(x.content),++c.selected}let p=e._emptyTiles;for(let f=0;f<p.length;++f)p[f].update(e,t,n);let y=i.length-m;if(e._backfaceCommands.trim(),a){let f=e._backfaceCommands.values,x=f.length;i.length+=x;for(let _=y-1;_>=0;--_)i[m+x+_]=i[m+_];for(let _=0;_<x;++_)i[m+_]=f[_]}y=i.length-r,c.numberOfCommands=y,u&&(e.pointCloudShading.attenuation&&e.pointCloudShading.eyeDomeLighting&&y>0&&e._pointCloudEyeDomeLighting.update(t,r,e.pointCloudShading,e.boundingSphere),e.debugShowGeometricError||e.debugShowRenderingStatistics||e.debugShowMemoryUsage||e.debugShowUrl?(d(e._tileDebugLabels)||(e._tileDebugLabels=new qh),VYe(e,t)):e._tileDebugLabels=e._tileDebugLabels&&e._tileDebugLabels.destroy())}var wse=[];function RYe(e,t){let n=t,i=wse;for(i.push(t);i.length>0;){t=i.pop();let o=t.children;for(let r=0;r<o.length;++r)i.push(o[r]);t!==n&&(ZYe(e,t),--e._statistics.numberOfTilesTotal)}n.children=[]}function Fse(e,t){e.tileUnload.raiseEvent(t),e._statistics.decrementLoadCounts(t.content),--e._statistics.numberOfTilesWithContentReady,t.unloadContent()}function ZYe(e,t){e._cache.unloadTile(e,t,Fse),t.destroy()}Tr.prototype.trimLoadedTiles=function(){this._cache.trim()};function GYe(e,t){let n=e._statistics,i=e._statisticsLast,o=n.numberOfPendingRequests,r=n.numberOfTilesProcessing,s=i.numberOfPendingRequests,a=i.numberOfTilesProcessing;i0.clone(n,i);let c=o!==s||r!==a;c&&t.afterRender.push(function(){return e.loadProgress.raiseEvent(o,r),!0}),e._tilesLoaded=n.numberOfPendingRequests===0&&n.numberOfTilesProcessing===0&&n.numberOfAttemptedRequests===0,c&&e._tilesLoaded&&(t.afterRender.push(function(){return e.allTilesLoaded.raiseEvent(),!0}),e._initialTilesLoaded||(e._initialTilesLoaded=!0,t.afterRender.push(function(){return e.initialTilesLoaded.raiseEvent(),!0})))}function EYe(e){e._heatmap.resetMinimumMaximum(),e._minimumPriority.depth=Number.MAX_VALUE,e._maximumPriority.depth=-Number.MAX_VALUE,e._minimumPriority.foveatedFactor=Number.MAX_VALUE,e._maximumPriority.foveatedFactor=-Number.MAX_VALUE,e._minimumPriority.distance=Number.MAX_VALUE,e._maximumPriority.distance=-Number.MAX_VALUE,e._minimumPriority.reverseScreenSpaceError=Number.MAX_VALUE,e._maximumPriority.reverseScreenSpaceError=-Number.MAX_VALUE}function XYe(e,t){t.frameNumber===e._updatedModelMatrixFrame&&d(e._previousModelMatrix)||(e._updatedModelMatrixFrame=t.frameNumber,e._modelMatrixChanged=!A.equals(e.modelMatrix,e._previousModelMatrix),e._modelMatrixChanged&&(e._previousModelMatrix=A.clone(e.modelMatrix,e._previousModelMatrix)))}function IYe(e,t,n,i){if(t.mode===ie.MORPHING||!d(e._root))return!1;let o=e._statistics;o.clear(),++e._updatedVisibilityFrame,EYe(e),XYe(e,t),e._cullRequestsWhileMoving=e.cullRequestsWhileMoving&&!e._modelMatrixChanged;let r=e.getTraversal(i).selectTiles(e,t);if(i.requestTiles&&gYe(e),LYe(e,t,i),i0.clone(o,n),i.isRender){let s=e._credits;if(d(s)&&o.selected!==0)for(let a=0;a<s.length;++a){let c=s[a];t.creditDisplay.addCreditToNextFrame(c)}}return r}function Ase(e){let t=e._credits;d(t)||(t=[]),t.length=0,d(e.resource.credits)&&e.resource.credits.forEach(i=>{t.push(St.clone(i))});let n=e.asset.extras;if(d(n)&&d(n.cesium)&&d(n.cesium.credits)){let i=n.cesium.credits;for(let o=0;o<i.length;++o){let r=i[o];t.push(new St(r.html))}}t.forEach(i=>i.showOnScreen=i.showOnScreen||e._showCreditsOnScreen),e._credits=t}Tr.prototype.getTraversal=function(e){let{pass:t}=e;return t===Xo.MOST_DETAILED_PRELOAD||t===Xo.MOST_DETAILED_PICK?WW:this.isSkippingLevelOfDetail?MW:wW};Tr.prototype.update=function(e){this.updateForPass(e,e.tilesetPassState)};Tr.prototype.updateForPass=function(e,t){let n=t.pass;if(n===Xo.PRELOAD&&(!this.preloadWhenHidden||this.show)||n===Xo.PRELOAD_FLIGHT&&(!this.preloadFlightDestinations||!this.show&&!this.preloadWhenHidden)||n===Xo.REQUEST_RENDER_MODE_DEFER_CHECK&&(!this._cullRequestsWhileMoving&&this.foveatedTimeDelay<=0||!this.show))return;let i=e.commandList,o=e.camera,r=e.cullingVolume;t.ready=!1;let s=Xo.getPassOptions(n),a=s.ignoreCommands,c=g(t.commandList,i),l=c.length;e.commandList=c,e.camera=g(t.camera,o),e.cullingVolume=g(t.cullingVolume,r);let u=this._statisticsPerPass[n];(this.show||a)&&(this._pass=n,t.ready=IYe(this,e,u,s)),a&&(c.length=l),e.commandList=i,e.camera=o,e.cullingVolume=r};Tr.prototype.hasExtension=function(e){return d(this._extensionsUsed)?this._extensionsUsed.indexOf(e)>-1:!1};Tr.prototype.isDestroyed=function(){return!1};Tr.prototype.destroy=function(){if(this._tileDebugLabels=this._tileDebugLabels&&this._tileDebugLabels.destroy(),this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),d(this._root)){let e=wse;for(e.push(this._root);e.length>0;){let t=e.pop();t.destroy();let n=t.children;for(let i=0;i<n.length;++i)e.push(n[i])}}return this._root=void 0,this._shouldDestroyImageBasedLighting&&!this._imageBasedLighting.isDestroyed()&&this._imageBasedLighting.destroy(),this._imageBasedLighting=void 0,ue(this)};Tr.supportedExtensions={"3DTILES_metadata":!0,"3DTILES_implicit_tiling":!0,"3DTILES_content_gltf":!0,"3DTILES_multiple_contents":!0,"3DTILES_bounding_volume_S2":!0,"3DTILES_batch_table_hierarchy":!0,"3DTILES_draco_point_compression":!0,MAXAR_content_geojson:!0};Tr.checkSupportedExtensions=function(e){for(let t=0;t<e.length;t++)if(!Tr.supportedExtensions[e[t]])throw new me(`Unsupported 3D Tiles Extension: ${e[t]}`)};var zs=Tr;var WYe=new A;function sy(e,t){t.collectionChanged.addEventListener(sy.prototype._onCollectionChanged,this),this._scene=e,this._primitives=e.primitives,this._entityCollection=t,this._tilesetHash={},this._entitiesToVisualize=new Tt,this._onCollectionChanged(t,t.values,[],[])}sy.prototype.update=function(e){let t=this._entitiesToVisualize.values,n=this._tilesetHash,i=this._primitives;for(let o=0,r=t.length;o<r;o++){let s=t[o],a=s._tileset,c,l=n[s.id],u=s.isShowing&&s.isAvailable(e)&&H.getValueOrDefault(a._show,e,!0),m;u&&(m=s.computeModelMatrix(e,WYe),c=Ee.createIfNeeded(H.getValueOrUndefined(a._uri,e)));let p=d(l)?l.tilesetPrimitive:void 0;if(!u){d(p)&&(p.show=!1);continue}(!d(l)||c.url!==l.url)&&(d(p)&&i.removeAndDestroy(p),delete n[s.id],PYe(c,n,s,i)),d(p)&&(p.show=!0,d(m)&&(p.modelMatrix=m),p.maximumScreenSpaceError=H.getValueOrDefault(a.maximumScreenSpaceError,e,p.maximumScreenSpaceError))}return!0};sy.prototype.isDestroyed=function(){return!1};sy.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(sy.prototype._onCollectionChanged,this);let e=this._entitiesToVisualize.values,t=this._tilesetHash,n=this._primitives;for(let i=e.length-1;i>-1;i--)lK(this,e[i],t,n);return ue(this)};sy.prototype.getBoundingSphere=function(e,t){let n=this._tilesetHash[e.id];if(!d(n)||n.loadFail)return lt.FAILED;let i=n.tilesetPrimitive;return d(i)?i.show?(ce.clone(i.boundingSphere,t),lt.DONE):lt.FAILED:lt.PENDING};sy.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s=this._entitiesToVisualize,a=this._tilesetHash,c=this._primitives;for(o=t.length-1;o>-1;o--)r=t[o],d(r._tileset)&&s.set(r.id,r);for(o=i.length-1;o>-1;o--)r=i[o],d(r._tileset)?s.set(r.id,r):(lK(this,r,a,c),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],lK(this,r,a,c),s.remove(r.id)};function lK(e,t,n,i){let o=n[t.id];d(o)&&(d(o.tilesetPrimitive)&&i.removeAndDestroy(o.tilesetPrimitive),delete n[t.id])}async function PYe(e,t,n,i){t[n.id]={url:e.url,loadFail:!1};try{let o=await zs.fromUrl(e);if(o.id=n,i.add(o),!d(t[n.id]))return;t[n.id].tilesetPrimitive=o}catch(o){console.error(o),t[n.id].loadFail=!0}}var NW=sy;var _wn=T(S(),1);var vYe=Y.WHITE,wYe=Y.BLACK,FYe=new D(2,2);function VC(e){e=g(e,g.EMPTY_OBJECT),this._definitionChanged=new ye,this._evenColor=void 0,this._evenColorSubscription=void 0,this._oddColor=void 0,this._oddColorSubscription=void 0,this._repeat=void 0,this._repeatSubscription=void 0,this.evenColor=e.evenColor,this.oddColor=e.oddColor,this.repeat=e.repeat}Object.defineProperties(VC.prototype,{isConstant:{get:function(){return H.isConstant(this._evenColor)&&H.isConstant(this._oddColor)&&H.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},evenColor:le("evenColor"),oddColor:le("oddColor"),repeat:le("repeat")});VC.prototype.getType=function(e){return"Checkerboard"};VC.prototype.getValue=function(e,t){return d(t)||(t={}),t.lightColor=H.getValueOrClonedDefault(this._evenColor,e,vYe,t.lightColor),t.darkColor=H.getValueOrClonedDefault(this._oddColor,e,wYe,t.darkColor),t.repeat=H.getValueOrDefault(this._repeat,e,FYe),t};VC.prototype.equals=function(e){return this===e||e instanceof VC&&H.equals(this._evenColor,e._evenColor)&&H.equals(this._oddColor,e._oddColor)&&H.equals(this._repeat,e._repeat)};var LC=VC;var Mwn=T(S(),1);var Iwn=T(S(),1);var Mse={id:void 0};function UW(e){if(e._firing){e._refire=!0;return}if(e._suspendCount===0){let t=e._addedEntities,n=e._removedEntities,i=e._changedEntities;if(i.length!==0||t.length!==0||n.length!==0){e._firing=!0;do{e._refire=!1;let o=t.values.slice(0),r=n.values.slice(0),s=i.values.slice(0);t.removeAll(),n.removeAll(),i.removeAll(),e._collectionChanged.raiseEvent(e,o,r,s)}while(e._refire);e._firing=!1}}}function Qa(e){this._owner=e,this._entities=new Tt,this._addedEntities=new Tt,this._removedEntities=new Tt,this._changedEntities=new Tt,this._suspendCount=0,this._collectionChanged=new ye,this._id=Yn(),this._show=!0,this._firing=!1,this._refire=!1}Qa.prototype.suspendEvents=function(){this._suspendCount++};Qa.prototype.resumeEvents=function(){this._suspendCount--,UW(this)};Object.defineProperties(Qa.prototype,{collectionChanged:{get:function(){return this._collectionChanged}},id:{get:function(){return this._id}},values:{get:function(){return this._entities.values}},show:{get:function(){return this._show},set:function(e){if(e===this._show)return;this.suspendEvents();let t,n=[],i=this._entities.values,o=i.length;for(t=0;t<o;t++)n.push(i[t].isShowing);for(this._show=e,t=0;t<o;t++){let r=n[t],s=i[t];r!==s.isShowing&&s.definitionChanged.raiseEvent(s,"isShowing",s.isShowing,r)}this.resumeEvents()}},owner:{get:function(){return this._owner}}});Qa.prototype.computeAvailability=function(){let e=Be.MAXIMUM_VALUE,t=Be.MINIMUM_VALUE,n=this._entities.values;for(let i=0,o=n.length;i<o;i++){let s=n[i].availability;if(d(s)){let a=s.start,c=s.stop;te.lessThan(a,e)&&!a.equals(Be.MINIMUM_VALUE)&&(e=a),te.greaterThan(c,t)&&!c.equals(Be.MAXIMUM_VALUE)&&(t=c)}}return Be.MAXIMUM_VALUE.equals(e)&&(e=Be.MINIMUM_VALUE),Be.MINIMUM_VALUE.equals(t)&&(t=Be.MAXIMUM_VALUE),new Tn({start:e,stop:t})};Qa.prototype.add=function(e){e instanceof Oo||(e=new Oo(e));let t=e.id,n=this._entities;if(n.contains(t))throw new me(`An entity with id ${t} already exists in this collection.`);return e.entityCollection=this,n.set(t,e),this._removedEntities.remove(t)||this._addedEntities.set(t,e),e.definitionChanged.addEventListener(Qa.prototype._onEntityDefinitionChanged,this),UW(this),e};Qa.prototype.remove=function(e){return d(e)?this.removeById(e.id):!1};Qa.prototype.contains=function(e){return this._entities.get(e.id)===e};Qa.prototype.removeById=function(e){if(!d(e))return!1;let n=this._entities.get(e);return this._entities.remove(e)?(this._addedEntities.remove(e)||(this._removedEntities.set(e,n),this._changedEntities.remove(e)),this._entities.remove(e),n.definitionChanged.removeEventListener(Qa.prototype._onEntityDefinitionChanged,this),UW(this),!0):!1};Qa.prototype.removeAll=function(){let e=this._entities,t=e.length,n=e.values,i=this._addedEntities,o=this._removedEntities;for(let r=0;r<t;r++){let s=n[r],a=s.id,c=i.get(a);d(c)||(s.definitionChanged.removeEventListener(Qa.prototype._onEntityDefinitionChanged,this),o.set(a,s))}e.removeAll(),i.removeAll(),this._changedEntities.removeAll(),UW(this)};Qa.prototype.getById=function(e){return this._entities.get(e)};Qa.prototype.getOrCreateEntity=function(e){let t=this._entities.get(e);return d(t)||(Mse.id=e,t=new Oo(Mse),this.add(t)),t};Qa.prototype._onEntityDefinitionChanged=function(e){let t=e.id;this._addedEntities.contains(t)||this._changedEntities.set(t,e),UW(this)};var Es=Qa;var EN={id:void 0},RC=new Array(2);function dK(e){let t=e.propertyNames,n=t.length;for(let i=0;i<n;i++)e[t[i]]=void 0;e._name=void 0,e._availability=void 0}function Nse(e,t,n,i){RC[0]=n,RC[1]=i.id,t[JSON.stringify(RC)]=i.definitionChanged.addEventListener(Sr.prototype._onDefinitionChanged,e)}function Use(e,t,n,i){RC[0]=n,RC[1]=i.id;let o=JSON.stringify(RC);t[o](),t[o]=void 0}function ay(e){if(e._shouldRecomposite=!0,e._suspendCount!==0)return;let t=e._collections,n=t.length,i=e._collectionsCopy,o=i.length,r,s,a,c,l,u=e._composite,m=new Es(e),p=e._eventHash,y;for(r=0;r<o;r++)for(l=i[r],l.collectionChanged.removeEventListener(Sr.prototype._onCollectionChanged,e),a=l.values,y=l.id,c=a.length-1;c>-1;c--)s=a[c],Use(e,p,y,s);for(r=n-1;r>=0;r--)for(l=t[r],l.collectionChanged.addEventListener(Sr.prototype._onCollectionChanged,e),a=l.values,y=l.id,c=a.length-1;c>-1;c--){s=a[c],Nse(e,p,y,s);let x=m.getById(s.id);d(x)||(x=u.getById(s.id),d(x)?dK(x):(EN.id=s.id,x=new Oo(EN)),m.add(x)),x.merge(s)}e._collectionsCopy=t.slice(0),u.suspendEvents(),u.removeAll();let f=m.values;for(r=0;r<f.length;r++)u.add(f[r]);u.resumeEvents()}function Sr(e,t){this._owner=t,this._composite=new Es(this),this._suspendCount=0,this._collections=d(e)?e.slice():[],this._collectionsCopy=[],this._id=Yn(),this._eventHash={},ay(this),this._shouldRecomposite=!1}Object.defineProperties(Sr.prototype,{collectionChanged:{get:function(){return this._composite._collectionChanged}},id:{get:function(){return this._id}},values:{get:function(){return this._composite.values}},owner:{get:function(){return this._owner}}});Sr.prototype.addCollection=function(e,t){d(t)?this._collections.splice(t,0,e):(t=this._collections.length,this._collections.push(e)),ay(this)};Sr.prototype.removeCollection=function(e){let t=this._collections.indexOf(e);return t!==-1?(this._collections.splice(t,1),ay(this),!0):!1};Sr.prototype.removeAllCollections=function(){this._collections.length=0,ay(this)};Sr.prototype.containsCollection=function(e){return this._collections.indexOf(e)!==-1};Sr.prototype.contains=function(e){return this._composite.contains(e)};Sr.prototype.indexOfCollection=function(e){return this._collections.indexOf(e)};Sr.prototype.getCollection=function(e){return this._collections[e]};Sr.prototype.getCollectionsLength=function(){return this._collections.length};function XN(e,t){return e.indexOf(t)}function kse(e,t,n){let i=e._collections;if(t=W.clamp(t,0,i.length-1),n=W.clamp(n,0,i.length-1),t===n)return;let o=i[t];i[t]=i[n],i[n]=o,ay(e)}Sr.prototype.raiseCollection=function(e){let t=XN(this._collections,e);kse(this,t,t+1)};Sr.prototype.lowerCollection=function(e){let t=XN(this._collections,e);kse(this,t,t-1)};Sr.prototype.raiseCollectionToTop=function(e){let t=XN(this._collections,e);t!==this._collections.length-1&&(this._collections.splice(t,1),this._collections.push(e),ay(this))};Sr.prototype.lowerCollectionToBottom=function(e){let t=XN(this._collections,e);t!==0&&(this._collections.splice(t,1),this._collections.splice(0,0,e),ay(this))};Sr.prototype.suspendEvents=function(){this._suspendCount++,this._composite.suspendEvents()};Sr.prototype.resumeEvents=function(){this._suspendCount--,this._shouldRecomposite&&this._suspendCount===0&&(ay(this),this._shouldRecomposite=!1),this._composite.resumeEvents()};Sr.prototype.computeAvailability=function(){return this._composite.computeAvailability()};Sr.prototype.getById=function(e){return this._composite.getById(e)};Sr.prototype._onCollectionChanged=function(e,t,n){let i=this._collectionsCopy,o=i.length,r=this._composite;r.suspendEvents();let s,a,c,l,u=n.length,m=this._eventHash,p=e.id;for(s=0;s<u;s++){let f=n[s];Use(this,m,p,f);let x=f.id;for(a=o-1;a>=0;a--)c=i[a].getById(x),d(c)&&(d(l)||(l=r.getById(x),dK(l)),l.merge(c));d(l)||r.removeById(x),l=void 0}let y=t.length;for(s=0;s<y;s++){let f=t[s];Nse(this,m,p,f);let x=f.id;for(a=o-1;a>=0;a--)c=i[a].getById(x),d(c)&&(d(l)||(l=r.getById(x),d(l)?dK(l):(EN.id=x,l=new Oo(EN),r.add(l))),l.merge(c));l=void 0}r.resumeEvents()};Sr.prototype._onDefinitionChanged=function(e,t,n,i){let o=this._collections,r=this._composite,s=o.length,a=e.id,c=r.getById(a),l=c[t],u=!d(l),m=!0;for(let p=s-1;p>=0;p--){let y=o[p].getById(e.id);if(d(y)){let f=y[t];if(d(f)){if(m)if(m=!1,d(f.merge)&&d(f.clone))l=f.clone(l);else{l=f;break}l.merge(f)}}}u&&c.propertyNames.indexOf(t)===-1&&c.addProperty(t),c[t]=l};var uK=Sr;var dFn=T(S(),1);var oFn=T(S(),1);var Uwn=T(S(),1);function mK(){this._removalFunctions=[]}mK.prototype.add=function(e,t,n){let i=e.addEventListener(t,n);this._removalFunctions.push(i);let o=this;return function(){i();let r=o._removalFunctions;r.splice(r.indexOf(i),1)}};mK.prototype.removeAll=function(){let e=this._removalFunctions;for(let t=0,n=e.length;t<n;++t)e[t]();e.length=0};var Cr=mK;var jwn=T(S(),1);function pK(e,t){return te.compare(e.start,t.start)}function Vr(e){if(this._intervals=[],this._changedEvent=new ye,d(e)){let t=e.length;for(let n=0;n<t;n++)this.addInterval(e[n])}}Object.defineProperties(Vr.prototype,{changedEvent:{get:function(){return this._changedEvent}},start:{get:function(){let e=this._intervals;return e.length===0?void 0:e[0].start}},isStartIncluded:{get:function(){let e=this._intervals;return e.length===0?!1:e[0].isStartIncluded}},stop:{get:function(){let e=this._intervals,t=e.length;return t===0?void 0:e[t-1].stop}},isStopIncluded:{get:function(){let e=this._intervals,t=e.length;return t===0?!1:e[t-1].isStopIncluded}},length:{get:function(){return this._intervals.length}},isEmpty:{get:function(){return this._intervals.length===0}}});Vr.prototype.equals=function(e,t){if(this===e)return!0;if(!(e instanceof Vr))return!1;let n=this._intervals,i=e._intervals,o=n.length;if(o!==i.length)return!1;for(let r=0;r<o;r++)if(!Tn.equals(n[r],i[r],t))return!1;return!0};Vr.prototype.get=function(e){return this._intervals[e]};Vr.prototype.removeAll=function(){this._intervals.length>0&&(this._intervals.length=0,this._changedEvent.raiseEvent(this))};Vr.prototype.findIntervalContainingDate=function(e){let t=this.indexOf(e);return t>=0?this._intervals[t]:void 0};Vr.prototype.findDataForIntervalContainingDate=function(e){let t=this.indexOf(e);return t>=0?this._intervals[t].data:void 0};Vr.prototype.contains=function(e){return this.indexOf(e)>=0};var hK=new Tn;Vr.prototype.indexOf=function(e){let t=this._intervals;hK.start=e,hK.stop=e;let n=Lo(t,hK,pK);return n>=0?t[n].isStartIncluded?n:n>0&&t[n-1].stop.equals(e)&&t[n-1].isStopIncluded?n-1:~n:(n=~n,n>0&&n-1<t.length&&Tn.contains(t[n-1],e)?n-1:~n)};Vr.prototype.findInterval=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.start,n=e.stop,i=e.isStartIncluded,o=e.isStopIncluded,r=this._intervals;for(let s=0,a=r.length;s<a;s++){let c=r[s];if((!d(t)||c.start.equals(t))&&(!d(n)||c.stop.equals(n))&&(!d(i)||c.isStartIncluded===i)&&(!d(o)||c.isStopIncluded===o))return r[s]}};Vr.prototype.addInterval=function(e,t){if(e.isEmpty)return;let n=this._intervals;if(n.length===0||te.greaterThan(e.start,n[n.length-1].stop)){n.push(e),this._changedEvent.raiseEvent(this);return}let i=Lo(n,e,pK);i<0?i=~i:i>0&&e.isStartIncluded&&n[i-1].isStartIncluded&&n[i-1].start.equals(e.start)?--i:i<n.length&&!e.isStartIncluded&&n[i].isStartIncluded&&n[i].start.equals(e.start)&&++i;let o;for(i>0&&(o=te.compare(n[i-1].stop,e.start),(o>0||o===0&&(n[i-1].isStopIncluded||e.isStartIncluded))&&((d(t)?t(n[i-1].data,e.data):n[i-1].data===e.data)?(te.greaterThan(e.stop,n[i-1].stop)?e=new Tn({start:n[i-1].start,stop:e.stop,isStartIncluded:n[i-1].isStartIncluded,isStopIncluded:e.isStopIncluded,data:e.data}):e=new Tn({start:n[i-1].start,stop:n[i-1].stop,isStartIncluded:n[i-1].isStartIncluded,isStopIncluded:n[i-1].isStopIncluded||e.stop.equals(n[i-1].stop)&&e.isStopIncluded,data:e.data}),n.splice(i-1,1),--i):(o=te.compare(n[i-1].stop,e.stop),(o>0||o===0&&n[i-1].isStopIncluded&&!e.isStopIncluded)&&n.splice(i,0,new Tn({start:e.stop,stop:n[i-1].stop,isStartIncluded:!e.isStopIncluded,isStopIncluded:n[i-1].isStopIncluded,data:n[i-1].data})),n[i-1]=new Tn({start:n[i-1].start,stop:e.start,isStartIncluded:n[i-1].isStartIncluded,isStopIncluded:!e.isStartIncluded,data:n[i-1].data}))));i<n.length&&(o=te.compare(e.stop,n[i].start),o>0||o===0&&(e.isStopIncluded||n[i].isStartIncluded));)if(d(t)?t(n[i].data,e.data):n[i].data===e.data)e=new Tn({start:e.start,stop:te.greaterThan(n[i].stop,e.stop)?n[i].stop:e.stop,isStartIncluded:e.isStartIncluded,isStopIncluded:te.greaterThan(n[i].stop,e.stop)?n[i].isStopIncluded:e.isStopIncluded,data:e.data}),n.splice(i,1);else if(n[i]=new Tn({start:e.stop,stop:n[i].stop,isStartIncluded:!e.isStopIncluded,isStopIncluded:n[i].isStopIncluded,data:n[i].data}),n[i].isEmpty)n.splice(i,1);else break;n.splice(i,0,e),this._changedEvent.raiseEvent(this)};Vr.prototype.removeInterval=function(e){if(e.isEmpty)return!1;let t=this._intervals,n=Lo(t,e,pK);n<0&&(n=~n);let i=!1;for(n>0&&(te.greaterThan(t[n-1].stop,e.start)||t[n-1].stop.equals(e.start)&&t[n-1].isStopIncluded&&e.isStartIncluded)&&(i=!0,(te.greaterThan(t[n-1].stop,e.stop)||t[n-1].isStopIncluded&&!e.isStopIncluded&&t[n-1].stop.equals(e.stop))&&t.splice(n,0,new Tn({start:e.stop,stop:t[n-1].stop,isStartIncluded:!e.isStopIncluded,isStopIncluded:t[n-1].isStopIncluded,data:t[n-1].data})),t[n-1]=new Tn({start:t[n-1].start,stop:e.start,isStartIncluded:t[n-1].isStartIncluded,isStopIncluded:!e.isStartIncluded,data:t[n-1].data})),n<t.length&&!e.isStartIncluded&&t[n].isStartIncluded&&e.start.equals(t[n].start)&&(i=!0,t.splice(n,0,new Tn({start:t[n].start,stop:t[n].start,isStartIncluded:!0,isStopIncluded:!0,data:t[n].data})),++n);n<t.length&&te.greaterThan(e.stop,t[n].stop);)i=!0,t.splice(n,1);return n<t.length&&e.stop.equals(t[n].stop)&&(i=!0,!e.isStopIncluded&&t[n].isStopIncluded?n+1<t.length&&t[n+1].start.equals(e.stop)&&t[n].data===t[n+1].data?(t.splice(n,1),t[n]=new Tn({start:t[n].start,stop:t[n].stop,isStartIncluded:!0,isStopIncluded:t[n].isStopIncluded,data:t[n].data})):t[n]=new Tn({start:e.stop,stop:e.stop,isStartIncluded:!0,isStopIncluded:!0,data:t[n].data}):t.splice(n,1)),n<t.length&&(te.greaterThan(e.stop,t[n].start)||e.stop.equals(t[n].start)&&e.isStopIncluded&&t[n].isStartIncluded)&&(i=!0,t[n]=new Tn({start:e.stop,stop:t[n].stop,isStartIncluded:!e.isStopIncluded,isStopIncluded:t[n].isStopIncluded,data:t[n].data})),i&&this._changedEvent.raiseEvent(this),i};Vr.prototype.intersect=function(e,t,n){let i=new Vr,o=0,r=0,s=this._intervals,a=e._intervals;for(;o<s.length&&r<a.length;){let c=s[o],l=a[r];if(te.lessThan(c.stop,l.start))++o;else if(te.lessThan(l.stop,c.start))++r;else{if(d(n)||d(t)&&t(c.data,l.data)||!d(t)&&l.data===c.data){let u=Tn.intersect(c,l,new Tn,n);u.isEmpty||i.addInterval(u,t)}te.lessThan(c.stop,l.stop)||c.stop.equals(l.stop)&&!c.isStopIncluded&&l.isStopIncluded?++o:++r}}return i};Vr.fromJulianDateArray=function(e,t){d(t)||(t=new Vr);let n=e.julianDates,i=n.length,o=e.dataCallback,r=g(e.isStartIncluded,!0),s=g(e.isStopIncluded,!0),a=g(e.leadingInterval,!1),c=g(e.trailingInterval,!1),l,u=0;a&&(++u,l=new Tn({start:Be.MINIMUM_VALUE,stop:n[0],isStartIncluded:!0,isStopIncluded:!r}),l.data=d(o)?o(l,t.length):t.length,t.addInterval(l));for(let m=0;m<i-1;++m){let p=n[m],y=n[m+1];l=new Tn({start:p,stop:y,isStartIncluded:t.length===u?r:!0,isStopIncluded:m===i-2?s:!1}),l.data=d(o)?o(l,t.length):t.length,t.addInterval(l),p=y}return c&&(l=new Tn({start:n[i-1],stop:Be.MAXIMUM_VALUE,isStartIncluded:!s,isStopIncluded:!0}),l.data=d(o)?o(l,t.length):t.length,t.addInterval(l)),t};var ja=new Hf,kW=[0,31,28,31,30,31,30,31,31,30,31,30,31];function fK(e,t,n){d(n)||(n=new te),te.toGregorianDate(e,ja);let i=ja.millisecond+t.millisecond,o=ja.second+t.second,r=ja.minute+t.minute,s=ja.hour+t.hour,a=ja.day+t.day,c=ja.month+t.month,l=ja.year+t.year;for(i>=1e3&&(o+=Math.floor(i/1e3),i=i%1e3),o>=60&&(r+=Math.floor(o/60),o=o%60),r>=60&&(s+=Math.floor(r/60),r=r%60),s>=24&&(a+=Math.floor(s/24),s=s%24),kW[2]=zf(l)?29:28;a>kW[c]||c>=13;)a>kW[c]&&(a-=kW[c],++c),c>=13&&(--c,l+=Math.floor(c/12),c=c%12,++c),kW[2]=zf(l)?29:28;return ja.millisecond=i,ja.second=o,ja.minute=r,ja.hour=s,ja.day=a,ja.month=c,ja.year=l,te.fromGregorianDate(ja,n)}var AYe=new te,MYe=/P(?:([\d.,]+)Y)?(?:([\d.,]+)M)?(?:([\d.,]+)W)?(?:([\d.,]+)D)?(?:T(?:([\d.,]+)H)?(?:([\d.,]+)M)?(?:([\d.,]+)S)?)?/;function Dse(e,t){if(!d(e)||e.length===0)return!1;if(t.year=0,t.month=0,t.day=0,t.hour=0,t.minute=0,t.second=0,t.millisecond=0,e[0]==="P"){let n=e.match(MYe);if(!d(n))return!1;if(d(n[1])&&(t.year=Number(n[1].replace(",","."))),d(n[2])&&(t.month=Number(n[2].replace(",","."))),d(n[3])&&(t.day=Number(n[3].replace(",","."))*7),d(n[4])&&(t.day+=Number(n[4].replace(",","."))),d(n[5])&&(t.hour=Number(n[5].replace(",","."))),d(n[6])&&(t.minute=Number(n[6].replace(",","."))),d(n[7])){let i=Number(n[7].replace(",","."));t.second=Math.floor(i),t.millisecond=i%1*1e3}}else e[e.length-1]!=="Z"&&(e+="Z"),te.toGregorianDate(te.fromIso8601(e,AYe),t);return t.year||t.month||t.day||t.hour||t.minute||t.second||t.millisecond}var DW=new Hf;Vr.fromIso8601=function(e,t){let n=e.iso8601.split("/"),i=te.fromIso8601(n[0]),o=te.fromIso8601(n[1]),r=[];if(!Dse(n[2],DW))r.push(i,o);else{let s=te.clone(i);for(r.push(s);te.compare(s,o)<0;)s=fK(s,DW),te.compare(o,s)<=0&&te.clone(o,s),r.push(s)}return Vr.fromJulianDateArray({julianDates:r,isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)};Vr.fromIso8601DateArray=function(e,t){return Vr.fromJulianDateArray({julianDates:e.iso8601Dates.map(function(n){return te.fromIso8601(n)}),isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)};Vr.fromIso8601DurationArray=function(e,t){let n=e.epoch,i=e.iso8601Durations,o=g(e.relativeToPrevious,!1),r=[],s,a,c=i.length;for(let l=0;l<c;++l)(Dse(i[l],DW)||l===0)&&(o&&d(a)?s=fK(a,DW):s=fK(n,DW),r.push(s),a=s);return Vr.fromJulianDateArray({julianDates:r,isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)};var Lr=Vr;function NYe(e,t,n,i){function o(){n.raiseEvent(e)}let r=[];t.removeAll();let s=i.length;for(let a=0;a<s;a++){let c=i.get(a);d(c.data)&&r.indexOf(c.data)===-1&&t.add(c.data.definitionChanged,o)}}function d_(){this._eventHelper=new Cr,this._definitionChanged=new ye,this._intervals=new Lr,this._intervals.changedEvent.addEventListener(d_.prototype._intervalsChanged,this)}Object.defineProperties(d_.prototype,{isConstant:{get:function(){return this._intervals.isEmpty}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._intervals}}});d_.prototype.getValue=function(e,t){let n=this._intervals.findDataForIntervalContainingDate(e);if(d(n))return n.getValue(e,t)};d_.prototype.equals=function(e){return this===e||e instanceof d_&&this._intervals.equals(e._intervals,H.equals)};d_.prototype._intervalsChanged=function(){NYe(this,this._eventHelper,this._definitionChanged,this._intervals),this._definitionChanged.raiseEvent(this)};var qa=d_;function cy(){this._definitionChanged=new ye,this._composite=new qa,this._composite.definitionChanged.addEventListener(cy.prototype._raiseDefinitionChanged,this)}Object.defineProperties(cy.prototype,{isConstant:{get:function(){return this._composite.isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._composite._intervals}}});cy.prototype.getType=function(e){let t=this._composite._intervals.findDataForIntervalContainingDate(e);if(d(t))return t.getType(e)};cy.prototype.getValue=function(e,t){let n=this._composite._intervals.findDataForIntervalContainingDate(e);if(d(n))return n.getValue(e,t)};cy.prototype.equals=function(e){return this===e||e instanceof cy&&this._composite.equals(e._composite,H.equals)};cy.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var ZC=cy;var gFn=T(S(),1);function ly(e){this._referenceFrame=g(e,io.FIXED),this._definitionChanged=new ye,this._composite=new qa,this._composite.definitionChanged.addEventListener(ly.prototype._raiseDefinitionChanged,this)}Object.defineProperties(ly.prototype,{isConstant:{get:function(){return this._composite.isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._composite.intervals}},referenceFrame:{get:function(){return this._referenceFrame},set:function(e){this._referenceFrame=e}}});ly.prototype.getValue=function(e,t){return this.getValueInReferenceFrame(e,io.FIXED,t)};ly.prototype.getValueInReferenceFrame=function(e,t,n){let i=this._composite._intervals.findDataForIntervalContainingDate(e);if(d(i))return i.getValueInReferenceFrame(e,t,n)};ly.prototype.equals=function(e){return this===e||e instanceof ly&&this._referenceFrame===e._referenceFrame&&this._composite.equals(e._composite,H.equals)};ly.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var Js=ly;var fAn=T(S(),1);var h9n=T(S(),1);var _Fn=T(S(),1),UYe={ROUNDED:0,MITERED:1,BEVELED:2},Ii=Object.freeze(UYe);var OFn=T(S(),1);var wFn=T(S(),1);var Qs=[new h,new h],kYe=new h,DYe=new h,BYe=new h,YYe=new h,OYe=new h,KYe=new h,HYe=new h,zYe=new h,JYe=new h,GC=new h,IN=new h,BW={},bK=new he;function QYe(e,t){let n=new Array(e.length);for(let i=0;i<e.length;i++){let o=e[i];bK=t.cartesianToCartographic(o,bK),n[i]=bK.height,e[i]=t.scaleToGeodeticSurface(o,o)}return n}function yK(e,t,n,i){let o=e[0],r=e[1],s=h.angleBetween(o,r),a=Math.ceil(s/i),c=new Array(a),l;if(t===n){for(l=0;l<a;l++)c[l]=t;return c.push(n),c}let m=(n-t)/a;for(l=1;l<a;l++){let p=t+l*m;c[l]=p}return c[0]=t,c.push(n),c}var WN=new h,PN=new h;function jYe(e,t,n,i){let o=new wr(n,i),r=o.projectPointOntoPlane(h.add(n,e,WN),WN),s=o.projectPointOntoPlane(h.add(n,t,PN),PN),a=D.angleBetween(r,s);return s.x*r.y-s.y*r.x>=0?-a:a}var qYe=new h(-1,0,0),u_=new A,$Ye=new A,gK=new $,eOe=$.IDENTITY.clone(),tOe=new h,nOe=new se,Bse=new h;function s0(e,t,n,i,o,r,s,a){let c=tOe,l=nOe;u_=vt.eastNorthUpToFixedFrame(e,o,u_),c=A.multiplyByPointAsVector(u_,qYe,c),c=h.normalize(c,c);let u=jYe(c,t,e,o);gK=$.fromRotationZ(u,gK),Bse.z=r,u_=A.multiplyTransformation(u_,A.fromRotationTranslation(gK,Bse,$Ye),u_);let m=eOe;m[0]=s;for(let p=0;p<a;p++)for(let y=0;y<n.length;y+=3)l=h.fromArray(n,y,l),l=$.multiplyByVector(m,l,l),l=A.multiplyByPoint(u_,l,l),i.push(l.x,l.y,l.z);return i}var iOe=new h;function xK(e,t,n,i,o,r,s){for(let a=0;a<e.length;a+=3){let c=h.fromArray(e,a,iOe);i=s0(c,t,n,i,o,r[a/3],s,1)}return i}function oOe(e,t){let n=e.length,i=new Array(n*6),o=0,r=t.x+t.width/2,s=t.y+t.height/2,a=e[0];i[o++]=a.x-r,i[o++]=0,i[o++]=a.y-s;for(let c=1;c<n;c++){a=e[c];let l=a.x-r,u=a.y-s;i[o++]=l,i[o++]=0,i[o++]=u,i[o++]=l,i[o++]=0,i[o++]=u}return a=e[0],i[o++]=a.x-r,i[o++]=0,i[o++]=a.y-s,i}function Yse(e,t){let n=e.length,i=new Array(n*3),o=0,r=t.x+t.width/2,s=t.y+t.height/2;for(let a=0;a<n;a++)i[o++]=e[a].x-r,i[o++]=0,i[o++]=e[a].y-s;return i}var Ose=new Ae,Kse=new h,Hse=new $;function zse(e,t,n,i,o,r,s,a,c,l){let u=h.angleBetween(h.subtract(t,e,GC),h.subtract(n,e,IN)),m=i===Ii.BEVELED?0:Math.ceil(u/W.toRadians(5)),p;o?p=$.fromQuaternion(Ae.fromAxisAngle(h.negate(e,GC),u/(m+1),Ose),Hse):p=$.fromQuaternion(Ae.fromAxisAngle(e,u/(m+1),Ose),Hse);let y,f;if(t=h.clone(t,Kse),m>0){let x=l?2:1;for(let _=0;_<m;_++)t=$.multiplyByVector(p,t,t),y=h.subtract(t,e,GC),y=h.normalize(y,y),o||(y=h.negate(y,y)),f=r.scaleToGeodeticSurface(t,IN),s=s0(f,y,a,s,r,c,1,x)}else y=h.subtract(t,e,GC),y=h.normalize(y,y),o||(y=h.negate(y,y)),f=r.scaleToGeodeticSurface(t,IN),s=s0(f,y,a,s,r,c,1,1),n=h.clone(n,Kse),y=h.subtract(n,e,GC),y=h.normalize(y,y),o||(y=h.negate(y,y)),f=r.scaleToGeodeticSurface(n,IN),s=s0(f,y,a,s,r,c,1,1);return s}BW.removeDuplicatesFromShape=function(e){let t=e.length,n=[];for(let i=t-1,o=0;o<t;i=o++){let r=e[i],s=e[o];D.equals(r,s)||n.push(s)}return n};BW.angleIsGreaterThanPi=function(e,t,n,i){let o=new wr(n,i),r=o.projectPointOntoPlane(h.add(n,e,WN),WN),s=o.projectPointOntoPlane(h.add(n,t,PN),PN);return s.x*r.y-s.y*r.x>=0};var rOe=new h,sOe=new h;BW.computePositions=function(e,t,n,i,o){let r=i._ellipsoid,s=QYe(e,r),a=i._granularity,c=i._cornerType,l=o?oOe(t,n):Yse(t,n),u=o?Yse(t,n):void 0,m=n.height/2,p=n.width/2,y=e.length,f=[],x=o?[]:void 0,_=kYe,C=DYe,V=BYe,L=YYe,Z=OYe,G=KYe,X=HYe,P=zYe,v=JYe,F=e[0],M=e[1];L=r.geodeticSurfaceNormal(F,L),_=h.subtract(M,F,_),_=h.normalize(_,_),P=h.cross(L,_,P),P=h.normalize(P,P);let b=s[0],R=s[1];o&&(x=s0(F,P,u,x,r,b+m,1,1)),v=h.clone(F,v),F=M,C=h.negate(_,C);let E,I;for(let B=1;B<y-1;B++){let k=o?2:1;if(M=e[B+1],F.equals(M)){Pt("Positions are too close and are considered equivalent with rounding error.");continue}_=h.subtract(M,F,_),_=h.normalize(_,_),V=h.add(_,C,V),V=h.normalize(V,V),L=r.geodeticSurfaceNormal(F,L);let O=h.multiplyByScalar(L,h.dot(_,L),rOe);h.subtract(_,O,O),h.normalize(O,O);let U=h.multiplyByScalar(L,h.dot(C,L),sOe);if(h.subtract(C,U,U),h.normalize(U,U),!W.equalsEpsilon(Math.abs(h.dot(O,U)),1,W.EPSILON7)){V=h.cross(V,L,V),V=h.cross(L,V,V),V=h.normalize(V,V);let z=1/Math.max(.25,h.magnitude(h.cross(V,C,GC))),ee=BW.angleIsGreaterThanPi(_,C,F,r);ee?(Z=h.add(F,h.multiplyByScalar(V,z*p,V),Z),G=h.add(Z,h.multiplyByScalar(P,p,G),G),Qs[0]=h.clone(v,Qs[0]),Qs[1]=h.clone(G,Qs[1]),E=yK(Qs,b+m,R+m,a),I=Xi.generateArc({positions:Qs,granularity:a,ellipsoid:r}),f=xK(I,P,l,f,r,E,1),P=h.cross(L,_,P),P=h.normalize(P,P),X=h.add(Z,h.multiplyByScalar(P,p,X),X),c===Ii.ROUNDED||c===Ii.BEVELED?zse(Z,G,X,c,ee,r,f,l,R+m,o):(V=h.negate(V,V),f=s0(F,V,l,f,r,R+m,z,k)),v=h.clone(X,v)):(Z=h.add(F,h.multiplyByScalar(V,z*p,V),Z),G=h.add(Z,h.multiplyByScalar(P,-p,G),G),Qs[0]=h.clone(v,Qs[0]),Qs[1]=h.clone(G,Qs[1]),E=yK(Qs,b+m,R+m,a),I=Xi.generateArc({positions:Qs,granularity:a,ellipsoid:r}),f=xK(I,P,l,f,r,E,1),P=h.cross(L,_,P),P=h.normalize(P,P),X=h.add(Z,h.multiplyByScalar(P,-p,X),X),c===Ii.ROUNDED||c===Ii.BEVELED?zse(Z,G,X,c,ee,r,f,l,R+m,o):f=s0(F,V,l,f,r,R+m,z,k),v=h.clone(X,v)),C=h.negate(_,C)}else f=s0(v,P,l,f,r,b+m,1,1),v=F;b=R,R=s[B+1],F=M}Qs[0]=h.clone(v,Qs[0]),Qs[1]=h.clone(F,Qs[1]),E=yK(Qs,b+m,R+m,a),I=Xi.generateArc({positions:Qs,granularity:a,ellipsoid:r}),f=xK(I,P,l,f,r,E,1),o&&(x=s0(F,P,u,x,r,R+m,1,1)),y=f.length;let w=o?y+x.length:y,N=new Float64Array(w);return N.set(f),o&&N.set(x,y),N};var Am=BW;var TK={},EC=new h,$se=new h,aOe=new h,Jse=new h,Fc=[new h,new h],eae=new h,tae=new h,nae=new h,cOe=new h,lOe=new h,dOe=new h,uOe=new h,mOe=new h,hOe=new h,fOe=new h,Qse=new Ae,jse=new $;function vN(e,t,n,i,o){let r=h.angleBetween(h.subtract(t,e,EC),h.subtract(n,e,$se)),s=i===Ii.BEVELED?1:Math.ceil(r/W.toRadians(5))+1,a=s*3,c=new Array(a);c[a-3]=n.x,c[a-2]=n.y,c[a-1]=n.z;let l;o?l=$.fromQuaternion(Ae.fromAxisAngle(h.negate(e,EC),r/s,Qse),jse):l=$.fromQuaternion(Ae.fromAxisAngle(e,r/s,Qse),jse);let u=0;t=h.clone(t,EC);for(let m=0;m<s;m++)t=$.multiplyByVector(l,t,t),c[u++]=t.x,c[u++]=t.y,c[u++]=t.z;return c}function pOe(e){let t=eae,n=tae,i=nae,o=e[1];n=h.fromArray(e[1],o.length-3,n),i=h.fromArray(e[0],0,i),t=h.midpoint(n,i,t);let r=vN(t,n,i,Ii.ROUNDED,!1),s=e.length-1,a=e[s-1];o=e[s],n=h.fromArray(a,a.length-3,n),i=h.fromArray(o,0,i),t=h.midpoint(n,i,t);let c=vN(t,n,i,Ii.ROUNDED,!1);return[r,c]}function qse(e,t,n,i){let o=EC;return i?o=h.add(e,t,o):(t=h.negate(t,t),o=h.add(e,t,o)),[o.x,o.y,o.z,n.x,n.y,n.z]}function _K(e,t,n,i){let o=new Array(e.length),r=new Array(e.length),s=h.multiplyByScalar(t,n,EC),a=h.negate(s,$se),c=0,l=e.length-1;for(let u=0;u<e.length;u+=3){let m=h.fromArray(e,u,aOe),p=h.add(m,a,Jse);o[c++]=p.x,o[c++]=p.y,o[c++]=p.z;let y=h.add(m,s,Jse);r[l--]=y.z,r[l--]=y.y,r[l--]=y.x}return i.push(o,r),i}TK.addAttribute=function(e,t,n,i){let o=t.x,r=t.y,s=t.z;d(n)&&(e[n]=o,e[n+1]=r,e[n+2]=s),d(i)&&(e[i]=s,e[i-1]=r,e[i-2]=o)};var bOe=new h,yOe=new h;TK.computePositions=function(e){let t=e.granularity,n=e.positions,i=e.ellipsoid,o=e.width/2,r=e.cornerType,s=e.saveAttributes,a=eae,c=tae,l=nae,u=cOe,m=lOe,p=dOe,y=uOe,f=mOe,x=hOe,_=fOe,C=[],V=s?[]:void 0,L=s?[]:void 0,Z=n[0],G=n[1];c=h.normalize(h.subtract(G,Z,c),c),a=i.geodeticSurfaceNormal(Z,a),u=h.normalize(h.cross(a,c,u),u),s&&(V.push(u.x,u.y,u.z),L.push(a.x,a.y,a.z)),y=h.clone(Z,y),Z=G,l=h.negate(c,l);let X,P=[],v,F=n.length;for(v=1;v<F-1;v++){a=i.geodeticSurfaceNormal(Z,a),G=n[v+1],c=h.normalize(h.subtract(G,Z,c),c),m=h.normalize(h.add(c,l,m),m);let b=h.multiplyByScalar(a,h.dot(c,a),bOe);h.subtract(c,b,b),h.normalize(b,b);let R=h.multiplyByScalar(a,h.dot(l,a),yOe);if(h.subtract(l,R,R),h.normalize(R,R),!W.equalsEpsilon(Math.abs(h.dot(b,R)),1,W.EPSILON7)){m=h.cross(m,a,m),m=h.cross(a,m,m),m=h.normalize(m,m);let I=o/Math.max(.25,h.magnitude(h.cross(m,l,EC))),w=Am.angleIsGreaterThanPi(c,l,Z,i);m=h.multiplyByScalar(m,I,m),w?(f=h.add(Z,m,f),_=h.add(f,h.multiplyByScalar(u,o,_),_),x=h.add(f,h.multiplyByScalar(u,o*2,x),x),Fc[0]=h.clone(y,Fc[0]),Fc[1]=h.clone(_,Fc[1]),X=Xi.generateArc({positions:Fc,granularity:t,ellipsoid:i}),C=_K(X,u,o,C),s&&(V.push(u.x,u.y,u.z),L.push(a.x,a.y,a.z)),p=h.clone(x,p),u=h.normalize(h.cross(a,c,u),u),x=h.add(f,h.multiplyByScalar(u,o*2,x),x),y=h.add(f,h.multiplyByScalar(u,o,y),y),r===Ii.ROUNDED||r===Ii.BEVELED?P.push({leftPositions:vN(f,p,x,r,w)}):P.push({leftPositions:qse(Z,h.negate(m,m),x,w)})):(x=h.add(Z,m,x),_=h.add(x,h.negate(h.multiplyByScalar(u,o,_),_),_),f=h.add(x,h.negate(h.multiplyByScalar(u,o*2,f),f),f),Fc[0]=h.clone(y,Fc[0]),Fc[1]=h.clone(_,Fc[1]),X=Xi.generateArc({positions:Fc,granularity:t,ellipsoid:i}),C=_K(X,u,o,C),s&&(V.push(u.x,u.y,u.z),L.push(a.x,a.y,a.z)),p=h.clone(f,p),u=h.normalize(h.cross(a,c,u),u),f=h.add(x,h.negate(h.multiplyByScalar(u,o*2,f),f),f),y=h.add(x,h.negate(h.multiplyByScalar(u,o,y),y),y),r===Ii.ROUNDED||r===Ii.BEVELED?P.push({rightPositions:vN(x,p,f,r,w)}):P.push({rightPositions:qse(Z,m,f,w)})),l=h.negate(c,l)}Z=G}a=i.geodeticSurfaceNormal(Z,a),Fc[0]=h.clone(y,Fc[0]),Fc[1]=h.clone(Z,Fc[1]),X=Xi.generateArc({positions:Fc,granularity:t,ellipsoid:i}),C=_K(X,u,o,C),s&&(V.push(u.x,u.y,u.z),L.push(a.x,a.y,a.z));let M;return r===Ii.ROUNDED&&(M=pOe(C)),{positions:C,corners:P,lefts:V,normals:L,endPositions:M}};var Mi=TK;var rae=new h,sae=new h,wN=new h,FN=new h,gOe=new h,aae=new h,dy=new h,XC=new h;function cae(e,t){for(let n=0;n<e.length;n++)e[n]=t.scaleToGeodeticSurface(e[n],e[n]);return e}function Mm(e,t,n,i,o,r){let s=e.normals,a=e.tangents,c=e.bitangents,l=h.normalize(h.cross(n,t,dy),dy);r.normal&&Mi.addAttribute(s,t,i,o),r.tangent&&Mi.addAttribute(a,l,i,o),r.bitangent&&Mi.addAttribute(c,n,i,o)}function lae(e,t,n){let i=e.positions,o=e.corners,r=e.endPositions,s=e.lefts,a=e.normals,c=new hn,l,u=0,m=0,p,y=0,f;for(p=0;p<i.length;p+=2)f=i[p].length-3,u+=f,y+=f*2,m+=i[p+1].length-3;for(u+=3,m+=3,p=0;p<o.length;p++){l=o[p];let q=o[p].leftPositions;d(q)?(f=q.length,u+=f,y+=f):(f=o[p].rightPositions.length,m+=f,y+=f)}let x=d(r),_;x&&(_=r[0].length-3,u+=_,m+=_,_/=3,y+=_*6);let C=u+m,V=new Float64Array(C),L=t.normal?new Float32Array(C):void 0,Z=t.tangent?new Float32Array(C):void 0,G=t.bitangent?new Float32Array(C):void 0,X={normals:L,tangents:Z,bitangents:G},P=0,v=C-1,F,M,b,R,E=rae,I=sae,w,N,B=_/2,k=Ue.createTypedArray(C/3,y),O=0;if(x){N=wN,w=FN;let q=r[0];for(E=h.fromArray(a,0,E),I=h.fromArray(s,0,I),p=0;p<B;p++)N=h.fromArray(q,(B-1-p)*3,N),w=h.fromArray(q,(B+p)*3,w),Mi.addAttribute(V,w,P),Mi.addAttribute(V,N,void 0,v),Mm(X,E,I,P,v,t),M=P/3,R=M+1,F=(v-2)/3,b=F-1,k[O++]=F,k[O++]=M,k[O++]=b,k[O++]=b,k[O++]=M,k[O++]=R,P+=3,v-=3}let U=0,J=0,z=i[U++],ee=i[U++];V.set(z,P),V.set(ee,v-ee.length+1),I=h.fromArray(s,J,I);let K,j;for(f=ee.length-3,p=0;p<f;p+=3)K=n.geodeticSurfaceNormal(h.fromArray(z,p,dy),dy),j=n.geodeticSurfaceNormal(h.fromArray(ee,f-p,XC),XC),E=h.normalize(h.add(K,j,E),E),Mm(X,E,I,P,v,t),M=P/3,R=M+1,F=(v-2)/3,b=F-1,k[O++]=F,k[O++]=M,k[O++]=b,k[O++]=b,k[O++]=M,k[O++]=R,P+=3,v-=3;for(K=n.geodeticSurfaceNormal(h.fromArray(z,f,dy),dy),j=n.geodeticSurfaceNormal(h.fromArray(ee,f,XC),XC),E=h.normalize(h.add(K,j,E),E),J+=3,p=0;p<o.length;p++){let q;l=o[p];let be=l.leftPositions,Te=l.rightPositions,ae,xe,_e=aae,Ve=wN,Ie=FN;if(E=h.fromArray(a,J,E),d(be)){for(Mm(X,E,I,void 0,v,t),v-=3,ae=R,xe=b,q=0;q<be.length/3;q++)_e=h.fromArray(be,q*3,_e),k[O++]=ae,k[O++]=xe-q-1,k[O++]=xe-q,Mi.addAttribute(V,_e,void 0,v),Ve=h.fromArray(V,(xe-q-1)*3,Ve),Ie=h.fromArray(V,ae*3,Ie),I=h.normalize(h.subtract(Ve,Ie,I),I),Mm(X,E,I,void 0,v,t),v-=3;_e=h.fromArray(V,ae*3,_e),Ve=h.subtract(h.fromArray(V,xe*3,Ve),_e,Ve),Ie=h.subtract(h.fromArray(V,(xe-q)*3,Ie),_e,Ie),I=h.normalize(h.add(Ve,Ie,I),I),Mm(X,E,I,P,void 0,t),P+=3}else{for(Mm(X,E,I,P,void 0,t),P+=3,ae=b,xe=R,q=0;q<Te.length/3;q++)_e=h.fromArray(Te,q*3,_e),k[O++]=ae,k[O++]=xe+q,k[O++]=xe+q+1,Mi.addAttribute(V,_e,P),Ve=h.fromArray(V,ae*3,Ve),Ie=h.fromArray(V,(xe+q)*3,Ie),I=h.normalize(h.subtract(Ve,Ie,I),I),Mm(X,E,I,P,void 0,t),P+=3;_e=h.fromArray(V,ae*3,_e),Ve=h.subtract(h.fromArray(V,(xe+q)*3,Ve),_e,Ve),Ie=h.subtract(h.fromArray(V,xe*3,Ie),_e,Ie),I=h.normalize(h.negate(h.add(Ie,Ve,I),I),I),Mm(X,E,I,void 0,v,t),v-=3}for(z=i[U++],ee=i[U++],z.splice(0,3),ee.splice(ee.length-3,3),V.set(z,P),V.set(ee,v-ee.length+1),f=ee.length-3,J+=3,I=h.fromArray(s,J,I),q=0;q<ee.length;q+=3)K=n.geodeticSurfaceNormal(h.fromArray(z,q,dy),dy),j=n.geodeticSurfaceNormal(h.fromArray(ee,f-q,XC),XC),E=h.normalize(h.add(K,j,E),E),Mm(X,E,I,P,v,t),R=P/3,M=R-1,b=(v-2)/3,F=b+1,k[O++]=F,k[O++]=M,k[O++]=b,k[O++]=b,k[O++]=M,k[O++]=R,P+=3,v-=3;P-=3,v+=3}if(E=h.fromArray(a,a.length-3,E),Mm(X,E,I,P,v,t),x){P+=3,v-=3,N=wN,w=FN;let q=r[1];for(p=0;p<B;p++)N=h.fromArray(q,(_-p-1)*3,N),w=h.fromArray(q,p*3,w),Mi.addAttribute(V,N,void 0,v),Mi.addAttribute(V,w,P),Mm(X,E,I,P,v,t),R=P/3,M=R-1,b=(v-2)/3,F=b+1,k[O++]=F,k[O++]=M,k[O++]=b,k[O++]=b,k[O++]=M,k[O++]=R,P+=3,v-=3}if(c.position=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:V}),t.st){let q=new Float32Array(C/3*2),be,Te,ae=0;if(x){u/=3,m/=3;let xe=Math.PI/(_+1);Te=1/(u-_+1),be=1/(m-_+1);let _e,Ve=_/2;for(p=Ve+1;p<_+1;p++)_e=W.PI_OVER_TWO+xe*p,q[ae++]=be*(1+Math.cos(_e)),q[ae++]=.5*(1+Math.sin(_e));for(p=1;p<m-_+1;p++)q[ae++]=p*be,q[ae++]=0;for(p=_;p>Ve;p--)_e=W.PI_OVER_TWO-p*xe,q[ae++]=1-be*(1+Math.cos(_e)),q[ae++]=.5*(1+Math.sin(_e));for(p=Ve;p>0;p--)_e=W.PI_OVER_TWO-xe*p,q[ae++]=1-Te*(1+Math.cos(_e)),q[ae++]=.5*(1+Math.sin(_e));for(p=u-_;p>0;p--)q[ae++]=p*Te,q[ae++]=1;for(p=1;p<Ve+1;p++)_e=W.PI_OVER_TWO+xe*p,q[ae++]=Te*(1+Math.cos(_e)),q[ae++]=.5*(1+Math.sin(_e))}else{for(u/=3,m/=3,Te=1/(u-1),be=1/(m-1),p=0;p<m;p++)q[ae++]=p*be,q[ae++]=0;for(p=u;p>0;p--)q[ae++]=(p-1)*Te,q[ae++]=1}c.st=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:q})}return t.normal&&(c.normal=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:X.normals})),t.tangent&&(c.tangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:X.tangents})),t.bitangent&&(c.bitangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:X.bitangents})),{attributes:c,indices:k}}function xOe(e,t){if(!t.normal&&!t.tangent&&!t.bitangent&&!t.st)return e;let n=e.position.values,i,o;(t.normal||t.bitangent)&&(i=e.normal.values,o=e.bitangent.values);let r=e.position.values.length/18,s=r*3,a=r*2,c=s*2,l;if(t.normal||t.bitangent||t.tangent){let u=t.normal?new Float32Array(s*6):void 0,m=t.tangent?new Float32Array(s*6):void 0,p=t.bitangent?new Float32Array(s*6):void 0,y=rae,f=sae,x=wN,_=FN,C=gOe,V=aae,L=c;for(l=0;l<s;l+=3){let Z=L+c;y=h.fromArray(n,l,y),f=h.fromArray(n,l+s,f),x=h.fromArray(n,(l+3)%s,x),f=h.subtract(f,y,f),x=h.subtract(x,y,x),_=h.normalize(h.cross(f,x,_),_),t.normal&&(Mi.addAttribute(u,_,Z),Mi.addAttribute(u,_,Z+3),Mi.addAttribute(u,_,L),Mi.addAttribute(u,_,L+3)),(t.tangent||t.bitangent)&&(V=h.fromArray(i,l,V),t.bitangent&&(Mi.addAttribute(p,V,Z),Mi.addAttribute(p,V,Z+3),Mi.addAttribute(p,V,L),Mi.addAttribute(p,V,L+3)),t.tangent&&(C=h.normalize(h.cross(V,_,C),C),Mi.addAttribute(m,C,Z),Mi.addAttribute(m,C,Z+3),Mi.addAttribute(m,C,L),Mi.addAttribute(m,C,L+3))),L+=6}if(t.normal){for(u.set(i),l=0;l<s;l+=3)u[l+s]=-i[l],u[l+s+1]=-i[l+1],u[l+s+2]=-i[l+2];e.normal.values=u}else e.normal=void 0;if(t.bitangent?(p.set(o),p.set(o,s),e.bitangent.values=p):e.bitangent=void 0,t.tangent){let Z=e.tangent.values;m.set(Z),m.set(Z,s),e.tangent.values=m}}if(t.st){let u=e.st.values,m=new Float32Array(a*6);m.set(u),m.set(u,a);let p=a*2;for(let y=0;y<2;y++){for(m[p++]=u[0],m[p++]=u[1],l=2;l<a;l+=2){let f=u[l],x=u[l+1];m[p++]=f,m[p++]=x,m[p++]=f,m[p++]=x}m[p++]=u[0],m[p++]=u[1]}e.st.values=m}return e}function SK(e,t,n){n[t++]=e[0],n[t++]=e[1],n[t++]=e[2];for(let i=3;i<e.length;i+=3){let o=e[i],r=e[i+1],s=e[i+2];n[t++]=o,n[t++]=r,n[t++]=s,n[t++]=o,n[t++]=r,n[t++]=s}return n[t++]=e[0],n[t++]=e[1],n[t++]=e[2],n}function _Oe(e,t){let n=new We({position:t.position,normal:t.normal||t.bitangent||e.shadowVolume,tangent:t.tangent,bitangent:t.normal||t.bitangent,st:t.st}),i=e.ellipsoid,o=Mi.computePositions(e),r=lae(o,n,i),s=e.height,a=e.extrudedHeight,c=r.attributes,l=r.indices,u=c.position.values,m=u.length,p=new Float64Array(m*6),y=new Float64Array(m);y.set(u);let f=new Float64Array(m*4);u=ai.scaleToGeodeticHeight(u,s,i),f=SK(u,0,f),y=ai.scaleToGeodeticHeight(y,a,i),f=SK(y,m*2,f),p.set(u),p.set(y,m),p.set(f,m*2),c.position.values=p,c=xOe(c,t);let x,_=m/3;if(e.shadowVolume){let F=c.normal.values;m=F.length;let M=new Float32Array(m*6);for(x=0;x<m;x++)F[x]=-F[x];M.set(F,m),M=SK(F,m*4,M),c.extrudeDirection=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:M}),t.normal||(c.normal=void 0)}if(d(e.offsetAttribute)){let F=new Uint8Array(_*6);if(e.offsetAttribute===on.TOP)F=F.fill(1,0,_).fill(1,_*2,_*4);else{let M=e.offsetAttribute===on.NONE?0:1;F=F.fill(M)}c.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:F})}let C=l.length,V=_+_,L=Ue.createTypedArray(p.length/3,C*2+V*3);L.set(l);let Z=C;for(x=0;x<C;x+=3){let F=l[x],M=l[x+1],b=l[x+2];L[Z++]=b+_,L[Z++]=M+_,L[Z++]=F+_}let G,X,P,v;for(x=0;x<V;x+=2)G=x+V,X=G+V,P=G+1,v=X+1,L[Z++]=G,L[Z++]=X,L[Z++]=P,L[Z++]=P,L[Z++]=X,L[Z++]=v;return{attributes:c,indices:L}}var iae=new h,YW=new h,_u=new he;function oae(e,t,n,i,o,r){let s=h.subtract(t,e,iae);h.normalize(s,s);let a=n.geodeticSurfaceNormal(e,YW),c=h.cross(s,a,iae);h.multiplyByScalar(c,i,c);let l=o.latitude,u=o.longitude,m=r.latitude,p=r.longitude;h.add(e,c,YW),n.cartesianToCartographic(YW,_u);let y=_u.latitude,f=_u.longitude;l=Math.min(l,y),u=Math.min(u,f),m=Math.max(m,y),p=Math.max(p,f),h.subtract(e,c,YW),n.cartesianToCartographic(YW,_u),y=_u.latitude,f=_u.longitude,l=Math.min(l,y),u=Math.min(u,f),m=Math.max(m,y),p=Math.max(p,f),o.latitude=l,o.longitude=u,r.latitude=m,r.longitude=p}var xu=new h,OW=new h,Vl=new he,Ll=new he;function dae(e,t,n,i,o){e=cae(e,t);let r=go(e,h.equalsEpsilon),s=r.length;if(s<2||n<=0)return new de;let a=n*.5;Vl.latitude=Number.POSITIVE_INFINITY,Vl.longitude=Number.POSITIVE_INFINITY,Ll.latitude=Number.NEGATIVE_INFINITY,Ll.longitude=Number.NEGATIVE_INFINITY;let c,l;if(i===Ii.ROUNDED){let p=r[0];h.subtract(p,r[1],xu),h.normalize(xu,xu),h.multiplyByScalar(xu,a,xu),h.add(p,xu,OW),t.cartesianToCartographic(OW,_u),c=_u.latitude,l=_u.longitude,Vl.latitude=Math.min(Vl.latitude,c),Vl.longitude=Math.min(Vl.longitude,l),Ll.latitude=Math.max(Ll.latitude,c),Ll.longitude=Math.max(Ll.longitude,l)}for(let p=0;p<s-1;++p)oae(r[p],r[p+1],t,a,Vl,Ll);let u=r[s-1];h.subtract(u,r[s-2],xu),h.normalize(xu,xu),h.multiplyByScalar(xu,a,xu),h.add(u,xu,OW),oae(u,OW,t,a,Vl,Ll),i===Ii.ROUNDED&&(t.cartesianToCartographic(OW,_u),c=_u.latitude,l=_u.longitude,Vl.latitude=Math.min(Vl.latitude,c),Vl.longitude=Math.min(Vl.longitude,l),Ll.latitude=Math.max(Ll.latitude,c),Ll.longitude=Math.max(Ll.longitude,l));let m=d(o)?o:new de;return m.north=Ll.latitude,m.south=Vl.latitude,m.east=Ll.longitude,m.west=Vl.longitude,m}function c0(e){e=g(e,g.EMPTY_OBJECT);let t=e.positions,n=e.width,i=g(e.height,0),o=g(e.extrudedHeight,i);this._positions=t,this._ellipsoid=re.clone(g(e.ellipsoid,re.WGS84)),this._vertexFormat=We.clone(g(e.vertexFormat,We.DEFAULT)),this._width=n,this._height=Math.max(i,o),this._extrudedHeight=Math.min(i,o),this._cornerType=g(e.cornerType,Ii.ROUNDED),this._granularity=g(e.granularity,W.RADIANS_PER_DEGREE),this._shadowVolume=g(e.shadowVolume,!1),this._workerName="createCorridorGeometry",this._offsetAttribute=e.offsetAttribute,this._rectangle=void 0,this.packedLength=1+t.length*h.packedLength+re.packedLength+We.packedLength+7}c0.pack=function(e,t,n){n=g(n,0);let i=e._positions,o=i.length;t[n++]=o;for(let r=0;r<o;++r,n+=h.packedLength)h.pack(i[r],t,n);return re.pack(e._ellipsoid,t,n),n+=re.packedLength,We.pack(e._vertexFormat,t,n),n+=We.packedLength,t[n++]=e._width,t[n++]=e._height,t[n++]=e._extrudedHeight,t[n++]=e._cornerType,t[n++]=e._granularity,t[n++]=e._shadowVolume?1:0,t[n]=g(e._offsetAttribute,-1),t};var uae=re.clone(re.UNIT_SPHERE),mae=new We,a0={positions:void 0,ellipsoid:uae,vertexFormat:mae,width:void 0,height:void 0,extrudedHeight:void 0,cornerType:void 0,granularity:void 0,shadowVolume:void 0,offsetAttribute:void 0};c0.unpack=function(e,t,n){t=g(t,0);let i=e[t++],o=new Array(i);for(let f=0;f<i;++f,t+=h.packedLength)o[f]=h.unpack(e,t);let r=re.unpack(e,t,uae);t+=re.packedLength;let s=We.unpack(e,t,mae);t+=We.packedLength;let a=e[t++],c=e[t++],l=e[t++],u=e[t++],m=e[t++],p=e[t++]===1,y=e[t];return d(n)?(n._positions=o,n._ellipsoid=re.clone(r,n._ellipsoid),n._vertexFormat=We.clone(s,n._vertexFormat),n._width=a,n._height=c,n._extrudedHeight=l,n._cornerType=u,n._granularity=m,n._shadowVolume=p,n._offsetAttribute=y===-1?void 0:y,n):(a0.positions=o,a0.width=a,a0.height=c,a0.extrudedHeight=l,a0.cornerType=u,a0.granularity=m,a0.shadowVolume=p,a0.offsetAttribute=y===-1?void 0:y,new c0(a0))};c0.computeRectangle=function(e,t){e=g(e,g.EMPTY_OBJECT);let n=e.positions,i=e.width,o=g(e.ellipsoid,re.WGS84),r=g(e.cornerType,Ii.ROUNDED);return dae(n,o,i,r,t)};c0.createGeometry=function(e){let t=e._positions,n=e._width,i=e._ellipsoid;t=cae(t,i);let o=go(t,h.equalsEpsilon);if(o.length<2||n<=0)return;let r=e._height,s=e._extrudedHeight,a=!W.equalsEpsilon(r,s,0,W.EPSILON2),c=e._vertexFormat,l={ellipsoid:i,positions:o,width:n,cornerType:e._cornerType,granularity:e._granularity,saveAttributes:!0},u;if(a)l.height=r,l.extrudedHeight=s,l.shadowVolume=e._shadowVolume,l.offsetAttribute=e._offsetAttribute,u=_Oe(l,c);else{let y=Mi.computePositions(l);if(u=lae(y,c,i),u.attributes.position.values=ai.scaleToGeodeticHeight(u.attributes.position.values,r,i),d(e._offsetAttribute)){let f=e._offsetAttribute===on.NONE?0:1,x=u.attributes.position.values.length,_=new Uint8Array(x/3).fill(f);u.attributes.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:_})}}let m=u.attributes,p=ce.fromVertices(m.position.values,void 0,3);return c.position||(u.attributes.position.values=void 0),new dt({attributes:m,indices:u.indices,primitiveType:Fe.TRIANGLES,boundingSphere:p,offsetAttribute:e._offsetAttribute})};c0.createShadowVolume=function(e,t,n){let i=e._granularity,o=e._ellipsoid,r=t(i,o),s=n(i,o);return new c0({positions:e._positions,width:e._width,cornerType:e._cornerType,ellipsoid:o,granularity:i,extrudedHeight:r,height:s,vertexFormat:We.POSITION_ONLY,shadowVolume:!0})};Object.defineProperties(c0.prototype,{rectangle:{get:function(){return d(this._rectangle)||(this._rectangle=dae(this._positions,this._ellipsoid,this._width,this._cornerType)),this._rectangle}},textureCoordinateRotationPoints:{get:function(){return[0,0,0,1,1,0]}}});var m_=c0;var W9n=T(S(),1);var hae=new h,fae=new h,TOe=new h;function SOe(e,t){for(let n=0;n<e.length;n++)e[n]=t.scaleToGeodeticSurface(e[n],e[n]);return e}function pae(e,t){let n=[],i=e.positions,o=e.corners,r=e.endPositions,s=new hn,a,c=0,l=0,u,m=0,p;for(u=0;u<i.length;u+=2)p=i[u].length-3,c+=p,m+=p/3*4,l+=i[u+1].length-3;for(c+=3,l+=3,u=0;u<o.length;u++){a=o[u];let w=o[u].leftPositions;d(w)?(p=w.length,c+=p,m+=p/3*2):(p=o[u].rightPositions.length,l+=p,m+=p/3*2)}let y=d(r),f;y&&(f=r[0].length-3,c+=f,l+=f,f/=3,m+=f*4);let x=c+l,_=new Float64Array(x),C=0,V=x-1,L,Z,G,X,P,v,F=f/2,M=Ue.createTypedArray(x/3,m+4),b=0;if(M[b++]=C/3,M[b++]=(V-2)/3,y){n.push(C/3),v=hae,P=fae;let w=r[0];for(u=0;u<F;u++)v=h.fromArray(w,(F-1-u)*3,v),P=h.fromArray(w,(F+u)*3,P),Mi.addAttribute(_,P,C),Mi.addAttribute(_,v,void 0,V),Z=C/3,X=Z+1,L=(V-2)/3,G=L-1,M[b++]=L,M[b++]=G,M[b++]=Z,M[b++]=X,C+=3,V-=3}let R=0,E=i[R++],I=i[R++];for(_.set(E,C),_.set(I,V-I.length+1),p=I.length-3,n.push(C/3,(V-2)/3),u=0;u<p;u+=3)Z=C/3,X=Z+1,L=(V-2)/3,G=L-1,M[b++]=L,M[b++]=G,M[b++]=Z,M[b++]=X,C+=3,V-=3;for(u=0;u<o.length;u++){let w;a=o[u];let N=a.leftPositions,B=a.rightPositions,k,O=TOe;if(d(N)){for(V-=3,k=G,n.push(X),w=0;w<N.length/3;w++)O=h.fromArray(N,w*3,O),M[b++]=k-w-1,M[b++]=k-w,Mi.addAttribute(_,O,void 0,V),V-=3;n.push(k-Math.floor(N.length/6)),t===Ii.BEVELED&&n.push((V-2)/3+1),C+=3}else{for(C+=3,k=X,n.push(G),w=0;w<B.length/3;w++)O=h.fromArray(B,w*3,O),M[b++]=k+w,M[b++]=k+w+1,Mi.addAttribute(_,O,C),C+=3;n.push(k+Math.floor(B.length/6)),t===Ii.BEVELED&&n.push(C/3-1),V-=3}for(E=i[R++],I=i[R++],E.splice(0,3),I.splice(I.length-3,3),_.set(E,C),_.set(I,V-I.length+1),p=I.length-3,w=0;w<I.length;w+=3)X=C/3,Z=X-1,G=(V-2)/3,L=G+1,M[b++]=L,M[b++]=G,M[b++]=Z,M[b++]=X,C+=3,V-=3;C-=3,V+=3,n.push(C/3,(V-2)/3)}if(y){C+=3,V-=3,v=hae,P=fae;let w=r[1];for(u=0;u<F;u++)v=h.fromArray(w,(f-u-1)*3,v),P=h.fromArray(w,u*3,P),Mi.addAttribute(_,v,void 0,V),Mi.addAttribute(_,P,C),X=C/3,Z=X-1,G=(V-2)/3,L=G+1,M[b++]=L,M[b++]=G,M[b++]=Z,M[b++]=X,C+=3,V-=3;n.push(C/3)}else n.push(C/3,(V-2)/3);return M[b++]=C/3,M[b++]=(V-2)/3,s.position=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:_}),{attributes:s,indices:M,wallIndices:n}}function COe(e){let t=e.ellipsoid,n=Mi.computePositions(e),i=pae(n,e.cornerType),o=i.wallIndices,r=e.height,s=e.extrudedHeight,a=i.attributes,c=i.indices,l=a.position.values,u=l.length,m=new Float64Array(u);m.set(l);let p=new Float64Array(u*2);if(l=ai.scaleToGeodeticHeight(l,r,t),m=ai.scaleToGeodeticHeight(m,s,t),p.set(l),p.set(m,u),a.position.values=p,u/=3,d(e.offsetAttribute)){let L=new Uint8Array(u*2);if(e.offsetAttribute===on.TOP)L=L.fill(1,0,u);else{let Z=e.offsetAttribute===on.NONE?0:1;L=L.fill(Z)}a.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:L})}let y,f=c.length,x=Ue.createTypedArray(p.length/3,(f+o.length)*2);x.set(c);let _=f;for(y=0;y<f;y+=2){let L=c[y],Z=c[y+1];x[_++]=L+u,x[_++]=Z+u}let C,V;for(y=0;y<o.length;y++)C=o[y],V=C+u,x[_++]=C,x[_++]=V;return{attributes:a,indices:x}}function KW(e){e=g(e,g.EMPTY_OBJECT);let t=e.positions,n=e.width,i=g(e.height,0),o=g(e.extrudedHeight,i);this._positions=t,this._ellipsoid=re.clone(g(e.ellipsoid,re.WGS84)),this._width=n,this._height=Math.max(i,o),this._extrudedHeight=Math.min(i,o),this._cornerType=g(e.cornerType,Ii.ROUNDED),this._granularity=g(e.granularity,W.RADIANS_PER_DEGREE),this._offsetAttribute=e.offsetAttribute,this._workerName="createCorridorOutlineGeometry",this.packedLength=1+t.length*h.packedLength+re.packedLength+6}KW.pack=function(e,t,n){n=g(n,0);let i=e._positions,o=i.length;t[n++]=o;for(let r=0;r<o;++r,n+=h.packedLength)h.pack(i[r],t,n);return re.pack(e._ellipsoid,t,n),n+=re.packedLength,t[n++]=e._width,t[n++]=e._height,t[n++]=e._extrudedHeight,t[n++]=e._cornerType,t[n++]=e._granularity,t[n]=g(e._offsetAttribute,-1),t};var bae=re.clone(re.UNIT_SPHERE),uy={positions:void 0,ellipsoid:bae,width:void 0,height:void 0,extrudedHeight:void 0,cornerType:void 0,granularity:void 0,offsetAttribute:void 0};KW.unpack=function(e,t,n){t=g(t,0);let i=e[t++],o=new Array(i);for(let p=0;p<i;++p,t+=h.packedLength)o[p]=h.unpack(e,t);let r=re.unpack(e,t,bae);t+=re.packedLength;let s=e[t++],a=e[t++],c=e[t++],l=e[t++],u=e[t++],m=e[t];return d(n)?(n._positions=o,n._ellipsoid=re.clone(r,n._ellipsoid),n._width=s,n._height=a,n._extrudedHeight=c,n._cornerType=l,n._granularity=u,n._offsetAttribute=m===-1?void 0:m,n):(uy.positions=o,uy.width=s,uy.height=a,uy.extrudedHeight=c,uy.cornerType=l,uy.granularity=u,uy.offsetAttribute=m===-1?void 0:m,new KW(uy))};KW.createGeometry=function(e){let t=e._positions,n=e._width,i=e._ellipsoid;t=SOe(t,i);let o=go(t,h.equalsEpsilon);if(o.length<2||n<=0)return;let r=e._height,s=e._extrudedHeight,a=!W.equalsEpsilon(r,s,0,W.EPSILON2),c={ellipsoid:i,positions:o,width:n,cornerType:e._cornerType,granularity:e._granularity,saveAttributes:!1},l;if(a)c.height=r,c.extrudedHeight=s,c.offsetAttribute=e._offsetAttribute,l=COe(c);else{let p=Mi.computePositions(c);if(l=pae(p,c.cornerType),l.attributes.position.values=ai.scaleToGeodeticHeight(l.attributes.position.values,r,i),d(e._offsetAttribute)){let y=l.attributes.position.values.length,f=e._offsetAttribute===on.NONE?0:1,x=new Uint8Array(y/3).fill(f);l.attributes.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:x})}}let u=l.attributes,m=ce.fromVertices(u.position.values,void 0,3);return new dt({attributes:u,indices:l.indices,primitiveType:Fe.LINES,boundingSphere:m,offsetAttribute:e._offsetAttribute})};var HW=KW;var O9n=T(S(),1);var VOe=new qn(0);function Ac(e){ii.call(this,e),this._zIndex=0,this._terrainOffsetProperty=void 0}d(Object.create)&&(Ac.prototype=Object.create(ii.prototype),Ac.prototype.constructor=Ac);Object.defineProperties(Ac.prototype,{zIndex:{get:function(){return this._zIndex}},terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});Ac.prototype._isOnTerrain=function(e,t){return this._fillEnabled&&!d(t.height)&&!d(t.extrudedHeight)&&Vc.isSupported(this._scene)};Ac.prototype._getIsClosed=function(e){let t=e.height,n=e.extrudedHeight;return t===0||d(n)&&n!==t};Ac.prototype._computeCenter=fe.throwInstantiationError;Ac.prototype._onEntityPropertyChanged=function(e,t,n,i){if(ii.prototype._onEntityPropertyChanged.call(this,e,t,n,i),this._observedPropertyNames.indexOf(t)===-1)return;let o=this._entity[this._geometryPropertyName];if(!d(o))return;d(o.zIndex)&&(d(o.height)||d(o.extrudedHeight))&&Pt(Pt.geometryZIndex),this._zIndex=g(o.zIndex,VOe),d(this._terrainOffsetProperty)&&(this._terrainOffsetProperty.destroy(),this._terrainOffsetProperty=void 0);let r=o.heightReference,s=o.extrudedHeightReference;if(d(r)||d(s)){let a=new mm(this._computeCenter.bind(this),!this._dynamic);this._terrainOffsetProperty=new cx(this._scene,a,r,s)}};Ac.prototype.destroy=function(){d(this._terrainOffsetProperty)&&(this._terrainOffsetProperty.destroy(),this._terrainOffsetProperty=void 0),ii.prototype.destroy.call(this)};Ac.getGeometryHeight=function(e,t){if(!d(e)){t!==Oe.NONE&&Pt(Pt.geometryHeightReference);return}return t!==Oe.CLAMP_TO_GROUND?e:0};Ac.getGeometryExtrudedHeight=function(e,t){if(!d(e)){t!==Oe.NONE&&Pt(Pt.geometryExtrudedHeightReference);return}return t!==Oe.CLAMP_TO_GROUND?e:Ac.CLAMP_TO_GROUND};Ac.CLAMP_TO_GROUND="clamp";Ac.computeGeometryOffsetAttribute=function(e,t,n,i){(!d(e)||!d(t))&&(t=Oe.NONE),(!d(n)||!d(i))&&(i=Oe.NONE);let o=0;if(t!==Oe.NONE&&o++,i===Oe.RELATIVE_TO_GROUND&&o++,o===2)return on.ALL;if(o===1)return on.TOP};var Hn=Ac;var yae=new Y,gae=h.ZERO,xae=new h,_ae=new de;function LOe(e){this.id=e,this.vertexFormat=void 0,this.positions=void 0,this.width=void 0,this.cornerType=void 0,this.height=void 0,this.extrudedHeight=void 0,this.granularity=void 0,this.offsetAttribute=void 0}function Nm(e,t){Hn.call(this,{entity:e,scene:t,geometryOptions:new LOe(e),geometryPropertyName:"corridor",observedPropertyNames:["availability","corridor"]}),this._onEntityPropertyChanged(e,"corridor",e.corridor,void 0)}d(Object.create)&&(Nm.prototype=Object.create(Hn.prototype),Nm.prototype.constructor=Nm);Nm.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i={show:new gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),distanceDisplayCondition:Un.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};if(this._materialProperty instanceof At){let o;d(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(o=this._materialProperty.color.getValue(e,yae)),d(o)||(o=Y.WHITE),i.color=Ut.fromColor(o)}return d(this._options.offsetAttribute)&&(i.offset=zi.fromCartesian3(H.getValueOrDefault(this._terrainOffsetProperty,e,gae,xae))),new _t({id:t,geometry:new m_(this._options),attributes:i})};Nm.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=H.getValueOrDefault(this._outlineColorProperty,e,Y.BLACK,yae),o={show:new gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Ut.fromColor(i),distanceDisplayCondition:Un.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0};return d(this._options.offsetAttribute)&&(o.offset=zi.fromCartesian3(H.getValueOrDefault(this._terrainOffsetProperty,e,gae,xae))),new _t({id:t,geometry:new HW(this._options),attributes:o})};Nm.prototype._computeCenter=function(e,t){let n=H.getValueOrUndefined(this._entity.corridor.positions,e);if(!(!d(n)||n.length===0))return h.clone(n[Math.floor(n.length/2)],t)};Nm.prototype._isHidden=function(e,t){return!d(t.positions)||!d(t.width)||ii.prototype._isHidden.call(this,e,t)};Nm.prototype._isDynamic=function(e,t){return!t.positions.isConstant||!H.isConstant(t.height)||!H.isConstant(t.extrudedHeight)||!H.isConstant(t.granularity)||!H.isConstant(t.width)||!H.isConstant(t.outlineWidth)||!H.isConstant(t.cornerType)||!H.isConstant(t.zIndex)||this._onTerrain&&!H.isConstant(this._materialProperty)&&!(this._materialProperty instanceof At)};Nm.prototype._setStaticOptions=function(e,t){let n=H.getValueOrUndefined(t.height,Be.MINIMUM_VALUE),i=H.getValueOrDefault(t.heightReference,Be.MINIMUM_VALUE,Oe.NONE),o=H.getValueOrUndefined(t.extrudedHeight,Be.MINIMUM_VALUE),r=H.getValueOrDefault(t.extrudedHeightReference,Be.MINIMUM_VALUE,Oe.NONE);d(o)&&!d(n)&&(n=0);let s=this._options;s.vertexFormat=this._materialProperty instanceof At?rn.VERTEX_FORMAT:so.MaterialSupport.TEXTURED.vertexFormat,s.positions=t.positions.getValue(Be.MINIMUM_VALUE,s.positions),s.width=t.width.getValue(Be.MINIMUM_VALUE),s.granularity=H.getValueOrUndefined(t.granularity,Be.MINIMUM_VALUE),s.cornerType=H.getValueOrUndefined(t.cornerType,Be.MINIMUM_VALUE),s.offsetAttribute=Hn.computeGeometryOffsetAttribute(n,i,o,r),s.height=Hn.getGeometryHeight(n,i),o=Hn.getGeometryExtrudedHeight(o,r),o===Hn.CLAMP_TO_GROUND&&(o=li.getMinimumMaximumHeights(m_.computeRectangle(s,_ae)).minimumTerrainHeight),s.extrudedHeight=o};Nm.DynamicGeometryUpdater=IC;function IC(e,t,n){ni.call(this,e,t,n)}d(Object.create)&&(IC.prototype=Object.create(ni.prototype),IC.prototype.constructor=IC);IC.prototype._isHidden=function(e,t,n){let i=this._options;return!d(i.positions)||!d(i.width)||ni.prototype._isHidden.call(this,e,t,n)};IC.prototype._setOptions=function(e,t,n){let i=this._options,o=H.getValueOrUndefined(t.height,n),r=H.getValueOrDefault(t.heightReference,n,Oe.NONE),s=H.getValueOrUndefined(t.extrudedHeight,n),a=H.getValueOrDefault(t.extrudedHeightReference,n,Oe.NONE);d(s)&&!d(o)&&(o=0),i.positions=H.getValueOrUndefined(t.positions,n),i.width=H.getValueOrUndefined(t.width,n),i.granularity=H.getValueOrUndefined(t.granularity,n),i.cornerType=H.getValueOrUndefined(t.cornerType,n),i.offsetAttribute=Hn.computeGeometryOffsetAttribute(o,r,s,a),i.height=Hn.getGeometryHeight(o,r),s=Hn.getGeometryExtrudedHeight(s,a),s===Hn.CLAMP_TO_GROUND&&(s=li.getMinimumMaximumHeights(m_.computeRectangle(i,_ae)).minimumTerrainHeight),i.extrudedHeight=s};var zW=Nm;var DMn=T(S(),1);var yAn=T(S(),1);function AN(){fe.throwInstantiationError()}Object.defineProperties(AN.prototype,{name:{get:fe.throwInstantiationError},clock:{get:fe.throwInstantiationError},entities:{get:fe.throwInstantiationError},isLoading:{get:fe.throwInstantiationError},changedEvent:{get:fe.throwInstantiationError},errorEvent:{get:fe.throwInstantiationError},loadingEvent:{get:fe.throwInstantiationError},show:{get:fe.throwInstantiationError},clustering:{get:fe.throwInstantiationError}});AN.prototype.update=function(e){fe.throwInstantiationError()};AN.setLoading=function(e,t){e._isLoading!==t&&(t?e._entityCollection.suspendEvents():e._entityCollection.resumeEvents(),e._isLoading=t,e._loading.raiseEvent(e,t))};var Rr=AN;var FMn=T(S(),1);var LAn=T(S(),1);function of(e,t){this._ellipsoid=e,this._cameraPosition=new h,this._cameraPositionInScaledSpace=new h,this._distanceToLimbInScaledSpaceSquared=0,d(t)&&(this.cameraPosition=t)}Object.defineProperties(of.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},cameraPosition:{get:function(){return this._cameraPosition},set:function(e){let n=this._ellipsoid.transformPositionToScaledSpace(e,this._cameraPositionInScaledSpace),i=h.magnitudeSquared(n)-1;h.clone(e,this._cameraPosition),this._cameraPositionInScaledSpace=n,this._distanceToLimbInScaledSpaceSquared=i}}});var Tae=new h;of.prototype.isPointVisible=function(e){let n=this._ellipsoid.transformPositionToScaledSpace(e,Tae);return VK(n,this._cameraPositionInScaledSpace,this._distanceToLimbInScaledSpaceSquared)};of.prototype.isScaledSpacePointVisible=function(e){return VK(e,this._cameraPositionInScaledSpace,this._distanceToLimbInScaledSpaceSquared)};var ROe=new h;of.prototype.isScaledSpacePointVisiblePossiblyUnderEllipsoid=function(e,t){let n=this._ellipsoid,i,o;return d(t)&&t<0&&n.minimumRadius>-t?(o=ROe,o.x=this._cameraPosition.x/(n.radii.x+t),o.y=this._cameraPosition.y/(n.radii.y+t),o.z=this._cameraPosition.z/(n.radii.z+t),i=o.x*o.x+o.y*o.y+o.z*o.z-1):(o=this._cameraPositionInScaledSpace,i=this._distanceToLimbInScaledSpaceSquared),VK(e,o,i)};of.prototype.computeHorizonCullingPoint=function(e,t,n){return Vae(this._ellipsoid,e,t,n)};var Sae=re.clone(re.UNIT_SPHERE);of.prototype.computeHorizonCullingPointPossiblyUnderEllipsoid=function(e,t,n,i){let o=Cae(this._ellipsoid,n,Sae);return Vae(o,e,t,i)};of.prototype.computeHorizonCullingPointFromVertices=function(e,t,n,i,o){return Lae(this._ellipsoid,e,t,n,i,o)};of.prototype.computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid=function(e,t,n,i,o,r){let s=Cae(this._ellipsoid,o,Sae);return Lae(s,e,t,n,i,r)};var ZOe=[];of.prototype.computeHorizonCullingPointFromRectangle=function(e,t,n){let i=de.subsample(e,t,0,ZOe),o=ce.fromPoints(i);if(!(h.magnitude(o.center)<.1*t.minimumRadius))return this.computeHorizonCullingPoint(o.center,i,n)};var GOe=new h;function Cae(e,t,n){if(d(t)&&t<0&&e.minimumRadius>-t){let i=h.fromElements(e.radii.x+t,e.radii.y+t,e.radii.z+t,GOe);e=re.fromCartesian3(i,n)}return e}function Vae(e,t,n,i){d(i)||(i=new h);let o=Gae(e,t),r=0;for(let s=0,a=n.length;s<a;++s){let c=n[s],l=Rae(e,c,o);if(l<0)return;r=Math.max(r,l)}return Zae(o,r,i)}var MN=new h;function Lae(e,t,n,i,o,r){d(r)||(r=new h),i=g(i,3),o=g(o,h.ZERO);let s=Gae(e,t),a=0;for(let c=0,l=n.length;c<l;c+=i){MN.x=n[c]+o.x,MN.y=n[c+1]+o.y,MN.z=n[c+2]+o.z;let u=Rae(e,MN,s);if(u<0)return;a=Math.max(a,u)}return Zae(s,a,r)}function VK(e,t,n){let i=t,o=n,r=h.subtract(e,i,Tae),s=-h.dot(r,i);return!(o<0?s>0:s>o&&s*s/h.magnitudeSquared(r)>o)}var EOe=new h,XOe=new h;function Rae(e,t,n){let i=e.transformPositionToScaledSpace(t,EOe),o=h.magnitudeSquared(i),r=Math.sqrt(o),s=h.divideByScalar(i,r,XOe);o=Math.max(1,o),r=Math.max(1,r);let a=h.dot(s,n),c=h.magnitude(h.cross(s,n,s)),l=1/r,u=Math.sqrt(o-1)*l;return 1/(a*l-c*u)}function Zae(e,t,n){if(!(t<=0||t===1/0||t!==t))return h.multiplyByScalar(e,t,n)}var CK=new h;function Gae(e,t){return h.equals(t,h.ZERO)?t:(e.transformPositionToScaledSpace(t,CK),h.normalize(CK,CK))}var l0=of;var NAn=T(S(),1);function Zr(e,t){e=g(e,g.EMPTY_OBJECT);let n=e.translucencyByDistance,i=e.scaleByDistance,o=e.distanceDisplayCondition;d(n)&&(n=It.clone(n)),d(i)&&(i=It.clone(i)),d(o)&&(o=Gt.clone(o)),this._show=g(e.show,!0),this._position=h.clone(g(e.position,h.ZERO)),this._actualPosition=h.clone(this._position),this._color=Y.clone(g(e.color,Y.WHITE)),this._outlineColor=Y.clone(g(e.outlineColor,Y.TRANSPARENT)),this._outlineWidth=g(e.outlineWidth,0),this._pixelSize=g(e.pixelSize,10),this._scaleByDistance=i,this._translucencyByDistance=n,this._distanceDisplayCondition=o,this._disableDepthTestDistance=g(e.disableDepthTestDistance,0),this._id=e.id,this._collection=g(e.collection,t),this._clusterShow=!0,this._pickId=void 0,this._pointPrimitiveCollection=t,this._dirty=!1,this._index=-1}var Eae=Zr.SHOW_INDEX=0,Wae=Zr.POSITION_INDEX=1,IOe=Zr.COLOR_INDEX=2,WOe=Zr.OUTLINE_COLOR_INDEX=3,POe=Zr.OUTLINE_WIDTH_INDEX=4,vOe=Zr.PIXEL_SIZE_INDEX=5,wOe=Zr.SCALE_BY_DISTANCE_INDEX=6,FOe=Zr.TRANSLUCENCY_BY_DISTANCE_INDEX=7,AOe=Zr.DISTANCE_DISPLAY_CONDITION_INDEX=8,MOe=Zr.DISABLE_DEPTH_DISTANCE_INDEX=9;Zr.NUMBER_OF_PROPERTIES=10;function Tu(e,t){let n=e._pointPrimitiveCollection;d(n)&&(n._updatePointPrimitive(e,t),e._dirty=!0)}Object.defineProperties(Zr.prototype,{show:{get:function(){return this._show},set:function(e){this._show!==e&&(this._show=e,Tu(this,Eae))}},position:{get:function(){return this._position},set:function(e){let t=this._position;h.equals(t,e)||(h.clone(e,t),h.clone(e,this._actualPosition),Tu(this,Wae))}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){let t=this._scaleByDistance;It.equals(t,e)||(this._scaleByDistance=It.clone(e,t),Tu(this,wOe))}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){let t=this._translucencyByDistance;It.equals(t,e)||(this._translucencyByDistance=It.clone(e,t),Tu(this,FOe))}},pixelSize:{get:function(){return this._pixelSize},set:function(e){this._pixelSize!==e&&(this._pixelSize=e,Tu(this,vOe))}},color:{get:function(){return this._color},set:function(e){let t=this._color;Y.equals(t,e)||(Y.clone(e,t),Tu(this,IOe))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){let t=this._outlineColor;Y.equals(t,e)||(Y.clone(e,t),Tu(this,WOe))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){this._outlineWidth!==e&&(this._outlineWidth=e,Tu(this,POe))}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){Gt.equals(this._distanceDisplayCondition,e)||(this._distanceDisplayCondition=Gt.clone(e,this._distanceDisplayCondition),Tu(this,AOe))}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){this._disableDepthTestDistance!==e&&(this._disableDepthTestDistance=e,Tu(this,MOe))}},id:{get:function(){return this._id},set:function(e){this._id=e,d(this._pickId)&&(this._pickId.object.id=e)}},pickId:{get:function(){return this._pickId}},clusterShow:{get:function(){return this._clusterShow},set:function(e){this._clusterShow!==e&&(this._clusterShow=e,Tu(this,Eae))}}});Zr.prototype.getPickId=function(e){return d(this._pickId)||(this._pickId=e.createPickId({primitive:this,collection:this._collection,id:this._id})),this._pickId};Zr.prototype._getActualPosition=function(){return this._actualPosition};Zr.prototype._setActualPosition=function(e){h.clone(e,this._actualPosition),Tu(this,Wae)};var Xae=new se;Zr._computeActualPosition=function(e,t,n){return t.mode===ie.SCENE3D?e:(A.multiplyByPoint(n,e,Xae),Ji.computeActualWgs84Position(t,Xae))};var Iae=new se;Zr._computeScreenSpacePosition=function(e,t,n,i){let o=A.multiplyByVector(e,se.fromElements(t.x,t.y,t.z,1,Iae),Iae);return Ji.wgs84ToWindowCoordinates(n,o,i)};Zr.prototype.computeScreenSpacePosition=function(e,t){let n=this._pointPrimitiveCollection;d(t)||(t=new D);let i=n.modelMatrix,o=Zr._computeScreenSpacePosition(i,this._actualPosition,e,t);if(d(o))return o.y=e.canvas.clientHeight-o.y,o};Zr.getScreenSpaceBoundingBox=function(e,t,n){let i=e.pixelSize,o=i*.5,r=t.x-o,s=t.y-o,a=i,c=i;return d(n)||(n=new He),n.x=r,n.y=s,n.width=a,n.height=c,n};Zr.prototype.equals=function(e){return this===e||d(e)&&this._id===e._id&&h.equals(this._position,e._position)&&Y.equals(this._color,e._color)&&this._pixelSize===e._pixelSize&&this._outlineWidth===e._outlineWidth&&this._show===e._show&&Y.equals(this._outlineColor,e._outlineColor)&&It.equals(this._scaleByDistance,e._scaleByDistance)&&It.equals(this._translucencyByDistance,e._translucencyByDistance)&&Gt.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance};Zr.prototype._destroy=function(){this._pickId=this._pickId&&this._pickId.destroy(),this._pointPrimitiveCollection=void 0};var Xs=Zr;var bMn=T(S(),1);var kAn=T(S(),1),my=`in vec4 v_color;
  7225. in vec4 v_outlineColor;
  7226. in float v_innerPercent;
  7227. in float v_pixelDistance;
  7228. in vec4 v_pickColor;
  7229. void main()
  7230. {
  7231. // The distance in UV space from this fragment to the center of the point, at most 0.5.
  7232. float distanceToCenter = length(gl_PointCoord - vec2(0.5));
  7233. // The max distance stops one pixel shy of the edge to leave space for anti-aliasing.
  7234. float maxDistance = max(0.0, 0.5 - v_pixelDistance);
  7235. float wholeAlpha = 1.0 - smoothstep(maxDistance, 0.5, distanceToCenter);
  7236. float innerAlpha = 1.0 - smoothstep(maxDistance * v_innerPercent, 0.5 * v_innerPercent, distanceToCenter);
  7237. vec4 color = mix(v_outlineColor, v_color, innerAlpha);
  7238. color.a *= wholeAlpha;
  7239. // Fully transparent parts of the billboard are not pickable.
  7240. #if !defined(OPAQUE) && !defined(TRANSLUCENT)
  7241. if (color.a < 0.005) // matches 0/255 and 1/255
  7242. {
  7243. discard;
  7244. }
  7245. #else
  7246. // The billboard is rendered twice. The opaque pass discards translucent fragments
  7247. // and the translucent pass discards opaque fragments.
  7248. #ifdef OPAQUE
  7249. if (color.a < 0.995) // matches < 254/255
  7250. {
  7251. discard;
  7252. }
  7253. #else
  7254. if (color.a >= 0.995) // matches 254/255 and 255/255
  7255. {
  7256. discard;
  7257. }
  7258. #endif
  7259. #endif
  7260. out_FragColor = czm_gammaCorrect(color);
  7261. czm_writeLogDepth();
  7262. }
  7263. `;var BAn=T(S(),1),JW=`uniform float u_maxTotalPointSize;
  7264. in vec4 positionHighAndSize;
  7265. in vec4 positionLowAndOutline;
  7266. in vec4 compressedAttribute0; // color, outlineColor, pick color
  7267. in vec4 compressedAttribute1; // show, translucency by distance, some free space
  7268. in vec4 scaleByDistance; // near, nearScale, far, farScale
  7269. in vec3 distanceDisplayConditionAndDisableDepth; // near, far, disableDepthTestDistance
  7270. out vec4 v_color;
  7271. out vec4 v_outlineColor;
  7272. out float v_innerPercent;
  7273. out float v_pixelDistance;
  7274. out vec4 v_pickColor;
  7275. const float SHIFT_LEFT8 = 256.0;
  7276. const float SHIFT_RIGHT8 = 1.0 / 256.0;
  7277. void main()
  7278. {
  7279. // Modifying this shader may also require modifications to PointPrimitive._computeScreenSpacePosition
  7280. // unpack attributes
  7281. vec3 positionHigh = positionHighAndSize.xyz;
  7282. vec3 positionLow = positionLowAndOutline.xyz;
  7283. float outlineWidthBothSides = 2.0 * positionLowAndOutline.w;
  7284. float totalSize = positionHighAndSize.w + outlineWidthBothSides;
  7285. float outlinePercent = outlineWidthBothSides / totalSize;
  7286. // Scale in response to browser-zoom.
  7287. totalSize *= czm_pixelRatio;
  7288. float temp = compressedAttribute1.x * SHIFT_RIGHT8;
  7289. float show = floor(temp);
  7290. #ifdef EYE_DISTANCE_TRANSLUCENCY
  7291. vec4 translucencyByDistance;
  7292. translucencyByDistance.x = compressedAttribute1.z;
  7293. translucencyByDistance.z = compressedAttribute1.w;
  7294. translucencyByDistance.y = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0;
  7295. temp = compressedAttribute1.y * SHIFT_RIGHT8;
  7296. translucencyByDistance.w = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0;
  7297. #endif
  7298. ///////////////////////////////////////////////////////////////////////////
  7299. vec4 color;
  7300. vec4 outlineColor;
  7301. vec4 pickColor;
  7302. // compressedAttribute0.z => pickColor.rgb
  7303. temp = compressedAttribute0.z * SHIFT_RIGHT8;
  7304. pickColor.b = (temp - floor(temp)) * SHIFT_LEFT8;
  7305. temp = floor(temp) * SHIFT_RIGHT8;
  7306. pickColor.g = (temp - floor(temp)) * SHIFT_LEFT8;
  7307. pickColor.r = floor(temp);
  7308. // compressedAttribute0.x => color.rgb
  7309. temp = compressedAttribute0.x * SHIFT_RIGHT8;
  7310. color.b = (temp - floor(temp)) * SHIFT_LEFT8;
  7311. temp = floor(temp) * SHIFT_RIGHT8;
  7312. color.g = (temp - floor(temp)) * SHIFT_LEFT8;
  7313. color.r = floor(temp);
  7314. // compressedAttribute0.y => outlineColor.rgb
  7315. temp = compressedAttribute0.y * SHIFT_RIGHT8;
  7316. outlineColor.b = (temp - floor(temp)) * SHIFT_LEFT8;
  7317. temp = floor(temp) * SHIFT_RIGHT8;
  7318. outlineColor.g = (temp - floor(temp)) * SHIFT_LEFT8;
  7319. outlineColor.r = floor(temp);
  7320. // compressedAttribute0.w => color.a, outlineColor.a, pickColor.a
  7321. temp = compressedAttribute0.w * SHIFT_RIGHT8;
  7322. pickColor.a = (temp - floor(temp)) * SHIFT_LEFT8;
  7323. pickColor = pickColor / 255.0;
  7324. temp = floor(temp) * SHIFT_RIGHT8;
  7325. outlineColor.a = (temp - floor(temp)) * SHIFT_LEFT8;
  7326. outlineColor /= 255.0;
  7327. color.a = floor(temp);
  7328. color /= 255.0;
  7329. ///////////////////////////////////////////////////////////////////////////
  7330. vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);
  7331. vec4 positionEC = czm_modelViewRelativeToEye * p;
  7332. ///////////////////////////////////////////////////////////////////////////
  7333. #if defined(EYE_DISTANCE_SCALING) || defined(EYE_DISTANCE_TRANSLUCENCY) || defined(DISTANCE_DISPLAY_CONDITION) || defined(DISABLE_DEPTH_DISTANCE)
  7334. float lengthSq;
  7335. if (czm_sceneMode == czm_sceneMode2D)
  7336. {
  7337. // 2D camera distance is a special case
  7338. // treat all billboards as flattened to the z=0.0 plane
  7339. lengthSq = czm_eyeHeight2D.y;
  7340. }
  7341. else
  7342. {
  7343. lengthSq = dot(positionEC.xyz, positionEC.xyz);
  7344. }
  7345. #endif
  7346. #ifdef EYE_DISTANCE_SCALING
  7347. totalSize *= czm_nearFarScalar(scaleByDistance, lengthSq);
  7348. #endif
  7349. if (totalSize > 0.0) {
  7350. // Add padding for anti-aliasing on both sides.
  7351. totalSize += 3.0;
  7352. }
  7353. // Clamp to max point size.
  7354. totalSize = min(totalSize, u_maxTotalPointSize);
  7355. // If size is too small, push vertex behind near plane for clipping.
  7356. // Note that context.minimumAliasedPointSize "will be at most 1.0".
  7357. if (totalSize < 1.0)
  7358. {
  7359. positionEC.xyz = vec3(0.0);
  7360. totalSize = 1.0;
  7361. }
  7362. float translucency = 1.0;
  7363. #ifdef EYE_DISTANCE_TRANSLUCENCY
  7364. translucency = czm_nearFarScalar(translucencyByDistance, lengthSq);
  7365. // push vertex behind near plane for clipping
  7366. if (translucency < 0.004)
  7367. {
  7368. positionEC.xyz = vec3(0.0);
  7369. }
  7370. #endif
  7371. #ifdef DISTANCE_DISPLAY_CONDITION
  7372. float nearSq = distanceDisplayConditionAndDisableDepth.x;
  7373. float farSq = distanceDisplayConditionAndDisableDepth.y;
  7374. if (lengthSq < nearSq || lengthSq > farSq) {
  7375. // push vertex behind camera to force it to be clipped
  7376. positionEC.xyz = vec3(0.0, 0.0, 1.0);
  7377. }
  7378. #endif
  7379. gl_Position = czm_projection * positionEC;
  7380. czm_vertexLogDepth();
  7381. #ifdef DISABLE_DEPTH_DISTANCE
  7382. float disableDepthTestDistance = distanceDisplayConditionAndDisableDepth.z;
  7383. if (disableDepthTestDistance == 0.0 && czm_minimumDisableDepthTestDistance != 0.0)
  7384. {
  7385. disableDepthTestDistance = czm_minimumDisableDepthTestDistance;
  7386. }
  7387. if (disableDepthTestDistance != 0.0)
  7388. {
  7389. // Don't try to "multiply both sides" by w. Greater/less-than comparisons won't work for negative values of w.
  7390. float zclip = gl_Position.z / gl_Position.w;
  7391. bool clipped = (zclip < -1.0 || zclip > 1.0);
  7392. if (!clipped && (disableDepthTestDistance < 0.0 || (lengthSq > 0.0 && lengthSq < disableDepthTestDistance)))
  7393. {
  7394. // Position z on the near plane.
  7395. gl_Position.z = -gl_Position.w;
  7396. #ifdef LOG_DEPTH
  7397. czm_vertexLogDepth(vec4(czm_currentFrustum.x));
  7398. #endif
  7399. }
  7400. }
  7401. #endif
  7402. v_color = color;
  7403. v_color.a *= translucency * show;
  7404. v_outlineColor = outlineColor;
  7405. v_outlineColor.a *= translucency * show;
  7406. v_innerPercent = 1.0 - outlinePercent;
  7407. v_pixelDistance = 2.0 / totalSize;
  7408. gl_PointSize = totalSize * show;
  7409. gl_Position *= show;
  7410. v_pickColor = pickColor;
  7411. }
  7412. `;var NOe=Xs.SHOW_INDEX,ZK=Xs.POSITION_INDEX,Pae=Xs.COLOR_INDEX,UOe=Xs.OUTLINE_COLOR_INDEX,kOe=Xs.OUTLINE_WIDTH_INDEX,DOe=Xs.PIXEL_SIZE_INDEX,vae=Xs.SCALE_BY_DISTANCE_INDEX,wae=Xs.TRANSLUCENCY_BY_DISTANCE_INDEX,Fae=Xs.DISTANCE_DISPLAY_CONDITION_INDEX,BOe=Xs.DISABLE_DEPTH_DISTANCE_INDEX,GK=Xs.NUMBER_OF_PROPERTIES,$a={positionHighAndSize:0,positionLowAndOutline:1,compressedAttribute0:2,compressedAttribute1:3,scaleByDistance:4,distanceDisplayConditionAndDisableDepth:5};function Su(e){e=g(e,g.EMPTY_OBJECT),this._sp=void 0,this._spTranslucent=void 0,this._rsOpaque=void 0,this._rsTranslucent=void 0,this._vaf=void 0,this._pointPrimitives=[],this._pointPrimitivesToUpdate=[],this._pointPrimitivesToUpdateIndex=0,this._pointPrimitivesRemoved=!1,this._createVertexArray=!1,this._shaderScaleByDistance=!1,this._compiledShaderScaleByDistance=!1,this._shaderTranslucencyByDistance=!1,this._compiledShaderTranslucencyByDistance=!1,this._shaderDistanceDisplayCondition=!1,this._compiledShaderDistanceDisplayCondition=!1,this._shaderDisableDepthDistance=!1,this._compiledShaderDisableDepthDistance=!1,this._propertiesChanged=new Uint32Array(GK),this._maxPixelSize=1,this._baseVolume=new ce,this._baseVolumeWC=new ce,this._baseVolume2D=new ce,this._boundingVolume=new ce,this._boundingVolumeDirty=!1,this._colorCommands=[],this.show=g(e.show,!0),this.modelMatrix=A.clone(g(e.modelMatrix,A.IDENTITY)),this._modelMatrix=A.clone(A.IDENTITY),this.debugShowBoundingVolume=g(e.debugShowBoundingVolume,!1),this.blendOption=g(e.blendOption,So.OPAQUE_AND_TRANSLUCENT),this._blendOption=void 0,this._mode=ie.SCENE3D,this._maxTotalPointSize=1,this._buffersUsage=[Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW,Ne.STATIC_DRAW];let t=this;this._uniforms={u_maxTotalPointSize:function(){return t._maxTotalPointSize}}}Object.defineProperties(Su.prototype,{length:{get:function(){return EK(this),this._pointPrimitives.length}}});function Aae(e){let t=e.length;for(let n=0;n<t;++n)e[n]&&e[n]._destroy()}Su.prototype.add=function(e){let t=new Xs(e,this);return t._index=this._pointPrimitives.length,this._pointPrimitives.push(t),this._createVertexArray=!0,t};Su.prototype.remove=function(e){return this.contains(e)?(this._pointPrimitives[e._index]=null,this._pointPrimitivesRemoved=!0,this._createVertexArray=!0,e._destroy(),!0):!1};Su.prototype.removeAll=function(){Aae(this._pointPrimitives),this._pointPrimitives=[],this._pointPrimitivesToUpdate=[],this._pointPrimitivesToUpdateIndex=0,this._pointPrimitivesRemoved=!1,this._createVertexArray=!0};function EK(e){if(e._pointPrimitivesRemoved){e._pointPrimitivesRemoved=!1;let t=[],n=e._pointPrimitives,i=n.length;for(let o=0,r=0;o<i;++o){let s=n[o];s&&(s._index=r++,t.push(s))}e._pointPrimitives=t}}Su.prototype._updatePointPrimitive=function(e,t){e._dirty||(this._pointPrimitivesToUpdate[this._pointPrimitivesToUpdateIndex++]=e),++this._propertiesChanged[t]};Su.prototype.contains=function(e){return d(e)&&e._pointPrimitiveCollection===this};Su.prototype.get=function(e){return EK(this),this._pointPrimitives[e]};Su.prototype.computeNewBuffersUsage=function(){let e=this._buffersUsage,t=!1,n=this._propertiesChanged;for(let i=0;i<GK;++i){let o=n[i]===0?Ne.STATIC_DRAW:Ne.STREAM_DRAW;t=t||e[i]!==o,e[i]=o}return t};function YOe(e,t,n){return new Np(e,[{index:$a.positionHighAndSize,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[ZK]},{index:$a.positionLowAndShow,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[ZK]},{index:$a.compressedAttribute0,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[Pae]},{index:$a.compressedAttribute1,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[wae]},{index:$a.scaleByDistance,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[vae]},{index:$a.distanceDisplayConditionAndDisableDepth,componentsPerAttribute:3,componentDatatype:Q.FLOAT,usage:n[Fae]}],t)}var LK=new On;function Mae(e,t,n,i){let o=i._index,r=i._getActualPosition();e._mode===ie.SCENE3D&&(ce.expand(e._baseVolume,r,e._baseVolume),e._boundingVolumeDirty=!0),On.fromCartesian(r,LK);let s=i.pixelSize,a=i.outlineWidth;e._maxPixelSize=Math.max(e._maxPixelSize,s+a);let c=n[$a.positionHighAndSize],l=LK.high;c(o,l.x,l.y,l.z,s);let u=n[$a.positionLowAndOutline],m=LK.low;u(o,m.x,m.y,m.z,a)}var NN=65536,QW=256;function Nae(e,t,n,i){let o=i._index,r=i.color,s=i.getPickId(t).color,a=i.outlineColor,c=Y.floatToByte(r.red),l=Y.floatToByte(r.green),u=Y.floatToByte(r.blue),m=c*NN+l*QW+u;c=Y.floatToByte(a.red),l=Y.floatToByte(a.green),u=Y.floatToByte(a.blue);let p=c*NN+l*QW+u;c=Y.floatToByte(s.red),l=Y.floatToByte(s.green),u=Y.floatToByte(s.blue);let y=c*NN+l*QW+u,f=Y.floatToByte(r.alpha)*NN+Y.floatToByte(a.alpha)*QW+Y.floatToByte(s.alpha),x=n[$a.compressedAttribute0];x(o,m,p,y,f)}function Uae(e,t,n,i){let o=i._index,r=0,s=1,a=1,c=1,l=i.translucencyByDistance;d(l)&&(r=l.near,s=l.nearValue,a=l.far,c=l.farValue,(s!==1||c!==1)&&(e._shaderTranslucencyByDistance=!0));let u=i.show&&i.clusterShow;i.color.alpha===0&&i.outlineColor.alpha===0&&(u=!1),s=W.clamp(s,0,1),s=s===1?255:s*255|0;let m=(u?1:0)*QW+s;c=W.clamp(c,0,1),c=c===1?255:c*255|0;let p=c,y=n[$a.compressedAttribute1];y(o,m,p,r,a)}function kae(e,t,n,i){let o=i._index,r=n[$a.scaleByDistance],s=0,a=1,c=1,l=1,u=i.scaleByDistance;d(u)&&(s=u.near,a=u.nearValue,c=u.far,l=u.farValue,(a!==1||l!==1)&&(e._shaderScaleByDistance=!0)),r(o,s,a,c,l)}function Dae(e,t,n,i){let o=i._index,r=n[$a.distanceDisplayConditionAndDisableDepth],s=0,a=Number.MAX_VALUE,c=i.distanceDisplayCondition;d(c)&&(s=c.near,a=c.far,s*=s,a*=a,e._shaderDistanceDisplayCondition=!0);let l=i.disableDepthTestDistance;l*=l,l>0&&(e._shaderDisableDepthDistance=!0,l===Number.POSITIVE_INFINITY&&(l=-1)),r(o,s,a,l)}function OOe(e,t,n,i){Mae(e,t,n,i),Nae(e,t,n,i),Uae(e,t,n,i),kae(e,t,n,i),Dae(e,t,n,i)}function RK(e,t,n,i,o,r){let s;i.mode===ie.SCENE3D?(s=e._baseVolume,e._boundingVolumeDirty=!0):s=e._baseVolume2D;let a=[];for(let c=0;c<n;++c){let l=t[c],u=l.position,m=Xs._computeActualPosition(u,i,o);d(m)&&(l._setActualPosition(m),r?a.push(m):ce.expand(s,m,s))}r&&ce.fromPoints(a,s)}function KOe(e,t){let n=t.mode,i=e._pointPrimitives,o=e._pointPrimitivesToUpdate,r=e._modelMatrix;e._createVertexArray||e._mode!==n||n!==ie.SCENE3D&&!A.equals(r,e.modelMatrix)?(e._mode=n,A.clone(e.modelMatrix,r),e._createVertexArray=!0,(n===ie.SCENE3D||n===ie.SCENE2D||n===ie.COLUMBUS_VIEW)&&RK(e,i,i.length,t,r,!0)):n===ie.MORPHING?RK(e,i,i.length,t,r,!0):(n===ie.SCENE2D||n===ie.COLUMBUS_VIEW)&&RK(e,o,e._pointPrimitivesToUpdateIndex,t,r,!1)}function HOe(e,t,n){let o=t.camera.getPixelSize(n,t.context.drawingBufferWidth,t.context.drawingBufferHeight)*e._maxPixelSize;n.radius+=o}var zOe=[];Su.prototype.update=function(e){if(EK(this),!this.show)return;this._maxTotalPointSize=kt.maximumAliasedPointSize,KOe(this,e);let n=this._pointPrimitives.length,i=this._pointPrimitivesToUpdate,o=this._pointPrimitivesToUpdateIndex,r=this._propertiesChanged,s=this._createVertexArray,a,c=e.context,l=e.passes,u=l.pick;if(s||!u&&this.computeNewBuffersUsage()){this._createVertexArray=!1;for(let G=0;G<GK;++G)r[G]=0;if(this._vaf=this._vaf&&this._vaf.destroy(),n>0){this._vaf=YOe(c,n,this._buffersUsage),a=this._vaf.writers;for(let G=0;G<n;++G){let X=this._pointPrimitives[G];X._dirty=!1,OOe(this,c,a,X)}this._vaf.commit()}this._pointPrimitivesToUpdateIndex=0}else if(o>0){let G=zOe;G.length=0,(r[ZK]||r[kOe]||r[DOe])&&G.push(Mae),(r[Pae]||r[UOe])&&G.push(Nae),(r[NOe]||r[wae])&&G.push(Uae),r[vae]&&G.push(kae),(r[Fae]||r[BOe])&&G.push(Dae);let X=G.length;if(a=this._vaf.writers,o/n>.1){for(let P=0;P<o;++P){let v=i[P];v._dirty=!1;for(let F=0;F<X;++F)G[F](this,c,a,v)}this._vaf.commit()}else{for(let P=0;P<o;++P){let v=i[P];v._dirty=!1;for(let F=0;F<X;++F)G[F](this,c,a,v);this._vaf.subCommit(v._index,1)}this._vaf.endSubCommits()}this._pointPrimitivesToUpdateIndex=0}if(o>n*1.5&&(i.length=n),!d(this._vaf)||!d(this._vaf.va))return;this._boundingVolumeDirty&&(this._boundingVolumeDirty=!1,ce.transform(this._baseVolume,this.modelMatrix,this._baseVolumeWC));let m,p=A.IDENTITY;e.mode===ie.SCENE3D?(p=this.modelMatrix,m=ce.clone(this._baseVolumeWC,this._boundingVolume)):m=ce.clone(this._baseVolume2D,this._boundingVolume),HOe(this,e,m);let y=this._blendOption!==this.blendOption;this._blendOption=this.blendOption,y&&(this._blendOption===So.OPAQUE||this._blendOption===So.OPAQUE_AND_TRANSLUCENT?this._rsOpaque=De.fromCache({depthTest:{enabled:!0,func:ne.LEQUAL},depthMask:!0}):this._rsOpaque=void 0,this._blendOption===So.TRANSLUCENT||this._blendOption===So.OPAQUE_AND_TRANSLUCENT?this._rsTranslucent=De.fromCache({depthTest:{enabled:!0,func:ne.LEQUAL},depthMask:!1,blending:dn.ALPHA_BLEND}):this._rsTranslucent=void 0),this._shaderDisableDepthDistance=this._shaderDisableDepthDistance||e.minimumDisableDepthTestDistance!==0;let f,x;(y||this._shaderScaleByDistance&&!this._compiledShaderScaleByDistance||this._shaderTranslucencyByDistance&&!this._compiledShaderTranslucencyByDistance||this._shaderDistanceDisplayCondition&&!this._compiledShaderDistanceDisplayCondition||this._shaderDisableDepthDistance!==this._compiledShaderDisableDepthDistance)&&(f=new Ye({sources:[JW]}),this._shaderScaleByDistance&&f.defines.push("EYE_DISTANCE_SCALING"),this._shaderTranslucencyByDistance&&f.defines.push("EYE_DISTANCE_TRANSLUCENCY"),this._shaderDistanceDisplayCondition&&f.defines.push("DISTANCE_DISPLAY_CONDITION"),this._shaderDisableDepthDistance&&f.defines.push("DISABLE_DEPTH_DISTANCE"),this._blendOption===So.OPAQUE_AND_TRANSLUCENT&&(x=new Ye({defines:["OPAQUE"],sources:[my]}),this._sp=Qt.replaceCache({context:c,shaderProgram:this._sp,vertexShaderSource:f,fragmentShaderSource:x,attributeLocations:$a}),x=new Ye({defines:["TRANSLUCENT"],sources:[my]}),this._spTranslucent=Qt.replaceCache({context:c,shaderProgram:this._spTranslucent,vertexShaderSource:f,fragmentShaderSource:x,attributeLocations:$a})),this._blendOption===So.OPAQUE&&(x=new Ye({sources:[my]}),this._sp=Qt.replaceCache({context:c,shaderProgram:this._sp,vertexShaderSource:f,fragmentShaderSource:x,attributeLocations:$a})),this._blendOption===So.TRANSLUCENT&&(x=new Ye({sources:[my]}),this._spTranslucent=Qt.replaceCache({context:c,shaderProgram:this._spTranslucent,vertexShaderSource:f,fragmentShaderSource:x,attributeLocations:$a})),this._compiledShaderScaleByDistance=this._shaderScaleByDistance,this._compiledShaderTranslucencyByDistance=this._shaderTranslucencyByDistance,this._compiledShaderDistanceDisplayCondition=this._shaderDistanceDisplayCondition,this._compiledShaderDisableDepthDistance=this._shaderDisableDepthDistance);let _,C,V,L,Z=e.commandList;if(l.render||u){let G=this._colorCommands,X=this._blendOption===So.OPAQUE,P=this._blendOption===So.OPAQUE_AND_TRANSLUCENT;_=this._vaf.va,C=_.length,G.length=C;let v=P?C*2:C;for(L=0;L<v;++L){let F=X||P&&L%2===0;V=G[L],d(V)||(V=G[L]=new nt),V.primitiveType=Fe.POINTS,V.pass=F||!P?Re.OPAQUE:Re.TRANSLUCENT,V.owner=this;let M=P?Math.floor(L/2):L;V.boundingVolume=m,V.modelMatrix=p,V.shaderProgram=F?this._sp:this._spTranslucent,V.uniformMap=this._uniforms,V.vertexArray=_[M].va,V.renderState=F?this._rsOpaque:this._rsTranslucent,V.debugShowBoundingVolume=this.debugShowBoundingVolume,V.pickId="v_pickColor",Z.push(V)}}};Su.prototype.isDestroyed=function(){return!1};Su.prototype.destroy=function(){return this._sp=this._sp&&this._sp.destroy(),this._spTranslucent=this._spTranslucent&&this._spTranslucent.destroy(),this._spPick=this._spPick&&this._spPick.destroy(),this._vaf=this._vaf&&this._vaf.destroy(),Aae(this._pointPrimitives),ue(this)};var WC=Su;var gMn=T(S(),1),Bae=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],XK=1,jW=8,$W=class e{static from(t){if(!(t instanceof ArrayBuffer))throw new Error("Data must be an instance of ArrayBuffer.");let[n,i]=new Uint8Array(t,0,2);if(n!==219)throw new Error("Data does not appear to be in a KDBush format.");let o=i>>4;if(o!==XK)throw new Error(`Got v${o} data when expected v${XK}.`);let r=Bae[i&15];if(!r)throw new Error("Unrecognized array type.");let[s]=new Uint16Array(t,2,1),[a]=new Uint32Array(t,4,1);return new e(a,s,r,t)}constructor(t,n=64,i=Float64Array,o){if(isNaN(t)||t<0)throw new Error(`Unpexpected numItems value: ${t}.`);this.numItems=+t,this.nodeSize=Math.min(Math.max(+n,2),65535),this.ArrayType=i,this.IndexArrayType=t<65536?Uint16Array:Uint32Array;let r=Bae.indexOf(this.ArrayType),s=t*2*this.ArrayType.BYTES_PER_ELEMENT,a=t*this.IndexArrayType.BYTES_PER_ELEMENT,c=(8-a%8)%8;if(r<0)throw new Error(`Unexpected typed array class: ${i}.`);o&&o instanceof ArrayBuffer?(this.data=o,this.ids=new this.IndexArrayType(this.data,jW,t),this.coords=new this.ArrayType(this.data,jW+a+c,t*2),this._pos=t*2,this._finished=!0):(this.data=new ArrayBuffer(jW+s+a+c),this.ids=new this.IndexArrayType(this.data,jW,t),this.coords=new this.ArrayType(this.data,jW+a+c,t*2),this._pos=0,this._finished=!1,new Uint8Array(this.data,0,2).set([219,(XK<<4)+r]),new Uint16Array(this.data,2,1)[0]=n,new Uint32Array(this.data,4,1)[0]=t)}add(t,n){let i=this._pos>>1;return this.ids[i]=i,this.coords[this._pos++]=t,this.coords[this._pos++]=n,i}finish(){let t=this._pos>>1;if(t!==this.numItems)throw new Error(`Added ${t} items when expected ${this.numItems}.`);return WK(this.ids,this.coords,this.nodeSize,0,this.numItems-1,0),this._finished=!0,this}range(t,n,i,o){if(!this._finished)throw new Error("Data not yet indexed - call index.finish().");let{ids:r,coords:s,nodeSize:a}=this,c=[0,r.length-1,0],l=[];for(;c.length;){let u=c.pop()||0,m=c.pop()||0,p=c.pop()||0;if(m-p<=a){for(let _=p;_<=m;_++){let C=s[2*_],V=s[2*_+1];C>=t&&C<=i&&V>=n&&V<=o&&l.push(r[_])}continue}let y=p+m>>1,f=s[2*y],x=s[2*y+1];f>=t&&f<=i&&x>=n&&x<=o&&l.push(r[y]),(u===0?t<=f:n<=x)&&(c.push(p),c.push(y-1),c.push(1-u)),(u===0?i>=f:o>=x)&&(c.push(y+1),c.push(m),c.push(1-u))}return l}within(t,n,i){if(!this._finished)throw new Error("Data not yet indexed - call index.finish().");let{ids:o,coords:r,nodeSize:s}=this,a=[0,o.length-1,0],c=[],l=i*i;for(;a.length;){let u=a.pop()||0,m=a.pop()||0,p=a.pop()||0;if(m-p<=s){for(let _=p;_<=m;_++)Yae(r[2*_],r[2*_+1],t,n)<=l&&c.push(o[_]);continue}let y=p+m>>1,f=r[2*y],x=r[2*y+1];Yae(f,x,t,n)<=l&&c.push(o[y]),(u===0?t-i<=f:n-i<=x)&&(a.push(p),a.push(y-1),a.push(1-u)),(u===0?t+i>=f:n+i>=x)&&(a.push(y+1),a.push(m),a.push(1-u))}return c}};function WK(e,t,n,i,o,r){if(o-i<=n)return;let s=i+o>>1;Oae(e,t,s,i,o,r),WK(e,t,n,i,s-1,1-r),WK(e,t,n,s+1,o,1-r)}function Oae(e,t,n,i,o,r){for(;o>i;){if(o-i>600){let l=o-i+1,u=n-i+1,m=Math.log(l),p=.5*Math.exp(2*m/3),y=.5*Math.sqrt(m*p*(l-p)/l)*(u-l/2<0?-1:1),f=Math.max(i,Math.floor(n-u*p/l+y)),x=Math.min(o,Math.floor(n+(l-u)*p/l+y));Oae(e,t,n,f,x,r)}let s=t[2*n+r],a=i,c=o;for(qW(e,t,i,n),t[2*o+r]>s&&qW(e,t,i,o);a<c;){for(qW(e,t,a,c),a++,c--;t[2*a+r]<s;)a++;for(;t[2*c+r]>s;)c--}t[2*i+r]===s?qW(e,t,i,c):(c++,qW(e,t,c,o)),c<=n&&(i=c+1),n<=c&&(o=c-1)}}function qW(e,t,n,i){IK(e,n,i),IK(t,2*n,2*i),IK(t,2*n+1,2*i+1)}function IK(e,t,n){let i=e[t];e[t]=e[n],e[n]=i}function Yae(e,t,n,i){let o=e-n,r=t-i;return o*o+r*r}function Um(e){e=g(e,g.EMPTY_OBJECT),this._enabled=g(e.enabled,!1),this._pixelRange=g(e.pixelRange,80),this._minimumClusterSize=g(e.minimumClusterSize,2),this._clusterBillboards=g(e.clusterBillboards,!0),this._clusterLabels=g(e.clusterLabels,!0),this._clusterPoints=g(e.clusterPoints,!0),this._labelCollection=void 0,this._billboardCollection=void 0,this._pointCollection=void 0,this._clusterBillboardCollection=void 0,this._clusterLabelCollection=void 0,this._clusterPointCollection=void 0,this._collectionIndicesByEntity={},this._unusedLabelIndices=[],this._unusedBillboardIndices=[],this._unusedPointIndices=[],this._previousClusters=[],this._previousHeight=void 0,this._enabledDirty=!1,this._clusterDirty=!1,this._cluster=void 0,this._removeEventListener=void 0,this._clusterEvent=new ye,this.show=g(e.show,!0)}function Kae(e,t){e.x-=t,e.y-=t,e.width+=t*2,e.height+=t*2}var JOe=new He;function Hae(e,t,n,i,o){if(d(e._labelCollection)&&i._clusterLabels?o=Jb.getScreenSpaceBoundingBox(e,t,o):d(e._billboardCollection)&&i._clusterBillboards?o=uo.getScreenSpaceBoundingBox(e,t,o):d(e._pointPrimitiveCollection)&&i._clusterPoints&&(o=Xs.getScreenSpaceBoundingBox(e,t,o)),Kae(o,n),i._clusterLabels&&!d(e._labelCollection)&&d(e.id)&&Jae(i,e.id.id)&&d(e.id._label)){let r=i._collectionIndicesByEntity[e.id.id].labelIndex,s=i._labelCollection.get(r),a=Jb.getScreenSpaceBoundingBox(s,t,JOe);Kae(a,n),o=He.union(o,a,o)}return o}function QOe(e,t){if(e.clusterShow=!0,!d(e._labelCollection)&&d(e.id)&&Jae(t,e.id.id)&&d(e.id._label)){let n=t._collectionIndicesByEntity[e.id.id].labelIndex,i=t._labelCollection.get(n);i.clusterShow=!0}}function zae(e,t,n,i){let o={billboard:i._clusterBillboardCollection.add(),label:i._clusterLabelCollection.add(),point:i._clusterPointCollection.add()};o.billboard.show=!1,o.point.show=!1,o.label.show=!0,o.label.text=t.toLocaleString(),o.label.id=n,o.billboard.position=o.label.position=o.point.position=e,i._clusterEvent.raiseEvent(n,o)}function Jae(e,t){return d(e)&&d(e._collectionIndicesByEntity[t])&&d(e._collectionIndicesByEntity[t].labelIndex)}function PK(e,t,n,i,o){if(!d(e))return;let r=e.length;for(let s=0;s<r;++s){let a=e.get(s);if(a.clusterShow=!1,!a.show||o._scene.mode===ie.SCENE3D&&!i.isPointVisible(a.position))continue;let c=o._clusterLabels&&d(a._labelCollection),l=o._clusterBillboards&&d(a.id._billboard),u=o._clusterPoints&&d(a.id._point);if(c&&(u||l))continue;let m=a.computeScreenSpacePosition(n);d(m)&&t.push({index:s,collection:e,clustered:!1,coord:m})}}var jOe=new He,qOe=new He,$Oe=new He;function eKe(e){return function(t){if(d(t)&&t<.05||!e.enabled)return;let n=e._scene,i=e._labelCollection,o=e._billboardCollection,r=e._pointCollection;if(!d(i)&&!d(o)&&!d(r)||!e._clusterBillboards&&!e._clusterLabels&&!e._clusterPoints)return;let s=e._clusterLabelCollection,a=e._clusterBillboardCollection,c=e._clusterPointCollection;d(s)?s.removeAll():s=e._clusterLabelCollection=new qh({scene:n}),d(a)?a.removeAll():a=e._clusterBillboardCollection=new nd({scene:n}),d(c)?c.removeAll():c=e._clusterPointCollection=new WC;let l=e._pixelRange,u=e._minimumClusterSize,m=e._previousClusters,p=[],y=e._previousHeight,f=n.camera.positionCartographic.height,x=n.mapProjection.ellipsoid,_=n.camera.positionWC,C=new l0(x,_),V=[];e._clusterLabels&&PK(i,V,n,C,e),e._clusterBillboards&&PK(o,V,n,C,e),e._clusterPoints&&PK(r,V,n,C,e);let L,Z,G,X,P,v,F,M,b,R,E,I;if(V.length>0){let w=new $W(V.length,64,Uint32Array);for(let N=0;N<V.length;++N)w.add(V[N].coord.x,V[N].coord.y);if(w.finish(),f<y)for(G=m.length,L=0;L<G;++L){let N=m[L];if(!C.isPointVisible(N.position))continue;let B=uo._computeScreenSpacePosition(A.IDENTITY,N.position,h.ZERO,D.ZERO,n);if(!d(B))continue;let k=1-f/y,O=N.width=N.width*k,U=N.height=N.height*k;O=Math.max(O,N.minimumWidth),U=Math.max(U,N.minimumHeight);let J=B.x-O*.5,z=B.y-U*.5,ee=B.x+O,K=B.y+U;for(P=w.range(J,z,ee,K),v=P.length,R=0,b=[],Z=0;Z<v;++Z)F=P[Z],M=V[F],M.clustered||(++R,E=M.collection,I=M.index,b.push(E.get(I).id));if(R>=u)for(zae(N.position,R,b,e),p.push(N),Z=0;Z<v;++Z)V[P[Z]].clustered=!0}for(G=V.length,L=0;L<G;++L){let N=V[L];if(N.clustered)continue;N.clustered=!0,E=N.collection,I=N.index;let B=E.get(I);X=Hae(B,N.coord,l,e,jOe);let k=He.clone(X,qOe);P=w.range(X.x,X.y,X.x+X.width,X.y+X.height),v=P.length;let O=h.clone(B.position);for(R=1,b=[B.id],Z=0;Z<v;++Z)if(F=P[Z],M=V[F],!M.clustered){let U=M.collection.get(M.index),J=Hae(U,M.coord,l,e,$Oe);h.add(U.position,O,O),He.union(k,J,k),++R,b.push(U.id)}if(R>=u){let U=h.multiplyByScalar(O,1/R,O);for(zae(U,R,b,e),p.push({position:U,width:k.width,height:k.height,minimumWidth:X.width,minimumHeight:X.height}),Z=0;Z<v;++Z)V[P[Z]].clustered=!0}else QOe(B,e)}}s.length===0&&(s.destroy(),e._clusterLabelCollection=void 0),a.length===0&&(a.destroy(),e._clusterBillboardCollection=void 0),c.length===0&&(c.destroy(),e._clusterPointCollection=void 0),e._previousClusters=p,e._previousHeight=f}}Um.prototype._initialize=function(e){this._scene=e;let t=eKe(this);this._cluster=t,this._removeEventListener=e.camera.changed.addEventListener(t)};Object.defineProperties(Um.prototype,{enabled:{get:function(){return this._enabled},set:function(e){this._enabledDirty=e!==this._enabled,this._enabled=e}},pixelRange:{get:function(){return this._pixelRange},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._pixelRange,this._pixelRange=e}},minimumClusterSize:{get:function(){return this._minimumClusterSize},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._minimumClusterSize,this._minimumClusterSize=e}},clusterEvent:{get:function(){return this._clusterEvent}},clusterBillboards:{get:function(){return this._clusterBillboards},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._clusterBillboards,this._clusterBillboards=e}},clusterLabels:{get:function(){return this._clusterLabels},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._clusterLabels,this._clusterLabels=e}},clusterPoints:{get:function(){return this._clusterPoints},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._clusterPoints,this._clusterPoints=e}}});function wK(e,t,n,i){return function(o){let r=this[e];d(this._collectionIndicesByEntity)||(this._collectionIndicesByEntity={});let s=this._collectionIndicesByEntity[o.id];if(d(s)||(s=this._collectionIndicesByEntity[o.id]={billboardIndex:void 0,labelIndex:void 0,pointIndex:void 0}),d(r)&&d(s[i]))return r.get(s[i]);d(r)||(r=this[e]=new t({scene:this._scene}));let a,c,l=this[n];l.length>0?(a=l.shift(),c=r.get(a)):(c=r.add(),a=r.length-1),s[i]=a;let u=this;return Promise.resolve().then(function(){u._clusterDirty=!0}),c}}function FK(e,t){let n=e._collectionIndicesByEntity[t];!d(n.billboardIndex)&&!d(n.labelIndex)&&!d(n.pointIndex)&&delete e._collectionIndicesByEntity[t]}Um.prototype.getLabel=wK("_labelCollection",qh,"_unusedLabelIndices","labelIndex");Um.prototype.removeLabel=function(e){let t=this._collectionIndicesByEntity&&this._collectionIndicesByEntity[e.id];if(!d(this._labelCollection)||!d(t)||!d(t.labelIndex))return;let n=t.labelIndex;t.labelIndex=void 0,FK(this,e.id);let i=this._labelCollection.get(n);i.show=!1,i.text="",i.id=void 0,this._unusedLabelIndices.push(n),this._clusterDirty=!0};Um.prototype.getBillboard=wK("_billboardCollection",nd,"_unusedBillboardIndices","billboardIndex");Um.prototype.removeBillboard=function(e){let t=this._collectionIndicesByEntity&&this._collectionIndicesByEntity[e.id];if(!d(this._billboardCollection)||!d(t)||!d(t.billboardIndex))return;let n=t.billboardIndex;t.billboardIndex=void 0,FK(this,e.id);let i=this._billboardCollection.get(n);i.id=void 0,i.show=!1,i.image=void 0,this._unusedBillboardIndices.push(n),this._clusterDirty=!0};Um.prototype.getPoint=wK("_pointCollection",WC,"_unusedPointIndices","pointIndex");Um.prototype.removePoint=function(e){let t=this._collectionIndicesByEntity&&this._collectionIndicesByEntity[e.id];if(!d(this._pointCollection)||!d(t)||!d(t.pointIndex))return;let n=t.pointIndex;t.pointIndex=void 0,FK(this,e.id);let i=this._pointCollection.get(n);i.show=!1,i.id=void 0,this._unusedPointIndices.push(n),this._clusterDirty=!0};function vK(e){if(!d(e))return;let t=e.length;for(let n=0;n<t;++n)e.get(n).clusterShow=!0}function tKe(e){e.enabled||(d(e._clusterLabelCollection)&&e._clusterLabelCollection.destroy(),d(e._clusterBillboardCollection)&&e._clusterBillboardCollection.destroy(),d(e._clusterPointCollection)&&e._clusterPointCollection.destroy(),e._clusterLabelCollection=void 0,e._clusterBillboardCollection=void 0,e._clusterPointCollection=void 0,vK(e._labelCollection),vK(e._billboardCollection),vK(e._pointCollection))}Um.prototype.update=function(e){if(!this.show)return;let t;d(this._labelCollection)&&this._labelCollection.length>0&&this._labelCollection.get(0)._glyphs.length===0&&(t=e.commandList,e.commandList=[],this._labelCollection.update(e),e.commandList=t),d(this._billboardCollection)&&this._billboardCollection.length>0&&!d(this._billboardCollection.get(0).width)&&(t=e.commandList,e.commandList=[],this._billboardCollection.update(e),e.commandList=t),this._enabledDirty&&(this._enabledDirty=!1,tKe(this),this._clusterDirty=!0),this._clusterDirty&&(this._clusterDirty=!1,this._cluster()),d(this._clusterLabelCollection)&&this._clusterLabelCollection.update(e),d(this._clusterBillboardCollection)&&this._clusterBillboardCollection.update(e),d(this._clusterPointCollection)&&this._clusterPointCollection.update(e),d(this._labelCollection)&&this._labelCollection.update(e),d(this._billboardCollection)&&this._billboardCollection.update(e),d(this._pointCollection)&&this._pointCollection.update(e)};Um.prototype.destroy=function(){this._labelCollection=this._labelCollection&&this._labelCollection.destroy(),this._billboardCollection=this._billboardCollection&&this._billboardCollection.destroy(),this._pointCollection=this._pointCollection&&this._pointCollection.destroy(),this._clusterLabelCollection=this._clusterLabelCollection&&this._clusterLabelCollection.destroy(),this._clusterBillboardCollection=this._clusterBillboardCollection&&this._clusterBillboardCollection.destroy(),this._clusterPointCollection=this._clusterPointCollection&&this._clusterPointCollection.destroy(),d(this._removeEventListener)&&(this._removeEventListener(),this._removeEventListener=void 0),this._labelCollection=void 0,this._billboardCollection=void 0,this._pointCollection=void 0,this._clusterBillboardCollection=void 0,this._clusterLabelCollection=void 0,this._clusterPointCollection=void 0,this._collectionIndicesByEntity=void 0,this._unusedLabelIndices=[],this._unusedBillboardIndices=[],this._unusedPointIndices=[],this._previousClusters=[],this._previousHeight=void 0,this._enabledDirty=!1,this._pixelRangeDirty=!1,this._minimumClusterSizeDirty=!1};var rd=Um;function AK(e){this._name=e,this._clock=void 0,this._changed=new ye,this._error=new ye,this._isLoading=!1,this._loading=new ye,this._entityCollection=new Es(this),this._entityCluster=new rd}Object.defineProperties(AK.prototype,{name:{get:function(){return this._name},set:function(e){this._name!==e&&(this._name=e,this._changed.raiseEvent(this))}},clock:{get:function(){return this._clock},set:function(e){this._clock!==e&&(this._clock=e,this._changed.raiseEvent(this))}},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading},set:function(e){Rr.setLoading(this,e)}},changedEvent:{get:function(){return this._changed}},errorEvent:{get:function(){return this._error}},loadingEvent:{get:function(){return this._loading}},show:{get:function(){return this._entityCollection.show},set:function(e){this._entityCollection.show=e}},clustering:{get:function(){return this._entityCluster},set:function(e){this._entityCluster=e}}});AK.prototype.update=function(e){return!0};var e2=AK;var ONn=T(S(),1);var cNn=T(S(),1);var OMn=T(S(),1);var Qae={};Qae.computePositions=function(e,t,n,i,o){let r=e*.5,s=-r,a=i+i,c=o?2*a:a,l=new Float64Array(c*3),u,m=0,p=0,y=o?a*3:0,f=o?(a+i)*3:i*3;for(u=0;u<i;u++){let x=u/i*W.TWO_PI,_=Math.cos(x),C=Math.sin(x),V=_*n,L=C*n,Z=_*t,G=C*t;l[p+y]=V,l[p+y+1]=L,l[p+y+2]=s,l[p+f]=Z,l[p+f+1]=G,l[p+f+2]=r,p+=3,o&&(l[m++]=V,l[m++]=L,l[m++]=s,l[m++]=Z,l[m++]=G,l[m++]=r)}return l};var h_=Qae;var MK=new D,nKe=new h,iKe=new h,oKe=new h,rKe=new h;function d0(e){e=g(e,g.EMPTY_OBJECT);let t=e.length,n=e.topRadius,i=e.bottomRadius,o=g(e.vertexFormat,We.DEFAULT),r=g(e.slices,128);this._length=t,this._topRadius=n,this._bottomRadius=i,this._vertexFormat=We.clone(o),this._slices=r,this._offsetAttribute=e.offsetAttribute,this._workerName="createCylinderGeometry"}d0.packedLength=We.packedLength+5;d0.pack=function(e,t,n){return n=g(n,0),We.pack(e._vertexFormat,t,n),n+=We.packedLength,t[n++]=e._length,t[n++]=e._topRadius,t[n++]=e._bottomRadius,t[n++]=e._slices,t[n]=g(e._offsetAttribute,-1),t};var jae=new We,PC={vertexFormat:jae,length:void 0,topRadius:void 0,bottomRadius:void 0,slices:void 0,offsetAttribute:void 0};d0.unpack=function(e,t,n){t=g(t,0);let i=We.unpack(e,t,jae);t+=We.packedLength;let o=e[t++],r=e[t++],s=e[t++],a=e[t++],c=e[t];return d(n)?(n._vertexFormat=We.clone(i,n._vertexFormat),n._length=o,n._topRadius=r,n._bottomRadius=s,n._slices=a,n._offsetAttribute=c===-1?void 0:c,n):(PC.length=o,PC.topRadius=r,PC.bottomRadius=s,PC.slices=a,PC.offsetAttribute=c===-1?void 0:c,new d0(PC))};d0.createGeometry=function(e){let t=e._length,n=e._topRadius,i=e._bottomRadius,o=e._vertexFormat,r=e._slices;if(t<=0||n<0||i<0||n===0&&i===0)return;let s=r+r,a=r+s,c=s+s,l=h_.computePositions(t,n,i,r,!0),u=o.st?new Float32Array(c*2):void 0,m=o.normal?new Float32Array(c*3):void 0,p=o.tangent?new Float32Array(c*3):void 0,y=o.bitangent?new Float32Array(c*3):void 0,f,x=o.normal||o.tangent||o.bitangent;if(x){let P=o.tangent||o.bitangent,v=0,F=0,M=0,b=Math.atan2(i-n,t),R=nKe;R.z=Math.sin(b);let E=Math.cos(b),I=oKe,w=iKe;for(f=0;f<r;f++){let N=f/r*W.TWO_PI,B=E*Math.cos(N),k=E*Math.sin(N);x&&(R.x=B,R.y=k,P&&(I=h.normalize(h.cross(h.UNIT_Z,R,I),I)),o.normal&&(m[v++]=R.x,m[v++]=R.y,m[v++]=R.z,m[v++]=R.x,m[v++]=R.y,m[v++]=R.z),o.tangent&&(p[F++]=I.x,p[F++]=I.y,p[F++]=I.z,p[F++]=I.x,p[F++]=I.y,p[F++]=I.z),o.bitangent&&(w=h.normalize(h.cross(R,I,w),w),y[M++]=w.x,y[M++]=w.y,y[M++]=w.z,y[M++]=w.x,y[M++]=w.y,y[M++]=w.z))}for(f=0;f<r;f++)o.normal&&(m[v++]=0,m[v++]=0,m[v++]=-1),o.tangent&&(p[F++]=1,p[F++]=0,p[F++]=0),o.bitangent&&(y[M++]=0,y[M++]=-1,y[M++]=0);for(f=0;f<r;f++)o.normal&&(m[v++]=0,m[v++]=0,m[v++]=1),o.tangent&&(p[F++]=1,p[F++]=0,p[F++]=0),o.bitangent&&(y[M++]=0,y[M++]=1,y[M++]=0)}let _=12*r-12,C=Ue.createTypedArray(c,_),V=0,L=0;for(f=0;f<r-1;f++)C[V++]=L,C[V++]=L+2,C[V++]=L+3,C[V++]=L,C[V++]=L+3,C[V++]=L+1,L+=2;for(C[V++]=s-2,C[V++]=0,C[V++]=1,C[V++]=s-2,C[V++]=1,C[V++]=s-1,f=1;f<r-1;f++)C[V++]=s+f+1,C[V++]=s+f,C[V++]=s;for(f=1;f<r-1;f++)C[V++]=a,C[V++]=a+f,C[V++]=a+f+1;let Z=0;if(o.st){let P=Math.max(n,i);for(f=0;f<c;f++){let v=h.fromArray(l,f*3,rKe);u[Z++]=(v.x+P)/(2*P),u[Z++]=(v.y+P)/(2*P)}}let G=new hn;o.position&&(G.position=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:l})),o.normal&&(G.normal=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:m})),o.tangent&&(G.tangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:p})),o.bitangent&&(G.bitangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:y})),o.st&&(G.st=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:u})),MK.x=t*.5,MK.y=Math.max(i,n);let X=new ce(h.ZERO,D.magnitude(MK));if(d(e._offsetAttribute)){t=l.length;let P=e._offsetAttribute===on.NONE?0:1,v=new Uint8Array(t/3).fill(P);G.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:v})}return new dt({attributes:G,indices:C,primitiveType:Fe.TRIANGLES,boundingSphere:X,offsetAttribute:e._offsetAttribute})};var NK;d0.getUnitCylinder=function(){return d(NK)||(NK=d0.createGeometry(new d0({topRadius:1,bottomRadius:1,length:1,vertexFormat:We.POSITION_ONLY}))),NK};var t2=d0;var CNn=T(S(),1);var UK=new D;function vC(e){e=g(e,g.EMPTY_OBJECT);let t=e.length,n=e.topRadius,i=e.bottomRadius,o=g(e.slices,128),r=Math.max(g(e.numberOfVerticalLines,16),0);this._length=t,this._topRadius=n,this._bottomRadius=i,this._slices=o,this._numberOfVerticalLines=r,this._offsetAttribute=e.offsetAttribute,this._workerName="createCylinderOutlineGeometry"}vC.packedLength=6;vC.pack=function(e,t,n){return n=g(n,0),t[n++]=e._length,t[n++]=e._topRadius,t[n++]=e._bottomRadius,t[n++]=e._slices,t[n++]=e._numberOfVerticalLines,t[n]=g(e._offsetAttribute,-1),t};var f_={length:void 0,topRadius:void 0,bottomRadius:void 0,slices:void 0,numberOfVerticalLines:void 0,offsetAttribute:void 0};vC.unpack=function(e,t,n){t=g(t,0);let i=e[t++],o=e[t++],r=e[t++],s=e[t++],a=e[t++],c=e[t];return d(n)?(n._length=i,n._topRadius=o,n._bottomRadius=r,n._slices=s,n._numberOfVerticalLines=a,n._offsetAttribute=c===-1?void 0:c,n):(f_.length=i,f_.topRadius=o,f_.bottomRadius=r,f_.slices=s,f_.numberOfVerticalLines=a,f_.offsetAttribute=c===-1?void 0:c,new vC(f_))};vC.createGeometry=function(e){let t=e._length,n=e._topRadius,i=e._bottomRadius,o=e._slices,r=e._numberOfVerticalLines;if(t<=0||n<0||i<0||n===0&&i===0)return;let s=o*2,a=h_.computePositions(t,n,i,o,!1),c=o*2,l;if(r>0){let x=Math.min(r,o);l=Math.round(o/x),c+=x}let u=Ue.createTypedArray(s,c*2),m=0,p;for(p=0;p<o-1;p++)u[m++]=p,u[m++]=p+1,u[m++]=p+o,u[m++]=p+1+o;if(u[m++]=o-1,u[m++]=0,u[m++]=o+o-1,u[m++]=o,r>0)for(p=0;p<o;p+=l)u[m++]=p,u[m++]=p+o;let y=new hn;y.position=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:a}),UK.x=t*.5,UK.y=Math.max(i,n);let f=new ce(h.ZERO,D.magnitude(UK));if(d(e._offsetAttribute)){t=a.length;let x=e._offsetAttribute===on.NONE?0:1,_=new Uint8Array(t/3).fill(x);y.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:_})}return new dt({attributes:y,indices:u,primitiveType:Fe.LINES,boundingSphere:f,offsetAttribute:e._offsetAttribute})};var n2=vC;var qae=h.ZERO,$ae=new h,sKe=new h,ece=new Y;function aKe(e){this.id=e,this.vertexFormat=void 0,this.length=void 0,this.topRadius=void 0,this.bottomRadius=void 0,this.slices=void 0,this.numberOfVerticalLines=void 0,this.offsetAttribute=void 0}function sd(e,t){ii.call(this,{entity:e,scene:t,geometryOptions:new aKe(e),geometryPropertyName:"cylinder",observedPropertyNames:["availability","position","orientation","cylinder"]}),this._onEntityPropertyChanged(e,"cylinder",e.cylinder,void 0)}d(Object.create)&&(sd.prototype=Object.create(ii.prototype),sd.prototype.constructor=sd);Object.defineProperties(sd.prototype,{terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});sd.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=new gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),o=this._distanceDisplayConditionProperty.getValue(e),r=Un.fromDistanceDisplayCondition(o),s={show:i,distanceDisplayCondition:r,color:void 0,offset:void 0};if(this._materialProperty instanceof At){let a;d(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(a=this._materialProperty.color.getValue(e,ece)),d(a)||(a=Y.WHITE),s.color=Ut.fromColor(a)}return d(this._options.offsetAttribute)&&(s.offset=zi.fromCartesian3(H.getValueOrDefault(this._terrainOffsetProperty,e,qae,$ae))),new _t({id:t,geometry:new t2(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.cylinder.heightReference,this._options.length*.5,this._scene.mapProjection.ellipsoid),attributes:s})};sd.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=H.getValueOrDefault(this._outlineColorProperty,e,Y.BLACK,ece),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Ut.fromColor(i),distanceDisplayCondition:Un.fromDistanceDisplayCondition(o),offset:void 0};return d(this._options.offsetAttribute)&&(r.offset=zi.fromCartesian3(H.getValueOrDefault(this._terrainOffsetProperty,e,qae,$ae))),new _t({id:t,geometry:new n2(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.cylinder.heightReference,this._options.length*.5,this._scene.mapProjection.ellipsoid),attributes:r})};sd.prototype._computeCenter=function(e,t){return H.getValueOrUndefined(this._entity.position,e,t)};sd.prototype._isHidden=function(e,t){return!d(e.position)||!d(t.length)||!d(t.topRadius)||!d(t.bottomRadius)||ii.prototype._isHidden.call(this,e,t)};sd.prototype._isDynamic=function(e,t){return!e.position.isConstant||!H.isConstant(e.orientation)||!t.length.isConstant||!t.topRadius.isConstant||!t.bottomRadius.isConstant||!H.isConstant(t.slices)||!H.isConstant(t.outlineWidth)||!H.isConstant(t.numberOfVerticalLines)};sd.prototype._setStaticOptions=function(e,t){let n=H.getValueOrDefault(t.heightReference,Be.MINIMUM_VALUE,Oe.NONE),i=this._options;i.vertexFormat=this._materialProperty instanceof At?rn.VERTEX_FORMAT:so.MaterialSupport.TEXTURED.vertexFormat,i.length=t.length.getValue(Be.MINIMUM_VALUE),i.topRadius=t.topRadius.getValue(Be.MINIMUM_VALUE),i.bottomRadius=t.bottomRadius.getValue(Be.MINIMUM_VALUE),i.slices=H.getValueOrUndefined(t.slices,Be.MINIMUM_VALUE),i.numberOfVerticalLines=H.getValueOrUndefined(t.numberOfVerticalLines,Be.MINIMUM_VALUE),i.offsetAttribute=n!==Oe.NONE?on.ALL:void 0};sd.prototype._onEntityPropertyChanged=hp;sd.DynamicGeometryUpdater=wC;function wC(e,t,n){ni.call(this,e,t,n)}d(Object.create)&&(wC.prototype=Object.create(ni.prototype),wC.prototype.constructor=wC);wC.prototype._isHidden=function(e,t,n){let i=this._options,o=H.getValueOrUndefined(e.position,n,sKe);return!d(o)||!d(i.length)||!d(i.topRadius)||!d(i.bottomRadius)||ni.prototype._isHidden.call(this,e,t,n)};wC.prototype._setOptions=function(e,t,n){let i=H.getValueOrDefault(t.heightReference,n,Oe.NONE),o=this._options;o.length=H.getValueOrUndefined(t.length,n),o.topRadius=H.getValueOrUndefined(t.topRadius,n),o.bottomRadius=H.getValueOrUndefined(t.bottomRadius,n),o.slices=H.getValueOrUndefined(t.slices,n),o.numberOfVerticalLines=H.getValueOrUndefined(t.numberOfVerticalLines,n),o.offsetAttribute=i!==Oe.NONE?on.ALL:void 0};var i2=sd;var MBn=T(S(),1);var HNn=T(S(),1),cKe={UNBOUNDED:0,CLAMPED:1,LOOP_STOP:2},Gr=Object.freeze(cKe);var JNn=T(S(),1),lKe={TICK_DEPENDENT:0,SYSTEM_CLOCK_MULTIPLIER:1,SYSTEM_CLOCK:2},mo=Object.freeze(lKe);var jNn=T(S(),1),dKe={NONE:0,HOLD:1,EXTRAPOLATE:2},ad=Object.freeze(dKe);var $Nn=T(S(),1),tce=T(Bl(),1);function uKe(e){let t=new tce.default(e);t.normalize();let n=t.path(),i=n.lastIndexOf("/");return i!==-1&&(n=n.substr(i+1)),n}var u0=uKe;var o5n=T(S(),1);var mKe=W.factorial;function kK(e,t,n,i,o,r){let s=0,a,c,l;if(i>0){for(c=0;c<o;c++){for(a=!1,l=0;l<r.length&&!a;l++)c===r[l]&&(a=!0);a||(r.push(c),s+=kK(e,t,n,i-1,o,r),r.splice(r.length-1,1))}return s}for(s=1,c=0;c<o;c++){for(a=!1,l=0;l<r.length&&!a;l++)c===r[l]&&(a=!0);a||(s*=e-n[t[c]])}return s}var UN={type:"Hermite"};UN.getRequiredDataPoints=function(e,t){return t=g(t,0),Math.max(Math.floor((e+1)/(t+1)),2)};UN.interpolateOrderZero=function(e,t,n,i,o){d(o)||(o=new Array(i));let r,s,a,c,l,u,m=t.length,p=new Array(i);for(r=0;r<i;r++){o[r]=0;let _=new Array(m);for(p[r]=_,s=0;s<m;s++)_[s]=[]}let y=m,f=new Array(y);for(r=0;r<y;r++)f[r]=r;let x=m-1;for(c=0;c<i;c++){for(s=0;s<y;s++)u=f[s]*i+c,p[c][0].push(n[u]);for(r=1;r<y;r++){let _=!1;for(s=0;s<y-r;s++){let C=t[f[s]],V=t[f[s+r]],L;V-C<=0?(u=f[s]*i+i*r+c,L=n[u],p[c][r].push(L/mKe(r))):(L=p[c][r-1][s+1]-p[c][r-1][s],p[c][r].push(L/(V-C))),_=_||L!==0}_||(x=r-1)}}for(a=0,l=0;a<=l;a++)for(r=a;r<=x;r++){let _=kK(e,f,t,a,r,[]);for(c=0;c<i;c++){let C=p[c][r][0];o[c+a*i]+=C*_}}return o};var hKe=[];UN.interpolate=function(e,t,n,i,o,r,s){let a=i*(r+1);d(s)||(s=new Array(a));for(let C=0;C<a;C++)s[C]=0;let c=t.length,l=new Array(c*(o+1)),u;for(u=0;u<c;u++)for(let C=0;C<o+1;C++)l[u*(o+1)+C]=u;let m=l.length,p=hKe,y=fKe(p,l,t,n,i,o),f=[],x=m*(m+1)/2,_=Math.min(y,r);for(let C=0;C<=_;C++)for(u=C;u<=y;u++){f.length=0;let V=kK(e,l,t,C,u,f),L=Math.floor(u*(1-u)/2)+m*u;for(let Z=0;Z<i;Z++){let G=Math.floor(Z*x),X=p[G+L];s[Z+C*i]+=X*V}}return s};function fKe(e,t,n,i,o,r){let s,a,c=-1,l=t.length,u=l*(l+1)/2;for(let m=0;m<o;m++){let p=Math.floor(m*u);for(s=0;s<l;s++)a=t[s]*o*(r+1)+m,e[p+s]=i[a];for(let y=1;y<l;y++){let f=0,x=Math.floor(y*(1-y)/2)+l*y,_=!1;for(s=0;s<l-y;s++){let C=n[t[s]],V=n[t[s+y]],L,Z;if(V-C<=0)a=t[s]*o*(r+1)+o*y+m,L=i[a],Z=L/W.factorial(y),e[p+x+f]=Z,f++;else{let G=Math.floor((y-1)*(2-y)/2)+l*(y-1);L=e[p+G+s+1]-e[p+G+s],Z=L/(V-C),e[p+x+f]=Z,f++}_=_||L!==0}_&&(c=Math.max(c,y))}}return c}var o2=UN;var a5n=T(S(),1);var DK={type:"Lagrange"};DK.getRequiredDataPoints=function(e){return Math.max(e+1,2)};DK.interpolateOrderZero=function(e,t,n,i,o){d(o)||(o=new Array(i));let r,s,a=t.length;for(r=0;r<i;r++)o[r]=0;for(r=0;r<a;r++){let c=1;for(s=0;s<a;s++)if(s!==r){let l=t[r]-t[s];c*=(e-t[s])/l}for(s=0;s<i;s++)o[s]+=c*n[r*i+s]}return o};var r2=DK;var d5n=T(S(),1);var BK={type:"Linear"};BK.getRequiredDataPoints=function(e){return 2};BK.interpolateOrderZero=function(e,t,n,i,o){d(o)||(o=new Array(i));let r,s,a,c=t[0],l=t[1];for(r=0;r<i;r++)s=n[r],a=n[r+i],o[r]=((a-s)*e+l*s-c*a)/(l-c);return o};var p_=BK;var f5n=T(S(),1);function ec(e,t,n){this.clock=g(e,0),this.cone=g(t,0),this.magnitude=g(n,1)}ec.fromCartesian3=function(e,t){let n=e.x,i=e.y,o=e.z,r=n*n+i*i;return d(t)||(t=new ec),t.clock=Math.atan2(i,n),t.cone=Math.atan2(Math.sqrt(r),o),t.magnitude=Math.sqrt(r+o*o),t};ec.clone=function(e,t){if(d(e))return d(t)?(t.clock=e.clock,t.cone=e.cone,t.magnitude=e.magnitude,t):new ec(e.clock,e.cone,e.magnitude)};ec.normalize=function(e,t){return d(t)?(t.clock=e.clock,t.cone=e.cone,t.magnitude=1,t):new ec(e.clock,e.cone,1)};ec.equals=function(e,t){return e===t||d(e)&&d(t)&&e.clock===t.clock&&e.cone===t.cone&&e.magnitude===t.magnitude};ec.equalsEpsilon=function(e,t,n){return n=g(n,0),e===t||d(e)&&d(t)&&Math.abs(e.clock-t.clock)<=n&&Math.abs(e.cone-t.cone)<=n&&Math.abs(e.magnitude-t.magnitude)<=n};ec.prototype.equals=function(e){return ec.equals(this,e)};ec.prototype.clone=function(e){return ec.clone(this,e)};ec.prototype.equalsEpsilon=function(e,t){return ec.equalsEpsilon(this,e,t)};ec.prototype.toString=function(){return`(${this.clock}, ${this.cone}, ${this.magnitude})`};var s2=ec;var u2=T(Bl(),1);var P5n=T(S(),1);var L5n=T(S(),1);var b5n=T(S(),1),YK;typeof performance<"u"&&typeof performance.now=="function"&&isFinite(performance.now())?YK=function(){return performance.now()}:YK=function(){return Date.now()};var gi=YK;function OK(e){e=g(e,g.EMPTY_OBJECT);let t=e.currentTime,n=e.startTime,i=e.stopTime;d(t)?t=te.clone(t):d(n)?t=te.clone(n):d(i)?t=te.addDays(i,-1,new te):t=te.now(),d(n)?n=te.clone(n):n=te.clone(t),d(i)?i=te.clone(i):i=te.addDays(n,1,new te),this.startTime=n,this.stopTime=i,this.clockRange=g(e.clockRange,Gr.UNBOUNDED),this.canAnimate=g(e.canAnimate,!0),this.onTick=new ye,this.onStop=new ye,this._currentTime=void 0,this._multiplier=void 0,this._clockStep=void 0,this._shouldAnimate=void 0,this._lastSystemTime=gi(),this.currentTime=t,this.multiplier=g(e.multiplier,1),this.shouldAnimate=g(e.shouldAnimate,!1),this.clockStep=g(e.clockStep,mo.SYSTEM_CLOCK_MULTIPLIER)}Object.defineProperties(OK.prototype,{currentTime:{get:function(){return this._currentTime},set:function(e){te.equals(this._currentTime,e)||(this._clockStep===mo.SYSTEM_CLOCK&&(this._clockStep=mo.SYSTEM_CLOCK_MULTIPLIER),this._currentTime=e)}},multiplier:{get:function(){return this._multiplier},set:function(e){this._multiplier!==e&&(this._clockStep===mo.SYSTEM_CLOCK&&(this._clockStep=mo.SYSTEM_CLOCK_MULTIPLIER),this._multiplier=e)}},clockStep:{get:function(){return this._clockStep},set:function(e){e===mo.SYSTEM_CLOCK&&(this._multiplier=1,this._shouldAnimate=!0,this._currentTime=te.now()),this._clockStep=e}},shouldAnimate:{get:function(){return this._shouldAnimate},set:function(e){this._shouldAnimate!==e&&(this._clockStep===mo.SYSTEM_CLOCK&&(this._clockStep=mo.SYSTEM_CLOCK_MULTIPLIER),this._shouldAnimate=e)}}});OK.prototype.tick=function(){let e=gi(),t=te.clone(this._currentTime);if(this.canAnimate&&this._shouldAnimate){let n=this._clockStep;if(n===mo.SYSTEM_CLOCK)t=te.now(t);else{let i=this._multiplier;if(n===mo.TICK_DEPENDENT)t=te.addSeconds(t,i,t);else{let a=e-this._lastSystemTime;t=te.addSeconds(t,i*(a/1e3),t)}let o=this.clockRange,r=this.startTime,s=this.stopTime;if(o===Gr.CLAMPED)te.lessThan(t,r)?t=te.clone(r,t):te.greaterThan(t,s)&&(t=te.clone(s,t),this.onStop.raiseEvent(this));else if(o===Gr.LOOP_STOP)for(te.lessThan(t,r)&&(t=te.clone(r,t));te.greaterThan(t,s);)t=te.addSeconds(r,te.secondsDifference(t,s),t),this.onStop.raiseEvent(this)}}return this._currentTime=t,this._lastSystemTime=e,this.onTick.raiseEvent(this),t};var km=OK;function b_(){this._definitionChanged=new ye,this._startTime=void 0,this._stopTime=void 0,this._currentTime=void 0,this._clockRange=void 0,this._clockStep=void 0,this._multiplier=void 0}Object.defineProperties(b_.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},startTime:ll("startTime"),stopTime:ll("stopTime"),currentTime:ll("currentTime"),clockRange:ll("clockRange"),clockStep:ll("clockStep"),multiplier:ll("multiplier")});b_.prototype.clone=function(e){return d(e)||(e=new b_),e.startTime=this.startTime,e.stopTime=this.stopTime,e.currentTime=this.currentTime,e.clockRange=this.clockRange,e.clockStep=this.clockStep,e.multiplier=this.multiplier,e};b_.prototype.equals=function(e){return this===e||d(e)&&te.equals(this.startTime,e.startTime)&&te.equals(this.stopTime,e.stopTime)&&te.equals(this.currentTime,e.currentTime)&&this.clockRange===e.clockRange&&this.clockStep===e.clockStep&&this.multiplier===e.multiplier};b_.prototype.merge=function(e){this.startTime=g(this.startTime,e.startTime),this.stopTime=g(this.stopTime,e.stopTime),this.currentTime=g(this.currentTime,e.currentTime),this.clockRange=g(this.clockRange,e.clockRange),this.clockStep=g(this.clockStep,e.clockStep),this.multiplier=g(this.multiplier,e.multiplier)};b_.prototype.getValue=function(e){return d(e)||(e=new km),e.startTime=g(this.startTime,e.startTime),e.stopTime=g(this.stopTime,e.stopTime),e.currentTime=g(this.currentTime,e.currentTime),e.clockRange=g(this.clockRange,e.clockRange),e.multiplier=g(this.multiplier,e.multiplier),e.clockStep=g(this.clockStep,e.clockStep),e};var Dm=b_;var D5n=T(S(),1);var pKe=Y.WHITE,bKe=.1,yKe=new D(8,8),gKe=new D(0,0),xKe=new D(1,1);function FC(e){e=g(e,g.EMPTY_OBJECT),this._definitionChanged=new ye,this._color=void 0,this._colorSubscription=void 0,this._cellAlpha=void 0,this._cellAlphaSubscription=void 0,this._lineCount=void 0,this._lineCountSubscription=void 0,this._lineThickness=void 0,this._lineThicknessSubscription=void 0,this._lineOffset=void 0,this._lineOffsetSubscription=void 0,this.color=e.color,this.cellAlpha=e.cellAlpha,this.lineCount=e.lineCount,this.lineThickness=e.lineThickness,this.lineOffset=e.lineOffset}Object.defineProperties(FC.prototype,{isConstant:{get:function(){return H.isConstant(this._color)&&H.isConstant(this._cellAlpha)&&H.isConstant(this._lineCount)&&H.isConstant(this._lineThickness)&&H.isConstant(this._lineOffset)}},definitionChanged:{get:function(){return this._definitionChanged}},color:le("color"),cellAlpha:le("cellAlpha"),lineCount:le("lineCount"),lineThickness:le("lineThickness"),lineOffset:le("lineOffset")});FC.prototype.getType=function(e){return"Grid"};FC.prototype.getValue=function(e,t){return d(t)||(t={}),t.color=H.getValueOrClonedDefault(this._color,e,pKe,t.color),t.cellAlpha=H.getValueOrDefault(this._cellAlpha,e,bKe),t.lineCount=H.getValueOrClonedDefault(this._lineCount,e,yKe,t.lineCount),t.lineThickness=H.getValueOrClonedDefault(this._lineThickness,e,xKe,t.lineThickness),t.lineOffset=H.getValueOrClonedDefault(this._lineOffset,e,gKe,t.lineOffset),t};FC.prototype.equals=function(e){return this===e||e instanceof FC&&H.equals(this._color,e._color)&&H.equals(this._cellAlpha,e._cellAlpha)&&H.equals(this._lineCount,e._lineCount)&&H.equals(this._lineThickness,e._lineThickness)&&H.equals(this._lineOffset,e._lineOffset)};var AC=FC;var J5n=T(S(),1);function MC(e){this._definitionChanged=new ye,this._color=void 0,this._colorSubscription=void 0,this.color=e}Object.defineProperties(MC.prototype,{isConstant:{get:function(){return H.isConstant(this._color)}},definitionChanged:{get:function(){return this._definitionChanged}},color:le("color")});MC.prototype.getType=function(e){return"PolylineArrow"};MC.prototype.getValue=function(e,t){return d(t)||(t={}),t.color=H.getValueOrClonedDefault(this._color,e,Y.WHITE,t.color),t};MC.prototype.equals=function(e){return this===e||e instanceof MC&&H.equals(this._color,e._color)};var NC=MC;var iUn=T(S(),1);var _Ke=Y.WHITE,TKe=Y.TRANSPARENT,SKe=16,CKe=255;function UC(e){e=g(e,g.EMPTY_OBJECT),this._definitionChanged=new ye,this._color=void 0,this._colorSubscription=void 0,this._gapColor=void 0,this._gapColorSubscription=void 0,this._dashLength=void 0,this._dashLengthSubscription=void 0,this._dashPattern=void 0,this._dashPatternSubscription=void 0,this.color=e.color,this.gapColor=e.gapColor,this.dashLength=e.dashLength,this.dashPattern=e.dashPattern}Object.defineProperties(UC.prototype,{isConstant:{get:function(){return H.isConstant(this._color)&&H.isConstant(this._gapColor)&&H.isConstant(this._dashLength)&&H.isConstant(this._dashPattern)}},definitionChanged:{get:function(){return this._definitionChanged}},color:le("color"),gapColor:le("gapColor"),dashLength:le("dashLength"),dashPattern:le("dashPattern")});UC.prototype.getType=function(e){return"PolylineDash"};UC.prototype.getValue=function(e,t){return d(t)||(t={}),t.color=H.getValueOrClonedDefault(this._color,e,_Ke,t.color),t.gapColor=H.getValueOrClonedDefault(this._gapColor,e,TKe,t.gapColor),t.dashLength=H.getValueOrDefault(this._dashLength,e,SKe,t.dashLength),t.dashPattern=H.getValueOrDefault(this._dashPattern,e,CKe,t.dashPattern),t};UC.prototype.equals=function(e){return this===e||e instanceof UC&&H.equals(this._color,e._color)&&H.equals(this._gapColor,e._gapColor)&&H.equals(this._dashLength,e._dashLength)&&H.equals(this._dashPattern,e._dashPattern)};var kC=UC;var uUn=T(S(),1);var VKe=Y.WHITE,LKe=.25,RKe=1;function DC(e){e=g(e,g.EMPTY_OBJECT),this._definitionChanged=new ye,this._color=void 0,this._colorSubscription=void 0,this._glowPower=void 0,this._glowPowerSubscription=void 0,this._taperPower=void 0,this._taperPowerSubscription=void 0,this.color=e.color,this.glowPower=e.glowPower,this.taperPower=e.taperPower}Object.defineProperties(DC.prototype,{isConstant:{get:function(){return H.isConstant(this._color)&&H.isConstant(this._glow)}},definitionChanged:{get:function(){return this._definitionChanged}},color:le("color"),glowPower:le("glowPower"),taperPower:le("taperPower")});DC.prototype.getType=function(e){return"PolylineGlow"};DC.prototype.getValue=function(e,t){return d(t)||(t={}),t.color=H.getValueOrClonedDefault(this._color,e,VKe,t.color),t.glowPower=H.getValueOrDefault(this._glowPower,e,LKe,t.glowPower),t.taperPower=H.getValueOrDefault(this._taperPower,e,RKe,t.taperPower),t};DC.prototype.equals=function(e){return this===e||e instanceof DC&&H.equals(this._color,e._color)&&H.equals(this._glowPower,e._glowPower)&&H.equals(this._taperPower,e._taperPower)};var BC=DC;var xUn=T(S(),1);var ZKe=Y.WHITE,GKe=Y.BLACK,EKe=1;function YC(e){e=g(e,g.EMPTY_OBJECT),this._definitionChanged=new ye,this._color=void 0,this._colorSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this.color=e.color,this.outlineColor=e.outlineColor,this.outlineWidth=e.outlineWidth}Object.defineProperties(YC.prototype,{isConstant:{get:function(){return H.isConstant(this._color)&&H.isConstant(this._outlineColor)&&H.isConstant(this._outlineWidth)}},definitionChanged:{get:function(){return this._definitionChanged}},color:le("color"),outlineColor:le("outlineColor"),outlineWidth:le("outlineWidth")});YC.prototype.getType=function(e){return"PolylineOutline"};YC.prototype.getValue=function(e,t){return d(t)||(t={}),t.color=H.getValueOrClonedDefault(this._color,e,ZKe,t.color),t.outlineColor=H.getValueOrClonedDefault(this._outlineColor,e,GKe,t.outlineColor),t.outlineWidth=H.getValueOrDefault(this._outlineWidth,e,EKe),t};YC.prototype.equals=function(e){return this===e||e instanceof YC&&H.equals(this._color,e._color)&&H.equals(this._outlineColor,e._outlineColor)&&H.equals(this._outlineWidth,e._outlineWidth)};var hy=YC;var ZUn=T(S(),1);function m0(e,t){this._value=void 0,this._definitionChanged=new ye,this._eventHelper=new Cr,this._referenceFrame=g(t,io.FIXED),this.setValue(e)}Object.defineProperties(m0.prototype,{isConstant:{get:function(){let e=this._value;if(!d(e))return!0;let t=e.length;for(let n=0;n<t;n++)if(!H.isConstant(e[n]))return!1;return!0}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}}});m0.prototype.getValue=function(e,t){return this.getValueInReferenceFrame(e,io.FIXED,t)};m0.prototype.getValueInReferenceFrame=function(e,t,n){let i=this._value;if(!d(i))return;let o=i.length;d(n)||(n=new Array(o));let r=0,s=0;for(;r<o;){let c=i[r].getValueInReferenceFrame(e,t,n[r]);d(c)&&(n[s]=c,s++),r++}return n.length=s,n};m0.prototype.setValue=function(e){let t=this._eventHelper;if(t.removeAll(),d(e)){this._value=e.slice();let n=e.length;for(let i=0;i<n;i++){let o=e[i];d(o)&&t.add(o.definitionChanged,m0.prototype._raiseDefinitionChanged,this)}}else this._value=void 0;this._definitionChanged.raiseEvent(this)};m0.prototype.equals=function(e){return this===e||e instanceof m0&&this._referenceFrame===e._referenceFrame&&H.arrayEquals(this._value,e._value)};m0.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var h0=m0;var PUn=T(S(),1);function fy(e){this._value=void 0,this._definitionChanged=new ye,this._eventHelper=new Cr,this.setValue(e)}Object.defineProperties(fy.prototype,{isConstant:{get:function(){let e=this._value;if(!d(e))return!0;let t=e.length;for(let n=0;n<t;n++)if(!H.isConstant(e[n]))return!1;return!0}},definitionChanged:{get:function(){return this._definitionChanged}}});fy.prototype.getValue=function(e,t){let n=this._value;if(!d(n))return;let i=n.length;d(t)||(t=new Array(i));let o=0,r=0;for(;o<i;){let a=this._value[o].getValue(e,t[o]);d(a)&&(t[r]=a,r++),o++}return t.length=r,t};fy.prototype.setValue=function(e){let t=this._eventHelper;if(t.removeAll(),d(e)){this._value=e.slice();let n=e.length;for(let i=0;i<n;i++){let o=e[i];d(o)&&t.add(o.definitionChanged,fy.prototype._raiseDefinitionChanged,this)}}else this._value=void 0;this._definitionChanged.raiseEvent(this)};fy.prototype.equals=function(e){return this===e||e instanceof fy&&H.arrayEquals(this._value,e._value)};fy.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var OC=fy;var MUn=T(S(),1);function y_(e){let t=e._targetProperty;if(!d(t)){let n=e._targetEntity;if(!d(n)){if(n=e._targetCollection.getById(e._targetId),!d(n)){e._targetEntity=e._targetProperty=void 0;return}n.definitionChanged.addEventListener(cd.prototype._onTargetEntityDefinitionChanged,e),e._targetEntity=n}let i=e._targetPropertyNames;t=e._targetEntity;for(let o=0,r=i.length;o<r&&d(t);++o)t=t[i[o]];e._targetProperty=t}return t}function cd(e,t,n){this._targetCollection=e,this._targetId=t,this._targetPropertyNames=n,this._targetProperty=void 0,this._targetEntity=void 0,this._definitionChanged=new ye,e.collectionChanged.addEventListener(cd.prototype._onCollectionChanged,this)}Object.defineProperties(cd.prototype,{isConstant:{get:function(){return H.isConstant(y_(this))}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){let e=y_(this);return d(e)?e.referenceFrame:void 0}},targetId:{get:function(){return this._targetId}},targetCollection:{get:function(){return this._targetCollection}},targetPropertyNames:{get:function(){return this._targetPropertyNames}},resolvedProperty:{get:function(){return y_(this)}}});cd.fromString=function(e,t){let n,i=[],o=!0,r=!1,s="";for(let a=0;a<t.length;++a){let c=t.charAt(a);r?(s+=c,r=!1):c==="\\"?r=!0:o&&c==="#"?(n=s,o=!1,s=""):!o&&c==="."?(i.push(s),s=""):s+=c}return i.push(s),new cd(e,n,i)};cd.prototype.getValue=function(e,t){let n=y_(this);return d(n)?n.getValue(e,t):void 0};cd.prototype.getValueInReferenceFrame=function(e,t,n){let i=y_(this);return d(i)?i.getValueInReferenceFrame(e,t,n):void 0};cd.prototype.getType=function(e){let t=y_(this);return d(t)?t.getType(e):void 0};cd.prototype.equals=function(e){if(this===e)return!0;let t=this._targetPropertyNames,n=e._targetPropertyNames;if(this._targetCollection!==e._targetCollection||this._targetId!==e._targetId||t.length!==n.length)return!1;let i=this._targetPropertyNames.length;for(let o=0;o<i;o++)if(t[o]!==n[o])return!1;return!0};cd.prototype._onTargetEntityDefinitionChanged=function(e,t,n,i){d(this._targetProperty)&&this._targetPropertyNames[0]===t&&(this._targetProperty=void 0,this._definitionChanged.raiseEvent(this))};cd.prototype._onCollectionChanged=function(e,t,n){let i=this._targetEntity;d(i)&&n.indexOf(i)!==-1?(i.definitionChanged.removeEventListener(cd.prototype._onTargetEntityDefinitionChanged,this),this._targetEntity=this._targetProperty=void 0):d(i)||(i=y_(this),d(i)&&this._definitionChanged.raiseEvent(this))};var f0=cd;var BUn=T(S(),1);var XKe={packedLength:1,pack:function(e,t,n){return n=g(n,0),t[n]=e,t},unpack:function(e,t,n){return t=g(t,0),e[t]},convertPackedArrayForInterpolation:function(e,t,n,i){d(i)||(i=[]),t=g(t,0),n=g(n,e.length);let o;for(let r=0,s=n-t+1;r<s;r++){let a=e[t+r];r===0||Math.abs(o-a)<Math.PI?i[r]=a:i[r]=a-W.TWO_PI,o=a}},unpackInterpolationResult:function(e,t,n,i,o){return o=e[0],o<0?o+W.TWO_PI:o}},Cu=XKe;var ckn=T(S(),1);var qUn=T(S(),1);var nce={packedLength:1,pack:function(e,t,n){n=g(n,0),t[n]=e},unpack:function(e,t,n){return t=g(t,0),e[t]}};function ice(e,t,n){let i,o=e.length,r=n.length,s=o+r;if(e.length=s,o!==t){let a=o-1;for(i=s-1;i>=t;i--)e[i]=e[a--]}for(i=0;i<r;i++)e[t++]=n[i]}function oce(e,t){return e instanceof te?e:typeof e=="string"?te.fromIso8601(e):te.addSeconds(t,e,new te)}var KK=[],HK=[];function kN(e,t,n,i,o){let r=0,s,a,c,l,u,m;for(;r<i.length;){u=oce(i[r],e),c=Lo(t,u,te.compare);let p=0,y=0;if(c<0){for(c=~c,l=c*o,a=void 0,m=t[c];r<i.length&&(u=oce(i[r],e),!(d(a)&&te.compare(a,u)>=0||d(m)&&te.compare(u,m)>=0));){for(KK[p++]=u,r=r+1,s=0;s<o;s++)HK[y++]=i[r],r=r+1;a=u}p>0&&(HK.length=y,ice(n,l,HK),KK.length=p,ice(t,c,KK))}else{for(s=0;s<o;s++)r++,n[c*o+s]=i[r];r++}}}function Bm(e,t){let n=e;n===Number&&(n=nce);let i=n.packedLength,o=g(n.packedInterpolationLength,i),r=0,s;if(d(t)){let a=t.length;s=new Array(a);for(let c=0;c<a;c++){let l=t[c];l===Number&&(l=nce);let u=l.packedLength;i+=u,o+=g(l.packedInterpolationLength,u),s[c]=l}r=a}this._type=e,this._innerType=n,this._interpolationDegree=1,this._interpolationAlgorithm=p_,this._numberOfPoints=0,this._times=[],this._values=[],this._xTable=[],this._yTable=[],this._packedLength=i,this._packedInterpolationLength=o,this._updateTableLength=!0,this._interpolationResult=new Array(o),this._definitionChanged=new ye,this._derivativeTypes=t,this._innerDerivativeTypes=s,this._inputOrder=r,this._forwardExtrapolationType=ad.NONE,this._forwardExtrapolationDuration=0,this._backwardExtrapolationType=ad.NONE,this._backwardExtrapolationDuration=0}Object.defineProperties(Bm.prototype,{isConstant:{get:function(){return this._values.length===0}},definitionChanged:{get:function(){return this._definitionChanged}},type:{get:function(){return this._type}},derivativeTypes:{get:function(){return this._derivativeTypes}},interpolationDegree:{get:function(){return this._interpolationDegree}},interpolationAlgorithm:{get:function(){return this._interpolationAlgorithm}},forwardExtrapolationType:{get:function(){return this._forwardExtrapolationType},set:function(e){this._forwardExtrapolationType!==e&&(this._forwardExtrapolationType=e,this._definitionChanged.raiseEvent(this))}},forwardExtrapolationDuration:{get:function(){return this._forwardExtrapolationDuration},set:function(e){this._forwardExtrapolationDuration!==e&&(this._forwardExtrapolationDuration=e,this._definitionChanged.raiseEvent(this))}},backwardExtrapolationType:{get:function(){return this._backwardExtrapolationType},set:function(e){this._backwardExtrapolationType!==e&&(this._backwardExtrapolationType=e,this._definitionChanged.raiseEvent(this))}},backwardExtrapolationDuration:{get:function(){return this._backwardExtrapolationDuration},set:function(e){this._backwardExtrapolationDuration!==e&&(this._backwardExtrapolationDuration=e,this._definitionChanged.raiseEvent(this))}}});Bm.prototype.getValue=function(e,t){let n=this._times,i=n.length;if(i===0)return;let o,r=this._innerType,s=this._values,a=Lo(n,e,te.compare);if(a<0){if(a=~a,a===0){let Z=n[a];if(o=this._backwardExtrapolationDuration,this._backwardExtrapolationType===ad.NONE||o!==0&&te.secondsDifference(Z,e)>o)return;if(this._backwardExtrapolationType===ad.HOLD)return r.unpack(s,0,t)}if(a>=i){a=i-1;let Z=n[a];if(o=this._forwardExtrapolationDuration,this._forwardExtrapolationType===ad.NONE||o!==0&&te.secondsDifference(e,Z)>o)return;if(this._forwardExtrapolationType===ad.HOLD)return a=i-1,r.unpack(s,a*r.packedLength,t)}let c=this._xTable,l=this._yTable,u=this._interpolationAlgorithm,m=this._packedInterpolationLength,p=this._inputOrder;if(this._updateTableLength){this._updateTableLength=!1;let Z=Math.min(u.getRequiredDataPoints(this._interpolationDegree,p),i);Z!==this._numberOfPoints&&(this._numberOfPoints=Z,c.length=Z,l.length=Z*m)}let y=this._numberOfPoints-1;if(y<1)return;let f=0,x=i-1;if(x-f+1>=y+1){let Z=a-(y/2|0)-1;Z<f&&(Z=f);let G=Z+y;G>x&&(G=x,Z=G-y,Z<f&&(Z=f)),f=Z,x=G}let C=x-f+1;for(let Z=0;Z<C;++Z)c[Z]=te.secondsDifference(n[f+Z],n[x]);if(d(r.convertPackedArrayForInterpolation))r.convertPackedArrayForInterpolation(s,f,x,l);else{let Z=0,G=this._packedLength,X=f*G,P=(x+1)*G;for(;X<P;)l[Z]=s[X],X++,Z++}let V=te.secondsDifference(e,n[x]),L;if(p===0||!d(u.interpolate))L=u.interpolateOrderZero(V,c,l,m,this._interpolationResult);else{let Z=Math.floor(m/(p+1));L=u.interpolate(V,c,l,Z,p,p,this._interpolationResult)}return d(r.unpackInterpolationResult)?r.unpackInterpolationResult(L,s,f,x,t):r.unpack(L,0,t)}return r.unpack(s,a*this._packedLength,t)};Bm.prototype.setInterpolationOptions=function(e){if(!d(e))return;let t=!1,n=e.interpolationAlgorithm,i=e.interpolationDegree;d(n)&&this._interpolationAlgorithm!==n&&(this._interpolationAlgorithm=n,t=!0),d(i)&&this._interpolationDegree!==i&&(this._interpolationDegree=i,t=!0),t&&(this._updateTableLength=!0,this._definitionChanged.raiseEvent(this))};Bm.prototype.addSample=function(e,t,n){let i=this._innerDerivativeTypes,o=d(i),r=this._innerType,s=[];if(s.push(e),r.pack(t,s,s.length),o){let a=i.length;for(let c=0;c<a;c++)i[c].pack(n[c],s,s.length)}kN(void 0,this._times,this._values,s,this._packedLength),this._updateTableLength=!0,this._definitionChanged.raiseEvent(this)};Bm.prototype.addSamples=function(e,t,n){let i=this._innerDerivativeTypes,o=d(i),r=this._innerType,s=e.length,a=[];for(let c=0;c<s;c++)if(a.push(e[c]),r.pack(t[c],a,a.length),o){let l=n[c],u=i.length;for(let m=0;m<u;m++)i[m].pack(l[m],a,a.length)}kN(void 0,this._times,this._values,a,this._packedLength),this._updateTableLength=!0,this._definitionChanged.raiseEvent(this)};Bm.prototype.addSamplesPackedArray=function(e,t){kN(t,this._times,this._values,e,this._packedLength),this._updateTableLength=!0,this._definitionChanged.raiseEvent(this)};Bm.prototype.removeSample=function(e){let t=Lo(this._times,e,te.compare);return t<0?!1:(rce(this,t,1),!0)};function rce(e,t,n){let i=e._packedLength;e._times.splice(t,n),e._values.splice(t*i,n*i),e._updateTableLength=!0,e._definitionChanged.raiseEvent(e)}Bm.prototype.removeSamples=function(e){let t=this._times,n=Lo(t,e.start,te.compare);n<0?n=~n:e.isStartIncluded||++n;let i=Lo(t,e.stop,te.compare);i<0?i=~i:e.isStopIncluded&&++i,rce(this,n,i-n)};Bm.prototype.equals=function(e){if(this===e)return!0;if(!d(e)||this._type!==e._type||this._interpolationDegree!==e._interpolationDegree||this._interpolationAlgorithm!==e._interpolationAlgorithm)return!1;let t=this._derivativeTypes,n=d(t),i=e._derivativeTypes,o=d(i);if(n!==o)return!1;let r,s;if(n){if(s=t.length,s!==i.length)return!1;for(r=0;r<s;r++)if(t[r]!==i[r])return!1}let a=this._times,c=e._times;if(s=a.length,s!==c.length)return!1;for(r=0;r<s;r++)if(!te.equals(a[r],c[r]))return!1;let l=this._values,u=e._values;for(s=l.length,r=0;r<s;r++)if(l[r]!==u[r])return!1;return!0};Bm._mergeNewSamples=kN;var ld=Bm;function Vu(e,t){t=g(t,0);let n;if(t>0){n=new Array(t);for(let i=0;i<t;i++)n[i]=h}this._numberOfDerivatives=t,this._property=new ld(h,n),this._definitionChanged=new ye,this._referenceFrame=g(e,io.FIXED),this._property._definitionChanged.addEventListener(function(){this._definitionChanged.raiseEvent(this)},this)}Object.defineProperties(Vu.prototype,{isConstant:{get:function(){return this._property.isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}},interpolationDegree:{get:function(){return this._property.interpolationDegree}},interpolationAlgorithm:{get:function(){return this._property.interpolationAlgorithm}},numberOfDerivatives:{get:function(){return this._numberOfDerivatives}},forwardExtrapolationType:{get:function(){return this._property.forwardExtrapolationType},set:function(e){this._property.forwardExtrapolationType=e}},forwardExtrapolationDuration:{get:function(){return this._property.forwardExtrapolationDuration},set:function(e){this._property.forwardExtrapolationDuration=e}},backwardExtrapolationType:{get:function(){return this._property.backwardExtrapolationType},set:function(e){this._property.backwardExtrapolationType=e}},backwardExtrapolationDuration:{get:function(){return this._property.backwardExtrapolationDuration},set:function(e){this._property.backwardExtrapolationDuration=e}}});Vu.prototype.getValue=function(e,t){return this.getValueInReferenceFrame(e,io.FIXED,t)};Vu.prototype.getValueInReferenceFrame=function(e,t,n){if(n=this._property.getValue(e,n),d(n))return cp.convertToReferenceFrame(e,n,this._referenceFrame,t,n)};Vu.prototype.setInterpolationOptions=function(e){this._property.setInterpolationOptions(e)};Vu.prototype.addSample=function(e,t,n){let i=this._numberOfDerivatives;this._property.addSample(e,t,n)};Vu.prototype.addSamples=function(e,t,n){this._property.addSamples(e,t,n)};Vu.prototype.addSamplesPackedArray=function(e,t){this._property.addSamplesPackedArray(e,t)};Vu.prototype.removeSample=function(e){return this._property.removeSample(e)};Vu.prototype.removeSamples=function(e){this._property.removeSamples(e)};Vu.prototype.equals=function(e){return this===e||e instanceof Vu&&H.equals(this._property,e._property)&&this._referenceFrame===e._referenceFrame};var js=Vu;var xkn=T(S(),1);var dkn=T(S(),1),IKe={HORIZONTAL:0,VERTICAL:1},Ym=Object.freeze(IKe);var WKe=Ym.HORIZONTAL,PKe=Y.WHITE,vKe=Y.BLACK,wKe=0,FKe=1;function KC(e){e=g(e,g.EMPTY_OBJECT),this._definitionChanged=new ye,this._orientation=void 0,this._orientationSubscription=void 0,this._evenColor=void 0,this._evenColorSubscription=void 0,this._oddColor=void 0,this._oddColorSubscription=void 0,this._offset=void 0,this._offsetSubscription=void 0,this._repeat=void 0,this._repeatSubscription=void 0,this.orientation=e.orientation,this.evenColor=e.evenColor,this.oddColor=e.oddColor,this.offset=e.offset,this.repeat=e.repeat}Object.defineProperties(KC.prototype,{isConstant:{get:function(){return H.isConstant(this._orientation)&&H.isConstant(this._evenColor)&&H.isConstant(this._oddColor)&&H.isConstant(this._offset)&&H.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},orientation:le("orientation"),evenColor:le("evenColor"),oddColor:le("oddColor"),offset:le("offset"),repeat:le("repeat")});KC.prototype.getType=function(e){return"Stripe"};KC.prototype.getValue=function(e,t){return d(t)||(t={}),t.horizontal=H.getValueOrDefault(this._orientation,e,WKe)===Ym.HORIZONTAL,t.evenColor=H.getValueOrClonedDefault(this._evenColor,e,PKe,t.evenColor),t.oddColor=H.getValueOrClonedDefault(this._oddColor,e,vKe,t.oddColor),t.offset=H.getValueOrDefault(this._offset,e,wKe),t.repeat=H.getValueOrDefault(this._repeat,e,FKe),t};KC.prototype.equals=function(e){return this===e||e instanceof KC&&H.equals(this._orientation,e._orientation)&&H.equals(this._evenColor,e._evenColor)&&H.equals(this._oddColor,e._oddColor)&&H.equals(this._offset,e._offset)&&H.equals(this._repeat,e._repeat)};var HC=KC;var Gkn=T(S(),1);function py(e){this._definitionChanged=new ye,this._intervals=new Lr,this._intervals.changedEvent.addEventListener(py.prototype._intervalsChanged,this),this._referenceFrame=g(e,io.FIXED)}Object.defineProperties(py.prototype,{isConstant:{get:function(){return this._intervals.isEmpty}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._intervals}},referenceFrame:{get:function(){return this._referenceFrame}}});py.prototype.getValue=function(e,t){return this.getValueInReferenceFrame(e,io.FIXED,t)};py.prototype.getValueInReferenceFrame=function(e,t,n){let i=this._intervals.findDataForIntervalContainingDate(e);if(d(i))return cp.convertToReferenceFrame(e,i,this._referenceFrame,t,n)};py.prototype.equals=function(e){return this===e||e instanceof py&&this._intervals.equals(e._intervals,H.equals)&&this._referenceFrame===e._referenceFrame};py.prototype._intervalsChanged=function(){this._definitionChanged.raiseEvent(this)};var p0=py;var vkn=T(S(),1);function g_(){this._definitionChanged=new ye,this._intervals=new Lr,this._intervals.changedEvent.addEventListener(g_.prototype._intervalsChanged,this)}Object.defineProperties(g_.prototype,{isConstant:{get:function(){return this._intervals.isEmpty}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._intervals}}});g_.prototype.getValue=function(e,t){let n=this._intervals.findDataForIntervalContainingDate(e);return d(n)&&typeof n.clone=="function"?n.clone(t):n};g_.prototype.equals=function(e){return this===e||e instanceof g_&&this._intervals.equals(e._intervals,H.equals)};g_.prototype._intervalsChanged=function(){this._definitionChanged.raiseEvent(this)};var b0=g_;var eDn=T(S(),1);var Dkn=T(S(),1);function zC(e,t){this._position=void 0,this._subscription=void 0,this._definitionChanged=new ye,this._normalize=g(t,!0),this.position=e}Object.defineProperties(zC.prototype,{isConstant:{get:function(){return H.isConstant(this._position)}},definitionChanged:{get:function(){return this._definitionChanged}},position:{get:function(){return this._position},set:function(e){let t=this._position;t!==e&&(d(t)&&this._subscription(),this._position=e,d(e)&&(this._subscription=e._definitionChanged.addEventListener(function(){this._definitionChanged.raiseEvent(this)},this)),this._definitionChanged.raiseEvent(this))}},normalize:{get:function(){return this._normalize},set:function(e){this._normalize!==e&&(this._normalize=e,this._definitionChanged.raiseEvent(this))}}});var AKe=new h,sce=new h,ace=new te,zK=1/60;zC.prototype.getValue=function(e,t){return this._getValue(e,t)};zC.prototype._getValue=function(e,t,n){d(t)||(t=new h);let i=this._position;if(H.isConstant(i))return this._normalize?void 0:h.clone(h.ZERO,t);let o=i.getValue(e,AKe),r=i.getValue(te.addSeconds(e,zK,ace),sce);if(!d(o)||!d(r)&&(r=o,o=i.getValue(te.addSeconds(e,-zK,ace),sce),!d(o)))return;if(h.equals(o,r))return this._normalize?void 0:h.clone(h.ZERO,t);d(n)&&o.clone(n);let s=h.subtract(r,o,t);return this._normalize?h.normalize(s,t):h.divideByScalar(s,zK,t)};zC.prototype.equals=function(e){return this===e||e instanceof zC&&H.equals(this._position,e._position)};var x_=zC;function a2(e,t){this._velocityVectorProperty=new x_(e,!0),this._subscription=void 0,this._ellipsoid=void 0,this._definitionChanged=new ye,this.ellipsoid=g(t,re.WGS84);let n=this;this._velocityVectorProperty.definitionChanged.addEventListener(function(){n._definitionChanged.raiseEvent(n)})}Object.defineProperties(a2.prototype,{isConstant:{get:function(){return H.isConstant(this._velocityVectorProperty)}},definitionChanged:{get:function(){return this._definitionChanged}},position:{get:function(){return this._velocityVectorProperty.position},set:function(e){this._velocityVectorProperty.position=e}},ellipsoid:{get:function(){return this._ellipsoid},set:function(e){this._ellipsoid!==e&&(this._ellipsoid=e,this._definitionChanged.raiseEvent(this))}}});var cce=new h,MKe=new h,lce=new $;a2.prototype.getValue=function(e,t){let n=this._velocityVectorProperty._getValue(e,MKe,cce);if(d(n))return vt.rotationMatrixFromPositionVelocity(cce,n,this._ellipsoid,lce),Ae.fromRotationMatrix(lce,t)};a2.prototype.equals=function(e){return this===e||e instanceof a2&&H.equals(this._velocityVectorProperty,e._velocityVectorProperty)&&(this._ellipsoid===e._ellipsoid||this._ellipsoid.equals(e._ellipsoid))};var c2=a2;function by(){}by.packedLength=h.packedLength;by.unpack=h.unpack;by.pack=h.pack;var JK;function l2(e,t){return t[0]==="#"&&(t=JK+t),f0.fromString(e,t)}function dce(e,t,n){if(d(n.reference))return l2(t,n.reference);if(d(n.velocityReference)){let i=l2(t,n.velocityReference);switch(e){case h:case by:return new x_(i,e===by);case Ae:return new c2(i)}}throw new me(`${JSON.stringify(n)} is not valid CZML.`)}function NKe(e,t){return new mm(function(n,i){return t(e.getValue(n,i))},e.isConstant)}var Ni=new h,Mc=new s2,tc=new he,__=new Tn,DN=new Ae;function UKe(e){let t=e.rgbaf;if(d(t))return t;let n=e.rgba;if(!d(n))return;let i=n.length;if(i===Y.packedLength)return[Y.byteToFloat(n[0]),Y.byteToFloat(n[1]),Y.byteToFloat(n[2]),Y.byteToFloat(n[3])];t=new Array(i);for(let o=0;o<i;o+=5)t[o]=n[o],t[o+1]=Y.byteToFloat(n[o+1]),t[o+2]=Y.byteToFloat(n[o+2]),t[o+3]=Y.byteToFloat(n[o+3]),t[o+4]=Y.byteToFloat(n[o+4]);return t}function uce(e,t){let n=g(e.uri,e);return d(t)?t.getDerivedResource({url:n}):Ee.createIfNeeded(n)}function kKe(e){let t=e.wsen;if(d(t))return t;let n=e.wsenDegrees;if(!d(n))return;let i=n.length;if(i===de.packedLength)return[W.toRadians(n[0]),W.toRadians(n[1]),W.toRadians(n[2]),W.toRadians(n[3])];t=new Array(i);for(let o=0;o<i;o+=5)t[o]=n[o],t[o+1]=W.toRadians(n[o+1]),t[o+2]=W.toRadians(n[o+2]),t[o+3]=W.toRadians(n[o+3]),t[o+4]=W.toRadians(n[o+4]);return t}function DKe(e){let t=e.length;if(Mc.magnitude=1,t===2)return Mc.clock=e[0],Mc.cone=e[1],h.fromSpherical(Mc,Ni),[Ni.x,Ni.y,Ni.z];let n=new Array(t/3*4);for(let i=0,o=0;i<t;i+=3,o+=4)n[o]=e[i],Mc.clock=e[i+1],Mc.cone=e[i+2],h.fromSpherical(Mc,Ni),n[o+1]=Ni.x,n[o+2]=Ni.y,n[o+3]=Ni.z;return n}function BKe(e){let t=e.length;if(t===3)return Mc.clock=e[0],Mc.cone=e[1],Mc.magnitude=e[2],h.fromSpherical(Mc,Ni),[Ni.x,Ni.y,Ni.z];let n=new Array(t);for(let i=0;i<t;i+=4)n[i]=e[i],Mc.clock=e[i+1],Mc.cone=e[i+2],Mc.magnitude=e[i+3],h.fromSpherical(Mc,Ni),n[i+1]=Ni.x,n[i+2]=Ni.y,n[i+3]=Ni.z;return n}function YKe(e){let t=e.length;if(t===3)return tc.longitude=e[0],tc.latitude=e[1],tc.height=e[2],re.WGS84.cartographicToCartesian(tc,Ni),[Ni.x,Ni.y,Ni.z];let n=new Array(t);for(let i=0;i<t;i+=4)n[i]=e[i],tc.longitude=e[i+1],tc.latitude=e[i+2],tc.height=e[i+3],re.WGS84.cartographicToCartesian(tc,Ni),n[i+1]=Ni.x,n[i+2]=Ni.y,n[i+3]=Ni.z;return n}function OKe(e){let t=e.length;if(t===3)return tc.longitude=W.toRadians(e[0]),tc.latitude=W.toRadians(e[1]),tc.height=e[2],re.WGS84.cartographicToCartesian(tc,Ni),[Ni.x,Ni.y,Ni.z];let n=new Array(t);for(let i=0;i<t;i+=4)n[i]=e[i],tc.longitude=W.toRadians(e[i+1]),tc.latitude=W.toRadians(e[i+2]),tc.height=e[i+3],re.WGS84.cartographicToCartesian(tc,Ni),n[i+1]=Ni.x,n[i+2]=Ni.y,n[i+3]=Ni.z;return n}function QK(e){let t=e.cartesian;if(d(t))return t;let n=e.cartesianVelocity;if(d(n))return n;let i=e.unitCartesian;if(d(i))return i;let o=e.unitSpherical;if(d(o))return DKe(o);let r=e.spherical;if(d(r))return BKe(r);let s=e.cartographicRadians;if(d(s))return YKe(s);let a=e.cartographicDegrees;if(d(a))return OKe(a);throw new me(`${JSON.stringify(e)} is not a valid CZML interval.`)}function mce(e,t){h.unpack(e,t,Ni),h.normalize(Ni,Ni),h.pack(Ni,e,t)}function KKe(e){let t=QK(e);if(t.length===3)return mce(t,0),t;for(let n=1;n<t.length;n+=4)mce(t,n);return t}function hce(e,t){Ae.unpack(e,t,DN),Ae.normalize(DN,DN),Ae.pack(DN,e,t)}function HKe(e){let t=e.unitQuaternion;if(d(t)){if(t.length===4)return hce(t,0),t;for(let n=1;n<t.length;n+=5)hce(t,n)}return t}function fce(e){return typeof e=="boolean"?Boolean:typeof e=="number"?Number:typeof e=="string"?String:e.hasOwnProperty("array")?Array:e.hasOwnProperty("boolean")?Boolean:e.hasOwnProperty("boundingRectangle")?He:e.hasOwnProperty("cartesian2")?D:e.hasOwnProperty("cartesian")||e.hasOwnProperty("spherical")||e.hasOwnProperty("cartographicRadians")||e.hasOwnProperty("cartographicDegrees")?h:e.hasOwnProperty("unitCartesian")||e.hasOwnProperty("unitSpherical")?by:e.hasOwnProperty("rgba")||e.hasOwnProperty("rgbaf")?Y:e.hasOwnProperty("arcType")?Jt:e.hasOwnProperty("classificationType")?kn:e.hasOwnProperty("colorBlendMode")?Ka:e.hasOwnProperty("cornerType")?Ii:e.hasOwnProperty("heightReference")?Oe:e.hasOwnProperty("horizontalOrigin")?pi:e.hasOwnProperty("date")?te:e.hasOwnProperty("labelStyle")?vo:e.hasOwnProperty("number")?Number:e.hasOwnProperty("nearFarScalar")?It:e.hasOwnProperty("distanceDisplayCondition")?Gt:e.hasOwnProperty("object")||e.hasOwnProperty("value")?Object:e.hasOwnProperty("unitQuaternion")?Ae:e.hasOwnProperty("shadowMode")?xn:e.hasOwnProperty("string")?String:e.hasOwnProperty("stripeOrientation")?Ym:e.hasOwnProperty("wsen")||e.hasOwnProperty("wsenDegrees")?de:e.hasOwnProperty("uri")?u2.default:e.hasOwnProperty("verticalOrigin")?In:Object}function zKe(e,t,n){switch(e){case Jt:return Jt[g(t.arcType,t)];case Array:return t.array;case Boolean:return g(t.boolean,t);case He:return t.boundingRectangle;case D:return t.cartesian2;case h:return QK(t);case by:return KKe(t);case Y:return UKe(t);case kn:return kn[g(t.classificationType,t)];case Ka:return Ka[g(t.colorBlendMode,t)];case Ii:return Ii[g(t.cornerType,t)];case Oe:return Oe[g(t.heightReference,t)];case pi:return pi[g(t.horizontalOrigin,t)];case Image:return uce(t,n);case te:return te.fromIso8601(g(t.date,t));case vo:return vo[g(t.labelStyle,t)];case Number:return g(t.number,t);case It:return t.nearFarScalar;case Gt:return t.distanceDisplayCondition;case Object:return g(g(t.object,t.value),t);case Ae:return HKe(t);case Cu:return g(t.number,t);case xn:return xn[g(g(t.shadowMode,t.shadows),t)];case String:return g(t.string,t);case Ym:return Ym[g(t.stripeOrientation,t)];case de:return kKe(t);case u2.default:return uce(t,n);case In:return In[g(t.verticalOrigin,t)];default:throw new me(e)}}var JKe={HERMITE:o2,LAGRANGE:r2,LINEAR:p_};function BN(e,t){let n=e.interpolationAlgorithm,i=e.interpolationDegree;(d(n)||d(i))&&t.setInterpolationOptions({interpolationAlgorithm:JKe[n],interpolationDegree:i});let o=e.forwardExtrapolationType;d(o)&&(t.forwardExtrapolationType=ad[o]);let r=e.forwardExtrapolationDuration;d(r)&&(t.forwardExtrapolationDuration=r);let s=e.backwardExtrapolationType;d(s)&&(t.backwardExtrapolationType=ad[s]);let a=e.backwardExtrapolationDuration;d(a)&&(t.backwardExtrapolationDuration=a)}var pce={iso8601:void 0};function or(e){if(d(e))return pce.iso8601=e,Tn.fromIso8601(pce)}function jK(e){let t=Be.MAXIMUM_INTERVAL.clone();return t.data=e,t}function bce(e){let t=new qa;return t.intervals.addInterval(jK(e)),t}function yce(e){let t=new Js(e.referenceFrame);return t.intervals.addInterval(jK(e)),t}function YN(e,t,n,i,o,r,s){let a=or(i.interval);d(o)&&(d(a)?a=Tn.intersect(a,o,__):a=o);let c,l,u,m=!d(i.reference)&&!d(i.velocityReference),p=d(a)&&!a.equals(Be.MAXIMUM_INTERVAL);if(i.delete===!0){if(!p){t[n]=void 0;return}return Gce(t[n],a)}let y=!1;if(m){if(l=zKe(e,i,r),!d(l))return;c=g(e.packedLength,1),u=g(l.length,1),y=!d(i.array)&&typeof l!="string"&&u>c&&e!==Object}let f=typeof e.unpack=="function"&&e!==Cu;if(!y&&!p){m?t[n]=new qn(f?e.unpack(l,0):l):t[n]=dce(e,s,i);return}let x=t[n],_,C=i.epoch;if(d(C)&&(_=te.fromIso8601(C)),y&&!p){x instanceof ld||(t[n]=x=new ld(e)),x.addSamplesPackedArray(l,_),BN(i,x);return}let V;if(!y&&p){a=a.clone(),m?a.data=f?e.unpack(l,0):l:a.data=dce(e,s,i),d(x)||(t[n]=x=m?new b0:new qa),m&&x instanceof b0?x.intervals.addInterval(a):x instanceof qa?(m&&(a.data=new qn(a.data)),x.intervals.addInterval(a)):(t[n]=x=bce(x),m&&(a.data=new qn(a.data)),x.intervals.addInterval(a));return}d(x)||(t[n]=x=new qa),x instanceof qa||(t[n]=x=bce(x));let L=x.intervals;V=L.findInterval(a),(!d(V)||!(V.data instanceof ld))&&(V=a.clone(),V.data=new ld(e),L.addInterval(V)),V.data.addSamplesPackedArray(l,_),BN(i,V.data)}function Gce(e,t){if(e instanceof ld){e.removeSamples(t);return}else if(e instanceof b0){e.intervals.removeInterval(t);return}else if(e instanceof qa){let n=e.intervals;for(let i=0;i<n.length;++i){let o=Tn.intersect(n.get(i),t,__);o.isEmpty||Gce(o.data,t)}n.removeInterval(t);return}}function ge(e,t,n,i,o,r,s){if(d(i))if(Array.isArray(i))for(let a=0,c=i.length;a<c;++a)YN(e,t,n,i[a],o,r,s);else YN(e,t,n,i,o,r,s)}function gce(e,t,n,i,o,r){let s=or(n.interval);d(i)&&(d(s)?s=Tn.intersect(s,i,__):s=i);let a=d(n.cartesianVelocity)?1:0,c=h.packedLength*(a+1),l,u,m=!d(n.reference),p=d(s)&&!s.equals(Be.MAXIMUM_INTERVAL);if(n.delete===!0){if(!p){e[t]=void 0;return}return Ece(e[t],s)}let y,f=!1;if(m&&(d(n.referenceFrame)&&(y=io[n.referenceFrame]),y=g(y,io.FIXED),l=QK(n),u=g(l.length,1),f=u>c),!f&&!p){m?e[t]=new Rc(h.unpack(l),y):e[t]=l2(r,n.reference);return}let x=e[t],_,C=n.epoch;if(d(C)&&(_=te.fromIso8601(C)),f&&!p){(!(x instanceof js)||d(y)&&x.referenceFrame!==y)&&(e[t]=x=new js(y,a)),x.addSamplesPackedArray(l,_),BN(n,x);return}let V;if(!f&&p){s=s.clone(),m?s.data=h.unpack(l):s.data=l2(r,n.reference),d(x)||(m?x=new p0(y):x=new Js(y),e[t]=x),m&&x instanceof p0&&d(y)&&x.referenceFrame===y?x.intervals.addInterval(s):x instanceof Js?(m&&(s.data=new Rc(s.data,y)),x.intervals.addInterval(s)):(e[t]=x=yce(x),m&&(s.data=new Rc(s.data,y)),x.intervals.addInterval(s));return}d(x)?x instanceof Js||(e[t]=x=yce(x)):e[t]=x=new Js(y);let L=x.intervals;V=L.findInterval(s),(!d(V)||!(V.data instanceof js)||d(y)&&V.data.referenceFrame!==y)&&(V=s.clone(),V.data=new js(y,a),L.addInterval(V)),V.data.addSamplesPackedArray(l,_),BN(n,V.data)}function Ece(e,t){if(e instanceof js){e.removeSamples(t);return}else if(e instanceof p0){e.intervals.removeInterval(t);return}else if(e instanceof Js){let n=e.intervals;for(let i=0;i<n.length;++i){let o=Tn.intersect(n.get(i),t,__);o.isEmpty||Ece(o.data,t)}n.removeInterval(t);return}}function Xce(e,t,n,i,o,r){if(d(n))if(Array.isArray(n))for(let s=0,a=n.length;s<a;++s)gce(e,t,n[s],i,o,r);else gce(e,t,n,i,o,r)}function xce(e,t,n,i){d(n.references)?ON(e,t,n.references,n.interval,i,OC,qa):(d(n.cartesian2)?n.array=D.unpackArray(n.cartesian2):d(n.cartesian)&&(n.array=D.unpackArray(n.cartesian)),d(n.array)&&ge(Array,e,t,n,void 0,void 0,i))}function _ce(e,t,n,i,o,r){let s=or(n.interval);d(i)&&(d(s)?s=Tn.intersect(s,i,__):s=i);let a=e[t],c,l;if(d(s)){a instanceof ZC||(a=new ZC,e[t]=a);let m=a.intervals;l=m.findInterval({start:s.start,stop:s.stop}),d(l)?c=l.data:(l=s.clone(),m.addInterval(l))}else c=a;let u;d(n.solidColor)?(c instanceof At||(c=new At),u=n.solidColor,ge(Y,c,"color",u.color,void 0,void 0,r)):d(n.grid)?(c instanceof AC||(c=new AC),u=n.grid,ge(Y,c,"color",u.color,void 0,o,r),ge(Number,c,"cellAlpha",u.cellAlpha,void 0,o,r),ge(D,c,"lineCount",u.lineCount,void 0,o,r),ge(D,c,"lineThickness",u.lineThickness,void 0,o,r),ge(D,c,"lineOffset",u.lineOffset,void 0,o,r)):d(n.image)?(c instanceof hb||(c=new hb),u=n.image,ge(Image,c,"image",u.image,void 0,o,r),ge(D,c,"repeat",u.repeat,void 0,o,r),ge(Y,c,"color",u.color,void 0,o,r),ge(Boolean,c,"transparent",u.transparent,void 0,o,r)):d(n.stripe)?(c instanceof HC||(c=new HC),u=n.stripe,ge(Ym,c,"orientation",u.orientation,void 0,o,r),ge(Y,c,"evenColor",u.evenColor,void 0,o,r),ge(Y,c,"oddColor",u.oddColor,void 0,o,r),ge(Number,c,"offset",u.offset,void 0,o,r),ge(Number,c,"repeat",u.repeat,void 0,o,r)):d(n.polylineOutline)?(c instanceof hy||(c=new hy),u=n.polylineOutline,ge(Y,c,"color",u.color,void 0,o,r),ge(Y,c,"outlineColor",u.outlineColor,void 0,o,r),ge(Number,c,"outlineWidth",u.outlineWidth,void 0,o,r)):d(n.polylineGlow)?(c instanceof BC||(c=new BC),u=n.polylineGlow,ge(Y,c,"color",u.color,void 0,o,r),ge(Number,c,"glowPower",u.glowPower,void 0,o,r),ge(Number,c,"taperPower",u.taperPower,void 0,o,r)):d(n.polylineArrow)?(c instanceof NC||(c=new NC),u=n.polylineArrow,ge(Y,c,"color",u.color,void 0,void 0,r)):d(n.polylineDash)?(c instanceof kC||(c=new kC),u=n.polylineDash,ge(Y,c,"color",u.color,void 0,void 0,r),ge(Y,c,"gapColor",u.gapColor,void 0,void 0,r),ge(Number,c,"dashLength",u.dashLength,void 0,o,r),ge(Number,c,"dashPattern",u.dashPattern,void 0,o,r)):d(n.checkerboard)&&(c instanceof LC||(c=new LC),u=n.checkerboard,ge(Y,c,"evenColor",u.evenColor,void 0,o,r),ge(Y,c,"oddColor",u.oddColor,void 0,o,r),ge(D,c,"repeat",u.repeat,void 0,o,r)),d(l)?l.data=c:e[t]=c}function dd(e,t,n,i,o,r){if(d(n))if(Array.isArray(n))for(let s=0,a=n.length;s<a;++s)_ce(e,t,n[s],i,o,r);else _ce(e,t,n,i,o,r)}function QKe(e,t,n,i){let o=t.name;d(o)&&(e.name=t.name)}function jKe(e,t,n,i){let o=t.description;d(o)&&ge(String,e,"description",o,void 0,i,n)}function qKe(e,t,n,i){let o=t.position;d(o)&&Xce(e,"position",o,void 0,i,n)}function $Ke(e,t,n,i){let o=t.viewFrom;d(o)&&ge(h,e,"viewFrom",o,void 0,i,n)}function eHe(e,t,n,i){let o=t.orientation;d(o)&&ge(Ae,e,"orientation",o,void 0,i,n)}function tHe(e,t,n,i){let o=t.properties;if(d(o)){d(e.properties)||(e.properties=new dl);for(let r in o)if(o.hasOwnProperty(r)){e.properties.hasProperty(r)||e.properties.addProperty(r);let s=o[r];if(Array.isArray(s))for(let a=0,c=s.length;a<c;++a)YN(fce(s[a]),e.properties,r,s[a],void 0,i,n);else YN(fce(s),e.properties,r,s,void 0,i,n)}}}function ON(e,t,n,i,o,r,s){let a=n.map(function(c){return l2(o,c)});if(d(i)){i=or(i);let c=e[t];if(!(c instanceof s)){let l=new s;l.intervals.addInterval(jK(c)),e[t]=c=l}i.data=new r(a),c.intervals.addInterval(i)}else e[t]=new r(a)}function Tce(e,t,n,i){let o=n.references;d(o)?ON(e,t,o,n.interval,i,OC,qa):ge(Array,e,t,n,void 0,void 0,i)}function Sce(e,t,n,i){if(d(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;++o)Tce(e,t,n[o],i);else Tce(e,t,n,i)}function Cce(e,t,n,i){let o=n.references;d(o)?ON(e,t,o,n.interval,i,h0,Js):(d(n.cartesian)?n.array=h.unpackArray(n.cartesian):d(n.cartographicRadians)?n.array=h.fromRadiansArrayHeights(n.cartographicRadians,re.WGS84):d(n.cartographicDegrees)&&(n.array=h.fromDegreesArrayHeights(n.cartographicDegrees,re.WGS84)),d(n.array)&&ge(Array,e,t,n,void 0,void 0,i))}function m2(e,t,n,i){if(d(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;++o)Cce(e,t,n[o],i);else Cce(e,t,n,i)}function nHe(e){return h.unpackArray(e)}function iHe(e){return h.fromRadiansArrayHeights(e,re.WGS84)}function oHe(e){return h.fromDegreesArrayHeights(e,re.WGS84)}function Vce(e,t,n,i){let o=n.references;if(d(o)){let r=o.map(function(s){let a={};return ON(a,"positions",s,n.interval,i,h0,Js),a.positions});e[t]=new h0(r)}else d(n.cartesian)?n.array=n.cartesian.map(nHe):d(n.cartographicRadians)?n.array=n.cartographicRadians.map(iHe):d(n.cartographicDegrees)&&(n.array=n.cartographicDegrees.map(oHe)),d(n.array)&&ge(Array,e,t,n,void 0,void 0,i)}function rHe(e,t,n,i){if(d(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;++o)Vce(e,t,n[o],i);else Vce(e,t,n,i)}function sHe(e,t,n,i){if(d(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;o++)xce(e,t,n[o],i);else xce(e,t,n,i)}function aHe(e,t,n,i){let o=t.availability;if(!d(o))return;let r;if(Array.isArray(o))for(let s=0,a=o.length;s<a;++s)d(r)||(r=new Lr),r.addInterval(or(o[s]));else r=new Lr,r.addInterval(or(o));e.availability=r}function cHe(e,t,n,i,o){d(t)&&ge(by,e,"alignedAxis",t,n,i,o)}function lHe(e,t,n,i){let o=t.billboard;if(!d(o))return;let r=or(o.interval),s=e.billboard;d(s)||(e.billboard=s=new Ia),ge(Boolean,s,"show",o.show,r,i,n),ge(Image,s,"image",o.image,r,i,n),ge(Number,s,"scale",o.scale,r,i,n),ge(D,s,"pixelOffset",o.pixelOffset,r,i,n),ge(h,s,"eyeOffset",o.eyeOffset,r,i,n),ge(pi,s,"horizontalOrigin",o.horizontalOrigin,r,i,n),ge(In,s,"verticalOrigin",o.verticalOrigin,r,i,n),ge(Oe,s,"heightReference",o.heightReference,r,i,n),ge(Y,s,"color",o.color,r,i,n),ge(Cu,s,"rotation",o.rotation,r,i,n),cHe(s,o.alignedAxis,r,i,n),ge(Boolean,s,"sizeInMeters",o.sizeInMeters,r,i,n),ge(Number,s,"width",o.width,r,i,n),ge(Number,s,"height",o.height,r,i,n),ge(It,s,"scaleByDistance",o.scaleByDistance,r,i,n),ge(It,s,"translucencyByDistance",o.translucencyByDistance,r,i,n),ge(It,s,"pixelOffsetScaleByDistance",o.pixelOffsetScaleByDistance,r,i,n),ge(He,s,"imageSubRegion",o.imageSubRegion,r,i,n),ge(Gt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),ge(Number,s,"disableDepthTestDistance",o.disableDepthTestDistance,r,i,n)}function dHe(e,t,n,i){let o=t.box;if(!d(o))return;let r=or(o.interval),s=e.box;d(s)||(e.box=s=new qg),ge(Boolean,s,"show",o.show,r,i,n),ge(h,s,"dimensions",o.dimensions,r,i,n),ge(Oe,s,"heightReference",o.heightReference,r,i,n),ge(Boolean,s,"fill",o.fill,r,i,n),dd(s,"material",o.material,r,i,n),ge(Boolean,s,"outline",o.outline,r,i,n),ge(Y,s,"outlineColor",o.outlineColor,r,i,n),ge(Number,s,"outlineWidth",o.outlineWidth,r,i,n),ge(xn,s,"shadows",o.shadows,r,i,n),ge(Gt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function uHe(e,t,n,i){let o=t.corridor;if(!d(o))return;let r=or(o.interval),s=e.corridor;d(s)||(e.corridor=s=new ex),ge(Boolean,s,"show",o.show,r,i,n),m2(s,"positions",o.positions,n),ge(Number,s,"width",o.width,r,i,n),ge(Number,s,"height",o.height,r,i,n),ge(Oe,s,"heightReference",o.heightReference,r,i,n),ge(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),ge(Oe,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),ge(Ii,s,"cornerType",o.cornerType,r,i,n),ge(Number,s,"granularity",o.granularity,r,i,n),ge(Boolean,s,"fill",o.fill,r,i,n),dd(s,"material",o.material,r,i,n),ge(Boolean,s,"outline",o.outline,r,i,n),ge(Y,s,"outlineColor",o.outlineColor,r,i,n),ge(Number,s,"outlineWidth",o.outlineWidth,r,i,n),ge(xn,s,"shadows",o.shadows,r,i,n),ge(Gt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),ge(kn,s,"classificationType",o.classificationType,r,i,n),ge(Number,s,"zIndex",o.zIndex,r,i,n)}function mHe(e,t,n,i){let o=t.cylinder;if(!d(o))return;let r=or(o.interval),s=e.cylinder;d(s)||(e.cylinder=s=new tx),ge(Boolean,s,"show",o.show,r,i,n),ge(Number,s,"length",o.length,r,i,n),ge(Number,s,"topRadius",o.topRadius,r,i,n),ge(Number,s,"bottomRadius",o.bottomRadius,r,i,n),ge(Oe,s,"heightReference",o.heightReference,r,i,n),ge(Boolean,s,"fill",o.fill,r,i,n),dd(s,"material",o.material,r,i,n),ge(Boolean,s,"outline",o.outline,r,i,n),ge(Y,s,"outlineColor",o.outlineColor,r,i,n),ge(Number,s,"outlineWidth",o.outlineWidth,r,i,n),ge(Number,s,"numberOfVerticalLines",o.numberOfVerticalLines,r,i,n),ge(Number,s,"slices",o.slices,r,i,n),ge(xn,s,"shadows",o.shadows,r,i,n),ge(Gt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function hHe(e,t){let n=e.version;if(d(n)&&typeof n=="string"){let r=n.split(".");if(r.length===2){if(r[0]!=="1")throw new me("Cesium only supports CZML version 1.");t._version=n}}if(!d(t._version))throw new me("CZML version information invalid. It is expected to be a property on the document object in the <Major>.<Minor> version format.");let i=t._documentPacket;d(e.name)&&(i.name=e.name);let o=e.clock;if(d(o)){let r=i.clock;d(r)?(r.interval=g(o.interval,r.interval),r.currentTime=g(o.currentTime,r.currentTime),r.range=g(o.range,r.range),r.step=g(o.step,r.step),r.multiplier=g(o.multiplier,r.multiplier)):i.clock={interval:o.interval,currentTime:o.currentTime,range:o.range,step:o.step,multiplier:o.multiplier}}}function fHe(e,t,n,i){let o=t.ellipse;if(!d(o))return;let r=or(o.interval),s=e.ellipse;d(s)||(e.ellipse=s=new nx),ge(Boolean,s,"show",o.show,r,i,n),ge(Number,s,"semiMajorAxis",o.semiMajorAxis,r,i,n),ge(Number,s,"semiMinorAxis",o.semiMinorAxis,r,i,n),ge(Number,s,"height",o.height,r,i,n),ge(Oe,s,"heightReference",o.heightReference,r,i,n),ge(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),ge(Oe,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),ge(Cu,s,"rotation",o.rotation,r,i,n),ge(Cu,s,"stRotation",o.stRotation,r,i,n),ge(Number,s,"granularity",o.granularity,r,i,n),ge(Boolean,s,"fill",o.fill,r,i,n),dd(s,"material",o.material,r,i,n),ge(Boolean,s,"outline",o.outline,r,i,n),ge(Y,s,"outlineColor",o.outlineColor,r,i,n),ge(Number,s,"outlineWidth",o.outlineWidth,r,i,n),ge(Number,s,"numberOfVerticalLines",o.numberOfVerticalLines,r,i,n),ge(xn,s,"shadows",o.shadows,r,i,n),ge(Gt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),ge(kn,s,"classificationType",o.classificationType,r,i,n),ge(Number,s,"zIndex",o.zIndex,r,i,n)}function pHe(e,t,n,i){let o=t.ellipsoid;if(!d(o))return;let r=or(o.interval),s=e.ellipsoid;d(s)||(e.ellipsoid=s=new ix),ge(Boolean,s,"show",o.show,r,i,n),ge(h,s,"radii",o.radii,r,i,n),ge(h,s,"innerRadii",o.innerRadii,r,i,n),ge(Number,s,"minimumClock",o.minimumClock,r,i,n),ge(Number,s,"maximumClock",o.maximumClock,r,i,n),ge(Number,s,"minimumCone",o.minimumCone,r,i,n),ge(Number,s,"maximumCone",o.maximumCone,r,i,n),ge(Oe,s,"heightReference",o.heightReference,r,i,n),ge(Boolean,s,"fill",o.fill,r,i,n),dd(s,"material",o.material,r,i,n),ge(Boolean,s,"outline",o.outline,r,i,n),ge(Y,s,"outlineColor",o.outlineColor,r,i,n),ge(Number,s,"outlineWidth",o.outlineWidth,r,i,n),ge(Number,s,"stackPartitions",o.stackPartitions,r,i,n),ge(Number,s,"slicePartitions",o.slicePartitions,r,i,n),ge(Number,s,"subdivisions",o.subdivisions,r,i,n),ge(xn,s,"shadows",o.shadows,r,i,n),ge(Gt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function bHe(e,t,n,i){let o=t.label;if(!d(o))return;let r=or(o.interval),s=e.label;d(s)||(e.label=s=new lm),ge(Boolean,s,"show",o.show,r,i,n),ge(String,s,"text",o.text,r,i,n),ge(String,s,"font",o.font,r,i,n),ge(vo,s,"style",o.style,r,i,n),ge(Number,s,"scale",o.scale,r,i,n),ge(Boolean,s,"showBackground",o.showBackground,r,i,n),ge(Y,s,"backgroundColor",o.backgroundColor,r,i,n),ge(D,s,"backgroundPadding",o.backgroundPadding,r,i,n),ge(D,s,"pixelOffset",o.pixelOffset,r,i,n),ge(h,s,"eyeOffset",o.eyeOffset,r,i,n),ge(pi,s,"horizontalOrigin",o.horizontalOrigin,r,i,n),ge(In,s,"verticalOrigin",o.verticalOrigin,r,i,n),ge(Oe,s,"heightReference",o.heightReference,r,i,n),ge(Y,s,"fillColor",o.fillColor,r,i,n),ge(Y,s,"outlineColor",o.outlineColor,r,i,n),ge(Number,s,"outlineWidth",o.outlineWidth,r,i,n),ge(It,s,"translucencyByDistance",o.translucencyByDistance,r,i,n),ge(It,s,"pixelOffsetScaleByDistance",o.pixelOffsetScaleByDistance,r,i,n),ge(It,s,"scaleByDistance",o.scaleByDistance,r,i,n),ge(Gt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),ge(Number,s,"disableDepthTestDistance",o.disableDepthTestDistance,r,i,n)}function yHe(e,t,n,i){let o=t.model;if(!d(o))return;let r=or(o.interval),s=e.model;d(s)||(e.model=s=new dp),ge(Boolean,s,"show",o.show,r,i,n),ge(u2.default,s,"uri",o.gltf,r,i,n),ge(Number,s,"scale",o.scale,r,i,n),ge(Number,s,"minimumPixelSize",o.minimumPixelSize,r,i,n),ge(Number,s,"maximumScale",o.maximumScale,r,i,n),ge(Boolean,s,"incrementallyLoadTextures",o.incrementallyLoadTextures,r,i,n),ge(Boolean,s,"runAnimations",o.runAnimations,r,i,n),ge(Boolean,s,"clampAnimations",o.clampAnimations,r,i,n),ge(xn,s,"shadows",o.shadows,r,i,n),ge(Oe,s,"heightReference",o.heightReference,r,i,n),ge(Y,s,"silhouetteColor",o.silhouetteColor,r,i,n),ge(Number,s,"silhouetteSize",o.silhouetteSize,r,i,n),ge(Y,s,"color",o.color,r,i,n),ge(Ka,s,"colorBlendMode",o.colorBlendMode,r,i,n),ge(Number,s,"colorBlendAmount",o.colorBlendAmount,r,i,n),ge(Gt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n);let a,c,l=o.nodeTransformations;if(d(l))if(Array.isArray(l))for(a=0,c=l.length;a<c;++a)Lce(s,l[a],r,i,n);else Lce(s,l,r,i,n);let u=o.articulations;if(d(u))if(Array.isArray(u))for(a=0,c=u.length;a<c;++a)Rce(s,u[a],r,i,n);else Rce(s,u,r,i,n)}function Lce(e,t,n,i,o){let r=or(t.interval);d(n)&&(d(r)?r=Tn.intersect(r,n,__):r=n);let s=e.nodeTransformations,a=Object.keys(t);for(let c=0,l=a.length;c<l;++c){let u=a[c];if(u==="interval")continue;let m=t[u];if(!d(m))continue;d(s)||(e.nodeTransformations=s=new dl),s.hasProperty(u)||s.addProperty(u);let p=s[u];d(p)||(s[u]=p=new ox),ge(h,p,"translation",m.translation,r,i,o),ge(Ae,p,"rotation",m.rotation,r,i,o),ge(h,p,"scale",m.scale,r,i,o)}}function Rce(e,t,n,i,o){let r=or(t.interval);d(n)&&(d(r)?r=Tn.intersect(r,n,__):r=n);let s=e.articulations,a=Object.keys(t);for(let c=0,l=a.length;c<l;++c){let u=a[c];if(u==="interval")continue;let m=t[u];d(m)&&(d(s)||(e.articulations=s=new dl),s.hasProperty(u)||s.addProperty(u),ge(Number,s,u,m,r,i,o))}}function gHe(e,t,n,i){let o=t.path;if(!d(o))return;let r=or(o.interval),s=e.path;d(s)||(e.path=s=new up),ge(Boolean,s,"show",o.show,r,i,n),ge(Number,s,"leadTime",o.leadTime,r,i,n),ge(Number,s,"trailTime",o.trailTime,r,i,n),ge(Number,s,"width",o.width,r,i,n),ge(Number,s,"resolution",o.resolution,r,i,n),dd(s,"material",o.material,r,i,n),ge(Gt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function xHe(e,t,n,i){let o=t.point;if(!d(o))return;let r=or(o.interval),s=e.point;d(s)||(e.point=s=new sx),ge(Boolean,s,"show",o.show,r,i,n),ge(Number,s,"pixelSize",o.pixelSize,r,i,n),ge(Oe,s,"heightReference",o.heightReference,r,i,n),ge(Y,s,"color",o.color,r,i,n),ge(Y,s,"outlineColor",o.outlineColor,r,i,n),ge(Number,s,"outlineWidth",o.outlineWidth,r,i,n),ge(It,s,"scaleByDistance",o.scaleByDistance,r,i,n),ge(It,s,"translucencyByDistance",o.translucencyByDistance,r,i,n),ge(Gt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),ge(Number,s,"disableDepthTestDistance",o.disableDepthTestDistance,r,i,n)}function d2(e){this.polygon=e,this._definitionChanged=new ye}Object.defineProperties(d2.prototype,{isConstant:{get:function(){let e=this.polygon._positions,t=this.polygon._holes;return(!d(e)||e.isConstant)&&(!d(t)||t.isConstant)}},definitionChanged:{get:function(){return this._definitionChanged}}});d2.prototype.getValue=function(e,t){let n;d(this.polygon._positions)&&(n=this.polygon._positions.getValue(e));let i;return d(this.polygon._holes)&&(i=this.polygon._holes.getValue(e),d(i)&&(i=i.map(function(o){return new ha(o)}))),d(t)?(t.positions=n,t.holes=i,t):new ha(n,i)};d2.prototype.equals=function(e){return this===e||e instanceof d2&&H.equals(this.polygon._positions,e.polygon._positions)&&H.equals(this.polygon._holes,e.polygon._holes)};function _He(e,t,n,i){let o=t.polygon;if(!d(o))return;let r=or(o.interval),s=e.polygon;d(s)||(e.polygon=s=new dm),ge(Boolean,s,"show",o.show,r,i,n),m2(s,"_positions",o.positions,n),rHe(s,"_holes",o.holes,n),(d(s._positions)||d(s._holes))&&(s.hierarchy=new d2(s)),ge(Number,s,"height",o.height,r,i,n),ge(Oe,s,"heightReference",o.heightReference,r,i,n),ge(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),ge(Oe,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),ge(Cu,s,"stRotation",o.stRotation,r,i,n),ge(Number,s,"granularity",o.granularity,r,i,n),ge(Boolean,s,"fill",o.fill,r,i,n),dd(s,"material",o.material,r,i,n),ge(Boolean,s,"outline",o.outline,r,i,n),ge(Y,s,"outlineColor",o.outlineColor,r,i,n),ge(Number,s,"outlineWidth",o.outlineWidth,r,i,n),ge(Boolean,s,"perPositionHeight",o.perPositionHeight,r,i,n),ge(Boolean,s,"closeTop",o.closeTop,r,i,n),ge(Boolean,s,"closeBottom",o.closeBottom,r,i,n),ge(Jt,s,"arcType",o.arcType,r,i,n),ge(xn,s,"shadows",o.shadows,r,i,n),ge(Gt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),ge(kn,s,"classificationType",o.classificationType,r,i,n),ge(Number,s,"zIndex",o.zIndex,r,i,n)}function THe(e){return e?Jt.GEODESIC:Jt.NONE}function SHe(e,t,n,i){let o=t.polyline;if(!d(o))return;let r=or(o.interval),s=e.polyline;if(d(s)||(e.polyline=s=new Da),ge(Boolean,s,"show",o.show,r,i,n),m2(s,"positions",o.positions,n),ge(Number,s,"width",o.width,r,i,n),ge(Number,s,"granularity",o.granularity,r,i,n),dd(s,"material",o.material,r,i,n),dd(s,"depthFailMaterial",o.depthFailMaterial,r,i,n),ge(Jt,s,"arcType",o.arcType,r,i,n),ge(Boolean,s,"clampToGround",o.clampToGround,r,i,n),ge(xn,s,"shadows",o.shadows,r,i,n),ge(Gt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),ge(kn,s,"classificationType",o.classificationType,r,i,n),ge(Number,s,"zIndex",o.zIndex,r,i,n),d(o.followSurface)&&!d(o.arcType)){let a={};ge(Boolean,a,"followSurface",o.followSurface,r,i,n),s.arcType=NKe(a.followSurface,THe)}}function CHe(e,t,n,i){let o=t.polylineVolume;if(!d(o))return;let r=or(o.interval),s=e.polylineVolume;d(s)||(e.polylineVolume=s=new ax),m2(s,"positions",o.positions,n),sHe(s,"shape",o.shape,n),ge(Boolean,s,"show",o.show,r,i,n),ge(Ii,s,"cornerType",o.cornerType,r,i,n),ge(Boolean,s,"fill",o.fill,r,i,n),dd(s,"material",o.material,r,i,n),ge(Boolean,s,"outline",o.outline,r,i,n),ge(Y,s,"outlineColor",o.outlineColor,r,i,n),ge(Number,s,"outlineWidth",o.outlineWidth,r,i,n),ge(Number,s,"granularity",o.granularity,r,i,n),ge(xn,s,"shadows",o.shadows,r,i,n),ge(Gt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function VHe(e,t,n,i){let o=t.rectangle;if(!d(o))return;let r=or(o.interval),s=e.rectangle;d(s)||(e.rectangle=s=new um),ge(Boolean,s,"show",o.show,r,i,n),ge(de,s,"coordinates",o.coordinates,r,i,n),ge(Number,s,"height",o.height,r,i,n),ge(Oe,s,"heightReference",o.heightReference,r,i,n),ge(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),ge(Oe,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),ge(Cu,s,"rotation",o.rotation,r,i,n),ge(Cu,s,"stRotation",o.stRotation,r,i,n),ge(Number,s,"granularity",o.granularity,r,i,n),ge(Boolean,s,"fill",o.fill,r,i,n),dd(s,"material",o.material,r,i,n),ge(Boolean,s,"outline",o.outline,r,i,n),ge(Y,s,"outlineColor",o.outlineColor,r,i,n),ge(Number,s,"outlineWidth",o.outlineWidth,r,i,n),ge(xn,s,"shadows",o.shadows,r,i,n),ge(Gt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),ge(kn,s,"classificationType",o.classificationType,r,i,n),ge(Number,s,"zIndex",o.zIndex,r,i,n)}function LHe(e,t,n,i){let o=t.tileset;if(!d(o))return;let r=or(o.interval),s=e.tileset;d(s)||(e.tileset=s=new rx),ge(Boolean,s,"show",o.show,r,i,n),ge(u2.default,s,"uri",o.uri,r,i,n),ge(Number,s,"maximumScreenSpaceError",o.maximumScreenSpaceError,r,i,n)}function RHe(e,t,n,i){let o=t.wall;if(!d(o))return;let r=or(o.interval),s=e.wall;d(s)||(e.wall=s=new mp),ge(Boolean,s,"show",o.show,r,i,n),m2(s,"positions",o.positions,n),Sce(s,"minimumHeights",o.minimumHeights,n),Sce(s,"maximumHeights",o.maximumHeights,n),ge(Number,s,"granularity",o.granularity,r,i,n),ge(Boolean,s,"fill",o.fill,r,i,n),dd(s,"material",o.material,r,i,n),ge(Boolean,s,"outline",o.outline,r,i,n),ge(Y,s,"outlineColor",o.outlineColor,r,i,n),ge(Number,s,"outlineWidth",o.outlineWidth,r,i,n),ge(xn,s,"shadows",o.shadows,r,i,n),ge(Gt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function Zce(e,t,n,i,o){let r=e.id;if(d(r)||(r=Yn()),JK=r,!d(o._version)&&r!=="document")throw new me("The first CZML packet is required to be the document object.");if(e.delete===!0)t.removeById(r);else if(r==="document")hHe(e,o);else{let s=t.getOrCreateEntity(r),a=e.parent;d(a)&&(s.parent=t.getOrCreateEntity(a));for(let c=n.length-1;c>-1;c--)n[c](s,e,t,i)}JK=void 0}function ZHe(e){let t,n=e._documentPacket.clock;if(!d(n)){if(!d(e._clock)){let o=e._entityCollection.computeAvailability();if(!o.start.equals(Be.MINIMUM_VALUE)){let r=o.start,s=o.stop,a=te.secondsDifference(s,r),c=Math.round(a/120);return t=new Dm,t.startTime=te.clone(r),t.stopTime=te.clone(s),t.clockRange=Gr.LOOP_STOP,t.multiplier=c,t.currentTime=te.clone(r),t.clockStep=mo.SYSTEM_CLOCK_MULTIPLIER,e._clock=t,!0}}return!1}d(e._clock)?t=e._clock.clone():(t=new Dm,t.startTime=Be.MINIMUM_VALUE.clone(),t.stopTime=Be.MAXIMUM_VALUE.clone(),t.currentTime=Be.MINIMUM_VALUE.clone(),t.clockRange=Gr.LOOP_STOP,t.clockStep=mo.SYSTEM_CLOCK_MULTIPLIER,t.multiplier=1);let i=or(n.interval);return d(i)&&(t.startTime=i.start,t.stopTime=i.stop),d(n.currentTime)&&(t.currentTime=te.fromIso8601(n.currentTime)),d(n.range)&&(t.clockRange=g(Gr[n.range],Gr.LOOP_STOP)),d(n.step)&&(t.clockStep=g(mo[n.step],mo.SYSTEM_CLOCK_MULTIPLIER)),d(n.multiplier)&&(t.multiplier=n.multiplier),t.equals(e._clock)?!1:(e._clock=t.clone(e._clock),!0)}function Ice(e,t,n,i){n=g(n,g.EMPTY_OBJECT);let o=t,r=n.sourceUri,s=n.credit;if(typeof s=="string"&&(s=new St(s)),e._credit=s,typeof t=="string"||t instanceof Ee){t=Ee.createIfNeeded(t),o=t.fetchJson(),r=g(r,t.clone());let a=e._resourceCredits,c=t.credits;if(d(c)){let l=c.length;for(let u=0;u<l;u++)a.push(c[u])}}return r=Ee.createIfNeeded(r),Rr.setLoading(e,!0),Promise.resolve(o).then(function(a){return GHe(e,a,r,i)}).catch(function(a){return Rr.setLoading(e,!1),e._error.raiseEvent(e,a),console.log(a),Promise.reject(a)})}function GHe(e,t,n,i){Rr.setLoading(e,!0);let o=e._entityCollection;i&&(e._version=void 0,e._documentPacket=new Wce,o.removeAll()),Rl._processCzml(t,o,n,void 0,e);let r=ZHe(e),s=e._documentPacket;return d(s.name)&&e._name!==s.name?(e._name=s.name,r=!0):!d(e._name)&&d(n)&&(e._name=u0(n.getUrlComponent()),r=!0),Rr.setLoading(e,!1),r&&e._changed.raiseEvent(e),e}function Wce(){this.name=void 0,this.clock=void 0}function Rl(e){this._name=e,this._changed=new ye,this._error=new ye,this._isLoading=!1,this._loading=new ye,this._clock=void 0,this._documentPacket=new Wce,this._version=void 0,this._entityCollection=new Es(this),this._entityCluster=new rd,this._credit=void 0,this._resourceCredits=[]}Rl.load=function(e,t){return new Rl().load(e,t)};Object.defineProperties(Rl.prototype,{name:{get:function(){return this._name}},clock:{get:function(){return this._clock}},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading}},changedEvent:{get:function(){return this._changed}},errorEvent:{get:function(){return this._error}},loadingEvent:{get:function(){return this._loading}},show:{get:function(){return this._entityCollection.show},set:function(e){this._entityCollection.show=e}},clustering:{get:function(){return this._entityCluster},set:function(e){this._entityCluster=e}},credit:{get:function(){return this._credit}}});Rl.updaters=[lHe,dHe,uHe,mHe,fHe,pHe,bHe,yHe,QKe,jKe,gHe,xHe,_He,SHe,CHe,tHe,VHe,qKe,LHe,$Ke,RHe,eHe,aHe];Rl.prototype.process=function(e,t){return Ice(this,e,t,!1)};Rl.prototype.load=function(e,t){return Ice(this,e,t,!0)};Rl.prototype.update=function(e){return!0};Rl.processPacketData=ge;Rl.processPositionPacketData=Xce;Rl.processMaterialPacketData=dd;Rl._processCzml=function(e,t,n,i,o){if(i=g(i,Rl.updaters),Array.isArray(e))for(let r=0,s=e.length;r<s;++r)Zce(e[r],t,i,n,o);else Zce(e,t,i,n,o)};var h2=Rl;var YBn=T(S(),1);function Nc(){this._dataSources=[],this._dataSourceAdded=new ye,this._dataSourceRemoved=new ye,this._dataSourceMoved=new ye}Object.defineProperties(Nc.prototype,{length:{get:function(){return this._dataSources.length}},dataSourceAdded:{get:function(){return this._dataSourceAdded}},dataSourceRemoved:{get:function(){return this._dataSourceRemoved}},dataSourceMoved:{get:function(){return this._dataSourceMoved}}});Nc.prototype.add=function(e){let t=this,n=this._dataSources;return Promise.resolve(e).then(function(i){return n===t._dataSources&&(t._dataSources.push(i),t._dataSourceAdded.raiseEvent(t,i)),i})};Nc.prototype.remove=function(e,t){t=g(t,!1);let n=this._dataSources.indexOf(e);return n!==-1?(this._dataSources.splice(n,1),this._dataSourceRemoved.raiseEvent(this,e),t&&typeof e.destroy=="function"&&e.destroy(),!0):!1};Nc.prototype.removeAll=function(e){e=g(e,!1);let t=this._dataSources;for(let n=0,i=t.length;n<i;++n){let o=t[n];this._dataSourceRemoved.raiseEvent(this,o),e&&typeof o.destroy=="function"&&o.destroy()}this._dataSources=[]};Nc.prototype.contains=function(e){return this.indexOf(e)!==-1};Nc.prototype.indexOf=function(e){return this._dataSources.indexOf(e)};Nc.prototype.get=function(e){return this._dataSources[e]};Nc.prototype.getByName=function(e){return this._dataSources.filter(function(t){return t.name===e})};function KN(e,t){return e.indexOf(t)}function Pce(e,t,n){let i=e._dataSources,o=i.length-1;if(t=W.clamp(t,0,o),n=W.clamp(n,0,o),t===n)return;let r=i[t];i[t]=i[n],i[n]=r,e.dataSourceMoved.raiseEvent(r,n,t)}Nc.prototype.raise=function(e){let t=KN(this._dataSources,e);Pce(this,t,t+1)};Nc.prototype.lower=function(e){let t=KN(this._dataSources,e);Pce(this,t,t-1)};Nc.prototype.raiseToTop=function(e){let t=KN(this._dataSources,e);t!==this._dataSources.length-1&&(this._dataSources.splice(t,1),this._dataSources.push(e),this.dataSourceMoved.raiseEvent(e,this._dataSources.length-1,t))};Nc.prototype.lowerToBottom=function(e){let t=KN(this._dataSources,e);t!==0&&(this._dataSources.splice(t,1),this._dataSources.splice(0,0,e),this.dataSourceMoved.raiseEvent(e,0,t))};Nc.prototype.isDestroyed=function(){return!1};Nc.prototype.destroy=function(){return this.removeAll(!0),ue(this)};var f2=Nc;var e$n=T(S(),1);var i3n=T(S(),1);var jBn=T(S(),1);function qs(e){e=g(e,g.EMPTY_OBJECT),this._primitives=[],this._guid=Yn(),this._primitiveAdded=new ye,this._primitiveRemoved=new ye,this._zIndex=void 0,this.show=g(e.show,!0),this.destroyPrimitives=g(e.destroyPrimitives,!0)}Object.defineProperties(qs.prototype,{length:{get:function(){return this._primitives.length}},primitiveAdded:{get:function(){return this._primitiveAdded}},primitiveRemoved:{get:function(){return this._primitiveRemoved}}});qs.prototype.add=function(e,t){let n=d(t),i=e._external=e._external||{},o=i._composites=i._composites||{};return o[this._guid]={collection:this},n?this._primitives.splice(t,0,e):this._primitives.push(e),this._primitiveAdded.raiseEvent(e),e};qs.prototype.remove=function(e){if(this.contains(e)){let t=this._primitives.indexOf(e);if(t!==-1)return this._primitives.splice(t,1),delete e._external._composites[this._guid],this.destroyPrimitives&&e.destroy(),this._primitiveRemoved.raiseEvent(e),!0}return!1};qs.prototype.removeAndDestroy=function(e){let t=this.remove(e);return t&&!this.destroyPrimitives&&e.destroy(),t};qs.prototype.removeAll=function(){let e=this._primitives,t=e.length;for(let n=0;n<t;++n)delete e[n]._external._composites[this._guid],this.destroyPrimitives&&e[n].destroy(),this._primitiveRemoved.raiseEvent(e[n]);this._primitives=[]};qs.prototype.contains=function(e){return!!(d(e)&&e._external&&e._external._composites&&e._external._composites[this._guid])};function HN(e,t){return e._primitives.indexOf(t)}qs.prototype.raise=function(e){if(d(e)){let t=HN(this,e),n=this._primitives;if(t!==n.length-1){let i=n[t];n[t]=n[t+1],n[t+1]=i}}};qs.prototype.raiseToTop=function(e){if(d(e)){let t=HN(this,e),n=this._primitives;t!==n.length-1&&(n.splice(t,1),n.push(e))}};qs.prototype.lower=function(e){if(d(e)){let t=HN(this,e),n=this._primitives;if(t!==0){let i=n[t];n[t]=n[t-1],n[t-1]=i}}};qs.prototype.lowerToBottom=function(e){if(d(e)){let t=HN(this,e),n=this._primitives;t!==0&&(n.splice(t,1),n.unshift(e))}};qs.prototype.get=function(e){return this._primitives[e]};qs.prototype.update=function(e){if(!this.show)return;let t=this._primitives;for(let n=0;n<t.length;++n)t[n].update(e)};qs.prototype.prePassesUpdate=function(e){let t=this._primitives;for(let n=0;n<t.length;++n){let i=t[n];d(i.prePassesUpdate)&&i.prePassesUpdate(e)}};qs.prototype.updateForPass=function(e,t){let n=this._primitives;for(let i=0;i<n.length;++i){let o=n[i];d(o.updateForPass)&&o.updateForPass(e,t)}};qs.prototype.postPassesUpdate=function(e){let t=this._primitives;for(let n=0;n<t.length;++n){let i=t[n];d(i.postPassesUpdate)&&i.postPassesUpdate(e)}};qs.prototype.isDestroyed=function(){return!1};qs.prototype.destroy=function(){return this.removeAll(),ue(this)};var Zl=qs;function rf(){this._length=0,this._collections={},this._collectionsArray=[],this.show=!0}Object.defineProperties(rf.prototype,{length:{get:function(){return this._length}}});rf.prototype.add=function(e,t){t=g(t,0);let n=this._collections[t];if(!d(n)){n=new Zl({destroyPrimitives:!1}),n._zIndex=t,this._collections[t]=n;let i=this._collectionsArray,o=0;for(;o<i.length&&i[o]._zIndex<t;)o++;i.splice(o,0,n)}return n.add(e),this._length++,e._zIndex=t,e};rf.prototype.set=function(e,t){return t===e._zIndex||(this.remove(e,!0),this.add(e,t)),e};rf.prototype.remove=function(e,t){if(this.contains(e)){let n=e._zIndex,i=this._collections[n],o;return t?o=i.remove(e):o=i.removeAndDestroy(e),o&&this._length--,i.length===0&&(this._collectionsArray.splice(this._collectionsArray.indexOf(i),1),this._collections[n]=void 0,i.destroy()),o}return!1};rf.prototype.removeAll=function(){let e=this._collectionsArray;for(let t=0;t<e.length;t++){let n=e[t];n.destroyPrimitives=!0,n.destroy()}this._collections={},this._collectionsArray=[],this._length=0};rf.prototype.contains=function(e){if(!d(e))return!1;let t=this._collections[e._zIndex];return d(t)&&t.contains(e)};rf.prototype.update=function(e){if(!this.show)return;let t=this._collectionsArray;for(let n=0;n<t.length;n++)t[n].update(e)};rf.prototype.isDestroyed=function(){return!1};rf.prototype.destroy=function(){return this.removeAll(),ue(this)};var p2=rf;var T8n=T(S(),1);var c3n=T(S(),1);function JC(e,t){this._primitives=e,this._orderedGroundPrimitives=t,this._dynamicUpdaters=new Tt}JC.prototype.add=function(e,t){this._dynamicUpdaters.set(t.id,t.createDynamicUpdater(this._primitives,this._orderedGroundPrimitives))};JC.prototype.remove=function(e){let t=e.id,n=this._dynamicUpdaters.get(t);d(n)&&(this._dynamicUpdaters.remove(t),n.destroy())};JC.prototype.update=function(e){let t=this._dynamicUpdaters.values;for(let n=0,i=t.length;n<i;n++)t[n].update(e);return!0};JC.prototype.removeAllPrimitives=function(){let e=this._dynamicUpdaters.values;for(let t=0,n=e.length;t<n;t++)e[t].destroy();this._dynamicUpdaters.removeAll()};JC.prototype.getBoundingSphere=function(e,t){return e=this._dynamicUpdaters.get(e.id),d(e)&&d(e.getBoundingSphere)?e.getBoundingSphere(t):lt.FAILED};var T_=JC;var VYn=T(S(),1);var N3n=T(S(),1);var f3n=T(S(),1);var $K={},zN=new h,vce=new h,wce=new Ae,Fce=new $;function QC(e,t,n,i,o,r,s,a,c,l){let u=e+t;h.multiplyByScalar(i,Math.cos(u),zN),h.multiplyByScalar(n,Math.sin(u),vce),h.add(zN,vce,zN);let m=Math.cos(e);m=m*m;let p=Math.sin(e);p=p*p;let f=r/Math.sqrt(s*m+o*p)/a;return Ae.fromAxisAngle(zN,f,wce),$.fromQuaternion(wce,Fce),$.multiplyByVector(Fce,c,l),h.normalize(l,l),h.multiplyByScalar(l,a,l),l}var Ace=new h,Mce=new h,qK=new h,EHe=new h;$K.raisePositionsToHeight=function(e,t,n){let i=t.ellipsoid,o=t.height,r=t.extrudedHeight,s=n?e.length/3*2:e.length/3,a=new Float64Array(s*3),c=e.length,l=n?c:0;for(let u=0;u<c;u+=3){let m=u+1,p=u+2,y=h.fromArray(e,u,Ace);i.scaleToGeodeticSurface(y,y);let f=h.clone(y,Mce),x=i.geodeticSurfaceNormal(y,EHe),_=h.multiplyByScalar(x,o,qK);h.add(y,_,y),n&&(h.multiplyByScalar(x,r,_),h.add(f,_,f),a[u+l]=f.x,a[m+l]=f.y,a[p+l]=f.z),a[u]=y.x,a[m]=y.y,a[p]=y.z}return a};var XHe=new h,IHe=new h,WHe=new h;$K.computeEllipsePositions=function(e,t,n){let i=e.semiMinorAxis,o=e.semiMajorAxis,r=e.rotation,s=e.center,a=e.granularity*8,c=i*i,l=o*o,u=o*i,m=h.magnitude(s),p=h.normalize(s,XHe),y=h.cross(h.UNIT_Z,s,IHe);y=h.normalize(y,y);let f=h.cross(p,y,WHe),x=1+Math.ceil(W.PI_OVER_TWO/a),_=W.PI_OVER_TWO/(x-1),C=W.PI_OVER_TWO-x*_;C<0&&(x-=Math.ceil(Math.abs(C)/_));let V=2*(x*(x+2)),L=t?new Array(V*3):void 0,Z=0,G=Ace,X=Mce,P=x*4*3,v=P-1,F=0,M=n?new Array(P):void 0,b,R,E,I,w;for(C=W.PI_OVER_TWO,G=QC(C,r,f,y,c,u,l,m,p,G),t&&(L[Z++]=G.x,L[Z++]=G.y,L[Z++]=G.z),n&&(M[v--]=G.z,M[v--]=G.y,M[v--]=G.x),C=W.PI_OVER_TWO-_,b=1;b<x+1;++b){if(G=QC(C,r,f,y,c,u,l,m,p,G),X=QC(Math.PI-C,r,f,y,c,u,l,m,p,X),t){for(L[Z++]=G.x,L[Z++]=G.y,L[Z++]=G.z,E=2*b+2,R=1;R<E-1;++R)I=R/(E-1),w=h.lerp(G,X,I,qK),L[Z++]=w.x,L[Z++]=w.y,L[Z++]=w.z;L[Z++]=X.x,L[Z++]=X.y,L[Z++]=X.z}n&&(M[v--]=G.z,M[v--]=G.y,M[v--]=G.x,M[F++]=X.x,M[F++]=X.y,M[F++]=X.z),C=W.PI_OVER_TWO-(b+1)*_}for(b=x;b>1;--b){if(C=W.PI_OVER_TWO-(b-1)*_,G=QC(-C,r,f,y,c,u,l,m,p,G),X=QC(C+Math.PI,r,f,y,c,u,l,m,p,X),t){for(L[Z++]=G.x,L[Z++]=G.y,L[Z++]=G.z,E=2*(b-1)+2,R=1;R<E-1;++R)I=R/(E-1),w=h.lerp(G,X,I,qK),L[Z++]=w.x,L[Z++]=w.y,L[Z++]=w.z;L[Z++]=X.x,L[Z++]=X.y,L[Z++]=X.z}n&&(M[v--]=G.z,M[v--]=G.y,M[v--]=G.x,M[F++]=X.x,M[F++]=X.y,M[F++]=X.z)}C=W.PI_OVER_TWO,G=QC(-C,r,f,y,c,u,l,m,p,G);let N={};return t&&(L[Z++]=G.x,L[Z++]=G.y,L[Z++]=G.z,N.positions=L,N.numPts=x),n&&(M[v--]=G.z,M[v--]=G.y,M[v--]=G.x,N.outerPositions=M),N};var Gl=$K;var jC=new h,eH=new h,tH=new h,Nce=new h,ds=new D,Uce=new $,PHe=new $,nH=new Ae,kce=new h,Dce=new h,Bce=new h,jN=new he,Yce=new h,Oce=new D,Kce=new D;function Hce(e,t,n){let i=t.vertexFormat,o=t.center,r=t.semiMajorAxis,s=t.semiMinorAxis,a=t.ellipsoid,c=t.stRotation,l=n?e.length/3*2:e.length/3,u=t.shadowVolume,m=i.st?new Float32Array(l*2):void 0,p=i.normal?new Float32Array(l*3):void 0,y=i.tangent?new Float32Array(l*3):void 0,f=i.bitangent?new Float32Array(l*3):void 0,x=u?new Float32Array(l*3):void 0,_=0,C=kce,V=Dce,L=Bce,Z=new Zi(a),G=Z.project(a.cartesianToCartographic(o,jN),Yce),X=a.scaleToGeodeticSurface(o,jC);a.geodeticSurfaceNormal(X,X);let P=Uce,v=PHe;if(c!==0){let w=Ae.fromAxisAngle(X,c,nH);P=$.fromQuaternion(w,P),w=Ae.fromAxisAngle(X,-c,nH),v=$.fromQuaternion(w,v)}else P=$.clone($.IDENTITY,P),v=$.clone($.IDENTITY,v);let F=D.fromElements(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Oce),M=D.fromElements(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Kce),b=e.length,R=n?b:0,E=R/3*2;for(let w=0;w<b;w+=3){let N=w+1,B=w+2,k=h.fromArray(e,w,jC);if(i.st){let O=$.multiplyByVector(P,k,eH),U=Z.project(a.cartesianToCartographic(O,jN),tH);h.subtract(U,G,U),ds.x=(U.x+r)/(2*r),ds.y=(U.y+s)/(2*s),F.x=Math.min(ds.x,F.x),F.y=Math.min(ds.y,F.y),M.x=Math.max(ds.x,M.x),M.y=Math.max(ds.y,M.y),n&&(m[_+E]=ds.x,m[_+1+E]=ds.y),m[_++]=ds.x,m[_++]=ds.y}(i.normal||i.tangent||i.bitangent||u)&&(C=a.geodeticSurfaceNormal(k,C),u&&(x[w+R]=-C.x,x[N+R]=-C.y,x[B+R]=-C.z),(i.normal||i.tangent||i.bitangent)&&((i.tangent||i.bitangent)&&(V=h.normalize(h.cross(h.UNIT_Z,C,V),V),$.multiplyByVector(v,V,V)),i.normal&&(p[w]=C.x,p[N]=C.y,p[B]=C.z,n&&(p[w+R]=-C.x,p[N+R]=-C.y,p[B+R]=-C.z)),i.tangent&&(y[w]=V.x,y[N]=V.y,y[B]=V.z,n&&(y[w+R]=-V.x,y[N+R]=-V.y,y[B+R]=-V.z)),i.bitangent&&(L=h.normalize(h.cross(C,V,L),L),f[w]=L.x,f[N]=L.y,f[B]=L.z,n&&(f[w+R]=L.x,f[N+R]=L.y,f[B+R]=L.z))))}if(i.st){b=m.length;for(let w=0;w<b;w+=2)m[w]=(m[w]-F.x)/(M.x-F.x),m[w+1]=(m[w+1]-F.y)/(M.y-F.y)}let I=new hn;if(i.position){let w=Gl.raisePositionsToHeight(e,t,n);I.position=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:w})}if(i.st&&(I.st=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:m})),i.normal&&(I.normal=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:p})),i.tangent&&(I.tangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:y})),i.bitangent&&(I.bitangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:f})),u&&(I.extrudeDirection=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:x})),n&&d(t.offsetAttribute)){let w=new Uint8Array(l);if(t.offsetAttribute===on.TOP)w=w.fill(1,0,l/2);else{let N=t.offsetAttribute===on.NONE?0:1;w=w.fill(N)}I.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:w})}return I}function zce(e){let t=new Array(12*(e*(e+1))-6),n=0,i,o,r,s,a;for(i=0,r=1,s=0;s<3;s++)t[n++]=r++,t[n++]=i,t[n++]=r;for(s=2;s<e+1;++s){for(r=s*(s+1)-1,i=(s-1)*s-1,t[n++]=r++,t[n++]=i,t[n++]=r,o=2*s,a=0;a<o-1;++a)t[n++]=r,t[n++]=i++,t[n++]=i,t[n++]=r++,t[n++]=i,t[n++]=r;t[n++]=r++,t[n++]=i,t[n++]=r}for(o=e*2,++r,++i,s=0;s<o-1;++s)t[n++]=r,t[n++]=i++,t[n++]=i,t[n++]=r++,t[n++]=i,t[n++]=r;for(t[n++]=r,t[n++]=i++,t[n++]=i,t[n++]=r++,t[n++]=i++,t[n++]=i,++i,s=e-1;s>1;--s){for(t[n++]=i++,t[n++]=i,t[n++]=r,o=2*s,a=0;a<o-1;++a)t[n++]=r,t[n++]=i++,t[n++]=i,t[n++]=r++,t[n++]=i,t[n++]=r;t[n++]=i++,t[n++]=i++,t[n++]=r++}for(s=0;s<3;s++)t[n++]=i++,t[n++]=i,t[n++]=r;return t}var S_=new h;function vHe(e){let t=e.center;S_=h.multiplyByScalar(e.ellipsoid.geodeticSurfaceNormal(t,S_),e.height,S_),S_=h.add(t,S_,S_);let n=new ce(S_,e.semiMajorAxis),i=Gl.computeEllipsePositions(e,!0,!1),o=i.positions,r=i.numPts,s=Hce(o,e,!1),a=zce(r);return a=Ue.createTypedArray(o.length/3,a),{boundingSphere:n,attributes:s,indices:a}}function wHe(e,t){let n=t.vertexFormat,i=t.center,o=t.semiMajorAxis,r=t.semiMinorAxis,s=t.ellipsoid,a=t.height,c=t.extrudedHeight,l=t.stRotation,u=e.length/3*2,m=new Float64Array(u*3),p=n.st?new Float32Array(u*2):void 0,y=n.normal?new Float32Array(u*3):void 0,f=n.tangent?new Float32Array(u*3):void 0,x=n.bitangent?new Float32Array(u*3):void 0,_=t.shadowVolume,C=_?new Float32Array(u*3):void 0,V=0,L=kce,Z=Dce,G=Bce,X=new Zi(s),P=X.project(s.cartesianToCartographic(i,jN),Yce),v=s.scaleToGeodeticSurface(i,jC);s.geodeticSurfaceNormal(v,v);let F=Ae.fromAxisAngle(v,l,nH),M=$.fromQuaternion(F,Uce),b=D.fromElements(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Oce),R=D.fromElements(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Kce),E=e.length,I=E/3*2;for(let N=0;N<E;N+=3){let B=N+1,k=N+2,O=h.fromArray(e,N,jC),U;if(n.st){let z=$.multiplyByVector(M,O,eH),ee=X.project(s.cartesianToCartographic(z,jN),tH);h.subtract(ee,P,ee),ds.x=(ee.x+o)/(2*o),ds.y=(ee.y+r)/(2*r),b.x=Math.min(ds.x,b.x),b.y=Math.min(ds.y,b.y),R.x=Math.max(ds.x,R.x),R.y=Math.max(ds.y,R.y),p[V+I]=ds.x,p[V+1+I]=ds.y,p[V++]=ds.x,p[V++]=ds.y}O=s.scaleToGeodeticSurface(O,O),U=h.clone(O,eH),L=s.geodeticSurfaceNormal(O,L),_&&(C[N+E]=-L.x,C[B+E]=-L.y,C[k+E]=-L.z);let J=h.multiplyByScalar(L,a,Nce);if(O=h.add(O,J,O),J=h.multiplyByScalar(L,c,J),U=h.add(U,J,U),n.position&&(m[N+E]=U.x,m[B+E]=U.y,m[k+E]=U.z,m[N]=O.x,m[B]=O.y,m[k]=O.z),n.normal||n.tangent||n.bitangent){G=h.clone(L,G);let z=h.fromArray(e,(N+3)%E,Nce);h.subtract(z,O,z);let ee=h.subtract(U,O,tH);L=h.normalize(h.cross(ee,z,L),L),n.normal&&(y[N]=L.x,y[B]=L.y,y[k]=L.z,y[N+E]=L.x,y[B+E]=L.y,y[k+E]=L.z),n.tangent&&(Z=h.normalize(h.cross(G,L,Z),Z),f[N]=Z.x,f[B]=Z.y,f[k]=Z.z,f[N+E]=Z.x,f[N+1+E]=Z.y,f[N+2+E]=Z.z),n.bitangent&&(x[N]=G.x,x[B]=G.y,x[k]=G.z,x[N+E]=G.x,x[B+E]=G.y,x[k+E]=G.z)}}if(n.st){E=p.length;for(let N=0;N<E;N+=2)p[N]=(p[N]-b.x)/(R.x-b.x),p[N+1]=(p[N+1]-b.y)/(R.y-b.y)}let w=new hn;if(n.position&&(w.position=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:m})),n.st&&(w.st=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:p})),n.normal&&(w.normal=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:y})),n.tangent&&(w.tangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:f})),n.bitangent&&(w.bitangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:x})),_&&(w.extrudeDirection=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:C})),d(t.offsetAttribute)){let N=new Uint8Array(u);if(t.offsetAttribute===on.TOP)N=N.fill(1,0,u/2);else{let B=t.offsetAttribute===on.NONE?0:1;N=N.fill(B)}w.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:N})}return w}function FHe(e){let t=e.length/3,n=Ue.createTypedArray(t,t*6),i=0;for(let o=0;o<t;o++){let r=o,s=o+t,a=(r+1)%t,c=a+t;n[i++]=r,n[i++]=s,n[i++]=a,n[i++]=a,n[i++]=s,n[i++]=c}return n}var JN=new ce,QN=new ce;function AHe(e){let t=e.center,n=e.ellipsoid,i=e.semiMajorAxis,o=h.multiplyByScalar(n.geodeticSurfaceNormal(t,jC),e.height,jC);JN.center=h.add(t,o,JN.center),JN.radius=i,o=h.multiplyByScalar(n.geodeticSurfaceNormal(t,o),e.extrudedHeight,o),QN.center=h.add(t,o,QN.center),QN.radius=i;let r=Gl.computeEllipsePositions(e,!0,!0),s=r.positions,a=r.numPts,c=r.outerPositions,l=ce.union(JN,QN),u=Hce(s,e,!0),m=zce(a),p=m.length;m.length=p*2;let y=s.length/3;for(let Z=0;Z<p;Z+=3)m[Z+p]=m[Z+2]+y,m[Z+1+p]=m[Z+1]+y,m[Z+2+p]=m[Z]+y;let f=Ue.createTypedArray(y*2/3,m),x=new dt({attributes:u,indices:f,primitiveType:Fe.TRIANGLES}),_=wHe(c,e);m=FHe(c);let C=Ue.createTypedArray(c.length*2/3,m),V=new dt({attributes:_,indices:C,primitiveType:Fe.TRIANGLES}),L=An.combineInstances([new _t({geometry:x}),new _t({geometry:V})]);return{boundingSphere:l,attributes:L[0].attributes,indices:L[0].indices}}function Jce(e,t,n,i,o,r,s){let c=Gl.computeEllipsePositions({center:e,semiMajorAxis:t,semiMinorAxis:n,rotation:i,granularity:o},!1,!0).outerPositions,l=c.length/3,u=new Array(l);for(let p=0;p<l;++p)u[p]=h.fromArray(c,p*3);let m=de.fromCartesianArray(u,r,s);return m.width>W.PI&&(m.north=m.north>0?W.PI_OVER_TWO-W.EPSILON7:m.north,m.south=m.south<0?W.EPSILON7-W.PI_OVER_TWO:m.south,m.east=W.PI,m.west=-W.PI),m}function af(e){e=g(e,g.EMPTY_OBJECT);let t=e.center,n=g(e.ellipsoid,re.WGS84),i=e.semiMajorAxis,o=e.semiMinorAxis,r=g(e.granularity,W.RADIANS_PER_DEGREE),s=g(e.vertexFormat,We.DEFAULT),a=g(e.height,0),c=g(e.extrudedHeight,a);this._center=h.clone(t),this._semiMajorAxis=i,this._semiMinorAxis=o,this._ellipsoid=re.clone(n),this._rotation=g(e.rotation,0),this._stRotation=g(e.stRotation,0),this._height=Math.max(c,a),this._granularity=r,this._vertexFormat=We.clone(s),this._extrudedHeight=Math.min(c,a),this._shadowVolume=g(e.shadowVolume,!1),this._workerName="createEllipseGeometry",this._offsetAttribute=e.offsetAttribute,this._rectangle=void 0,this._textureCoordinateRotationPoints=void 0}af.packedLength=h.packedLength+re.packedLength+We.packedLength+9;af.pack=function(e,t,n){return n=g(n,0),h.pack(e._center,t,n),n+=h.packedLength,re.pack(e._ellipsoid,t,n),n+=re.packedLength,We.pack(e._vertexFormat,t,n),n+=We.packedLength,t[n++]=e._semiMajorAxis,t[n++]=e._semiMinorAxis,t[n++]=e._rotation,t[n++]=e._stRotation,t[n++]=e._height,t[n++]=e._granularity,t[n++]=e._extrudedHeight,t[n++]=e._shadowVolume?1:0,t[n]=g(e._offsetAttribute,-1),t};var Qce=new h,jce=new re,qce=new We,sf={center:Qce,ellipsoid:jce,vertexFormat:qce,semiMajorAxis:void 0,semiMinorAxis:void 0,rotation:void 0,stRotation:void 0,height:void 0,granularity:void 0,extrudedHeight:void 0,shadowVolume:void 0,offsetAttribute:void 0};af.unpack=function(e,t,n){t=g(t,0);let i=h.unpack(e,t,Qce);t+=h.packedLength;let o=re.unpack(e,t,jce);t+=re.packedLength;let r=We.unpack(e,t,qce);t+=We.packedLength;let s=e[t++],a=e[t++],c=e[t++],l=e[t++],u=e[t++],m=e[t++],p=e[t++],y=e[t++]===1,f=e[t];return d(n)?(n._center=h.clone(i,n._center),n._ellipsoid=re.clone(o,n._ellipsoid),n._vertexFormat=We.clone(r,n._vertexFormat),n._semiMajorAxis=s,n._semiMinorAxis=a,n._rotation=c,n._stRotation=l,n._height=u,n._granularity=m,n._extrudedHeight=p,n._shadowVolume=y,n._offsetAttribute=f===-1?void 0:f,n):(sf.height=u,sf.extrudedHeight=p,sf.granularity=m,sf.stRotation=l,sf.rotation=c,sf.semiMajorAxis=s,sf.semiMinorAxis=a,sf.shadowVolume=y,sf.offsetAttribute=f===-1?void 0:f,new af(sf))};af.computeRectangle=function(e,t){e=g(e,g.EMPTY_OBJECT);let n=e.center,i=g(e.ellipsoid,re.WGS84),o=e.semiMajorAxis,r=e.semiMinorAxis,s=g(e.granularity,W.RADIANS_PER_DEGREE),a=g(e.rotation,0);return Jce(n,o,r,a,s,i,t)};af.createGeometry=function(e){if(e._semiMajorAxis<=0||e._semiMinorAxis<=0)return;let t=e._height,n=e._extrudedHeight,i=!W.equalsEpsilon(t,n,0,W.EPSILON2);e._center=e._ellipsoid.scaleToGeodeticSurface(e._center,e._center);let o={center:e._center,semiMajorAxis:e._semiMajorAxis,semiMinorAxis:e._semiMinorAxis,ellipsoid:e._ellipsoid,rotation:e._rotation,height:t,granularity:e._granularity,vertexFormat:e._vertexFormat,stRotation:e._stRotation},r;if(i)o.extrudedHeight=n,o.shadowVolume=e._shadowVolume,o.offsetAttribute=e._offsetAttribute,r=AHe(o);else if(r=vHe(o),d(e._offsetAttribute)){let s=r.attributes.position.values.length,a=e._offsetAttribute===on.NONE?0:1,c=new Uint8Array(s/3).fill(a);r.attributes.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:c})}return new dt({attributes:r.attributes,indices:r.indices,primitiveType:Fe.TRIANGLES,boundingSphere:r.boundingSphere,offsetAttribute:e._offsetAttribute})};af.createShadowVolume=function(e,t,n){let i=e._granularity,o=e._ellipsoid,r=t(i,o),s=n(i,o);return new af({center:e._center,semiMajorAxis:e._semiMajorAxis,semiMinorAxis:e._semiMinorAxis,ellipsoid:o,rotation:e._rotation,stRotation:e._stRotation,granularity:i,extrudedHeight:r,height:s,vertexFormat:We.POSITION_ONLY,shadowVolume:!0})};function MHe(e){let t=-e._stRotation;if(t===0)return[0,0,0,1,1,0];let i=Gl.computeEllipsePositions({center:e._center,semiMajorAxis:e._semiMajorAxis,semiMinorAxis:e._semiMinorAxis,rotation:e._rotation,granularity:e._granularity},!1,!0).outerPositions,o=i.length/3,r=new Array(o);for(let c=0;c<o;++c)r[c]=h.fromArray(i,c*3);let s=e._ellipsoid,a=e.rectangle;return dt._textureCoordinateRotationPoints(r,t,s,a)}Object.defineProperties(af.prototype,{rectangle:{get:function(){return d(this._rectangle)||(this._rectangle=Jce(this._center,this._semiMajorAxis,this._semiMinorAxis,this._rotation,this._granularity,this._ellipsoid)),this._rectangle}},textureCoordinateRotationPoints:{get:function(){return d(this._textureCoordinateRotationPoints)||(this._textureCoordinateRotationPoints=MHe(this)),this._textureCoordinateRotationPoints}}});var Uc=af;var tYn=T(S(),1);var $ce=new h,C_=new h;function NHe(e){let t=e.center;C_=h.multiplyByScalar(e.ellipsoid.geodeticSurfaceNormal(t,C_),e.height,C_),C_=h.add(t,C_,C_);let n=new ce(C_,e.semiMajorAxis),i=Gl.computeEllipsePositions(e,!1,!0).outerPositions,o=new hn({position:new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:Gl.raisePositionsToHeight(i,e,!1)})}),r=i.length/3,s=Ue.createTypedArray(r,r*2),a=0;for(let c=0;c<r;++c)s[a++]=c,s[a++]=(c+1)%r;return{boundingSphere:n,attributes:o,indices:s}}var qN=new ce,$N=new ce;function UHe(e){let t=e.center,n=e.ellipsoid,i=e.semiMajorAxis,o=h.multiplyByScalar(n.geodeticSurfaceNormal(t,$ce),e.height,$ce);qN.center=h.add(t,o,qN.center),qN.radius=i,o=h.multiplyByScalar(n.geodeticSurfaceNormal(t,o),e.extrudedHeight,o),$N.center=h.add(t,o,$N.center),$N.radius=i;let r=Gl.computeEllipsePositions(e,!1,!0).outerPositions,s=new hn({position:new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:Gl.raisePositionsToHeight(r,e,!0)})});r=s.position.values;let a=ce.union(qN,$N),c=r.length/3;if(d(e.offsetAttribute)){let f=new Uint8Array(c);if(e.offsetAttribute===on.TOP)f=f.fill(1,0,c/2);else{let x=e.offsetAttribute===on.NONE?0:1;f=f.fill(x)}s.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:f})}let l=g(e.numberOfVerticalLines,16);l=W.clamp(l,0,c/2);let u=Ue.createTypedArray(c,c*2+l*2);c/=2;let m=0,p;for(p=0;p<c;++p)u[m++]=p,u[m++]=(p+1)%c,u[m++]=p+c,u[m++]=(p+1)%c+c;let y;if(l>0){let f=Math.min(l,c);y=Math.round(c/f);let x=Math.min(y*l,c);for(p=0;p<x;p+=y)u[m++]=p,u[m++]=p+c}return{boundingSphere:a,attributes:s,indices:u}}function qC(e){e=g(e,g.EMPTY_OBJECT);let t=e.center,n=g(e.ellipsoid,re.WGS84),i=e.semiMajorAxis,o=e.semiMinorAxis,r=g(e.granularity,W.RADIANS_PER_DEGREE),s=g(e.height,0),a=g(e.extrudedHeight,s);this._center=h.clone(t),this._semiMajorAxis=i,this._semiMinorAxis=o,this._ellipsoid=re.clone(n),this._rotation=g(e.rotation,0),this._height=Math.max(a,s),this._granularity=r,this._extrudedHeight=Math.min(a,s),this._numberOfVerticalLines=Math.max(g(e.numberOfVerticalLines,16),0),this._offsetAttribute=e.offsetAttribute,this._workerName="createEllipseOutlineGeometry"}qC.packedLength=h.packedLength+re.packedLength+8;qC.pack=function(e,t,n){return n=g(n,0),h.pack(e._center,t,n),n+=h.packedLength,re.pack(e._ellipsoid,t,n),n+=re.packedLength,t[n++]=e._semiMajorAxis,t[n++]=e._semiMinorAxis,t[n++]=e._rotation,t[n++]=e._height,t[n++]=e._granularity,t[n++]=e._extrudedHeight,t[n++]=e._numberOfVerticalLines,t[n]=g(e._offsetAttribute,-1),t};var ele=new h,tle=new re,y0={center:ele,ellipsoid:tle,semiMajorAxis:void 0,semiMinorAxis:void 0,rotation:void 0,height:void 0,granularity:void 0,extrudedHeight:void 0,numberOfVerticalLines:void 0,offsetAttribute:void 0};qC.unpack=function(e,t,n){t=g(t,0);let i=h.unpack(e,t,ele);t+=h.packedLength;let o=re.unpack(e,t,tle);t+=re.packedLength;let r=e[t++],s=e[t++],a=e[t++],c=e[t++],l=e[t++],u=e[t++],m=e[t++],p=e[t];return d(n)?(n._center=h.clone(i,n._center),n._ellipsoid=re.clone(o,n._ellipsoid),n._semiMajorAxis=r,n._semiMinorAxis=s,n._rotation=a,n._height=c,n._granularity=l,n._extrudedHeight=u,n._numberOfVerticalLines=m,n._offsetAttribute=p===-1?void 0:p,n):(y0.height=c,y0.extrudedHeight=u,y0.granularity=l,y0.rotation=a,y0.semiMajorAxis=r,y0.semiMinorAxis=s,y0.numberOfVerticalLines=m,y0.offsetAttribute=p===-1?void 0:p,new qC(y0))};qC.createGeometry=function(e){if(e._semiMajorAxis<=0||e._semiMinorAxis<=0)return;let t=e._height,n=e._extrudedHeight,i=!W.equalsEpsilon(t,n,0,W.EPSILON2);e._center=e._ellipsoid.scaleToGeodeticSurface(e._center,e._center);let o={center:e._center,semiMajorAxis:e._semiMajorAxis,semiMinorAxis:e._semiMinorAxis,ellipsoid:e._ellipsoid,rotation:e._rotation,height:t,granularity:e._granularity,numberOfVerticalLines:e._numberOfVerticalLines},r;if(i)o.extrudedHeight=n,o.offsetAttribute=e._offsetAttribute,r=UHe(o);else if(r=NHe(o),d(e._offsetAttribute)){let s=r.attributes.position.values.length,a=e._offsetAttribute===on.NONE?0:1,c=new Uint8Array(s/3).fill(a);r.attributes.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:c})}return new dt({attributes:r.attributes,indices:r.indices,primitiveType:Fe.LINES,boundingSphere:r.boundingSphere,offsetAttribute:e._offsetAttribute})};var ud=qC;var nle=new Y,ile=h.ZERO,ole=new h,rle=new de;function kHe(e){this.id=e,this.vertexFormat=void 0,this.center=void 0,this.semiMajorAxis=void 0,this.semiMinorAxis=void 0,this.rotation=void 0,this.height=void 0,this.extrudedHeight=void 0,this.granularity=void 0,this.stRotation=void 0,this.numberOfVerticalLines=void 0,this.offsetAttribute=void 0}function Om(e,t){Hn.call(this,{entity:e,scene:t,geometryOptions:new kHe(e),geometryPropertyName:"ellipse",observedPropertyNames:["availability","position","ellipse"]}),this._onEntityPropertyChanged(e,"ellipse",e.ellipse,void 0)}d(Object.create)&&(Om.prototype=Object.create(Hn.prototype),Om.prototype.constructor=Om);Om.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i={show:new gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),distanceDisplayCondition:Un.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};if(this._materialProperty instanceof At){let o;d(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(o=this._materialProperty.color.getValue(e,nle)),d(o)||(o=Y.WHITE),i.color=Ut.fromColor(o)}return d(this._options.offsetAttribute)&&(i.offset=zi.fromCartesian3(H.getValueOrDefault(this._terrainOffsetProperty,e,ile,ole))),new _t({id:t,geometry:new Uc(this._options),attributes:i})};Om.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=H.getValueOrDefault(this._outlineColorProperty,e,Y.BLACK,nle),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Ut.fromColor(i),distanceDisplayCondition:Un.fromDistanceDisplayCondition(o),offset:void 0};return d(this._options.offsetAttribute)&&(r.offset=zi.fromCartesian3(H.getValueOrDefault(this._terrainOffsetProperty,e,ile,ole))),new _t({id:t,geometry:new ud(this._options),attributes:r})};Om.prototype._computeCenter=function(e,t){return H.getValueOrUndefined(this._entity.position,e,t)};Om.prototype._isHidden=function(e,t){let n=e.position;return!d(n)||!d(t.semiMajorAxis)||!d(t.semiMinorAxis)||ii.prototype._isHidden.call(this,e,t)};Om.prototype._isDynamic=function(e,t){return!e.position.isConstant||!t.semiMajorAxis.isConstant||!t.semiMinorAxis.isConstant||!H.isConstant(t.rotation)||!H.isConstant(t.height)||!H.isConstant(t.extrudedHeight)||!H.isConstant(t.granularity)||!H.isConstant(t.stRotation)||!H.isConstant(t.outlineWidth)||!H.isConstant(t.numberOfVerticalLines)||!H.isConstant(t.zIndex)||this._onTerrain&&!H.isConstant(this._materialProperty)&&!(this._materialProperty instanceof At)};Om.prototype._setStaticOptions=function(e,t){let n=H.getValueOrUndefined(t.height,Be.MINIMUM_VALUE),i=H.getValueOrDefault(t.heightReference,Be.MINIMUM_VALUE,Oe.NONE),o=H.getValueOrUndefined(t.extrudedHeight,Be.MINIMUM_VALUE),r=H.getValueOrDefault(t.extrudedHeightReference,Be.MINIMUM_VALUE,Oe.NONE);d(o)&&!d(n)&&(n=0);let s=this._options;s.vertexFormat=this._materialProperty instanceof At?rn.VERTEX_FORMAT:so.MaterialSupport.TEXTURED.vertexFormat,s.center=e.position.getValue(Be.MINIMUM_VALUE,s.center),s.semiMajorAxis=t.semiMajorAxis.getValue(Be.MINIMUM_VALUE,s.semiMajorAxis),s.semiMinorAxis=t.semiMinorAxis.getValue(Be.MINIMUM_VALUE,s.semiMinorAxis),s.rotation=H.getValueOrUndefined(t.rotation,Be.MINIMUM_VALUE),s.granularity=H.getValueOrUndefined(t.granularity,Be.MINIMUM_VALUE),s.stRotation=H.getValueOrUndefined(t.stRotation,Be.MINIMUM_VALUE),s.numberOfVerticalLines=H.getValueOrUndefined(t.numberOfVerticalLines,Be.MINIMUM_VALUE),s.offsetAttribute=Hn.computeGeometryOffsetAttribute(n,i,o,r),s.height=Hn.getGeometryHeight(n,i),o=Hn.getGeometryExtrudedHeight(o,r),o===Hn.CLAMP_TO_GROUND&&(o=li.getMinimumMaximumHeights(Uc.computeRectangle(s,rle)).minimumTerrainHeight),s.extrudedHeight=o};Om.DynamicGeometryUpdater=$C;function $C(e,t,n){ni.call(this,e,t,n)}d(Object.create)&&($C.prototype=Object.create(ni.prototype),$C.prototype.constructor=$C);$C.prototype._isHidden=function(e,t,n){let i=this._options;return!d(i.center)||!d(i.semiMajorAxis)||!d(i.semiMinorAxis)||ni.prototype._isHidden.call(this,e,t,n)};$C.prototype._setOptions=function(e,t,n){let i=this._options,o=H.getValueOrUndefined(t.height,n),r=H.getValueOrDefault(t.heightReference,n,Oe.NONE),s=H.getValueOrUndefined(t.extrudedHeight,n),a=H.getValueOrDefault(t.extrudedHeightReference,n,Oe.NONE);d(s)&&!d(o)&&(o=0),i.center=H.getValueOrUndefined(e.position,n,i.center),i.semiMajorAxis=H.getValueOrUndefined(t.semiMajorAxis,n),i.semiMinorAxis=H.getValueOrUndefined(t.semiMinorAxis,n),i.rotation=H.getValueOrUndefined(t.rotation,n),i.granularity=H.getValueOrUndefined(t.granularity,n),i.stRotation=H.getValueOrUndefined(t.stRotation,n),i.numberOfVerticalLines=H.getValueOrUndefined(t.numberOfVerticalLines,n),i.offsetAttribute=Hn.computeGeometryOffsetAttribute(o,r,s,a),i.height=Hn.getGeometryHeight(o,r),s=Hn.getGeometryExtrudedHeight(s,a),s===Hn.CLAMP_TO_GROUND&&(s=li.getMinimumMaximumHeights(Uc.computeRectangle(i,rle)).minimumTerrainHeight),i.extrudedHeight=s};var b2=Om;var pOn=T(S(),1);var kYn=T(S(),1);var DHe=new h,BHe=new h,YHe=new h,OHe=new h,KHe=new h,HHe=new h(1,1,1),sle=Math.cos,ale=Math.sin;function g0(e){e=g(e,g.EMPTY_OBJECT);let t=g(e.radii,HHe),n=g(e.innerRadii,t),i=g(e.minimumClock,0),o=g(e.maximumClock,W.TWO_PI),r=g(e.minimumCone,0),s=g(e.maximumCone,W.PI),a=Math.round(g(e.stackPartitions,64)),c=Math.round(g(e.slicePartitions,64)),l=g(e.vertexFormat,We.DEFAULT);this._radii=h.clone(t),this._innerRadii=h.clone(n),this._minimumClock=i,this._maximumClock=o,this._minimumCone=r,this._maximumCone=s,this._stackPartitions=a,this._slicePartitions=c,this._vertexFormat=We.clone(l),this._offsetAttribute=e.offsetAttribute,this._workerName="createEllipsoidGeometry"}g0.packedLength=2*h.packedLength+We.packedLength+7;g0.pack=function(e,t,n){return n=g(n,0),h.pack(e._radii,t,n),n+=h.packedLength,h.pack(e._innerRadii,t,n),n+=h.packedLength,We.pack(e._vertexFormat,t,n),n+=We.packedLength,t[n++]=e._minimumClock,t[n++]=e._maximumClock,t[n++]=e._minimumCone,t[n++]=e._maximumCone,t[n++]=e._stackPartitions,t[n++]=e._slicePartitions,t[n]=g(e._offsetAttribute,-1),t};var cle=new h,lle=new h,dle=new We,yy={radii:cle,innerRadii:lle,vertexFormat:dle,minimumClock:void 0,maximumClock:void 0,minimumCone:void 0,maximumCone:void 0,stackPartitions:void 0,slicePartitions:void 0,offsetAttribute:void 0};g0.unpack=function(e,t,n){t=g(t,0);let i=h.unpack(e,t,cle);t+=h.packedLength;let o=h.unpack(e,t,lle);t+=h.packedLength;let r=We.unpack(e,t,dle);t+=We.packedLength;let s=e[t++],a=e[t++],c=e[t++],l=e[t++],u=e[t++],m=e[t++],p=e[t];return d(n)?(n._radii=h.clone(i,n._radii),n._innerRadii=h.clone(o,n._innerRadii),n._vertexFormat=We.clone(r,n._vertexFormat),n._minimumClock=s,n._maximumClock=a,n._minimumCone=c,n._maximumCone=l,n._stackPartitions=u,n._slicePartitions=m,n._offsetAttribute=p===-1?void 0:p,n):(yy.minimumClock=s,yy.maximumClock=a,yy.minimumCone=c,yy.maximumCone=l,yy.stackPartitions=u,yy.slicePartitions=m,yy.offsetAttribute=p===-1?void 0:p,new g0(yy))};g0.createGeometry=function(e){let t=e._radii;if(t.x<=0||t.y<=0||t.z<=0)return;let n=e._innerRadii;if(n.x<=0||n.y<=0||n.z<=0)return;let i=e._minimumClock,o=e._maximumClock,r=e._minimumCone,s=e._maximumCone,a=e._vertexFormat,c=e._slicePartitions+1,l=e._stackPartitions+1;c=Math.round(c*Math.abs(o-i)/W.TWO_PI),l=Math.round(l*Math.abs(s-r)/W.PI),c<2&&(c=2),l<2&&(l=2);let u,m,p=0,y=[r],f=[i];for(u=0;u<l;u++)y.push(r+u*(s-r)/(l-1));for(y.push(s),m=0;m<c;m++)f.push(i+m*(o-i)/(c-1));f.push(o);let x=y.length,_=f.length,C=0,V=1,L=n.x!==t.x||n.y!==t.y||n.z!==t.z,Z=!1,G=!1,X=!1;L&&(V=2,r>0&&(Z=!0,C+=c-1),s<Math.PI&&(G=!0,C+=c-1),(o-i)%W.TWO_PI?(X=!0,C+=(l-1)*2+1):C+=1);let P=_*x*V,v=new Float64Array(P*3),F=new Array(P).fill(!1),M=new Array(P).fill(!1),b=c*l*V,R=6*(b+C+1-(c+l)*V),E=Ue.createTypedArray(b,R),I=a.normal?new Float32Array(P*3):void 0,w=a.tangent?new Float32Array(P*3):void 0,N=a.bitangent?new Float32Array(P*3):void 0,B=a.st?new Float32Array(P*2):void 0,k=new Array(x),O=new Array(x);for(u=0;u<x;u++)k[u]=ale(y[u]),O[u]=sle(y[u]);let U=new Array(_),J=new Array(_);for(m=0;m<_;m++)J[m]=sle(f[m]),U[m]=ale(f[m]);for(u=0;u<x;u++)for(m=0;m<_;m++)v[p++]=t.x*k[u]*J[m],v[p++]=t.y*k[u]*U[m],v[p++]=t.z*O[u];let z=P/2;if(L)for(u=0;u<x;u++)for(m=0;m<_;m++)v[p++]=n.x*k[u]*J[m],v[p++]=n.y*k[u]*U[m],v[p++]=n.z*O[u],F[z]=!0,u>0&&u!==x-1&&m!==0&&m!==_-1&&(M[z]=!0),z++;p=0;let ee,K;for(u=1;u<x-2;u++)for(ee=u*_,K=(u+1)*_,m=1;m<_-2;m++)E[p++]=K+m,E[p++]=K+m+1,E[p++]=ee+m+1,E[p++]=K+m,E[p++]=ee+m+1,E[p++]=ee+m;if(L){let ke=x*_;for(u=1;u<x-2;u++)for(ee=ke+u*_,K=ke+(u+1)*_,m=1;m<_-2;m++)E[p++]=K+m,E[p++]=ee+m,E[p++]=ee+m+1,E[p++]=K+m,E[p++]=ee+m+1,E[p++]=K+m+1}let j,q;if(L){if(Z)for(q=x*_,u=1;u<_-2;u++)E[p++]=u,E[p++]=u+1,E[p++]=q+u+1,E[p++]=u,E[p++]=q+u+1,E[p++]=q+u;if(G)for(j=x*_-_,q=x*_*V-_,u=1;u<_-2;u++)E[p++]=j+u+1,E[p++]=j+u,E[p++]=q+u,E[p++]=j+u+1,E[p++]=q+u,E[p++]=q+u+1}if(X){for(u=1;u<x-2;u++)q=_*x+_*u,j=_*u,E[p++]=q,E[p++]=j+_,E[p++]=j,E[p++]=q,E[p++]=q+_,E[p++]=j+_;for(u=1;u<x-2;u++)q=_*x+_*(u+1)-1,j=_*(u+1)-1,E[p++]=j+_,E[p++]=q,E[p++]=j,E[p++]=j+_,E[p++]=q+_,E[p++]=q}let be=new hn;a.position&&(be.position=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:v}));let Te=0,ae=0,xe=0,_e=0,Ve=P/2,Ie,Me=re.fromCartesian3(t),ve=re.fromCartesian3(n);if(a.st||a.normal||a.tangent||a.bitangent){for(u=0;u<P;u++){Ie=F[u]?ve:Me;let ke=h.fromArray(v,u*3,DHe),ct=Ie.geodeticSurfaceNormal(ke,BHe);if(M[u]&&h.negate(ct,ct),a.st){let yt=D.negate(ct,KHe);B[Te++]=Math.atan2(yt.y,yt.x)/W.TWO_PI+.5,B[Te++]=Math.asin(ct.z)/Math.PI+.5}if(a.normal&&(I[ae++]=ct.x,I[ae++]=ct.y,I[ae++]=ct.z),a.tangent||a.bitangent){let yt=YHe,ot=0,ln;if(F[u]&&(ot=Ve),!Z&&u>=ot&&u<ot+_*2?ln=h.UNIT_X:ln=h.UNIT_Z,h.cross(ln,ct,yt),h.normalize(yt,yt),a.tangent&&(w[xe++]=yt.x,w[xe++]=yt.y,w[xe++]=yt.z),a.bitangent){let vn=h.cross(ct,yt,OHe);h.normalize(vn,vn),N[_e++]=vn.x,N[_e++]=vn.y,N[_e++]=vn.z}}}a.st&&(be.st=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:B})),a.normal&&(be.normal=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:I})),a.tangent&&(be.tangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:w})),a.bitangent&&(be.bitangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:N}))}if(d(e._offsetAttribute)){let ke=v.length,ct=e._offsetAttribute===on.NONE?0:1,yt=new Uint8Array(ke/3).fill(ct);be.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:yt})}return new dt({attributes:be,indices:E,primitiveType:Fe.TRIANGLES,boundingSphere:ce.fromEllipsoid(Me),offsetAttribute:e._offsetAttribute})};var iH;g0.getUnitEllipsoid=function(){return d(iH)||(iH=g0.createGeometry(new g0({radii:new h(1,1,1),vertexFormat:We.POSITION_ONLY}))),iH};var Is=g0;var zHe=new At(Y.WHITE),oH=h.ZERO,rH=new h,JHe=new h,QHe=new h,sH=new Y,jHe=new h(1,1,1);function qHe(e){this.id=e,this.vertexFormat=void 0,this.radii=void 0,this.innerRadii=void 0,this.minimumClock=void 0,this.maximumClock=void 0,this.minimumCone=void 0,this.maximumCone=void 0,this.stackPartitions=void 0,this.slicePartitions=void 0,this.subdivisions=void 0,this.offsetAttribute=void 0}function md(e,t){ii.call(this,{entity:e,scene:t,geometryOptions:new qHe(e),geometryPropertyName:"ellipsoid",observedPropertyNames:["availability","position","orientation","ellipsoid"]}),this._onEntityPropertyChanged(e,"ellipsoid",e.ellipsoid,void 0)}d(Object.create)&&(md.prototype=Object.create(ii.prototype),md.prototype.constructor=md);Object.defineProperties(md.prototype,{terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});md.prototype.createFillGeometryInstance=function(e,t,n){let i=this._entity,o=i.isAvailable(e),r,s=new gn(o&&i.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),a=this._distanceDisplayConditionProperty.getValue(e),c=Un.fromDistanceDisplayCondition(a),l={show:s,distanceDisplayCondition:c,color:void 0,offset:void 0};if(this._materialProperty instanceof At){let u;d(this._materialProperty.color)&&(this._materialProperty.color.isConstant||o)&&(u=this._materialProperty.color.getValue(e,sH)),d(u)||(u=Y.WHITE),r=Ut.fromColor(u),l.color=r}return d(this._options.offsetAttribute)&&(l.offset=zi.fromCartesian3(H.getValueOrDefault(this._terrainOffsetProperty,e,oH,rH))),new _t({id:i,geometry:new Is(this._options),modelMatrix:t?void 0:i.computeModelMatrixForHeightReference(e,i.ellipsoid.heightReference,this._options.radii.z*.5,this._scene.mapProjection.ellipsoid,n),attributes:l})};md.prototype.createOutlineGeometryInstance=function(e,t,n){let i=this._entity,o=i.isAvailable(e),r=H.getValueOrDefault(this._outlineColorProperty,e,Y.BLACK,sH),s=this._distanceDisplayConditionProperty.getValue(e),a={show:new gn(o&&i.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Ut.fromColor(r),distanceDisplayCondition:Un.fromDistanceDisplayCondition(s),offset:void 0};return d(this._options.offsetAttribute)&&(a.offset=zi.fromCartesian3(H.getValueOrDefault(this._terrainOffsetProperty,e,oH,rH))),new _t({id:i,geometry:new od(this._options),modelMatrix:t?void 0:i.computeModelMatrixForHeightReference(e,i.ellipsoid.heightReference,this._options.radii.z*.5,this._scene.mapProjection.ellipsoid,n),attributes:a})};md.prototype._computeCenter=function(e,t){return H.getValueOrUndefined(this._entity.position,e,t)};md.prototype._isHidden=function(e,t){return!d(e.position)||!d(t.radii)||ii.prototype._isHidden.call(this,e,t)};md.prototype._isDynamic=function(e,t){return!e.position.isConstant||!H.isConstant(e.orientation)||!t.radii.isConstant||!H.isConstant(t.innerRadii)||!H.isConstant(t.stackPartitions)||!H.isConstant(t.slicePartitions)||!H.isConstant(t.outlineWidth)||!H.isConstant(t.minimumClock)||!H.isConstant(t.maximumClock)||!H.isConstant(t.minimumCone)||!H.isConstant(t.maximumCone)||!H.isConstant(t.subdivisions)};md.prototype._setStaticOptions=function(e,t){let n=H.getValueOrDefault(t.heightReference,Be.MINIMUM_VALUE,Oe.NONE),i=this._options;i.vertexFormat=this._materialProperty instanceof At?rn.VERTEX_FORMAT:so.MaterialSupport.TEXTURED.vertexFormat,i.radii=t.radii.getValue(Be.MINIMUM_VALUE,i.radii),i.innerRadii=H.getValueOrUndefined(t.innerRadii,i.radii),i.minimumClock=H.getValueOrUndefined(t.minimumClock,Be.MINIMUM_VALUE),i.maximumClock=H.getValueOrUndefined(t.maximumClock,Be.MINIMUM_VALUE),i.minimumCone=H.getValueOrUndefined(t.minimumCone,Be.MINIMUM_VALUE),i.maximumCone=H.getValueOrUndefined(t.maximumCone,Be.MINIMUM_VALUE),i.stackPartitions=H.getValueOrUndefined(t.stackPartitions,Be.MINIMUM_VALUE),i.slicePartitions=H.getValueOrUndefined(t.slicePartitions,Be.MINIMUM_VALUE),i.subdivisions=H.getValueOrUndefined(t.subdivisions,Be.MINIMUM_VALUE),i.offsetAttribute=n!==Oe.NONE?on.ALL:void 0};md.prototype._onEntityPropertyChanged=hp;md.DynamicGeometryUpdater=y2;function y2(e,t,n){ni.call(this,e,t,n),this._scene=e._scene,this._modelMatrix=new A,this._attributes=void 0,this._outlineAttributes=void 0,this._lastSceneMode=void 0,this._lastShow=void 0,this._lastOutlineShow=void 0,this._lastOutlineWidth=void 0,this._lastOutlineColor=void 0,this._lastOffset=new h,this._material={}}d(Object.create)&&(y2.prototype=Object.create(ni.prototype),y2.prototype.constructor=y2);y2.prototype.update=function(e){let t=this._entity,n=t.ellipsoid;if(!t.isShowing||!t.isAvailable(e)||!H.getValueOrDefault(n.show,e,!0)){d(this._primitive)&&(this._primitive.show=!1),d(this._outlinePrimitive)&&(this._outlinePrimitive.show=!1);return}let i=H.getValueOrUndefined(n.radii,e,JHe),o=d(i)?t.computeModelMatrixForHeightReference(e,n.heightReference,i.z*.5,this._scene.mapProjection.ellipsoid,this._modelMatrix):void 0;if(!d(o)||!d(i)){d(this._primitive)&&(this._primitive.show=!1),d(this._outlinePrimitive)&&(this._outlinePrimitive.show=!1);return}let r=H.getValueOrDefault(n.fill,e,!0),s=H.getValueOrDefault(n.outline,e,!1),a=H.getValueOrClonedDefault(n.outlineColor,e,Y.BLACK,sH),c=Yo.getValue(e,g(n.material,zHe),this._material),l=H.getValueOrUndefined(n.innerRadii,e,QHe),u=H.getValueOrUndefined(n.minimumClock,e),m=H.getValueOrUndefined(n.maximumClock,e),p=H.getValueOrUndefined(n.minimumCone,e),y=H.getValueOrUndefined(n.maximumCone,e),f=H.getValueOrUndefined(n.stackPartitions,e),x=H.getValueOrUndefined(n.slicePartitions,e),_=H.getValueOrUndefined(n.subdivisions,e),C=H.getValueOrDefault(n.outlineWidth,e,1),V=H.getValueOrDefault(n.heightReference,e,Oe.NONE),L=V!==Oe.NONE?on.ALL:void 0,Z=this._scene.mode,G=Z===ie.SCENE3D&&V===Oe.NONE,X=this._options,P=this._geometryUpdater.shadowsProperty.getValue(e),F=this._geometryUpdater.distanceDisplayConditionProperty.getValue(e),M=H.getValueOrDefault(this._geometryUpdater.terrainOffsetProperty,e,oH,rH);if(!G||this._lastSceneMode!==Z||!d(this._primitive)||X.stackPartitions!==f||X.slicePartitions!==x||d(l)&&!h.equals(X.innerRadii!==l)||X.minimumClock!==u||X.maximumClock!==m||X.minimumCone!==p||X.maximumCone!==y||X.subdivisions!==_||this._lastOutlineWidth!==C||X.offsetAttribute!==L){let R=this._primitives;if(R.removeAndDestroy(this._primitive),R.removeAndDestroy(this._outlinePrimitive),this._primitive=void 0,this._outlinePrimitive=void 0,this._lastSceneMode=Z,this._lastOutlineWidth=C,X.stackPartitions=f,X.slicePartitions=x,X.subdivisions=_,X.offsetAttribute=L,X.radii=h.clone(G?jHe:i,X.radii),d(l))if(G){let N=h.magnitude(i);X.innerRadii=h.fromElements(l.x/N,l.y/N,l.z/N,X.innerRadii)}else X.innerRadii=h.clone(l,X.innerRadii);else X.innerRadii=void 0;X.minimumClock=u,X.maximumClock=m,X.minimumCone=p,X.maximumCone=y;let E=new so({material:c,translucent:c.isTranslucent(),closed:!0});X.vertexFormat=E.vertexFormat;let I=this._geometryUpdater.createFillGeometryInstance(e,G,this._modelMatrix);this._primitive=R.add(new Zn({geometryInstances:I,appearance:E,asynchronous:!1,shadows:P}));let w=this._geometryUpdater.createOutlineGeometryInstance(e,G,this._modelMatrix);this._outlinePrimitive=R.add(new Zn({geometryInstances:w,appearance:new rn({flat:!0,translucent:w.attributes.color.value[3]!==255,renderState:{lineWidth:this._geometryUpdater._scene.clampLineWidth(C)}}),asynchronous:!1,shadows:P})),this._lastShow=r,this._lastOutlineShow=s,this._lastOutlineColor=Y.clone(a,this._lastOutlineColor),this._lastDistanceDisplayCondition=F,this._lastOffset=h.clone(M,this._lastOffset)}else if(this._primitive.ready){let R=this._primitive,E=this._outlinePrimitive;R.show=!0,E.show=!0,R.appearance.material=c;let I=this._attributes;d(I)||(I=R.getGeometryInstanceAttributes(t),this._attributes=I),r!==this._lastShow&&(I.show=gn.toValue(r,I.show),this._lastShow=r);let w=this._outlineAttributes;d(w)||(w=E.getGeometryInstanceAttributes(t),this._outlineAttributes=w),s!==this._lastOutlineShow&&(w.show=gn.toValue(s,w.show),this._lastOutlineShow=s),Y.equals(a,this._lastOutlineColor)||(w.color=Ut.toValue(a,w.color),Y.clone(a,this._lastOutlineColor)),Gt.equals(F,this._lastDistanceDisplayCondition)||(I.distanceDisplayCondition=Un.toValue(F,I.distanceDisplayCondition),w.distanceDisplayCondition=Un.toValue(F,w.distanceDisplayCondition),Gt.clone(F,this._lastDistanceDisplayCondition)),h.equals(M,this._lastOffset)||(I.offset=zi.toValue(M,I.offset),w.offset=zi.toValue(M,I.offset),h.clone(M,this._lastOffset))}G&&(i.x=Math.max(i.x,.001),i.y=Math.max(i.y,.001),i.z=Math.max(i.z,.001),o=A.multiplyByScale(o,i,o),this._primitive.modelMatrix=o,this._outlinePrimitive.modelMatrix=o)};var g2=md;var oKn=T(S(),1);var ZOn=T(S(),1);function e1(e){e=g(e,g.EMPTY_OBJECT);let t=g(e.vertexFormat,We.DEFAULT);this._vertexFormat=t,this._workerName="createPlaneGeometry"}e1.packedLength=We.packedLength;e1.pack=function(e,t,n){return n=g(n,0),We.pack(e._vertexFormat,t,n),t};var ule=new We,$He={vertexFormat:ule};e1.unpack=function(e,t,n){t=g(t,0);let i=We.unpack(e,t,ule);return d(n)?(n._vertexFormat=We.clone(i,n._vertexFormat),n):new e1($He)};var e5=new h(-.5,-.5,0),t5=new h(.5,.5,0);e1.createGeometry=function(e){let t=e._vertexFormat,n=new hn,i,o;if(t.position){if(o=new Float64Array(4*3),o[0]=e5.x,o[1]=e5.y,o[2]=0,o[3]=t5.x,o[4]=e5.y,o[5]=0,o[6]=t5.x,o[7]=t5.y,o[8]=0,o[9]=e5.x,o[10]=t5.y,o[11]=0,n.position=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:o}),t.normal){let r=new Float32Array(12);r[0]=0,r[1]=0,r[2]=1,r[3]=0,r[4]=0,r[5]=1,r[6]=0,r[7]=0,r[8]=1,r[9]=0,r[10]=0,r[11]=1,n.normal=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:r})}if(t.st){let r=new Float32Array(8);r[0]=0,r[1]=0,r[2]=1,r[3]=0,r[4]=1,r[5]=1,r[6]=0,r[7]=1,n.st=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:r})}if(t.tangent){let r=new Float32Array(12);r[0]=1,r[1]=0,r[2]=0,r[3]=1,r[4]=0,r[5]=0,r[6]=1,r[7]=0,r[8]=0,r[9]=1,r[10]=0,r[11]=0,n.tangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:r})}if(t.bitangent){let r=new Float32Array(12);r[0]=0,r[1]=1,r[2]=0,r[3]=0,r[4]=1,r[5]=0,r[6]=0,r[7]=1,r[8]=0,r[9]=0,r[10]=1,r[11]=0,n.bitangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:r})}i=new Uint16Array(2*3),i[0]=0,i[1]=1,i[2]=2,i[3]=0,i[4]=2,i[5]=3}return new dt({attributes:n,indices:i,primitiveType:Fe.TRIANGLES,boundingSphere:new ce(h.ZERO,Math.sqrt(2))})};var x2=e1;var AOn=T(S(),1);function t1(){this._workerName="createPlaneOutlineGeometry"}t1.packedLength=0;t1.pack=function(e,t){return t};t1.unpack=function(e,t,n){return d(n)?n:new t1};var gy=new h(-.5,-.5,0),n5=new h(.5,.5,0);t1.createGeometry=function(){let e=new hn,t=new Uint16Array(4*2),n=new Float64Array(4*3);return n[0]=gy.x,n[1]=gy.y,n[2]=gy.z,n[3]=n5.x,n[4]=gy.y,n[5]=gy.z,n[6]=n5.x,n[7]=n5.y,n[8]=gy.z,n[9]=gy.x,n[10]=n5.y,n[11]=gy.z,e.position=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:n}),t[0]=0,t[1]=1,t[2]=1,t[3]=2,t[4]=2,t[5]=3,t[6]=3,t[7]=0,new dt({attributes:e,indices:t,primitiveType:Fe.LINES,boundingSphere:new ce(h.ZERO,Math.sqrt(2))})};var _2=t1;var eze=new h,mle=new Y;function tze(e){this.id=e,this.vertexFormat=void 0,this.plane=void 0,this.dimensions=void 0}function Lu(e,t){ii.call(this,{entity:e,scene:t,geometryOptions:new tze(e),geometryPropertyName:"plane",observedPropertyNames:["availability","position","orientation","plane"]}),this._onEntityPropertyChanged(e,"plane",e.plane,void 0)}d(Object.create)&&(Lu.prototype=Object.create(ii.prototype),Lu.prototype.constructor=Lu);Lu.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i,o,r=new gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),s=this._distanceDisplayConditionProperty.getValue(e),a=Un.fromDistanceDisplayCondition(s);if(this._materialProperty instanceof At){let y;d(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(y=this._materialProperty.color.getValue(e,mle)),d(y)||(y=Y.WHITE),o=Ut.fromColor(y),i={show:r,distanceDisplayCondition:a,color:o}}else i={show:r,distanceDisplayCondition:a};let c=t.plane,l=this._options,u=t.computeModelMatrix(e),m=H.getValueOrDefault(c.plane,e,l.plane),p=H.getValueOrUndefined(c.dimensions,e,l.dimensions);return l.plane=m,l.dimensions=p,u=aH(m,p,u,u),new _t({id:t,geometry:new x2(this._options),modelMatrix:u,attributes:i})};Lu.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=H.getValueOrDefault(this._outlineColorProperty,e,Y.BLACK,mle),o=this._distanceDisplayConditionProperty.getValue(e),r=t.plane,s=this._options,a=t.computeModelMatrix(e),c=H.getValueOrDefault(r.plane,e,s.plane),l=H.getValueOrUndefined(r.dimensions,e,s.dimensions);return s.plane=c,s.dimensions=l,a=aH(c,l,a,a),new _t({id:t,geometry:new _2,modelMatrix:a,attributes:{show:new gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Ut.fromColor(i),distanceDisplayCondition:Un.fromDistanceDisplayCondition(o)}})};Lu.prototype._isHidden=function(e,t){return!d(t.plane)||!d(t.dimensions)||!d(e.position)||ii.prototype._isHidden.call(this,e,t)};Lu.prototype._getIsClosed=function(e){return!1};Lu.prototype._isDynamic=function(e,t){return!e.position.isConstant||!H.isConstant(e.orientation)||!t.plane.isConstant||!t.dimensions.isConstant||!H.isConstant(t.outlineWidth)};Lu.prototype._setStaticOptions=function(e,t){let n=this._materialProperty instanceof At,i=this._options;i.vertexFormat=n?rn.VERTEX_FORMAT:so.MaterialSupport.TEXTURED.vertexFormat,i.plane=t.plane.getValue(Be.MINIMUM_VALUE,i.plane),i.dimensions=t.dimensions.getValue(Be.MINIMUM_VALUE,i.dimensions)};Lu.DynamicGeometryUpdater=n1;function n1(e,t,n){ni.call(this,e,t,n)}d(Object.create)&&(n1.prototype=Object.create(ni.prototype),n1.prototype.constructor=n1);n1.prototype._isHidden=function(e,t,n){let i=this._options,o=H.getValueOrUndefined(e.position,n,eze);return!d(o)||!d(i.plane)||!d(i.dimensions)||ni.prototype._isHidden.call(this,e,t,n)};n1.prototype._setOptions=function(e,t,n){let i=this._options;i.plane=H.getValueOrDefault(t.plane,n,i.plane),i.dimensions=H.getValueOrUndefined(t.dimensions,n,i.dimensions)};var nze=new h,ize=new h,oze=new h,rze=new h,sze=new $,aze=new $,cze=new A;function aH(e,t,n,i){let o=e.normal,r=e.distance,s=h.multiplyByScalar(o,-r,oze),a=h.clone(h.UNIT_Z,ize);W.equalsEpsilon(Math.abs(h.dot(a,o)),1,W.EPSILON8)&&(a=h.clone(h.UNIT_Y,a));let c=h.cross(a,o,nze);a=h.cross(o,c,a),h.normalize(c,c),h.normalize(a,a);let l=sze;$.setColumn(l,0,c,l),$.setColumn(l,1,a,l),$.setColumn(l,2,o,l);let u=h.fromElements(t.x,t.y,1,rze),m=$.multiplyByScale(l,u,aze),p=A.fromRotationTranslation(m,s,cze);return A.multiplyTransformation(n,p,i)}Lu.createPrimitiveMatrix=aH;var T2=Lu;var hzn=T(S(),1);var EKn=T(S(),1);var lze=new h,dze=new He,uze=new D,mze=new D,hze=new h,fze=new h,pze=new h,S2=new h,bze=new h,yze=new h,hle=new Ae,gze=new $,xze=new $,_ze=new h;function Tze(e,t,n,i,o,r,s,a,c){let l=e.positions,u=ai.triangulate(e.positions2D,e.holes);u.length<3&&(u=[0,1,2]);let m=Ue.createTypedArray(l.length,u.length);m.set(u);let p=gze;if(i!==0){let b=Ae.fromAxisAngle(s,i,hle);if(p=$.fromQuaternion(b,p),t.tangent||t.bitangent){b=Ae.fromAxisAngle(s,-i,hle);let R=$.fromQuaternion(b,xze);a=h.normalize($.multiplyByVector(R,a,a),a),t.bitangent&&(c=h.normalize(h.cross(s,a,c),c))}}else p=$.clone($.IDENTITY,p);let y=mze;t.st&&(y.x=n.x,y.y=n.y);let f=l.length,x=f*3,_=new Float64Array(x),C=t.normal?new Float32Array(x):void 0,V=t.tangent?new Float32Array(x):void 0,L=t.bitangent?new Float32Array(x):void 0,Z=t.st?new Float32Array(f*2):void 0,G=0,X=0,P=0,v=0,F=0;for(let b=0;b<f;b++){let R=l[b];if(_[G++]=R.x,_[G++]=R.y,_[G++]=R.z,t.st)if(d(o)&&o.positions.length===f)Z[F++]=o.positions[b].x,Z[F++]=o.positions[b].y;else{let E=$.multiplyByVector(p,R,lze),I=r(E,uze);D.subtract(I,y,I);let w=W.clamp(I.x/n.width,0,1),N=W.clamp(I.y/n.height,0,1);Z[F++]=w,Z[F++]=N}t.normal&&(C[X++]=s.x,C[X++]=s.y,C[X++]=s.z),t.tangent&&(V[v++]=a.x,V[v++]=a.y,V[v++]=a.z),t.bitangent&&(L[P++]=c.x,L[P++]=c.y,L[P++]=c.z)}let M=new hn;return t.position&&(M.position=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:_})),t.normal&&(M.normal=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:C})),t.tangent&&(M.tangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:V})),t.bitangent&&(M.bitangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:L})),t.st&&(M.st=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:Z})),new dt({attributes:M,indices:m,primitiveType:Fe.TRIANGLES})}function V_(e){e=g(e,g.EMPTY_OBJECT);let t=e.polygonHierarchy,n=e.textureCoordinates,i=g(e.vertexFormat,We.DEFAULT);this._vertexFormat=We.clone(i),this._polygonHierarchy=t,this._stRotation=g(e.stRotation,0),this._ellipsoid=re.clone(g(e.ellipsoid,re.WGS84)),this._workerName="createCoplanarPolygonGeometry",this._textureCoordinates=n,this.packedLength=Bn.computeHierarchyPackedLength(t,h)+We.packedLength+re.packedLength+(d(n)?Bn.computeHierarchyPackedLength(n,D):1)+2}V_.fromPositions=function(e){e=g(e,g.EMPTY_OBJECT);let t={polygonHierarchy:{positions:e.positions},vertexFormat:e.vertexFormat,stRotation:e.stRotation,ellipsoid:e.ellipsoid,textureCoordinates:e.textureCoordinates};return new V_(t)};V_.pack=function(e,t,n){return n=g(n,0),n=Bn.packPolygonHierarchy(e._polygonHierarchy,t,n,h),re.pack(e._ellipsoid,t,n),n+=re.packedLength,We.pack(e._vertexFormat,t,n),n+=We.packedLength,t[n++]=e._stRotation,d(e._textureCoordinates)?n=Bn.packPolygonHierarchy(e._textureCoordinates,t,n,D):t[n++]=-1,t[n++]=e.packedLength,t};var Sze=re.clone(re.UNIT_SPHERE),Cze=new We,Vze={polygonHierarchy:{}};V_.unpack=function(e,t,n){t=g(t,0);let i=Bn.unpackPolygonHierarchy(e,t,h);t=i.startingIndex,delete i.startingIndex;let o=re.unpack(e,t,Sze);t+=re.packedLength;let r=We.unpack(e,t,Cze);t+=We.packedLength;let s=e[t++],a=e[t]===-1?void 0:Bn.unpackPolygonHierarchy(e,t,D);d(a)?(t=a.startingIndex,delete a.startingIndex):t++;let c=e[t++];return d(n)||(n=new V_(Vze)),n._polygonHierarchy=i,n._ellipsoid=re.clone(o,n._ellipsoid),n._vertexFormat=We.clone(r,n._vertexFormat),n._stRotation=s,n._textureCoordinates=a,n.packedLength=c,n};V_.createGeometry=function(e){let t=e._vertexFormat,n=e._polygonHierarchy,i=e._stRotation,o=e._textureCoordinates,r=d(o),s=n.positions;if(s=go(s,h.equalsEpsilon,!0),s.length<3)return;let a=hze,c=fze,l=pze,u=bze,m=yze;if(!jp.computeProjectTo2DArguments(s,S2,u,m))return;if(a=h.cross(u,m,a),a=h.normalize(a,a),!h.equalsEpsilon(S2,h.ZERO,W.EPSILON6)){let F=e._ellipsoid.geodeticSurfaceNormal(S2,_ze);h.dot(a,F)<0&&(a=h.negate(a,a),u=h.negate(u,u))}let y=jp.createProjectPointsTo2DFunction(S2,u,m),f=jp.createProjectPointTo2DFunction(S2,u,m);t.tangent&&(c=h.clone(u,c)),t.bitangent&&(l=h.clone(m,l));let x=Bn.polygonsFromHierarchy(n,r,y,!1),_=x.hierarchy,C=x.polygons,V=function(F){return F},L=r?Bn.polygonsFromHierarchy(o,!0,V,!1).polygons:void 0;if(_.length===0)return;s=_[0].outerRing;let Z=ce.fromPoints(s),G=Bn.computeBoundingRectangle(a,f,s,i,dze),X=[];for(let F=0;F<C.length;F++){let M=new _t({geometry:Tze(C[F],t,G,i,r?L[F]:void 0,f,a,c,l)});X.push(M)}let P=An.combineInstances(X)[0];P.attributes.position.values=new Float64Array(P.attributes.position.values),P.indices=Ue.createTypedArray(P.attributes.position.values.length/3,P.indices);let v=P.attributes;return t.position||delete v.position,new dt({attributes:v,indices:P.indices,primitiveType:P.primitiveType,boundingSphere:Z})};var C2=V_;var bHn=T(S(),1);var UKn=T(S(),1);function Er(e,t){this.position=e,d(this.position)||(this.position=new D),this.tangentPlane=t,d(this.tangentPlane)||(this.tangentPlane=Er.NORTH_POLE_TANGENT_PLANE)}Object.defineProperties(Er.prototype,{ellipsoid:{get:function(){return this.tangentPlane.ellipsoid}},x:{get:function(){return this.position.x}},y:{get:function(){return this.position.y}},conformalLatitude:{get:function(){let e=D.magnitude(this.position),t=2*this.ellipsoid.maximumRadius;return this.tangentPlane.plane.normal.z*(W.PI_OVER_TWO-2*Math.atan2(e,t))}},longitude:{get:function(){let e=W.PI_OVER_TWO+Math.atan2(this.y,this.x);return e>Math.PI&&(e-=W.TWO_PI),e}}});var i1=new he,Lze=new h;Er.prototype.getLatitude=function(e){d(e)||(e=re.WGS84),i1.latitude=this.conformalLatitude,i1.longitude=this.longitude,i1.height=0;let t=this.ellipsoid.cartographicToCartesian(i1,Lze);return e.cartesianToCartographic(t,i1),i1.latitude};var Rze=new Sn,Zze=new h,Gze=new h;Er.fromCartesian=function(e,t){let n=W.signNotZero(e.z),i=Er.NORTH_POLE_TANGENT_PLANE,o=Er.SOUTH_POLE;n<0&&(i=Er.SOUTH_POLE_TANGENT_PLANE,o=Er.NORTH_POLE);let r=Rze;r.origin=i.ellipsoid.scaleToGeocentricSurface(e,r.origin),r.direction=h.subtract(r.origin,o,Zze),h.normalize(r.direction,r.direction);let s=Si.rayPlane(r,i.plane,Gze),a=h.subtract(s,o,s),c=h.dot(i.xAxis,a),l=n*h.dot(i.yAxis,a);return d(t)?(t.position=new D(c,l),t.tangentPlane=i,t):new Er(new D(c,l),i)};Er.fromCartesianArray=function(e,t){let n=e.length;d(t)?t.length=n:t=new Array(n);for(let i=0;i<n;i++)t[i]=Er.fromCartesian(e[i],t[i]);return t};Er.clone=function(e,t){if(d(e))return d(t)?(t.position=e.position,t.tangentPlane=e.tangentPlane,t):new Er(e.position,e.tangentPlane)};Er.HALF_UNIT_SPHERE=Object.freeze(new re(.5,.5,.5));Er.NORTH_POLE=Object.freeze(new h(0,0,.5));Er.SOUTH_POLE=Object.freeze(new h(0,0,-.5));Er.NORTH_POLE_TANGENT_PLANE=Object.freeze(new wr(Er.NORTH_POLE,Er.HALF_UNIT_SPHERE));Er.SOUTH_POLE_TANGENT_PLANE=Object.freeze(new wr(Er.SOUTH_POLE,Er.HALF_UNIT_SPHERE));var nc=Er;var Eze=new he,fle=new he;function Xze(e,t,n,i){let r=i.cartesianToCartographic(e,Eze).height,s=i.cartesianToCartographic(t,fle);s.height=r,i.cartographicToCartesian(s,t);let a=i.cartesianToCartographic(n,fle);a.height=r-100,i.cartographicToCartesian(a,n)}var ple=new He,Ize=new h,Wze=new h,Pze=new h,vze=new h,wze=new h,Fze=new h,i5=new h,cf=new h,o1=new h,Aze=new D,Mze=new D,Nze=new h,ble=new Ae,Uze=new $,kze=new $;function cH(e){let t=e.vertexFormat,n=e.geometry,i=e.shadowVolume,o=n.attributes.position.values,r=d(n.attributes.st)?n.attributes.st.values:void 0,s=o.length,a=e.wall,c=e.top||a,l=e.bottom||a;if(t.st||t.normal||t.tangent||t.bitangent||i){let u=e.boundingRectangle,m=e.rotationAxis,p=e.projectTo2d,y=e.ellipsoid,f=e.stRotation,x=e.perPositionHeight,_=Aze;_.x=u.x,_.y=u.y;let C=t.st?new Float32Array(2*(s/3)):void 0,V;t.normal&&(x&&c&&!a?V=n.attributes.normal.values:V=new Float32Array(s));let L=t.tangent?new Float32Array(s):void 0,Z=t.bitangent?new Float32Array(s):void 0,G=i?new Float32Array(s):void 0,X=0,P=0,v=Wze,F=Pze,M=vze,b=!0,R=Uze,E=kze;if(f!==0){let N=Ae.fromAxisAngle(m,f,ble);R=$.fromQuaternion(N,R),N=Ae.fromAxisAngle(m,-f,ble),E=$.fromQuaternion(N,E)}else R=$.clone($.IDENTITY,R),E=$.clone($.IDENTITY,E);let I=0,w=0;c&&l&&(I=s/2,w=s/3,s/=2);for(let N=0;N<s;N+=3){let B=h.fromArray(o,N,Nze);if(t.st&&!d(r)){let k=$.multiplyByVector(R,B,Ize);k=y.scaleToGeodeticSurface(k,k);let O=p(k,Mze);D.subtract(O,_,O);let U=W.clamp(O.x/u.width,0,1),J=W.clamp(O.y/u.height,0,1);l&&(C[X+w]=U,C[X+1+w]=J),c&&(C[X]=U,C[X+1]=J),X+=2}if(t.normal||t.tangent||t.bitangent||i){let k=P+1,O=P+2;if(a){if(N+3<s){let U=h.fromArray(o,N+3,wze);if(b){let J=h.fromArray(o,N+s,Fze);x&&Xze(B,U,J,y),h.subtract(U,B,U),h.subtract(J,B,J),v=h.normalize(h.cross(J,U,v),v),b=!1}h.equalsEpsilon(U,B,W.EPSILON10)&&(b=!0)}(t.tangent||t.bitangent)&&(M=y.geodeticSurfaceNormal(B,M),t.tangent&&(F=h.normalize(h.cross(M,v,F),F)))}else v=y.geodeticSurfaceNormal(B,v),(t.tangent||t.bitangent)&&(x&&(i5=h.fromArray(V,P,i5),cf=h.cross(h.UNIT_Z,i5,cf),cf=h.normalize($.multiplyByVector(E,cf,cf),cf),t.bitangent&&(o1=h.normalize(h.cross(i5,cf,o1),o1))),F=h.cross(h.UNIT_Z,v,F),F=h.normalize($.multiplyByVector(E,F,F),F),t.bitangent&&(M=h.normalize(h.cross(v,F,M),M)));t.normal&&(e.wall?(V[P+I]=v.x,V[k+I]=v.y,V[O+I]=v.z):l&&(V[P+I]=-v.x,V[k+I]=-v.y,V[O+I]=-v.z),(c&&!x||a)&&(V[P]=v.x,V[k]=v.y,V[O]=v.z)),i&&(a&&(v=y.geodeticSurfaceNormal(B,v)),G[P+I]=-v.x,G[k+I]=-v.y,G[O+I]=-v.z),t.tangent&&(e.wall?(L[P+I]=F.x,L[k+I]=F.y,L[O+I]=F.z):l&&(L[P+I]=-F.x,L[k+I]=-F.y,L[O+I]=-F.z),c&&(x?(L[P]=cf.x,L[k]=cf.y,L[O]=cf.z):(L[P]=F.x,L[k]=F.y,L[O]=F.z))),t.bitangent&&(l&&(Z[P+I]=M.x,Z[k+I]=M.y,Z[O+I]=M.z),c&&(x?(Z[P]=o1.x,Z[k]=o1.y,Z[O]=o1.z):(Z[P]=M.x,Z[k]=M.y,Z[O]=M.z))),P+=3}}t.st&&!d(r)&&(n.attributes.st=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:C})),t.normal&&(n.attributes.normal=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:V})),t.tangent&&(n.attributes.tangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:L})),t.bitangent&&(n.attributes.bitangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:Z})),i&&(n.attributes.extrudeDirection=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:G}))}if(e.extrude&&d(e.offsetAttribute)){let u=o.length/3,m=new Uint8Array(u);if(e.offsetAttribute===on.TOP)c&&l||a?m=m.fill(1,0,u/2):c&&(m=m.fill(1));else{let p=e.offsetAttribute===on.NONE?0:1;m=m.fill(p)}n.attributes.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:m})}return n}var Dze=new he,Bze=new he,xy={westOverIDL:0,eastOverIDL:0},r1=new jd;function Yze(e,t,n,i,o){if(o=g(o,new de),!d(e)||e.length<3)return o.west=0,o.north=0,o.south=0,o.east=0,o;if(n===Jt.RHUMB)return de.fromCartesianArray(e,t,o);r1.ellipsoid.equals(t)||(r1=new jd(void 0,void 0,t)),o.west=Number.POSITIVE_INFINITY,o.east=Number.NEGATIVE_INFINITY,o.south=Number.POSITIVE_INFINITY,o.north=Number.NEGATIVE_INFINITY,xy.westOverIDL=Number.POSITIVE_INFINITY,xy.eastOverIDL=Number.NEGATIVE_INFINITY;let r=1/W.chordLength(i,t.maximumRadius),s=e.length,a=t.cartesianToCartographic(e[0],Bze),c=Dze,l;for(let u=1;u<s;u++)l=c,c=a,a=t.cartesianToCartographic(e[u],l),r1.setEndPoints(c,a),yle(r1,r,o,xy);return l=c,c=a,a=t.cartesianToCartographic(e[0],l),r1.setEndPoints(c,a),yle(r1,r,o,xy),o.east-o.west>xy.eastOverIDL-xy.westOverIDL&&(o.west=xy.westOverIDL,o.east=xy.eastOverIDL,o.east>W.PI&&(o.east=o.east-W.TWO_PI),o.west>W.PI&&(o.west=o.west-W.TWO_PI)),o}var Oze=new he;function yle(e,t,n,i){let o=e.surfaceDistance,r=Math.ceil(o*t),s=r>0?o/(r-1):Number.POSITIVE_INFINITY,a=0;for(let c=0;c<r;c++){let l=e.interpolateUsingSurfaceDistance(a,Oze);a+=s;let u=l.longitude,m=l.latitude;n.west=Math.min(n.west,u),n.east=Math.max(n.east,u),n.south=Math.min(n.south,m),n.north=Math.max(n.north,m);let p=u>=0?u:u+W.TWO_PI;i.westOverIDL=Math.min(i.westOverIDL,p),i.eastOverIDL=Math.max(i.eastOverIDL,p)}}var gle=[];function Kze(e,t,n,i,o,r,s,a,c,l){let u={walls:[]},m;if(s||a){let V=Bn.createGeometryFromPositions(e,t,n,i,r,c,l),L=V.attributes.position.values,Z=V.indices,G,X;if(s&&a){let P=L.concat(L);G=P.length/3,X=Ue.createTypedArray(G,Z.length*2),X.set(Z);let v=Z.length,F=G/2;for(m=0;m<v;m+=3){let M=X[m]+F,b=X[m+1]+F,R=X[m+2]+F;X[m+v]=R,X[m+1+v]=b,X[m+2+v]=M}if(V.attributes.position.values=P,r&&c.normal){let M=V.attributes.normal.values;V.attributes.normal.values=new Float32Array(P.length),V.attributes.normal.values.set(M)}if(c.st&&d(n)){let M=V.attributes.st.values;V.attributes.st.values=new Float32Array(G*2),V.attributes.st.values=M.concat(M)}V.indices=X}else if(a){for(G=L.length/3,X=Ue.createTypedArray(G,Z.length),m=0;m<Z.length;m+=3)X[m]=Z[m+2],X[m+1]=Z[m+1],X[m+2]=Z[m];V.indices=X}u.topAndBottom=new _t({geometry:V})}let p=o.outerRing,y=wr.fromPoints(p,e),f=y.projectPointsOntoPlane(p,gle),x=ai.computeWindingOrder2D(f);x===Jr.CLOCKWISE&&(p=p.slice().reverse());let _=Bn.computeWallGeometry(p,n,e,i,r,l);u.walls.push(new _t({geometry:_}));let C=o.holes;for(m=0;m<C.length;m++){let V=C[m];f=y.projectPointsOntoPlane(V,gle),x=ai.computeWindingOrder2D(f),x===Jr.COUNTER_CLOCKWISE&&(V=V.slice().reverse()),_=Bn.computeWallGeometry(V,n,e,i,r,l),u.walls.push(new _t({geometry:_}))}return u}function hd(e){let t=e.polygonHierarchy,n=g(e.vertexFormat,We.DEFAULT),i=g(e.ellipsoid,re.WGS84),o=g(e.granularity,W.RADIANS_PER_DEGREE),r=g(e.stRotation,0),s=e.textureCoordinates,a=g(e.perPositionHeight,!1),c=a&&d(e.extrudedHeight),l=g(e.height,0),u=g(e.extrudedHeight,l);if(!c){let m=Math.max(l,u);u=Math.min(l,u),l=m}this._vertexFormat=We.clone(n),this._ellipsoid=re.clone(i),this._granularity=o,this._stRotation=r,this._height=l,this._extrudedHeight=u,this._closeTop=g(e.closeTop,!0),this._closeBottom=g(e.closeBottom,!0),this._polygonHierarchy=t,this._perPositionHeight=a,this._perPositionHeightExtrude=c,this._shadowVolume=g(e.shadowVolume,!1),this._workerName="createPolygonGeometry",this._offsetAttribute=e.offsetAttribute,this._arcType=g(e.arcType,Jt.GEODESIC),this._rectangle=void 0,this._textureCoordinateRotationPoints=void 0,this._textureCoordinates=s,this.packedLength=Bn.computeHierarchyPackedLength(t,h)+re.packedLength+We.packedLength+(s?Bn.computeHierarchyPackedLength(s,D):1)+12}hd.fromPositions=function(e){e=g(e,g.EMPTY_OBJECT);let t={polygonHierarchy:{positions:e.positions},height:e.height,extrudedHeight:e.extrudedHeight,vertexFormat:e.vertexFormat,stRotation:e.stRotation,ellipsoid:e.ellipsoid,granularity:e.granularity,perPositionHeight:e.perPositionHeight,closeTop:e.closeTop,closeBottom:e.closeBottom,offsetAttribute:e.offsetAttribute,arcType:e.arcType,textureCoordinates:e.textureCoordinates};return new hd(t)};hd.pack=function(e,t,n){return n=g(n,0),n=Bn.packPolygonHierarchy(e._polygonHierarchy,t,n,h),re.pack(e._ellipsoid,t,n),n+=re.packedLength,We.pack(e._vertexFormat,t,n),n+=We.packedLength,t[n++]=e._height,t[n++]=e._extrudedHeight,t[n++]=e._granularity,t[n++]=e._stRotation,t[n++]=e._perPositionHeightExtrude?1:0,t[n++]=e._perPositionHeight?1:0,t[n++]=e._closeTop?1:0,t[n++]=e._closeBottom?1:0,t[n++]=e._shadowVolume?1:0,t[n++]=g(e._offsetAttribute,-1),t[n++]=e._arcType,d(e._textureCoordinates)?n=Bn.packPolygonHierarchy(e._textureCoordinates,t,n,D):t[n++]=-1,t[n++]=e.packedLength,t};var Hze=re.clone(re.UNIT_SPHERE),zze=new We,Jze={polygonHierarchy:{}};hd.unpack=function(e,t,n){t=g(t,0);let i=Bn.unpackPolygonHierarchy(e,t,h);t=i.startingIndex,delete i.startingIndex;let o=re.unpack(e,t,Hze);t+=re.packedLength;let r=We.unpack(e,t,zze);t+=We.packedLength;let s=e[t++],a=e[t++],c=e[t++],l=e[t++],u=e[t++]===1,m=e[t++]===1,p=e[t++]===1,y=e[t++]===1,f=e[t++]===1,x=e[t++],_=e[t++],C=e[t]===-1?void 0:Bn.unpackPolygonHierarchy(e,t,D);d(C)?(t=C.startingIndex,delete C.startingIndex):t++;let V=e[t++];return d(n)||(n=new hd(Jze)),n._polygonHierarchy=i,n._ellipsoid=re.clone(o,n._ellipsoid),n._vertexFormat=We.clone(r,n._vertexFormat),n._height=s,n._extrudedHeight=a,n._granularity=c,n._stRotation=l,n._perPositionHeightExtrude=u,n._perPositionHeight=m,n._closeTop=p,n._closeBottom=y,n._shadowVolume=f,n._offsetAttribute=x===-1?void 0:x,n._arcType=_,n._textureCoordinates=C,n.packedLength=V,n};var Qze=new D,jze=new D,qze=new nc;function xle(e,t,n,i,o,r){let s=e.longitude,a=s>=0?s:s+W.TWO_PI;o.westOverIdl=Math.min(o.westOverIdl,a),o.eastOverIdl=Math.max(o.eastOverIdl,a),r.west=Math.min(r.west,s),r.east=Math.max(r.east,s);let c=e.getLatitude(n),l=c;if(r.south=Math.min(r.south,c),r.north=Math.max(r.north,c),i!==Jt.RHUMB){let p=D.subtract(t.position,e.position,Qze),y=D.dot(t.position,p)/D.dot(p,p);if(y>0&&y<1){let f=D.add(t.position,D.multiplyByScalar(p,-y,p),jze),x=nc.clone(t,qze);x.position=f;let _=x.getLatitude(n);r.south=Math.min(r.south,_),r.north=Math.max(r.north,_),Math.abs(c)>Math.abs(_)&&(l=_)}}let u=t.x*e.y-e.x*t.y,m=Math.sign(u);m!==0&&(m*=D.angleBetween(t.position,e.position)),l>=0&&(o.northAngle+=m),l<=0&&(o.southAngle+=m)}var _le=new nc,$ze=new nc,Ru={northAngle:0,southAngle:0,westOverIdl:0,eastOverIdl:0};hd.computeRectangleFromPositions=function(e,t,n,i){if(d(i)||(i=new de),e.length<3)return i;i.west=Number.POSITIVE_INFINITY,i.east=Number.NEGATIVE_INFINITY,i.south=Number.POSITIVE_INFINITY,i.north=Number.NEGATIVE_INFINITY,Ru.northAngle=0,Ru.southAngle=0,Ru.westOverIdl=Number.POSITIVE_INFINITY,Ru.eastOverIdl=Number.NEGATIVE_INFINITY;let o=e.length,r=nc.fromCartesian(e[0],$ze);for(let s=1;s<o;s++){let a=nc.fromCartesian(e[s],_le);xle(a,r,t,n,Ru,i),r=nc.clone(a,r)}return xle(nc.fromCartesian(e[0],_le),r,t,n,Ru,i),i.east-i.west>Ru.eastOverIdl-Ru.westOverIdl&&(i.west=Ru.westOverIdl,i.east=Ru.eastOverIdl,i.east>W.PI&&(i.east=i.east-W.TWO_PI),i.west>W.PI&&(i.west=i.west-W.TWO_PI)),W.equalsEpsilon(Math.abs(Ru.northAngle),W.TWO_PI,W.EPSILON10)&&(i.north=W.PI_OVER_TWO,i.east=W.PI,i.west=-W.PI),W.equalsEpsilon(Math.abs(Ru.southAngle),W.TWO_PI,W.EPSILON10)&&(i.south=-W.PI_OVER_TWO,i.east=W.PI,i.west=-W.PI),i};hd.computeRectangle=function(e,t){Qr("PolygonGeometry.computeRectangle","PolygonGeometry.computeRectangle was deprecated in CesiumJS 1.110. It will be removed in CesiumJS 1.112. Use PolygonGeometry.computeRectangleFromPositions instead.");let n=g(e.granularity,W.RADIANS_PER_DEGREE),i=g(e.arcType,Jt.GEODESIC),o=e.polygonHierarchy,r=g(e.ellipsoid,re.WGS84);return Yze(o.positions,r,i,n,t)};var eJe=new nc;function tJe(e,t,n){return e.height>=W.PI||e.width>=W.PI?nc.fromCartesian(t[0],eJe).tangentPlane:wr.fromPoints(t,n)}var Tle=new he;function nJe(e,t,n){return(i,o)=>{if(e.height>=W.PI||e.width>=W.PI){if(e.south<0&&e.north>0){d(o)||(o=[]);for(let s=0;s<i.length;++s){let a=n.cartesianToCartographic(i[s],Tle);o[s]=new D(a.longitude/W.PI,a.latitude/W.PI_OVER_TWO)}return o.length=i.length,o}return nc.fromCartesianArray(i,o)}return wr.fromPoints(t,n).projectPointsOntoPlane(i,o)}}function iJe(e,t,n){if(e.height>=W.PI||e.width>=W.PI)return(o,r)=>{if(e.south<0&&e.north>0){let s=n.cartesianToCartographic(o,Tle);return d(r)||(r=new D),r.x=s.longitude/W.PI,r.y=s.latitude/W.PI_OVER_TWO,r}return nc.fromCartesian(o,r)};let i=wr.fromPoints(t,n);return(o,r)=>i.projectPointsOntoPlane(o,r)}function oJe(e,t,n,i){return(o,r)=>!i&&(e.height>=W.PI_OVER_TWO||e.width>=2*W.PI_OVER_THREE)?Bn.splitPolygonsOnEquator(o,t,n,r):o}function rJe(e,t,n,i){if(t.height>=W.PI||t.width>=W.PI)return He.fromRectangle(t,void 0,ple);let o=e,r=wr.fromPoints(o,n);return Bn.computeBoundingRectangle(r.plane.normal,r.projectPointOntoPlane.bind(r),o,i,ple)}hd.createGeometry=function(e){let t=e._vertexFormat,n=e._ellipsoid,i=e._granularity,o=e._stRotation,r=e._polygonHierarchy,s=e._perPositionHeight,a=e._closeTop,c=e._closeBottom,l=e._arcType,u=e._textureCoordinates,m=d(u),p=r.positions;if(p.length<3)return;let y=e.rectangle,f=Bn.polygonsFromHierarchy(r,m,nJe(y,p,n),!s,n,oJe(y,n,l,s)),x=f.hierarchy,_=f.polygons,C=function(I){return I},V=m?Bn.polygonsFromHierarchy(u,!0,C,!1,n).polygons:void 0;if(x.length===0)return;let L=x[0].outerRing,Z=rJe(L,y,n,o),G=[],X=e._height,P=e._extrudedHeight,v=e._perPositionHeightExtrude||!W.equalsEpsilon(X,P,0,W.EPSILON2),F={perPositionHeight:s,vertexFormat:t,geometry:void 0,rotationAxis:tJe(y,L,n).plane.normal,projectTo2d:iJe(y,L,n),boundingRectangle:Z,ellipsoid:n,stRotation:o,textureCoordinates:void 0,bottom:!1,top:!0,wall:!1,extrude:!1,arcType:l},M;if(v)for(F.extrude=!0,F.top=a,F.bottom=c,F.shadowVolume=e._shadowVolume,F.offsetAttribute=e._offsetAttribute,M=0;M<_.length;M++){let I=Kze(n,_[M],m?V[M]:void 0,i,x[M],s,a,c,t,l),w;a&&c?(w=I.topAndBottom,F.geometry=Bn.scaleToGeodeticHeightExtruded(w.geometry,X,P,n,s)):a?(w=I.topAndBottom,w.geometry.attributes.position.values=ai.scaleToGeodeticHeight(w.geometry.attributes.position.values,X,n,!s),F.geometry=w.geometry):c&&(w=I.topAndBottom,w.geometry.attributes.position.values=ai.scaleToGeodeticHeight(w.geometry.attributes.position.values,P,n,!0),F.geometry=w.geometry),(a||c)&&(F.wall=!1,w.geometry=cH(F),G.push(w));let N=I.walls;F.wall=!0;for(let B=0;B<N.length;B++){let k=N[B];F.geometry=Bn.scaleToGeodeticHeightExtruded(k.geometry,X,P,n,s),k.geometry=cH(F),G.push(k)}}else for(M=0;M<_.length;M++){let I=new _t({geometry:Bn.createGeometryFromPositions(n,_[M],m?V[M]:void 0,i,s,t,l)});if(I.geometry.attributes.position.values=ai.scaleToGeodeticHeight(I.geometry.attributes.position.values,X,n,!s),F.geometry=I.geometry,I.geometry=cH(F),d(e._offsetAttribute)){let w=I.geometry.attributes.position.values.length,N=e._offsetAttribute===on.NONE?0:1,B=new Uint8Array(w/3).fill(N);I.geometry.attributes.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:B})}G.push(I)}let b=An.combineInstances(G)[0];b.attributes.position.values=new Float64Array(b.attributes.position.values),b.indices=Ue.createTypedArray(b.attributes.position.values.length/3,b.indices);let R=b.attributes,E=ce.fromVertices(R.position.values);return t.position||delete R.position,new dt({attributes:R,indices:b.indices,primitiveType:b.primitiveType,boundingSphere:E,offsetAttribute:e._offsetAttribute})};hd.createShadowVolume=function(e,t,n){let i=e._granularity,o=e._ellipsoid,r=t(i,o),s=n(i,o);return new hd({polygonHierarchy:e._polygonHierarchy,ellipsoid:o,stRotation:e._stRotation,granularity:i,perPositionHeight:!1,extrudedHeight:r,height:s,vertexFormat:We.POSITION_ONLY,shadowVolume:!0,arcType:e._arcType})};function sJe(e){let t=-e._stRotation;if(t===0)return[0,0,0,1,1,0];let n=e._ellipsoid,i=e._polygonHierarchy.positions,o=e.rectangle;return dt._textureCoordinateRotationPoints(i,t,n,o)}Object.defineProperties(hd.prototype,{rectangle:{get:function(){if(!d(this._rectangle)){let e=this._polygonHierarchy.positions;this._rectangle=hd.computeRectangleFromPositions(e,this._ellipsoid,this._arcType)}return this._rectangle}},textureCoordinateRotationPoints:{get:function(){return d(this._textureCoordinateRotationPoints)||(this._textureCoordinateRotationPoints=sJe(this)),this._textureCoordinateRotationPoints}}});var L_=hd;var MHn=T(S(),1);var Sle=[],o5=[];function aJe(e,t,n,i,o){let s=wr.fromPoints(t,e).projectPointsOntoPlane(t,Sle);ai.computeWindingOrder2D(s)===Jr.CLOCKWISE&&(s.reverse(),t=t.slice().reverse());let c,l,u=t.length,m=0;if(i)for(c=new Float64Array(u*2*3),l=0;l<u;l++){let f=t[l],x=t[(l+1)%u];c[m++]=f.x,c[m++]=f.y,c[m++]=f.z,c[m++]=x.x,c[m++]=x.y,c[m++]=x.z}else{let f=0;if(o===Jt.GEODESIC)for(l=0;l<u;l++)f+=Bn.subdivideLineCount(t[l],t[(l+1)%u],n);else if(o===Jt.RHUMB)for(l=0;l<u;l++)f+=Bn.subdivideRhumbLineCount(e,t[l],t[(l+1)%u],n);for(c=new Float64Array(f*3),l=0;l<u;l++){let x;o===Jt.GEODESIC?x=Bn.subdivideLine(t[l],t[(l+1)%u],n,o5):o===Jt.RHUMB&&(x=Bn.subdivideRhumbLine(e,t[l],t[(l+1)%u],n,o5));let _=x.length;for(let C=0;C<_;++C)c[m++]=x[C]}}u=c.length/3;let p=u*2,y=Ue.createTypedArray(u,p);for(m=0,l=0;l<u-1;l++)y[m++]=l,y[m++]=l+1;return y[m++]=u-1,y[m++]=0,new _t({geometry:new dt({attributes:new hn({position:new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:c})}),indices:y,primitiveType:Fe.LINES})})}function cJe(e,t,n,i,o){let s=wr.fromPoints(t,e).projectPointsOntoPlane(t,Sle);ai.computeWindingOrder2D(s)===Jr.CLOCKWISE&&(s.reverse(),t=t.slice().reverse());let c,l,u=t.length,m=new Array(u),p=0;if(i)for(c=new Float64Array(u*2*3*2),l=0;l<u;++l){m[l]=p/3;let _=t[l],C=t[(l+1)%u];c[p++]=_.x,c[p++]=_.y,c[p++]=_.z,c[p++]=C.x,c[p++]=C.y,c[p++]=C.z}else{let _=0;if(o===Jt.GEODESIC)for(l=0;l<u;l++)_+=Bn.subdivideLineCount(t[l],t[(l+1)%u],n);else if(o===Jt.RHUMB)for(l=0;l<u;l++)_+=Bn.subdivideRhumbLineCount(e,t[l],t[(l+1)%u],n);for(c=new Float64Array(_*3*2),l=0;l<u;++l){m[l]=p/3;let C;o===Jt.GEODESIC?C=Bn.subdivideLine(t[l],t[(l+1)%u],n,o5):o===Jt.RHUMB&&(C=Bn.subdivideRhumbLine(e,t[l],t[(l+1)%u],n,o5));let V=C.length;for(let L=0;L<V;++L)c[p++]=C[L]}}u=c.length/(3*2);let y=m.length,f=(u*2+y)*2,x=Ue.createTypedArray(u+y,f);for(p=0,l=0;l<u;++l)x[p++]=l,x[p++]=(l+1)%u,x[p++]=l+u,x[p++]=(l+1)%u+u;for(l=0;l<y;l++){let _=m[l];x[p++]=_,x[p++]=_+u}return new _t({geometry:new dt({attributes:new hn({position:new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:c})}),indices:x,primitiveType:Fe.LINES})})}function R_(e){let t=e.polygonHierarchy,n=g(e.ellipsoid,re.WGS84),i=g(e.granularity,W.RADIANS_PER_DEGREE),o=g(e.perPositionHeight,!1),r=o&&d(e.extrudedHeight),s=g(e.arcType,Jt.GEODESIC),a=g(e.height,0),c=g(e.extrudedHeight,a);if(!r){let l=Math.max(a,c);c=Math.min(a,c),a=l}this._ellipsoid=re.clone(n),this._granularity=i,this._height=a,this._extrudedHeight=c,this._arcType=s,this._polygonHierarchy=t,this._perPositionHeight=o,this._perPositionHeightExtrude=r,this._offsetAttribute=e.offsetAttribute,this._workerName="createPolygonOutlineGeometry",this.packedLength=Bn.computeHierarchyPackedLength(t,h)+re.packedLength+8}R_.pack=function(e,t,n){return n=g(n,0),n=Bn.packPolygonHierarchy(e._polygonHierarchy,t,n,h),re.pack(e._ellipsoid,t,n),n+=re.packedLength,t[n++]=e._height,t[n++]=e._extrudedHeight,t[n++]=e._granularity,t[n++]=e._perPositionHeightExtrude?1:0,t[n++]=e._perPositionHeight?1:0,t[n++]=e._arcType,t[n++]=g(e._offsetAttribute,-1),t[n]=e.packedLength,t};var lJe=re.clone(re.UNIT_SPHERE),dJe={polygonHierarchy:{}};R_.unpack=function(e,t,n){t=g(t,0);let i=Bn.unpackPolygonHierarchy(e,t,h);t=i.startingIndex,delete i.startingIndex;let o=re.unpack(e,t,lJe);t+=re.packedLength;let r=e[t++],s=e[t++],a=e[t++],c=e[t++]===1,l=e[t++]===1,u=e[t++],m=e[t++],p=e[t];return d(n)||(n=new R_(dJe)),n._polygonHierarchy=i,n._ellipsoid=re.clone(o,n._ellipsoid),n._height=r,n._extrudedHeight=s,n._granularity=a,n._perPositionHeight=l,n._perPositionHeightExtrude=c,n._arcType=u,n._offsetAttribute=m===-1?void 0:m,n.packedLength=p,n};R_.fromPositions=function(e){e=g(e,g.EMPTY_OBJECT);let t={polygonHierarchy:{positions:e.positions},height:e.height,extrudedHeight:e.extrudedHeight,ellipsoid:e.ellipsoid,granularity:e.granularity,perPositionHeight:e.perPositionHeight,arcType:e.arcType,offsetAttribute:e.offsetAttribute};return new R_(t)};R_.createGeometry=function(e){let t=e._ellipsoid,n=e._granularity,i=e._polygonHierarchy,o=e._perPositionHeight,r=e._arcType,s=Bn.polygonOutlinesFromHierarchy(i,!o,t);if(s.length===0)return;let a,c=[],l=W.chordLength(n,t.maximumRadius),u=e._height,m=e._extrudedHeight,p=e._perPositionHeightExtrude||!W.equalsEpsilon(u,m,0,W.EPSILON2),y,f;if(p)for(f=0;f<s.length;f++){if(a=cJe(t,s[f],l,o,r),a.geometry=Bn.scaleToGeodeticHeightExtruded(a.geometry,u,m,t,o),d(e._offsetAttribute)){let C=a.geometry.attributes.position.values.length/3,V=new Uint8Array(C);e._offsetAttribute===on.TOP?V=V.fill(1,0,C/2):(y=e._offsetAttribute===on.NONE?0:1,V=V.fill(y)),a.geometry.attributes.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:V})}c.push(a)}else for(f=0;f<s.length;f++){if(a=aJe(t,s[f],l,o,r),a.geometry.attributes.position.values=ai.scaleToGeodeticHeight(a.geometry.attributes.position.values,u,t,!o),d(e._offsetAttribute)){let C=a.geometry.attributes.position.values.length;y=e._offsetAttribute===on.NONE?0:1;let V=new Uint8Array(C/3).fill(y);a.geometry.attributes.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:V})}c.push(a)}let x=An.combineInstances(c)[0],_=ce.fromVertices(x.attributes.position.values);return new dt({attributes:x.attributes,indices:x.indices,primitiveType:x.primitiveType,boundingSphere:_,offsetAttribute:e._offsetAttribute})};var V2=R_;var Cle="Entity polygons cannot have both height and perPositionHeight. height will be ignored",Vle="heightReference is not supported for entity polygons with perPositionHeight. heightReference will be ignored",Lle=new Y,Rle=h.ZERO,Zle=new h,Gle=new de,uJe=[],mJe=new D;function hJe(e){this.id=e,this.vertexFormat=void 0,this.polygonHierarchy=void 0,this.perPositionHeight=void 0,this.closeTop=void 0,this.closeBottom=void 0,this.height=void 0,this.extrudedHeight=void 0,this.granularity=void 0,this.stRotation=void 0,this.offsetAttribute=void 0,this.arcType=void 0,this.textureCoordinates=void 0}function fd(e,t){Hn.call(this,{entity:e,scene:t,geometryOptions:new hJe(e),geometryPropertyName:"polygon",observedPropertyNames:["availability","polygon"]}),this._onEntityPropertyChanged(e,"polygon",e.polygon,void 0)}d(Object.create)&&(fd.prototype=Object.create(Hn.prototype),fd.prototype.constructor=fd);fd.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=this._options,o={show:new gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),distanceDisplayCondition:Un.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};if(this._materialProperty instanceof At){let s;d(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(s=this._materialProperty.color.getValue(e,Lle)),d(s)||(s=Y.WHITE),o.color=Ut.fromColor(s)}d(i.offsetAttribute)&&(o.offset=zi.fromCartesian3(H.getValueOrDefault(this._terrainOffsetProperty,e,Rle,Zle)));let r;return i.perPositionHeight&&!d(i.extrudedHeight)?r=new C2(i):r=new L_(i),new _t({id:t,geometry:r,attributes:o})};fd.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=this._options,o=H.getValueOrDefault(this._outlineColorProperty,e,Y.BLACK,Lle),r=this._distanceDisplayConditionProperty.getValue(e),s={show:new gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Ut.fromColor(o),distanceDisplayCondition:Un.fromDistanceDisplayCondition(r),offset:void 0};d(i.offsetAttribute)&&(s.offset=zi.fromCartesian3(H.getValueOrDefault(this._terrainOffsetProperty,e,Rle,Zle)));let a;return i.perPositionHeight&&!d(i.extrudedHeight)?a=new bu(i):a=new V2(i),new _t({id:t,geometry:a,attributes:s})};fd.prototype._computeCenter=function(e,t){let n=H.getValueOrUndefined(this._entity.polygon.hierarchy,e);if(!d(n))return;let i=n.positions;if(i.length===0)return;let o=this._scene.mapProjection.ellipsoid,r=wr.fromPoints(i,o),s=r.projectPointsOntoPlane(i,uJe),a=s.length,c=0,l=a-1,u=new D;for(let p=0;p<a;l=p++){let y=s[p],f=s[l],x=y.x*f.y-f.x*y.y,_=D.add(y,f,mJe);_=D.multiplyByScalar(_,x,_),u=D.add(u,_,u),c+=x}let m=1/(c*3);return u=D.multiplyByScalar(u,m,u),r.projectPointOntoEllipsoid(u,t)};fd.prototype._isHidden=function(e,t){return!d(t.hierarchy)||ii.prototype._isHidden.call(this,e,t)};fd.prototype._isOnTerrain=function(e,t){let n=Hn.prototype._isOnTerrain.call(this,e,t),i=t.perPositionHeight,o=d(i)&&(i.isConstant?i.getValue(Be.MINIMUM_VALUE):!0);return n&&!o};fd.prototype._isDynamic=function(e,t){return!t.hierarchy.isConstant||!H.isConstant(t.height)||!H.isConstant(t.extrudedHeight)||!H.isConstant(t.granularity)||!H.isConstant(t.stRotation)||!H.isConstant(t.textureCoordinates)||!H.isConstant(t.outlineWidth)||!H.isConstant(t.perPositionHeight)||!H.isConstant(t.closeTop)||!H.isConstant(t.closeBottom)||!H.isConstant(t.zIndex)||!H.isConstant(t.arcType)||this._onTerrain&&!H.isConstant(this._materialProperty)&&!(this._materialProperty instanceof At)};fd.prototype._setStaticOptions=function(e,t){let n=this._materialProperty instanceof At,i=this._options;i.vertexFormat=n?rn.VERTEX_FORMAT:so.MaterialSupport.TEXTURED.vertexFormat;let o=t.hierarchy.getValue(Be.MINIMUM_VALUE),r=H.getValueOrUndefined(t.height,Be.MINIMUM_VALUE),s=H.getValueOrDefault(t.heightReference,Be.MINIMUM_VALUE,Oe.NONE),a=H.getValueOrUndefined(t.extrudedHeight,Be.MINIMUM_VALUE),c=H.getValueOrDefault(t.extrudedHeightReference,Be.MINIMUM_VALUE,Oe.NONE),l=H.getValueOrDefault(t.perPositionHeight,Be.MINIMUM_VALUE,!1);r=Hn.getGeometryHeight(r,s);let u;l?(d(r)&&(r=void 0,Pt(Cle)),s!==Oe.NONE&&l&&(r=void 0,Pt(Vle))):(d(a)&&!d(r)&&(r=0),u=Hn.computeGeometryOffsetAttribute(r,s,a,c)),i.polygonHierarchy=o,i.granularity=H.getValueOrUndefined(t.granularity,Be.MINIMUM_VALUE),i.stRotation=H.getValueOrUndefined(t.stRotation,Be.MINIMUM_VALUE),i.perPositionHeight=l,i.closeTop=H.getValueOrDefault(t.closeTop,Be.MINIMUM_VALUE,!0),i.closeBottom=H.getValueOrDefault(t.closeBottom,Be.MINIMUM_VALUE,!0),i.offsetAttribute=u,i.height=r,i.arcType=H.getValueOrDefault(t.arcType,Be.MINIMUM_VALUE,Jt.GEODESIC),i.textureCoordinates=H.getValueOrUndefined(t.textureCoordinates,Be.MINIMUM_VALUE),a=Hn.getGeometryExtrudedHeight(a,c),a===Hn.CLAMP_TO_GROUND&&(a=li.getMinimumMaximumHeights(L_.computeRectangle(i,Gle)).minimumTerrainHeight),i.extrudedHeight=a};fd.prototype._getIsClosed=function(e){let t=e.height,n=e.extrudedHeight,i=d(n)&&n!==t;return!e.perPositionHeight&&(!i&&t===0||i&&e.closeTop&&e.closeBottom)};fd.DynamicGeometryUpdater=s1;function s1(e,t,n){ni.call(this,e,t,n)}d(Object.create)&&(s1.prototype=Object.create(ni.prototype),s1.prototype.constructor=s1);s1.prototype._isHidden=function(e,t,n){return!d(this._options.polygonHierarchy)||ni.prototype._isHidden.call(this,e,t,n)};s1.prototype._setOptions=function(e,t,n){let i=this._options;i.polygonHierarchy=H.getValueOrUndefined(t.hierarchy,n);let o=H.getValueOrUndefined(t.height,n),r=H.getValueOrDefault(t.heightReference,n,Oe.NONE),s=H.getValueOrDefault(t.extrudedHeightReference,n,Oe.NONE),a=H.getValueOrUndefined(t.extrudedHeight,n),c=H.getValueOrUndefined(t.perPositionHeight,n);o=Hn.getGeometryHeight(o,s);let l;c?(d(o)&&(o=void 0,Pt(Cle)),r!==Oe.NONE&&c&&(o=void 0,Pt(Vle))):(d(a)&&!d(o)&&(o=0),l=Hn.computeGeometryOffsetAttribute(o,r,a,s)),i.granularity=H.getValueOrUndefined(t.granularity,n),i.stRotation=H.getValueOrUndefined(t.stRotation,n),i.textureCoordinates=H.getValueOrUndefined(t.textureCoordinates,n),i.perPositionHeight=H.getValueOrUndefined(t.perPositionHeight,n),i.closeTop=H.getValueOrDefault(t.closeTop,n,!0),i.closeBottom=H.getValueOrDefault(t.closeBottom,n,!0),i.offsetAttribute=l,i.height=o,i.arcType=H.getValueOrDefault(t.arcType,n,Jt.GEODESIC),a=Hn.getGeometryExtrudedHeight(a,s),a===Hn.CLAMP_TO_GROUND&&(a=li.getMinimumMaximumHeights(L_.computeRectangle(i,Gle)).minimumTerrainHeight),i.extrudedHeight=a};var L2=fd;var TJn=T(S(),1);var Azn=T(S(),1);function fJe(e,t,n,i){let o=new hn;i.position&&(o.position=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:e}));let r=t.length,s=e.length/3,a=(s-r*2)/(r*2),c=ai.triangulate(t),l=(a-1)*r*6+c.length*2,u=Ue.createTypedArray(s,l),m,p,y,f,x,_,C=r*2,V=0;for(m=0;m<a-1;m++){for(p=0;p<r-1;p++)y=p*2+m*r*2,_=y+C,f=y+1,x=f+C,u[V++]=f,u[V++]=y,u[V++]=x,u[V++]=x,u[V++]=y,u[V++]=_;y=r*2-2+m*r*2,f=y+1,x=f+C,_=y+C,u[V++]=f,u[V++]=y,u[V++]=x,u[V++]=x,u[V++]=y,u[V++]=_}if(i.st||i.tangent||i.bitangent){let G=new Float32Array(s*2),X=1/(a-1),P=1/n.height,v=n.height/2,F,M,b=0;for(m=0;m<a;m++){for(F=m*X,M=P*(t[0].y+v),G[b++]=F,G[b++]=M,p=1;p<r;p++)M=P*(t[p].y+v),G[b++]=F,G[b++]=M,G[b++]=F,G[b++]=M;M=P*(t[0].y+v),G[b++]=F,G[b++]=M}for(p=0;p<r;p++)F=0,M=P*(t[p].y+v),G[b++]=F,G[b++]=M;for(p=0;p<r;p++)F=(a-1)*X,M=P*(t[p].y+v),G[b++]=F,G[b++]=M;o.st=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:new Float32Array(G)})}let L=s-r*2;for(m=0;m<c.length;m+=3){let G=c[m]+L,X=c[m+1]+L,P=c[m+2]+L;u[V++]=G,u[V++]=X,u[V++]=P,u[V++]=P+r,u[V++]=X+r,u[V++]=G+r}let Z=new dt({attributes:o,indices:u,boundingSphere:ce.fromVertices(e),primitiveType:Fe.TRIANGLES});if(i.normal&&(Z=An.computeNormal(Z)),i.tangent||i.bitangent){try{Z=An.computeTangentAndBitangent(Z)}catch{Pt("polyline-volume-tangent-bitangent","Unable to compute tangents and bitangents for polyline volume geometry")}i.tangent||(Z.attributes.tangent=void 0),i.bitangent||(Z.attributes.bitangent=void 0),i.st||(Z.attributes.st=void 0)}return Z}function Z2(e){e=g(e,g.EMPTY_OBJECT);let t=e.polylinePositions,n=e.shapePositions;this._positions=t,this._shape=n,this._ellipsoid=re.clone(g(e.ellipsoid,re.WGS84)),this._cornerType=g(e.cornerType,Ii.ROUNDED),this._vertexFormat=We.clone(g(e.vertexFormat,We.DEFAULT)),this._granularity=g(e.granularity,W.RADIANS_PER_DEGREE),this._workerName="createPolylineVolumeGeometry";let i=1+t.length*h.packedLength;i+=1+n.length*D.packedLength,this.packedLength=i+re.packedLength+We.packedLength+2}Z2.pack=function(e,t,n){n=g(n,0);let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=h.packedLength)h.pack(o[i],t,n);let s=e._shape;for(r=s.length,t[n++]=r,i=0;i<r;++i,n+=D.packedLength)D.pack(s[i],t,n);return re.pack(e._ellipsoid,t,n),n+=re.packedLength,We.pack(e._vertexFormat,t,n),n+=We.packedLength,t[n++]=e._cornerType,t[n]=e._granularity,t};var Ele=re.clone(re.UNIT_SPHERE),Xle=new We,R2={polylinePositions:void 0,shapePositions:void 0,ellipsoid:Ele,vertexFormat:Xle,cornerType:void 0,granularity:void 0};Z2.unpack=function(e,t,n){t=g(t,0);let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=h.packedLength)r[i]=h.unpack(e,t);o=e[t++];let s=new Array(o);for(i=0;i<o;++i,t+=D.packedLength)s[i]=D.unpack(e,t);let a=re.unpack(e,t,Ele);t+=re.packedLength;let c=We.unpack(e,t,Xle);t+=We.packedLength;let l=e[t++],u=e[t];return d(n)?(n._positions=r,n._shape=s,n._ellipsoid=re.clone(a,n._ellipsoid),n._vertexFormat=We.clone(c,n._vertexFormat),n._cornerType=l,n._granularity=u,n):(R2.polylinePositions=r,R2.shapePositions=s,R2.cornerType=l,R2.granularity=u,new Z2(R2))};var pJe=new He;Z2.createGeometry=function(e){let t=e._positions,n=go(t,h.equalsEpsilon),i=e._shape;if(i=Am.removeDuplicatesFromShape(i),n.length<2||i.length<3)return;ai.computeWindingOrder2D(i)===Jr.CLOCKWISE&&i.reverse();let o=He.fromPoints(i,pJe),r=Am.computePositions(n,i,o,e,!0);return fJe(r,i,o,e._vertexFormat)};var G2=Z2;var oJn=T(S(),1);function bJe(e,t){let n=new hn;n.position=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:e});let i=t.length,o=n.position.values.length/3,s=e.length/3/i,a=Ue.createTypedArray(o,2*i*(s+1)),c,l,u=0;c=0;let m=c*i;for(l=0;l<i-1;l++)a[u++]=l+m,a[u++]=l+m+1;for(a[u++]=i-1+m,a[u++]=m,c=s-1,m=c*i,l=0;l<i-1;l++)a[u++]=l+m,a[u++]=l+m+1;for(a[u++]=i-1+m,a[u++]=m,c=0;c<s-1;c++){let y=i*c,f=y+i;for(l=0;l<i;l++)a[u++]=l+y,a[u++]=l+f}return new dt({attributes:n,indices:Ue.createTypedArray(o,a),boundingSphere:ce.fromVertices(e),primitiveType:Fe.LINES})}function X2(e){e=g(e,g.EMPTY_OBJECT);let t=e.polylinePositions,n=e.shapePositions;this._positions=t,this._shape=n,this._ellipsoid=re.clone(g(e.ellipsoid,re.WGS84)),this._cornerType=g(e.cornerType,Ii.ROUNDED),this._granularity=g(e.granularity,W.RADIANS_PER_DEGREE),this._workerName="createPolylineVolumeOutlineGeometry";let i=1+t.length*h.packedLength;i+=1+n.length*D.packedLength,this.packedLength=i+re.packedLength+2}X2.pack=function(e,t,n){n=g(n,0);let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=h.packedLength)h.pack(o[i],t,n);let s=e._shape;for(r=s.length,t[n++]=r,i=0;i<r;++i,n+=D.packedLength)D.pack(s[i],t,n);return re.pack(e._ellipsoid,t,n),n+=re.packedLength,t[n++]=e._cornerType,t[n]=e._granularity,t};var Ile=re.clone(re.UNIT_SPHERE),E2={polylinePositions:void 0,shapePositions:void 0,ellipsoid:Ile,height:void 0,cornerType:void 0,granularity:void 0};X2.unpack=function(e,t,n){t=g(t,0);let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=h.packedLength)r[i]=h.unpack(e,t);o=e[t++];let s=new Array(o);for(i=0;i<o;++i,t+=D.packedLength)s[i]=D.unpack(e,t);let a=re.unpack(e,t,Ile);t+=re.packedLength;let c=e[t++],l=e[t];return d(n)?(n._positions=r,n._shape=s,n._ellipsoid=re.clone(a,n._ellipsoid),n._cornerType=c,n._granularity=l,n):(E2.polylinePositions=r,E2.shapePositions=s,E2.cornerType=c,E2.granularity=l,new X2(E2))};var yJe=new He;X2.createGeometry=function(e){let t=e._positions,n=go(t,h.equalsEpsilon),i=e._shape;if(i=Am.removeDuplicatesFromShape(i),n.length<2||i.length<3)return;ai.computeWindingOrder2D(i)===Jr.CLOCKWISE&&i.reverse();let o=He.fromPoints(i,yJe),r=Am.computePositions(n,i,o,e,!1);return bJe(r,i)};var I2=X2;var Wle=new Y;function gJe(e){this.id=e,this.vertexFormat=void 0,this.polylinePositions=void 0,this.shapePositions=void 0,this.cornerType=void 0,this.granularity=void 0}function lf(e,t){ii.call(this,{entity:e,scene:t,geometryOptions:new gJe(e),geometryPropertyName:"polylineVolume",observedPropertyNames:["availability","polylineVolume"]}),this._onEntityPropertyChanged(e,"polylineVolume",e.polylineVolume,void 0)}d(Object.create)&&(lf.prototype=Object.create(ii.prototype),lf.prototype.constructor=lf);lf.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i,o,r=new gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),s=this._distanceDisplayConditionProperty.getValue(e),a=Un.fromDistanceDisplayCondition(s);if(this._materialProperty instanceof At){let c;d(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(c=this._materialProperty.color.getValue(e,Wle)),d(c)||(c=Y.WHITE),o=Ut.fromColor(c),i={show:r,distanceDisplayCondition:a,color:o}}else i={show:r,distanceDisplayCondition:a};return new _t({id:t,geometry:new G2(this._options),attributes:i})};lf.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=H.getValueOrDefault(this._outlineColorProperty,e,Y.BLACK,Wle),o=this._distanceDisplayConditionProperty.getValue(e);return new _t({id:t,geometry:new I2(this._options),attributes:{show:new gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Ut.fromColor(i),distanceDisplayCondition:Un.fromDistanceDisplayCondition(o)}})};lf.prototype._isHidden=function(e,t){return!d(t.positions)||!d(t.shape)||ii.prototype._isHidden.call(this,e,t)};lf.prototype._isDynamic=function(e,t){return!t.positions.isConstant||!t.shape.isConstant||!H.isConstant(t.granularity)||!H.isConstant(t.outlineWidth)||!H.isConstant(t.cornerType)};lf.prototype._setStaticOptions=function(e,t){let n=t.granularity,i=t.cornerType,o=this._options,r=this._materialProperty instanceof At;o.vertexFormat=r?rn.VERTEX_FORMAT:so.MaterialSupport.TEXTURED.vertexFormat,o.polylinePositions=t.positions.getValue(Be.MINIMUM_VALUE,o.polylinePositions),o.shapePositions=t.shape.getValue(Be.MINIMUM_VALUE,o.shape),o.granularity=d(n)?n.getValue(Be.MINIMUM_VALUE):void 0,o.cornerType=d(i)?i.getValue(Be.MINIMUM_VALUE):void 0};lf.DynamicGeometryUpdater=a1;function a1(e,t,n){ni.call(this,e,t,n)}d(Object.create)&&(a1.prototype=Object.create(ni.prototype),a1.prototype.constructor=a1);a1.prototype._isHidden=function(e,t,n){let i=this._options;return!d(i.polylinePositions)||!d(i.shapePositions)||ni.prototype._isHidden.call(this,e,t,n)};a1.prototype._setOptions=function(e,t,n){let i=this._options;i.polylinePositions=H.getValueOrUndefined(t.positions,n,i.polylinePositions),i.shapePositions=H.getValueOrUndefined(t.shape,n),i.granularity=H.getValueOrUndefined(t.granularity,n),i.cornerType=H.getValueOrUndefined(t.cornerType,n)};var W2=lf;var gQn=T(S(),1);var HJn=T(S(),1);var lH=new h,wle=new h,Fle=new h,Ale=new h,Mle=new de,xJe=new D,_Je=new ce,TJe=new ce;function Nle(e,t){let n=new dt({attributes:new hn,primitiveType:Fe.TRIANGLES});return n.attributes.position=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:t.positions}),e.normal&&(n.attributes.normal=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:t.normals})),e.tangent&&(n.attributes.tangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:t.tangents})),e.bitangent&&(n.attributes.bitangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:t.bitangents})),n}function SJe(e,t,n,i){let o=e.length,r=t.normal?new Float32Array(o):void 0,s=t.tangent?new Float32Array(o):void 0,a=t.bitangent?new Float32Array(o):void 0,c=0,l=Ale,u=Fle,m=wle;if(t.normal||t.tangent||t.bitangent)for(let p=0;p<o;p+=3){let y=h.fromArray(e,p,lH),f=c+1,x=c+2;m=n.geodeticSurfaceNormal(y,m),(t.tangent||t.bitangent)&&(h.cross(h.UNIT_Z,m,u),$.multiplyByVector(i,u,u),h.normalize(u,u),t.bitangent&&h.normalize(h.cross(m,u,l),l)),t.normal&&(r[c]=m.x,r[f]=m.y,r[x]=m.z),t.tangent&&(s[c]=u.x,s[f]=u.y,s[x]=u.z),t.bitangent&&(a[c]=l.x,a[f]=l.y,a[x]=l.z),c+=3}return Nle(t,{positions:e,normals:r,tangents:s,bitangents:a})}var dH=new h,Ule=new h;function CJe(e,t,n){let i=e.length,o=t.normal?new Float32Array(i):void 0,r=t.tangent?new Float32Array(i):void 0,s=t.bitangent?new Float32Array(i):void 0,a=0,c=0,l=0,u=!0,m=Ale,p=Fle,y=wle;if(t.normal||t.tangent||t.bitangent)for(let f=0;f<i;f+=6){let x=h.fromArray(e,f,lH),_=h.fromArray(e,(f+6)%i,dH);if(u){let C=h.fromArray(e,(f+3)%i,Ule);h.subtract(_,x,_),h.subtract(C,x,C),y=h.normalize(h.cross(C,_,y),y),u=!1}h.equalsEpsilon(_,x,W.EPSILON10)&&(u=!0),(t.tangent||t.bitangent)&&(m=n.geodeticSurfaceNormal(x,m),t.tangent&&(p=h.normalize(h.cross(m,y,p),p))),t.normal&&(o[a++]=y.x,o[a++]=y.y,o[a++]=y.z,o[a++]=y.x,o[a++]=y.y,o[a++]=y.z),t.tangent&&(r[c++]=p.x,r[c++]=p.y,r[c++]=p.z,r[c++]=p.x,r[c++]=p.y,r[c++]=p.z),t.bitangent&&(s[l++]=m.x,s[l++]=m.y,s[l++]=m.z,s[l++]=m.x,s[l++]=m.y,s[l++]=m.z)}return Nle(t,{positions:e,normals:o,tangents:r,bitangents:s})}function kle(e,t){let n=e._vertexFormat,i=e._ellipsoid,o=t.height,r=t.width,s=t.northCap,a=t.southCap,c=0,l=o,u=o,m=0;s&&(c=1,u-=1,m+=1),a&&(l-=1,u-=1,m+=1),m+=r*u;let p=n.position?new Float64Array(m*3):void 0,y=n.st?new Float32Array(m*2):void 0,f=0,x=0,_=lH,C=xJe,V=Number.MAX_VALUE,L=Number.MAX_VALUE,Z=-Number.MAX_VALUE,G=-Number.MAX_VALUE;for(let R=c;R<l;++R)for(let E=0;E<r;++E)ls.computePosition(t,i,n.st,R,E,_,C),p[f++]=_.x,p[f++]=_.y,p[f++]=_.z,n.st&&(y[x++]=C.x,y[x++]=C.y,V=Math.min(V,C.x),L=Math.min(L,C.y),Z=Math.max(Z,C.x),G=Math.max(G,C.y));if(s&&(ls.computePosition(t,i,n.st,0,0,_,C),p[f++]=_.x,p[f++]=_.y,p[f++]=_.z,n.st&&(y[x++]=C.x,y[x++]=C.y,V=C.x,L=C.y,Z=C.x,G=C.y)),a&&(ls.computePosition(t,i,n.st,o-1,0,_,C),p[f++]=_.x,p[f++]=_.y,p[f]=_.z,n.st&&(y[x++]=C.x,y[x]=C.y,V=Math.min(V,C.x),L=Math.min(L,C.y),Z=Math.max(Z,C.x),G=Math.max(G,C.y))),n.st&&(V<0||L<0||Z>1||G>1))for(let R=0;R<y.length;R+=2)y[R]=(y[R]-V)/(Z-V),y[R+1]=(y[R+1]-L)/(G-L);let X=SJe(p,n,i,t.tangentRotationMatrix),P=6*(r-1)*(u-1);s&&(P+=3*(r-1)),a&&(P+=3*(r-1));let v=Ue.createTypedArray(m,P),F=0,M=0,b;for(b=0;b<u-1;++b){for(let R=0;R<r-1;++R){let E=F,I=E+r,w=I+1,N=E+1;v[M++]=E,v[M++]=I,v[M++]=N,v[M++]=N,v[M++]=I,v[M++]=w,++F}++F}if(s||a){let R=m-1,E=m-1;s&&a&&(R=m-2);let I,w;if(F=0,s)for(b=0;b<r-1;b++)I=F,w=I+1,v[M++]=R,v[M++]=I,v[M++]=w,++F;if(a)for(F=(u-1)*r,b=0;b<r-1;b++)I=F,w=I+1,v[M++]=I,v[M++]=E,v[M++]=w,++F}return X.indices=v,n.st&&(X.attributes.st=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:y})),X}function c1(e,t,n,i,o){return e[t++]=i[n],e[t++]=i[n+1],e[t++]=i[n+2],e[t++]=o[n],e[t++]=o[n+1],e[t]=o[n+2],e}function l1(e,t,n,i){return e[t++]=i[n],e[t++]=i[n+1],e[t++]=i[n],e[t]=i[n+1],e}var uH=new We;function VJe(e,t){let n=e._shadowVolume,i=e._offsetAttribute,o=e._vertexFormat,r=e._extrudedHeight,s=e._surfaceHeight,a=e._ellipsoid,c=t.height,l=t.width,u;if(n){let ot=We.clone(o,uH);ot.normal=!0,e._vertexFormat=ot}let m=kle(e,t);n&&(e._vertexFormat=o);let p=ai.scaleToGeodeticHeight(m.attributes.position.values,s,a,!1);p=new Float64Array(p);let y=p.length,f=y*2,x=new Float64Array(f);x.set(p);let _=ai.scaleToGeodeticHeight(m.attributes.position.values,r,a);x.set(_,y),m.attributes.position.values=x;let C=o.normal?new Float32Array(f):void 0,V=o.tangent?new Float32Array(f):void 0,L=o.bitangent?new Float32Array(f):void 0,Z=o.st?new Float32Array(f/3*2):void 0,G,X;if(o.normal){for(X=m.attributes.normal.values,C.set(X),u=0;u<y;u++)X[u]=-X[u];C.set(X,y),m.attributes.normal.values=C}if(n){X=m.attributes.normal.values,o.normal||(m.attributes.normal=void 0);let ot=new Float32Array(f);for(u=0;u<y;u++)X[u]=-X[u];ot.set(X,y),m.attributes.extrudeDirection=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:ot})}let P,v=d(i);if(v){let ot=y/3*2,ln=new Uint8Array(ot);i===on.TOP?ln=ln.fill(1,0,ot/2):(P=i===on.NONE?0:1,ln=ln.fill(P)),m.attributes.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:ln})}if(o.tangent){let ot=m.attributes.tangent.values;for(V.set(ot),u=0;u<y;u++)ot[u]=-ot[u];V.set(ot,y),m.attributes.tangent.values=V}if(o.bitangent){let ot=m.attributes.bitangent.values;L.set(ot),L.set(ot,y),m.attributes.bitangent.values=L}o.st&&(G=m.attributes.st.values,Z.set(G),Z.set(G,y/3*2),m.attributes.st.values=Z);let F=m.indices,M=F.length,b=y/3,R=Ue.createTypedArray(f/3,M*2);for(R.set(F),u=0;u<M;u+=3)R[u+M]=F[u+2]+b,R[u+1+M]=F[u+1]+b,R[u+2+M]=F[u]+b;m.indices=R;let E=t.northCap,I=t.southCap,w=c,N=2,B=0,k=4,O=4;E&&(N-=1,w-=1,B+=1,k-=2,O-=1),I&&(N-=1,w-=1,B+=1,k-=2,O-=1),B+=N*l+2*w-k;let U=(B+O)*2,J=new Float64Array(U*3),z=n?new Float32Array(U*3):void 0,ee=v?new Uint8Array(U):void 0,K=o.st?new Float32Array(U*2):void 0,j=i===on.TOP;v&&!j&&(P=i===on.ALL?1:0,ee=ee.fill(P));let q=0,be=0,Te=0,ae=0,xe=l*w,_e;for(u=0;u<xe;u+=l)_e=u*3,J=c1(J,q,_e,p,_),q+=6,o.st&&(K=l1(K,be,u*2,G),be+=4),n&&(Te+=3,z[Te++]=X[_e],z[Te++]=X[_e+1],z[Te++]=X[_e+2]),j&&(ee[ae++]=1,ae+=1);if(I){let ot=E?xe+1:xe;for(_e=ot*3,u=0;u<2;u++)J=c1(J,q,_e,p,_),q+=6,o.st&&(K=l1(K,be,ot*2,G),be+=4),n&&(Te+=3,z[Te++]=X[_e],z[Te++]=X[_e+1],z[Te++]=X[_e+2]),j&&(ee[ae++]=1,ae+=1)}else for(u=xe-l;u<xe;u++)_e=u*3,J=c1(J,q,_e,p,_),q+=6,o.st&&(K=l1(K,be,u*2,G),be+=4),n&&(Te+=3,z[Te++]=X[_e],z[Te++]=X[_e+1],z[Te++]=X[_e+2]),j&&(ee[ae++]=1,ae+=1);for(u=xe-1;u>0;u-=l)_e=u*3,J=c1(J,q,_e,p,_),q+=6,o.st&&(K=l1(K,be,u*2,G),be+=4),n&&(Te+=3,z[Te++]=X[_e],z[Te++]=X[_e+1],z[Te++]=X[_e+2]),j&&(ee[ae++]=1,ae+=1);if(E){let ot=xe;for(_e=ot*3,u=0;u<2;u++)J=c1(J,q,_e,p,_),q+=6,o.st&&(K=l1(K,be,ot*2,G),be+=4),n&&(Te+=3,z[Te++]=X[_e],z[Te++]=X[_e+1],z[Te++]=X[_e+2]),j&&(ee[ae++]=1,ae+=1)}else for(u=l-1;u>=0;u--)_e=u*3,J=c1(J,q,_e,p,_),q+=6,o.st&&(K=l1(K,be,u*2,G),be+=4),n&&(Te+=3,z[Te++]=X[_e],z[Te++]=X[_e+1],z[Te++]=X[_e+2]),j&&(ee[ae++]=1,ae+=1);let Ve=CJe(J,o,a);o.st&&(Ve.attributes.st=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:K})),n&&(Ve.attributes.extrudeDirection=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:z})),v&&(Ve.attributes.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:ee}));let Ie=Ue.createTypedArray(U,B*6),Me,ve,ke,ct;y=J.length/3;let yt=0;for(u=0;u<y-1;u+=2){Me=u,ct=(Me+2)%y;let ot=h.fromArray(J,Me*3,dH),ln=h.fromArray(J,ct*3,Ule);h.equalsEpsilon(ot,ln,W.EPSILON10)||(ve=(Me+1)%y,ke=(ve+2)%y,Ie[yt++]=Me,Ie[yt++]=ve,Ie[yt++]=ct,Ie[yt++]=ct,Ie[yt++]=ve,Ie[yt++]=ke)}return Ve.indices=Ie,Ve=An.combineInstances([new _t({geometry:m}),new _t({geometry:Ve})]),Ve[0]}var LJe=[new h,new h,new h,new h],Dle=new he,RJe=new he;function mH(e,t,n,i,o){if(n===0)return de.clone(e,o);let r=ls.computeOptions(e,t,n,0,Mle,Dle),s=r.height,a=r.width,c=LJe;return ls.computePosition(r,i,!1,0,0,c[0]),ls.computePosition(r,i,!1,0,a-1,c[1]),ls.computePosition(r,i,!1,s-1,0,c[2]),ls.computePosition(r,i,!1,s-1,a-1,c[3]),de.fromCartesianArray(c,i,o)}function df(e){e=g(e,g.EMPTY_OBJECT);let t=e.rectangle,n=g(e.height,0),i=g(e.extrudedHeight,n);this._rectangle=de.clone(t),this._granularity=g(e.granularity,W.RADIANS_PER_DEGREE),this._ellipsoid=re.clone(g(e.ellipsoid,re.WGS84)),this._surfaceHeight=Math.max(n,i),this._rotation=g(e.rotation,0),this._stRotation=g(e.stRotation,0),this._vertexFormat=We.clone(g(e.vertexFormat,We.DEFAULT)),this._extrudedHeight=Math.min(n,i),this._shadowVolume=g(e.shadowVolume,!1),this._workerName="createRectangleGeometry",this._offsetAttribute=e.offsetAttribute,this._rotatedRectangle=void 0,this._textureCoordinateRotationPoints=void 0}df.packedLength=de.packedLength+re.packedLength+We.packedLength+7;df.pack=function(e,t,n){return n=g(n,0),de.pack(e._rectangle,t,n),n+=de.packedLength,re.pack(e._ellipsoid,t,n),n+=re.packedLength,We.pack(e._vertexFormat,t,n),n+=We.packedLength,t[n++]=e._granularity,t[n++]=e._surfaceHeight,t[n++]=e._rotation,t[n++]=e._stRotation,t[n++]=e._extrudedHeight,t[n++]=e._shadowVolume?1:0,t[n]=g(e._offsetAttribute,-1),t};var Ble=new de,Yle=re.clone(re.UNIT_SPHERE),_y={rectangle:Ble,ellipsoid:Yle,vertexFormat:uH,granularity:void 0,height:void 0,rotation:void 0,stRotation:void 0,extrudedHeight:void 0,shadowVolume:void 0,offsetAttribute:void 0};df.unpack=function(e,t,n){t=g(t,0);let i=de.unpack(e,t,Ble);t+=de.packedLength;let o=re.unpack(e,t,Yle);t+=re.packedLength;let r=We.unpack(e,t,uH);t+=We.packedLength;let s=e[t++],a=e[t++],c=e[t++],l=e[t++],u=e[t++],m=e[t++]===1,p=e[t];return d(n)?(n._rectangle=de.clone(i,n._rectangle),n._ellipsoid=re.clone(o,n._ellipsoid),n._vertexFormat=We.clone(r,n._vertexFormat),n._granularity=s,n._surfaceHeight=a,n._rotation=c,n._stRotation=l,n._extrudedHeight=u,n._shadowVolume=m,n._offsetAttribute=p===-1?void 0:p,n):(_y.granularity=s,_y.height=a,_y.rotation=c,_y.stRotation=l,_y.extrudedHeight=u,_y.shadowVolume=m,_y.offsetAttribute=p===-1?void 0:p,new df(_y))};df.computeRectangle=function(e,t){e=g(e,g.EMPTY_OBJECT);let n=e.rectangle,i=g(e.granularity,W.RADIANS_PER_DEGREE),o=g(e.ellipsoid,re.WGS84),r=g(e.rotation,0);return mH(n,i,r,o,t)};var ZJe=new $,Ple=new Ae,GJe=new he;df.createGeometry=function(e){if(W.equalsEpsilon(e._rectangle.north,e._rectangle.south,W.EPSILON10)||W.equalsEpsilon(e._rectangle.east,e._rectangle.west,W.EPSILON10))return;let t=e._rectangle,n=e._ellipsoid,i=e._rotation,o=e._stRotation,r=e._vertexFormat,s=ls.computeOptions(t,e._granularity,i,o,Mle,Dle,RJe),a=ZJe;if(o!==0||i!==0){let y=de.center(t,GJe),f=n.geodeticSurfaceNormalCartographic(y,dH);Ae.fromAxisAngle(f,-o,Ple),$.fromQuaternion(Ple,a)}else $.clone($.IDENTITY,a);let c=e._surfaceHeight,l=e._extrudedHeight,u=!W.equalsEpsilon(c,l,0,W.EPSILON2);s.lonScalar=1/e._rectangle.width,s.latScalar=1/e._rectangle.height,s.tangentRotationMatrix=a;let m,p;if(t=e._rectangle,u){m=VJe(e,s);let y=ce.fromRectangle3D(t,n,c,TJe),f=ce.fromRectangle3D(t,n,l,_Je);p=ce.union(y,f)}else{if(m=kle(e,s),m.attributes.position.values=ai.scaleToGeodeticHeight(m.attributes.position.values,c,n,!1),d(e._offsetAttribute)){let y=m.attributes.position.values.length,f=e._offsetAttribute===on.NONE?0:1,x=new Uint8Array(y/3).fill(f);m.attributes.applyOffset=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:x})}p=ce.fromRectangle3D(t,n,c)}return r.position||delete m.attributes.position,new dt({attributes:m.attributes,indices:m.indices,primitiveType:m.primitiveType,boundingSphere:p,offsetAttribute:e._offsetAttribute})};df.createShadowVolume=function(e,t,n){let i=e._granularity,o=e._ellipsoid,r=t(i,o),s=n(i,o);return new df({rectangle:e._rectangle,rotation:e._rotation,ellipsoid:o,stRotation:e._stRotation,granularity:i,extrudedHeight:s,height:r,vertexFormat:We.POSITION_ONLY,shadowVolume:!0})};var vle=new de,EJe=[new D,new D,new D],XJe=new $i,IJe=new he;function WJe(e){if(e._stRotation===0)return[0,0,0,1,1,0];let t=de.clone(e._rectangle,vle),n=e._granularity,i=e._ellipsoid,o=e._rotation-e._stRotation,r=mH(t,n,o,i,vle),s=EJe;s[0].x=r.west,s[0].y=r.south,s[1].x=r.west,s[1].y=r.north,s[2].x=r.east,s[2].y=r.south;let a=e.rectangle,c=$i.fromRotation(e._stRotation,XJe),l=de.center(a,IJe);for(let f=0;f<3;++f){let x=s[f];x.x-=l.longitude,x.y-=l.latitude,$i.multiplyByVector(c,x,x),x.x+=l.longitude,x.y+=l.latitude,x.x=(x.x-a.west)/a.width,x.y=(x.y-a.south)/a.height}let u=s[0],m=s[1],p=s[2],y=new Array(6);return D.pack(u,y),D.pack(m,y,2),D.pack(p,y,4),y}Object.defineProperties(df.prototype,{rectangle:{get:function(){return d(this._rotatedRectangle)||(this._rotatedRectangle=mH(this._rectangle,this._granularity,this._rotation,this._ellipsoid)),this._rotatedRectangle}},textureCoordinateRotationPoints:{get:function(){return d(this._textureCoordinateRotationPoints)||(this._textureCoordinateRotationPoints=WJe(this)),this._textureCoordinateRotationPoints}}});var Z_=df;var Ole=new Y,Kle=h.ZERO,Hle=new h,zle=new de,PJe=new de,vJe=new he;function wJe(e){this.id=e,this.vertexFormat=void 0,this.rectangle=void 0,this.height=void 0,this.extrudedHeight=void 0,this.granularity=void 0,this.stRotation=void 0,this.rotation=void 0,this.offsetAttribute=void 0}function Km(e,t){Hn.call(this,{entity:e,scene:t,geometryOptions:new wJe(e),geometryPropertyName:"rectangle",observedPropertyNames:["availability","rectangle"]}),this._onEntityPropertyChanged(e,"rectangle",e.rectangle,void 0)}d(Object.create)&&(Km.prototype=Object.create(Hn.prototype),Km.prototype.constructor=Km);Km.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i={show:new gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),distanceDisplayCondition:Un.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};if(this._materialProperty instanceof At){let o;d(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(o=this._materialProperty.color.getValue(e,Ole)),d(o)||(o=Y.WHITE),i.color=Ut.fromColor(o)}return d(this._options.offsetAttribute)&&(i.offset=zi.fromCartesian3(H.getValueOrDefault(this._terrainOffsetProperty,e,Kle,Hle))),new _t({id:t,geometry:new Z_(this._options),attributes:i})};Km.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=H.getValueOrDefault(this._outlineColorProperty,e,Y.BLACK,Ole),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Ut.fromColor(i),distanceDisplayCondition:Un.fromDistanceDisplayCondition(o),offset:void 0};return d(this._options.offsetAttribute)&&(r.offset=zi.fromCartesian3(H.getValueOrDefault(this._terrainOffsetProperty,e,Kle,Hle))),new _t({id:t,geometry:new qx(this._options),attributes:r})};Km.prototype._computeCenter=function(e,t){let n=H.getValueOrUndefined(this._entity.rectangle.coordinates,e,PJe);if(!d(n))return;let i=de.center(n,vJe);return he.toCartesian(i,re.WGS84,t)};Km.prototype._isHidden=function(e,t){return!d(t.coordinates)||ii.prototype._isHidden.call(this,e,t)};Km.prototype._isDynamic=function(e,t){return!t.coordinates.isConstant||!H.isConstant(t.height)||!H.isConstant(t.extrudedHeight)||!H.isConstant(t.granularity)||!H.isConstant(t.stRotation)||!H.isConstant(t.rotation)||!H.isConstant(t.outlineWidth)||!H.isConstant(t.zIndex)||this._onTerrain&&!H.isConstant(this._materialProperty)&&!(this._materialProperty instanceof At)};Km.prototype._setStaticOptions=function(e,t){let n=this._materialProperty instanceof At,i=H.getValueOrUndefined(t.height,Be.MINIMUM_VALUE),o=H.getValueOrDefault(t.heightReference,Be.MINIMUM_VALUE,Oe.NONE),r=H.getValueOrUndefined(t.extrudedHeight,Be.MINIMUM_VALUE),s=H.getValueOrDefault(t.extrudedHeightReference,Be.MINIMUM_VALUE,Oe.NONE);d(r)&&!d(i)&&(i=0);let a=this._options;a.vertexFormat=n?rn.VERTEX_FORMAT:so.MaterialSupport.TEXTURED.vertexFormat,a.rectangle=t.coordinates.getValue(Be.MINIMUM_VALUE,a.rectangle),a.granularity=H.getValueOrUndefined(t.granularity,Be.MINIMUM_VALUE),a.stRotation=H.getValueOrUndefined(t.stRotation,Be.MINIMUM_VALUE),a.rotation=H.getValueOrUndefined(t.rotation,Be.MINIMUM_VALUE),a.offsetAttribute=Hn.computeGeometryOffsetAttribute(i,o,r,s),a.height=Hn.getGeometryHeight(i,o),r=Hn.getGeometryExtrudedHeight(r,s),r===Hn.CLAMP_TO_GROUND&&(r=li.getMinimumMaximumHeights(Z_.computeRectangle(a,zle)).minimumTerrainHeight),a.extrudedHeight=r};Km.DynamicGeometryUpdater=d1;function d1(e,t,n){ni.call(this,e,t,n)}d(Object.create)&&(d1.prototype=Object.create(ni.prototype),d1.prototype.constructor=d1);d1.prototype._isHidden=function(e,t,n){return!d(this._options.rectangle)||ni.prototype._isHidden.call(this,e,t,n)};d1.prototype._setOptions=function(e,t,n){let i=this._options,o=H.getValueOrUndefined(t.height,n),r=H.getValueOrDefault(t.heightReference,n,Oe.NONE),s=H.getValueOrUndefined(t.extrudedHeight,n),a=H.getValueOrDefault(t.extrudedHeightReference,n,Oe.NONE);d(s)&&!d(o)&&(o=0),i.rectangle=H.getValueOrUndefined(t.coordinates,n,i.rectangle),i.granularity=H.getValueOrUndefined(t.granularity,n),i.stRotation=H.getValueOrUndefined(t.stRotation,n),i.rotation=H.getValueOrUndefined(t.rotation,n),i.offsetAttribute=Hn.computeGeometryOffsetAttribute(o,r,s,a),i.height=Hn.getGeometryHeight(o,r),s=Hn.getGeometryExtrudedHeight(s,a),s===Hn.CLAMP_TO_GROUND&&(s=li.getMinimumMaximumHeights(Z_.computeRectangle(i,zle)).minimumTerrainHeight),i.extrudedHeight=s};var P2=Km;var vQn=T(S(),1);var Jle=new Y,FJe=new Gt,AJe=new Gt,MJe=h.ZERO,NJe=new h;function Hm(e,t,n,i,o,r,s){this.translucent=t,this.appearanceType=n,this.depthFailAppearanceType=i,this.depthFailMaterialProperty=o,this.depthFailMaterial=void 0,this.closed=r,this.shadows=s,this.primitives=e,this.createPrimitive=!1,this.waitingOnCreate=!1,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Tt,this.updaters=new Tt,this.updatersWithAttributes=new Tt,this.attributes=new Tt,this.subscriptions=new Tt,this.showsUpdated=new Tt,this.itemsToRemove=[],this.invalidated=!1;let a;d(o)&&(a=o.definitionChanged.addEventListener(Hm.prototype.onMaterialChanged,this)),this.removeMaterialSubscription=a}Hm.prototype.onMaterialChanged=function(){this.invalidated=!0};Hm.prototype.isMaterial=function(e){let t=this.depthFailMaterialProperty,n=e.depthFailMaterialProperty;return n===t?!0:d(t)?t.equals(n):!1};Hm.prototype.add=function(e,t){let n=e.id;if(this.createPrimitive=!0,this.geometry.set(n,t),this.updaters.set(n,e),!e.hasConstantFill||!e.fillMaterialProperty.isConstant||!H.isConstant(e.distanceDisplayConditionProperty)||!H.isConstant(e.terrainOffsetProperty))this.updatersWithAttributes.set(n,e);else{let i=this;this.subscriptions.set(n,e.entity.definitionChanged.addEventListener(function(o,r,s,a){r==="isShowing"&&i.showsUpdated.set(e.id,e)}))}};Hm.prototype.remove=function(e){let t=e.id;if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.updatersWithAttributes.remove(t);let n=this.subscriptions.get(t);return d(n)&&(n(),this.subscriptions.remove(t),this.showsUpdated.remove(t)),!0}return!1};Hm.prototype.update=function(e){let t=!0,n=0,i=this.primitive,o=this.primitives,r;if(this.createPrimitive){let s=this.geometry.values;if(s.length>0){d(i)&&(d(this.oldPrimitive)?o.remove(i):this.oldPrimitive=i);let c;d(this.depthFailAppearanceType)&&(d(this.depthFailMaterialProperty)&&(this.depthFailMaterial=Yo.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial)),c=new this.depthFailAppearanceType({material:this.depthFailMaterial,translucent:this.translucent,closed:this.closed})),i=new Zn({show:!1,asynchronous:!0,geometryInstances:s.slice(),appearance:new this.appearanceType({translucent:this.translucent,closed:this.closed}),depthFailAppearance:c,shadows:this.shadows}),o.add(i),t=!1}else{d(i)&&(o.remove(i),i=void 0);let c=this.oldPrimitive;d(c)&&(o.remove(c),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=i,this.createPrimitive=!1,this.waitingOnCreate=!0}else if(d(i)&&i.ready){i.show=!0,d(this.oldPrimitive)&&(o.remove(this.oldPrimitive),this.oldPrimitive=void 0),d(this.depthFailAppearanceType)&&!(this.depthFailMaterialProperty instanceof At)&&(this.depthFailMaterial=Yo.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial),this.primitive.depthFailAppearance.material=this.depthFailMaterial);let s=this.updatersWithAttributes.values,a=s.length,c=this.waitingOnCreate;for(r=0;r<a;r++){let l=s[r],u=this.geometry.get(l.id),m=this.attributes.get(u.id.id);if(d(m)||(m=i.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,m)),!l.fillMaterialProperty.isConstant||c){let _=l.fillMaterialProperty.color,C=H.getValueOrDefault(_,e,Y.WHITE,Jle);Y.equals(m._lastColor,C)||(m._lastColor=Y.clone(C,m._lastColor),m.color=Ut.toValue(C,m.color),(this.translucent&&m.color[3]===255||!this.translucent&&m.color[3]!==255)&&(this.itemsToRemove[n++]=l))}if(d(this.depthFailAppearanceType)&&l.depthFailMaterialProperty instanceof At&&(!l.depthFailMaterialProperty.isConstant||c)){let _=l.depthFailMaterialProperty.color,C=H.getValueOrDefault(_,e,Y.WHITE,Jle);Y.equals(m._lastDepthFailColor,C)||(m._lastDepthFailColor=Y.clone(C,m._lastDepthFailColor),m.depthFailColor=Ut.toValue(C,m.depthFailColor))}let p=l.entity.isShowing&&(l.hasConstantFill||l.isFilled(e)),y=m.show[0]===1;p!==y&&(m.show=gn.toValue(p,m.show));let f=l.distanceDisplayConditionProperty;if(!H.isConstant(f)){let _=H.getValueOrDefault(f,e,AJe,FJe);Gt.equals(_,m._lastDistanceDisplayCondition)||(m._lastDistanceDisplayCondition=Gt.clone(_,m._lastDistanceDisplayCondition),m.distanceDisplayCondition=Un.toValue(_,m.distanceDisplayCondition))}let x=l.terrainOffsetProperty;if(!H.isConstant(x)){let _=H.getValueOrDefault(x,e,MJe,NJe);h.equals(_,m._lastOffset)||(m._lastOffset=h.clone(_,m._lastOffset),m.offset=zi.toValue(_,m.offset))}}this.updateShows(i),this.waitingOnCreate=!1}else d(i)&&!i.ready&&(t=!1);return this.itemsToRemove.length=n,t};Hm.prototype.updateShows=function(e){let t=this.showsUpdated.values,n=t.length;for(let i=0;i<n;i++){let o=t[i],r=this.geometry.get(o.id),s=this.attributes.get(r.id.id);d(s)||(s=e.getGeometryInstanceAttributes(r.id),this.attributes.set(r.id.id,s));let a=o.entity.isShowing,c=s.show[0]===1;a!==c&&(s.show=gn.toValue(a,s.show),r.attributes.show.value[0]=s.show[0])}this.showsUpdated.removeAll()};Hm.prototype.contains=function(e){return this.updaters.contains(e.id)};Hm.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return lt.PENDING;let i=n.getGeometryInstanceAttributes(e.entity);return!d(i)||!d(i.boundingSphere)||d(i.show)&&i.show[0]===0?lt.FAILED:(i.boundingSphere.clone(t),lt.DONE)};Hm.prototype.destroy=function(){let e=this.primitive,t=this.primitives;d(e)&&t.remove(e);let n=this.oldPrimitive;d(n)&&t.remove(n),d(this.removeMaterialSubscription)&&this.removeMaterialSubscription()};function u1(e,t,n,i,o){this._solidItems=[],this._translucentItems=[],this._primitives=e,this._appearanceType=t,this._depthFailAppearanceType=n,this._closed=i,this._shadows=o}u1.prototype.add=function(e,t){let n,i,o=t.createFillGeometryInstance(e);o.attributes.color.value[3]===255?(n=this._solidItems,i=!1):(n=this._translucentItems,i=!0);let r=n.length;for(let a=0;a<r;a++){let c=n[a];if(c.isMaterial(t)){c.add(t,o);return}}let s=new Hm(this._primitives,i,this._appearanceType,this._depthFailAppearanceType,t.depthFailMaterialProperty,this._closed,this._shadows);s.add(t,o),n.push(s)};function Qle(e,t){let n=e.length;for(let i=n-1;i>=0;i--){let o=e[i];if(o.remove(t))return o.updaters.length===0&&(e.splice(i,1),o.destroy()),!0}return!1}u1.prototype.remove=function(e){Qle(this._solidItems,e)||Qle(this._translucentItems,e)};function jle(e,t,n){let i=!1,o=t.length;for(let r=0;r<o;++r){let s=t[r],a=s.itemsToRemove,c=a.length;if(c>0)for(r=0;r<c;r++){let l=a[r];s.remove(l),e.add(n,l),i=!0}}return i}function r5(e,t,n,i){let o=t.length,r;for(r=o-1;r>=0;r--){let s=t[r];if(s.invalidated){t.splice(r,1);let a=s.updaters.values,c=a.length;for(let l=0;l<c;l++)e.add(n,a[l]);s.destroy()}}for(o=t.length,r=0;r<o;++r)i=t[r].update(n)&&i;return i}u1.prototype.update=function(e){let t=r5(this,this._solidItems,e,!0);t=r5(this,this._translucentItems,e,t)&&t;let n=jle(this,this._solidItems,e),i=jle(this,this._translucentItems,e);return(n||i)&&(t=r5(this,this._solidItems,e,t)&&t,t=r5(this,this._translucentItems,e,t)&&t),t};function qle(e,t,n){let i=e.length;for(let o=0;o<i;o++){let r=e[o];if(r.contains(t))return r.getBoundingSphere(t,n)}return lt.FAILED}u1.prototype.getBoundingSphere=function(e,t){let n=qle(this._solidItems,e,t);return n===lt.FAILED?qle(this._translucentItems,e,t):n};function $le(e){let t=e.length;for(let n=0;n<t;n++)e[n].destroy();e.length=0}u1.prototype.removeAllPrimitives=function(){$le(this._solidItems),$le(this._translucentItems)};var Zu=u1;var QQn=T(S(),1);var UJe=new Gt,kJe=new Gt,DJe=h.ZERO,BJe=new h;function zm(e,t,n,i,o,r,s){this.primitives=e,this.appearanceType=t,this.materialProperty=n,this.depthFailAppearanceType=i,this.depthFailMaterialProperty=o,this.closed=r,this.shadows=s,this.updaters=new Tt,this.createPrimitive=!0,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Tt,this.material=void 0,this.depthFailMaterial=void 0,this.updatersWithAttributes=new Tt,this.attributes=new Tt,this.invalidated=!1,this.removeMaterialSubscription=n.definitionChanged.addEventListener(zm.prototype.onMaterialChanged,this),this.subscriptions=new Tt,this.showsUpdated=new Tt}zm.prototype.onMaterialChanged=function(){this.invalidated=!0};zm.prototype.isMaterial=function(e){let t=this.materialProperty,n=e.fillMaterialProperty,i=this.depthFailMaterialProperty,o=e.depthFailMaterialProperty;if(n===t&&o===i)return!0;let r=d(t)&&t.equals(n);return r=(!d(i)&&!d(o)||d(i)&&i.equals(o))&&r,r};zm.prototype.add=function(e,t){let n=t.id;if(this.updaters.set(n,t),this.geometry.set(n,t.createFillGeometryInstance(e)),!t.hasConstantFill||!t.fillMaterialProperty.isConstant||!H.isConstant(t.distanceDisplayConditionProperty)||!H.isConstant(t.terrainOffsetProperty))this.updatersWithAttributes.set(n,t);else{let i=this;this.subscriptions.set(n,t.entity.definitionChanged.addEventListener(function(o,r,s,a){r==="isShowing"&&i.showsUpdated.set(t.id,t)}))}this.createPrimitive=!0};zm.prototype.remove=function(e){let t=e.id;if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.updatersWithAttributes.remove(t);let n=this.subscriptions.get(t);return d(n)&&(n(),this.subscriptions.remove(t),this.showsUpdated.remove(t)),!0}return!1};var YJe=new Y;zm.prototype.update=function(e){let t=!0,n=this.primitive,i=this.primitives,o=this.geometry.values,r;if(this.createPrimitive){if(o.length>0){d(n)&&(d(this.oldPrimitive)?i.remove(n):this.oldPrimitive=n),this.material=Yo.getValue(e,this.materialProperty,this.material);let a;d(this.depthFailMaterialProperty)&&(this.depthFailMaterial=Yo.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial),a=new this.depthFailAppearanceType({material:this.depthFailMaterial,translucent:this.depthFailMaterial.isTranslucent(),closed:this.closed})),n=new Zn({show:!1,asynchronous:!0,geometryInstances:o.slice(),appearance:new this.appearanceType({material:this.material,translucent:this.material.isTranslucent(),closed:this.closed}),depthFailAppearance:a,shadows:this.shadows}),i.add(n),t=!1}else{d(n)&&(i.remove(n),n=void 0);let a=this.oldPrimitive;d(a)&&(i.remove(a),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=n,this.createPrimitive=!1}else if(d(n)&&n.ready){n.show=!0,d(this.oldPrimitive)&&(i.remove(this.oldPrimitive),this.oldPrimitive=void 0),this.material=Yo.getValue(e,this.materialProperty,this.material),this.primitive.appearance.material=this.material,d(this.depthFailAppearanceType)&&!(this.depthFailMaterialProperty instanceof At)&&(this.depthFailMaterial=Yo.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial),this.primitive.depthFailAppearance.material=this.depthFailMaterial);let s=this.updatersWithAttributes.values,a=s.length;for(r=0;r<a;r++){let c=s[r],l=c.entity,u=this.geometry.get(c.id),m=this.attributes.get(u.id.id);if(d(m)||(m=n.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,m)),d(this.depthFailAppearanceType)&&this.depthFailMaterialProperty instanceof At&&!c.depthFailMaterialProperty.isConstant){let _=c.depthFailMaterialProperty.color,C=H.getValueOrDefault(_,e,Y.WHITE,YJe);Y.equals(m._lastDepthFailColor,C)||(m._lastDepthFailColor=Y.clone(C,m._lastDepthFailColor),m.depthFailColor=Ut.toValue(C,m.depthFailColor))}let p=l.isShowing&&(c.hasConstantFill||c.isFilled(e)),y=m.show[0]===1;p!==y&&(m.show=gn.toValue(p,m.show));let f=c.distanceDisplayConditionProperty;if(!H.isConstant(f)){let _=H.getValueOrDefault(f,e,kJe,UJe);Gt.equals(_,m._lastDistanceDisplayCondition)||(m._lastDistanceDisplayCondition=Gt.clone(_,m._lastDistanceDisplayCondition),m.distanceDisplayCondition=Un.toValue(_,m.distanceDisplayCondition))}let x=c.terrainOffsetProperty;if(!H.isConstant(x)){let _=H.getValueOrDefault(x,e,DJe,BJe);h.equals(_,m._lastOffset)||(m._lastOffset=h.clone(_,m._lastOffset),m.offset=zi.toValue(_,m.offset))}}this.updateShows(n)}else d(n)&&!n.ready&&(t=!1);return t};zm.prototype.updateShows=function(e){let t=this.showsUpdated.values,n=t.length;for(let i=0;i<n;i++){let o=t[i],r=o.entity,s=this.geometry.get(o.id),a=this.attributes.get(s.id.id);d(a)||(a=e.getGeometryInstanceAttributes(s.id),this.attributes.set(s.id.id,a));let c=r.isShowing,l=a.show[0]===1;c!==l&&(a.show=gn.toValue(c,a.show),s.attributes.show.value[0]=a.show[0])}this.showsUpdated.removeAll()};zm.prototype.contains=function(e){return this.updaters.contains(e.id)};zm.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return lt.PENDING;let i=n.getGeometryInstanceAttributes(e.entity);return!d(i)||!d(i.boundingSphere)||d(i.show)&&i.show[0]===0?lt.FAILED:(i.boundingSphere.clone(t),lt.DONE)};zm.prototype.destroy=function(){let e=this.primitive,t=this.primitives;d(e)&&t.remove(e);let n=this.oldPrimitive;d(n)&&t.remove(n),this.removeMaterialSubscription()};function m1(e,t,n,i,o){this._items=[],this._primitives=e,this._appearanceType=t,this._depthFailAppearanceType=n,this._closed=i,this._shadows=o}m1.prototype.add=function(e,t){let n=this._items,i=n.length;for(let r=0;r<i;r++){let s=n[r];if(s.isMaterial(t)){s.add(e,t);return}}let o=new zm(this._primitives,this._appearanceType,t.fillMaterialProperty,this._depthFailAppearanceType,t.depthFailMaterialProperty,this._closed,this._shadows);o.add(e,t),n.push(o)};m1.prototype.remove=function(e){let t=this._items,n=t.length;for(let i=n-1;i>=0;i--){let o=t[i];if(o.remove(e)){o.updaters.length===0&&(t.splice(i,1),o.destroy());break}}};m1.prototype.update=function(e){let t,n=this._items,i=n.length;for(t=i-1;t>=0;t--){let r=n[t];if(r.invalidated){n.splice(t,1);let s=r.updaters.values,a=s.length;for(let c=0;c<a;c++)this.add(e,s[c]);r.destroy()}}let o=!0;for(t=0;t<n.length;t++)o=n[t].update(e)&&o;return o};m1.prototype.getBoundingSphere=function(e,t){let n=this._items,i=n.length;for(let o=0;o<i;o++){let r=n[o];if(r.contains(e))return r.getBoundingSphere(e,t)}return lt.FAILED};m1.prototype.removeAllPrimitives=function(){let e=this._items,t=e.length;for(let n=0;n<t;n++)e[n].destroy();this._items.length=0};var Gu=m1;var m4n=T(S(),1);var $Qn=T(S(),1),tde=T(ede(),1);function s5(){this._tree=new tde.default}function G_(){this.minX=0,this.minY=0,this.maxX=0,this.maxY=0,this.id=""}G_.fromRectangleAndId=function(e,t,n){return n.minX=t.west,n.minY=t.south,n.maxX=t.east,n.maxY=t.north,n.id=e,n};s5.prototype.insert=function(e,t){let n=G_.fromRectangleAndId(e,t,new G_);this._tree.insert(n)};function OJe(e,t){return e.id===t.id}var KJe=new G_;s5.prototype.remove=function(e,t){let n=G_.fromRectangleAndId(e,t,KJe);this._tree.remove(n,OJe)};var HJe=new G_;s5.prototype.collides=function(e){let t=G_.fromRectangleAndId("",e,HJe);return this._tree.collides(t)};var E_=s5;var zJe=new Y,JJe=new Gt,QJe=new Gt;function x0(e,t,n,i){this.primitives=e,this.zIndex=i,this.classificationType=t,this.color=n,this.createPrimitive=!1,this.waitingOnCreate=!1,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Tt,this.updaters=new Tt,this.updatersWithAttributes=new Tt,this.attributes=new Tt,this.subscriptions=new Tt,this.showsUpdated=new Tt,this.itemsToRemove=[],this.isDirty=!1,this.rectangleCollisionCheck=new E_}x0.prototype.overlapping=function(e){return this.rectangleCollisionCheck.collides(e)};x0.prototype.add=function(e,t){let n=e.id;if(this.createPrimitive=!0,this.geometry.set(n,t),this.updaters.set(n,e),this.rectangleCollisionCheck.insert(n,t.geometry.rectangle),!e.hasConstantFill||!e.fillMaterialProperty.isConstant||!H.isConstant(e.distanceDisplayConditionProperty))this.updatersWithAttributes.set(n,e);else{let i=this;this.subscriptions.set(n,e.entity.definitionChanged.addEventListener(function(o,r,s,a){r==="isShowing"&&i.showsUpdated.set(e.id,e)}))}};x0.prototype.remove=function(e){let t=e.id,n=this.geometry.get(t);if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.rectangleCollisionCheck.remove(t,n.geometry.rectangle),this.updatersWithAttributes.remove(t);let i=this.subscriptions.get(t);return d(i)&&(i(),this.subscriptions.remove(t),this.showsUpdated.remove(t)),!0}return!1};x0.prototype.update=function(e){let t=!0,n=0,i=this.primitive,o=this.primitives,r;if(this.createPrimitive){let s=this.geometry.values;if(s.length>0)d(i)&&(d(this.oldPrimitive)?o.remove(i):this.oldPrimitive=i),i=new Vc({show:!1,asynchronous:!0,geometryInstances:s.slice(),classificationType:this.classificationType}),o.add(i,this.zIndex),t=!1;else{d(i)&&(o.remove(i),i=void 0);let c=this.oldPrimitive;d(c)&&(o.remove(c),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=i,this.createPrimitive=!1,this.waitingOnCreate=!0}else if(d(i)&&i.ready){i.show=!0,d(this.oldPrimitive)&&(o.remove(this.oldPrimitive),this.oldPrimitive=void 0);let s=this.updatersWithAttributes.values,a=s.length,c=this.waitingOnCreate;for(r=0;r<a;r++){let l=s[r],u=this.geometry.get(l.id),m=this.attributes.get(u.id.id);if(d(m)||(m=i.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,m)),!l.fillMaterialProperty.isConstant||c){let x=l.fillMaterialProperty.color,_=H.getValueOrDefault(x,e,Y.WHITE,zJe);Y.equals(m._lastColor,_)||(m._lastColor=Y.clone(_,m._lastColor),m.color=Ut.toValue(_,m.color))}let p=l.entity.isShowing&&(l.hasConstantFill||l.isFilled(e)),y=m.show[0]===1;p!==y&&(m.show=gn.toValue(p,m.show));let f=l.distanceDisplayConditionProperty;if(!H.isConstant(f)){let x=H.getValueOrDefault(f,e,QJe,JJe);Gt.equals(x,m._lastDistanceDisplayCondition)||(m._lastDistanceDisplayCondition=Gt.clone(x,m._lastDistanceDisplayCondition),m.distanceDisplayCondition=Un.toValue(x,m.distanceDisplayCondition))}}this.updateShows(i),this.waitingOnCreate=!1}else d(i)&&!i.ready&&(t=!1);return this.itemsToRemove.length=n,t};x0.prototype.updateShows=function(e){let t=this.showsUpdated.values,n=t.length;for(let i=0;i<n;i++){let o=t[i],r=this.geometry.get(o.id),s=this.attributes.get(r.id.id);d(s)||(s=e.getGeometryInstanceAttributes(r.id),this.attributes.set(r.id.id,s));let a=o.entity.isShowing,c=s.show[0]===1;a!==c&&(s.show=gn.toValue(a,s.show),r.attributes.show.value[0]=s.show[0])}this.showsUpdated.removeAll()};x0.prototype.contains=function(e){return this.updaters.contains(e.id)};x0.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return lt.PENDING;let i=n.getBoundingSphere(e.entity);return d(i)?(i.clone(t),lt.DONE):lt.FAILED};x0.prototype.removeAllPrimitives=function(){let e=this.primitives,t=this.primitive;d(t)&&(e.remove(t),this.primitive=void 0,this.geometry.removeAll(),this.updaters.removeAll());let n=this.oldPrimitive;d(n)&&(e.remove(n),this.oldPrimitive=void 0)};function h1(e,t){this._batches=[],this._primitives=e,this._classificationType=t}h1.prototype.add=function(e,t){let n=t.createFillGeometryInstance(e),i=this._batches,o=H.getValueOrDefault(t.zIndex,0),r,s=i.length;for(let a=0;a<s;++a){let c=i[a];if(c.zIndex===o&&!c.overlapping(n.geometry.rectangle)){r=c;break}}return d(r)||(r=new x0(this._primitives,this._classificationType,n.attributes.color.value,o),i.push(r)),r.add(t,n),r};h1.prototype.remove=function(e){let t=this._batches,n=t.length;for(let i=0;i<n;++i)if(t[i].remove(e))return};h1.prototype.update=function(e){let t,n,i=!0,o=this._batches,r=o.length;for(t=0;t<r;++t)i=o[t].update(e)&&i;for(t=0;t<r;++t){let s=o[t],a=s.itemsToRemove,c=a.length;for(let l=0;l<c;l++){n=a[l],s.remove(n);let u=this.add(e,n);s.isDirty=!0,u.isDirty=!0}}for(t=r-1;t>=0;--t){let s=o[t];s.isDirty&&(i=o[t].update(e)&&i,s.isDirty=!1),s.geometry.length===0&&o.splice(t,1)}return i};h1.prototype.getBoundingSphere=function(e,t){let n=this._batches,i=n.length;for(let o=0;o<i;++o){let r=n[o];if(r.contains(e))return r.getBoundingSphere(e,t)}return lt.FAILED};h1.prototype.removeAllPrimitives=function(){let e=this._batches,t=e.length;for(let n=0;n<t;++n)e[n].removeAllPrimitives()};var f1=h1;var R4n=T(S(),1);var jJe=new Gt,qJe=new Gt;function Eu(e,t,n,i,o,r){this.primitives=e,this.classificationType=t,this.appearanceType=n,this.materialProperty=i,this.updaters=new Tt,this.createPrimitive=!0,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Tt,this.material=void 0,this.updatersWithAttributes=new Tt,this.attributes=new Tt,this.invalidated=!1,this.removeMaterialSubscription=i.definitionChanged.addEventListener(Eu.prototype.onMaterialChanged,this),this.subscriptions=new Tt,this.showsUpdated=new Tt,this.usingSphericalTextureCoordinates=o,this.zIndex=r,this.rectangleCollisionCheck=new E_}Eu.prototype.onMaterialChanged=function(){this.invalidated=!0};Eu.prototype.overlapping=function(e){return this.rectangleCollisionCheck.collides(e)};Eu.prototype.isMaterial=function(e){let t=this.materialProperty,n=e.fillMaterialProperty;return n===t||n instanceof At&&t instanceof At?!0:d(t)&&t.equals(n)};Eu.prototype.add=function(e,t,n){let i=t.id;if(this.updaters.set(i,t),this.geometry.set(i,n),this.rectangleCollisionCheck.insert(i,n.geometry.rectangle),!t.hasConstantFill||!t.fillMaterialProperty.isConstant||!H.isConstant(t.distanceDisplayConditionProperty))this.updatersWithAttributes.set(i,t);else{let o=this;this.subscriptions.set(i,t.entity.definitionChanged.addEventListener(function(r,s,a,c){s==="isShowing"&&o.showsUpdated.set(t.id,t)}))}this.createPrimitive=!0};Eu.prototype.remove=function(e){let t=e.id,n=this.geometry.get(t);if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.rectangleCollisionCheck.remove(t,n.geometry.rectangle),this.updatersWithAttributes.remove(t);let i=this.subscriptions.get(t);return d(i)&&(i(),this.subscriptions.remove(t)),!0}return!1};Eu.prototype.update=function(e){let t=!0,n=this.primitive,i=this.primitives,o=this.geometry.values,r;if(this.createPrimitive){if(o.length>0)d(n)&&(d(this.oldPrimitive)?i.remove(n):this.oldPrimitive=n),this.material=Yo.getValue(e,this.materialProperty,this.material),n=new Vc({show:!1,asynchronous:!0,geometryInstances:o.slice(),appearance:new this.appearanceType({material:this.material}),classificationType:this.classificationType}),i.add(n,this.zIndex),t=!1;else{d(n)&&(i.remove(n),n=void 0);let a=this.oldPrimitive;d(a)&&(i.remove(a),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=n,this.createPrimitive=!1}else if(d(n)&&n.ready){n.show=!0,d(this.oldPrimitive)&&(i.remove(this.oldPrimitive),this.oldPrimitive=void 0),this.material=Yo.getValue(e,this.materialProperty,this.material),this.primitive.appearance.material=this.material;let s=this.updatersWithAttributes.values,a=s.length;for(r=0;r<a;r++){let c=s[r],l=c.entity,u=this.geometry.get(c.id),m=this.attributes.get(u.id.id);d(m)||(m=n.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,m));let p=l.isShowing&&(c.hasConstantFill||c.isFilled(e)),y=m.show[0]===1;p!==y&&(m.show=gn.toValue(p,m.show));let f=c.distanceDisplayConditionProperty;if(!H.isConstant(f)){let x=H.getValueOrDefault(f,e,qJe,jJe);Gt.equals(x,m._lastDistanceDisplayCondition)||(m._lastDistanceDisplayCondition=Gt.clone(x,m._lastDistanceDisplayCondition),m.distanceDisplayCondition=Un.toValue(x,m.distanceDisplayCondition))}}this.updateShows(n)}else d(n)&&!n.ready&&(t=!1);return t};Eu.prototype.updateShows=function(e){let t=this.showsUpdated.values,n=t.length;for(let i=0;i<n;i++){let o=t[i],r=o.entity,s=this.geometry.get(o.id),a=this.attributes.get(s.id.id);d(a)||(a=e.getGeometryInstanceAttributes(s.id),this.attributes.set(s.id.id,a));let c=r.isShowing,l=a.show[0]===1;c!==l&&(a.show=gn.toValue(c,a.show),s.attributes.show.value[0]=a.show[0])}this.showsUpdated.removeAll()};Eu.prototype.contains=function(e){return this.updaters.contains(e.id)};Eu.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return lt.PENDING;let i=n.getGeometryInstanceAttributes(e.entity);return!d(i)||!d(i.boundingSphere)||d(i.show)&&i.show[0]===0?lt.FAILED:(i.boundingSphere.clone(t),lt.DONE)};Eu.prototype.destroy=function(){let e=this.primitive,t=this.primitives;d(e)&&t.remove(e);let n=this.oldPrimitive;d(n)&&t.remove(n),this.removeMaterialSubscription()};function p1(e,t,n){this._items=[],this._primitives=e,this._classificationType=t,this._appearanceType=n}p1.prototype.add=function(e,t){let n=this._items,i=n.length,o=t.createFillGeometryInstance(e),r=Hl.shouldUseSphericalCoordinates(o.geometry.rectangle),s=H.getValueOrDefault(t.zIndex,0);for(let c=0;c<i;++c){let l=n[c];if(l.isMaterial(t)&&l.usingSphericalTextureCoordinates===r&&l.zIndex===s&&!l.overlapping(o.geometry.rectangle)){l.add(e,t,o);return}}let a=new Eu(this._primitives,this._classificationType,this._appearanceType,t.fillMaterialProperty,r,s);a.add(e,t,o),n.push(a)};p1.prototype.remove=function(e){let t=this._items,n=t.length;for(let i=n-1;i>=0;i--){let o=t[i];if(o.remove(e)){o.updaters.length===0&&(t.splice(i,1),o.destroy());break}}};p1.prototype.update=function(e){let t,n=this._items,i=n.length;for(t=i-1;t>=0;t--){let r=n[t];if(r.invalidated){n.splice(t,1);let s=r.updaters.values,a=s.length;for(let c=0;c<a;c++)this.add(e,s[c]);r.destroy()}}let o=!0;for(t=0;t<n.length;t++)o=n[t].update(e)&&o;return o};p1.prototype.getBoundingSphere=function(e,t){let n=this._items,i=n.length;for(let o=0;o<i;o++){let r=n[o];if(r.contains(e))return r.getBoundingSphere(e,t)}return lt.FAILED};p1.prototype.removeAllPrimitives=function(){let e=this._items,t=e.length;for(let n=0;n<t;n++)e[n].destroy();this._items.length=0};var v2=p1;var k4n=T(S(),1);var $Je=new Y,eQe=new Gt,tQe=new Gt,nQe=h.ZERO,iQe=new h;function _0(e,t,n,i){this.translucent=t,this.width=n,this.shadows=i,this.primitives=e,this.createPrimitive=!1,this.waitingOnCreate=!1,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Tt,this.updaters=new Tt,this.updatersWithAttributes=new Tt,this.attributes=new Tt,this.itemsToRemove=[],this.subscriptions=new Tt,this.showsUpdated=new Tt}_0.prototype.add=function(e,t){let n=e.id;if(this.createPrimitive=!0,this.geometry.set(n,t),this.updaters.set(n,e),!e.hasConstantOutline||!e.outlineColorProperty.isConstant||!H.isConstant(e.distanceDisplayConditionProperty)||!H.isConstant(e.terrainOffsetProperty))this.updatersWithAttributes.set(n,e);else{let i=this;this.subscriptions.set(n,e.entity.definitionChanged.addEventListener(function(o,r,s,a){r==="isShowing"&&i.showsUpdated.set(e.id,e)}))}};_0.prototype.remove=function(e){let t=e.id;if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.updatersWithAttributes.remove(t);let n=this.subscriptions.get(t);return d(n)&&(n(),this.subscriptions.remove(t),this.showsUpdated.remove(t)),!0}return!1};_0.prototype.update=function(e){let t=!0,n=0,i=this.primitive,o=this.primitives,r;if(this.createPrimitive){let s=this.geometry.values;if(s.length>0)d(i)&&(d(this.oldPrimitive)?o.remove(i):this.oldPrimitive=i),i=new Zn({show:!1,asynchronous:!0,geometryInstances:s.slice(),appearance:new rn({flat:!0,translucent:this.translucent,renderState:{lineWidth:this.width}}),shadows:this.shadows}),o.add(i),t=!1;else{d(i)&&(o.remove(i),i=void 0);let c=this.oldPrimitive;d(c)&&(o.remove(c),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=i,this.createPrimitive=!1,this.waitingOnCreate=!0}else if(d(i)&&i.ready){i.show=!0,d(this.oldPrimitive)&&(o.remove(this.oldPrimitive),this.oldPrimitive=void 0);let s=this.updatersWithAttributes.values,a=s.length,c=this.waitingOnCreate;for(r=0;r<a;r++){let l=s[r],u=this.geometry.get(l.id),m=this.attributes.get(u.id.id);if(d(m)||(m=i.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,m)),!l.outlineColorProperty.isConstant||c){let _=l.outlineColorProperty,C=H.getValueOrDefault(_,e,Y.WHITE,$Je);Y.equals(m._lastColor,C)||(m._lastColor=Y.clone(C,m._lastColor),m.color=Ut.toValue(C,m.color),(this.translucent&&m.color[3]===255||!this.translucent&&m.color[3]!==255)&&(this.itemsToRemove[n++]=l))}let p=l.entity.isShowing&&(l.hasConstantOutline||l.isOutlineVisible(e)),y=m.show[0]===1;p!==y&&(m.show=gn.toValue(p,m.show));let f=l.distanceDisplayConditionProperty;if(!H.isConstant(f)){let _=H.getValueOrDefault(f,e,tQe,eQe);Gt.equals(_,m._lastDistanceDisplayCondition)||(m._lastDistanceDisplayCondition=Gt.clone(_,m._lastDistanceDisplayCondition),m.distanceDisplayCondition=Un.toValue(_,m.distanceDisplayCondition))}let x=l.terrainOffsetProperty;if(!H.isConstant(x)){let _=H.getValueOrDefault(x,e,nQe,iQe);h.equals(_,m._lastOffset)||(m._lastOffset=h.clone(_,m._lastOffset),m.offset=zi.toValue(_,m.offset))}}this.updateShows(i),this.waitingOnCreate=!1}else d(i)&&!i.ready&&(t=!1);return this.itemsToRemove.length=n,t};_0.prototype.updateShows=function(e){let t=this.showsUpdated.values,n=t.length;for(let i=0;i<n;i++){let o=t[i],r=this.geometry.get(o.id),s=this.attributes.get(r.id.id);d(s)||(s=e.getGeometryInstanceAttributes(r.id),this.attributes.set(r.id.id,s));let a=o.entity.isShowing,c=s.show[0]===1;a!==c&&(s.show=gn.toValue(a,s.show),r.attributes.show.value[0]=s.show[0])}this.showsUpdated.removeAll()};_0.prototype.contains=function(e){return this.updaters.contains(e.id)};_0.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return lt.PENDING;let i=n.getGeometryInstanceAttributes(e.entity);return!d(i)||!d(i.boundingSphere)||d(i.show)&&i.show[0]===0?lt.FAILED:(i.boundingSphere.clone(t),lt.DONE)};_0.prototype.removeAllPrimitives=function(){let e=this.primitives,t=this.primitive;d(t)&&(e.remove(t),this.primitive=void 0,this.geometry.removeAll(),this.updaters.removeAll());let n=this.oldPrimitive;d(n)&&(e.remove(n),this.oldPrimitive=void 0)};function b1(e,t,n){this._primitives=e,this._scene=t,this._shadows=n,this._solidBatches=new Tt,this._translucentBatches=new Tt}b1.prototype.add=function(e,t){let n=t.createOutlineGeometryInstance(e),i=this._scene.clampLineWidth(t.outlineWidth),o,r;n.attributes.color.value[3]===255?(o=this._solidBatches,r=o.get(i),d(r)||(r=new _0(this._primitives,!1,i,this._shadows),o.set(i,r)),r.add(t,n)):(o=this._translucentBatches,r=o.get(i),d(r)||(r=new _0(this._primitives,!0,i,this._shadows),o.set(i,r)),r.add(t,n))};b1.prototype.remove=function(e){let t,n=this._solidBatches.values,i=n.length;for(t=0;t<i;t++)if(n[t].remove(e))return;let o=this._translucentBatches.values,r=o.length;for(t=0;t<r;t++)if(o[t].remove(e))return};b1.prototype.update=function(e){let t,n,i,o,r=this._solidBatches.values,s=r.length,a=this._translucentBatches.values,c=a.length,l,u=!0,m=!1;do{for(m=!1,n=0;n<s;n++){o=r[n],u=o.update(e),l=o.itemsToRemove;let p=l.length;if(p>0)for(m=!0,t=0;t<p;t++)i=l[t],o.remove(i),this.add(e,i)}for(n=0;n<c;n++){o=a[n],u=o.update(e),l=o.itemsToRemove;let p=l.length;if(p>0)for(m=!0,t=0;t<p;t++)i=l[t],o.remove(i),this.add(e,i)}}while(m);return u};b1.prototype.getBoundingSphere=function(e,t){let n,i=this._solidBatches.values,o=i.length;for(n=0;n<o;n++){let a=i[n];if(a.contains(e))return a.getBoundingSphere(e,t)}let r=this._translucentBatches.values,s=r.length;for(n=0;n<s;n++){let a=r[n];if(a.contains(e))return a.getBoundingSphere(e,t)}return lt.FAILED};b1.prototype.removeAllPrimitives=function(){let e,t=this._solidBatches.values,n=t.length;for(e=0;e<n;e++)t[e].removeAllPrimitives();let i=this._translucentBatches.values,o=i.length;for(e=0;e<o;e++)i[e].removeAllPrimitives()};var y1=b1;var Bjn=T(S(),1);var ujn=T(S(),1);var J4n=T(S(),1);var nde={};function oQe(e,t){return W.equalsEpsilon(e.latitude,t.latitude,W.EPSILON10)&&W.equalsEpsilon(e.longitude,t.longitude,W.EPSILON10)}var rQe=new he,sQe=new he;function aQe(e,t,n,i){t=go(t,h.equalsEpsilon);let o=t.length;if(o<2)return;let r=d(i),s=d(n),a=new Array(o),c=new Array(o),l=new Array(o),u=t[0];a[0]=u;let m=e.cartesianToCartographic(u,rQe);s&&(m.height=n[0]),c[0]=m.height,r?l[0]=i[0]:l[0]=0;let p=c[0],y=l[0],f=p===y,x=1;for(let _=1;_<o;++_){let C=t[_],V=e.cartesianToCartographic(C,sQe);s&&(V.height=n[_]),f=f&&V.height===0,oQe(m,V)?m.height<V.height&&(c[x-1]=V.height):(a[x]=C,c[x]=V.height,r?l[x]=i[_]:l[x]=0,f=f&&c[x]===l[x],he.clone(V,m),++x)}if(!(f||x<2))return a.length=x,c.length=x,l.length=x,{positions:a,topHeights:c,bottomHeights:l}}var cQe=new Array(2),lQe=new Array(2),dQe={positions:void 0,height:void 0,granularity:void 0,ellipsoid:void 0};nde.computePositions=function(e,t,n,i,o,r){let s=aQe(e,t,n,i);if(!d(s))return;t=s.positions,n=s.topHeights,i=s.bottomHeights;let a=t.length,c=a-2,l,u,m=W.chordLength(o,e.maximumRadius),p=dQe;if(p.minDistance=m,p.ellipsoid=e,r){let y=0,f;for(f=0;f<a-1;f++)y+=Xi.numberOfPoints(t[f],t[f+1],m)+1;l=new Float64Array(y*3),u=new Float64Array(y*3);let x=cQe,_=lQe;p.positions=x,p.height=_;let C=0;for(f=0;f<a-1;f++){x[0]=t[f],x[1]=t[f+1],_[0]=n[f],_[1]=n[f+1];let V=Xi.generateArc(p);l.set(V,C),_[0]=i[f],_[1]=i[f+1],u.set(Xi.generateArc(p),C),C+=V.length}}else p.positions=t,p.height=n,l=new Float64Array(Xi.generateArc(p)),p.height=i,u=new Float64Array(Xi.generateArc(p));return{bottomPositions:u,topPositions:l,numCorners:c}};var X_=nde;var pH=new h,a5=new h,uQe=new h,ide=new h,mQe=new h,hQe=new h,fQe=new h;function I_(e){e=g(e,g.EMPTY_OBJECT);let t=e.positions,n=e.maximumHeights,i=e.minimumHeights,o=g(e.vertexFormat,We.DEFAULT),r=g(e.granularity,W.RADIANS_PER_DEGREE),s=g(e.ellipsoid,re.WGS84);this._positions=t,this._minimumHeights=i,this._maximumHeights=n,this._vertexFormat=We.clone(o),this._granularity=r,this._ellipsoid=re.clone(s),this._workerName="createWallGeometry";let a=1+t.length*h.packedLength+2;d(i)&&(a+=i.length),d(n)&&(a+=n.length),this.packedLength=a+re.packedLength+We.packedLength+1}I_.pack=function(e,t,n){n=g(n,0);let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=h.packedLength)h.pack(o[i],t,n);let s=e._minimumHeights;if(r=d(s)?s.length:0,t[n++]=r,d(s))for(i=0;i<r;++i)t[n++]=s[i];let a=e._maximumHeights;if(r=d(a)?a.length:0,t[n++]=r,d(a))for(i=0;i<r;++i)t[n++]=a[i];return re.pack(e._ellipsoid,t,n),n+=re.packedLength,We.pack(e._vertexFormat,t,n),n+=We.packedLength,t[n]=e._granularity,t};var ode=re.clone(re.UNIT_SPHERE),rde=new We,w2={positions:void 0,minimumHeights:void 0,maximumHeights:void 0,ellipsoid:ode,vertexFormat:rde,granularity:void 0};I_.unpack=function(e,t,n){t=g(t,0);let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=h.packedLength)r[i]=h.unpack(e,t);o=e[t++];let s;if(o>0)for(s=new Array(o),i=0;i<o;++i)s[i]=e[t++];o=e[t++];let a;if(o>0)for(a=new Array(o),i=0;i<o;++i)a[i]=e[t++];let c=re.unpack(e,t,ode);t+=re.packedLength;let l=We.unpack(e,t,rde);t+=We.packedLength;let u=e[t];return d(n)?(n._positions=r,n._minimumHeights=s,n._maximumHeights=a,n._ellipsoid=re.clone(c,n._ellipsoid),n._vertexFormat=We.clone(l,n._vertexFormat),n._granularity=u,n):(w2.positions=r,w2.minimumHeights=s,w2.maximumHeights=a,w2.granularity=u,new I_(w2))};I_.fromConstantHeights=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.positions,n,i,o=e.minimumHeight,r=e.maximumHeight,s=d(o),a=d(r);if(s||a){let l=t.length;n=s?new Array(l):void 0,i=a?new Array(l):void 0;for(let u=0;u<l;++u)s&&(n[u]=o),a&&(i[u]=r)}let c={positions:t,maximumHeights:i,minimumHeights:n,ellipsoid:e.ellipsoid,vertexFormat:e.vertexFormat};return new I_(c)};I_.createGeometry=function(e){let t=e._positions,n=e._minimumHeights,i=e._maximumHeights,o=e._vertexFormat,r=e._granularity,s=e._ellipsoid,a=X_.computePositions(s,t,i,n,r,!0);if(!d(a))return;let c=a.bottomPositions,l=a.topPositions,u=a.numCorners,m=l.length,p=m*2,y=o.position?new Float64Array(p):void 0,f=o.normal?new Float32Array(p):void 0,x=o.tangent?new Float32Array(p):void 0,_=o.bitangent?new Float32Array(p):void 0,C=o.st?new Float32Array(p/3*2):void 0,V=0,L=0,Z=0,G=0,X=0,P=fQe,v=hQe,F=mQe,M=!0;m/=3;let b,R=0,E=1/(m-u-1);for(b=0;b<m;++b){let k=b*3,O=h.fromArray(l,k,pH),U=h.fromArray(c,k,a5);if(o.position&&(y[V++]=U.x,y[V++]=U.y,y[V++]=U.z,y[V++]=O.x,y[V++]=O.y,y[V++]=O.z),o.st&&(C[X++]=R,C[X++]=0,C[X++]=R,C[X++]=1),o.normal||o.tangent||o.bitangent){let J=h.clone(h.ZERO,ide),z=h.subtract(O,s.geodeticSurfaceNormal(O,a5),a5);if(b+1<m&&(J=h.fromArray(l,k+3,ide)),M){let ee=h.subtract(J,O,uQe),K=h.subtract(z,O,pH);P=h.normalize(h.cross(K,ee,P),P),M=!1}h.equalsEpsilon(O,J,W.EPSILON10)?M=!0:(R+=E,o.tangent&&(v=h.normalize(h.subtract(J,O,v),v)),o.bitangent&&(F=h.normalize(h.cross(P,v,F),F))),o.normal&&(f[L++]=P.x,f[L++]=P.y,f[L++]=P.z,f[L++]=P.x,f[L++]=P.y,f[L++]=P.z),o.tangent&&(x[G++]=v.x,x[G++]=v.y,x[G++]=v.z,x[G++]=v.x,x[G++]=v.y,x[G++]=v.z),o.bitangent&&(_[Z++]=F.x,_[Z++]=F.y,_[Z++]=F.z,_[Z++]=F.x,_[Z++]=F.y,_[Z++]=F.z)}}let I=new hn;o.position&&(I.position=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:y})),o.normal&&(I.normal=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:f})),o.tangent&&(I.tangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:x})),o.bitangent&&(I.bitangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:_})),o.st&&(I.st=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:C}));let w=p/3;p-=6*(u+1);let N=Ue.createTypedArray(w,p),B=0;for(b=0;b<w-2;b+=2){let k=b,O=b+2,U=h.fromArray(y,k*3,pH),J=h.fromArray(y,O*3,a5);if(h.equalsEpsilon(U,J,W.EPSILON10))continue;let z=b+1,ee=b+3;N[B++]=z,N[B++]=k,N[B++]=ee,N[B++]=ee,N[B++]=k,N[B++]=O}return new dt({attributes:I,indices:N,primitiveType:Fe.TRIANGLES,boundingSphere:new ce.fromVertices(y)})};var F2=I_;var Rjn=T(S(),1);var sde=new h,ade=new h;function W_(e){e=g(e,g.EMPTY_OBJECT);let t=e.positions,n=e.maximumHeights,i=e.minimumHeights,o=g(e.granularity,W.RADIANS_PER_DEGREE),r=g(e.ellipsoid,re.WGS84);this._positions=t,this._minimumHeights=i,this._maximumHeights=n,this._granularity=o,this._ellipsoid=re.clone(r),this._workerName="createWallOutlineGeometry";let s=1+t.length*h.packedLength+2;d(i)&&(s+=i.length),d(n)&&(s+=n.length),this.packedLength=s+re.packedLength+1}W_.pack=function(e,t,n){n=g(n,0);let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=h.packedLength)h.pack(o[i],t,n);let s=e._minimumHeights;if(r=d(s)?s.length:0,t[n++]=r,d(s))for(i=0;i<r;++i)t[n++]=s[i];let a=e._maximumHeights;if(r=d(a)?a.length:0,t[n++]=r,d(a))for(i=0;i<r;++i)t[n++]=a[i];return re.pack(e._ellipsoid,t,n),n+=re.packedLength,t[n]=e._granularity,t};var cde=re.clone(re.UNIT_SPHERE),A2={positions:void 0,minimumHeights:void 0,maximumHeights:void 0,ellipsoid:cde,granularity:void 0};W_.unpack=function(e,t,n){t=g(t,0);let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=h.packedLength)r[i]=h.unpack(e,t);o=e[t++];let s;if(o>0)for(s=new Array(o),i=0;i<o;++i)s[i]=e[t++];o=e[t++];let a;if(o>0)for(a=new Array(o),i=0;i<o;++i)a[i]=e[t++];let c=re.unpack(e,t,cde);t+=re.packedLength;let l=e[t];return d(n)?(n._positions=r,n._minimumHeights=s,n._maximumHeights=a,n._ellipsoid=re.clone(c,n._ellipsoid),n._granularity=l,n):(A2.positions=r,A2.minimumHeights=s,A2.maximumHeights=a,A2.granularity=l,new W_(A2))};W_.fromConstantHeights=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.positions,n,i,o=e.minimumHeight,r=e.maximumHeight,s=d(o),a=d(r);if(s||a){let l=t.length;n=s?new Array(l):void 0,i=a?new Array(l):void 0;for(let u=0;u<l;++u)s&&(n[u]=o),a&&(i[u]=r)}let c={positions:t,maximumHeights:i,minimumHeights:n,ellipsoid:e.ellipsoid};return new W_(c)};W_.createGeometry=function(e){let t=e._positions,n=e._minimumHeights,i=e._maximumHeights,o=e._granularity,r=e._ellipsoid,s=X_.computePositions(r,t,i,n,o,!1);if(!d(s))return;let a=s.bottomPositions,c=s.topPositions,l=c.length,u=l*2,m=new Float64Array(u),p=0;l/=3;let y;for(y=0;y<l;++y){let V=y*3,L=h.fromArray(c,V,sde),Z=h.fromArray(a,V,ade);m[p++]=Z.x,m[p++]=Z.y,m[p++]=Z.z,m[p++]=L.x,m[p++]=L.y,m[p++]=L.z}let f=new hn({position:new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:m})}),x=u/3;u=2*x-4+x;let _=Ue.createTypedArray(x,u),C=0;for(y=0;y<x-2;y+=2){let V=y,L=y+2,Z=h.fromArray(m,V*3,sde),G=h.fromArray(m,L*3,ade);if(h.equalsEpsilon(Z,G,W.EPSILON10))continue;let X=y+1,P=y+3;_[C++]=X,_[C++]=V,_[C++]=X,_[C++]=P,_[C++]=V,_[C++]=L}return _[C++]=x-2,_[C++]=x-1,new dt({attributes:f,indices:_,primitiveType:Fe.LINES,boundingSphere:new ce.fromVertices(m)})};var M2=W_;var lde=new Y;function pQe(e){this.id=e,this.vertexFormat=void 0,this.positions=void 0,this.minimumHeights=void 0,this.maximumHeights=void 0,this.granularity=void 0}function Jm(e,t){ii.call(this,{entity:e,scene:t,geometryOptions:new pQe(e),geometryPropertyName:"wall",observedPropertyNames:["availability","wall"]}),this._onEntityPropertyChanged(e,"wall",e.wall,void 0)}d(Object.create)&&(Jm.prototype=Object.create(ii.prototype),Jm.prototype.constructor=Jm);Jm.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i,o,r=new gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),s=this._distanceDisplayConditionProperty.getValue(e),a=Un.fromDistanceDisplayCondition(s);if(this._materialProperty instanceof At){let c;d(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(c=this._materialProperty.color.getValue(e,lde)),d(c)||(c=Y.WHITE),o=Ut.fromColor(c),i={show:r,distanceDisplayCondition:a,color:o}}else i={show:r,distanceDisplayCondition:a};return new _t({id:t,geometry:new F2(this._options),attributes:i})};Jm.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=H.getValueOrDefault(this._outlineColorProperty,e,Y.BLACK,lde),o=this._distanceDisplayConditionProperty.getValue(e);return new _t({id:t,geometry:new M2(this._options),attributes:{show:new gn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Ut.fromColor(i),distanceDisplayCondition:Un.fromDistanceDisplayCondition(o)}})};Jm.prototype._isHidden=function(e,t){return!d(t.positions)||ii.prototype._isHidden.call(this,e,t)};Jm.prototype._getIsClosed=function(e){return!1};Jm.prototype._isDynamic=function(e,t){return!t.positions.isConstant||!H.isConstant(t.minimumHeights)||!H.isConstant(t.maximumHeights)||!H.isConstant(t.outlineWidth)||!H.isConstant(t.granularity)};Jm.prototype._setStaticOptions=function(e,t){let n=t.minimumHeights,i=t.maximumHeights,o=t.granularity,r=this._materialProperty instanceof At,s=this._options;s.vertexFormat=r?rn.VERTEX_FORMAT:so.MaterialSupport.TEXTURED.vertexFormat,s.positions=t.positions.getValue(Be.MINIMUM_VALUE,s.positions),s.minimumHeights=d(n)?n.getValue(Be.MINIMUM_VALUE,s.minimumHeights):void 0,s.maximumHeights=d(i)?i.getValue(Be.MINIMUM_VALUE,s.maximumHeights):void 0,s.granularity=d(o)?o.getValue(Be.MINIMUM_VALUE):void 0};Jm.DynamicGeometryUpdater=g1;function g1(e,t,n){ni.call(this,e,t,n)}d(Object.create)&&(g1.prototype=Object.create(ni.prototype),g1.prototype.constructor=g1);g1.prototype._isHidden=function(e,t,n){return!d(this._options.positions)||ni.prototype._isHidden.call(this,e,t,n)};g1.prototype._setOptions=function(e,t,n){let i=this._options;i.positions=H.getValueOrUndefined(t.positions,n,i.positions),i.minimumHeights=H.getValueOrUndefined(t.minimumHeights,n,i.minimumHeights),i.maximumHeights=H.getValueOrUndefined(t.maximumHeights,n,i.maximumHeights),i.granularity=H.getValueOrUndefined(t.granularity,n)};var N2=Jm;var bQe=[],dde=[sE,i2,zW,b2,g2,T2,L2,W2,P2,N2];function U2(e,t){this.entity=e,this.scene=t;let n=new Array(dde.length),i=new ye;function o(s){i.raiseEvent(s)}let r=new Cr;for(let s=0;s<n.length;s++){let a=new dde[s](e,t);r.add(a.geometryChanged,o),n[s]=a}this.updaters=n,this.geometryChanged=i,this.eventHelper=r,this._removeEntitySubscription=e.definitionChanged.addEventListener(U2.prototype._onEntityPropertyChanged,this)}U2.prototype._onEntityPropertyChanged=function(e,t,n,i){let o=this.updaters;for(let r=0;r<o.length;r++)o[r]._onEntityPropertyChanged(e,t,n,i)};U2.prototype.forEach=function(e){let t=this.updaters;for(let n=0;n<t.length;n++)e(t[n])};U2.prototype.destroy=function(){this.eventHelper.removeAll();let e=this.updaters;for(let t=0;t<e.length;t++)e[t].destroy();this._removeEntitySubscription(),ue(this)};function Xu(e,t,n,i){n=g(n,e.primitives),i=g(i,e.groundPrimitives),this._scene=e,this._primitives=n,this._groundPrimitives=i,this._entityCollection=void 0,this._addedObjects=new Tt,this._removedObjects=new Tt,this._changedObjects=new Tt;let o=xn.NUMBER_OF_SHADOW_MODES;this._outlineBatches=new Array(o*2),this._closedColorBatches=new Array(o*2),this._closedMaterialBatches=new Array(o*2),this._openColorBatches=new Array(o*2),this._openMaterialBatches=new Array(o*2);let r=Oo.supportsMaterialsforEntitiesOnTerrain(e);this._supportsMaterialsforEntitiesOnTerrain=r;let s;for(s=0;s<o;++s)this._outlineBatches[s]=new y1(n,e,s,!1),this._outlineBatches[o+s]=new y1(n,e,s,!0),this._closedColorBatches[s]=new Zu(n,rn,void 0,!0,s,!0),this._closedColorBatches[o+s]=new Zu(n,rn,void 0,!0,s,!1),this._closedMaterialBatches[s]=new Gu(n,so,void 0,!0,s,!0),this._closedMaterialBatches[o+s]=new Gu(n,so,void 0,!0,s,!1),this._openColorBatches[s]=new Zu(n,rn,void 0,!1,s,!0),this._openColorBatches[o+s]=new Zu(n,rn,void 0,!1,s,!1),this._openMaterialBatches[s]=new Gu(n,so,void 0,!1,s,!0),this._openMaterialBatches[o+s]=new Gu(n,so,void 0,!1,s,!1);let a=kn.NUMBER_OF_CLASSIFICATION_TYPES,c=new Array(a),l=[];if(r)for(s=0;s<a;++s)l.push(new v2(i,s,so)),c[s]=new f1(i,s);else for(s=0;s<a;++s)c[s]=new f1(i,s);this._groundColorBatches=c,this._groundMaterialBatches=l,this._dynamicBatch=new T_(n,i),this._batches=this._outlineBatches.concat(this._closedColorBatches,this._closedMaterialBatches,this._openColorBatches,this._openMaterialBatches,this._groundColorBatches,this._groundMaterialBatches,this._dynamicBatch),this._subscriptions=new Tt,this._updaterSets=new Tt,this._entityCollection=t,t.collectionChanged.addEventListener(Xu.prototype._onCollectionChanged,this),this._onCollectionChanged(t,t.values,bQe)}Xu.prototype.update=function(e){let t=this._addedObjects,n=t.values,i=this._removedObjects,o=i.values,r=this._changedObjects,s=r.values,a,c,l,u,m=this;for(a=s.length-1;a>-1;a--)c=s[a],l=c.id,u=this._updaterSets.get(l),u.entity===c?u.forEach(function(x){m._removeUpdater(x),m._insertUpdaterIntoBatch(e,x)}):(o.push(c),n.push(c));for(a=o.length-1;a>-1;a--)c=o[a],l=c.id,u=this._updaterSets.get(l),u.forEach(this._removeUpdater.bind(this)),u.destroy(),this._updaterSets.remove(l),this._subscriptions.get(l)(),this._subscriptions.remove(l);for(a=n.length-1;a>-1;a--)c=n[a],l=c.id,u=new U2(c,this._scene),this._updaterSets.set(l,u),u.forEach(function(x){m._insertUpdaterIntoBatch(e,x)}),this._subscriptions.set(l,u.geometryChanged.addEventListener(Xu._onGeometryChanged,this));t.removeAll(),i.removeAll(),r.removeAll();let p=!0,y=this._batches,f=y.length;for(a=0;a<f;a++)p=y[a].update(e)&&p;return p};var yQe=[],gQe=new ce;Xu.prototype.getBoundingSphere=function(e,t){let n=yQe,i=gQe,o=0,r=lt.DONE,s=this._batches,a=s.length,c=e.id,l=this._updaterSets.get(c).updaters;for(let u=0;u<l.length;u++){let m=l[u];for(let p=0;p<a;p++){if(r=s[p].getBoundingSphere(m,i),r===lt.PENDING)return lt.PENDING;r===lt.DONE&&(n[o]=ce.clone(i,n[o]),o++)}}return o===0?lt.FAILED:(n.length=o,ce.fromBoundingSpheres(n,t),lt.DONE)};Xu.prototype.isDestroyed=function(){return!1};Xu.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(Xu.prototype._onCollectionChanged,this),this._addedObjects.removeAll(),this._removedObjects.removeAll();let e,t=this._batches,n=t.length;for(e=0;e<n;e++)t[e].removeAllPrimitives();let i=this._subscriptions.values;for(n=i.length,e=0;e<n;e++)i[e]();this._subscriptions.removeAll();let o=this._updaterSets.values;for(n=o.length,e=0;e<n;e++)o[e].destroy();return this._updaterSets.removeAll(),ue(this)};Xu.prototype._removeUpdater=function(e){let t=this._batches,n=t.length;for(let i=0;i<n;i++)t[i].remove(e)};Xu.prototype._insertUpdaterIntoBatch=function(e,t){if(t.isDynamic){this._dynamicBatch.add(e,t);return}let n;(t.outlineEnabled||t.fillEnabled)&&(n=t.shadowsProperty.getValue(e));let i=xn.NUMBER_OF_SHADOW_MODES;if(t.outlineEnabled&&(d(t.terrainOffsetProperty)?this._outlineBatches[i+n].add(e,t):this._outlineBatches[n].add(e,t)),t.fillEnabled)if(t.onTerrain){let o=t.classificationTypeProperty.getValue(e);t.fillMaterialProperty instanceof At?this._groundColorBatches[o].add(e,t):this._groundMaterialBatches[o].add(e,t)}else t.isClosed?t.fillMaterialProperty instanceof At?d(t.terrainOffsetProperty)?this._closedColorBatches[i+n].add(e,t):this._closedColorBatches[n].add(e,t):d(t.terrainOffsetProperty)?this._closedMaterialBatches[i+n].add(e,t):this._closedMaterialBatches[n].add(e,t):t.fillMaterialProperty instanceof At?d(t.terrainOffsetProperty)?this._openColorBatches[i+n].add(e,t):this._openColorBatches[n].add(e,t):d(t.terrainOffsetProperty)?this._openMaterialBatches[i+n].add(e,t):this._openMaterialBatches[n].add(e,t)};Xu._onGeometryChanged=function(e){let t=this._removedObjects,n=this._changedObjects,i=e.entity,o=i.id;!d(t.get(o))&&!d(n.get(o))&&n.set(o,i)};Xu.prototype._onCollectionChanged=function(e,t,n){let i=this._addedObjects,o=this._removedObjects,r=this._changedObjects,s,a,c;for(s=n.length-1;s>-1;s--)c=n[s],a=c.id,i.remove(a)||(o.set(a,c),r.remove(a));for(s=t.length-1;s>-1;s--)c=t[s],a=c.id,o.remove(a)?r.set(a,c):i.set(a,c)};var k2=Xu;var M8n=T(S(),1);var xQe=1,_Qe="30px sans-serif",TQe=vo.FILL,SQe=Y.WHITE,CQe=Y.BLACK,VQe=1,LQe=!1,RQe=new Y(.165,.165,.165,.8),ZQe=new D(7,5),GQe=D.ZERO,EQe=h.ZERO,XQe=Oe.NONE,IQe=pi.CENTER,WQe=In.CENTER,PQe=new h,vQe=new Y,wQe=new Y,FQe=new Y,AQe=new D,MQe=new h,NQe=new D,UQe=new It,kQe=new It,DQe=new It,BQe=new Gt;function ude(e){this.entity=e,this.label=void 0,this.index=void 0}function Ty(e,t){t.collectionChanged.addEventListener(Ty.prototype._onCollectionChanged,this),this._cluster=e,this._entityCollection=t,this._items=new Tt,this._onCollectionChanged(t,t.values,[],[])}Ty.prototype.update=function(e){let t=this._items.values,n=this._cluster;for(let i=0,o=t.length;i<o;i++){let r=t[i],s=r.entity,a=s._label,c,l=r.label,u=s.isShowing&&s.isAvailable(e)&&H.getValueOrDefault(a._show,e,!0),m;if(u&&(m=H.getValueOrUndefined(s._position,e,PQe),c=H.getValueOrUndefined(a._text,e),u=d(m)&&d(c)),!u){bH(r,s,n);continue}H.isConstant(s._position)||(n._clusterDirty=!0);let p=!1,y=H.getValueOrDefault(a._heightReference,e,XQe);d(l)||(l=n.getLabel(s),l.id=s,r.label=l,p=h.equals(l.position,m)&&l.heightReference===y),l.show=!0,l.position=m,l.text=c,l.scale=H.getValueOrDefault(a._scale,e,xQe),l.font=H.getValueOrDefault(a._font,e,_Qe),l.style=H.getValueOrDefault(a._style,e,TQe),l.fillColor=H.getValueOrDefault(a._fillColor,e,SQe,vQe),l.outlineColor=H.getValueOrDefault(a._outlineColor,e,CQe,wQe),l.outlineWidth=H.getValueOrDefault(a._outlineWidth,e,VQe),l.showBackground=H.getValueOrDefault(a._showBackground,e,LQe),l.backgroundColor=H.getValueOrDefault(a._backgroundColor,e,RQe,FQe),l.backgroundPadding=H.getValueOrDefault(a._backgroundPadding,e,ZQe,AQe),l.pixelOffset=H.getValueOrDefault(a._pixelOffset,e,GQe,NQe),l.eyeOffset=H.getValueOrDefault(a._eyeOffset,e,EQe,MQe),l.heightReference=y,l.horizontalOrigin=H.getValueOrDefault(a._horizontalOrigin,e,IQe),l.verticalOrigin=H.getValueOrDefault(a._verticalOrigin,e,WQe),l.translucencyByDistance=H.getValueOrUndefined(a._translucencyByDistance,e,UQe),l.pixelOffsetScaleByDistance=H.getValueOrUndefined(a._pixelOffsetScaleByDistance,e,kQe),l.scaleByDistance=H.getValueOrUndefined(a._scaleByDistance,e,DQe),l.distanceDisplayCondition=H.getValueOrUndefined(a._distanceDisplayCondition,e,BQe),l.disableDepthTestDistance=H.getValueOrUndefined(a._disableDepthTestDistance,e),p&&l._updateClamping()}return!0};Ty.prototype.getBoundingSphere=function(e,t){let n=this._items.get(e.id);if(!d(n)||!d(n.label))return lt.FAILED;let i=n.label;return t.center=h.clone(g(i._clampedPosition,i.position),t.center),t.radius=0,lt.DONE};Ty.prototype.isDestroyed=function(){return!1};Ty.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(Ty.prototype._onCollectionChanged,this);let e=this._entityCollection.values;for(let t=0;t<e.length;t++)this._cluster.removeLabel(e[t]);return ue(this)};Ty.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s=this._items,a=this._cluster;for(o=t.length-1;o>-1;o--)r=t[o],d(r._label)&&d(r._position)&&s.set(r.id,new ude(r));for(o=i.length-1;o>-1;o--)r=i[o],d(r._label)&&d(r._position)?s.contains(r.id)||s.set(r.id,new ude(r)):(bH(s.get(r.id),r,a),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],bH(s.get(r.id),r,a),s.remove(r.id)};function bH(e,t,n){d(e)&&(e.label=void 0,n.removeLabel(t))}var D2=Ty;var m7n=T(S(),1);var K8n=T(S(),1);var k8n=T(S(),1);async function YQe(e,t,n,i){return d(i)||(i=!1),HQe(e,t,n,i)}function OQe(e,t,n){let i=e[0],o=i.terrainProvider.requestTileGeometry(i.x,i.y,i.level);if(!o)return!1;let r;return n?r=o.then(hde(i)):r=o.then(hde(i)).catch(zQe(i)),e.shift(),t.push(r),!0}function KQe(e){return new Promise(function(t){setTimeout(t,e)})}function yH(e,t,n){return e.length?OQe(e,t,n)?yH(e,t):KQe(100).then(()=>yH(e,t)):Promise.resolve()}function HQe(e,t,n,i){let o=e.tilingScheme,r,s=[],a={};for(r=0;r<n.length;++r){let l=o.positionToTileXY(n[r],t);if(!d(l))continue;let u=l.toString();if(!a.hasOwnProperty(u)){let m={x:l.x,y:l.y,level:t,tilingScheme:o,terrainProvider:e,positions:[]};a[u]=m,s.push(m)}a[u].positions.push(n[r])}let c=[];return yH(s,c,i).then(function(){return Promise.all(c).then(function(){return n})})}function mde(e,t,n){let i=t.interpolateHeight(n,e.longitude,e.latitude);return i===void 0?!1:(e.height=i,!0)}function hde(e){let t=e.positions,n=e.tilingScheme.tileXYToRectangle(e.x,e.y,e.level);return function(i){let o=!1;for(let r=0;r<t.length;++r){let s=t[r];if(!mde(s,i,n)){o=!0;break}}return o?i.createMesh({tilingScheme:e.tilingScheme,x:e.x,y:e.y,level:e.level,throttle:!1}).then(function(){for(let r=0;r<t.length;++r){let s=t[r];mde(s,i,n)}}):Promise.resolve()}}function zQe(e){let t=e.positions;return function(){for(let n=0;n<t.length;++n){let i=t[n];i.height=void 0}}}var B2=YQe;var gH=new D;async function fde(e,t,n){d(n)||(n=!1);let i=[],o=[],r=e.availability,s=[];for(let c=0;c<t.length;++c){let l=t[c],u=r.computeMaximumLevelAtPosition(l);if(o[c]=u,u===0){e.tilingScheme.positionToTileXY(l,1,gH);let p=e.loadTileDataAvailability(gH.x,gH.y,1);d(p)&&s.push(p)}let m=i[u];d(m)||(i[u]=m=[]),m.push(l)}await Promise.all(s),await Promise.all(i.map(function(c,l){if(d(c))return B2(e,l,c,n)}));let a=[];for(let c=0;c<t.length;++c){let l=t[c];r.computeMaximumLevelAtPosition(l)!==o[c]&&a.push(l)}return a.length>0&&await fde(e,a,n),t}var T0=fde;var JQe=1,QQe=0,jQe=!0,qQe=!0,$Qe=xn.ENABLED,e4e=Oe.NONE,t4e=Y.RED,n4e=0,i4e=Y.WHITE,o4e=Ka.HIGHLIGHT,r4e=.5,s4e=new D(1,1),a4e=new A,c4e=new A,pde=new Y,bde=new Array(4),l4e=new h;function uf(e,t){t.collectionChanged.addEventListener(uf.prototype._onCollectionChanged,this),this._scene=e,this._primitives=e.primitives,this._entityCollection=t,this._modelHash={},this._entitiesToVisualize=new Tt,this._onCollectionChanged(t,t.values,[],[])}async function d4e(e,t,n,i){let o=e._primitives,r=e._modelHash;try{let s=await Em.fromGltfAsync({url:n,incrementallyLoadTextures:i,scene:e._scene});if(e.isDestroyed()||!d(r[t.id]))return;s.id=t,o.add(s),r[t.id].modelPrimitive=s,s.errorEvent.addEventListener(a=>{d(r[t.id])&&(console.log(a),a.name!=="TextureError"&&s.incrementallyLoadTextures&&(r[t.id].loadFailed=!0))})}catch(s){if(e.isDestroyed()||!d(r[t.id]))return;console.log(s),r[t.id].loadFailed=!0}}uf.prototype.update=function(e){let t=this._entitiesToVisualize.values,n=this._modelHash,i=this._primitives;for(let o=0,r=t.length;o<r;o++){let s=t[o],a=s._model,c,l=n[s.id],u=s.isShowing&&s.isAvailable(e)&&H.getValueOrDefault(a._show,e,!0),m;if(u&&(m=s.computeModelMatrix(e,a4e),c=Ee.createIfNeeded(H.getValueOrUndefined(a._uri,e)),u=d(m)&&d(c)),!u){d(l)&&l.modelPrimitive&&(l.modelPrimitive.show=!1);continue}if(!d(l)||c.url!==l.url){d(l?.modelPrimitive)&&(i.removeAndDestroy(l.modelPrimitive),delete n[s.id]),l={modelPrimitive:void 0,url:c.url,animationsRunning:!1,nodeTransformationsScratch:{},articulationsScratch:{},loadFailed:!1,modelUpdated:!1,awaitingSampleTerrain:!1,clampedBoundingSphere:void 0,sampleTerrainFailed:!1},n[s.id]=l;let f=H.getValueOrDefault(a._incrementallyLoadTextures,e,jQe);d4e(this,s,c,f)}let p=l.modelPrimitive;if(!d(p))continue;p.show=!0,p.scale=H.getValueOrDefault(a._scale,e,JQe),p.minimumPixelSize=H.getValueOrDefault(a._minimumPixelSize,e,QQe),p.maximumScale=H.getValueOrUndefined(a._maximumScale,e),p.modelMatrix=A.clone(m,p.modelMatrix),p.shadows=H.getValueOrDefault(a._shadows,e,$Qe),p.heightReference=H.getValueOrDefault(a._heightReference,e,e4e),p.distanceDisplayCondition=H.getValueOrUndefined(a._distanceDisplayCondition,e),p.silhouetteColor=H.getValueOrDefault(a._silhouetteColor,e,t4e,pde),p.silhouetteSize=H.getValueOrDefault(a._silhouetteSize,e,n4e),p.color=H.getValueOrDefault(a._color,e,i4e,pde),p.colorBlendMode=H.getValueOrDefault(a._colorBlendMode,e,o4e),p.colorBlendAmount=H.getValueOrDefault(a._colorBlendAmount,e,r4e),p.clippingPlanes=H.getValueOrUndefined(a._clippingPlanes,e),p.clampAnimations=H.getValueOrDefault(a._clampAnimations,e,qQe),p.imageBasedLighting.imageBasedLightingFactor=H.getValueOrDefault(a._imageBasedLightingFactor,e,s4e);let y=H.getValueOrUndefined(a._lightColor,e);if(d(y)&&(Y.pack(y,bde,0),y=h.unpack(bde,0,l4e)),p.lightColor=y,p.customShader=H.getValueOrUndefined(a._customShader,e),n[s.id].modelUpdated=!0,p.ready){let f=H.getValueOrDefault(a._runAnimations,e,!0);l.animationsRunning!==f&&(f?p.activeAnimations.addAll({loop:_l.REPEAT}):p.activeAnimations.removeAll(),l.animationsRunning=f);let x=H.getValueOrUndefined(a._nodeTransformations,e,l.nodeTransformationsScratch);if(d(x)){let V=Object.keys(x);for(let L=0,Z=V.length;L<Z;++L){let G=V[L],X=x[G];if(!d(X))continue;let P=p.getNode(G);if(!d(P))continue;let v=A.fromTranslationRotationScale(X,c4e);P.matrix=A.multiply(P.originalMatrix,v,v)}}let _=!1,C=H.getValueOrUndefined(a._articulations,e,l.articulationsScratch);if(d(C)){let V=Object.keys(C);for(let L=0,Z=V.length;L<Z;++L){let G=V[L],X=C[G];d(X)&&(_=!0,p.setArticulationStage(G,X))}}_&&p.applyArticulations()}}return!0};uf.prototype.isDestroyed=function(){return!1};uf.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(uf.prototype._onCollectionChanged,this);let e=this._entitiesToVisualize.values,t=this._modelHash,n=this._primitives;for(let i=e.length-1;i>-1;i--)xH(this,e[i],t,n);return ue(this)};uf._sampleTerrainMostDetailed=T0;var x1=new h,yde=new he;uf.prototype.getBoundingSphere=function(e,t){let n=this._modelHash[e.id];if(!d(n))return lt.FAILED;if(n.loadFailed)return lt.FAILED;let i=n.modelPrimitive;if(!d(i)||!i.show)return lt.PENDING;if(!i.ready||!n.modelUpdated)return lt.PENDING;let r=this._scene.globe,s=d(r)?r.terrainProvider:void 0,a=i.heightReference!==Oe.NONE;if(d(r)&&a){let c=r.ellipsoid,l=i.modelMatrix;x1.x=l[12],x1.y=l[13],x1.z=l[14];let u=c.cartesianToCartographic(x1);if(!d(s.availability)){i.heightReference===Oe.CLAMP_TO_GROUND&&(u.height=0);let y=c.cartographicToCartesian(u);return ce.clone(i.boundingSphere,t),t.center=y,lt.DONE}let m=this._modelHash[e.id].clampedBoundingSphere;return this._modelHash[e.id].sampleTerrainFailed?(this._modelHash[e.id].sampleTerrainFailed=!1,lt.FAILED):d(m)?(ce.clone(m,t),this._modelHash[e.id].clampedBoundingSphere=void 0,lt.DONE):(m=new ce,this._modelHash[e.id].awaitingSampleTerrain||(he.clone(u,yde),this._modelHash[e.id].awaitingSampleTerrain=!0,uf._sampleTerrainMostDetailed(s,[yde]).then(f=>{if(this.isDestroyed())return;this._modelHash[e.id].awaitingSampleTerrain=!1;let x=f[0];i.heightReference===Oe.RELATIVE_TO_GROUND&&(x.height+=u.height),c.cartographicToCartesian(x,x1),ce.clone(i.boundingSphere,m),m.center=x1,this._modelHash[e.id].clampedBoundingSphere=ce.clone(m)}).catch(f=>{this.isDestroyed()||(this._modelHash[e.id].sampleTerrainFailed=!0,this._modelHash[e.id].awaitingSampleTerrain=!1)})),lt.PENDING)}return ce.clone(i.boundingSphere,t),lt.DONE};uf.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s=this._entitiesToVisualize,a=this._modelHash,c=this._primitives;for(o=t.length-1;o>-1;o--)r=t[o],d(r._model)&&d(r._position)&&s.set(r.id,r);for(o=i.length-1;o>-1;o--)r=i[o],d(r._model)&&d(r._position)?(u4e(r,a),s.set(r.id,r)):(xH(this,r,a,c),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],xH(this,r,a,c),s.remove(r.id)};function xH(e,t,n,i){let o=n[t.id];d(o)&&(i.removeAndDestroy(o.modelPrimitive),delete n[t.id])}function u4e(e,t){let n=t[e.id];d(n)&&(n.nodeTransformationsScratch={},n.articulationsScratch={})}var Y2=uf;var k7n=T(S(),1);var x7n=T(S(),1);function Sy(e){this._definitionChanged=new ye,this._value=void 0,this._removeSubscription=void 0,this.setValue(e)}Object.defineProperties(Sy.prototype,{isConstant:{get:function(){return H.isConstant(this._value)}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return d(this._value)?this._value.referenceFrame:io.FIXED}}});Sy.prototype.getValue=function(e,t){return this.getValueInReferenceFrame(e,io.FIXED,t)};Sy.prototype.setValue=function(e){this._value!==e&&(this._value=e,d(this._removeSubscription)&&(this._removeSubscription(),this._removeSubscription=void 0),d(e)&&(this._removeSubscription=e.definitionChanged.addEventListener(this._raiseDefinitionChanged,this)),this._definitionChanged.raiseEvent(this))};Sy.prototype.getValueInReferenceFrame=function(e,t,n){if(d(this._value))return n=this._value.getValueInReferenceFrame(e,t,n),d(n)?re.WGS84.scaleToGeodeticSurface(n,n):void 0};Sy.prototype.equals=function(e){return this===e||e instanceof Sy&&this._value===e._value};Sy.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var mf=Sy;var m4e=60,h4e=1,_de=new Tn,_H=new Tn,TH=new Tn;function gde(e){this.entity=e,this.polyline=void 0,this.index=void 0,this.updater=void 0}function f4e(e,t,n,i,o,r,s,a,c){let l=a,u;u=e.getValueInReferenceFrame(t,r,c[l]),d(u)&&(c[l++]=u);let m=!d(o)||te.lessThanOrEquals(o,t)||te.greaterThanOrEquals(o,n),p=0,y=i.length,f=i[p],x=n,_=!1,C,V,L;for(;p<y;){if(!m&&te.greaterThanOrEquals(f,o)&&(u=e.getValueInReferenceFrame(o,r,c[l]),d(u)&&(c[l++]=u),m=!0),te.greaterThan(f,t)&&te.lessThan(f,x)&&!f.equals(o)&&(u=e.getValueInReferenceFrame(f,r,c[l]),d(u)&&(c[l++]=u)),p<y-1){if(s>0&&!_){let Z=i[p+1],G=te.secondsDifference(Z,f);_=G>s,_&&(C=Math.ceil(G/s),V=0,L=G/Math.max(C,2),C=Math.max(C-1,1))}if(_&&V<C){f=te.addSeconds(f,L,new te),V++;continue}}_=!1,p++,f=i[p]}return u=e.getValueInReferenceFrame(n,r,c[l]),d(u)&&(c[l++]=u),l}function p4e(e,t,n,i,o,r,s,a){let c,l=0,u=s,m=t,p=Math.max(r,60),y=!d(i)||te.lessThanOrEquals(i,t)||te.greaterThanOrEquals(i,n);for(;te.lessThan(m,n);)!y&&te.greaterThanOrEquals(m,i)&&(y=!0,c=e.getValueInReferenceFrame(i,o,a[u]),d(c)&&(a[u]=c,u++)),c=e.getValueInReferenceFrame(m,o,a[u]),d(c)&&(a[u]=c,u++),l++,m=te.addSeconds(t,p*l,new te);return c=e.getValueInReferenceFrame(n,o,a[u]),d(c)&&(a[u]=c,u++),u}function b4e(e,t,n,i,o,r,s,a){TH.start=t,TH.stop=n;let c=s,l=e.intervals;for(let u=0;u<l.length;u++){let m=l.get(u);if(!Tn.intersect(m,TH,_de).isEmpty){let p=m.start;m.isStartIncluded||(m.isStopIncluded?p=m.stop:p=te.addSeconds(m.start,te.secondsDifference(m.stop,m.start)/2,new te));let y=e.getValueInReferenceFrame(p,o,a[c]);d(y)&&(a[c]=y,c++)}}return c}function y4e(e,t,n,i,o,r,s,a){let c=e.getValueInReferenceFrame(t,o,a[s]);return d(c)&&(a[s++]=c),s}function g4e(e,t,n,i,o,r,s,a){_H.start=t,_H.stop=n;let c=s,l=e.intervals;for(let u=0;u<l.length;u++){let m=l.get(u);if(!Tn.intersect(m,_H,_de).isEmpty){let p=m.start,y=m.stop,f=t;te.greaterThan(p,f)&&(f=p);let x=n;te.lessThan(y,x)&&(x=y),c=Tde(m.data,f,x,i,o,r,c,a)}}return c}function Tde(e,t,n,i,o,r,s,a){for(;e instanceof f0;)e=e.resolvedProperty;if(e instanceof js){let c=e._property._times;s=f4e(e,t,n,c,i,o,r,s,a)}else e instanceof Js?s=g4e(e,t,n,i,o,r,s,a):e instanceof p0?s=b4e(e,t,n,i,o,r,s,a):e instanceof Rc||e instanceof mf&&H.isConstant(e)?s=y4e(e,t,n,i,o,r,s,a):s=p4e(e,t,n,i,o,r,s,a);return s}function Sde(e,t,n,i,o,r,s){d(s)||(s=[]);let a=Tde(e,t,n,i,o,r,0,s);return s.length=a,s}var xde=new $;function O2(e,t){this._unusedIndexes=[],this._polylineCollection=new Wm,this._scene=e,this._referenceFrame=t,e.primitives.add(this._polylineCollection)}O2.prototype.update=function(e){if(this._referenceFrame===io.INERTIAL){let t=vt.computeIcrfToFixedMatrix(e,xde);d(t)||(t=vt.computeTemeToPseudoFixedMatrix(e,xde)),A.fromRotationTranslation(t,h.ZERO,this._polylineCollection.modelMatrix)}};O2.prototype.updateObject=function(e,t){let n=t.entity,i=n._path,o=n._position,r,s,a=i._show,c=t.polyline,l=n.isShowing&&n.isAvailable(e)&&(!d(a)||a.getValue(e));if(l){let m=H.getValueOrUndefined(i._leadTime,e),p=H.getValueOrUndefined(i._trailTime,e),y=n._availability,f=d(y),x=d(m),_=d(p);if(l=f||x&&_,l){if(_&&(r=te.addSeconds(e,-p,new te)),x&&(s=te.addSeconds(e,m,new te)),f){let C=y.start,V=y.stop;(!_||te.greaterThan(C,r))&&(r=C),(!x||te.lessThan(V,s))&&(s=V)}l=te.lessThan(r,s)}}if(!l){d(c)&&(this._unusedIndexes.push(t.index),t.polyline=void 0,c.show=!1,t.index=void 0);return}if(!d(c)){let m=this._unusedIndexes;if(m.length>0){let y=m.pop();c=this._polylineCollection.get(y),t.index=y}else t.index=this._polylineCollection.length,c=this._polylineCollection.add();c.id=n,t.polyline=c}let u=H.getValueOrDefault(i._resolution,e,m4e);c.show=!0,c.positions=Sde(o,r,s,e,this._referenceFrame,u,c.positions.slice()),c.material=Yo.getValue(e,i._material,c.material),c.width=H.getValueOrDefault(i._width,e,h4e),c.distanceDisplayCondition=H.getValueOrUndefined(i._distanceDisplayCondition,e,c.distanceDisplayCondition)};O2.prototype.removeObject=function(e){let t=e.polyline;d(t)&&(this._unusedIndexes.push(e.index),e.polyline=void 0,t.show=!1,t.id=void 0,e.index=void 0)};O2.prototype.destroy=function(){return this._scene.primitives.remove(this._polylineCollection),ue(this)};function Cy(e,t){t.collectionChanged.addEventListener(Cy.prototype._onCollectionChanged,this),this._scene=e,this._updaters={},this._entityCollection=t,this._items=new Tt,this._onCollectionChanged(t,t.values,[],[])}Cy.prototype.update=function(e){let t=this._updaters;for(let i in t)t.hasOwnProperty(i)&&t[i].update(e);let n=this._items.values;if(n.length===0&&d(this._updaters)&&Object.keys(this._updaters).length>0){for(let i in t)t.hasOwnProperty(i)&&t[i].destroy();this._updaters={}}for(let i=0,o=n.length;i<o;i++){let r=n[i],a=r.entity._position,c=r.updater,l=io.FIXED;this._scene.mode===ie.SCENE3D&&(l=a.referenceFrame);let u=this._updaters[l];if(c===u&&d(u)){u.updateObject(e,r);continue}d(c)&&c.removeObject(r),d(u)||(u=new O2(this._scene,l),u.update(e),this._updaters[l]=u),r.updater=u,d(u)&&u.updateObject(e,r)}return!0};Cy.prototype.isDestroyed=function(){return!1};Cy.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(Cy.prototype._onCollectionChanged,this);let e=this._updaters;for(let t in e)e.hasOwnProperty(t)&&e[t].destroy();return ue(this)};Cy.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s,a=this._items;for(o=t.length-1;o>-1;o--)r=t[o],d(r._path)&&d(r._position)&&a.set(r.id,new gde(r));for(o=i.length-1;o>-1;o--)r=i[o],d(r._path)&&d(r._position)?a.contains(r.id)||a.set(r.id,new gde(r)):(s=a.get(r.id),d(s)&&(d(s.updater)&&s.updater.removeObject(s),a.remove(r.id)));for(o=n.length-1;o>-1;o--)r=n[o],s=a.get(r.id),d(s)&&(d(s.updater)&&s.updater.removeObject(s),a.remove(r.id))};Cy._subSample=Sde;var K2=Cy;var e6n=T(S(),1);var Cde=Y.WHITE,Vde=Y.BLACK,Lde=0,Rde=1,Zde=0,Gde=new Y,x4e=new h,Ede=new Y,Xde=new It,Ide=new It,Wde=new Gt;function Pde(e){this.entity=e,this.pointPrimitive=void 0,this.billboard=void 0,this.color=void 0,this.outlineColor=void 0,this.pixelSize=void 0,this.outlineWidth=void 0}function Vy(e,t){t.collectionChanged.addEventListener(Vy.prototype._onCollectionChanged,this),this._cluster=e,this._entityCollection=t,this._items=new Tt,this._onCollectionChanged(t,t.values,[],[])}Vy.prototype.update=function(e){let t=this._items.values,n=this._cluster;for(let i=0,o=t.length;i<o;i++){let r=t[i],s=r.entity,a=s._point,c=r.pointPrimitive,l=r.billboard,u=H.getValueOrDefault(a._heightReference,e,Oe.NONE),m=s.isShowing&&s.isAvailable(e)&&H.getValueOrDefault(a._show,e,!0),p;if(m&&(p=H.getValueOrUndefined(s._position,e,x4e),m=d(p)),!m){H2(r,s,n);continue}H.isConstant(s._position)||(n._clusterDirty=!0);let y=!1,f=!1;if(u!==Oe.NONE&&!d(l)?(d(c)&&(H2(r,s,n),c=void 0),l=n.getBillboard(s),l.id=s,l.image=void 0,r.billboard=l,y=!0,f=h.equals(l.position,p)&&l.heightReference===u):u===Oe.NONE&&!d(c)&&(d(l)&&(H2(r,s,n),l=void 0),c=n.getPoint(s),c.id=s,r.pointPrimitive=c),d(c))c.show=!0,c.position=p,c.scaleByDistance=H.getValueOrUndefined(a._scaleByDistance,e,Xde),c.translucencyByDistance=H.getValueOrUndefined(a._translucencyByDistance,e,Ide),c.color=H.getValueOrDefault(a._color,e,Cde,Gde),c.outlineColor=H.getValueOrDefault(a._outlineColor,e,Vde,Ede),c.outlineWidth=H.getValueOrDefault(a._outlineWidth,e,Lde),c.pixelSize=H.getValueOrDefault(a._pixelSize,e,Rde),c.distanceDisplayCondition=H.getValueOrUndefined(a._distanceDisplayCondition,e,Wde),c.disableDepthTestDistance=H.getValueOrDefault(a._disableDepthTestDistance,e,Zde);else if(d(l)){l.show=!0,l.position=p,l.scaleByDistance=H.getValueOrUndefined(a._scaleByDistance,e,Xde),l.translucencyByDistance=H.getValueOrUndefined(a._translucencyByDistance,e,Ide),l.distanceDisplayCondition=H.getValueOrUndefined(a._distanceDisplayCondition,e,Wde),l.disableDepthTestDistance=H.getValueOrDefault(a._disableDepthTestDistance,e,Zde),l.heightReference=u;let x=H.getValueOrDefault(a._color,e,Cde,Gde),_=H.getValueOrDefault(a._outlineColor,e,Vde,Ede),C=Math.round(H.getValueOrDefault(a._outlineWidth,e,Lde)),V=Math.max(1,Math.round(H.getValueOrDefault(a._pixelSize,e,Rde)));if(C>0?(l.scale=1,y=y||C!==r.outlineWidth||V!==r.pixelSize||!Y.equals(x,r.color)||!Y.equals(_,r.outlineColor)):(l.scale=V/50,V=50,y=y||C!==r.outlineWidth||!Y.equals(x,r.color)||!Y.equals(_,r.outlineColor)),y){r.color=Y.clone(x,r.color),r.outlineColor=Y.clone(_,r.outlineColor),r.pixelSize=V,r.outlineWidth=C;let L=x.alpha,Z=x.toCssColorString(),G=_.toCssColorString(),X=JSON.stringify([Z,V,G,C]);l.setImage(X,Bx(L,Z,G,C,V))}f&&l._updateClamping()}}return!0};Vy.prototype.getBoundingSphere=function(e,t){let n=this._items.get(e.id);if(!d(n)||!(d(n.pointPrimitive)||d(n.billboard)))return lt.FAILED;if(d(n.pointPrimitive))t.center=h.clone(n.pointPrimitive.position,t.center);else{let i=n.billboard;if(!d(i._clampedPosition))return lt.PENDING;t.center=h.clone(i._clampedPosition,t.center)}return t.radius=0,lt.DONE};Vy.prototype.isDestroyed=function(){return!1};Vy.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(Vy.prototype._onCollectionChanged,this);let e=this._entityCollection.values;for(let t=0;t<e.length;t++)this._cluster.removePoint(e[t]);return ue(this)};Vy.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s=this._items,a=this._cluster;for(o=t.length-1;o>-1;o--)r=t[o],d(r._point)&&d(r._position)&&s.set(r.id,new Pde(r));for(o=i.length-1;o>-1;o--)r=i[o],d(r._point)&&d(r._position)?s.contains(r.id)||s.set(r.id,new Pde(r)):(H2(s.get(r.id),r,a),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],H2(s.get(r.id),r,a),s.remove(r.id)};function H2(e,t,n){if(d(e)){let i=e.pointPrimitive;if(d(i)){e.pointPrimitive=void 0,n.removePoint(t);return}let o=e.billboard;d(o)&&(e.billboard=void 0,n.removeBillboard(t))}}var z2=Vy;var Wqn=T(S(),1);var j6n=T(S(),1);var _6n=T(S(),1);var Mde=[];function _4e(e,t,n,i,o){let r=Mde;r.length=o;let s,a=n.red,c=n.green,l=n.blue,u=n.alpha,m=i.red,p=i.green,y=i.blue,f=i.alpha;if(Y.equals(n,i)){for(s=0;s<o;s++)r[s]=Y.clone(n);return r}let x=(m-a)/o,_=(p-c)/o,C=(y-l)/o,V=(f-u)/o;for(s=0;s<o;s++)r[s]=new Y(a+s*x,c+s*_,l+s*C,u+s*V);return r}function J2(e){e=g(e,g.EMPTY_OBJECT);let t=e.positions,n=e.colors,i=g(e.width,1),o=g(e.colorsPerVertex,!1);this._positions=t,this._colors=n,this._width=i,this._colorsPerVertex=o,this._vertexFormat=We.clone(g(e.vertexFormat,We.DEFAULT)),this._arcType=g(e.arcType,Jt.GEODESIC),this._granularity=g(e.granularity,W.RADIANS_PER_DEGREE),this._ellipsoid=re.clone(g(e.ellipsoid,re.WGS84)),this._workerName="createPolylineGeometry";let r=1+t.length*h.packedLength;r+=d(n)?1+n.length*Y.packedLength:1,this.packedLength=r+re.packedLength+We.packedLength+4}J2.pack=function(e,t,n){n=g(n,0);let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=h.packedLength)h.pack(o[i],t,n);let s=e._colors;for(r=d(s)?s.length:0,t[n++]=r,i=0;i<r;++i,n+=Y.packedLength)Y.pack(s[i],t,n);return re.pack(e._ellipsoid,t,n),n+=re.packedLength,We.pack(e._vertexFormat,t,n),n+=We.packedLength,t[n++]=e._width,t[n++]=e._colorsPerVertex?1:0,t[n++]=e._arcType,t[n]=e._granularity,t};var Nde=re.clone(re.UNIT_SPHERE),Ude=new We,P_={positions:void 0,colors:void 0,ellipsoid:Nde,vertexFormat:Ude,width:void 0,colorsPerVertex:void 0,arcType:void 0,granularity:void 0};J2.unpack=function(e,t,n){t=g(t,0);let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=h.packedLength)r[i]=h.unpack(e,t);o=e[t++];let s=o>0?new Array(o):void 0;for(i=0;i<o;++i,t+=Y.packedLength)s[i]=Y.unpack(e,t);let a=re.unpack(e,t,Nde);t+=re.packedLength;let c=We.unpack(e,t,Ude);t+=We.packedLength;let l=e[t++],u=e[t++]===1,m=e[t++],p=e[t];return d(n)?(n._positions=r,n._colors=s,n._ellipsoid=re.clone(a,n._ellipsoid),n._vertexFormat=We.clone(c,n._vertexFormat),n._width=l,n._colorsPerVertex=u,n._arcType=m,n._granularity=p,n):(P_.positions=r,P_.colors=s,P_.width=l,P_.colorsPerVertex=u,P_.arcType=m,P_.granularity=p,new J2(P_))};var vde=new h,wde=new h,Fde=new h,Ade=new h;J2.createGeometry=function(e){let t=e._width,n=e._vertexFormat,i=e._colors,o=e._colorsPerVertex,r=e._arcType,s=e._granularity,a=e._ellipsoid,c,l,u,m=[],p=go(e._positions,h.equalsEpsilon,!1,m);if(d(i)&&m.length>0){let w=0,N=m[0];i=i.filter(function(B,k){let O=!1;return o?O=k===N||k===0&&N===1:O=k+1===N,O?(w++,N=m[w],!1):!0})}let y=p.length;if(y<2||t<=0)return;if(r===Jt.GEODESIC||r===Jt.RHUMB){let w,N;r===Jt.GEODESIC?(w=W.chordLength(s,a.maximumRadius),N=Xi.numberOfPoints):(w=s,N=Xi.numberOfPointsRhumbLine);let B=Xi.extractHeights(p,a);if(d(i)){let k=1;for(c=0;c<y-1;++c)k+=N(p[c],p[c+1],w);let O=new Array(k),U=0;for(c=0;c<y-1;++c){let J=p[c],z=p[c+1],ee=i[c],K=N(J,z,w);if(o&&c<k){let j=i[c+1],q=_4e(J,z,ee,j,K),be=q.length;for(l=0;l<be;++l)O[U++]=q[l]}else for(l=0;l<K;++l)O[U++]=Y.clone(ee)}O[U]=Y.clone(i[i.length-1]),i=O,Mde.length=0}r===Jt.GEODESIC?p=Xi.generateCartesianArc({positions:p,minDistance:w,ellipsoid:a,height:B}):p=Xi.generateCartesianRhumbArc({positions:p,granularity:w,ellipsoid:a,height:B})}y=p.length;let f=y*4-4,x=new Float64Array(f*3),_=new Float64Array(f*3),C=new Float64Array(f*3),V=new Float32Array(f*2),L=n.st?new Float32Array(f*2):void 0,Z=d(i)?new Uint8Array(f*4):void 0,G=0,X=0,P=0,v=0,F;for(l=0;l<y;++l){l===0?(F=vde,h.subtract(p[0],p[1],F),h.add(p[0],F,F)):F=p[l-1],h.clone(F,Fde),h.clone(p[l],wde),l===y-1?(F=vde,h.subtract(p[y-1],p[y-2],F),h.add(p[y-1],F,F)):F=p[l+1],h.clone(F,Ade);let w,N;d(Z)&&(l!==0&&!o?w=i[l-1]:w=i[l],l!==y-1&&(N=i[l]));let B=l===0?2:0,k=l===y-1?2:4;for(u=B;u<k;++u){h.pack(wde,x,G),h.pack(Fde,_,G),h.pack(Ade,C,G),G+=3;let O=u-2<0?-1:1;if(V[X++]=2*(u%2)-1,V[X++]=O*t,n.st&&(L[P++]=l/(y-1),L[P++]=Math.max(V[X-2],0)),d(Z)){let U=u<2?w:N;Z[v++]=Y.floatToByte(U.red),Z[v++]=Y.floatToByte(U.green),Z[v++]=Y.floatToByte(U.blue),Z[v++]=Y.floatToByte(U.alpha)}}}let M=new hn;M.position=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:x}),M.prevPosition=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:_}),M.nextPosition=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:C}),M.expandAndWidth=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:V}),n.st&&(M.st=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:L})),d(Z)&&(M.color=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:4,values:Z,normalize:!0}));let b=Ue.createTypedArray(f,y*6-6),R=0,E=0,I=y-1;for(l=0;l<I;++l)b[E++]=R,b[E++]=R+2,b[E++]=R+1,b[E++]=R+1,b[E++]=R+2,b[E++]=R+3,R+=4;return new dt({attributes:M,indices:b,primitiveType:Fe.TRIANGLES,boundingSphere:ce.fromPoints(p),geometryType:Kd.POLYLINES})};var S0=J2;var T4e=new qn(0),c5={},kde=new Y,S4e=new At(Y.WHITE),C4e=new qn(!0),V4e=new qn(xn.DISABLED),L4e=new qn(new Gt),R4e=new qn(kn.BOTH);function Z4e(){this.vertexFormat=void 0,this.positions=void 0,this.width=void 0,this.arcType=void 0,this.granularity=void 0}function G4e(){this.positions=void 0,this.width=void 0,this.arcType=void 0,this.granularity=void 0}function Qm(e,t){this._entity=e,this._scene=t,this._entitySubscription=e.definitionChanged.addEventListener(Qm.prototype._onEntityPropertyChanged,this),this._fillEnabled=!1,this._dynamic=!1,this._geometryChanged=new ye,this._showProperty=void 0,this._materialProperty=void 0,this._shadowsProperty=void 0,this._distanceDisplayConditionProperty=void 0,this._classificationTypeProperty=void 0,this._depthFailMaterialProperty=void 0,this._geometryOptions=new Z4e,this._groundGeometryOptions=new G4e,this._id=`polyline-${e.id}`,this._clampToGround=!1,this._supportsPolylinesOnTerrain=Oo.supportsPolylinesOnTerrain(t),this._zIndex=0,this._onEntityPropertyChanged(e,"polyline",e.polyline,void 0)}Object.defineProperties(Qm.prototype,{id:{get:function(){return this._id}},entity:{get:function(){return this._entity}},fillEnabled:{get:function(){return this._fillEnabled}},hasConstantFill:{get:function(){return!this._fillEnabled||!d(this._entity.availability)&&H.isConstant(this._showProperty)}},fillMaterialProperty:{get:function(){return this._materialProperty}},depthFailMaterialProperty:{get:function(){return this._depthFailMaterialProperty}},outlineEnabled:{value:!1},hasConstantOutline:{value:!0},outlineColorProperty:{value:void 0},shadowsProperty:{get:function(){return this._shadowsProperty}},distanceDisplayConditionProperty:{get:function(){return this._distanceDisplayConditionProperty}},classificationTypeProperty:{get:function(){return this._classificationTypeProperty}},isDynamic:{get:function(){return this._dynamic}},isClosed:{value:!1},geometryChanged:{get:function(){return this._geometryChanged}},arcType:{get:function(){return this._arcType}},clampToGround:{get:function(){return this._clampToGround&&this._supportsPolylinesOnTerrain}},zIndex:{get:function(){return this._zIndex}}});Qm.prototype.isOutlineVisible=function(e){return!1};Qm.prototype.isFilled=function(e){let t=this._entity,n=this._fillEnabled&&t.isAvailable(e)&&this._showProperty.getValue(e);return g(n,!1)};Qm.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=new gn(n&&t.isShowing&&this._showProperty.getValue(e)),o=this._distanceDisplayConditionProperty.getValue(e),r=Un.fromDistanceDisplayCondition(o),s={show:i,distanceDisplayCondition:r},a;return this._materialProperty instanceof At&&(d(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(a=this._materialProperty.color.getValue(e,kde)),d(a)||(a=Y.WHITE),s.color=Ut.fromColor(a)),this.clampToGround?new _t({id:t,geometry:new zg(this._groundGeometryOptions),attributes:s}):(d(this._depthFailMaterialProperty)&&this._depthFailMaterialProperty instanceof At&&(d(this._depthFailMaterialProperty.color)&&(this._depthFailMaterialProperty.color.isConstant||n)&&(a=this._depthFailMaterialProperty.color.getValue(e,kde)),d(a)||(a=Y.WHITE),s.depthFailColor=Ut.fromColor(a)),new _t({id:t,geometry:new S0(this._geometryOptions),attributes:s}))};Qm.prototype.createOutlineGeometryInstance=function(e){};Qm.prototype.isDestroyed=function(){return!1};Qm.prototype.destroy=function(){this._entitySubscription(),ue(this)};Qm.prototype._onEntityPropertyChanged=function(e,t,n,i){if(!(t==="availability"||t==="polyline"))return;let o=this._entity.polyline;if(!d(o)){this._fillEnabled&&(this._fillEnabled=!1,this._geometryChanged.raiseEvent(this));return}let r=o.positions,s=o.show;if(d(s)&&s.isConstant&&!s.getValue(Be.MINIMUM_VALUE)||!d(r)){this._fillEnabled&&(this._fillEnabled=!1,this._geometryChanged.raiseEvent(this));return}let a=o.zIndex,c=g(o.material,S4e),l=c instanceof At;this._materialProperty=c,this._depthFailMaterialProperty=o.depthFailMaterial,this._showProperty=g(s,C4e),this._shadowsProperty=g(o.shadows,V4e),this._distanceDisplayConditionProperty=g(o.distanceDisplayCondition,L4e),this._classificationTypeProperty=g(o.classificationType,R4e),this._fillEnabled=!0,this._zIndex=g(a,T4e);let u=o.width,m=o.arcType,p=o.clampToGround,y=o.granularity;if(!r.isConstant||!H.isConstant(u)||!H.isConstant(m)||!H.isConstant(y)||!H.isConstant(p)||!H.isConstant(a))this._dynamic||(this._dynamic=!0,this._geometryChanged.raiseEvent(this));else{let f=this._geometryOptions,x=r.getValue(Be.MINIMUM_VALUE,f.positions);if(!d(x)||x.length<2){this._fillEnabled&&(this._fillEnabled=!1,this._geometryChanged.raiseEvent(this));return}let _;l&&(!d(this._depthFailMaterialProperty)||this._depthFailMaterialProperty instanceof At)?_=Fr.VERTEX_FORMAT:_=ks.VERTEX_FORMAT,f.vertexFormat=_,f.positions=x,f.width=d(u)?u.getValue(Be.MINIMUM_VALUE):void 0,f.arcType=d(m)?m.getValue(Be.MINIMUM_VALUE):void 0,f.granularity=d(y)?y.getValue(Be.MINIMUM_VALUE):void 0;let C=this._groundGeometryOptions;C.positions=x,C.width=f.width,C.arcType=f.arcType,C.granularity=f.granularity,this._clampToGround=d(p)?p.getValue(Be.MINIMUM_VALUE):!1,!this._clampToGround&&d(a)&&Pt("Entity polylines must have clampToGround: true when using zIndex. zIndex will be ignored."),this._dynamic=!1,this._geometryChanged.raiseEvent(this)}};Qm.prototype.createDynamicUpdater=function(e,t){return new Q2(e,t,this)};var _1={positions:void 0,granularity:void 0,height:void 0,ellipsoid:void 0};function Q2(e,t,n){this._line=void 0,this._primitives=e,this._groundPrimitives=t,this._groundPolylinePrimitive=void 0,this._material=void 0,this._geometryUpdater=n,this._positions=[]}function Dde(e){if(d(e._line))return e._line;let t=e._geometryUpdater._scene.id,n=c5[t],i=e._primitives;!d(n)||n.isDestroyed()?(n=new Wm,c5[t]=n,i.add(n)):i.contains(n)||i.add(n);let o=n.add();return o.id=e._geometryUpdater._entity,e._line=o,o}Q2.prototype.update=function(e){let t=this._geometryUpdater,n=t._entity,i=n.polyline,o=i.positions,r=H.getValueOrUndefined(o,e,this._positions);t._clampToGround=H.getValueOrDefault(i._clampToGround,e,!1),t._groundGeometryOptions.positions=r,t._groundGeometryOptions.width=H.getValueOrDefault(i._width,e,1),t._groundGeometryOptions.arcType=H.getValueOrDefault(i._arcType,e,Jt.GEODESIC),t._groundGeometryOptions.granularity=H.getValueOrDefault(i._granularity,e,9999);let s=this._groundPrimitives;if(d(this._groundPolylinePrimitive)&&(s.remove(this._groundPolylinePrimitive),this._groundPolylinePrimitive=void 0),t.clampToGround){if(!n.isShowing||!n.isAvailable(e)||!H.getValueOrDefault(i._show,e,!0)||!d(r)||r.length<2)return;let u=t.fillMaterialProperty,m;if(u instanceof At)m=new Fr;else{let p=Yo.getValue(e,u,this._material);m=new ks({material:p,translucent:p.isTranslucent()}),this._material=p}this._groundPolylinePrimitive=s.add(new cm({geometryInstances:t.createFillGeometryInstance(e),appearance:m,classificationType:t.classificationTypeProperty.getValue(e),asynchronous:!1}),H.getValueOrUndefined(t.zIndex,e)),d(this._line)&&(this._line.show=!1);return}let a=Dde(this);if(!n.isShowing||!n.isAvailable(e)||!H.getValueOrDefault(i._show,e,!0)){a.show=!1;return}if(!d(r)||r.length<2){a.show=!1;return}let c=Jt.GEODESIC;c=H.getValueOrDefault(i._arcType,e,c);let l=t._scene.globe;c!==Jt.NONE&&d(l)&&(_1.ellipsoid=l.ellipsoid,_1.positions=r,_1.granularity=H.getValueOrUndefined(i._granularity,e),_1.height=Xi.extractHeights(r,l.ellipsoid),c===Jt.GEODESIC?r=Xi.generateCartesianArc(_1):r=Xi.generateCartesianRhumbArc(_1)),a.show=!0,a.positions=r.slice(),a.material=Yo.getValue(e,t.fillMaterialProperty,a.material),a.width=H.getValueOrDefault(i._width,e,1),a.distanceDisplayCondition=H.getValueOrUndefined(i._distanceDisplayCondition,e,a.distanceDisplayCondition)};Q2.prototype.getBoundingSphere=function(e){if(this._geometryUpdater.clampToGround){let t=this._groundPolylinePrimitive;if(d(t)&&t.show&&t.ready){let n=t.getGeometryInstanceAttributes(this._geometryUpdater._entity);if(d(n)&&d(n.boundingSphere))return ce.clone(n.boundingSphere,e),lt.DONE}return d(t)&&!t.ready?lt.PENDING:lt.DONE}else{let t=Dde(this);if(t.show&&t.positions.length>0)return ce.fromPoints(t.positions,e),lt.DONE}return lt.FAILED};Q2.prototype.isDestroyed=function(){return!1};Q2.prototype.destroy=function(){let t=this._geometryUpdater._scene.id,n=c5[t];d(n)&&(n.remove(this._line),n.length===0&&(this._primitives.removeAndDestroy(n),delete c5[t])),d(this._groundPolylinePrimitive)&&this._groundPrimitives.remove(this._groundPolylinePrimitive),ue(this)};var j2=Qm;var fqn=T(S(),1);var E4e=new Y,X4e=new Gt,I4e=new Gt;function jm(e,t,n,i,o){let r;n instanceof At?r=Fr:r=ks,this.orderedGroundPrimitives=e,this.classificationType=t,this.appearanceType=r,this.materialProperty=n,this.updaters=new Tt,this.createPrimitive=!0,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Tt,this.material=void 0,this.updatersWithAttributes=new Tt,this.attributes=new Tt,this.invalidated=!1,this.removeMaterialSubscription=n.definitionChanged.addEventListener(jm.prototype.onMaterialChanged,this),this.subscriptions=new Tt,this.showsUpdated=new Tt,this.zIndex=i,this._asynchronous=o}jm.prototype.onMaterialChanged=function(){this.invalidated=!0};jm.prototype.isMaterial=function(e){let t=this.materialProperty,n=e.fillMaterialProperty;return n===t||n instanceof At&&t instanceof At?!0:d(t)&&t.equals(n)};jm.prototype.add=function(e,t,n){let i=t.id;if(this.updaters.set(i,t),this.geometry.set(i,n),!t.hasConstantFill||!t.fillMaterialProperty.isConstant||!H.isConstant(t.distanceDisplayConditionProperty))this.updatersWithAttributes.set(i,t);else{let o=this;this.subscriptions.set(i,t.entity.definitionChanged.addEventListener(function(r,s,a,c){s==="isShowing"&&o.showsUpdated.set(t.id,t)}))}this.createPrimitive=!0};jm.prototype.remove=function(e){let t=e.id;if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.updatersWithAttributes.remove(t);let n=this.subscriptions.get(t);return d(n)&&(n(),this.subscriptions.remove(t)),!0}return!1};jm.prototype.update=function(e){let t=!0,n=this.primitive,i=this.orderedGroundPrimitives,o=this.geometry.values,r;if(this.createPrimitive){if(o.length>0)d(n)&&(d(this.oldPrimitive)?i.remove(n):this.oldPrimitive=n),n=new cm({show:!1,asynchronous:this._asynchronous,geometryInstances:o.slice(),appearance:new this.appearanceType,classificationType:this.classificationType}),this.appearanceType===ks&&(this.material=Yo.getValue(e,this.materialProperty,this.material),n.appearance.material=this.material),i.add(n,this.zIndex),t=!1;else{d(n)&&(i.remove(n),n=void 0);let a=this.oldPrimitive;d(a)&&(i.remove(a),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=n,this.createPrimitive=!1}else if(d(n)&&n.ready){n.show=!0,d(this.oldPrimitive)&&(i.remove(this.oldPrimitive),this.oldPrimitive=void 0),this.appearanceType===ks&&(this.material=Yo.getValue(e,this.materialProperty,this.material),this.primitive.appearance.material=this.material);let s=this.updatersWithAttributes.values,a=s.length;for(r=0;r<a;r++){let c=s[r],l=c.entity,u=this.geometry.get(c.id),m=this.attributes.get(u.id.id);if(d(m)||(m=n.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,m)),!c.fillMaterialProperty.isConstant){let x=c.fillMaterialProperty.color,_=H.getValueOrDefault(x,e,Y.WHITE,E4e);Y.equals(m._lastColor,_)||(m._lastColor=Y.clone(_,m._lastColor),m.color=Ut.toValue(_,m.color))}let p=l.isShowing&&(c.hasConstantFill||c.isFilled(e)),y=m.show[0]===1;p!==y&&(m.show=gn.toValue(p,m.show));let f=c.distanceDisplayConditionProperty;if(!H.isConstant(f)){let x=H.getValueOrDefault(f,e,I4e,X4e);Gt.equals(x,m._lastDistanceDisplayCondition)||(m._lastDistanceDisplayCondition=Gt.clone(x,m._lastDistanceDisplayCondition),m.distanceDisplayCondition=Un.toValue(x,m.distanceDisplayCondition))}}this.updateShows(n)}else d(n)&&!n.ready&&(t=!1);return t};jm.prototype.updateShows=function(e){let t=this.showsUpdated.values,n=t.length;for(let i=0;i<n;i++){let o=t[i],r=o.entity,s=this.geometry.get(o.id),a=this.attributes.get(s.id.id);d(a)||(a=e.getGeometryInstanceAttributes(s.id),this.attributes.set(s.id.id,a));let c=r.isShowing,l=a.show[0]===1;c!==l&&(a.show=gn.toValue(c,a.show),s.attributes.show.value[0]=a.show[0])}this.showsUpdated.removeAll()};jm.prototype.contains=function(e){return this.updaters.contains(e.id)};jm.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return lt.PENDING;let i=n.getGeometryInstanceAttributes(e.entity);return!d(i)||!d(i.boundingSphere)||d(i.show)&&i.show[0]===0?lt.FAILED:(i.boundingSphere.clone(t),lt.DONE)};jm.prototype.destroy=function(){let e=this.primitive,t=this.orderedGroundPrimitives;d(e)&&t.remove(e);let n=this.oldPrimitive;d(n)&&t.remove(n),this.removeMaterialSubscription()};function T1(e,t,n){this._items=[],this._orderedGroundPrimitives=e,this._classificationType=t,this._asynchronous=g(n,!0)}T1.prototype.add=function(e,t){let n=this._items,i=n.length,o=t.createFillGeometryInstance(e),r=H.getValueOrDefault(t.zIndex,0);for(let a=0;a<i;++a){let c=n[a];if(c.isMaterial(t)&&c.zIndex===r){c.add(e,t,o);return}}let s=new jm(this._orderedGroundPrimitives,this._classificationType,t.fillMaterialProperty,r,this._asynchronous);s.add(e,t,o),n.push(s)};T1.prototype.remove=function(e){let t=this._items,n=t.length;for(let i=n-1;i>=0;i--){let o=t[i];if(o.remove(e)){o.updaters.length===0&&(t.splice(i,1),o.destroy());break}}};T1.prototype.update=function(e){let t,n=this._items,i=n.length;for(t=i-1;t>=0;t--){let r=n[t];if(r.invalidated){n.splice(t,1);let s=r.updaters.values,a=s.length;for(let c=0;c<a;c++)this.add(e,s[c]);r.destroy()}}let o=!0;for(t=0;t<n.length;t++)o=n[t].update(e)&&o;return o};T1.prototype.getBoundingSphere=function(e,t){let n=this._items,i=n.length;for(let o=0;o<i;o++){let r=n[o];if(r.contains(e))return r.getBoundingSphere(e,t)}return lt.FAILED};T1.prototype.removeAllPrimitives=function(){let e=this._items,t=e.length;for(let n=0;n<t;n++)e[n].destroy();this._items.length=0};var q2=T1;var W4e=[];function Bde(e,t){let n=e._batches,i=n.length;for(let o=0;o<i;o++)n[o].remove(t)}function Yde(e,t,n){if(n.isDynamic){e._dynamicBatch.add(t,n);return}if(n.clampToGround&&n.fillEnabled){let s=n.classificationTypeProperty.getValue(t);e._groundBatches[s].add(t,n);return}let i;n.fillEnabled&&(i=n.shadowsProperty.getValue(t));let o=0;d(n.depthFailMaterialProperty)&&(o=n.depthFailMaterialProperty instanceof At?1:2);let r;d(i)&&(r=i+o*xn.NUMBER_OF_SHADOW_MODES),n.fillEnabled&&(n.fillMaterialProperty instanceof At?e._colorBatches[r].add(t,n):e._materialBatches[r].add(t,n))}function hf(e,t,n,i){i=g(i,e.groundPrimitives),n=g(n,e.primitives),this._scene=e,this._primitives=n,this._entityCollection=void 0,this._addedObjects=new Tt,this._removedObjects=new Tt,this._changedObjects=new Tt;let o,r=xn.NUMBER_OF_SHADOW_MODES;for(this._colorBatches=new Array(r*3),this._materialBatches=new Array(r*3),o=0;o<r;++o)this._colorBatches[o]=new Zu(n,Fr,void 0,!1,o),this._materialBatches[o]=new Gu(n,ks,void 0,!1,o),this._colorBatches[o+r]=new Zu(n,Fr,Fr,!1,o),this._materialBatches[o+r]=new Gu(n,ks,Fr,!1,o),this._colorBatches[o+r*2]=new Zu(n,Fr,ks,!1,o),this._materialBatches[o+r*2]=new Gu(n,ks,ks,!1,o);this._dynamicBatch=new T_(n,i);let s=kn.NUMBER_OF_CLASSIFICATION_TYPES;for(this._groundBatches=new Array(s),o=0;o<s;++o)this._groundBatches[o]=new q2(i,o);this._batches=this._colorBatches.concat(this._materialBatches,this._dynamicBatch,this._groundBatches),this._subscriptions=new Tt,this._updaters=new Tt,this._entityCollection=t,t.collectionChanged.addEventListener(hf.prototype._onCollectionChanged,this),this._onCollectionChanged(t,t.values,W4e)}hf.prototype.update=function(e){let t=this._addedObjects,n=t.values,i=this._removedObjects,o=i.values,r=this._changedObjects,s=r.values,a,c,l,u;for(a=s.length-1;a>-1;a--)c=s[a],l=c.id,u=this._updaters.get(l),u.entity===c?(Bde(this,u),Yde(this,e,u)):(o.push(c),n.push(c));for(a=o.length-1;a>-1;a--)c=o[a],l=c.id,u=this._updaters.get(l),Bde(this,u),u.destroy(),this._updaters.remove(l),this._subscriptions.get(l)(),this._subscriptions.remove(l);for(a=n.length-1;a>-1;a--)c=n[a],l=c.id,u=new j2(c,this._scene),this._updaters.set(l,u),Yde(this,e,u),this._subscriptions.set(l,u.geometryChanged.addEventListener(hf._onGeometryChanged,this));t.removeAll(),i.removeAll(),r.removeAll();let m=!0,p=this._batches,y=p.length;for(a=0;a<y;a++)m=p[a].update(e)&&m;return m};var P4e=[],v4e=new ce;hf.prototype.getBoundingSphere=function(e,t){let n=P4e,i=v4e,o=0,r=lt.DONE,s=this._batches,a=s.length,c=this._updaters.get(e.id);for(let l=0;l<a;l++){if(r=s[l].getBoundingSphere(c,i),r===lt.PENDING)return lt.PENDING;r===lt.DONE&&(n[o]=ce.clone(i,n[o]),o++)}return o===0?lt.FAILED:(n.length=o,ce.fromBoundingSpheres(n,t),lt.DONE)};hf.prototype.isDestroyed=function(){return!1};hf.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(hf.prototype._onCollectionChanged,this),this._addedObjects.removeAll(),this._removedObjects.removeAll();let e,t=this._batches,n=t.length;for(e=0;e<n;e++)t[e].removeAllPrimitives();let i=this._subscriptions.values;for(n=i.length,e=0;e<n;e++)i[e]();return this._subscriptions.removeAll(),ue(this)};hf._onGeometryChanged=function(e){let t=this._removedObjects,n=this._changedObjects,i=e.entity,o=i.id;!d(t.get(o))&&!d(n.get(o))&&n.set(o,i)};hf.prototype._onCollectionChanged=function(e,t,n){let i=this._addedObjects,o=this._removedObjects,r=this._changedObjects,s,a,c;for(s=n.length-1;s>-1;s--)c=n[s],a=c.id,i.remove(a)||(o.set(a,c),r.remove(a));for(s=t.length-1;s>-1;s--)c=t[s],a=c.id,o.remove(a)?r.set(a,c):i.set(a,c)};var $2=hf;function Iu(e){Vc.initializeTerrainHeights(),cm.initializeTerrainHeights();let t=e.scene,n=e.dataSourceCollection;this._eventHelper=new Cr,this._eventHelper.add(n.dataSourceAdded,this._onDataSourceAdded,this),this._eventHelper.add(n.dataSourceRemoved,this._onDataSourceRemoved,this),this._eventHelper.add(n.dataSourceMoved,this._onDataSourceMoved,this),this._eventHelper.add(t.postRender,this._postRender,this),this._dataSourceCollection=n,this._scene=t,this._visualizersCallback=g(e.visualizersCallback,Iu.defaultVisualizersCallback);let i=!1,o=new Zl,r=new Zl;n.length>0&&(t.primitives.add(o),t.groundPrimitives.add(r),i=!0),this._primitives=o,this._groundPrimitives=r;for(let l=0,u=n.length;l<u;l++)this._onDataSourceAdded(n,n.get(l));let s=new e2;this._onDataSourceAdded(void 0,s),this._defaultDataSource=s;let a,c;if(!i){let l=this,u=function(){t.primitives.add(o),t.groundPrimitives.add(r),a(),c(),l._removeDefaultDataSourceListener=void 0,l._removeDataSourceCollectionListener=void 0};a=s.entities.collectionChanged.addEventListener(u),c=n.dataSourceAdded.addEventListener(u)}this._removeDefaultDataSourceListener=a,this._removeDataSourceCollectionListener=c,this._ready=!1}Iu.defaultVisualizersCallback=function(e,t,n){let i=n.entities;return[new qV(t,i),new k2(e,i,n._primitives,n._groundPrimitives),new D2(t,i),new Y2(e,i),new NW(e,i),new z2(t,i),new K2(e,i),new $2(e,i,n._primitives,n._groundPrimitives)]};Object.defineProperties(Iu.prototype,{scene:{get:function(){return this._scene}},dataSources:{get:function(){return this._dataSourceCollection}},defaultDataSource:{get:function(){return this._defaultDataSource}},ready:{get:function(){return this._ready}}});Iu.prototype.isDestroyed=function(){return!1};Iu.prototype.destroy=function(){this._eventHelper.removeAll();let e=this._dataSourceCollection;for(let t=0,n=e.length;t<n;++t)this._onDataSourceRemoved(this._dataSourceCollection,e.get(t));return this._onDataSourceRemoved(void 0,this._defaultDataSource),d(this._removeDefaultDataSourceListener)?(this._removeDefaultDataSourceListener(),this._removeDataSourceCollectionListener()):(this._scene.primitives.remove(this._primitives),this._scene.groundPrimitives.remove(this._groundPrimitives)),ue(this)};Iu.prototype.update=function(e){if(!li.initialized)return this._ready=!1,!1;let t=!0,n,i,o,r,s=this._dataSourceCollection,a=s.length;for(n=0;n<a;n++){let c=s.get(n);for(d(c.update)&&(t=c.update(e)&&t),o=c._visualizers,r=o.length,i=0;i<r;i++)t=o[i].update(e)&&t}for(o=this._defaultDataSource._visualizers,r=o.length,i=0;i<r;i++)t=o[i].update(e)&&t;return this._ready=t,t};Iu.prototype._postRender=function(){let e=this._scene.frameState,t=this._dataSourceCollection,n=t.length;for(let i=0;i<n;i++){let o=t.get(i),r=o.credit;d(r)&&e.creditDisplay.addCreditToNextFrame(r);let s=o._resourceCredits;if(d(s)){let a=s.length;for(let c=0;c<a;c++)e.creditDisplay.addCreditToNextFrame(s[c])}}};var w4e=[],F4e=new ce;Iu.prototype.getBoundingSphere=function(e,t,n){if(!this._ready)return lt.PENDING;let i,o,r=this._defaultDataSource;if(!r.entities.contains(e)){r=void 0;let p=this._dataSourceCollection;for(o=p.length,i=0;i<o;i++){let y=p.get(i);if(y.entities.contains(e)){r=y;break}}}if(!d(r))return lt.FAILED;let s=w4e,a=F4e,c=0,l=lt.DONE,u=r._visualizers,m=u.length;for(i=0;i<m;i++){let p=u[i];if(d(p.getBoundingSphere)){if(l=u[i].getBoundingSphere(e,a),!t&&l===lt.PENDING)return lt.PENDING;l===lt.DONE&&(s[c]=ce.clone(a,s[c]),c++)}}return c===0?lt.FAILED:(s.length=c,ce.fromBoundingSpheres(s,n),lt.DONE)};Iu.prototype._onDataSourceAdded=function(e,t){let n=this._scene,i=this._primitives,o=this._groundPrimitives,r=i.add(new Zl),s=o.add(new p2);t._primitives=r,t._groundPrimitives=s;let a=t.clustering;a._initialize(n),r.add(a),t._visualizers=this._visualizersCallback(n,a,t)};Iu.prototype._onDataSourceRemoved=function(e,t){let n=this._primitives,i=this._groundPrimitives,o=t._primitives,r=t._groundPrimitives,s=t.clustering;o.remove(s);let a=t._visualizers,c=a.length;for(let l=0;l<c;l++)a[l].destroy();n.remove(o),i.remove(r),t._visualizers=void 0};Iu.prototype._onDataSourceMoved=function(e,t,n){let i=this._primitives,o=this._groundPrimitives,r=e._primitives,s=e._groundPrimitives;t===n+1?(i.raise(r),o.raise(s)):t===n-1?(i.lower(r),o.lower(s)):t===0?(i.lowerToBottom(r),o.lowerToBottom(s),i.raise(r),o.raise(s)):(i.raiseToTop(r),o.raiseToTop(s))};var eP=Iu;var y$n=T(S(),1);var o$n=T(S(),1);function SH(e,t,n){this.heading=g(e,0),this.pitch=g(t,0),this.range=g(n,0)}SH.clone=function(e,t){if(d(e))return d(t)||(t=new SH),t.heading=e.heading,t.pitch=e.pitch,t.range=e.range,t};var Wu=SH;var Ode=new $,Kde=new $,Hde=new $,A4e=new A,l5=new h,zde=new h,CH=new h,VH=new h,Jde=new h,Qde=new h,S1=new te,M4e=1.25;function N4e(e,t,n,i,o,r,s){let a=e.scene.mode,c=o.getValue(r,e._lastCartesian);if(d(c)){let l=!1,u=!1,m,p,y;if(a===ie.SCENE3D){te.addSeconds(r,.001,S1);let V=o.getValue(S1,l5);if(d(V)||(te.addSeconds(r,-.001,S1),V=o.getValue(S1,l5),u=!0),d(V)){let L=vt.computeFixedToIcrfMatrix(r,Ode),Z=vt.computeFixedToIcrfMatrix(S1,Kde),G;!d(L)||!d(Z)?(G=vt.computeTemeToPseudoFixedMatrix(r,Hde),L=$.transpose(G,Ode),Z=vt.computeTemeToPseudoFixedMatrix(S1,Kde),$.transpose(Z,Z)):G=$.transpose(L,Hde);let X=$.multiplyByVector(L,c,Jde),P=$.multiplyByVector(Z,V,Qde);h.subtract(X,P,VH);let v=h.magnitude(VH)*1e3,F=W.GRAVITATIONALPARAMETER,M=-F/(v*v-2*F/h.magnitude(X));M<0||M>M4e*s.maximumRadius?(m=zde,h.normalize(c,m),h.negate(m,m),y=h.clone(h.UNIT_Z,CH),p=h.cross(y,m,l5),h.magnitude(p)>W.EPSILON7&&(h.normalize(m,m),h.normalize(p,p),y=h.cross(m,p,CH),h.normalize(y,y),l=!0)):h.equalsEpsilon(c,V,W.EPSILON7)||(y=zde,h.normalize(X,y),h.normalize(P,P),p=h.cross(y,P,CH),u&&(p=h.multiplyByScalar(p,-1,p)),h.equalsEpsilon(p,h.ZERO,W.EPSILON7)||(m=h.cross(p,y,l5),$.multiplyByVector(G,m,m),$.multiplyByVector(G,p,p),$.multiplyByVector(G,y,y),h.normalize(m,m),h.normalize(p,p),h.normalize(y,y),l=!0))}}d(e.boundingSphere)&&(c=e.boundingSphere.center);let f,x,_;i&&(f=h.clone(t.position,VH),x=h.clone(t.direction,Jde),_=h.clone(t.up,Qde));let C=A4e;l?(C[0]=m.x,C[1]=m.y,C[2]=m.z,C[3]=0,C[4]=p.x,C[5]=p.y,C[6]=p.z,C[7]=0,C[8]=y.x,C[9]=y.y,C[10]=y.z,C[11]=0,C[12]=c.x,C[13]=c.y,C[14]=c.z,C[15]=0):vt.eastNorthUpToFixedFrame(c,s,C),t._setTransform(C),i&&(h.clone(f,t.position),h.clone(x,t.direction),h.clone(_,t.up),h.cross(x,_,t.right))}if(n){let l=a===ie.SCENE2D||h.equals(e._offset3D,h.ZERO)?void 0:e._offset3D;t.lookAtTransform(t.transform,l)}}function tP(e,t,n){this.entity=e,this.scene=t,this.ellipsoid=g(n,re.WGS84),this.boundingSphere=void 0,this._lastEntity=void 0,this._mode=void 0,this._lastCartesian=new h,this._defaultOffset3D=void 0,this._offset3D=new h}Object.defineProperties(tP,{defaultOffset3D:{get:function(){return this._defaultOffset3D},set:function(e){this._defaultOffset3D=h.clone(e,new h)}}});tP.defaultOffset3D=new h(-14e3,3500,3500);var d5=new Wu,U4e=new h;tP.prototype.update=function(e,t){let n=this.scene,i=this.ellipsoid,o=n.mode;if(o===ie.MORPHING)return;let r=this.entity,s=r.position;if(!d(s))return;let a=r!==this._lastEntity,c=o!==this._mode,l=n.camera,u=a||c,m=!0;if(a){let p=r.viewFrom,y=d(p);if(!y&&d(t)){d5.pitch=-W.PI_OVER_FOUR,d5.range=0;let f=s.getValue(e,U4e);if(d(f)){let x=2-1/Math.max(1,h.magnitude(f)/i.maximumRadius);d5.pitch*=x}l.viewBoundingSphere(t,d5),this.boundingSphere=t,u=!1,m=!1}else(!y||!d(p.getValue(e,this._offset3D)))&&h.clone(tP._defaultOffset3D,this._offset3D)}else!c&&this._mode!==ie.SCENE2D&&h.clone(l.position,this._offset3D);this._lastEntity=r,this._mode=o,N4e(this,l,u,m,s,e,i)};var nP=tP;var Jei=T(S(),1);var V$n=T(S(),1);function oP(){this._cache={}}oP.prototype.fromColor=function(e,t){return u5(void 0,void 0,e,t,this._cache)};oP.prototype.fromUrl=function(e,t,n){return u5(e,void 0,t,n,this._cache)};oP.prototype.fromMakiIconId=function(e,t,n){return u5($t(`Assets/Textures/maki/${encodeURIComponent(e)}.png`),void 0,t,n,this._cache)};oP.prototype.fromText=function(e,t,n){return u5(void 0,e,t,n,this._cache)};var k4e=new Y;function D4e(e,t,n){e.save(),e.scale(n/24,n/24),e.fillStyle=t.toCssColorString(),e.strokeStyle=t.brighten(.6,k4e).toCssColorString(),e.lineWidth=.846,e.beginPath(),e.moveTo(6.72,.422),e.lineTo(17.28,.422),e.bezierCurveTo(18.553,.422,19.577,1.758,19.577,3.415),e.lineTo(19.577,10.973),e.bezierCurveTo(19.577,12.63,18.553,13.966,17.282,13.966),e.lineTo(14.386,14.008),e.lineTo(11.826,23.578),e.lineTo(9.614,14.008),e.lineTo(6.719,13.965),e.bezierCurveTo(5.446,13.983,4.422,12.629,4.422,10.972),e.lineTo(4.422,3.416),e.bezierCurveTo(4.423,1.76,5.447,.423,6.718,.423),e.closePath(),e.fill(),e.stroke(),e.restore()}function jde(e,t,n){let i=n/2.5,o=i,r=i;t.width>t.height?r=i*(t.height/t.width):t.width<t.height&&(o=i*(t.width/t.height));let s=Math.round((n-o)/2),a=Math.round(7/24*n-r/2);e.globalCompositeOperation="destination-out",e.drawImage(t,s-1,a,o,r),e.drawImage(t,s,a-1,o,r),e.drawImage(t,s+1,a,o,r),e.drawImage(t,s,a+1,o,r),e.globalCompositeOperation="destination-over",e.fillStyle=Y.BLACK.toCssColorString(),e.fillRect(s-1,a-1,o+2,r+2),e.globalCompositeOperation="destination-out",e.drawImage(t,s,a,o,r),e.globalCompositeOperation="destination-over",e.fillStyle=Y.WHITE.toCssColorString(),e.fillRect(s-1,a-2,o+2,r+2)}var iP=new Array(4);function u5(e,t,n,i,o){iP[0]=e,iP[1]=t,iP[2]=n,iP[3]=i;let r=JSON.stringify(iP),s=o[r];if(d(s))return s;let a=document.createElement("canvas");a.width=i,a.height=i;let c=a.getContext("2d");if(D4e(c,n,i),d(e)){let u=Ee.createIfNeeded(e).fetchImage().then(function(m){return jde(c,m,i),o[r]=a,a});return o[r]=u,u}else if(d(t)){let l=Ox(t,{font:`bold ${i}px sans-serif`});jde(c,l,i)}return o[r]=a,a}var C0=oP;var fei=T(S());var W$n=T(S());var E$n=T(S());var R$n=T(S());function LH(e){return e}function m5(e){if(e==null)return LH;var t,n,i=e.scale[0],o=e.scale[1],r=e.translate[0],s=e.translate[1];return function(a,c){c||(t=n=0);var l=2,u=a.length,m=new Array(u);for(m[0]=(t+=a[0])*i+r,m[1]=(n+=a[1])*o+s;l<u;)m[l]=a[l],++l;return m}}var M$n=T(S());var v$n=T(S());function qde(e,t){for(var n,i=e.length,o=i-t;o<--i;)n=e[o],e[o++]=e[i],e[i]=n}function RH(e,t){return typeof t=="string"&&(t=e.objects[t]),t.type==="GeometryCollection"?{type:"FeatureCollection",features:t.geometries.map(function(n){return $de(e,n)})}:$de(e,t)}function $de(e,t){var n=t.id,i=t.bbox,o=t.properties==null?{}:t.properties,r=ZH(e,t);return n==null&&i==null?{type:"Feature",properties:o,geometry:r}:i==null?{type:"Feature",id:n,properties:o,geometry:r}:{type:"Feature",id:n,bbox:i,properties:o,geometry:r}}function ZH(e,t){var n=m5(e.transform),i=e.arcs;function o(u,m){m.length&&m.pop();for(var p=i[u<0?~u:u],y=0,f=p.length;y<f;++y)m.push(n(p[y],y));u<0&&qde(m,f)}function r(u){return n(u)}function s(u){for(var m=[],p=0,y=u.length;p<y;++p)o(u[p],m);return m.length<2&&m.push(m[0]),m}function a(u){for(var m=s(u);m.length<4;)m.push(m[0]);return m}function c(u){return u.map(a)}function l(u){var m=u.type,p;switch(m){case"GeometryCollection":return{type:m,geometries:u.geometries.map(l)};case"Point":p=r(u.coordinates);break;case"MultiPoint":p=u.coordinates.map(r);break;case"LineString":p=s(u.arcs);break;case"MultiLineString":p=u.arcs.map(s);break;case"Polygon":p=c(u.arcs);break;case"MultiPolygon":p=u.arcs.map(c);break;default:return null}return{type:m,coordinates:p}}return l(t)}var Y$n=T(S());var U$n=T(S());var z$n=T(S());var eei=T(S());var Q$n=T(S());var aei=T(S());var iei=T(S());function h5(e){return h.fromDegrees(e[0],e[1],e[2])}var GH={"urn:ogc:def:crs:OGC:1.3:CRS84":h5,"EPSG:4326":h5,"urn:ogc:def:crs:EPSG::4326":h5},eue={},tue={},EH=48,XH,IH=Y.ROYALBLUE,WH=Y.YELLOW,PH=2,vH=Y.fromBytes(255,255,0,100),wH=!1,H4e={small:24,medium:48,large:64},z4e=["title","description","marker-size","marker-symbol","marker-color","stroke","stroke-opacity","stroke-width","fill","fill-opacity"];function nue(e,t){let n="";for(let i in e)if(e.hasOwnProperty(i)){if(i===t||z4e.indexOf(i)!==-1)continue;let o=e[i];d(o)&&(typeof o=="object"?n+=`<tr><th>${i}</th><td>${nue(o)}</td></tr>`:n+=`<tr><th>${i}</th><td>${o}</td></tr>`)}return n.length>0&&(n=`<table class="cesium-infoBox-defaultTable"><tbody>${n}</tbody></table>`),n}function J4e(e,t,n){let i;return function(o,r){return d(i)||(i=e(t,n)),i}}function Q4e(e,t){return new mm(J4e(nue,e,t),!0)}function f5(e,t,n){let i=e.id;if(!d(i)||e.type!=="Feature")i=Yn();else{let s=2,a=i;for(;d(t.getById(a));)a=`${i}_${s}`,s++;i=a}let o=t.getOrCreateEntity(i),r=e.properties;if(d(r)){o.properties=r;let s,a=r.title;if(d(a))o.name=a,s="title";else{let l=Number.MAX_VALUE;for(let u in r)if(r.hasOwnProperty(u)&&r[u]){let m=u.toLowerCase();if(l>1&&m==="title"){l=1,s=u;break}else l>2&&m==="name"?(l=2,s=u):l>3&&/title/i.test(u)?(l=3,s=u):l>4&&/name/i.test(u)&&(l=4,s=u)}d(s)&&(o.name=r[s])}let c=r.description;c!==null&&(o.description=d(c)?new qn(c):n(r,s))}return o}function FH(e,t){let n=new Array(e.length);for(let i=0;i<e.length;i++)n[i]=t(e[i]);return n}var iue={Feature:rue,FeatureCollection:j4e,GeometryCollection:sue,LineString:uue,MultiLineString:mue,MultiPoint:lue,MultiPolygon:pue,Point:cue,Polygon:fue,Topology:bue},oue={GeometryCollection:sue,LineString:uue,MultiLineString:mue,MultiPoint:lue,MultiPolygon:pue,Point:cue,Polygon:fue,Topology:bue};function rue(e,t,n,i,o){if(t.geometry===null){f5(t,e._entityCollection,o.describe);return}if(!d(t.geometry))throw new me("feature.geometry is required.");let r=t.geometry.type,s=oue[r];if(!d(s))throw new me(`Unknown geometry type: ${r}`);s(e,t,t.geometry,i,o)}function j4e(e,t,n,i,o){let r=t.features;for(let s=0,a=r.length;s<a;s++)rue(e,r[s],void 0,i,o)}function sue(e,t,n,i,o){let r=n.geometries;for(let s=0,a=r.length;s<a;s++){let c=r[s],l=c.type,u=oue[l];if(!d(u))throw new me(`Unknown geometry type: ${l}`);u(e,t,c,i,o)}}function aue(e,t,n,i,o){let r=o.markerSymbol,s=o.markerColor,a=o.markerSize,c=t.properties;if(d(c)){let y=c["marker-color"];d(y)&&(s=Y.fromCssColorString(y)),a=g(H4e[c["marker-size"]],a);let f=c["marker-symbol"];d(f)&&(r=f)}let l;d(r)?r.length===1?l=e._pinBuilder.fromText(r.toUpperCase(),s,a):l=e._pinBuilder.fromMakiIconId(r,s,a):l=e._pinBuilder.fromColor(s,a);let u=new Ia;u.verticalOrigin=new qn(In.BOTTOM),i.length===2&&o.clampToGround&&(u.heightReference=Oe.CLAMP_TO_GROUND);let m=f5(t,e._entityCollection,o.describe);m.billboard=u,m.position=new Rc(n(i));let p=Promise.resolve(l).then(function(y){u.image=new qn(y)}).catch(function(){u.image=new qn(e._pinBuilder.fromColor(s,a))});e._promises.push(p)}function cue(e,t,n,i,o){aue(e,t,i,n.coordinates,o)}function lue(e,t,n,i,o){let r=n.coordinates;for(let s=0;s<r.length;s++)aue(e,t,i,r[s],o)}function due(e,t,n,i,o){let r=o.strokeMaterialProperty,s=o.strokeWidthProperty,a=t.properties;if(d(a)){let u=a["stroke-width"];d(u)&&(s=new qn(u));let m,p=a.stroke;d(p)&&(m=Y.fromCssColorString(p));let y=a["stroke-opacity"];d(y)&&y!==1&&(d(m)||(m=r.color.getValue().clone()),m.alpha=y),d(m)&&(r=new At(m))}let c=f5(t,e._entityCollection,o.describe),l=new Da;c.polyline=l,l.clampToGround=o.clampToGround,l.material=r,l.width=s,l.positions=new qn(FH(i,n)),l.arcType=Jt.RHUMB}function uue(e,t,n,i,o){due(e,t,i,n.coordinates,o)}function mue(e,t,n,i,o){let r=n.coordinates;for(let s=0;s<r.length;s++)due(e,t,i,r[s],o)}function hue(e,t,n,i,o){if(i.length===0||i[0].length===0)return;let r=o.strokeMaterialProperty.color,s=o.fillMaterialProperty,a=o.strokeWidthProperty,c=t.properties;if(d(c)){let y=c["stroke-width"];d(y)&&(a=new qn(y));let f,x=c.stroke;d(x)&&(f=Y.fromCssColorString(x));let _=c["stroke-opacity"];d(_)&&_!==1&&(d(f)||(f=r.getValue().clone()),f.alpha=_),d(f)&&(r=new qn(f));let C,V=c.fill,L=s.color.getValue();d(V)&&(C=Y.fromCssColorString(V),C.alpha=L.alpha),_=c["fill-opacity"],d(_)&&_!==L.alpha&&(d(C)||(C=L.clone()),C.alpha=_),d(C)&&(s=new At(C))}let l=new dm;l.outline=new qn(!0),l.outlineColor=r,l.outlineWidth=a,l.material=s,l.arcType=Jt.RHUMB;let u=[];for(let y=1,f=i.length;y<f;y++)u.push(new ha(FH(i[y],n)));let m=i[0];l.hierarchy=new qn(new ha(FH(m,n),u)),m[0].length>2?l.perPositionHeight=new qn(!0):o.clampToGround||(l.height=0);let p=f5(t,e._entityCollection,o.describe);p.polygon=l}function fue(e,t,n,i,o){hue(e,t,i,n.coordinates,o)}function pue(e,t,n,i,o){let r=n.coordinates;for(let s=0;s<r.length;s++)hue(e,t,i,r[s],o)}function bue(e,t,n,i,o){for(let r in n.objects)if(n.objects.hasOwnProperty(r)){let s=RH(n,n.objects[r]),a=iue[s.type];a(e,s,s,i,o)}}function Ly(e){this._name=e,this._changed=new ye,this._error=new ye,this._isLoading=!1,this._loading=new ye,this._entityCollection=new Es(this),this._promises=[],this._pinBuilder=new C0,this._entityCluster=new rd,this._credit=void 0,this._resourceCredits=[]}Ly.load=function(e,t){return new Ly().load(e,t)};Object.defineProperties(Ly,{markerSize:{get:function(){return EH},set:function(e){EH=e}},markerSymbol:{get:function(){return XH},set:function(e){XH=e}},markerColor:{get:function(){return IH},set:function(e){IH=e}},stroke:{get:function(){return WH},set:function(e){WH=e}},strokeWidth:{get:function(){return PH},set:function(e){PH=e}},fill:{get:function(){return vH},set:function(e){vH=e}},clampToGround:{get:function(){return wH},set:function(e){wH=e}},crsNames:{get:function(){return GH}},crsLinkHrefs:{get:function(){return eue}},crsLinkTypes:{get:function(){return tue}}});Object.defineProperties(Ly.prototype,{name:{get:function(){return this._name},set:function(e){this._name!==e&&(this._name=e,this._changed.raiseEvent(this))}},clock:{value:void 0,writable:!1},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading}},changedEvent:{get:function(){return this._changed}},errorEvent:{get:function(){return this._error}},loadingEvent:{get:function(){return this._loading}},show:{get:function(){return this._entityCollection.show},set:function(e){this._entityCollection.show=e}},clustering:{get:function(){return this._entityCluster},set:function(e){this._entityCluster=e}},credit:{get:function(){return this._credit}}});Ly.prototype.load=function(e,t){return yue(this,e,t,!0)};Ly.prototype.process=function(e,t){return yue(this,e,t,!1)};function yue(e,t,n,i){Rr.setLoading(e,!0),n=g(n,g.EMPTY_OBJECT);let o=n.credit;typeof o=="string"&&(o=new St(o)),e._credit=o;let r=t,s=n.sourceUri;if(typeof t=="string"||t instanceof Ee){t=Ee.createIfNeeded(t),r=t.fetchJson(),s=g(s,t.getUrlComponent());let a=e._resourceCredits,c=t.credits;if(d(c)){let l=c.length;for(let u=0;u<l;u++)a.push(c[u])}}return n={describe:g(n.describe,Q4e),markerSize:g(n.markerSize,EH),markerSymbol:g(n.markerSymbol,XH),markerColor:g(n.markerColor,IH),strokeWidthProperty:new qn(g(n.strokeWidth,PH)),strokeMaterialProperty:new At(g(n.stroke,WH)),fillMaterialProperty:new At(g(n.fill,vH)),clampToGround:g(n.clampToGround,wH)},Promise.resolve(r).then(function(a){return q4e(e,a,n,s,i)}).catch(function(a){throw Rr.setLoading(e,!1),e._error.raiseEvent(e,a),a})}Ly.prototype.update=function(e){return!0};function q4e(e,t,n,i,o){let r;d(i)&&(r=u0(i)),d(r)&&e._name!==r&&(e._name=r,e._changed.raiseEvent(e));let s=iue[t.type];if(!d(s))throw new me(`Unsupported GeoJSON object type: ${t.type}`);let a=t.crs,c=a!==null?h5:null;if(d(a)){if(!d(a.properties))throw new me("crs.properties is undefined.");let l=a.properties;if(a.type==="name"){if(c=GH[l.name],!d(c))throw new me(`Unknown crs name: ${l.name}`)}else if(a.type==="link"){let u=eue[l.href];if(d(u)||(u=tue[l.type]),!d(u))throw new me(`Unable to resolve crs link: ${JSON.stringify(l)}`);c=u(l)}else if(a.type==="EPSG"){if(c=GH[`EPSG:${l.code}`],!d(c))throw new me(`Unknown crs EPSG code: ${l.code}`)}else throw new me(`Unknown crs type: ${a.type}`)}return Promise.resolve(c).then(function(l){return o&&e._entityCollection.removeAll(),l!==null&&s(e,t,t,l,n),Promise.all(e._promises).then(function(){return e._promises.length=0,Rr.setLoading(e,!1),e})})}var rP=Ly;var Mii=T(S(),1);var qni=T(S());var Fni=T(S());var jei=T(S()),gue="4.0.0";var $ei=T(S());function $4e(e){return e===void 0}function pd(e){return typeof e=="boolean"}function xue(e,t){for(var n in t)t.hasOwnProperty(n)&&$4e(e[n])&&(e[n]=t[n]);return e}function _ue(e,t,n){var i;return e.length>t&&(n==null?(n="&hellip;",i=3):i=n.length,e=e.substring(0,t-i)+n),e}function Ao(e,t){for(var n=e.length-1;n>=0;n--)e[n]===t&&e.splice(n,1)}function Ry(e,t){for(var n=e.length-1;n>=0;n--)t(e[n])===!0&&e.splice(n,1)}function Zy(e){throw new Error("Unhandled case for value: '".concat(e,"'"))}var gti=T(S());var rti=T(S());var nti=T(S()),Gy=/[A-Za-z]/,Ws=/[\d]/;var bd=/\s/,p5=/['"]/,Tue=/[\x00-\x1F\x7F]/,Sue=/A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\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\u08B6-\u08BD\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\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\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\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\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\u1C80-\u1C88\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\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\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\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\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-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\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/.source,eje=/\u2700-\u27bf\udde6-\uddff\ud800-\udbff\udc00-\udfff\ufe0e\ufe0f\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0\ud83c\udffb-\udfff\u200d\u3299\u3297\u303d\u3030\u24c2\ud83c\udd70-\udd71\udd7e-\udd7f\udd8e\udd91-\udd9a\udde6-\uddff\ude01-\ude02\ude1a\ude2f\ude32-\ude3a\ude50-\ude51\u203c\u2049\u25aa-\u25ab\u25b6\u25c0\u25fb-\u25fe\u00a9\u00ae\u2122\u2139\udc04\u2600-\u26FF\u2b05\u2b06\u2b07\u2b1b\u2b1c\u2b50\u2b55\u231a\u231b\u2328\u23cf\u23e9-\u23f3\u23f8-\u23fa\udccf\u2935\u2934\u2190-\u21ff/.source,tje=/\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F/.source,nje=Sue+eje+tje,Cue=/0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19/.source,eti=new RegExp("[".concat(Sue+Cue,"]")),AH=nje+Cue,qm=new RegExp("[".concat(AH,"]"));var b5=function(){function e(t){t===void 0&&(t={}),this.tagName="",this.attrs={},this.innerHTML="",this.tagName=t.tagName||"",this.attrs=t.attrs||{},this.innerHTML=t.innerHtml||t.innerHTML||""}return e.prototype.setTagName=function(t){return this.tagName=t,this},e.prototype.getTagName=function(){return this.tagName||""},e.prototype.setAttr=function(t,n){var i=this.getAttrs();return i[t]=n,this},e.prototype.getAttr=function(t){return this.getAttrs()[t]},e.prototype.setAttrs=function(t){return Object.assign(this.getAttrs(),t),this},e.prototype.getAttrs=function(){return this.attrs||(this.attrs={})},e.prototype.setClass=function(t){return this.setAttr("class",t)},e.prototype.addClass=function(t){for(var n=this.getClass(),i=n?n.split(bd):[],o=t.split(bd),r;r=o.shift();)i.indexOf(r)===-1&&i.push(r);return this.getAttrs().class=i.join(" "),this},e.prototype.removeClass=function(t){for(var n=this.getClass(),i=n?n.split(bd):[],o=t.split(bd),r;i.length&&(r=o.shift());){var s=i.indexOf(r);s!==-1&&i.splice(s,1)}return this.getAttrs().class=i.join(" "),this},e.prototype.getClass=function(){return this.getAttrs().class||""},e.prototype.hasClass=function(t){return(" "+this.getClass()+" ").indexOf(" "+t+" ")!==-1},e.prototype.setInnerHTML=function(t){return this.innerHTML=t,this},e.prototype.setInnerHtml=function(t){return this.setInnerHTML(t)},e.prototype.getInnerHTML=function(){return this.innerHTML||""},e.prototype.getInnerHtml=function(){return this.getInnerHTML()},e.prototype.toAnchorString=function(){var t=this.getTagName(),n=this.buildAttrsStr();return n=n?" "+n:"",["<",t,n,">",this.getInnerHtml(),"</",t,">"].join("")},e.prototype.buildAttrsStr=function(){if(!this.attrs)return"";var t=this.getAttrs(),n=[];for(var i in t)t.hasOwnProperty(i)&&n.push(i+'="'+t[i]+'"');return n.join(" ")},e}();var ati=T(S());function Vue(e,t,n){var i,o;n==null?(n="&hellip;",o=3,i=8):(o=n.length,i=n.length);var r=function(V){var L={},Z=V,G=Z.match(/^([a-z]+):\/\//i);return G&&(L.scheme=G[1],Z=Z.substr(G[0].length)),G=Z.match(/^(.*?)(?=(\?|#|\/|$))/i),G&&(L.host=G[1],Z=Z.substr(G[0].length)),G=Z.match(/^\/(.*?)(?=(\?|#|$))/i),G&&(L.path=G[1],Z=Z.substr(G[0].length)),G=Z.match(/^\?(.*?)(?=(#|$))/i),G&&(L.query=G[1],Z=Z.substr(G[0].length)),G=Z.match(/^#(.*?)$/i),G&&(L.fragment=G[1]),L},s=function(V){var L="";return V.scheme&&V.host&&(L+=V.scheme+"://"),V.host&&(L+=V.host),V.path&&(L+="/"+V.path),V.query&&(L+="?"+V.query),V.fragment&&(L+="#"+V.fragment),L},a=function(V,L){var Z=L/2,G=Math.ceil(Z),X=-1*Math.floor(Z),P="";return X<0&&(P=V.substr(X)),V.substr(0,G)+n+P};if(e.length<=t)return e;var c=t-o,l=r(e);if(l.query){var u=l.query.match(/^(.*?)(?=(\?|\#))(.*?)$/i);u&&(l.query=l.query.substr(0,u[1].length),e=s(l))}if(e.length<=t||(l.host&&(l.host=l.host.replace(/^www\./,""),e=s(l)),e.length<=t))return e;var m="";if(l.host&&(m+=l.host),m.length>=c)return l.host.length==t?(l.host.substr(0,t-o)+n).substr(0,c+i):a(m,c).substr(0,c+i);var p="";if(l.path&&(p+="/"+l.path),l.query&&(p+="?"+l.query),p)if((m+p).length>=c){if((m+p).length==t)return(m+p).substr(0,t);var y=c-m.length;return(m+a(p,y)).substr(0,c+i)}else m+=p;if(l.fragment){var f="#"+l.fragment;if((m+f).length>=c){if((m+f).length==t)return(m+f).substr(0,t);var x=c-m.length;return(m+a(f,x)).substr(0,c+i)}else m+=f}if(l.scheme&&l.host){var _=l.scheme+"://";if((m+_).length<c)return(_+m).substr(0,t)}if(m.length<=t)return m;var C="";return c>0&&(C=m.substr(-1*Math.floor(c/2))),(m.substr(0,Math.ceil(c/2))+n+C).substr(0,c+i)}var lti=T(S());function Lue(e,t,n){if(e.length<=t)return e;var i,o;n==null?(n="&hellip;",i=8,o=3):(i=n.length,o=n.length);var r=t-o,s="";return r>0&&(s=e.substr(-1*Math.floor(r/2))),(e.substr(0,Math.ceil(r/2))+n+s).substr(0,r+i)}var mti=T(S());function Rue(e,t,n){return _ue(e,t,n)}var Zue=function(){function e(t){t===void 0&&(t={}),this.newWindow=!1,this.truncate={},this.className="",this.newWindow=t.newWindow||!1,this.truncate=t.truncate||{},this.className=t.className||""}return e.prototype.build=function(t){return new b5({tagName:"a",attrs:this.createAttrs(t),innerHtml:this.processAnchorText(t.getAnchorText())})},e.prototype.createAttrs=function(t){var n={href:t.getAnchorHref()},i=this.createCssClass(t);return i&&(n.class=i),this.newWindow&&(n.target="_blank",n.rel="noopener noreferrer"),this.truncate&&this.truncate.length&&this.truncate.length<t.getAnchorText().length&&(n.title=t.getAnchorHref()),n},e.prototype.createCssClass=function(t){var n=this.className;if(n){for(var i=[n],o=t.getCssClassSuffixes(),r=0,s=o.length;r<s;r++)i.push(n+"-"+o[r]);return i.join(" ")}else return""},e.prototype.processAnchorText=function(t){return t=this.doTruncate(t),t},e.prototype.doTruncate=function(t){var n=this.truncate;if(!n||!n.length)return t;var i=n.length,o=n.location;return o==="smart"?Vue(t,i):o==="middle"?Lue(t,i):Rue(t,i)},e}();var Tni=T(S());var Pti=T(S());var _ti=T(S(),1),MH=function(e,t){return MH=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(n[o]=i[o])},MH(e,t)};function ff(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");MH(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}var Ps=function(){return Ps=Object.assign||function(t){for(var n,i=1,o=arguments.length;i<o;i++){n=arguments[i];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},Ps.apply(this,arguments)};var Sti=T(S()),pf=function(){function e(t){this._=null,this.matchedText="",this.offset=0,this.tagBuilder=t.tagBuilder,this.matchedText=t.matchedText,this.offset=t.offset}return e.prototype.getMatchedText=function(){return this.matchedText},e.prototype.setOffset=function(t){this.offset=t},e.prototype.getOffset=function(){return this.offset},e.prototype.getCssClassSuffixes=function(){return[this.type]},e.prototype.buildTag=function(){return this.tagBuilder.build(this)},e}();var Gti=T(S());var Vti=T(S()),ije="(?:xn--vermgensberatung-pwb|xn--vermgensberater-ctb|xn--clchc0ea0b2g2a9gcd|xn--w4r85el8fhu5dnra|northwesternmutual|travelersinsurance|verm\xF6gensberatung|xn--5su34j936bgsg|xn--bck1b9a5dre4c|xn--mgbah1a3hjkrd|xn--mgbai9azgqp6j|xn--mgberp4a5d4ar|xn--xkc2dl3a5ee0h|verm\xF6gensberater|xn--fzys8d69uvgm|xn--mgba7c0bbn0a|xn--mgbcpq6gpa1a|xn--xkc2al3hye2a|americanexpress|kerryproperties|sandvikcoromant|xn--i1b6b1a6a2e|xn--kcrx77d1x4a|xn--lgbbat1ad8j|xn--mgba3a4f16a|xn--mgbaakc7dvf|xn--mgbc0a9azcg|xn--nqv7fs00ema|americanfamily|bananarepublic|cancerresearch|cookingchannel|kerrylogistics|weatherchannel|xn--54b7fta0cc|xn--6qq986b3xl|xn--80aqecdr1a|xn--b4w605ferd|xn--fiq228c5hs|xn--h2breg3eve|xn--jlq480n2rg|xn--jlq61u9w7b|xn--mgba3a3ejt|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--mgbbh1a71e|xn--mgbca7dzdo|xn--mgbi4ecexp|xn--mgbx4cd0ab|xn--rvc1e0am3e|international|lifeinsurance|travelchannel|wolterskluwer|xn--cckwcxetd|xn--eckvdtc9d|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--h2brj9c8c|xn--tiq49xqyj|xn--yfro4i67o|xn--ygbi2ammx|construction|lplfinancial|scholarships|versicherung|xn--3e0b707e|xn--45br5cyl|xn--4dbrk0ce|xn--80adxhks|xn--80asehdb|xn--8y0a063a|xn--gckr3f0f|xn--mgb9awbf|xn--mgbab2bd|xn--mgbgu82a|xn--mgbpl2fh|xn--mgbt3dhd|xn--mk1bu44c|xn--ngbc5azd|xn--ngbe9e0a|xn--ogbpf8fl|xn--qcka1pmc|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|foodnetwork|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|williamhill|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--3bst00m|xn--3ds443g|xn--3hcrj9c|xn--42c2d9a|xn--45brj9c|xn--55qw42g|xn--6frz82g|xn--80ao21a|xn--9krt00a|xn--cck2b3b|xn--czr694b|xn--d1acj3b|xn--efvy88h|xn--fct429k|xn--fjq720a|xn--flw351e|xn--g2xx48c|xn--gecrj9c|xn--gk3at1e|xn--h2brj9c|xn--hxt814e|xn--imr513n|xn--j6w193g|xn--jvr189m|xn--kprw13d|xn--kpry57d|xn--mgbbh1a|xn--mgbtx2b|xn--mix891f|xn--nyqy26a|xn--otu796d|xn--pgbs0dh|xn--q9jyb4c|xn--rhqv96g|xn--rovu88b|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--vuq861b|xn--w4rs40l|xn--xhq521b|xn--zfr164b|\u0B9A\u0BBF\u0B99\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0BC2\u0BB0\u0BCD|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nextdirect|properties|protection|prudential|realestate|republican|restaurant|schaeffler|tatamotors|technology|university|vlaanderen|volkswagen|xn--30rr7y|xn--3pxu8k|xn--45q11c|xn--4gbrim|xn--55qx5d|xn--5tzm5g|xn--80aswg|xn--90a3ac|xn--9dbq2a|xn--9et52u|xn--c2br7g|xn--cg4bki|xn--czrs0t|xn--czru2d|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--io0a7i|xn--kput3i|xn--mxtq1m|xn--o3cw4h|xn--pssy2u|xn--q7ce6a|xn--unup4y|xn--wgbh1c|xn--wgbl6a|xn--y9a3aq|accenture|alfaromeo|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|frontdoor|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|institute|insurance|kuokgroup|lancaster|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|passagens|pramerica|richardli|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|xn--90ais|xn--c1avg|xn--d1alf|xn--e1a4c|xn--fhbei|xn--j1aef|xn--j1amh|xn--l1acc|xn--ngbrx|xn--nqv7f|xn--p1acf|xn--qxa6a|xn--tckwe|xn--vhquv|yodobashi|\u0645\u0648\u0631\u064A\u062A\u0627\u0646\u064A\u0627|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|builders|business|capetown|catering|catholic|cipriani|cityeats|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|etisalat|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|guardian|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|maserati|mckinsey|memorial|merckmsd|mortgage|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|showtime|softbank|software|stcgroup|supplies|training|vanguard|ventures|verisign|woodside|xn--90ae|xn--node|xn--p1ai|xn--qxam|yokohama|\u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|avianca|banamex|bauhaus|bentley|bestbuy|booking|brother|bugatti|capital|caravan|careers|channel|charity|chintai|citadel|clubmed|college|cologne|comcast|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hoteles|hotmail|hyundai|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lanxess|lasalle|latrobe|leclerc|limited|lincoln|markets|monster|netbank|netflix|network|neustar|okinawa|oldnavy|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|singles|staples|storage|support|surgery|systems|temasek|theater|theatre|tickets|tiffany|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|xfinity|yamaxun|youtube|zuerich|\u043A\u0430\u0442\u043E\u043B\u0438\u043A|\u0627\u062A\u0635\u0627\u0644\u0627\u062A|\u0627\u0644\u0628\u062D\u0631\u064A\u0646|\u0627\u0644\u062C\u0632\u0627\u0626\u0631|\u0627\u0644\u0639\u0644\u064A\u0627\u0646|\u067E\u0627\u06A9\u0633\u062A\u0627\u0646|\u0643\u0627\u062B\u0648\u0644\u064A\u0643|\u0B87\u0BA8\u0BCD\u0BA4\u0BBF\u0BAF\u0BBE|abarth|abbott|abbvie|africa|agency|airbus|airtel|alipay|alsace|alstom|amazon|anquan|aramco|author|bayern|beauty|berlin|bharti|bostik|boston|broker|camera|career|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kinder|kindle|kosher|lancia|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|monash|mormon|moscow|museum|mutual|nagoya|natura|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|pictet|quebec|racing|realty|reisen|repair|report|review|rocher|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|vuelos|walter|webcam|xihuan|yachts|yandex|zappos|\u043C\u043E\u0441\u043A\u0432\u0430|\u043E\u043D\u043B\u0430\u0439\u043D|\u0627\u0628\u0648\u0638\u0628\u064A|\u0627\u0631\u0627\u0645\u0643\u0648|\u0627\u0644\u0627\u0631\u062F\u0646|\u0627\u0644\u0645\u063A\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062A|\u0641\u0644\u0633\u0637\u064A\u0646|\u0645\u0644\u064A\u0633\u064A\u0627|\u092D\u093E\u0930\u0924\u092E\u094D|\u0B87\u0BB2\u0B99\u0BCD\u0B95\u0BC8|\u30D5\u30A1\u30C3\u30B7\u30E7\u30F3|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dabur|dance|deals|delta|drive|dubai|earth|edeka|email|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|irish|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|linde|lipsy|loans|locus|lotte|lotto|macys|mango|media|miami|money|movie|music|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|\u05D9\u05E9\u05E8\u05D0\u05DC|\u0627\u06CC\u0631\u0627\u0646|\u0628\u0627\u0632\u0627\u0631|\u0628\u06BE\u0627\u0631\u062A|\u0633\u0648\u062F\u0627\u0646|\u0633\u0648\u0631\u064A\u0629|\u0647\u0645\u0631\u0627\u0647|\u092D\u093E\u0930\u094B\u0924|\u0938\u0902\u0917\u0920\u0928|\u09AC\u09BE\u0982\u09B2\u09BE|\u0C2D\u0C3E\u0C30\u0C24\u0C4D|\u0D2D\u0D3E\u0D30\u0D24\u0D02|\u5609\u91CC\u5927\u9152\u5E97|aarp|able|adac|aero|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|dvag|erni|fage|fail|fans|farm|fast|fiat|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|hgtv|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kids|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|loft|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|read|reit|rent|rest|rich|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scot|seat|seek|sexy|shaw|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|\u0434\u0435\u0442\u0438|\u0441\u0430\u0439\u0442|\u0628\u0627\u0631\u062A|\u0628\u064A\u062A\u0643|\u0680\u0627\u0631\u062A|\u062A\u0648\u0646\u0633|\u0634\u0628\u0643\u0629|\u0639\u0631\u0627\u0642|\u0639\u0645\u0627\u0646|\u0645\u0648\u0642\u0639|\u092D\u093E\u0930\u0924|\u09AD\u09BE\u09B0\u09A4|\u09AD\u09BE\u09F0\u09A4|\u0A2D\u0A3E\u0A30\u0A24|\u0AAD\u0ABE\u0AB0\u0AA4|\u0B2D\u0B3E\u0B30\u0B24|\u0CAD\u0CBE\u0CB0\u0CA4|\u0DBD\u0D82\u0D9A\u0DCF|\u30A2\u30DE\u30BE\u30F3|\u30B0\u30FC\u30B0\u30EB|\u30AF\u30E9\u30A6\u30C9|\u30DD\u30A4\u30F3\u30C8|\u7EC4\u7EC7\u673A\u6784|\u96FB\u8A0A\u76C8\u79D1|\u9999\u683C\u91CC\u62C9|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|cbs|ceo|cfa|cfd|com|cpa|crs|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gay|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|llp|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|sca|scb|ses|sew|sex|sfr|ski|sky|soy|spa|srl|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|\u0431\u0435\u043B|\u043A\u043E\u043C|\u049B\u0430\u0437|\u043C\u043A\u0434|\u043C\u043E\u043D|\u043E\u0440\u0433|\u0440\u0443\u0441|\u0441\u0440\u0431|\u0443\u043A\u0440|\u0570\u0561\u0575|\u05E7\u05D5\u05DD|\u0639\u0631\u0628|\u0642\u0637\u0631|\u0643\u0648\u0645|\u0645\u0635\u0631|\u0915\u0949\u092E|\u0928\u0947\u091F|\u0E04\u0E2D\u0E21|\u0E44\u0E17\u0E22|\u0EA5\u0EB2\u0EA7|\u30B9\u30C8\u30A2|\u30BB\u30FC\u30EB|\u307F\u3093\u306A|\u4E2D\u6587\u7F51|\u4E9A\u9A6C\u900A|\u5929\u4E3B\u6559|\u6211\u7231\u4F60|\u65B0\u52A0\u5761|\u6DE1\u9A6C\u9521|\u8BFA\u57FA\u4E9A|\u98DE\u5229\u6D66|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|\u03B5\u03BB|\u03B5\u03C5|\u0431\u0433|\u0435\u044E|\u0440\u0444|\u10D2\u10D4|\uB2F7\uB137|\uB2F7\uCEF4|\uC0BC\uC131|\uD55C\uAD6D|\u30B3\u30E0|\u4E16\u754C|\u4E2D\u4FE1|\u4E2D\u56FD|\u4E2D\u570B|\u4F01\u4E1A|\u4F5B\u5C71|\u4FE1\u606F|\u5065\u5EB7|\u516B\u5366|\u516C\u53F8|\u516C\u76CA|\u53F0\u6E7E|\u53F0\u7063|\u5546\u57CE|\u5546\u5E97|\u5546\u6807|\u5609\u91CC|\u5728\u7EBF|\u5927\u62FF|\u5A31\u4E50|\u5BB6\u96FB|\u5E7F\u4E1C|\u5FAE\u535A|\u6148\u5584|\u624B\u673A|\u62DB\u8058|\u653F\u52A1|\u653F\u5E9C|\u65B0\u95FB|\u65F6\u5C1A|\u66F8\u7C4D|\u673A\u6784|\u6E38\u620F|\u6FB3\u9580|\u70B9\u770B|\u79FB\u52A8|\u7F51\u5740|\u7F51\u5E97|\u7F51\u7AD9|\u7F51\u7EDC|\u8054\u901A|\u8C37\u6B4C|\u8D2D\u7269|\u901A\u8CA9|\u96C6\u56E2|\u98DF\u54C1|\u9910\u5385|\u9999\u6E2F)",Gue=new RegExp("^"+ije+"$");var oje=/[\/?#]/,rje=/[-+&@#/%=~_()|'$*\[\]{}\u2713]/,Eue=/[?!:,.;^]/,NH=/https?:\/\//i,Xue=new RegExp("^"+NH.source,"i"),Iue=new RegExp(Eue.source+"$"),sje=/^(javascript|vbscript):/i,aje=/^[A-Za-z][-.+A-Za-z0-9]*:(\/\/)?([^:/]*)/,cje=/^(?:\/\/)?([^/#?:]+)/;function y5(e){return Gy.test(e)}function UH(e){return Gy.test(e)||Ws.test(e)||e==="+"||e==="-"||e==="."}function V0(e){return qm.test(e)}function g5(e){return e==="_"||V0(e)}function kH(e){return qm.test(e)||rje.test(e)||Eue.test(e)}function x5(e){return oje.test(e)}function DH(e){return Gue.test(e.toLowerCase())}function Wue(e){if(sje.test(e))return!1;var t=e.match(aje);if(!t)return!1;var n=!!t[1],i=t[2];return n?!0:!(i.indexOf(".")===-1||!Gy.test(i))}function Pue(e){var t=e.match(cje);if(!t)return!1;var n=t[0],i=n.split(".");if(i.length<2)return!1;var o=i[i.length-1];return!!DH(o)}var lje=/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,dje=/[:/?#]/;function vue(e){var t=e.split(dje,1)[0];return lje.test(t)}var uje=/^(https?:\/\/)?(www\.)?/i,mje=/^\/\//,wue=function(e){ff(t,e);function t(n){var i=e.call(this,n)||this;return i.type="url",i.url="",i.urlMatchType="scheme",i.protocolRelativeMatch=!1,i.stripPrefix={scheme:!0,www:!0},i.stripTrailingSlash=!0,i.decodePercentEncoding=!0,i.protocolPrepended=!1,i.urlMatchType=n.urlMatchType,i.url=n.url,i.protocolRelativeMatch=n.protocolRelativeMatch,i.stripPrefix=n.stripPrefix,i.stripTrailingSlash=n.stripTrailingSlash,i.decodePercentEncoding=n.decodePercentEncoding,i}return t.prototype.getType=function(){return"url"},t.prototype.getUrlMatchType=function(){return this.urlMatchType},t.prototype.getUrl=function(){var n=this.url;return!this.protocolRelativeMatch&&this.urlMatchType!=="scheme"&&!this.protocolPrepended&&(n=this.url="http://"+n,this.protocolPrepended=!0),n},t.prototype.getAnchorHref=function(){var n=this.getUrl();return n.replace(/&amp;/g,"&")},t.prototype.getAnchorText=function(){var n=this.getMatchedText();return this.protocolRelativeMatch&&(n=pje(n)),this.stripPrefix.scheme&&(n=hje(n)),this.stripPrefix.www&&(n=fje(n)),this.stripTrailingSlash&&(n=bje(n)),this.decodePercentEncoding&&(n=yje(n)),n},t}(pf);function hje(e){return e.replace(Xue,"")}function fje(e){return e.replace(uje,"$1")}function pje(e){return e.replace(mje,"")}function bje(e){return e.charAt(e.length-1)==="/"&&(e=e.slice(0,-1)),e}function yje(e){var t=e.replace(/%22/gi,"&quot;").replace(/%26/gi,"&amp;").replace(/%27/gi,"&#39;").replace(/%3C/gi,"&lt;").replace(/%3E/gi,"&gt;");try{return decodeURIComponent(t)}catch{return t}}var Ati=T(S());var Fue=/^mailto:/i,gje=new RegExp("[".concat(AH,"!#$%&'*+/=?^_`{|}~-]"));function Aue(e){return qm.test(e)}function _5(e){return gje.test(e)}function Mue(e){var t=e.split(".").pop()||"";return DH(t)}var kti=T(S());var Nue=function(e){ff(t,e);function t(n){var i=e.call(this,n)||this;return i.type="email",i.email="",i.email=n.email,i}return t.prototype.getType=function(){return"email"},t.prototype.getEmail=function(){return this.email},t.prototype.getAnchorHref=function(){return"mailto:"+this.email},t.prototype.getAnchorText=function(){return this.email},t}(pf);var Yti=T(S());function BH(e){return e==="_"||qm.test(e)}function Uue(e){return e.length<=140}var kue=["twitter","facebook","instagram","tiktok"];var Jti=T(S());var Due=function(e){ff(t,e);function t(n){var i=e.call(this,n)||this;return i.type="hashtag",i.serviceName="twitter",i.hashtag="",i.serviceName=n.serviceName,i.hashtag=n.hashtag,i}return t.prototype.getType=function(){return"hashtag"},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getHashtag=function(){return this.hashtag},t.prototype.getAnchorHref=function(){var n=this.serviceName,i=this.hashtag;switch(n){case"twitter":return"https://twitter.com/hashtag/"+i;case"facebook":return"https://www.facebook.com/hashtag/"+i;case"instagram":return"https://instagram.com/explore/tags/"+i;case"tiktok":return"https://www.tiktok.com/tag/"+i;default:throw Zy(n),new Error("Invalid hashtag service: ".concat(n))}},t.prototype.getAnchorText=function(){return"#"+this.hashtag},t.prototype.getCssClassSuffixes=function(){var n=e.prototype.getCssClassSuffixes.call(this),i=this.getServiceName();return i&&n.push(i),n},t}(pf);var jti=T(S()),xje={twitter:/^@\w{1,15}$/,instagram:/^@[_\w]{1,30}$/,soundcloud:/^@[-a-z0-9_]{3,25}$/,tiktok:/^@[.\w]{1,23}[\w]$/},_je=/[-\w.]/;function YH(e){return _je.test(e)}function Bue(e,t){var n=xje[t];return n.test(e)}var Yue=["twitter","instagram","soundcloud","tiktok"];var tni=T(S());var Oue=function(e){ff(t,e);function t(n){var i=e.call(this,n)||this;return i.type="mention",i.serviceName="twitter",i.mention="",i.mention=n.mention,i.serviceName=n.serviceName,i}return t.prototype.getType=function(){return"mention"},t.prototype.getMention=function(){return this.mention},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getAnchorHref=function(){switch(this.serviceName){case"twitter":return"https://twitter.com/"+this.mention;case"instagram":return"https://instagram.com/"+this.mention;case"soundcloud":return"https://soundcloud.com/"+this.mention;case"tiktok":return"https://www.tiktok.com/@"+this.mention;default:throw new Error("Unknown service name to point mention to: "+this.serviceName)}},t.prototype.getAnchorText=function(){return"@"+this.mention},t.prototype.getCssClassSuffixes=function(){var n=e.prototype.getCssClassSuffixes.call(this),i=this.getServiceName();return i&&n.push(i),n},t}(pf);var ini=T(S()),Tje=/[-. ]/,Sje=/[-. ()]/,Cje=/[,;]/,Vje=/(?:(?:(?:(\+)?\d{1,3}[-. ]?)?\(?\d{3}\)?[-. ]?\d{3}[-. ]?\d{4})|(?:(\+)(?:9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-. ]?(?:\d[-. ]?){6,12}\d+))([,;]+[0-9]+#?)*/,Lje=/(0([1-9]-?[1-9]\d{3}|[1-9]{2}-?\d{3}|[1-9]{2}\d{1}-?\d{2}|[1-9]{2}\d{2}-?\d{1})-?\d{4}|0[789]0-?\d{4}-?\d{4}|050-?\d{4}-?\d{4})/,Rje=new RegExp("^".concat(Vje.source,"|").concat(Lje.source,"$"));function OH(e){return Tje.test(e)}function T5(e){return Cje.test(e)}function Kue(e){var t=e.charAt(0)==="+"||Sje.test(e);return t&&Rje.test(e)}var ani=T(S());var Hue=function(e){ff(t,e);function t(n){var i=e.call(this,n)||this;return i.type="phone",i.number="",i.plusSign=!1,i.number=n.number,i.plusSign=n.plusSign,i}return t.prototype.getType=function(){return"phone"},t.prototype.getPhoneNumber=function(){return this.number},t.prototype.getNumber=function(){return this.getPhoneNumber()},t.prototype.getAnchorHref=function(){return"tel:"+(this.plusSign?"+":"")+this.number},t.prototype.getAnchorText=function(){return this.matchedText},t}(pf);function Que(e,t){for(var n=t.tagBuilder,i=t.stripPrefix,o=t.stripTrailingSlash,r=t.decodePercentEncoding,s=t.hashtagServiceName,a=t.mentionServiceName,c=[],l=e.length,u=[],m=0;m<l;m++){var p=e.charAt(m);if(u.length===0)_(p);else for(var y=u.length-1;y>=0;y--){var f=u[y];switch(f.state){case 11:X(f,p);break;case 12:P(f,p);break;case 0:C(f,p);break;case 1:V(f,p);break;case 2:L(f,p);break;case 3:Z(f,p);break;case 4:G(f,p);break;case 5:v(f,p);break;case 6:F(f,p);break;case 7:M(f,p);break;case 13:b(f,p);break;case 14:R(f,p);break;case 8:E(f,p);break;case 9:I(f,p);break;case 10:w(f,p);break;case 15:N(f,p);break;case 16:B(f,p);break;case 17:k(f,p);break;case 18:O(f,p);break;case 19:U(f,p);break;case 20:J(f,p);break;case 21:z(f,p);break;case 22:ee(f,p);break;case 23:K(f,p);break;case 24:j(f,p);break;case 25:q(f,p);break;case 26:be(f,p);break;case 27:Te(f,p);break;case 28:ae(f,p);break;case 29:xe(f,p);break;case 30:_e(f,p);break;case 31:Ve(f,p);break;case 32:Me(f,p);break;case 33:ve(f,p);break;case 34:ke(f,p);break;case 35:ct(f,p);break;case 36:yt(f,p);break;case 37:Ie(f,p);break;case 38:ot(f,p);break;case 39:ln(f,p);break;case 40:vn(f,p);break;case 41:Dt(f,p);break;default:Zy(f.state)}}}for(var x=u.length-1;x>=0;x--)u.forEach(function(pe){return Nt(pe)});return c;function _(pe){if(pe==="#")u.push(Ije(m,28));else if(pe==="@")u.push(Wje(m,30));else if(pe==="/")u.push(HH(m,11));else if(pe==="+")u.push(zH(m,37));else if(pe==="(")u.push(zH(m,32));else{if(Ws.test(pe)&&(u.push(zH(m,38)),u.push(Eje(m,13))),Aue(pe)){var Ce=pe.toLowerCase()==="m"?15:22;u.push(Xje(m,Ce))}y5(pe)&&u.push(KH(m,0)),qm.test(pe)&&u.push(HH(m,5))}}function C(pe,Ce){Ce===":"?pe.state=2:Ce==="-"?pe.state=1:UH(Ce)||Ao(u,pe)}function V(pe,Ce){Ce==="-"||(Ce==="/"?(Ao(u,pe),u.push(HH(m,11))):UH(Ce)?pe.state=0:Ao(u,pe))}function L(pe,Ce){Ce==="/"?pe.state=3:Ce==="."?Ao(u,pe):V0(Ce)?(pe.state=5,y5(Ce)&&u.push(KH(m,0))):Ao(u,pe)}function Z(pe,Ce){Ce==="/"?pe.state=4:kH(Ce)?(pe.state=10,pe.acceptStateReached=!0):Nt(pe)}function G(pe,Ce){Ce==="/"?pe.state=10:V0(Ce)?(pe.state=5,pe.acceptStateReached=!0):Ao(u,pe)}function X(pe,Ce){Ce==="/"?pe.state=12:Ao(u,pe)}function P(pe,Ce){V0(Ce)?pe.state=5:Ao(u,pe)}function v(pe,Ce){Ce==="."?pe.state=7:Ce==="-"?pe.state=6:Ce===":"?pe.state=8:x5(Ce)?pe.state=10:g5(Ce)||Nt(pe)}function F(pe,Ce){Ce==="-"||(Ce==="."?Nt(pe):V0(Ce)?pe.state=5:Nt(pe))}function M(pe,Ce){Ce==="."?Nt(pe):V0(Ce)?(pe.state=5,pe.acceptStateReached=!0):Nt(pe)}function b(pe,Ce){Ce==="."?pe.state=14:Ce===":"?pe.state=8:Ws.test(Ce)||(x5(Ce)?pe.state=10:qm.test(Ce)?Ao(u,pe):Nt(pe))}function R(pe,Ce){Ws.test(Ce)?(pe.octetsEncountered++,pe.octetsEncountered===4&&(pe.acceptStateReached=!0),pe.state=13):Nt(pe)}function E(pe,Ce){Ws.test(Ce)?pe.state=9:Nt(pe)}function I(pe,Ce){Ws.test(Ce)||(x5(Ce)?pe.state=10:Nt(pe))}function w(pe,Ce){kH(Ce)||Nt(pe)}function N(pe,Ce){Ce.toLowerCase()==="a"?pe.state=16:ee(pe,Ce)}function B(pe,Ce){Ce.toLowerCase()==="i"?pe.state=17:ee(pe,Ce)}function k(pe,Ce){Ce.toLowerCase()==="l"?pe.state=18:ee(pe,Ce)}function O(pe,Ce){Ce.toLowerCase()==="t"?pe.state=19:ee(pe,Ce)}function U(pe,Ce){Ce.toLowerCase()==="o"?pe.state=20:ee(pe,Ce)}function J(pe,Ce){Ce.toLowerCase()===":"?pe.state=21:ee(pe,Ce)}function z(pe,Ce){_5(Ce)?pe.state=22:Ao(u,pe)}function ee(pe,Ce){Ce==="."?pe.state=23:Ce==="@"?pe.state=24:_5(Ce)?pe.state=22:Ao(u,pe)}function K(pe,Ce){Ce==="."?Ao(u,pe):Ce==="@"?Ao(u,pe):_5(Ce)?pe.state=22:Ao(u,pe)}function j(pe,Ce){V0(Ce)?pe.state=25:Ao(u,pe)}function q(pe,Ce){Ce==="."?pe.state=27:Ce==="-"?pe.state=26:g5(Ce)||Nt(pe)}function be(pe,Ce){Ce==="-"||Ce==="."?Nt(pe):g5(Ce)?pe.state=25:Nt(pe)}function Te(pe,Ce){Ce==="."||Ce==="-"?Nt(pe):V0(Ce)?(pe.state=25,pe.acceptStateReached=!0):Nt(pe)}function ae(pe,Ce){BH(Ce)?(pe.state=29,pe.acceptStateReached=!0):Ao(u,pe)}function xe(pe,Ce){BH(Ce)||Nt(pe)}function _e(pe,Ce){YH(Ce)?(pe.state=31,pe.acceptStateReached=!0):Ao(u,pe)}function Ve(pe,Ce){YH(Ce)||(qm.test(Ce)?Ao(u,pe):Nt(pe))}function Ie(pe,Ce){Ws.test(Ce)?pe.state=38:(Ao(u,pe),_(Ce))}function Me(pe,Ce){Ws.test(Ce)?pe.state=33:Ao(u,pe),_(Ce)}function ve(pe,Ce){Ws.test(Ce)?pe.state=34:Ao(u,pe)}function ke(pe,Ce){Ws.test(Ce)?pe.state=35:Ao(u,pe)}function ct(pe,Ce){Ce===")"?pe.state=36:Ao(u,pe)}function yt(pe,Ce){Ws.test(Ce)?pe.state=38:OH(Ce)?pe.state=39:Ao(u,pe)}function ot(pe,Ce){pe.acceptStateReached=!0,T5(Ce)?pe.state=40:Ce==="#"?pe.state=41:Ws.test(Ce)||(Ce==="("?pe.state=32:OH(Ce)?pe.state=39:(Nt(pe),y5(Ce)&&u.push(KH(m,0))))}function ln(pe,Ce){Ws.test(Ce)?pe.state=38:Ce==="("?pe.state=32:(Nt(pe),_(Ce))}function vn(pe,Ce){T5(Ce)||(Ce==="#"?pe.state=41:Ws.test(Ce)?pe.state=38:Nt(pe))}function Dt(pe,Ce){T5(Ce)?pe.state=40:Ws.test(Ce)?Ao(u,pe):Nt(pe)}function Nt(pe){if(Ao(u,pe),!!pe.acceptStateReached){var Ce=pe.startIdx,Ht=e.slice(pe.startIdx,m);if(Ht=Gje(Ht),pe.type==="url"){var ut=e.charAt(pe.startIdx-1);if(ut==="@")return;var hi=pe.matchType;if(hi==="scheme"){var ji=NH.exec(Ht);if(ji&&(Ce=Ce+ji.index,Ht=Ht.slice(ji.index)),!Wue(Ht))return}else if(hi==="tld"){if(!Pue(Ht))return}else if(hi==="ipV4"){if(!vue(Ht))return}else Zy(hi);c.push(new wue({tagBuilder:n,matchedText:Ht,offset:Ce,urlMatchType:hi,url:Ht,protocolRelativeMatch:Ht.slice(0,2)==="//",stripPrefix:i,stripTrailingSlash:o,decodePercentEncoding:r}))}else if(pe.type==="email")Mue(Ht)&&c.push(new Nue({tagBuilder:n,matchedText:Ht,offset:Ce,email:Ht.replace(Fue,"")}));else if(pe.type==="hashtag")Uue(Ht)&&c.push(new Due({tagBuilder:n,matchedText:Ht,offset:Ce,serviceName:s,hashtag:Ht.slice(1)}));else if(pe.type==="mention")Bue(Ht,a)&&c.push(new Oue({tagBuilder:n,matchedText:Ht,offset:Ce,serviceName:a,mention:Ht.slice(1)}));else if(pe.type==="phone"){if(Ht=Ht.replace(/ +$/g,""),Kue(Ht)){var pc=Ht.replace(/[^0-9,;#]/g,"");c.push(new Hue({tagBuilder:n,matchedText:Ht,offset:Ce,number:pc,plusSign:Ht.charAt(0)==="+"}))}}else Zy(pe)}}}var Zje=/[\(\{\[]/,zue=/[\)\}\]]/,Jue={")":"(","}":"{","]":"["};function Gje(e){for(var t={"(":0,"{":0,"[":0},n=0;n<e.length;n++){var i=e.charAt(n);Zje.test(i)?t[i]++:zue.test(i)&&t[Jue[i]]--}for(var o=e.length-1,r;o>=0;)if(r=e.charAt(o),zue.test(r)){var s=Jue[r];if(t[s]<0)t[s]++,o--;else break}else if(Iue.test(r))o--;else break;return e.slice(0,o+1)}function KH(e,t){return{type:"url",startIdx:e,state:t,acceptStateReached:!1,matchType:"scheme"}}function HH(e,t){return{type:"url",startIdx:e,state:t,acceptStateReached:!1,matchType:"tld"}}function Eje(e,t){return{type:"url",startIdx:e,state:t,acceptStateReached:!1,matchType:"ipV4",octetsEncountered:1}}function Xje(e,t){return{type:"email",startIdx:e,state:t,acceptStateReached:!1}}function Ije(e,t){return{type:"hashtag",startIdx:e,state:t,acceptStateReached:!1}}function Wje(e,t){return{type:"mention",startIdx:e,state:t,acceptStateReached:!1}}function zH(e,t){return{type:"phone",startIdx:e,state:t,acceptStateReached:!1}}var Rni=T(S());function jue(e,t){for(var n=t.onOpenTag,i=t.onCloseTag,o=t.onText,r=t.onComment,s=t.onDoctype,a=new bf,c=0,l=e.length,u=0,m=0,p=a;c<l;){var y=e.charAt(c);switch(u){case 0:f(y);break;case 1:x(y);break;case 2:C(y);break;case 3:_(y);break;case 4:V(y);break;case 5:L(y);break;case 6:Z(y);break;case 7:G(y);break;case 8:X(y);break;case 9:P(y);break;case 10:v(y);break;case 11:F(y);break;case 12:M(y);break;case 13:b(y);break;case 14:R(y);break;case 15:E(y);break;case 16:I(y);break;case 17:w(y);break;case 18:N(y);break;case 19:B(y);break;case 20:k(y);break;default:Zy(u)}c++}m<c&&z();function f(j){j==="<"&&U()}function x(j){j==="!"?u=13:j==="/"?(u=2,p=new bf(Ps(Ps({},p),{isClosing:!0}))):j==="<"?U():Gy.test(j)?(u=3,p=new bf(Ps(Ps({},p),{isOpening:!0}))):(u=0,p=a)}function _(j){bd.test(j)?(p=new bf(Ps(Ps({},p),{name:ee()})),u=4):j==="<"?U():j==="/"?(p=new bf(Ps(Ps({},p),{name:ee()})),u=12):j===">"?(p=new bf(Ps(Ps({},p),{name:ee()})),J()):!Gy.test(j)&&!Ws.test(j)&&j!==":"&&O()}function C(j){j===">"?O():Gy.test(j)?u=3:O()}function V(j){bd.test(j)||(j==="/"?u=12:j===">"?J():j==="<"?U():j==="="||p5.test(j)||Tue.test(j)?O():u=5)}function L(j){bd.test(j)?u=6:j==="/"?u=12:j==="="?u=7:j===">"?J():j==="<"?U():p5.test(j)&&O()}function Z(j){bd.test(j)||(j==="/"?u=12:j==="="?u=7:j===">"?J():j==="<"?U():p5.test(j)?O():u=5)}function G(j){bd.test(j)||(j==='"'?u=8:j==="'"?u=9:/[>=`]/.test(j)?O():j==="<"?U():u=10)}function X(j){j==='"'&&(u=11)}function P(j){j==="'"&&(u=11)}function v(j){bd.test(j)?u=4:j===">"?J():j==="<"&&U()}function F(j){bd.test(j)?u=4:j==="/"?u=12:j===">"?J():j==="<"?U():(u=4,K())}function M(j){j===">"?(p=new bf(Ps(Ps({},p),{isClosing:!0})),J()):u=4}function b(j){e.substr(c,2)==="--"?(c+=2,p=new bf(Ps(Ps({},p),{type:"comment"})),u=14):e.substr(c,7).toUpperCase()==="DOCTYPE"?(c+=7,p=new bf(Ps(Ps({},p),{type:"doctype"})),u=20):O()}function R(j){j==="-"?u=15:j===">"?O():u=16}function E(j){j==="-"?u=18:j===">"?O():u=16}function I(j){j==="-"&&(u=17)}function w(j){j==="-"?u=18:u=16}function N(j){j===">"?J():j==="!"?u=19:j==="-"||(u=16)}function B(j){j==="-"?u=17:j===">"?J():u=16}function k(j){j===">"?J():j==="<"&&U()}function O(){u=0,p=a}function U(){u=1,p=new bf({idx:c})}function J(){var j=e.slice(m,p.idx);j&&o(j,m),p.type==="comment"?r(p.idx):p.type==="doctype"?s(p.idx):(p.isOpening&&n(p.name,p.idx),p.isClosing&&i(p.name,p.idx)),O(),m=c+1}function z(){var j=e.slice(m,c);o(j,m),m=c+1}function ee(){var j=p.idx+(p.isClosing?2:1);return e.slice(j,c).toLowerCase()}function K(){c--}}var bf=function(){function e(t){t===void 0&&(t={}),this.idx=t.idx!==void 0?t.idx:-1,this.type=t.type||"tag",this.name=t.name||"",this.isOpening=!!t.isOpening,this.isClosing=!!t.isClosing}return e}();var Pje=function(){function e(t){t===void 0&&(t={}),this.version=e.version,this.urls={},this.email=!0,this.phone=!0,this.hashtag=!1,this.mention=!1,this.newWindow=!0,this.stripPrefix={scheme:!0,www:!0},this.stripTrailingSlash=!0,this.decodePercentEncoding=!0,this.truncate={length:0,location:"end"},this.className="",this.replaceFn=null,this.context=void 0,this.sanitizeHtml=!1,this.tagBuilder=null,this.urls=vje(t.urls),this.email=pd(t.email)?t.email:this.email,this.phone=pd(t.phone)?t.phone:this.phone,this.hashtag=t.hashtag||this.hashtag,this.mention=t.mention||this.mention,this.newWindow=pd(t.newWindow)?t.newWindow:this.newWindow,this.stripPrefix=wje(t.stripPrefix),this.stripTrailingSlash=pd(t.stripTrailingSlash)?t.stripTrailingSlash:this.stripTrailingSlash,this.decodePercentEncoding=pd(t.decodePercentEncoding)?t.decodePercentEncoding:this.decodePercentEncoding,this.sanitizeHtml=t.sanitizeHtml||!1;var n=this.mention;if(n!==!1&&Yue.indexOf(n)===-1)throw new Error("invalid `mention` cfg '".concat(n,"' - see docs"));var i=this.hashtag;if(i!==!1&&kue.indexOf(i)===-1)throw new Error("invalid `hashtag` cfg '".concat(i,"' - see docs"));this.truncate=Fje(t.truncate),this.className=t.className||this.className,this.replaceFn=t.replaceFn||this.replaceFn,this.context=t.context||this}return e.link=function(t,n){var i=new e(n);return i.link(t)},e.parse=function(t,n){var i=new e(n);return i.parse(t)},e.prototype.parse=function(t){var n=this,i=["a","style","script"],o=0,r=[];return jue(t,{onOpenTag:function(s){i.indexOf(s)>=0&&o++},onText:function(s,a){if(o===0){var c=/(&nbsp;|&#160;|&lt;|&#60;|&gt;|&#62;|&quot;|&#34;|&#39;)/gi,l=s.split(c),u=a;l.forEach(function(m,p){if(p%2===0){var y=n.parseText(m,u);r.push.apply(r,y)}u+=m.length})}},onCloseTag:function(s){i.indexOf(s)>=0&&(o=Math.max(o-1,0))},onComment:function(s){},onDoctype:function(s){}}),r=this.compactMatches(r),r=this.removeUnwantedMatches(r),r},e.prototype.compactMatches=function(t){t.sort(function(c,l){return c.getOffset()-l.getOffset()});for(var n=0;n<t.length-1;){var i=t[n],o=i.getOffset(),r=i.getMatchedText().length,s=o+r;if(n+1<t.length){if(t[n+1].getOffset()===o){var a=t[n+1].getMatchedText().length>r?n:n+1;t.splice(a,1);continue}if(t[n+1].getOffset()<s){t.splice(n+1,1);continue}}n++}return t},e.prototype.removeUnwantedMatches=function(t){return this.hashtag||Ry(t,function(n){return n.getType()==="hashtag"}),this.email||Ry(t,function(n){return n.getType()==="email"}),this.phone||Ry(t,function(n){return n.getType()==="phone"}),this.mention||Ry(t,function(n){return n.getType()==="mention"}),this.urls.schemeMatches||Ry(t,function(n){return n.getType()==="url"&&n.getUrlMatchType()==="scheme"}),this.urls.tldMatches||Ry(t,function(n){return n.getType()==="url"&&n.getUrlMatchType()==="tld"}),this.urls.ipV4Matches||Ry(t,function(n){return n.getType()==="url"&&n.getUrlMatchType()==="ipV4"}),t},e.prototype.parseText=function(t,n){n===void 0&&(n=0),n=n||0;for(var i=Que(t,{tagBuilder:this.getTagBuilder(),stripPrefix:this.stripPrefix,stripTrailingSlash:this.stripTrailingSlash,decodePercentEncoding:this.decodePercentEncoding,hashtagServiceName:this.hashtag,mentionServiceName:this.mention||"twitter"}),o=0,r=i.length;o<r;o++)i[o].setOffset(n+i[o].getOffset());return i},e.prototype.link=function(t){if(!t)return"";this.sanitizeHtml&&(t=t.replace(/</g,"&lt;").replace(/>/g,"&gt;"));for(var n=this.parse(t),i=[],o=0,r=0,s=n.length;r<s;r++){var a=n[r];i.push(t.substring(o,a.getOffset())),i.push(this.createMatchReturnVal(a)),o=a.getOffset()+a.getMatchedText().length}return i.push(t.substring(o)),i.join("")},e.prototype.createMatchReturnVal=function(t){var n;if(this.replaceFn&&(n=this.replaceFn.call(this.context,t)),typeof n=="string")return n;if(n===!1)return t.getMatchedText();if(n instanceof b5)return n.toAnchorString();var i=t.buildTag();return i.toAnchorString()},e.prototype.getTagBuilder=function(){var t=this.tagBuilder;return t||(t=this.tagBuilder=new Zue({newWindow:this.newWindow,truncate:this.truncate,className:this.className})),t},e.version=gue,e}(),que=Pje;function vje(e){return e==null&&(e=!0),pd(e)?{schemeMatches:e,tldMatches:e,ipV4Matches:e}:{schemeMatches:pd(e.schemeMatches)?e.schemeMatches:!0,tldMatches:pd(e.tldMatches)?e.tldMatches:!0,ipV4Matches:pd(e.ipV4Matches)?e.ipV4Matches:!0}}function wje(e){return e==null&&(e=!0),pd(e)?{scheme:e,www:e}:{scheme:pd(e.scheme)?e.scheme:!0,www:pd(e.www)?e.www:!0}}function Fje(e){return typeof e=="number"?{length:e,location:"end"}:xue(e||{},{length:Number.POSITIVE_INFINITY,location:"end"})}var Nni=T(S());var Ani=T(S());var zni=T(S());var S5=que;var ame;typeof DOMParser<"u"&&(ame=new DOMParser);var Aje=new S5({stripPrefix:!1,email:!1,replaceFn:function(e,t){return t.urlMatchType==="scheme"||t.urlMatchType==="www"}}),C5=32,$ue=2414016,eme=1,tme=16093e3,nme=.1,Mje=[null,void 0,"http://www.topografix.com/GPX/1/1"],Co={gpx:Mje};function Nje(e){return new Promise((t,n)=>{let i=new FileReader;i.addEventListener("load",function(){t(i.result)}),i.addEventListener("error",function(){n(i.error)}),i.readAsText(e)})}function JH(e,t){let n=cP(e,"id");return n=d(n)?n:Yn(),t.getOrCreateEntity(n)}function QH(e){let t=ime(e,"lon"),n=ime(e,"lat"),i=sP(e,"ele",Co.gpx);return h.fromDegrees(t,n,i)}function ime(e,t){if(!d(e))return;let n=e.getAttribute(t);if(n!==null){let i=parseFloat(n);return isNaN(i)?void 0:i}}function cP(e,t){if(!d(e))return;let n=e.getAttribute(t);return n!==null?n:void 0}function Ey(e,t,n){if(!d(e))return;let i=e.childNodes,o=i.length;for(let r=0;r<o;r++){let s=i[r];if(s.localName===t&&n.indexOf(s.namespaceURI)!==-1)return s}}function jH(e,t,n){if(!d(e))return;let i=[],o=e.getElementsByTagName(t),r=o.length;for(let s=0;s<r;s++){let a=o[s];a.localName===t&&n.indexOf(a.namespaceURI)!==-1&&i.push(a)}return i}function sP(e,t,n){let i=Ey(e,t,n);if(d(i)){let o=parseFloat(i.textContent);return isNaN(o)?void 0:o}}function El(e,t,n){let i=Ey(e,t,n);if(d(i))return i.textContent.trim()}function cme(e){let t=new Ia;return t.width=C5,t.height=C5,t.scaleByDistance=new It($ue,eme,tme,nme),t.pixelOffsetScaleByDistance=new It($ue,eme,tme,nme),t.verticalOrigin=new qn(In.BOTTOM),t.image=e,t}function Uje(){let e=new lm;return e.translucencyByDistance=new It(3e6,1,5e6,0),e.pixelOffset=new D(17,0),e.horizontalOrigin=pi.LEFT,e.font="16px sans-serif",e.style=vo.FILL_AND_OUTLINE,e}function lme(e){let t=new Da;return t.width=4,t.material=new hy,t.material.color=d(e)?e:Y.RED,t.material.outlineWidth=2,t.material.outlineColor=Y.BLACK,t}var ome={time:{text:"Time",tag:"time"},comment:{text:"Comment",tag:"cmt"},description:{text:"Description",tag:"desc"},source:{text:"Source",tag:"src"},number:{text:"GPS track/route number",tag:"number"},type:{text:"Type",tag:"type"}},aP;typeof document<"u"&&(aP=document.createElement("div"));function qH(e,t){let n,i="",o=Object.keys(ome),r=o.length;for(n=0;n<r;n++){let u=o[n],m=ome[u];m.value=g(El(e,m.tag,Co.gpx),""),d(m.value)&&m.value!==""&&(i=`${i}<p>${m.text}: ${m.value}</p>`)}if(!d(i)||i==="")return;i=Aje.link(i),aP.innerHTML=i;let s=aP.querySelectorAll("a");for(n=0;n<s.length;n++)s[n].setAttribute("target","_blank");let a=Y.WHITE,c=Y.BLACK,l='<div class="cesium-infoBox-description-lighter" style="';return l+="overflow:auto;",l+="word-wrap:break-word;",l+=`background-color:${a.toCssColorString()};`,l+=`color:${c.toCssColorString()};`,l+='">',l+=`${aP.innerHTML}</div>`,aP.innerHTML="",l}function dme(e,t,n,i){let o=QH(t),r=JH(t,n);r.position=o;let s=d(i.waypointImage)?i.waypointImage:e._pinBuilder.fromMakiIconId("marker",Y.RED,C5);r.billboard=cme(s);let a=El(t,"name",Co.gpx);r.name=a,r.label=Uje(),r.label.text=a,r.description=qH(t,r),i.clampToGround&&(r.billboard.heightReference=Oe.CLAMP_TO_GROUND,r.label.heightReference=Oe.CLAMP_TO_GROUND)}function kje(e,t,n,i){let o=JH(t,n);o.description=qH(t,o);let r=jH(t,"rtept",Co.gpx),s=new Array(r.length);for(let a=0;a<r.length;a++)dme(e,r[a],n,i),s[a]=QH(r[a]);o.polyline=lme(i.routeColor),i.clampToGround&&(o.polyline.clampToGround=!0),o.polyline.positions=s}function Dje(e,t,n,i){let o=JH(t,n);o.description=qH(t,o);let r=jH(t,"trkseg",Co.gpx),s=[],a=[],c,l=!0,u=new js;for(let m=0;m<r.length;m++)c=Bje(r[m]),s=s.concat(c.positions),c.times.length>0?(a=a.concat(c.times),u.addSamples(a,s),l=l&&!0):l=!1;if(l){let m=d(i.waypointImage)?i.waypointImage:e._pinBuilder.fromMakiIconId("marker",Y.RED,C5);o.billboard=cme(m),o.position=u,i.clampToGround&&(o.billboard.heightReference=Oe.CLAMP_TO_GROUND),o.availability=new Lr,o.availability.addInterval(new Tn({start:a[0],stop:a[a.length-1]}))}o.polyline=lme(i.trackColor),o.polyline.positions=s,i.clampToGround&&(o.polyline.clampToGround=!0)}function Bje(e){let t={positions:[],times:[]},n=jH(e,"trkpt",Co.gpx),i;for(let o=0;o<n.length;o++){let r=QH(n[o]);t.positions.push(r),i=El(n[o],"time",Co.gpx),d(i)&&t.times.push(te.fromIso8601(i))}return t}function Yje(e){let t=Ey(e,"metadata",Co.gpx);if(d(t)){let n={name:El(t,"name",Co.gpx),desc:El(t,"desc",Co.gpx),author:Oje(t),copyright:Hje(t),link:ume(t),time:El(t,"time",Co.gpx),keywords:El(t,"keywords",Co.gpx),bounds:zje(t)};if(d(n.name)||d(n.desc)||d(n.author)||d(n.copyright)||d(n.link)||d(n.time)||d(n.keywords)||d(n.bounds))return n}}function Oje(e){let t=Ey(e,"author",Co.gpx);if(d(t)){let n={name:El(t,"name",Co.gpx),email:Kje(t),link:ume(t)};if(d(n.name)||d(n.email)||d(n.link))return n}}function Kje(e){let t=Ey(e,"email",Co.gpx);if(d(t)){let n=El(t,"id",Co.gpx),i=El(t,"domain",Co.gpx);return`${n}@${i}`}}function ume(e){let t=Ey(e,"link",Co.gpx);if(d(t)){let n={href:cP(t,"href"),text:El(t,"text",Co.gpx),mimeType:El(t,"type",Co.gpx)};if(d(n.href)||d(n.text)||d(n.mimeType))return n}}function Hje(e){let t=Ey(e,"copyright",Co.gpx);if(d(t)){let n={author:cP(t,"author"),year:El(t,"year",Co.gpx),license:El(t,"license",Co.gpx)};if(d(n.author)||d(n.year)||d(n.license))return n}}function zje(e){let t=Ey(e,"bounds",Co.gpx);if(d(t)){let n={minLat:sP(t,"minlat",Co.gpx),maxLat:sP(t,"maxlat",Co.gpx),minLon:sP(t,"minlon",Co.gpx),maxLon:sP(t,"maxlon",Co.gpx)};if(d(n.minLat)||d(n.maxLat)||d(n.minLon)||d(n.maxLon))return n}}var rme={wpt:dme,rte:kje,trk:Dje};function Jje(e,t,n,i){let o=Object.keys(rme),r=o.length;for(let s=0;s<r;s++){let a=o[s],c=rme[a],l=t.childNodes,u=l.length;for(let m=0;m<u;m++){let p=l[m];p.localName===a&&Co.gpx.indexOf(p.namespaceURI)!==-1&&c(e,p,n,i)}}}function sme(e,t,n){let i=e._entityCollection;i.removeAll();let o=t.documentElement,r=cP(o,"version"),s=cP(o,"creator"),a,c=Yje(o);d(c)&&(a=c.name),o.localName==="gpx"?Jje(e,o,i,n):console.log(`GPX - Unsupported node: ${o.localName}`);let l,u=i.computeAvailability(),m=u.start,p=u.stop,y=te.equals(m,Be.MINIMUM_VALUE),f=te.equals(p,Be.MAXIMUM_VALUE);if(!y||!f){let _;y&&(_=new Date,_.setHours(0,0,0,0),m=te.fromDate(_)),f&&(_=new Date,_.setHours(24,0,0,0),p=te.fromDate(_)),l=new Dm,l.startTime=m,l.stopTime=p,l.currentTime=te.clone(m),l.clockRange=Gr.LOOP_STOP,l.clockStep=mo.SYSTEM_CLOCK_MULTIPLIER,l.multiplier=Math.round(Math.min(Math.max(te.secondsDifference(p,m)/60,1),31556900))}let x=!1;return e._name!==a&&(e._name=a,x=!0),e._creator!==s&&(e._creator=s,x=!0),Qje(e._metadata,c)&&(e._metadata=c,x=!0),e._version!==r&&(e._version=r,x=!0),l!==e._clock&&(x=!0,e._clock=l),x&&e._changed.raiseEvent(e),Rr.setLoading(e,!1),e}function Qje(e,t){return!d(e)&&!d(t)?!1:d(e)&&d(t)?e.name!==t.name||e.dec!==t.desc||e.src!==t.src||e.author!==t.author||e.copyright!==t.copyright||e.link!==t.link||e.time!==t.time||e.bounds!==t.bounds:!0}function jje(e,t,n,i){i=g(i,g.EMPTY_OBJECT);let o=n;if(typeof n=="string"||n instanceof Ee){n=Ee.createIfNeeded(n),o=n.fetchBlob();let r=e._resourceCredits,s=n.credits;if(d(s)){let a=s.length;for(let c=0;c<a;c++)r.push(s[c])}}return Promise.resolve(o).then(function(r){return r instanceof Blob?Nje(r).then(function(s){let a,c;try{a=ame.parseFromString(s,"application/xml")}catch(l){c=l.toString()}if(d(c)||a.body||a.documentElement.tagName==="parsererror"){let l=d(c)?c:a.documentElement.firstChild.nodeValue;throw l||(l=a.body.innerText),new me(l)}return sme(e,a,i)}):sme(e,r,i)}).catch(function(r){return e._error.raiseEvent(e,r),console.log(r),Promise.reject(r)})}function C1(){this._changed=new ye,this._error=new ye,this._loading=new ye,this._clock=void 0,this._entityCollection=new Es(this),this._entityCluster=new rd,this._name=void 0,this._version=void 0,this._creator=void 0,this._metadata=void 0,this._isLoading=!1,this._pinBuilder=new C0}C1.load=function(e,t){return new C1().load(e,t)};Object.defineProperties(C1.prototype,{name:{get:function(){return this._name}},version:{get:function(){return this._version}},creator:{get:function(){return this._creator}},metadata:{get:function(){return this._metadata}},clock:{get:function(){return this._clock}},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading}},changedEvent:{get:function(){return this._changed}},errorEvent:{get:function(){return this._error}},loadingEvent:{get:function(){return this._loading}},show:{get:function(){return this._entityCollection.show},set:function(e){this._entityCollection.show=e}},clustering:{get:function(){return this._entityCluster},set:function(e){this._entityCluster=e}}});C1.prototype.update=function(e){return!0};C1.prototype.load=function(e,t){if(!d(e))throw new fe("data is required.");t=g(t,g.EMPTY_OBJECT),Rr.setLoading(this,!0);let n=this._name,i=this;return jje(this,this._entityCollection,e,t).then(function(){let o,r=i._entityCollection.computeAvailability(),s=r.start,a=r.stop,c=te.equals(s,Be.MINIMUM_VALUE),l=te.equals(a,Be.MAXIMUM_VALUE);if(!c||!l){let m;c&&(m=new Date,m.setHours(0,0,0,0),s=te.fromDate(m)),l&&(m=new Date,m.setHours(24,0,0,0),a=te.fromDate(m)),o=new Dm,o.startTime=s,o.stopTime=a,o.currentTime=te.clone(s),o.clockRange=Gr.LOOP_STOP,o.clockStep=mo.SYSTEM_CLOCK_MULTIPLIER,o.multiplier=Math.round(Math.min(Math.max(te.secondsDifference(a,s)/60,1),31556900))}let u=!1;return o!==i._clock&&(i._clock=o,u=!0),n!==i._name&&(u=!0),u&&i._changed.raiseEvent(i),Rr.setLoading(i,!1),i}).catch(function(o){return Rr.setLoading(i,!1),i._error.raiseEvent(i,o),console.log(o),Promise.reject(o)})};var lP=C1;var Uii=T(S(),1);function qje(e,t){this.position=e,this.headingPitchRoll=t}var dP=qje;var eai=T(S(),1);var VP=T(Bl(),1);var cri=T(S(),1);var Dii=T(S(),1);function X5(e){return I5(e.map(([t,n])=>new Array(t).fill(n,0,t)))}function I5(e){return e.reduce((t,n)=>t.concat(Array.isArray(n)?I5(n):n),[])}var mme=[0,1,2,3].concat(...X5([[2,4],[2,5],[4,6],[4,7],[8,8],[8,9],[16,10],[16,11],[32,12],[32,13],[64,14],[64,15],[2,0],[1,16],[1,17],[2,18],[2,19],[4,20],[4,21],[8,22],[8,23],[16,24],[16,25],[32,26],[32,27],[64,28],[64,29]]));function rr(){let e=this;function t(o){let r=e.dyn_tree,s=e.stat_desc.static_tree,a=e.stat_desc.extra_bits,c=e.stat_desc.extra_base,l=e.stat_desc.max_length,u,m,p,y,f,x,_=0;for(y=0;y<=15;y++)o.bl_count[y]=0;for(r[o.heap[o.heap_max]*2+1]=0,u=o.heap_max+1;u<573;u++)m=o.heap[u],y=r[r[m*2+1]*2+1]+1,y>l&&(y=l,_++),r[m*2+1]=y,!(m>e.max_code)&&(o.bl_count[y]++,f=0,m>=c&&(f=a[m-c]),x=r[m*2],o.opt_len+=x*(y+f),s&&(o.static_len+=x*(s[m*2+1]+f)));if(_!==0){do{for(y=l-1;o.bl_count[y]===0;)y--;o.bl_count[y]--,o.bl_count[y+1]+=2,o.bl_count[l]--,_-=2}while(_>0);for(y=l;y!==0;y--)for(m=o.bl_count[y];m!==0;)p=o.heap[--u],!(p>e.max_code)&&(r[p*2+1]!=y&&(o.opt_len+=(y-r[p*2+1])*r[p*2],r[p*2+1]=y),m--)}}function n(o,r){let s=0;do s|=o&1,o>>>=1,s<<=1;while(--r>0);return s>>>1}function i(o,r,s){let a=[],c=0,l,u,m;for(l=1;l<=15;l++)a[l]=c=c+s[l-1]<<1;for(u=0;u<=r;u++)m=o[u*2+1],m!==0&&(o[u*2]=n(a[m]++,m))}e.build_tree=function(o){let r=e.dyn_tree,s=e.stat_desc.static_tree,a=e.stat_desc.elems,c,l,u=-1,m;for(o.heap_len=0,o.heap_max=573,c=0;c<a;c++)r[c*2]!==0?(o.heap[++o.heap_len]=u=c,o.depth[c]=0):r[c*2+1]=0;for(;o.heap_len<2;)m=o.heap[++o.heap_len]=u<2?++u:0,r[m*2]=1,o.depth[m]=0,o.opt_len--,s&&(o.static_len-=s[m*2+1]);for(e.max_code=u,c=Math.floor(o.heap_len/2);c>=1;c--)o.pqdownheap(r,c);m=a;do c=o.heap[1],o.heap[1]=o.heap[o.heap_len--],o.pqdownheap(r,1),l=o.heap[1],o.heap[--o.heap_max]=c,o.heap[--o.heap_max]=l,r[m*2]=r[c*2]+r[l*2],o.depth[m]=Math.max(o.depth[c],o.depth[l])+1,r[c*2+1]=r[l*2+1]=m,o.heap[1]=m++,o.pqdownheap(r,1);while(o.heap_len>=2);o.heap[--o.heap_max]=o.heap[1],t(o),i(r,e.max_code,o.bl_count)}}rr._length_code=[0,1,2,3,4,5,6,7].concat(...X5([[2,8],[2,9],[2,10],[2,11],[4,12],[4,13],[4,14],[4,15],[8,16],[8,17],[8,18],[8,19],[16,20],[16,21],[16,22],[16,23],[32,24],[32,25],[32,26],[31,27],[1,28]]));rr.base_length=[0,1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128,160,192,224,0];rr.base_dist=[0,1,2,3,4,6,8,12,16,24,32,48,64,96,128,192,256,384,512,768,1024,1536,2048,3072,4096,6144,8192,12288,16384,24576];rr.d_code=function(e){return e<256?mme[e]:mme[256+(e>>>7)]};rr.extra_lbits=[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];rr.extra_dbits=[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];rr.extra_blbits=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];rr.bl_order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];function xa(e,t,n,i,o){let r=this;r.static_tree=e,r.extra_bits=t,r.extra_base=n,r.elems=i,r.max_length=o}var $je=[12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254,1,129,65,193,33,161,97,225,17,145,81,209,49,177,113,241,9,137,73,201,41,169,105,233,25,153,89,217,57,185,121,249,5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245,13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253,19,275,147,403,83,339,211,467,51,307,179,435,115,371,243,499,11,267,139,395,75,331,203,459,43,299,171,427,107,363,235,491,27,283,155,411,91,347,219,475,59,315,187,443,123,379,251,507,7,263,135,391,71,327,199,455,39,295,167,423,103,359,231,487,23,279,151,407,87,343,215,471,55,311,183,439,119,375,247,503,15,271,143,399,79,335,207,463,47,303,175,431,111,367,239,495,31,287,159,415,95,351,223,479,63,319,191,447,127,383,255,511,0,64,32,96,16,80,48,112,8,72,40,104,24,88,56,120,4,68,36,100,20,84,52,116,3,131,67,195,35,163,99,227],e8e=X5([[144,8],[112,9],[24,7],[8,8]]);xa.static_ltree=I5($je.map((e,t)=>[e,e8e[t]]));var t8e=[0,16,8,24,4,20,12,28,2,18,10,26,6,22,14,30,1,17,9,25,5,21,13,29,3,19,11,27,7,23],n8e=X5([[30,5]]);xa.static_dtree=I5(t8e.map((e,t)=>[e,n8e[t]]));xa.static_l_desc=new xa(xa.static_ltree,rr.extra_lbits,257,286,15);xa.static_d_desc=new xa(xa.static_dtree,rr.extra_dbits,0,30,15);xa.static_bl_desc=new xa(null,rr.extra_blbits,0,19,7);var i8e=9,o8e=8;function yf(e,t,n,i,o){let r=this;r.good_length=e,r.max_lazy=t,r.nice_length=n,r.max_chain=i,r.func=o}var fme=0,G5=1,v_=2,$m=[new yf(0,0,0,0,fme),new yf(4,4,8,4,G5),new yf(4,5,16,8,G5),new yf(4,6,32,32,G5),new yf(4,4,16,16,v_),new yf(8,16,32,32,v_),new yf(8,16,128,128,v_),new yf(8,32,128,256,v_),new yf(32,128,258,1024,v_),new yf(32,258,258,4096,v_)],V5=["need dictionary","stream end","","","stream error","data error","","buffer error","",""],Pu=0,L5=1,uP=2,R5=3,r8e=32,$H=42,Z5=113,mP=666,ez=8,s8e=0,tz=1,a8e=2,fr=3,E5=258,yd=E5+fr+1;function hme(e,t,n,i){let o=e[t*2],r=e[n*2];return o<r||o==r&&i[t]<=i[n]}function c8e(){let e=this,t,n,i,o,r,s,a,c,l,u,m,p,y,f,x,_,C,V,L,Z,G,X,P,v,F,M,b,R,E,I,w,N,B,k=new rr,O=new rr,U=new rr;e.depth=[];let J,z,ee,K,j,q;e.bl_count=[],e.heap=[],w=[],N=[],B=[];function be(){l=2*r,m[y-1]=0;for(let we=0;we<y-1;we++)m[we]=0;M=$m[b].max_lazy,E=$m[b].good_length,I=$m[b].nice_length,F=$m[b].max_chain,G=0,C=0,P=0,V=v=fr-1,Z=0,p=0}function Te(){let we;for(we=0;we<286;we++)w[we*2]=0;for(we=0;we<30;we++)N[we*2]=0;for(we=0;we<19;we++)B[we*2]=0;w[256*2]=1,e.opt_len=e.static_len=0,z=ee=0}function ae(){k.dyn_tree=w,k.stat_desc=xa.static_l_desc,O.dyn_tree=N,O.stat_desc=xa.static_d_desc,U.dyn_tree=B,U.stat_desc=xa.static_bl_desc,j=0,q=0,K=8,Te()}e.pqdownheap=function(we,je){let qe=e.heap,Qe=qe[je],pt=je<<1;for(;pt<=e.heap_len&&(pt<e.heap_len&&hme(we,qe[pt+1],qe[pt],e.depth)&&pt++,!hme(we,Qe,qe[pt],e.depth));)qe[je]=qe[pt],je=pt,pt<<=1;qe[je]=Qe};function xe(we,je){let qe=-1,Qe,pt=we[0*2+1],Bt=0,Vn=7,di=4;pt===0&&(Vn=138,di=3),we[(je+1)*2+1]=65535;for(let bo=0;bo<=je;bo++)Qe=pt,pt=we[(bo+1)*2+1],!(++Bt<Vn&&Qe==pt)&&(Bt<di?B[Qe*2]+=Bt:Qe!==0?(Qe!=qe&&B[Qe*2]++,B[16*2]++):Bt<=10?B[17*2]++:B[18*2]++,Bt=0,qe=Qe,pt===0?(Vn=138,di=3):Qe==pt?(Vn=6,di=3):(Vn=7,di=4))}function _e(){let we;for(xe(w,k.max_code),xe(N,O.max_code),U.build_tree(e),we=18;we>=3&&B[rr.bl_order[we]*2+1]===0;we--);return e.opt_len+=3*(we+1)+5+5+4,we}function Ve(we){e.pending_buf[e.pending++]=we}function Ie(we){Ve(we&255),Ve(we>>>8&255)}function Me(we){Ve(we>>8&255),Ve(we&255&255)}function ve(we,je){let qe,Qe=je;q>16-Qe?(qe=we,j|=qe<<q&65535,Ie(j),j=qe>>>16-q,q+=Qe-16):(j|=we<<q&65535,q+=Qe)}function ke(we,je){let qe=we*2;ve(je[qe]&65535,je[qe+1]&65535)}function ct(we,je){let qe,Qe=-1,pt,Bt=we[0*2+1],Vn=0,di=7,bo=4;for(Bt===0&&(di=138,bo=3),qe=0;qe<=je;qe++)if(pt=Bt,Bt=we[(qe+1)*2+1],!(++Vn<di&&pt==Bt)){if(Vn<bo)do ke(pt,B);while(--Vn!==0);else pt!==0?(pt!=Qe&&(ke(pt,B),Vn--),ke(16,B),ve(Vn-3,2)):Vn<=10?(ke(17,B),ve(Vn-3,3)):(ke(18,B),ve(Vn-11,7));Vn=0,Qe=pt,Bt===0?(di=138,bo=3):pt==Bt?(di=6,bo=3):(di=7,bo=4)}}function yt(we,je,qe){let Qe;for(ve(we-257,5),ve(je-1,5),ve(qe-4,4),Qe=0;Qe<qe;Qe++)ve(B[rr.bl_order[Qe]*2+1],3);ct(w,we-1),ct(N,je-1)}function ot(){q==16?(Ie(j),j=0,q=0):q>=8&&(Ve(j&255),j>>>=8,q-=8)}function ln(){ve(tz<<1,3),ke(256,xa.static_ltree),ot(),1+K+10-q<9&&(ve(tz<<1,3),ke(256,xa.static_ltree),ot()),K=7}function vn(we,je){let qe,Qe,pt;if(e.dist_buf[z]=we,e.lc_buf[z]=je&255,z++,we===0?w[je*2]++:(ee++,we--,w[(rr._length_code[je]+256+1)*2]++,N[rr.d_code(we)*2]++),!(z&8191)&&b>2){for(qe=z*8,Qe=G-C,pt=0;pt<30;pt++)qe+=N[pt*2]*(5+rr.extra_dbits[pt]);if(qe>>>=3,ee<Math.floor(z/2)&&qe<Math.floor(Qe/2))return!0}return z==J-1}function Dt(we,je){let qe,Qe,pt=0,Bt,Vn;if(z!==0)do qe=e.dist_buf[pt],Qe=e.lc_buf[pt],pt++,qe===0?ke(Qe,we):(Bt=rr._length_code[Qe],ke(Bt+256+1,we),Vn=rr.extra_lbits[Bt],Vn!==0&&(Qe-=rr.base_length[Bt],ve(Qe,Vn)),qe--,Bt=rr.d_code(qe),ke(Bt,je),Vn=rr.extra_dbits[Bt],Vn!==0&&(qe-=rr.base_dist[Bt],ve(qe,Vn)));while(pt<z);ke(256,we),K=we[256*2+1]}function Nt(){q>8?Ie(j):q>0&&Ve(j&255),j=0,q=0}function pe(we,je,qe){Nt(),K=8,qe&&(Ie(je),Ie(~je)),e.pending_buf.set(c.subarray(we,we+je),e.pending),e.pending+=je}function Ce(we,je,qe){ve((s8e<<1)+(qe?1:0),3),pe(we,je,!0)}function Ht(we,je,qe){let Qe,pt,Bt=0;b>0?(k.build_tree(e),O.build_tree(e),Bt=_e(),Qe=e.opt_len+3+7>>>3,pt=e.static_len+3+7>>>3,pt<=Qe&&(Qe=pt)):Qe=pt=je+5,je+4<=Qe&&we!=-1?Ce(we,je,qe):pt==Qe?(ve((tz<<1)+(qe?1:0),3),Dt(xa.static_ltree,xa.static_dtree)):(ve((a8e<<1)+(qe?1:0),3),yt(k.max_code+1,O.max_code+1,Bt+1),Dt(w,N)),Te(),qe&&Nt()}function ut(we){Ht(C>=0?C:-1,G-C,we),C=G,t.flush_pending()}function hi(){let we,je,qe,Qe;do{if(Qe=l-P-G,Qe===0&&G===0&&P===0)Qe=r;else if(Qe==-1)Qe--;else if(G>=r+r-yd){c.set(c.subarray(r,r+r),0),X-=r,G-=r,C-=r,we=y,qe=we;do je=m[--qe]&65535,m[qe]=je>=r?je-r:0;while(--we!==0);we=r,qe=we;do je=u[--qe]&65535,u[qe]=je>=r?je-r:0;while(--we!==0);Qe+=r}if(t.avail_in===0)return;we=t.read_buf(c,G+P,Qe),P+=we,P>=fr&&(p=c[G]&255,p=(p<<_^c[G+1]&255)&x)}while(P<yd&&t.avail_in!==0)}function ji(we){let je=65535,qe;for(je>i-5&&(je=i-5);;){if(P<=1){if(hi(),P===0&&we==0)return Pu;if(P===0)break}if(G+=P,P=0,qe=C+je,(G===0||G>=qe)&&(P=G-qe,G=qe,ut(!1),t.avail_out===0)||G-C>=r-yd&&(ut(!1),t.avail_out===0))return Pu}return ut(we==4),t.avail_out===0?we==4?uP:Pu:we==4?R5:L5}function pc(we){let je=F,qe=G,Qe,pt,Bt=v,Vn=G>r-yd?G-(r-yd):0,di=I,bo=a,es=G+E5,ts=c[qe+Bt-1],Mo=c[qe+Bt];v>=E&&(je>>=2),di>P&&(di=P);do if(Qe=we,!(c[Qe+Bt]!=Mo||c[Qe+Bt-1]!=ts||c[Qe]!=c[qe]||c[++Qe]!=c[qe+1])){qe+=2,Qe++;do;while(c[++qe]==c[++Qe]&&c[++qe]==c[++Qe]&&c[++qe]==c[++Qe]&&c[++qe]==c[++Qe]&&c[++qe]==c[++Qe]&&c[++qe]==c[++Qe]&&c[++qe]==c[++Qe]&&c[++qe]==c[++Qe]&&qe<es);if(pt=E5-(es-qe),qe=es-E5,pt>Bt){if(X=we,Bt=pt,pt>=di)break;ts=c[qe+Bt-1],Mo=c[qe+Bt]}}while((we=u[we&bo]&65535)>Vn&&--je!==0);return Bt<=P?Bt:P}function bs(we){let je=0,qe;for(;;){if(P<yd){if(hi(),P<yd&&we==0)return Pu;if(P===0)break}if(P>=fr&&(p=(p<<_^c[G+(fr-1)]&255)&x,je=m[p]&65535,u[G&a]=m[p],m[p]=G),je!==0&&(G-je&65535)<=r-yd&&R!=2&&(V=pc(je)),V>=fr)if(qe=vn(G-X,V-fr),P-=V,V<=M&&P>=fr){V--;do G++,p=(p<<_^c[G+(fr-1)]&255)&x,je=m[p]&65535,u[G&a]=m[p],m[p]=G;while(--V!==0);G++}else G+=V,V=0,p=c[G]&255,p=(p<<_^c[G+1]&255)&x;else qe=vn(0,c[G]&255),P--,G++;if(qe&&(ut(!1),t.avail_out===0))return Pu}return ut(we==4),t.avail_out===0?we==4?uP:Pu:we==4?R5:L5}function ys(we){let je=0,qe,Qe;for(;;){if(P<yd){if(hi(),P<yd&&we==0)return Pu;if(P===0)break}if(P>=fr&&(p=(p<<_^c[G+(fr-1)]&255)&x,je=m[p]&65535,u[G&a]=m[p],m[p]=G),v=V,L=X,V=fr-1,je!==0&&v<M&&(G-je&65535)<=r-yd&&(R!=2&&(V=pc(je)),V<=5&&(R==1||V==fr&&G-X>4096)&&(V=fr-1)),v>=fr&&V<=v){Qe=G+P-fr,qe=vn(G-1-L,v-fr),P-=v-1,v-=2;do++G<=Qe&&(p=(p<<_^c[G+(fr-1)]&255)&x,je=m[p]&65535,u[G&a]=m[p],m[p]=G);while(--v!==0);if(Z=0,V=fr-1,G++,qe&&(ut(!1),t.avail_out===0))return Pu}else if(Z!==0){if(qe=vn(0,c[G-1]&255),qe&&ut(!1),G++,P--,t.avail_out===0)return Pu}else Z=1,G++,P--}return Z!==0&&(qe=vn(0,c[G-1]&255),Z=0),ut(we==4),t.avail_out===0?we==4?uP:Pu:we==4?R5:L5}function $r(we){return we.total_in=we.total_out=0,we.msg=null,e.pending=0,e.pending_out=0,n=Z5,o=0,ae(),be(),0}e.deflateInit=function(we,je,qe,Qe,pt,Bt){return Qe||(Qe=ez),pt||(pt=o8e),Bt||(Bt=0),we.msg=null,je==-1&&(je=6),pt<1||pt>i8e||Qe!=ez||qe<9||qe>15||je<0||je>9||Bt<0||Bt>2?-2:(we.dstate=e,s=qe,r=1<<s,a=r-1,f=pt+7,y=1<<f,x=y-1,_=Math.floor((f+fr-1)/fr),c=new Uint8Array(r*2),u=[],m=[],J=1<<pt+6,e.pending_buf=new Uint8Array(J*4),i=J*4,e.dist_buf=new Uint16Array(J),e.lc_buf=new Uint8Array(J),b=je,R=Bt,$r(we))},e.deflateEnd=function(){return n!=$H&&n!=Z5&&n!=mP?-2:(e.lc_buf=null,e.dist_buf=null,e.pending_buf=null,m=null,u=null,c=null,e.dstate=null,n==Z5?-3:0)},e.deflateParams=function(we,je,qe){let Qe=0;return je==-1&&(je=6),je<0||je>9||qe<0||qe>2?-2:($m[b].func!=$m[je].func&&we.total_in!==0&&(Qe=we.deflate(1)),b!=je&&(b=je,M=$m[b].max_lazy,E=$m[b].good_length,I=$m[b].nice_length,F=$m[b].max_chain),R=qe,Qe)},e.deflateSetDictionary=function(we,je,qe){let Qe=qe,pt,Bt=0;if(!je||n!=$H)return-2;if(Qe<fr)return 0;for(Qe>r-yd&&(Qe=r-yd,Bt=qe-Qe),c.set(je.subarray(Bt,Bt+Qe),0),G=Qe,C=Qe,p=c[0]&255,p=(p<<_^c[1]&255)&x,pt=0;pt<=Qe-fr;pt++)p=(p<<_^c[pt+(fr-1)]&255)&x,u[pt&a]=m[p],m[p]=pt;return 0},e.deflate=function(we,je){let qe,Qe,pt,Bt,Vn;if(je>4||je<0)return-2;if(!we.next_out||!we.next_in&&we.avail_in!==0||n==mP&&je!=4)return we.msg=V5[4],-2;if(we.avail_out===0)return we.msg=V5[7],-5;if(t=we,Bt=o,o=je,n==$H&&(Qe=ez+(s-8<<4)<<8,pt=(b-1&255)>>1,pt>3&&(pt=3),Qe|=pt<<6,G!==0&&(Qe|=r8e),Qe+=31-Qe%31,n=Z5,Me(Qe)),e.pending!==0){if(t.flush_pending(),t.avail_out===0)return o=-1,0}else if(t.avail_in===0&&je<=Bt&&je!=4)return t.msg=V5[7],-5;if(n==mP&&t.avail_in!==0)return we.msg=V5[7],-5;if(t.avail_in!==0||P!==0||je!=0&&n!=mP){switch(Vn=-1,$m[b].func){case fme:Vn=ji(je);break;case G5:Vn=bs(je);break;case v_:Vn=ys(je);break;default:}if((Vn==uP||Vn==R5)&&(n=mP),Vn==Pu||Vn==uP)return t.avail_out===0&&(o=-1),0;if(Vn==L5){if(je==1)ln();else if(Ce(0,0,!1),je==3)for(qe=0;qe<y;qe++)m[qe]=0;if(t.flush_pending(),t.avail_out===0)return o=-1,0}}return je!=4?0:1}}function pme(){let e=this;e.next_in_index=0,e.next_out_index=0,e.avail_in=0,e.total_in=0,e.avail_out=0,e.total_out=0}pme.prototype={deflateInit:function(e,t){let n=this;return n.dstate=new c8e,t||(t=15),n.dstate.deflateInit(n,e,t)},deflate:function(e){let t=this;return t.dstate?t.dstate.deflate(t,e):-2},deflateEnd:function(){let e=this;if(!e.dstate)return-2;let t=e.dstate.deflateEnd();return e.dstate=null,t},deflateParams:function(e,t){let n=this;return n.dstate?n.dstate.deflateParams(n,e,t):-2},deflateSetDictionary:function(e,t){let n=this;return n.dstate?n.dstate.deflateSetDictionary(n,e,t):-2},read_buf:function(e,t,n){let i=this,o=i.avail_in;return o>n&&(o=n),o===0?0:(i.avail_in-=o,e.set(i.next_in.subarray(i.next_in_index,i.next_in_index+o),t),i.next_in_index+=o,i.total_in+=o,o)},flush_pending:function(){let e=this,t=e.dstate.pending;t>e.avail_out&&(t=e.avail_out),t!==0&&(e.next_out.set(e.dstate.pending_buf.subarray(e.dstate.pending_out,e.dstate.pending_out+t),e.next_out_index),e.next_out_index+=t,e.dstate.pending_out+=t,e.total_out+=t,e.avail_out-=t,e.dstate.pending-=t,e.dstate.pending===0&&(e.dstate.pending_out=0))}};function l8e(e){let t=this,n=new pme,i=d8e(e&&e.chunkSize?e.chunkSize:64*1024),o=0,r=new Uint8Array(i),s=e?e.level:-1;typeof s>"u"&&(s=-1),n.deflateInit(s),n.next_out=r,t.append=function(a,c){let l,u,m=0,p=0,y=0,f=[];if(a.length){n.next_in_index=0,n.next_in=a,n.avail_in=a.length;do{if(n.next_out_index=0,n.avail_out=i,l=n.deflate(o),l!=0)throw new Error("deflating: "+n.msg);n.next_out_index&&(n.next_out_index==i?f.push(new Uint8Array(r)):f.push(r.slice(0,n.next_out_index))),y+=n.next_out_index,c&&n.next_in_index>0&&n.next_in_index!=m&&(c(n.next_in_index),m=n.next_in_index)}while(n.avail_in>0||n.avail_out===0);return f.length>1?(u=new Uint8Array(y),f.forEach(function(x){u.set(x,p),p+=x.length})):u=f[0]||new Uint8Array(0),u}},t.flush=function(){let a,c,l=0,u=0,m=[];do{if(n.next_out_index=0,n.avail_out=i,a=n.deflate(4),a!=1&&a!=0)throw new Error("deflating: "+n.msg);i-n.avail_out>0&&m.push(r.slice(0,n.next_out_index)),u+=n.next_out_index}while(n.avail_in>0||n.avail_out===0);return n.deflateEnd(),c=new Uint8Array(u),m.forEach(function(p){c.set(p,l),l+=p.length}),c}}function d8e(e){return e+5*(Math.floor(e/16383)+1)}var bme=l8e;var Yii=T(S(),1);var gd=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],Fme=1440,u8e=0,m8e=4,h8e=9,f8e=5,p8e=[96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,192,80,7,10,0,8,96,0,8,32,0,9,160,0,8,0,0,8,128,0,8,64,0,9,224,80,7,6,0,8,88,0,8,24,0,9,144,83,7,59,0,8,120,0,8,56,0,9,208,81,7,17,0,8,104,0,8,40,0,9,176,0,8,8,0,8,136,0,8,72,0,9,240,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,200,81,7,13,0,8,100,0,8,36,0,9,168,0,8,4,0,8,132,0,8,68,0,9,232,80,7,8,0,8,92,0,8,28,0,9,152,84,7,83,0,8,124,0,8,60,0,9,216,82,7,23,0,8,108,0,8,44,0,9,184,0,8,12,0,8,140,0,8,76,0,9,248,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,196,81,7,11,0,8,98,0,8,34,0,9,164,0,8,2,0,8,130,0,8,66,0,9,228,80,7,7,0,8,90,0,8,26,0,9,148,84,7,67,0,8,122,0,8,58,0,9,212,82,7,19,0,8,106,0,8,42,0,9,180,0,8,10,0,8,138,0,8,74,0,9,244,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,204,81,7,15,0,8,102,0,8,38,0,9,172,0,8,6,0,8,134,0,8,70,0,9,236,80,7,9,0,8,94,0,8,30,0,9,156,84,7,99,0,8,126,0,8,62,0,9,220,82,7,27,0,8,110,0,8,46,0,9,188,0,8,14,0,8,142,0,8,78,0,9,252,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,194,80,7,10,0,8,97,0,8,33,0,9,162,0,8,1,0,8,129,0,8,65,0,9,226,80,7,6,0,8,89,0,8,25,0,9,146,83,7,59,0,8,121,0,8,57,0,9,210,81,7,17,0,8,105,0,8,41,0,9,178,0,8,9,0,8,137,0,8,73,0,9,242,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,202,81,7,13,0,8,101,0,8,37,0,9,170,0,8,5,0,8,133,0,8,69,0,9,234,80,7,8,0,8,93,0,8,29,0,9,154,84,7,83,0,8,125,0,8,61,0,9,218,82,7,23,0,8,109,0,8,45,0,9,186,0,8,13,0,8,141,0,8,77,0,9,250,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,198,81,7,11,0,8,99,0,8,35,0,9,166,0,8,3,0,8,131,0,8,67,0,9,230,80,7,7,0,8,91,0,8,27,0,9,150,84,7,67,0,8,123,0,8,59,0,9,214,82,7,19,0,8,107,0,8,43,0,9,182,0,8,11,0,8,139,0,8,75,0,9,246,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,206,81,7,15,0,8,103,0,8,39,0,9,174,0,8,7,0,8,135,0,8,71,0,9,238,80,7,9,0,8,95,0,8,31,0,9,158,84,7,99,0,8,127,0,8,63,0,9,222,82,7,27,0,8,111,0,8,47,0,9,190,0,8,15,0,8,143,0,8,79,0,9,254,96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,193,80,7,10,0,8,96,0,8,32,0,9,161,0,8,0,0,8,128,0,8,64,0,9,225,80,7,6,0,8,88,0,8,24,0,9,145,83,7,59,0,8,120,0,8,56,0,9,209,81,7,17,0,8,104,0,8,40,0,9,177,0,8,8,0,8,136,0,8,72,0,9,241,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,201,81,7,13,0,8,100,0,8,36,0,9,169,0,8,4,0,8,132,0,8,68,0,9,233,80,7,8,0,8,92,0,8,28,0,9,153,84,7,83,0,8,124,0,8,60,0,9,217,82,7,23,0,8,108,0,8,44,0,9,185,0,8,12,0,8,140,0,8,76,0,9,249,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,197,81,7,11,0,8,98,0,8,34,0,9,165,0,8,2,0,8,130,0,8,66,0,9,229,80,7,7,0,8,90,0,8,26,0,9,149,84,7,67,0,8,122,0,8,58,0,9,213,82,7,19,0,8,106,0,8,42,0,9,181,0,8,10,0,8,138,0,8,74,0,9,245,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,205,81,7,15,0,8,102,0,8,38,0,9,173,0,8,6,0,8,134,0,8,70,0,9,237,80,7,9,0,8,94,0,8,30,0,9,157,84,7,99,0,8,126,0,8,62,0,9,221,82,7,27,0,8,110,0,8,46,0,9,189,0,8,14,0,8,142,0,8,78,0,9,253,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,195,80,7,10,0,8,97,0,8,33,0,9,163,0,8,1,0,8,129,0,8,65,0,9,227,80,7,6,0,8,89,0,8,25,0,9,147,83,7,59,0,8,121,0,8,57,0,9,211,81,7,17,0,8,105,0,8,41,0,9,179,0,8,9,0,8,137,0,8,73,0,9,243,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,203,81,7,13,0,8,101,0,8,37,0,9,171,0,8,5,0,8,133,0,8,69,0,9,235,80,7,8,0,8,93,0,8,29,0,9,155,84,7,83,0,8,125,0,8,61,0,9,219,82,7,23,0,8,109,0,8,45,0,9,187,0,8,13,0,8,141,0,8,77,0,9,251,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,199,81,7,11,0,8,99,0,8,35,0,9,167,0,8,3,0,8,131,0,8,67,0,9,231,80,7,7,0,8,91,0,8,27,0,9,151,84,7,67,0,8,123,0,8,59,0,9,215,82,7,19,0,8,107,0,8,43,0,9,183,0,8,11,0,8,139,0,8,75,0,9,247,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,207,81,7,15,0,8,103,0,8,39,0,9,175,0,8,7,0,8,135,0,8,71,0,9,239,80,7,9,0,8,95,0,8,31,0,9,159,84,7,99,0,8,127,0,8,63,0,9,223,82,7,27,0,8,111,0,8,47,0,9,191,0,8,15,0,8,143,0,8,79,0,9,255],b8e=[80,5,1,87,5,257,83,5,17,91,5,4097,81,5,5,89,5,1025,85,5,65,93,5,16385,80,5,3,88,5,513,84,5,33,92,5,8193,82,5,9,90,5,2049,86,5,129,192,5,24577,80,5,2,87,5,385,83,5,25,91,5,6145,81,5,7,89,5,1537,85,5,97,93,5,24577,80,5,4,88,5,769,84,5,49,92,5,12289,82,5,13,90,5,3073,86,5,193,192,5,24577],y8e=[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],g8e=[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,112,112],x8e=[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],_8e=[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],Xy=15;function rz(){let e=this,t,n,i,o,r,s;function a(l,u,m,p,y,f,x,_,C,V,L){let Z,G,X,P,v,F,M,b,R,E,I,w,N,B,k;E=0,v=m;do i[l[u+E]]++,E++,v--;while(v!==0);if(i[0]==m)return x[0]=-1,_[0]=0,0;for(b=_[0],F=1;F<=Xy&&i[F]===0;F++);for(M=F,b<F&&(b=F),v=Xy;v!==0&&i[v]===0;v--);for(X=v,b>v&&(b=v),_[0]=b,B=1<<F;F<v;F++,B<<=1)if((B-=i[F])<0)return-3;if((B-=i[v])<0)return-3;for(i[v]+=B,s[1]=F=0,E=1,N=2;--v!==0;)s[N]=F+=i[E],N++,E++;v=0,E=0;do(F=l[u+E])!==0&&(L[s[F]++]=v),E++;while(++v<m);for(m=s[X],s[0]=v=0,E=0,P=-1,w=-b,r[0]=0,I=0,k=0;M<=X;M++)for(Z=i[M];Z--!==0;){for(;M>w+b;){if(P++,w+=b,k=X-w,k=k>b?b:k,(G=1<<(F=M-w))>Z+1&&(G-=Z+1,N=M,F<k))for(;++F<k&&!((G<<=1)<=i[++N]);)G-=i[N];if(k=1<<F,V[0]+k>Fme)return-3;r[P]=I=V[0],V[0]+=k,P!==0?(s[P]=v,o[0]=F,o[1]=b,F=v>>>w-b,o[2]=I-r[P-1]-F,C.set(o,(r[P-1]+F)*3)):x[0]=I}for(o[1]=M-w,E>=m?o[0]=192:L[E]<p?(o[0]=L[E]<256?0:96,o[2]=L[E++]):(o[0]=f[L[E]-p]+16+64,o[2]=y[L[E++]-p]),G=1<<M-w,F=v>>>w;F<k;F+=G)C.set(o,(I+F)*3);for(F=1<<M-1;v&F;F>>>=1)v^=F;for(v^=F,R=(1<<w)-1;(v&R)!=s[P];)P--,w-=b,R=(1<<w)-1}return B!==0&&X!=1?-5:0}function c(l){let u;for(t||(t=[],n=[],i=new Int32Array(Xy+1),o=[],r=new Int32Array(Xy),s=new Int32Array(Xy+1)),n.length<l&&(n=[]),u=0;u<l;u++)n[u]=0;for(u=0;u<Xy+1;u++)i[u]=0;for(u=0;u<3;u++)o[u]=0;r.set(i.subarray(0,Xy),0),s.set(i.subarray(0,Xy+1),0)}e.inflate_trees_bits=function(l,u,m,p,y){let f;return c(19),t[0]=0,f=a(l,0,19,19,null,null,m,u,p,t,n),f==-3?y.msg="oversubscribed dynamic bit lengths tree":(f==-5||u[0]===0)&&(y.msg="incomplete dynamic bit lengths tree",f=-3),f},e.inflate_trees_dynamic=function(l,u,m,p,y,f,x,_,C){let V;return c(288),t[0]=0,V=a(m,0,l,257,y8e,g8e,f,p,_,t,n),V!=0||p[0]===0?(V==-3?C.msg="oversubscribed literal/length tree":V!=-4&&(C.msg="incomplete literal/length tree",V=-3),V):(c(288),V=a(m,l,u,0,x8e,_8e,x,y,_,t,n),V!=0||y[0]===0&&l>257?(V==-3?C.msg="oversubscribed distance tree":V==-5?(C.msg="incomplete distance tree",V=-3):V!=-4&&(C.msg="empty distance tree with lengths",V=-3),V):0)}}rz.inflate_trees_fixed=function(e,t,n,i){return e[0]=h8e,t[0]=f8e,n[0]=p8e,i[0]=b8e,0};var W5=0,yme=1,gme=2,xme=3,_me=4,Tme=5,Sme=6,nz=7,Cme=8,P5=9;function T8e(){let e=this,t,n=0,i,o=0,r=0,s=0,a=0,c=0,l=0,u=0,m,p=0,y,f=0;function x(_,C,V,L,Z,G,X,P){let v,F,M,b,R,E,I,w,N,B,k,O,U,J,z,ee;I=P.next_in_index,w=P.avail_in,R=X.bitb,E=X.bitk,N=X.write,B=N<X.read?X.read-N-1:X.end-N,k=gd[_],O=gd[C];do{for(;E<20;)w--,R|=(P.read_byte(I++)&255)<<E,E+=8;if(v=R&k,F=V,M=L,ee=(M+v)*3,(b=F[ee])===0){R>>=F[ee+1],E-=F[ee+1],X.win[N++]=F[ee+2],B--;continue}do{if(R>>=F[ee+1],E-=F[ee+1],b&16){for(b&=15,U=F[ee+2]+(R&gd[b]),R>>=b,E-=b;E<15;)w--,R|=(P.read_byte(I++)&255)<<E,E+=8;v=R&O,F=Z,M=G,ee=(M+v)*3,b=F[ee];do if(R>>=F[ee+1],E-=F[ee+1],b&16){for(b&=15;E<b;)w--,R|=(P.read_byte(I++)&255)<<E,E+=8;if(J=F[ee+2]+(R&gd[b]),R>>=b,E-=b,B-=U,N>=J)z=N-J,N-z>0&&2>N-z?(X.win[N++]=X.win[z++],X.win[N++]=X.win[z++],U-=2):(X.win.set(X.win.subarray(z,z+2),N),N+=2,z+=2,U-=2);else{z=N-J;do z+=X.end;while(z<0);if(b=X.end-z,U>b){if(U-=b,N-z>0&&b>N-z)do X.win[N++]=X.win[z++];while(--b!==0);else X.win.set(X.win.subarray(z,z+b),N),N+=b,z+=b,b=0;z=0}}if(N-z>0&&U>N-z)do X.win[N++]=X.win[z++];while(--U!==0);else X.win.set(X.win.subarray(z,z+U),N),N+=U,z+=U,U=0;break}else if(!(b&64))v+=F[ee+2],v+=R&gd[b],ee=(M+v)*3,b=F[ee];else return P.msg="invalid distance code",U=P.avail_in-w,U=E>>3<U?E>>3:U,w+=U,I-=U,E-=U<<3,X.bitb=R,X.bitk=E,P.avail_in=w,P.total_in+=I-P.next_in_index,P.next_in_index=I,X.write=N,-3;while(!0);break}if(b&64)return b&32?(U=P.avail_in-w,U=E>>3<U?E>>3:U,w+=U,I-=U,E-=U<<3,X.bitb=R,X.bitk=E,P.avail_in=w,P.total_in+=I-P.next_in_index,P.next_in_index=I,X.write=N,1):(P.msg="invalid literal/length code",U=P.avail_in-w,U=E>>3<U?E>>3:U,w+=U,I-=U,E-=U<<3,X.bitb=R,X.bitk=E,P.avail_in=w,P.total_in+=I-P.next_in_index,P.next_in_index=I,X.write=N,-3);if(v+=F[ee+2],v+=R&gd[b],ee=(M+v)*3,(b=F[ee])===0){R>>=F[ee+1],E-=F[ee+1],X.win[N++]=F[ee+2],B--;break}}while(!0)}while(B>=258&&w>=10);return U=P.avail_in-w,U=E>>3<U?E>>3:U,w+=U,I-=U,E-=U<<3,X.bitb=R,X.bitk=E,P.avail_in=w,P.total_in+=I-P.next_in_index,P.next_in_index=I,X.write=N,0}e.init=function(_,C,V,L,Z,G){t=W5,l=_,u=C,m=V,p=L,y=Z,f=G,i=null},e.proc=function(_,C,V){let L,Z,G,X=0,P=0,v=0,F,M,b,R;for(v=C.next_in_index,F=C.avail_in,X=_.bitb,P=_.bitk,M=_.write,b=M<_.read?_.read-M-1:_.end-M;;)switch(t){case W5:if(b>=258&&F>=10&&(_.bitb=X,_.bitk=P,C.avail_in=F,C.total_in+=v-C.next_in_index,C.next_in_index=v,_.write=M,V=x(l,u,m,p,y,f,_,C),v=C.next_in_index,F=C.avail_in,X=_.bitb,P=_.bitk,M=_.write,b=M<_.read?_.read-M-1:_.end-M,V!=0)){t=V==1?nz:P5;break}r=l,i=m,o=p,t=yme;case yme:for(L=r;P<L;){if(F!==0)V=0;else return _.bitb=X,_.bitk=P,C.avail_in=F,C.total_in+=v-C.next_in_index,C.next_in_index=v,_.write=M,_.inflate_flush(C,V);F--,X|=(C.read_byte(v++)&255)<<P,P+=8}if(Z=(o+(X&gd[L]))*3,X>>>=i[Z+1],P-=i[Z+1],G=i[Z],G===0){s=i[Z+2],t=Sme;break}if(G&16){a=G&15,n=i[Z+2],t=gme;break}if(!(G&64)){r=G,o=Z/3+i[Z+2];break}if(G&32){t=nz;break}return t=P5,C.msg="invalid literal/length code",V=-3,_.bitb=X,_.bitk=P,C.avail_in=F,C.total_in+=v-C.next_in_index,C.next_in_index=v,_.write=M,_.inflate_flush(C,V);case gme:for(L=a;P<L;){if(F!==0)V=0;else return _.bitb=X,_.bitk=P,C.avail_in=F,C.total_in+=v-C.next_in_index,C.next_in_index=v,_.write=M,_.inflate_flush(C,V);F--,X|=(C.read_byte(v++)&255)<<P,P+=8}n+=X&gd[L],X>>=L,P-=L,r=u,i=y,o=f,t=xme;case xme:for(L=r;P<L;){if(F!==0)V=0;else return _.bitb=X,_.bitk=P,C.avail_in=F,C.total_in+=v-C.next_in_index,C.next_in_index=v,_.write=M,_.inflate_flush(C,V);F--,X|=(C.read_byte(v++)&255)<<P,P+=8}if(Z=(o+(X&gd[L]))*3,X>>=i[Z+1],P-=i[Z+1],G=i[Z],G&16){a=G&15,c=i[Z+2],t=_me;break}if(!(G&64)){r=G,o=Z/3+i[Z+2];break}return t=P5,C.msg="invalid distance code",V=-3,_.bitb=X,_.bitk=P,C.avail_in=F,C.total_in+=v-C.next_in_index,C.next_in_index=v,_.write=M,_.inflate_flush(C,V);case _me:for(L=a;P<L;){if(F!==0)V=0;else return _.bitb=X,_.bitk=P,C.avail_in=F,C.total_in+=v-C.next_in_index,C.next_in_index=v,_.write=M,_.inflate_flush(C,V);F--,X|=(C.read_byte(v++)&255)<<P,P+=8}c+=X&gd[L],X>>=L,P-=L,t=Tme;case Tme:for(R=M-c;R<0;)R+=_.end;for(;n!==0;){if(b===0&&(M==_.end&&_.read!==0&&(M=0,b=M<_.read?_.read-M-1:_.end-M),b===0&&(_.write=M,V=_.inflate_flush(C,V),M=_.write,b=M<_.read?_.read-M-1:_.end-M,M==_.end&&_.read!==0&&(M=0,b=M<_.read?_.read-M-1:_.end-M),b===0)))return _.bitb=X,_.bitk=P,C.avail_in=F,C.total_in+=v-C.next_in_index,C.next_in_index=v,_.write=M,_.inflate_flush(C,V);_.win[M++]=_.win[R++],b--,R==_.end&&(R=0),n--}t=W5;break;case Sme:if(b===0&&(M==_.end&&_.read!==0&&(M=0,b=M<_.read?_.read-M-1:_.end-M),b===0&&(_.write=M,V=_.inflate_flush(C,V),M=_.write,b=M<_.read?_.read-M-1:_.end-M,M==_.end&&_.read!==0&&(M=0,b=M<_.read?_.read-M-1:_.end-M),b===0)))return _.bitb=X,_.bitk=P,C.avail_in=F,C.total_in+=v-C.next_in_index,C.next_in_index=v,_.write=M,_.inflate_flush(C,V);V=0,_.win[M++]=s,b--,t=W5;break;case nz:if(P>7&&(P-=8,F++,v--),_.write=M,V=_.inflate_flush(C,V),M=_.write,b=M<_.read?_.read-M-1:_.end-M,_.read!=_.write)return _.bitb=X,_.bitk=P,C.avail_in=F,C.total_in+=v-C.next_in_index,C.next_in_index=v,_.write=M,_.inflate_flush(C,V);t=Cme;case Cme:return V=1,_.bitb=X,_.bitk=P,C.avail_in=F,C.total_in+=v-C.next_in_index,C.next_in_index=v,_.write=M,_.inflate_flush(C,V);case P5:return V=-3,_.bitb=X,_.bitk=P,C.avail_in=F,C.total_in+=v-C.next_in_index,C.next_in_index=v,_.write=M,_.inflate_flush(C,V);default:return V=-2,_.bitb=X,_.bitk=P,C.avail_in=F,C.total_in+=v-C.next_in_index,C.next_in_index=v,_.write=M,_.inflate_flush(C,V)}},e.free=function(){}}var Vme=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],V1=0,iz=1,Lme=2,Rme=3,Zme=4,Gme=5,v5=6,w5=7,Eme=8,w_=9;function S8e(e,t){let n=this,i=V1,o=0,r=0,s=0,a,c=[0],l=[0],u=new T8e,m=0,p=new Int32Array(Fme*3),y=0,f=new rz;n.bitk=0,n.bitb=0,n.win=new Uint8Array(t),n.end=t,n.read=0,n.write=0,n.reset=function(x,_){_&&(_[0]=y),i==v5&&u.free(x),i=V1,n.bitk=0,n.bitb=0,n.read=n.write=0},n.reset(e,null),n.inflate_flush=function(x,_){let C,V,L;return V=x.next_out_index,L=n.read,C=(L<=n.write?n.write:n.end)-L,C>x.avail_out&&(C=x.avail_out),C!==0&&_==-5&&(_=0),x.avail_out-=C,x.total_out+=C,x.next_out.set(n.win.subarray(L,L+C),V),V+=C,L+=C,L==n.end&&(L=0,n.write==n.end&&(n.write=0),C=n.write-L,C>x.avail_out&&(C=x.avail_out),C!==0&&_==-5&&(_=0),x.avail_out-=C,x.total_out+=C,x.next_out.set(n.win.subarray(L,L+C),V),V+=C,L+=C),x.next_out_index=V,n.read=L,_},n.proc=function(x,_){let C,V,L,Z,G,X,P,v;for(Z=x.next_in_index,G=x.avail_in,V=n.bitb,L=n.bitk,X=n.write,P=X<n.read?n.read-X-1:n.end-X;;){let F,M,b,R,E,I,w,N;switch(i){case V1:for(;L<3;){if(G!==0)_=0;else return n.bitb=V,n.bitk=L,x.avail_in=G,x.total_in+=Z-x.next_in_index,x.next_in_index=Z,n.write=X,n.inflate_flush(x,_);G--,V|=(x.read_byte(Z++)&255)<<L,L+=8}switch(C=V&7,m=C&1,C>>>1){case 0:V>>>=3,L-=3,C=L&7,V>>>=C,L-=C,i=iz;break;case 1:F=[],M=[],b=[[]],R=[[]],rz.inflate_trees_fixed(F,M,b,R),u.init(F[0],M[0],b[0],0,R[0],0),V>>>=3,L-=3,i=v5;break;case 2:V>>>=3,L-=3,i=Rme;break;case 3:return V>>>=3,L-=3,i=w_,x.msg="invalid block type",_=-3,n.bitb=V,n.bitk=L,x.avail_in=G,x.total_in+=Z-x.next_in_index,x.next_in_index=Z,n.write=X,n.inflate_flush(x,_)}break;case iz:for(;L<32;){if(G!==0)_=0;else return n.bitb=V,n.bitk=L,x.avail_in=G,x.total_in+=Z-x.next_in_index,x.next_in_index=Z,n.write=X,n.inflate_flush(x,_);G--,V|=(x.read_byte(Z++)&255)<<L,L+=8}if((~V>>>16&65535)!=(V&65535))return i=w_,x.msg="invalid stored block lengths",_=-3,n.bitb=V,n.bitk=L,x.avail_in=G,x.total_in+=Z-x.next_in_index,x.next_in_index=Z,n.write=X,n.inflate_flush(x,_);o=V&65535,V=L=0,i=o!==0?Lme:m!==0?w5:V1;break;case Lme:if(G===0||P===0&&(X==n.end&&n.read!==0&&(X=0,P=X<n.read?n.read-X-1:n.end-X),P===0&&(n.write=X,_=n.inflate_flush(x,_),X=n.write,P=X<n.read?n.read-X-1:n.end-X,X==n.end&&n.read!==0&&(X=0,P=X<n.read?n.read-X-1:n.end-X),P===0)))return n.bitb=V,n.bitk=L,x.avail_in=G,x.total_in+=Z-x.next_in_index,x.next_in_index=Z,n.write=X,n.inflate_flush(x,_);if(_=0,C=o,C>G&&(C=G),C>P&&(C=P),n.win.set(x.read_buf(Z,C),X),Z+=C,G-=C,X+=C,P-=C,(o-=C)!==0)break;i=m!==0?w5:V1;break;case Rme:for(;L<14;){if(G!==0)_=0;else return n.bitb=V,n.bitk=L,x.avail_in=G,x.total_in+=Z-x.next_in_index,x.next_in_index=Z,n.write=X,n.inflate_flush(x,_);G--,V|=(x.read_byte(Z++)&255)<<L,L+=8}if(r=C=V&16383,(C&31)>29||(C>>5&31)>29)return i=w_,x.msg="too many length or distance symbols",_=-3,n.bitb=V,n.bitk=L,x.avail_in=G,x.total_in+=Z-x.next_in_index,x.next_in_index=Z,n.write=X,n.inflate_flush(x,_);if(C=258+(C&31)+(C>>5&31),!a||a.length<C)a=[];else for(v=0;v<C;v++)a[v]=0;V>>>=14,L-=14,s=0,i=Zme;case Zme:for(;s<4+(r>>>10);){for(;L<3;){if(G!==0)_=0;else return n.bitb=V,n.bitk=L,x.avail_in=G,x.total_in+=Z-x.next_in_index,x.next_in_index=Z,n.write=X,n.inflate_flush(x,_);G--,V|=(x.read_byte(Z++)&255)<<L,L+=8}a[Vme[s++]]=V&7,V>>>=3,L-=3}for(;s<19;)a[Vme[s++]]=0;if(c[0]=7,C=f.inflate_trees_bits(a,c,l,p,x),C!=0)return _=C,_==-3&&(a=null,i=w_),n.bitb=V,n.bitk=L,x.avail_in=G,x.total_in+=Z-x.next_in_index,x.next_in_index=Z,n.write=X,n.inflate_flush(x,_);s=0,i=Gme;case Gme:for(;C=r,!(s>=258+(C&31)+(C>>5&31));){let B,k;for(C=c[0];L<C;){if(G!==0)_=0;else return n.bitb=V,n.bitk=L,x.avail_in=G,x.total_in+=Z-x.next_in_index,x.next_in_index=Z,n.write=X,n.inflate_flush(x,_);G--,V|=(x.read_byte(Z++)&255)<<L,L+=8}if(C=p[(l[0]+(V&gd[C]))*3+1],k=p[(l[0]+(V&gd[C]))*3+2],k<16)V>>>=C,L-=C,a[s++]=k;else{for(v=k==18?7:k-14,B=k==18?11:3;L<C+v;){if(G!==0)_=0;else return n.bitb=V,n.bitk=L,x.avail_in=G,x.total_in+=Z-x.next_in_index,x.next_in_index=Z,n.write=X,n.inflate_flush(x,_);G--,V|=(x.read_byte(Z++)&255)<<L,L+=8}if(V>>>=C,L-=C,B+=V&gd[v],V>>>=v,L-=v,v=s,C=r,v+B>258+(C&31)+(C>>5&31)||k==16&&v<1)return a=null,i=w_,x.msg="invalid bit length repeat",_=-3,n.bitb=V,n.bitk=L,x.avail_in=G,x.total_in+=Z-x.next_in_index,x.next_in_index=Z,n.write=X,n.inflate_flush(x,_);k=k==16?a[v-1]:0;do a[v++]=k;while(--B!==0);s=v}}if(l[0]=-1,E=[],I=[],w=[],N=[],E[0]=9,I[0]=6,C=r,C=f.inflate_trees_dynamic(257+(C&31),1+(C>>5&31),a,E,I,w,N,p,x),C!=0)return C==-3&&(a=null,i=w_),_=C,n.bitb=V,n.bitk=L,x.avail_in=G,x.total_in+=Z-x.next_in_index,x.next_in_index=Z,n.write=X,n.inflate_flush(x,_);u.init(E[0],I[0],p,w[0],p,N[0]),i=v5;case v5:if(n.bitb=V,n.bitk=L,x.avail_in=G,x.total_in+=Z-x.next_in_index,x.next_in_index=Z,n.write=X,(_=u.proc(n,x,_))!=1)return n.inflate_flush(x,_);if(_=0,u.free(x),Z=x.next_in_index,G=x.avail_in,V=n.bitb,L=n.bitk,X=n.write,P=X<n.read?n.read-X-1:n.end-X,m===0){i=V1;break}i=w5;case w5:if(n.write=X,_=n.inflate_flush(x,_),X=n.write,P=X<n.read?n.read-X-1:n.end-X,n.read!=n.write)return n.bitb=V,n.bitk=L,x.avail_in=G,x.total_in+=Z-x.next_in_index,x.next_in_index=Z,n.write=X,n.inflate_flush(x,_);i=Eme;case Eme:return _=1,n.bitb=V,n.bitk=L,x.avail_in=G,x.total_in+=Z-x.next_in_index,x.next_in_index=Z,n.write=X,n.inflate_flush(x,_);case w_:return _=-3,n.bitb=V,n.bitk=L,x.avail_in=G,x.total_in+=Z-x.next_in_index,x.next_in_index=Z,n.write=X,n.inflate_flush(x,_);default:return _=-2,n.bitb=V,n.bitk=L,x.avail_in=G,x.total_in+=Z-x.next_in_index,x.next_in_index=Z,n.write=X,n.inflate_flush(x,_)}}},n.free=function(x){n.reset(x,null),n.win=null,p=null},n.set_dictionary=function(x,_,C){n.win.set(x.subarray(_,_+C),0),n.read=n.write=C},n.sync_point=function(){return i==iz?1:0}}var C8e=32,V8e=8,L8e=0,Xme=1,Ime=2,Wme=3,Pme=4,vme=5,oz=6,hP=7,wme=12,Iy=13,R8e=[0,0,255,255];function Z8e(){let e=this;e.mode=0,e.method=0,e.was=[0],e.need=0,e.marker=0,e.wbits=0;function t(n){return!n||!n.istate?-2:(n.total_in=n.total_out=0,n.msg=null,n.istate.mode=hP,n.istate.blocks.reset(n,null),0)}e.inflateEnd=function(n){return e.blocks&&e.blocks.free(n),e.blocks=null,0},e.inflateInit=function(n,i){return n.msg=null,e.blocks=null,i<8||i>15?(e.inflateEnd(n),-2):(e.wbits=i,n.istate.blocks=new S8e(n,1<<i),t(n),0)},e.inflate=function(n,i){let o,r;if(!n||!n.istate||!n.next_in)return-2;let s=n.istate;for(i=i==m8e?-5:0,o=-5;;)switch(s.mode){case L8e:if(n.avail_in===0)return o;if(o=i,n.avail_in--,n.total_in++,((s.method=n.read_byte(n.next_in_index++))&15)!=V8e){s.mode=Iy,n.msg="unknown compression method",s.marker=5;break}if((s.method>>4)+8>s.wbits){s.mode=Iy,n.msg="invalid win size",s.marker=5;break}s.mode=Xme;case Xme:if(n.avail_in===0)return o;if(o=i,n.avail_in--,n.total_in++,r=n.read_byte(n.next_in_index++)&255,((s.method<<8)+r)%31!==0){s.mode=Iy,n.msg="incorrect header check",s.marker=5;break}if(!(r&C8e)){s.mode=hP;break}s.mode=Ime;case Ime:if(n.avail_in===0)return o;o=i,n.avail_in--,n.total_in++,s.need=(n.read_byte(n.next_in_index++)&255)<<24&4278190080,s.mode=Wme;case Wme:if(n.avail_in===0)return o;o=i,n.avail_in--,n.total_in++,s.need+=(n.read_byte(n.next_in_index++)&255)<<16&16711680,s.mode=Pme;case Pme:if(n.avail_in===0)return o;o=i,n.avail_in--,n.total_in++,s.need+=(n.read_byte(n.next_in_index++)&255)<<8&65280,s.mode=vme;case vme:return n.avail_in===0?o:(o=i,n.avail_in--,n.total_in++,s.need+=n.read_byte(n.next_in_index++)&255,s.mode=oz,2);case oz:return s.mode=Iy,n.msg="need dictionary",s.marker=0,-2;case hP:if(o=s.blocks.proc(n,o),o==-3){s.mode=Iy,s.marker=0;break}if(o==0&&(o=i),o!=1)return o;o=i,s.blocks.reset(n,s.was),s.mode=wme;case wme:return n.avail_in=0,1;case Iy:return-3;default:return-2}},e.inflateSetDictionary=function(n,i,o){let r=0,s=o;if(!n||!n.istate||n.istate.mode!=oz)return-2;let a=n.istate;return s>=1<<a.wbits&&(s=(1<<a.wbits)-1,r=o-s),a.blocks.set_dictionary(i,r,s),a.mode=hP,0},e.inflateSync=function(n){let i,o,r,s,a;if(!n||!n.istate)return-2;let c=n.istate;if(c.mode!=Iy&&(c.mode=Iy,c.marker=0),(i=n.avail_in)===0)return-5;for(o=n.next_in_index,r=c.marker;i!==0&&r<4;)n.read_byte(o)==R8e[r]?r++:n.read_byte(o)!==0?r=0:r=4-r,o++,i--;return n.total_in+=o-n.next_in_index,n.next_in_index=o,n.avail_in=i,c.marker=r,r!=4?-3:(s=n.total_in,a=n.total_out,t(n),n.total_in=s,n.total_out=a,c.mode=hP,0)},e.inflateSyncPoint=function(n){return!n||!n.istate||!n.istate.blocks?-2:n.istate.blocks.sync_point()}}function Ame(){}Ame.prototype={inflateInit:function(e){let t=this;return t.istate=new Z8e,e||(e=15),t.istate.inflateInit(t,e)},inflate:function(e){let t=this;return t.istate?t.istate.inflate(t,e):-2},inflateEnd:function(){let e=this;if(!e.istate)return-2;let t=e.istate.inflateEnd(e);return e.istate=null,t},inflateSync:function(){let e=this;return e.istate?e.istate.inflateSync(e):-2},inflateSetDictionary:function(e,t){let n=this;return n.istate?n.istate.inflateSetDictionary(n,e,t):-2},read_byte:function(e){return this.next_in[e]},read_buf:function(e,t){return this.next_in.subarray(e,e+t)}};function G8e(e){let t=this,n=new Ame,i=e&&e.chunkSize?Math.floor(e.chunkSize*2):128*1024,o=u8e,r=new Uint8Array(i),s=!1;n.inflateInit(),n.next_out=r,t.append=function(a,c){let l=[],u,m,p=0,y=0,f=0;if(a.length!==0){n.next_in_index=0,n.next_in=a,n.avail_in=a.length;do{if(n.next_out_index=0,n.avail_out=i,n.avail_in===0&&!s&&(n.next_in_index=0,s=!0),u=n.inflate(o),s&&u===-5){if(n.avail_in!==0)throw new Error("inflating: bad input")}else if(u!==0&&u!==1)throw new Error("inflating: "+n.msg);if((s||u===1)&&n.avail_in===a.length)throw new Error("inflating: bad input");n.next_out_index&&(n.next_out_index===i?l.push(new Uint8Array(r)):l.push(r.slice(0,n.next_out_index))),f+=n.next_out_index,c&&n.next_in_index>0&&n.next_in_index!=p&&(c(n.next_in_index),p=n.next_in_index)}while(n.avail_in>0||n.avail_out===0);return l.length>1?(m=new Uint8Array(f),l.forEach(function(x){m.set(x,y),y+=x.length})):m=l[0]||new Uint8Array(0),m}},t.flush=function(){n.inflateEnd()}}var Mme=G8e;var Kii=T(S(),1),E8e={chunkSize:524288,maxWorkers:typeof navigator<"u"&&navigator.hardwareConcurrency||2,terminateWorkerTimeout:5e3,useWebWorkers:!0,workerScripts:void 0},Xl=Object.assign({},E8e);function F5(){return Xl}function L1(e){if(e.baseURL!==void 0&&(Xl.baseURL=e.baseURL),e.chunkSize!==void 0&&(Xl.chunkSize=e.chunkSize),e.maxWorkers!==void 0&&(Xl.maxWorkers=e.maxWorkers),e.terminateWorkerTimeout!==void 0&&(Xl.terminateWorkerTimeout=e.terminateWorkerTimeout),e.useWebWorkers!==void 0&&(Xl.useWebWorkers=e.useWebWorkers),e.Deflate!==void 0&&(Xl.Deflate=e.Deflate),e.Inflate!==void 0&&(Xl.Inflate=e.Inflate),e.workerScripts!==void 0){if(e.workerScripts.deflate){if(!Array.isArray(e.workerScripts.deflate))throw new Error("workerScripts.deflate must be an array");Xl.workerScripts||(Xl.workerScripts={}),Xl.workerScripts.deflate=e.workerScripts.deflate}if(e.workerScripts.inflate){if(!Array.isArray(e.workerScripts.inflate))throw new Error("workerScripts.inflate must be an array");Xl.workerScripts||(Xl.workerScripts={}),Xl.workerScripts.inflate=e.workerScripts.inflate}}}var zii=T(S(),1);var Coi=T(S(),1);var boi=T(S(),1);var Qii=T(S(),1),Nme=[];for(let e=0;e<256;e++){let t=e;for(let n=0;n<8;n++)t&1?t=t>>>1^3988292384:t=t>>>1;Nme[e]=t}var sz=class{constructor(t){this.crc=t||-1}append(t){let n=this.crc|0;for(let i=0,o=t.length|0;i<o;i++)n=n>>>8^Nme[(n^t[i])&255];this.crc=n}get(){return~this.crc}},Wy=sz;var aoi=T(S(),1);var qii=T(S(),1),fP=X8e;function X8e(e){if(typeof TextEncoder>"u"){e=unescape(encodeURIComponent(e));let t=new Uint8Array(e.length);for(let n=0;n<t.length;n++)t[n]=e.charCodeAt(n);return t}else return new TextEncoder().encode(e)}var eoi=T(S(),1),kc={concat(e,t){if(e.length===0||t.length===0)return e.concat(t);let n=e[e.length-1],i=kc.getPartial(n);return i===32?e.concat(t):kc._shiftRight(t,i,n|0,e.slice(0,e.length-1))},bitLength(e){let t=e.length;if(t===0)return 0;let n=e[t-1];return(t-1)*32+kc.getPartial(n)},clamp(e,t){if(e.length*32<t)return e;e=e.slice(0,Math.ceil(t/32));let n=e.length;return t=t&31,n>0&&t&&(e[n-1]=kc.partial(t,e[n-1]&2147483648>>t-1,1)),e},partial(e,t,n){return e===32?t:(n?t|0:t<<32-e)+e*1099511627776},getPartial(e){return Math.round(e/1099511627776)||32},_shiftRight(e,t,n,i){for(i===void 0&&(i=[]);t>=32;t-=32)i.push(n),n=0;if(t===0)return i.concat(e);for(let s=0;s<e.length;s++)i.push(n|e[s]>>>t),n=e[s]<<32-t;let o=e.length?e[e.length-1]:0,r=kc.getPartial(o);return i.push(kc.partial(t+r&31,t+r>32?n:i.pop(),1)),i}},pP={bytes:{fromBits(e){let n=kc.bitLength(e)/8,i=new Uint8Array(n),o;for(let r=0;r<n;r++)r&3||(o=e[r/4]),i[r]=o>>>24,o<<=8;return i},toBits(e){let t=[],n,i=0;for(n=0;n<e.length;n++)i=i<<8|e[n],(n&3)===3&&(t.push(i),i=0);return n&3&&t.push(kc.partial(8*(n&3),i)),t}}},az={};az.sha1=function(e){e?(this._h=e._h.slice(0),this._buffer=e._buffer.slice(0),this._length=e._length):this.reset()};az.sha1.prototype={blockSize:512,reset:function(){let e=this;return e._h=this._init.slice(0),e._buffer=[],e._length=0,e},update:function(e){let t=this;typeof e=="string"&&(e=pP.utf8String.toBits(e));let n=t._buffer=kc.concat(t._buffer,e),i=t._length,o=t._length=i+kc.bitLength(e);if(o>9007199254740991)throw new Error("Cannot hash more than 2^53 - 1 bits");let r=new Uint32Array(n),s=0;for(let a=t.blockSize+i-(t.blockSize+i&t.blockSize-1);a<=o;a+=t.blockSize)t._block(r.subarray(16*s,16*(s+1))),s+=1;return n.splice(0,16*s),t},finalize:function(){let e=this,t=e._buffer,n=e._h;t=kc.concat(t,[kc.partial(1,1)]);for(let i=t.length+2;i&15;i++)t.push(0);for(t.push(Math.floor(e._length/4294967296)),t.push(e._length|0);t.length;)e._block(t.splice(0,16));return e.reset(),n},_init:[1732584193,4023233417,2562383102,271733878,3285377520],_key:[1518500249,1859775393,2400959708,3395469782],_f:function(e,t,n,i){if(e<=19)return t&n|~t&i;if(e<=39)return t^n^i;if(e<=59)return t&n|t&i|n&i;if(e<=79)return t^n^i},_S:function(e,t){return t<<e|t>>>32-e},_block:function(e){let t=this,n=t._h,i=Array(80);for(let l=0;l<16;l++)i[l]=e[l];let o=n[0],r=n[1],s=n[2],a=n[3],c=n[4];for(let l=0;l<=79;l++){l>=16&&(i[l]=t._S(1,i[l-3]^i[l-8]^i[l-14]^i[l-16]));let u=t._S(5,o)+t._f(l,r,s,a)+c+i[l]+t._key[Math.floor(l/20)]|0;c=a,a=s,s=t._S(30,r),r=o,o=u}n[0]=n[0]+o|0,n[1]=n[1]+r|0,n[2]=n[2]+s|0,n[3]=n[3]+a|0,n[4]=n[4]+c|0}};var cz={};cz.aes=class{constructor(e){let t=this;t._tables=[[[],[],[],[],[]],[[],[],[],[],[]]],t._tables[0][0][0]||t._precompute();let n=t._tables[0][4],i=t._tables[1],o=e.length,r,s,a,c=1;if(o!==4&&o!==6&&o!==8)throw new Error("invalid aes key size");for(t._key=[s=e.slice(0),a=[]],r=o;r<4*o+28;r++){let l=s[r-1];(r%o===0||o===8&&r%o===4)&&(l=n[l>>>24]<<24^n[l>>16&255]<<16^n[l>>8&255]<<8^n[l&255],r%o===0&&(l=l<<8^l>>>24^c<<24,c=c<<1^(c>>7)*283)),s[r]=s[r-o]^l}for(let l=0;r;l++,r--){let u=s[l&3?r:r-4];r<=4||l<4?a[l]=u:a[l]=i[0][n[u>>>24]]^i[1][n[u>>16&255]]^i[2][n[u>>8&255]]^i[3][n[u&255]]}}encrypt(e){return this._crypt(e,0)}decrypt(e){return this._crypt(e,1)}_precompute(){let e=this._tables[0],t=this._tables[1],n=e[4],i=t[4],o=[],r=[],s,a,c,l;for(let u=0;u<256;u++)r[(o[u]=u<<1^(u>>7)*283)^u]=u;for(let u=s=0;!n[u];u^=a||1,s=r[s]||1){let m=s^s<<1^s<<2^s<<3^s<<4;m=m>>8^m&255^99,n[u]=m,i[m]=u,l=o[c=o[a=o[u]]];let p=l*16843009^c*65537^a*257^u*16843008,y=o[m]*257^m*16843008;for(let f=0;f<4;f++)e[f][u]=y=y<<24^y>>>8,t[f][m]=p=p<<24^p>>>8}for(let u=0;u<5;u++)e[u]=e[u].slice(0),t[u]=t[u].slice(0)}_crypt(e,t){if(e.length!==4)throw new Error("invalid aes block size");let n=this._key[t],i=n.length/4-2,o=[0,0,0,0],r=this._tables[t],s=r[0],a=r[1],c=r[2],l=r[3],u=r[4],m=e[0]^n[0],p=e[t?3:1]^n[1],y=e[2]^n[2],f=e[t?1:3]^n[3],x=4,_,C,V;for(let L=0;L<i;L++)_=s[m>>>24]^a[p>>16&255]^c[y>>8&255]^l[f&255]^n[x],C=s[p>>>24]^a[y>>16&255]^c[f>>8&255]^l[m&255]^n[x+1],V=s[y>>>24]^a[f>>16&255]^c[m>>8&255]^l[p&255]^n[x+2],f=s[f>>>24]^a[m>>16&255]^c[p>>8&255]^l[y&255]^n[x+3],x+=4,m=_,p=C,y=V;for(let L=0;L<4;L++)o[t?3&-L:L]=u[m>>>24]<<24^u[p>>16&255]<<16^u[y>>8&255]<<8^u[f&255]^n[x++],_=m,m=p,p=y,y=f,f=_;return o}};var Ume={getRandomValues(e){let t=new Uint32Array(e.buffer),n=i=>{let o=987654321,r=4294967295;return function(){return o=36969*(o&65535)+(o>>16)&r,i=18e3*(i&65535)+(i>>16)&r,(((o<<16)+i&r)/4294967296+.5)*(Math.random()>.5?1:-1)}};for(let i=0,o;i<e.length;i+=4){let r=n((o||Math.random())*4294967296);o=r()*987654071,t[i/4]=r()*4294967296|0}return e}},lz={};lz.ctrGladman=class{constructor(e,t){this._prf=e,this._initIv=t,this._iv=t}reset(){this._iv=this._initIv}update(e){return this.calculate(this._prf,e,this._iv)}incWord(e){if((e>>24&255)===255){let t=e>>16&255,n=e>>8&255,i=e&255;t===255?(t=0,n===255?(n=0,i===255?i=0:++i):++n):++t,e=0,e+=t<<16,e+=n<<8,e+=i}else e+=1<<24;return e}incCounter(e){(e[0]=this.incWord(e[0]))===0&&(e[1]=this.incWord(e[1]))}calculate(e,t,n){let i;if(!(i=t.length))return[];let o=kc.bitLength(t);for(let r=0;r<i;r+=4){this.incCounter(n);let s=e.encrypt(n);t[r]^=s[0],t[r+1]^=s[1],t[r+2]^=s[2],t[r+3]^=s[3]}return kc.clamp(t,o)}};var R1={importKey(e){return new R1.hmacSha1(pP.bytes.toBits(e))},pbkdf2(e,t,n,i){if(n=n||1e4,i<0||n<0)throw new Error("invalid params to pbkdf2");let o=(i>>5)+1<<2,r,s,a,c,l,u=new ArrayBuffer(o),m=new DataView(u),p=0,y=kc;for(t=pP.bytes.toBits(t),l=1;p<(o||1);l++){for(r=s=e.encrypt(y.concat(t,[l])),a=1;a<n;a++)for(s=e.encrypt(s),c=0;c<s.length;c++)r[c]^=s[c];for(a=0;p<(o||1)&&a<r.length;a++)m.setInt32(p,r[a]),p+=4}return u.slice(0,i/8)}};R1.hmacSha1=class{constructor(e){let t=this,n=t._hash=az.sha1,i=[[],[]],o=n.prototype.blockSize/32;t._baseHash=[new n,new n],e.length>o&&(e=n.hash(e));for(let r=0;r<o;r++)i[0][r]=e[r]^909522486,i[1][r]=e[r]^1549556828;t._baseHash[0].update(i[0]),t._baseHash[1].update(i[1]),t._resultHash=new n(t._baseHash[0])}reset(){let e=this;e._resultHash=new e._hash(e._baseHash[0]),e._updated=!1}update(e){let t=this;t._updated=!0,t._resultHash.update(e)}digest(){let e=this,t=e._resultHash.finalize(),n=new e._hash(e._baseHash[1]).update(t).finalize();return e.reset(),n}encrypt(e){if(this._updated)throw new Error("encrypt on already updated hmac called!");return this.update(e),this.digest(e)}};var G1="Invalid pasword",Z1=16,I8e="raw",kme={name:"PBKDF2"},W8e={name:"HMAC"},P8e="SHA-1",v8e=Object.assign({hash:W8e},kme),Dme=Object.assign({iterations:1e3,hash:{name:P8e}},kme),w8e=["deriveBits"],yP=[8,12,16],bP=[16,24,32],Py=10,Bme=[0,0,0,0],N5=typeof crypto<"u",Yme=N5&&typeof crypto.subtle<"u",gf=pP.bytes,Ome=cz.aes,Kme=lz.ctrGladman,Hme=R1.hmacSha1,A5=class{constructor(t,n,i){Object.assign(this,{password:t,signed:n,strength:i-1,pendingInput:new Uint8Array(0)})}async append(t){let n=this;if(n.password){let o=xd(t,0,yP[n.strength]+2);await F8e(n,o,n.password),n.password=null,n.aesCtrGladman=new Kme(new Ome(n.keys.key),Array.from(Bme)),n.hmac=new Hme(n.keys.authentication),t=xd(t,yP[n.strength]+2)}let i=new Uint8Array(t.length-Py-(t.length-Py)%Z1);return zme(n,t,i,0,Py,!0)}flush(){let t=this,n=t.pendingInput,i=xd(n,0,n.length-Py),o=xd(n,n.length-Py),r=new Uint8Array(0);if(i.length){let a=gf.toBits(i);t.hmac.update(a);let c=t.aesCtrGladman.update(a);r=gf.fromBits(c)}let s=!0;if(t.signed){let a=xd(gf.fromBits(t.hmac.digest()),0,Py);for(let c=0;c<Py;c++)a[c]!=o[c]&&(s=!1)}return{valid:s,data:r}}},M5=class{constructor(t,n){Object.assign(this,{password:t,strength:n-1,pendingInput:new Uint8Array(0)})}async append(t){let n=this,i=new Uint8Array(0);n.password&&(i=await A8e(n,n.password),n.password=null,n.aesCtrGladman=new Kme(new Ome(n.keys.key),Array.from(Bme)),n.hmac=new Hme(n.keys.authentication));let o=new Uint8Array(i.length+t.length-t.length%Z1);return o.set(i,0),zme(n,t,o,i.length,0)}flush(){let t=this,n=new Uint8Array(0);if(t.pendingInput.length){let o=t.aesCtrGladman.update(gf.toBits(t.pendingInput));t.hmac.update(o),n=gf.fromBits(o)}let i=xd(gf.fromBits(t.hmac.digest()),0,Py);return{data:dz(n,i),signature:i}}};function zme(e,t,n,i,o,r){let s=t.length-o;e.pendingInput.length&&(t=dz(e.pendingInput,t),n=k8e(n,s-s%Z1));let a;for(a=0;a<=s-Z1;a+=Z1){let c=gf.toBits(xd(t,a,a+Z1));r&&e.hmac.update(c);let l=e.aesCtrGladman.update(c);r||e.hmac.update(l),n.set(gf.fromBits(l),a+i)}return e.pendingInput=xd(t,a),n}async function F8e(e,t,n){await Jme(e,n,xd(t,0,yP[e.strength]));let i=xd(t,yP[e.strength]),o=e.keys.passwordVerification;if(o[0]!=i[0]||o[1]!=i[1])throw new Error(G1)}async function A8e(e,t){let n=M8e(new Uint8Array(yP[e.strength]));return await Jme(e,t,n),dz(n,e.keys.passwordVerification)}async function Jme(e,t,n){let i=fP(t),o=await N8e(I8e,i,v8e,!1,w8e),r=await U8e(Object.assign({salt:n},Dme),o,8*(bP[e.strength]*2+2)),s=new Uint8Array(r);e.keys={key:gf.toBits(xd(s,0,bP[e.strength])),authentication:gf.toBits(xd(s,bP[e.strength],bP[e.strength]*2)),passwordVerification:xd(s,bP[e.strength]*2)}}function M8e(e){return N5&&typeof crypto.getRandomValues=="function"?crypto.getRandomValues(e):Ume.getRandomValues(e)}function N8e(e,t,n,i,o){return N5&&Yme&&typeof crypto.subtle.importKey=="function"?crypto.subtle.importKey(e,t,n,i,o):R1.importKey(t)}async function U8e(e,t,n){return N5&&Yme&&typeof crypto.subtle.deriveBits=="function"?await crypto.subtle.deriveBits(e,t,n):R1.pbkdf2(t,e.salt,Dme.iterations,n)}function dz(e,t){let n=e;return e.length+t.length&&(n=new Uint8Array(e.length+t.length),n.set(e,0),n.set(t,e.length)),n}function k8e(e,t){if(t&&t>e.length){let n=e;e=new Uint8Array(t),e.set(n,0)}return e}function xd(e,t,n){return e.subarray(t,n)}var uoi=T(S(),1);var E1=12,U5=class{constructor(t,n){let i=this;Object.assign(i,{password:t,passwordVerification:n}),$me(i,t)}append(t){let n=this;if(n.password){let i=Qme(n,t.subarray(0,E1));if(n.password=null,i[E1-1]!=n.passwordVerification)throw new Error(G1);t=t.subarray(E1)}return Qme(n,t)}flush(){return{valid:!0,data:new Uint8Array(0)}}},k5=class{constructor(t,n){let i=this;Object.assign(i,{password:t,passwordVerification:n}),$me(i,t)}append(t){let n=this,i,o;if(n.password){n.password=null;let r=crypto.getRandomValues(new Uint8Array(E1));r[E1-1]=n.passwordVerification,i=new Uint8Array(t.length+r.length),i.set(jme(n,r),0),o=E1}else i=new Uint8Array(t.length),o=0;return i.set(jme(n,t),o),i}flush(){return{data:new Uint8Array(0)}}};function Qme(e,t){let n=new Uint8Array(t.length);for(let i=0;i<t.length;i++)n[i]=ehe(e)^t[i],uz(e,n[i]);return n}function jme(e,t){let n=new Uint8Array(t.length);for(let i=0;i<t.length;i++)n[i]=ehe(e)^t[i],uz(e,t[i]);return n}function $me(e,t){e.keys=[305419896,591751049,878082192],e.crcKey0=new Wy(e.keys[0]),e.crcKey2=new Wy(e.keys[2]);for(let n=0;n<t.length;n++)uz(e,t.charCodeAt(n))}function uz(e,t){e.crcKey0.append([t]),e.keys[0]=~e.crcKey0.get(),e.keys[1]=qme(e.keys[1]+the(e.keys[0])),e.keys[1]=qme(Math.imul(e.keys[1],134775813)+1),e.crcKey2.append([e.keys[1]>>>24]),e.keys[2]=~e.crcKey2.get()}function ehe(e){let t=e.keys[2]|2;return the(Math.imul(t,t^1)>>>8)}function the(e){return e&255}function qme(e){return e&4294967295}var B5="deflate",Y5="inflate",D5="Invalid signature",mz=class{constructor(t,{signature:n,password:i,signed:o,compressed:r,zipCrypto:s,passwordVerification:a,encryptionStrength:c},{chunkSize:l}){let u=!!i;Object.assign(this,{signature:n,encrypted:u,signed:o,compressed:r,inflate:r&&new t({chunkSize:l}),crc32:o&&new Wy,zipCrypto:s,decrypt:u&&s?new U5(i,a):new A5(i,o,c)})}async append(t){let n=this;return n.encrypted&&t.length&&(t=await n.decrypt.append(t)),n.compressed&&t.length&&(t=await n.inflate.append(t)),(!n.encrypted||n.zipCrypto)&&n.signed&&t.length&&n.crc32.append(t),t}async flush(){let t=this,n,i=new Uint8Array(0);if(t.encrypted){let o=t.decrypt.flush();if(!o.valid)throw new Error(D5);i=o.data}if((!t.encrypted||t.zipCrypto)&&t.signed){let o=new DataView(new Uint8Array(4).buffer);if(n=t.crc32.get(),o.setUint32(0,n),t.signature!=o.getUint32(0,!1))throw new Error(D5)}return t.compressed&&(i=await t.inflate.append(i)||new Uint8Array(0),await t.inflate.flush()),{data:i,signature:n}}},hz=class{constructor(t,{encrypted:n,signed:i,compressed:o,level:r,zipCrypto:s,password:a,passwordVerification:c,encryptionStrength:l},{chunkSize:u}){Object.assign(this,{encrypted:n,signed:i,compressed:o,deflate:o&&new t({level:r||5,chunkSize:u}),crc32:i&&new Wy,zipCrypto:s,encrypt:n&&s?new k5(a,c):new M5(a,l)})}async append(t){let n=this,i=t;return n.compressed&&t.length&&(i=await n.deflate.append(t)),n.encrypted&&i.length&&(i=await n.encrypt.append(i)),(!n.encrypted||n.zipCrypto)&&n.signed&&t.length&&n.crc32.append(t),i}async flush(){let t=this,n,i=new Uint8Array(0);if(t.compressed&&(i=await t.deflate.flush()||new Uint8Array(0)),t.encrypted){i=await t.encrypt.append(i);let o=t.encrypt.flush();n=o.signature;let r=new Uint8Array(i.length+o.data.length);r.set(i,0),r.set(o.data,i.length),i=r}return(!t.encrypted||t.zipCrypto)&&t.signed&&(n=t.crc32.get()),{data:i,signature:n}}};function nhe(e,t,n){if(t.codecType.startsWith(B5))return new hz(e,t,n);if(t.codecType.startsWith(Y5))return new mz(e,t,n)}var xoi=T(S(),1);var ihe="init",ohe="append",fz="flush",D8e="message",rhe=!0,O5=(e,t,n,i,o,r,s)=>(Object.assign(e,{busy:!0,codecConstructor:t,options:Object.assign({},n),scripts:s,terminate(){e.worker&&!e.busy&&(e.worker.terminate(),e.interface=null)},onTaskFinished(){e.busy=!1,o(e)}}),r?Y8e(e,i):B8e(e,i));function B8e(e,t){let n=nhe(e.codecConstructor,e.options,t);return{async append(i){try{return await n.append(i)}catch(o){throw e.onTaskFinished(),o}},async flush(){try{return await n.flush()}finally{e.onTaskFinished()}},abort(){e.onTaskFinished()}}}function Y8e(e,t){let n,i={type:"module"};if(!e.interface){if(!rhe)e.worker=o(i,t.baseURL);else try{e.worker=o({},t.baseURL)}catch{rhe=!1,e.worker=o(i,t.baseURL)}e.worker.addEventListener(D8e,a,!1),e.interface={append(c){return r({type:ohe,data:c})},flush(){return r({type:fz})},abort(){e.onTaskFinished()}}}return e.interface;function o(c,l){let u,m;u=e.scripts[0],typeof u=="function"&&(u=u());try{m=new URL(u,l)}catch{m=u}return new Worker(m,c)}async function r(c){if(!n){let l=e.options,u=e.scripts.slice(1);await s({scripts:u,type:ihe,options:l,config:{chunkSize:t.chunkSize}})}return s(c)}function s(c){let l=e.worker,u=new Promise((m,p)=>n={resolve:m,reject:p});try{if(c.data)try{c.data=c.data.buffer,l.postMessage(c,[c.data])}catch{l.postMessage(c)}else l.postMessage(c)}catch(m){n.reject(m),n=null,e.onTaskFinished()}return u}function a(c){let l=c.data;if(n){let u=l.error,m=l.type;if(u){let p=new Error(u.message);p.stack=u.stack,n.reject(p),n=null,e.onTaskFinished()}else if(m==ihe||m==fz||m==ohe){let p=l.data;m==fz?(n.resolve({data:new Uint8Array(p),signature:l.signature}),n=null,e.onTaskFinished()):n.resolve(p&&new Uint8Array(p))}}}}var F_=[],pz=[];function K5(e,t,n){let o=!(!t.compressed&&!t.signed&&!t.encrypted)&&(t.useWebWorkers||t.useWebWorkers===void 0&&n.useWebWorkers),r=o&&n.workerScripts?n.workerScripts[t.codecType]:[];if(F_.length<n.maxWorkers){let a={};return F_.push(a),O5(a,e,t,n,s,o,r)}else{let a=F_.find(c=>!c.busy);return a?(she(a),O5(a,e,t,n,s,o,r)):new Promise(c=>pz.push({resolve:c,codecConstructor:e,options:t,webWorker:o,scripts:r}))}function s(a){if(pz.length){let[{resolve:c,codecConstructor:l,options:u,webWorker:m,scripts:p}]=pz.splice(0,1);c(O5(a,l,u,n,s,m,p))}else a.worker?(she(a),Number.isFinite(n.terminateWorkerTimeout)&&n.terminateWorkerTimeout>=0&&(a.terminateTimeout=setTimeout(()=>{F_=F_.filter(c=>c!=a),a.terminate()},n.terminateWorkerTimeout))):F_=F_.filter(c=>c!=a)}}function she(e){e.terminateTimeout&&(clearTimeout(e.terminateTimeout),e.terminateTimeout=null)}var Loi=T(S(),1);var che="Abort error";async function H5(e,t,n,i,o,r,s){let a=Math.max(r.chunkSize,64);return c();async function c(l=0,u=0){let m=s.signal,p=o();if(l<p){bz(m,e);let y=await t.readUint8Array(l+i,Math.min(a,p-l)),f=y.length;bz(m,e);let x=await e.append(y);if(bz(m,e),u+=await ahe(n,x),s.onprogress)try{s.onprogress(l+f,p)}catch{}return c(l+a,u)}else{let y=await e.flush();return u+=await ahe(n,y.data),{signature:y.signature,length:u}}}}function bz(e,t){if(e&&e.aborted)throw t.abort(),new Error(che)}async function ahe(e,t){return t.length&&await e.writeUint8Array(t),t.length}var Zoi=T(S(),1);var yz="text/plain";var z5=class{constructor(){this.size=0}init(){this.initialized=!0}},J5=class extends z5{},gP=class extends z5{writeUint8Array(t){this.size+=t.length}},Q5=class extends J5{constructor(t){super(),this.blobReader=new A_(new Blob([t],{type:yz}))}init(){super.init(),this.blobReader.init(),this.size=this.blobReader.size}readUint8Array(t,n){return this.blobReader.readUint8Array(t,n)}},j5=class extends gP{constructor(t){super(),this.encoding=t,this.blob=new Blob([],{type:yz})}writeUint8Array(t){super.writeUint8Array(t),this.blob=new Blob([this.blob,t.buffer],{type:yz})}getData(){if(this.blob.text)return this.blob.text();{let t=new FileReader;return new Promise((n,i)=>{t.onload=o=>n(o.target.result),t.onerror=()=>i(t.error),t.readAsText(this.blob,this.encoding)})}}};var q5=class extends gP{constructor(t){super(),this.data="data:"+(t||"")+";base64,",this.pending=[]}writeUint8Array(t){super.writeUint8Array(t);let n=0,i=this.pending,o=this.pending.length;for(this.pending="",n=0;n<Math.floor((o+t.length)/3)*3-o;n++)i+=String.fromCharCode(t[n]);for(;n<t.length;n++)this.pending+=String.fromCharCode(t[n]);i.length>2?this.data+=btoa(i):this.pending=i}getData(){return this.data+btoa(this.pending)}},A_=class extends J5{constructor(t){super(),this.blob=t,this.size=t.size}async readUint8Array(t,n){if(this.blob.arrayBuffer)return new Uint8Array(await this.blob.slice(t,t+n).arrayBuffer());{let i=new FileReader;return new Promise((o,r)=>{i.onload=s=>o(new Uint8Array(s.target.result)),i.onerror=()=>r(i.error),i.readAsArrayBuffer(this.blob.slice(t,t+n))})}}},X1=class extends gP{constructor(t){super(),this.contentType=t,this.arrayBuffersMaxlength=8,lhe(this)}writeUint8Array(t){super.writeUint8Array(t),this.arrayBuffers.length==this.arrayBuffersMaxlength&&dhe(this),this.arrayBuffers.push(t.buffer)}getData(){return this.blob||(this.arrayBuffers.length&&dhe(this),this.blob=this.pendingBlob,lhe(this)),this.blob}};function lhe(e){e.pendingBlob=new Blob([],{type:e.contentType}),e.arrayBuffers=[]}function dhe(e){e.pendingBlob=new Blob([e.pendingBlob,...e.arrayBuffers],{type:e.contentType}),e.arrayBuffers=[]}var Ooi=T(S(),1);var Eoi=T(S(),1);var I1="/",gz=new Date(2107,11,31),xz=new Date(1980,0,1);var voi=T(S(),1);var Ioi=T(S(),1),O8e="\0\u263A\u263B\u2665\u2666\u2663\u2660\u2022\u25D8\u25CB\u25D9\u2642\u2640\u266A\u266B\u263C\u25BA\u25C4\u2195\u203C\xB6\xA7\u25AC\u21A8\u2191\u2193\u2192\u2190\u221F\u2194\u25B2\u25BC !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u2302\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0 ".split(""),uhe=e=>{let t="";for(let n=0;n<e.length;n++)t+=O8e[e[n]];return t};var $5=K8e;function K8e(e,t){if(t&&t.trim().toLowerCase()=="cp437")return uhe(e);if(typeof TextDecoder>"u"){let n=new FileReader;return new Promise((i,o)=>{n.onload=r=>i(r.target.result),n.onerror=()=>o(n.error),n.readAsText(new Blob([e]))})}else return new TextDecoder(t).decode(e)}var Foi=T(S(),1),H8e=["filename","rawFilename","directory","encrypted","compressedSize","uncompressedSize","lastModDate","rawLastModDate","comment","rawComment","signature","extraField","rawExtraField","bitFlag","extraFieldZip64","extraFieldUnicodePath","extraFieldUnicodeComment","extraFieldAES","filenameUTF8","commentUTF8","offset","zip64","compressionMethod","extraFieldNTFS","lastAccessDate","creationDate","extraFieldExtendedTimestamp","version","versionMadeBy","msDosCompatible","internalFileAttribute","externalFileAttribute"],L0=class{constructor(t){H8e.forEach(n=>this[n]=t[n])}};var Sz="File format is not recognized",j8e="End of central directory not found",q8e="End of Zip64 central directory not found",$8e="End of Zip64 central directory locator not found",e7e="Central directory header not found",t7e="Local file header not found",n7e="Zip64 extra field not found",i7e="File contains encrypted entry",o7e="Encryption method not supported",mhe="Compression method not supported",hhe="utf-8",fhe="cp437",phe=["uncompressedSize","compressedSize","offset"],cU=class{constructor(t,n={}){Object.assign(this,{reader:t,options:n,config:F5()})}async*getEntriesGenerator(t={}){let n=this,i=n.reader;if(i.initialized||await i.init(),i.size<22)throw new Error(Sz);let o=await l7e(i,101010256,i.size,22,65535*16);if(!o)throw new Error(j8e);let r=ic(o),s=$s(r,12),a=$s(r,16),c=_d(r,8),l=0;if(a==4294967295||s==4294967295||c==65535){let y=await vy(i,o.offset-20,20),f=ic(y);if($s(f,0)!=117853008)throw new Error(q8e);a=eU(f,8);let x=await vy(i,a,56),_=ic(x),C=o.offset-20-56;if($s(_,0)!=101075792&&a!=C){let V=a;a=C,l=a-V,x=await vy(i,a,56),_=ic(x)}if($s(_,0)!=101075792)throw new Error($8e);c=eU(_,32),s=eU(_,40),a-=s}if(a<0||a>=i.size)throw new Error(Sz);let u=0,m=await vy(i,a,s),p=ic(m);if(s){let y=o.offset-s;if($s(p,u)!=33639248&&a!=y){let f=a;a=y,l=a-f,m=await vy(i,a,s),p=ic(m)}}if(a<0||a>=i.size)throw new Error(Sz);for(let y=0;y<c;y++){let f=new Vz(i,n.config,n.options);if($s(p,u)!=33639248)throw new Error(e7e);yhe(f,p,u+6);let x=!!f.bitFlag.languageEncodingFlag,_=u+46,C=_+f.filenameLength,V=C+f.extraFieldLength,L=_d(p,u+4),Z=(L&0)==0;Object.assign(f,{versionMadeBy:L,msDosCompatible:Z,compressedSize:0,uncompressedSize:0,commentLength:_d(p,u+32),directory:Z&&(P1(p,u+38)&16)==16,offset:$s(p,u+42)+l,internalFileAttribute:$s(p,u+34),externalFileAttribute:$s(p,u+38),rawFilename:m.subarray(_,C),filenameUTF8:x,commentUTF8:x,rawExtraField:m.subarray(C,V)});let G=V+f.commentLength;f.rawComment=m.subarray(V,G);let X=W1(n,t,"filenameEncoding"),P=W1(n,t,"commentEncoding"),[v,F]=await Promise.all([$5(f.rawFilename,f.filenameUTF8?hhe:X||fhe),$5(f.rawComment,f.commentUTF8?hhe:P||fhe)]);f.filename=v,f.comment=F,!f.directory&&f.filename.endsWith(I1)&&(f.directory=!0),await ghe(f,f,p,u+6);let M=new L0(f);if(M.getData=(b,R)=>f.getData(b,M,R),u=G,t.onprogress)try{t.onprogress(y+1,c,new L0(f))}catch{}yield M}return!0}async getEntries(t={}){let n=[],i=this.getEntriesGenerator(t),o=i.next();for(;!(await o).done;)n.push((await o).value),o=i.next();return n}async close(){}};var Vz=class{constructor(t,n,i){Object.assign(this,{reader:t,config:n,options:i})}async getData(t,n,i={}){let o=this,{reader:r,offset:s,extraFieldAES:a,compressionMethod:c,config:l,bitFlag:u,signature:m,rawLastModDate:p,compressedSize:y}=o,f=o.localDirectory={};r.initialized||await r.init();let x=await vy(r,s,30),_=ic(x),C=W1(o,i,"password");if(C=C&&C.length&&C,a&&a.originalCompressionMethod!=99)throw new Error(mhe);if(c!=0&&c!=8)throw new Error(mhe);if($s(_,0)!=67324752)throw new Error(t7e);yhe(f,_,4),x=await vy(r,s,30+f.filenameLength+f.extraFieldLength),f.rawExtraField=x.subarray(30+f.filenameLength),await ghe(o,f,_,4),n.lastAccessDate=f.lastAccessDate,n.creationDate=f.creationDate;let V=o.encrypted&&f.encrypted,L=V&&!a;if(V){if(!L&&a.strength===void 0)throw new Error(o7e);if(!C)throw new Error(i7e)}let Z=await K5(l.Inflate,{codecType:Y5,password:C,zipCrypto:L,encryptionStrength:a&&a.strength,signed:W1(o,i,"checkSignature"),passwordVerification:L&&(u.dataDescriptor?p>>>8&255:m>>>24&255),signature:m,compressed:c!=0,encrypted:V,useWebWorkers:W1(o,i,"useWebWorkers")},l);t.initialized||await t.init();let G=W1(o,i,"signal"),X=s+30+f.filenameLength+f.extraFieldLength;return await H5(Z,r,t,X,()=>y,l,{onprogress:i.onprogress,signal:G}),t.getData()}};function yhe(e,t,n){let i=e.rawBitFlag=_d(t,n+2),o=(i&1)==1,r=$s(t,n+6);Object.assign(e,{encrypted:o,version:_d(t,n),bitFlag:{level:(i&6)>>1,dataDescriptor:(i&8)==8,languageEncodingFlag:(i&2048)==2048},rawLastModDate:r,lastModDate:d7e(r),filenameLength:_d(t,n+22),extraFieldLength:_d(t,n+24)})}async function ghe(e,t,n,i){let o=t.rawExtraField,r=t.extraField=new Map,s=ic(new Uint8Array(o)),a=0;try{for(;a<o.length;){let x=_d(s,a),_=_d(s,a+2);r.set(x,{type:x,data:o.slice(a+4,a+4+_)}),a+=4+_}}catch{}let c=_d(n,i+4);t.signature=$s(n,i+10),t.uncompressedSize=$s(n,i+18),t.compressedSize=$s(n,i+14);let l=r.get(1);l&&(r7e(l,t),t.extraFieldZip64=l);let u=r.get(28789);u&&(await bhe(u,"filename","rawFilename",t,e),t.extraFieldUnicodePath=u);let m=r.get(25461);m&&(await bhe(m,"comment","rawComment",t,e),t.extraFieldUnicodeComment=m);let p=r.get(39169);p?(s7e(p,t,c),t.extraFieldAES=p):t.compressionMethod=c;let y=r.get(10);y&&(a7e(y,t),t.extraFieldNTFS=y);let f=r.get(21589);f&&(c7e(f,t),t.extraFieldExtendedTimestamp=f)}function r7e(e,t){t.zip64=!0;let n=ic(e.data);e.values=[];for(let o=0;o<Math.floor(e.data.length/8);o++)e.values.push(eU(n,0+o*8));let i=phe.filter(o=>t[o]==4294967295);for(let o=0;o<i.length;o++)e[i[o]]=e.values[o];phe.forEach(o=>{if(t[o]==4294967295)if(e[o]!==void 0)t[o]=e[o];else throw new Error(n7e)})}async function bhe(e,t,n,i,o){let r=ic(e.data);e.version=P1(r,0),e.signature=$s(r,1);let s=new Wy;s.append(o[n]);let a=ic(new Uint8Array(4));a.setUint32(0,s.get(),!0),e[t]=await $5(e.data.subarray(5)),e.valid=!o.bitFlag.languageEncodingFlag&&e.signature==$s(a,0),e.valid&&(i[t]=e[t],i[t+"UTF8"]=!0)}function s7e(e,t,n){let i=ic(e.data);e.vendorVersion=P1(i,0),e.vendorId=P1(i,2);let o=P1(i,4);e.strength=o,e.originalCompressionMethod=n,t.compressionMethod=e.compressionMethod=_d(i,5)}function a7e(e,t){let n=ic(e.data),i=4,o;try{for(;i<e.data.length&&!o;){let r=_d(n,i),s=_d(n,i+2);r==1&&(o=e.data.slice(i+4,i+4+s)),i+=4+s}}catch{}try{if(o&&o.length==24){let r=ic(o),s=r.getBigUint64(0,!0),a=r.getBigUint64(8,!0),c=r.getBigUint64(16,!0);Object.assign(e,{rawLastModDate:s,rawLastAccessDate:a,rawCreationDate:c});let l=Cz(s),u=Cz(a),m=Cz(c),p={lastModDate:l,lastAccessDate:u,creationDate:m};Object.assign(e,p),Object.assign(t,p)}}catch{}}function c7e(e,t){let n=ic(e.data),i=P1(n,0),o=[],r=[];(i&1)==1&&(o.push("lastModDate"),r.push("rawLastModDate")),(i&2)==2&&(o.push("lastAccessDate"),r.push("rawLastAccessDate")),(i&4)==4&&(o.push("creationDate"),r.push("rawCreationDate"));let s=1;o.forEach((a,c)=>{if(e.data.length>=s+4){let l=$s(n,s);t[a]=e[a]=new Date(l*1e3);let u=r[c];e[u]=l}s+=4})}async function l7e(e,t,n,i,o){let r=new Uint8Array(4),s=ic(r);u7e(s,0,t);let a=i+o;return await c(i)||await c(Math.min(a,n));async function c(l){let u=n-l,m=await vy(e,u,l);for(let p=m.length-i;p>=0;p--)if(m[p]==r[0]&&m[p+1]==r[1]&&m[p+2]==r[2]&&m[p+3]==r[3])return{offset:u+p,buffer:m.slice(p,p+i).buffer}}}function W1(e,t,n){return t[n]===void 0?e.options[n]:t[n]}function d7e(e){let t=(e&4294901760)>>16,n=e&65535;try{return new Date(1980+((t&65024)>>9),((t&480)>>5)-1,t&31,(n&63488)>>11,(n&2016)>>5,(n&31)*2,0)}catch{}}function Cz(e){return new Date(Number(e/BigInt(1e4)-BigInt(116444736e5)))}function P1(e,t){return e.getUint8(t)}function _d(e,t){return e.getUint16(t,!0)}function $s(e,t){return e.getUint32(t,!0)}function eU(e,t){return Number(e.getBigUint64(t,!0))}function u7e(e,t,n){e.setUint32(t,n,!0)}function ic(e){return new DataView(e.buffer)}function vy(e,t,n){return e.readUint8Array(t,n)}var eri=T(S(),1);var b7e="File already exists",y7e="Zip file comment exceeds 64KB",g7e="File entry comment exceeds 64KB",x7e="File entry name exceeds 64KB",The="Version exceeds 65535",_7e="The strength must equal 1, 2, or 3",T7e="Extra field type exceeds 65535",S7e="Extra field data exceeds 64KB",Fz="Zip64 is not supported",She=new Uint8Array([7,0,2,0,65,69,3,0,0]),Che=24,vz=0,uU=class{constructor(t,n={}){Object.assign(this,{writer:t,options:n,config:F5(),files:new Map,offset:t.size,pendingCompressedSize:0,pendingEntries:[],pendingAddFileCalls:new Set})}async add(t="",n,i={}){let o=this;if(vz<o.config.maxWorkers){vz++;let r;try{return r=C7e(o,t,n,i),this.pendingAddFileCalls.add(r),await r}finally{this.pendingAddFileCalls.delete(r),vz--;let s=o.pendingEntries.shift();s&&o.add(s.name,s.reader,s.options).then(s.resolve).catch(s.reject)}}else return new Promise((r,s)=>o.pendingEntries.push({name:t,reader:n,options:i,resolve:r,reject:s}))}async close(t=new Uint8Array(0),n={}){for(;this.pendingAddFileCalls.size;)await Promise.all(Array.from(this.pendingAddFileCalls));return await R7e(this,t,n),this.writer.getData()}};async function C7e(e,t,n,i){if(t=t.trim(),i.directory&&!t.endsWith(I1)?t+=I1:i.directory=t.endsWith(I1),e.files.has(t))throw new Error(b7e);let o=fP(t);if(o.length>65535)throw new Error(x7e);let r=i.comment||"",s=fP(r);if(s.length>65535)throw new Error(g7e);let a=e.options.version||i.version||0;if(a>65535)throw new Error(The);let c=e.options.versionMadeBy||i.versionMadeBy||20;if(c>65535)throw new Error(The);let l=_a(e,i,"lastModDate")||new Date,u=_a(e,i,"lastAccessDate"),m=_a(e,i,"creationDate"),p=_a(e,i,"password"),y=_a(e,i,"encryptionStrength")||3,f=_a(e,i,"zipCrypto");if(p!==void 0&&y!==void 0&&(y<1||y>3))throw new Error(_7e);let x=new Uint8Array(0),_=i.extraField;if(_){let N=0,B=0;_.forEach(k=>N+=4+k.length),x=new Uint8Array(N),_.forEach((k,O)=>{if(O>65535)throw new Error(T7e);if(k.length>65535)throw new Error(S7e);ta(x,new Uint16Array([O]),B),ta(x,new Uint16Array([k.length]),B+2),ta(x,k,B+4),B+=4+k.length})}let C=_a(e,i,"extendedTimestamp");C===void 0&&(C=!0);let V=0,L=_a(e,i,"keepOrder");L===void 0&&(L=!0);let Z=0,G=_a(e,i,"msDosCompatible");G===void 0&&(G=!0);let X=_a(e,i,"internalFileAttribute")||0,P=_a(e,i,"externalFileAttribute")||0;n&&(n.initialized||await n.init(),Z=n.size,V=G7e(Z));let v=i.zip64||e.options.zip64||!1;if(e.offset+e.pendingCompressedSize>=4294967295||Z>=4294967295||V>=4294967295){if(i.zip64===!1||e.options.zip64===!1||!L)throw new Error(Fz);v=!0}e.pendingCompressedSize+=V,await Promise.resolve();let F=_a(e,i,"level"),M=_a(e,i,"useWebWorkers"),b=_a(e,i,"bufferedWrite"),R=_a(e,i,"dataDescriptor"),E=_a(e,i,"dataDescriptorSignature"),I=_a(e,i,"signal");R===void 0&&(R=!0),R&&E===void 0&&(E=!1);let w=await V7e(e,t,n,Object.assign({},i,{rawFilename:o,rawComment:s,version:a,versionMadeBy:c,lastModDate:l,lastAccessDate:u,creationDate:m,rawExtraField:x,zip64:v,password:p,level:F,useWebWorkers:M,encryptionStrength:y,extendedTimestamp:C,zipCrypto:f,bufferedWrite:b,keepOrder:L,dataDescriptor:R,dataDescriptorSignature:E,signal:I,msDosCompatible:G,internalFileAttribute:X,externalFileAttribute:P}));return V&&(e.pendingCompressedSize-=V),Object.assign(w,{name:t,comment:r,extraField:_}),new L0(w)}async function V7e(e,t,n,i){let o=e.files,r=e.writer,s=Array.from(o.values()).pop(),a={},c,l,u;o.set(t,a);try{let m,p,y;if(i.keepOrder&&(m=s&&s.lock),a.lock=y=new Promise(f=>u=f),i.bufferedWrite||e.lockWrite||!i.dataDescriptor?(p=new X1,p.init(),c=!0):(e.lockWrite=new Promise(f=>l=f),r.initialized||await r.init(),p=r),a=await L7e(n,p,e.config,i),a.lock=y,o.set(t,a),a.filename=t,c){let f=0,x=p.getData();await Promise.all([e.lockWrite,m]);let _;do _=Array.from(o.values()).find(C=>C.writingBufferedData),_&&await _.lock;while(_&&_.lock);if(a.writingBufferedData=!0,!i.dataDescriptor){let V=await Vhe(x,0,26),L=new DataView(V);(!a.encrypted||i.zipCrypto)&&ho(L,14,a.signature),a.zip64?(ho(L,18,4294967295),ho(L,22,4294967295)):(ho(L,18,a.compressedSize),ho(L,22,a.uncompressedSize)),await r.writeUint8Array(new Uint8Array(V)),f=26}await Z7e(r,x,f),delete a.writingBufferedData}if(a.offset=e.offset,a.zip64){let f=eh(a.rawExtraFieldZip64);Il(f,20,BigInt(a.offset))}else if(a.offset>=4294967295)throw new Error(Fz);return e.offset+=a.length,a}catch(m){throw(c&&a.writingBufferedData||!c&&a.dataWritten)&&(m.corruptedEntry=e.hasCorruptedEntries=!0,a.uncompressedSize&&(e.offset+=a.uncompressedSize)),o.delete(t),m}finally{u(),l&&l()}}async function L7e(e,t,n,i){let{rawFilename:o,lastAccessDate:r,creationDate:s,password:a,level:c,zip64:l,zipCrypto:u,dataDescriptor:m,dataDescriptorSignature:p,directory:y,version:f,versionMadeBy:x,rawComment:_,rawExtraField:C,useWebWorkers:V,onprogress:L,signal:Z,encryptionStrength:G,extendedTimestamp:X,msDosCompatible:P,internalFileAttribute:v,externalFileAttribute:F}=i,M=!!(a&&a.length),b=c!==0&&!y,R;if(M&&!u){R=new Uint8Array(She.length+2);let Me=eh(R);Jo(Me,0,39169),ta(R,She,2),mU(Me,8,G)}else R=new Uint8Array(0);let E,I;if(X){I=new Uint8Array(9+(r?4:0)+(s?4:0));let Me=eh(I);Jo(Me,0,21589),Jo(Me,2,I.length-4);let ve=1+(r?2:0)+(s?4:0);mU(Me,4,ve),ho(Me,5,Math.floor(i.lastModDate.getTime()/1e3)),r&&ho(Me,9,Math.floor(r.getTime()/1e3)),s&&ho(Me,13,Math.floor(s.getTime()/1e3));try{E=new Uint8Array(36);let ke=eh(E),ct=wz(i.lastModDate);Jo(ke,0,10),Jo(ke,2,32),Jo(ke,8,1),Jo(ke,10,24),Il(ke,12,ct),Il(ke,20,wz(r)||ct),Il(ke,28,wz(s)||ct)}catch{E=new Uint8Array(0)}}else E=I=new Uint8Array(0);let w={version:f||20,versionMadeBy:x,zip64:l,directory:!!y,filenameUTF8:!0,rawFilename:o,commentUTF8:!0,rawComment:_,rawExtraFieldZip64:l?new Uint8Array(Che+4):new Uint8Array(0),rawExtraFieldExtendedTimestamp:I,rawExtraFieldNTFS:E,rawExtraFieldAES:R,rawExtraField:C,extendedTimestamp:X,msDosCompatible:P,internalFileAttribute:v,externalFileAttribute:F},N=w.uncompressedSize=0,B=2048;m&&(B=B|8);let k=0;b&&(k=8),l&&(w.version=w.version>45?w.version:45),M&&(B=B|1,u||(w.version=w.version>51?w.version:51,k=99,b&&(w.rawExtraFieldAES[9]=8))),w.compressionMethod=k;let O=w.headerArray=new Uint8Array(26),U=eh(O);Jo(U,0,w.version),Jo(U,2,B),Jo(U,4,k);let J=new Uint32Array(1),z=eh(J),ee;i.lastModDate<xz?ee=xz:i.lastModDate>gz?ee=gz:ee=i.lastModDate,Jo(z,0,(ee.getHours()<<6|ee.getMinutes())<<5|ee.getSeconds()/2),Jo(z,2,(ee.getFullYear()-1980<<4|ee.getMonth()+1)<<5|ee.getDate());let K=J[0];ho(U,6,K),Jo(U,22,o.length);let j=R.length+I.length+E.length+w.rawExtraField.length;Jo(U,24,j);let q=new Uint8Array(30+o.length+j),be=eh(q);ho(be,0,67324752),ta(q,O,4),ta(q,o,30),ta(q,R,30+o.length),ta(q,I,30+o.length+R.length),ta(q,E,30+o.length+R.length+I.length),ta(q,w.rawExtraField,30+o.length+R.length+I.length+E.length);let Te,ae=0;if(e){let Me=await K5(n.Deflate,{codecType:B5,level:c,password:a,encryptionStrength:G,zipCrypto:M&&u,passwordVerification:M&&u&&K>>8&255,signed:!0,compressed:b,encrypted:M,useWebWorkers:V},n);await t.writeUint8Array(q),w.dataWritten=!0,Te=await H5(Me,e,t,0,()=>e.size,n,{onprogress:L,signal:Z}),N=w.uncompressedSize=e.size,ae=Te.length}else await t.writeUint8Array(q),w.dataWritten=!0;let xe=new Uint8Array(0),_e,Ve=0;if(m&&(xe=new Uint8Array(l?p?24:20:p?16:12),_e=eh(xe),p&&(Ve=4,ho(_e,0,134695760))),e){let Me=Te.signature;if((!M||u)&&Me!==void 0&&(ho(U,10,Me),w.signature=Me,m&&ho(_e,Ve,Me)),l){let ve=eh(w.rawExtraFieldZip64);Jo(ve,0,1),Jo(ve,2,Che),ho(U,14,4294967295),Il(ve,12,BigInt(ae)),ho(U,18,4294967295),Il(ve,4,BigInt(N)),m&&(Il(_e,Ve+4,BigInt(ae)),Il(_e,Ve+12,BigInt(N)))}else ho(U,14,ae),ho(U,18,N),m&&(ho(_e,Ve+4,ae),ho(_e,Ve+8,N))}m&&await t.writeUint8Array(xe);let Ie=q.length+ae+xe.length;return Object.assign(w,{compressedSize:ae,lastModDate:ee,rawLastModDate:K,creationDate:s,lastAccessDate:r,encrypted:M,length:Ie}),w}async function R7e(e,t,n){let i=e.writer,o=e.files,r=0,s=0,a=e.offset,c=o.size;for(let[,p]of o)s+=46+p.rawFilename.length+p.rawComment.length+p.rawExtraFieldZip64.length+p.rawExtraFieldAES.length+p.rawExtraFieldExtendedTimestamp.length+p.rawExtraFieldNTFS.length+p.rawExtraField.length;let l=n.zip64||e.options.zip64||!1;if(a>=4294967295||s>=4294967295||c>=65535){if(n.zip64===!1||e.options.zip64===!1)throw new Error(Fz);l=!0}let u=new Uint8Array(s+(l?98:22)),m=eh(u);if(t&&t.length)if(t.length<=65535)Jo(m,r+20,t.length);else throw new Error(y7e);for(let[p,y]of Array.from(o.values()).entries()){let{rawFilename:f,rawExtraFieldZip64:x,rawExtraFieldAES:_,rawExtraField:C,rawComment:V,versionMadeBy:L,headerArray:Z,directory:G,zip64:X,msDosCompatible:P,internalFileAttribute:v,externalFileAttribute:F}=y,M,b;if(y.extendedTimestamp){b=y.rawExtraFieldNTFS,M=new Uint8Array(9);let E=eh(M);Jo(E,0,21589),Jo(E,2,M.length-4),mU(E,4,1),ho(E,5,Math.floor(y.lastModDate.getTime()/1e3))}else b=M=new Uint8Array(0);let R=x.length+_.length+M.length+b.length+C.length;if(ho(m,r,33639248),Jo(m,r+4,L),ta(u,Z,r+6),Jo(m,r+30,R),Jo(m,r+32,V.length),ho(m,r+34,v),F?ho(m,r+38,F):G&&P&&mU(m,r+38,16),X?ho(m,r+42,4294967295):ho(m,r+42,y.offset),ta(u,f,r+46),ta(u,x,r+46+f.length),ta(u,_,r+46+f.length+x.length),ta(u,M,r+46+f.length+x.length+_.length),ta(u,b,r+46+f.length+x.length+_.length+M.length),ta(u,C,r+46+f.length+x.length+_.length+M.length+b.length),ta(u,V,r+46+f.length+R),r+=46+f.length+R+V.length,n.onprogress)try{n.onprogress(p+1,o.size,new L0(y))}catch{}}l&&(ho(m,r,101075792),Il(m,r+4,BigInt(44)),Jo(m,r+12,45),Jo(m,r+14,45),Il(m,r+24,BigInt(c)),Il(m,r+32,BigInt(c)),Il(m,r+40,BigInt(s)),Il(m,r+48,BigInt(a)),ho(m,r+56,117853008),Il(m,r+64,BigInt(a)+BigInt(s)),ho(m,r+72,1),c=65535,a=4294967295,s=4294967295,r+=76),ho(m,r,101010256),Jo(m,r+8,c),Jo(m,r+10,c),ho(m,r+12,s),ho(m,r+16,a),await i.writeUint8Array(u),t&&t.length&&await i.writeUint8Array(t)}function Vhe(e,t,n){if(e.arrayBuffer)return t||n?e.slice(t,n).arrayBuffer():e.arrayBuffer();{let i=new FileReader;return new Promise((o,r)=>{i.onload=s=>o(s.target.result),i.onerror=()=>r(i.error),i.readAsArrayBuffer(t||n?e.slice(t,n):e)})}}async function Z7e(e,t,n=0){await o();async function o(){if(n<t.size){let r=await Vhe(t,n,n+536870912);await e.writeUint8Array(new Uint8Array(r)),n+=536870912,await o()}}}function wz(e){if(e)return(BigInt(e.getTime())+BigInt(116444736e5))*BigInt(1e4)}function _a(e,t,n){return t[n]===void 0?e.options[n]:t[n]}function G7e(e){return e+5*(Math.floor(e/16383)+1)}function mU(e,t,n){e.setUint8(t,n)}function Jo(e,t,n){e.setUint16(t,n,!0)}function ho(e,t,n){e.setUint32(t,n,!0)}function Il(e,t,n){e.setBigUint64(t,n,!0)}function ta(e,t,n){e.set(t,n)}function eh(e){return new DataView(e.buffer)}L1({Deflate:bme,Inflate:Mme});var fri=T(S(),1);function E7e(e){return typeof e=="string"&&(e=document.getElementById(e)),e}var En=E7e;var bri=T(S(),1);function X7e(e,t){this.position=e,this.headingPitchRange=t}var xP=X7e;var _ri=T(S(),1);function hU(e,t){this.id=t,this.name=e,this.playlistIndex=0,this.playlist=[],this.tourStart=new ye,this.tourEnd=new ye,this.entryStart=new ye,this.entryEnd=new ye,this._activeEntries=[]}hU.prototype.addPlaylistEntry=function(e){this.playlist.push(e)};hU.prototype.play=function(e,t){this.tourStart.raiseEvent();let n=this;Zhe.call(this,e,t,function(i){n.playlistIndex=0,i||Rhe(n._activeEntries),n.tourEnd.raiseEvent(i)})};hU.prototype.stop=function(){Rhe(this._activeEntries)};function Rhe(e){for(let t=e.pop();t!==void 0;t=e.pop())t.stop()}function Zhe(e,t,n){let i=this.playlist[this.playlistIndex];if(i){let o=I7e.bind(this,e,t,n);if(this._activeEntries.push(i),this.entryStart.raiseEvent(i),i.blocking)i.play(o,e.scene.camera,t);else{let r=this;i.play(function(){r.entryEnd.raiseEvent(i);let s=r._activeEntries.indexOf(i);s>=0&&r._activeEntries.splice(s,1)}),o(e,t,n)}}else d(n)&&n(!1)}function I7e(e,t,n,i){let o=this.playlist[this.playlistIndex];if(this.entryEnd.raiseEvent(o,i),i)n(i);else{let r=this._activeEntries.indexOf(o);r>=0&&this._activeEntries.splice(r,1),this.playlistIndex++,Zhe.call(this,e,t,n)}}var _P=hU;var Ari=T(S(),1);var Iri=T(S(),1);var Gri=T(S(),1),Wi=Object.freeze({Linear:Object.freeze({None:function(e){return e},In:function(e){return this.None(e)},Out:function(e){return this.None(e)},InOut:function(e){return this.None(e)}}),Quadratic:Object.freeze({In:function(e){return e*e},Out:function(e){return e*(2-e)},InOut:function(e){return(e*=2)<1?.5*e*e:-.5*(--e*(e-2)-1)}}),Cubic:Object.freeze({In:function(e){return e*e*e},Out:function(e){return--e*e*e+1},InOut:function(e){return(e*=2)<1?.5*e*e*e:.5*((e-=2)*e*e+2)}}),Quartic:Object.freeze({In:function(e){return e*e*e*e},Out:function(e){return 1- --e*e*e*e},InOut:function(e){return(e*=2)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2)}}),Quintic:Object.freeze({In:function(e){return e*e*e*e*e},Out:function(e){return--e*e*e*e*e+1},InOut:function(e){return(e*=2)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2)}}),Sinusoidal:Object.freeze({In:function(e){return 1-Math.sin((1-e)*Math.PI/2)},Out:function(e){return Math.sin(e*Math.PI/2)},InOut:function(e){return .5*(1-Math.sin(Math.PI*(.5-e)))}}),Exponential:Object.freeze({In:function(e){return e===0?0:Math.pow(1024,e-1)},Out:function(e){return e===1?1:1-Math.pow(2,-10*e)},InOut:function(e){return e===0?0:e===1?1:(e*=2)<1?.5*Math.pow(1024,e-1):.5*(-Math.pow(2,-10*(e-1))+2)}}),Circular:Object.freeze({In:function(e){return 1-Math.sqrt(1-e*e)},Out:function(e){return Math.sqrt(1- --e*e)},InOut:function(e){return(e*=2)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)}}),Elastic:Object.freeze({In:function(e){return e===0?0:e===1?1:-Math.pow(2,10*(e-1))*Math.sin((e-1.1)*5*Math.PI)},Out:function(e){return e===0?0:e===1?1:Math.pow(2,-10*e)*Math.sin((e-.1)*5*Math.PI)+1},InOut:function(e){return e===0?0:e===1?1:(e*=2,e<1?-.5*Math.pow(2,10*(e-1))*Math.sin((e-1.1)*5*Math.PI):.5*Math.pow(2,-10*(e-1))*Math.sin((e-1.1)*5*Math.PI)+1)}}),Back:Object.freeze({In:function(e){var t=1.70158;return e===1?1:e*e*((t+1)*e-t)},Out:function(e){var t=1.70158;return e===0?0:--e*e*((t+1)*e+t)+1},InOut:function(e){var t=2.5949095;return(e*=2)<1?.5*(e*e*((t+1)*e-t)):.5*((e-=2)*e*((t+1)*e+t)+2)}}),Bounce:Object.freeze({In:function(e){return 1-Wi.Bounce.Out(1-e)},Out:function(e){return e<.36363636363636365?7.5625*e*e:e<.7272727272727273?7.5625*(e-=.5454545454545454)*e+.75:e<.9090909090909091?7.5625*(e-=.8181818181818182)*e+.9375:7.5625*(e-=.9545454545454546)*e+.984375},InOut:function(e){return e<.5?Wi.Bounce.In(e*2)*.5:Wi.Bounce.Out(e*2-1)*.5+.5}}),generatePow:function(e){return e===void 0&&(e=4),e=e<Number.EPSILON?Number.EPSILON:e,e=e>1e4?1e4:e,{In:function(t){return Math.pow(t,e)},Out:function(t){return 1-Math.pow(1-t,e)},InOut:function(t){return t<.5?Math.pow(t*2,e)/2:(1-Math.pow(2-t*2,e))/2+.5}}}}),TP=function(){return performance.now()},W7e=function(){function e(){this._tweens={},this._tweensAddedDuringUpdate={}}return e.prototype.getAll=function(){var t=this;return Object.keys(this._tweens).map(function(n){return t._tweens[n]})},e.prototype.removeAll=function(){this._tweens={}},e.prototype.add=function(t){this._tweens[t.getId()]=t,this._tweensAddedDuringUpdate[t.getId()]=t},e.prototype.remove=function(t){delete this._tweens[t.getId()],delete this._tweensAddedDuringUpdate[t.getId()]},e.prototype.update=function(t,n){t===void 0&&(t=TP()),n===void 0&&(n=!1);var i=Object.keys(this._tweens);if(i.length===0)return!1;for(;i.length>0;){this._tweensAddedDuringUpdate={};for(var o=0;o<i.length;o++){var r=this._tweens[i[o]],s=!n;r&&r.update(t,s)===!1&&!n&&delete this._tweens[i[o]]}i=Object.keys(this._tweensAddedDuringUpdate)}return!0},e}(),v1={Linear:function(e,t){var n=e.length-1,i=n*t,o=Math.floor(i),r=v1.Utils.Linear;return t<0?r(e[0],e[1],i):t>1?r(e[n],e[n-1],n-i):r(e[o],e[o+1>n?n:o+1],i-o)},Bezier:function(e,t){for(var n=0,i=e.length-1,o=Math.pow,r=v1.Utils.Bernstein,s=0;s<=i;s++)n+=o(1-t,i-s)*o(t,s)*e[s]*r(i,s);return n},CatmullRom:function(e,t){var n=e.length-1,i=n*t,o=Math.floor(i),r=v1.Utils.CatmullRom;return e[0]===e[n]?(t<0&&(o=Math.floor(i=n*(1+t))),r(e[(o-1+n)%n],e[o],e[(o+1)%n],e[(o+2)%n],i-o)):t<0?e[0]-(r(e[0],e[0],e[1],e[1],-i)-e[0]):t>1?e[n]-(r(e[n],e[n],e[n-1],e[n-1],i-n)-e[n]):r(e[o?o-1:0],e[o],e[n<o+1?n:o+1],e[n<o+2?n:o+2],i-o)},Utils:{Linear:function(e,t,n){return(t-e)*n+e},Bernstein:function(e,t){var n=v1.Utils.Factorial;return n(e)/n(t)/n(e-t)},Factorial:function(){var e=[1];return function(t){var n=1;if(e[t])return e[t];for(var i=t;i>1;i--)n*=i;return e[t]=n,n}}(),CatmullRom:function(e,t,n,i,o){var r=(n-e)*.5,s=(i-t)*.5,a=o*o,c=o*a;return(2*t-2*n+r+s)*c+(-3*t+3*n-2*r-s)*a+r*o+t}}},Ghe=function(){function e(){}return e.nextId=function(){return e._nextId++},e._nextId=0,e}(),Az=new W7e,Ehe=function(){function e(t,n){n===void 0&&(n=Az),this._object=t,this._group=n,this._isPaused=!1,this._pauseStart=0,this._valuesStart={},this._valuesEnd={},this._valuesStartRepeat={},this._duration=1e3,this._isDynamic=!1,this._initialRepeat=0,this._repeat=0,this._yoyo=!1,this._isPlaying=!1,this._reversed=!1,this._delayTime=0,this._startTime=0,this._easingFunction=Wi.Linear.None,this._interpolationFunction=v1.Linear,this._chainedTweens=[],this._onStartCallbackFired=!1,this._onEveryStartCallbackFired=!1,this._id=Ghe.nextId(),this._isChainStopped=!1,this._propertiesAreSetUp=!1,this._goToEnd=!1}return e.prototype.getId=function(){return this._id},e.prototype.isPlaying=function(){return this._isPlaying},e.prototype.isPaused=function(){return this._isPaused},e.prototype.to=function(t,n){if(n===void 0&&(n=1e3),this._isPlaying)throw new Error("Can not call Tween.to() while Tween is already started or paused. Stop the Tween first.");return this._valuesEnd=t,this._propertiesAreSetUp=!1,this._duration=n,this},e.prototype.duration=function(t){return t===void 0&&(t=1e3),this._duration=t,this},e.prototype.dynamic=function(t){return t===void 0&&(t=!1),this._isDynamic=t,this},e.prototype.start=function(t,n){if(t===void 0&&(t=TP()),n===void 0&&(n=!1),this._isPlaying)return this;if(this._group&&this._group.add(this),this._repeat=this._initialRepeat,this._reversed){this._reversed=!1;for(var i in this._valuesStartRepeat)this._swapEndStartRepeatValues(i),this._valuesStart[i]=this._valuesStartRepeat[i]}if(this._isPlaying=!0,this._isPaused=!1,this._onStartCallbackFired=!1,this._onEveryStartCallbackFired=!1,this._isChainStopped=!1,this._startTime=t,this._startTime+=this._delayTime,!this._propertiesAreSetUp||n){if(this._propertiesAreSetUp=!0,!this._isDynamic){var o={};for(var r in this._valuesEnd)o[r]=this._valuesEnd[r];this._valuesEnd=o}this._setupProperties(this._object,this._valuesStart,this._valuesEnd,this._valuesStartRepeat,n)}return this},e.prototype.startFromCurrentValues=function(t){return this.start(t,!0)},e.prototype._setupProperties=function(t,n,i,o,r){for(var s in i){var a=t[s],c=Array.isArray(a),l=c?"array":typeof a,u=!c&&Array.isArray(i[s]);if(!(l==="undefined"||l==="function")){if(u){var m=i[s];if(m.length===0)continue;for(var p=[a],y=0,f=m.length;y<f;y+=1){var x=this._handleRelativeValue(a,m[y]);if(isNaN(x)){u=!1,console.warn("Found invalid interpolation list. Skipping.");break}p.push(x)}u&&(i[s]=p)}if((l==="object"||c)&&a&&!u){n[s]=c?[]:{};var _=a;for(var C in _)n[s][C]=_[C];o[s]=c?[]:{};var m=i[s];if(!this._isDynamic){var V={};for(var C in m)V[C]=m[C];i[s]=m=V}this._setupProperties(_,n[s],m,o[s],r)}else(typeof n[s]>"u"||r)&&(n[s]=a),c||(n[s]*=1),u?o[s]=i[s].slice().reverse():o[s]=n[s]||0}}},e.prototype.stop=function(){return this._isChainStopped||(this._isChainStopped=!0,this.stopChainedTweens()),this._isPlaying?(this._group&&this._group.remove(this),this._isPlaying=!1,this._isPaused=!1,this._onStopCallback&&this._onStopCallback(this._object),this):this},e.prototype.end=function(){return this._goToEnd=!0,this.update(1/0),this},e.prototype.pause=function(t){return t===void 0&&(t=TP()),this._isPaused||!this._isPlaying?this:(this._isPaused=!0,this._pauseStart=t,this._group&&this._group.remove(this),this)},e.prototype.resume=function(t){return t===void 0&&(t=TP()),!this._isPaused||!this._isPlaying?this:(this._isPaused=!1,this._startTime+=t-this._pauseStart,this._pauseStart=0,this._group&&this._group.add(this),this)},e.prototype.stopChainedTweens=function(){for(var t=0,n=this._chainedTweens.length;t<n;t++)this._chainedTweens[t].stop();return this},e.prototype.group=function(t){return t===void 0&&(t=Az),this._group=t,this},e.prototype.delay=function(t){return t===void 0&&(t=0),this._delayTime=t,this},e.prototype.repeat=function(t){return t===void 0&&(t=0),this._initialRepeat=t,this._repeat=t,this},e.prototype.repeatDelay=function(t){return this._repeatDelayTime=t,this},e.prototype.yoyo=function(t){return t===void 0&&(t=!1),this._yoyo=t,this},e.prototype.easing=function(t){return t===void 0&&(t=Wi.Linear.None),this._easingFunction=t,this},e.prototype.interpolation=function(t){return t===void 0&&(t=v1.Linear),this._interpolationFunction=t,this},e.prototype.chain=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return this._chainedTweens=t,this},e.prototype.onStart=function(t){return this._onStartCallback=t,this},e.prototype.onEveryStart=function(t){return this._onEveryStartCallback=t,this},e.prototype.onUpdate=function(t){return this._onUpdateCallback=t,this},e.prototype.onRepeat=function(t){return this._onRepeatCallback=t,this},e.prototype.onComplete=function(t){return this._onCompleteCallback=t,this},e.prototype.onStop=function(t){return this._onStopCallback=t,this},e.prototype.update=function(t,n){if(t===void 0&&(t=TP()),n===void 0&&(n=!0),this._isPaused)return!0;var i,o,r=this._startTime+this._duration;if(!this._goToEnd&&!this._isPlaying){if(t>r)return!1;n&&this.start(t,!0)}if(this._goToEnd=!1,t<this._startTime)return!0;this._onStartCallbackFired===!1&&(this._onStartCallback&&this._onStartCallback(this._object),this._onStartCallbackFired=!0),this._onEveryStartCallbackFired===!1&&(this._onEveryStartCallback&&this._onEveryStartCallback(this._object),this._onEveryStartCallbackFired=!0),o=(t-this._startTime)/this._duration,o=this._duration===0||o>1?1:o;var s=this._easingFunction(o);if(this._updateProperties(this._object,this._valuesStart,this._valuesEnd,s),this._onUpdateCallback&&this._onUpdateCallback(this._object,o),o===1)if(this._repeat>0){isFinite(this._repeat)&&this._repeat--;for(i in this._valuesStartRepeat)!this._yoyo&&typeof this._valuesEnd[i]=="string"&&(this._valuesStartRepeat[i]=this._valuesStartRepeat[i]+parseFloat(this._valuesEnd[i])),this._yoyo&&this._swapEndStartRepeatValues(i),this._valuesStart[i]=this._valuesStartRepeat[i];return this._yoyo&&(this._reversed=!this._reversed),this._repeatDelayTime!==void 0?this._startTime=t+this._repeatDelayTime:this._startTime=t+this._delayTime,this._onRepeatCallback&&this._onRepeatCallback(this._object),this._onEveryStartCallbackFired=!1,!0}else{this._onCompleteCallback&&this._onCompleteCallback(this._object);for(var a=0,c=this._chainedTweens.length;a<c;a++)this._chainedTweens[a].start(this._startTime+this._duration,!1);return this._isPlaying=!1,!1}return!0},e.prototype._updateProperties=function(t,n,i,o){for(var r in i)if(n[r]!==void 0){var s=n[r]||0,a=i[r],c=Array.isArray(t[r]),l=Array.isArray(a),u=!c&&l;u?t[r]=this._interpolationFunction(a,o):typeof a=="object"&&a?this._updateProperties(t[r],s,a,o):(a=this._handleRelativeValue(s,a),typeof a=="number"&&(t[r]=s+(a-s)*o))}},e.prototype._handleRelativeValue=function(t,n){return typeof n!="string"?n:n.charAt(0)==="+"||n.charAt(0)==="-"?t+parseFloat(n):parseFloat(n)},e.prototype._swapEndStartRepeatValues=function(t){var n=this._valuesStartRepeat[t],i=this._valuesEnd[t];typeof i=="string"?this._valuesStartRepeat[t]=this._valuesStartRepeat[t]+parseFloat(i):this._valuesStartRepeat[t]=this._valuesEnd[t],this._valuesEnd[t]=n},e}();var Tri=Ghe.nextId,xf=Az,Sri=xf.getAll.bind(xf),Cri=xf.removeAll.bind(xf),Vri=xf.add.bind(xf),Lri=xf.remove.bind(xf),Rri=xf.update.bind(xf);var P7e={LINEAR_NONE:Wi.Linear.None,QUADRATIC_IN:Wi.Quadratic.In,QUADRATIC_OUT:Wi.Quadratic.Out,QUADRATIC_IN_OUT:Wi.Quadratic.InOut,CUBIC_IN:Wi.Cubic.In,CUBIC_OUT:Wi.Cubic.Out,CUBIC_IN_OUT:Wi.Cubic.InOut,QUARTIC_IN:Wi.Quartic.In,QUARTIC_OUT:Wi.Quartic.Out,QUARTIC_IN_OUT:Wi.Quartic.InOut,QUINTIC_IN:Wi.Quintic.In,QUINTIC_OUT:Wi.Quintic.Out,QUINTIC_IN_OUT:Wi.Quintic.InOut,SINUSOIDAL_IN:Wi.Sinusoidal.In,SINUSOIDAL_OUT:Wi.Sinusoidal.Out,SINUSOIDAL_IN_OUT:Wi.Sinusoidal.InOut,EXPONENTIAL_IN:Wi.Exponential.In,EXPONENTIAL_OUT:Wi.Exponential.Out,EXPONENTIAL_IN_OUT:Wi.Exponential.InOut,CIRCULAR_IN:Wi.Circular.In,CIRCULAR_OUT:Wi.Circular.Out,CIRCULAR_IN_OUT:Wi.Circular.InOut,ELASTIC_IN:Wi.Elastic.In,ELASTIC_OUT:Wi.Elastic.Out,ELASTIC_IN_OUT:Wi.Elastic.InOut,BACK_IN:Wi.Back.In,BACK_OUT:Wi.Back.Out,BACK_IN_OUT:Wi.Back.InOut,BOUNCE_IN:Wi.Bounce.In,BOUNCE_OUT:Wi.Bounce.Out,BOUNCE_IN_OUT:Wi.Bounce.InOut},Xr=Object.freeze(P7e);function fU(e,t,n){this.type="KmlTourFlyTo",this.blocking=!0,this.activeCamera=null,this.activeCallback=null,this.duration=e,this.view=n,this.flyToMode=t}fU.prototype.play=function(e,t,n){if(this.activeCamera=t,d(e)&&e!==null){let o=this;this.activeCallback=function(r){delete o.activeCallback,delete o.activeCamera,e(d(r)?!1:r)}}let i=this.getCameraOptions(n);if(this.view.headingPitchRoll)t.flyTo(i);else if(this.view.headingPitchRange){let o=new ce(this.view.position);t.flyToBoundingSphere(o,i)}};fU.prototype.stop=function(){d(this.activeCamera)&&this.activeCamera.cancelFlight(),d(this.activeCallback)&&this.activeCallback(!0)};fU.prototype.getCameraOptions=function(e){let t={duration:this.duration};return d(this.activeCallback)&&(t.complete=this.activeCallback),this.flyToMode==="smooth"&&(t.easingFunction=Xr.LINEAR_NONE),this.view.headingPitchRoll?(t.destination=this.view.position,t.orientation=this.view.headingPitchRoll):this.view.headingPitchRange&&(t.offset=this.view.headingPitchRange),d(e)&&(t=xt(t,e)),t};var SP=fU;var Uri=T(S(),1);function Mz(e){this.type="KmlTourWait",this.blocking=!0,this.duration=e,this.timeout=null}Mz.prototype.play=function(e){let t=this;this.activeCallback=e,this.timeout=setTimeout(function(){delete t.activeCallback,e(!1)},this.duration*1e3)};Mz.prototype.stop=function(){clearTimeout(this.timeout),d(this.activeCallback)&&this.activeCallback(!0)};var CP=Mz;var Nhe={avi:"video/x-msvideo",bmp:"image/bmp",bz2:"application/x-bzip2",chm:"application/vnd.ms-htmlhelp",css:"text/css",csv:"text/csv",doc:"application/msword",dvi:"application/x-dvi",eps:"application/postscript",flv:"video/x-flv",gif:"image/gif",gz:"application/x-gzip",htm:"text/html",html:"text/html",ico:"image/vnd.microsoft.icon",jnlp:"application/x-java-jnlp-file",jpeg:"image/jpeg",jpg:"image/jpeg",m3u:"audio/x-mpegurl",m4v:"video/mp4",mathml:"application/mathml+xml",mid:"audio/midi",midi:"audio/midi",mov:"video/quicktime",mp3:"audio/mpeg",mp4:"video/mp4",mp4v:"video/mp4",mpeg:"video/mpeg",mpg:"video/mpeg",odp:"application/vnd.oasis.opendocument.presentation",ods:"application/vnd.oasis.opendocument.spreadsheet",odt:"application/vnd.oasis.opendocument.text",ogg:"application/ogg",pdf:"application/pdf",png:"image/png",pps:"application/vnd.ms-powerpoint",ppt:"application/vnd.ms-powerpoint",ps:"application/postscript",qt:"video/quicktime",rdf:"application/rdf+xml",rss:"application/rss+xml",rtf:"application/rtf",svg:"image/svg+xml",swf:"application/x-shockwave-flash",text:"text/plain",tif:"image/tiff",tiff:"image/tiff",txt:"text/plain",wav:"audio/x-wav",wma:"audio/x-ms-wma",wmv:"video/x-ms-wmv",xml:"application/xml",zip:"application/zip",detectFromFilename:function(e){let t=e.toLowerCase();return t=Cg(t),Nhe[t]}},Oz;typeof DOMParser<"u"&&(Oz=new DOMParser);var v7e=new S5({stripPrefix:!1,email:!1,replaceFn:function(e){return e.urlMatchType==="scheme"||e.urlMatchType==="www"}}),wy=32,Xhe=2414016,Ihe=1,Whe=16093e3,Phe=.1,vhe=[null,void 0,"http://www.opengis.net/kml/2.2","http://earth.google.com/kml/2.2","http://earth.google.com/kml/2.1","http://earth.google.com/kml/2.0"],whe=["http://www.google.com/kml/ext/2.2"],w7e=["http://www.w3.org/2005/Atom"],Pe={kml:vhe,gx:whe,atom:w7e,kmlgx:vhe.concat(whe)},Kz={Document:Jhe,Folder:e6e,Placemark:t6e,NetworkLink:d6e,GroundOverlay:a6e,PhotoOverlay:qhe,ScreenOverlay:s6e,Tour:i6e};function _f(e){this._dataSource=e,this._deferred=il(),this._stack=[],this._promises=[],this._timeoutSet=!1,this._used=!1,this._started=0,this._timeThreshold=1e3}Object.defineProperties(_f.prototype,{dataSource:{get:function(){return this._dataSource}}});_f.prototype.addNodes=function(e,t){this._stack.push({nodes:e,index:0,processingData:t}),this._used=!0};_f.prototype.addPromise=function(e){this._promises.push(e)};_f.prototype.wait=function(){let e=this._deferred;return this._used||e.resolve(),Promise.all([e.promise,Promise.all(this._promises)])};_f.prototype.process=function(){let e=this._stack.length===1;return e&&(this._started=Cd._getTimestamp()),this._process(e)};_f.prototype._giveUpTime=function(){if(this._timeoutSet)return;this._timeoutSet=!0,this._timeThreshold=50;let e=this;setTimeout(function(){e._timeoutSet=!1,e._started=Cd._getTimestamp(),e._process(!0)},0)};_f.prototype._nextNode=function(){let e=this._stack,t=e[e.length-1],n=t.index,i=t.nodes;if(n!==i.length)return++t.index,i[n]};_f.prototype._pop=function(){let e=this._stack;return e.pop(),e.length===0?(this._deferred.resolve(),!1):!0};_f.prototype._process=function(e){let t=this.dataSource,n=this._stack[this._stack.length-1].processingData,i=this._nextNode();for(;d(i);){let o=Kz[i.localName];if(d(o)&&(Pe.kml.indexOf(i.namespaceURI)!==-1||Pe.gx.indexOf(i.namespaceURI)!==-1)&&(o(t,i,n,this),this._timeoutSet||Cd._getTimestamp()>this._started+this._timeThreshold)){this._giveUpTime();return}i=this._nextNode()}this._pop()&&e&&this._process(!0)};function F7e(e){let t=e.slice(0,Math.min(4,e.size)),n=il(),i=new FileReader;return i.addEventListener("load",function(){n.resolve(new DataView(i.result).getUint32(0,!1)===1347093252)}),i.addEventListener("error",function(){n.reject(i.error)}),i.readAsArrayBuffer(t),n.promise}function A7e(e){let t=il(),n=new FileReader;return n.addEventListener("load",function(){t.resolve(n.result)}),n.addEventListener("error",function(){t.reject(n.error)}),n.readAsText(e),t.promise}function Uhe(e){let t={xsi:"http://www.w3.org/2001/XMLSchema-instance"},n,i,o,r;for(let s in t)t.hasOwnProperty(s)&&(o=RegExp(`[< ]${s}:`),r=`xmlns:${s}=`,o.test(e)&&e.indexOf(r)===-1&&(d(n)||(n=e.substr(0,e.indexOf("<kml")+4),i=e.substr(n.length)),n+=` ${r}"${t[s]}"`));return d(n)&&(e=n+i),e}function khe(e){let t=e.indexOf("xmlns:"),n=e.indexOf(">",t),i,o,r;for(;t!==-1&&t<n;)i=e.slice(t,e.indexOf('"',t)),o=t,t=e.indexOf(i,t+1),t!==-1?(r=e.indexOf('"',e.indexOf('"',t)+1),e=e.slice(0,t-1)+e.slice(r+1,e.length),t=e.indexOf("xmlns:",o-1)):t=e.indexOf("xmlns:",o+1);return e}function M7e(e,t){return Promise.resolve(e.getData(new j5)).then(function(n){n=Uhe(n),n=khe(n),t.kml=Oz.parseFromString(n,"application/xml")})}function Nz(e,t){let n=g(Nhe.detectFromFilename(e.filename),"application/octet-stream");return Promise.resolve(e.getData(new q5(n))).then(function(i){t[e.filename]=i})}function Td(e,t,n,i){let o=i.keys,r=new VP.default("."),s=e.querySelectorAll(t);for(let a=0;a<s.length;a++){let c=s[a],l=c.getAttribute(n);if(d(l)){let m=new VP.default(l).absoluteTo(r).toString(),p=o.indexOf(m);if(p!==-1){let y=o[p];c.setAttribute(n,i[y]),t==="a"&&c.getAttribute("download")===null&&c.setAttribute("download",y)}}}}function Sd(e,t,n,i){let o=e.querySelectorAll(t);for(let r=0;r<o.length;r++){let s=o[r],a=s.getAttribute(n),c=Hz(a,i);d(c)&&s.setAttribute(n,c.url)}}function Dhe(e,t,n){let i=us(e,"id");i=d(i)&&i.length!==0?i:Yn(),d(n)&&(i=n+i);let o=t.getById(i);return d(o)&&(i=Yn(),d(n)&&(i=n+i)),o=t.add(new Oo({id:i})),d(o.kml)||(o.addProperty("kml"),o.kml=new f6e),o}function LP(e,t){return e==="absolute"||e==="relativeToGround"||t==="relativeToSeaFloor"}function gU(e,t){if(!d(e))return h.fromDegrees(0,0,0,t);let n=e.match(/[^\s,\n]+/g);if(!d(n))return h.fromDegrees(0,0,0,t);let i=parseFloat(n[0]),o=parseFloat(n[1]),r=parseFloat(n[2]);return i=isNaN(i)?0:i,o=isNaN(o)?0:o,r=isNaN(r)?0:r,h.fromDegrees(i,o,r,t)}function pU(e,t){if(!d(e))return;let n=e.textContent.match(/[^\s\n]+/g);if(!d(n))return;let i=n.length,o=new Array(i),r=0;for(let s=0;s<i;s++)o[r++]=gU(n[s],t);return o}function Fy(e,t){if(!d(e))return;let n=e.getAttribute(t);if(n!==null){let i=parseFloat(n);return isNaN(i)?void 0:i}}function us(e,t){if(!d(e))return;let n=e.getAttribute(t);return n!==null?n:void 0}function Pi(e,t,n){if(!d(e))return;let i=e.childNodes,o=i.length;for(let r=0;r<o;r++){let s=i[r];if(s.localName===t&&n.indexOf(s.namespaceURI)!==-1)return s}}function Fhe(e,t,n){if(!d(e))return;let i=[],o=e.getElementsByTagNameNS("*",t),r=o.length;for(let s=0;s<r;s++){let a=o[s];a.localName===t&&n.indexOf(a.namespaceURI)!==-1&&i.push(a)}return i}function th(e,t,n){if(!d(e))return[];let i=[],o=e.childNodes,r=o.length;for(let s=0;s<r;s++){let a=o[s];a.localName===t&&n.indexOf(a.namespaceURI)!==-1&&i.push(a)}return i}function ei(e,t,n){let i=Pi(e,t,n);if(d(i)){let o=parseFloat(i.textContent);return isNaN(o)?void 0:o}}function Xn(e,t,n){let i=Pi(e,t,n);if(d(i))return i.textContent.trim()}function nh(e,t,n){let i=Pi(e,t,n);if(d(i)){let o=i.textContent.trim();return o==="1"||/^true$/i.test(o)}}function Hz(e,t,n){if(!d(e))return;let i;if(d(n)){e=e.replace(/\\/g,"/");let o=n[e];if(d(o))i=new Ee({url:o});else{let r=new VP.default(t.getUrlComponent()),s=new VP.default(e);o=n[s.absoluteTo(r)],d(o)&&(i=new Ee({url:o}))}}return d(i)||(i=t.getDerivedResource({url:e})),i}var Wl={maximumRed:void 0,red:void 0,maximumGreen:void 0,green:void 0,maximumBlue:void 0,blue:void 0};function Bz(e,t){if(!d(e)||/^\s*$/gm.test(e))return;e[0]==="#"&&(e=e.substring(1));let n=parseInt(e.substring(0,2),16)/255,i=parseInt(e.substring(2,4),16)/255,o=parseInt(e.substring(4,6),16)/255,r=parseInt(e.substring(6,8),16)/255;return t?(r>0?(Wl.maximumRed=r,Wl.red=void 0):(Wl.maximumRed=void 0,Wl.red=0),o>0?(Wl.maximumGreen=o,Wl.green=void 0):(Wl.maximumGreen=void 0,Wl.green=0),i>0?(Wl.maximumBlue=i,Wl.blue=void 0):(Wl.maximumBlue=void 0,Wl.blue=0),Wl.alpha=n,Y.fromRandom(Wl)):new Y(r,o,i,n)}function M_(e,t,n){let i=Xn(e,t,n);if(d(i))return Bz(i,Xn(e,"colorMode",n)==="random")}function N7e(e){let t=Pi(e,"TimeStamp",Pe.kmlgx),n=Xn(t,"when",Pe.kmlgx);if(!d(t)||!d(n)||n.length===0)return;let i=te.fromIso8601(n),o=new Lr;return o.addInterval(new Tn({start:i,stop:Be.MAXIMUM_VALUE})),o}function U7e(e){let t=Pi(e,"TimeSpan",Pe.kmlgx);if(!d(t))return;let n,i=Pi(t,"begin",Pe.kmlgx),o=d(i)?te.fromIso8601(i.textContent):void 0,r=Pi(t,"end",Pe.kmlgx),s=d(r)?te.fromIso8601(r.textContent):void 0;if(d(o)&&d(s)){if(te.lessThan(s,o)){let a=o;o=s,s=a}n=new Lr,n.addInterval(new Tn({start:o,stop:s}))}else d(o)?(n=new Lr,n.addInterval(new Tn({start:o,stop:Be.MAXIMUM_VALUE}))):d(s)&&(n=new Lr,n.addInterval(new Tn({start:Be.MINIMUM_VALUE,stop:s})));return n}function Bhe(){let e=new Ia;return e.width=wy,e.height=wy,e.scaleByDistance=new It(Xhe,Ihe,Whe,Phe),e.pixelOffsetScaleByDistance=new It(Xhe,Ihe,Whe,Phe),e}function zz(){let e=new dm;return e.outline=!0,e.outlineColor=Y.WHITE,e}function Yhe(){let e=new lm;return e.translucencyByDistance=new It(3e6,1,5e6,0),e.pixelOffset=new D(17,0),e.horizontalOrigin=pi.LEFT,e.font="16px sans-serif",e.style=vo.FILL_AND_OUTLINE,e}function Jz(e,t,n,i,o){let r=Xn(e,"href",Pe.kml);if(!d(r)||r.length===0)return;if(r.indexOf("root://icons/palette-")===0){let a=r.charAt(21),c=g(ei(e,"x",Pe.gx),0),l=g(ei(e,"y",Pe.gx),0);c=Math.min(c/32,7),l=7-Math.min(l/32,7);let u=8*l+c;r=`https://maps.google.com/mapfiles/kml/pal${a}/icon${u}.png`}let s=Hz(r,n,i);if(o){let a=Xn(e,"refreshMode",Pe.kml),c=Xn(e,"viewRefreshMode",Pe.kml);a==="onInterval"||a==="onExpire"?Pt(`kml-refreshMode-${a}`,`KML - Unsupported Icon refreshMode: ${a}`):(c==="onStop"||c==="onRegion")&&Pt(`kml-refreshMode-${c}`,`KML - Unsupported Icon viewRefreshMode: ${c}`);let l=g(Xn(e,"viewBoundScale",Pe.kml),1),u=c==="onStop"?"BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]":"",m=g(Xn(e,"viewFormat",Pe.kml),u),p=Xn(e,"httpQuery",Pe.kml);d(m)&&s.setQueryParameters(Yl(yU(m))),d(p)&&s.setQueryParameters(Yl(yU(p)));let y=t._ellipsoid;return jz(s,t.camera,t.canvas,l,t._lastCameraView.bbox,y),s}return s}function k7e(e,t,n,i,o){let r=ei(t,"scale",Pe.kml),s=ei(t,"heading",Pe.kml),a=M_(t,"color",Pe.kml),c=Pi(t,"Icon",Pe.kml),l=Jz(c,e,i,o,!1);d(c)&&!d(l)&&(l=!1);let u=ei(c,"x",Pe.gx),m=ei(c,"y",Pe.gx),p=ei(c,"w",Pe.gx),y=ei(c,"h",Pe.gx),f=Pi(t,"hotSpot",Pe.kml),x=Fy(f,"x"),_=Fy(f,"y"),C=us(f,"xunits"),V=us(f,"yunits"),L=n.billboard;d(L)||(L=Bhe(),n.billboard=L),L.image=l,L.scale=r,L.color=a,(d(u)||d(m)||d(p)||d(y))&&(L.imageSubRegion=new He(u,m,p,y)),d(s)&&s!==0&&(L.rotation=W.toRadians(-s),L.alignedAxis=h.UNIT_Z),r=g(r,1);let Z,G;d(x)&&(C==="pixels"?Z=-x*r:C==="insetPixels"?Z=(x-wy)*r:C==="fraction"&&(Z=-x*wy*r),Z+=wy*.5*r),d(_)&&(V==="pixels"?G=_*r:V==="insetPixels"?G=(-_+wy)*r:V==="fraction"&&(G=_*wy*r),G-=wy*.5*r),(d(Z)||d(G))&&(L.pixelOffset=new D(Z,G))}function bU(e,t,n,i,o){for(let r=0,s=t.childNodes.length;r<s;r++){let a=t.childNodes.item(r);if(a.localName==="IconStyle")k7e(e,a,n,i,o);else if(a.localName==="LabelStyle"){let c=n.label;d(c)||(c=Yhe(),n.label=c),c.scale=g(ei(a,"scale",Pe.kml),c.scale),c.fillColor=g(M_(a,"color",Pe.kml),c.fillColor),c.text=n.name}else if(a.localName==="LineStyle"){let c=n.polyline;d(c)||(c=new Da,n.polyline=c),c.width=ei(a,"width",Pe.kml),c.material=M_(a,"color",Pe.kml),d(M_(a,"outerColor",Pe.gx))&&Pt("kml-gx:outerColor","KML - gx:outerColor is not supported in a LineStyle"),d(ei(a,"outerWidth",Pe.gx))&&Pt("kml-gx:outerWidth","KML - gx:outerWidth is not supported in a LineStyle"),d(ei(a,"physicalWidth",Pe.gx))&&Pt("kml-gx:physicalWidth","KML - gx:physicalWidth is not supported in a LineStyle"),d(nh(a,"labelVisibility",Pe.gx))&&Pt("kml-gx:labelVisibility","KML - gx:labelVisibility is not supported in a LineStyle")}else if(a.localName==="PolyStyle"){let c=n.polygon;d(c)||(c=zz(),n.polygon=c),c.material=g(M_(a,"color",Pe.kml),c.material),c.fill=g(nh(a,"fill",Pe.kml),c.fill),c.outline=g(nh(a,"outline",Pe.kml),c.outline)}else if(a.localName==="BalloonStyle"){let c=g(Bz(Xn(a,"bgColor",Pe.kml)),Y.WHITE),l=g(Bz(Xn(a,"textColor",Pe.kml)),Y.BLACK),u=Xn(a,"text",Pe.kml);n.addProperty("balloonStyle"),n.balloonStyle={bgColor:c,textColor:l,text:u}}else if(a.localName==="ListStyle"){let c=Xn(a,"listItemType",Pe.kml);(c==="radioFolder"||c==="checkOffOnly")&&Pt(`kml-listStyle-${c}`,`KML - Unsupported ListStyle with listItemType: ${c}`)}}}function D7e(e,t,n,i,o){let r=new Oo,s,a=-1,c=t.childNodes,l=c.length;for(let m=0;m<l;m++){let p=c[m];(p.localName==="Style"||p.localName==="StyleMap")&&(a=m)}if(a!==-1){let m=c[a];if(m.localName==="Style")bU(e,m,r,i,o);else{let p=th(m,"Pair",Pe.kml);for(let y=0;y<p.length;y++){let f=p[y],x=Xn(f,"key",Pe.kml);if(x==="normal"){let _=Xn(f,"styleUrl",Pe.kml);if(d(_))s=n.getById(_),d(s)||(s=n.getById(`#${_}`)),d(s)&&r.merge(s);else{let C=Pi(f,"Style",Pe.kml);bU(e,C,r,i,o)}}else Pt(`kml-styleMap-${x}`,`KML - Unsupported StyleMap key: ${x}`)}}}let u=Xn(t,"styleUrl",Pe.kml);if(d(u)){let m=u;if(u[0]!=="#"&&u.indexOf("#")!==-1){let p=u.split("#"),y=p[0];m=`${i.getDerivedResource({url:y}).getUrlComponent()}#${p[1]}`}s=n.getById(m),d(s)||(s=n.getById(`#${m}`)),d(s)&&r.merge(s)}return r}function B7e(e,t,n){return t.fetchXML().then(function(i){return Ohe(e,i,n,t,!0)})}function Ohe(e,t,n,i,o,r){let s,a,c,l,u=Fhe(t,"Style",Pe.kml);if(d(u)){let x=u.length;for(s=0;s<x;s++)l=u[s],a=us(l,"id"),d(a)&&(a=`#${a}`,o&&d(i)&&(a=i.getUrlComponent()+a),d(n.getById(a))||(c=new Oo({id:a}),n.add(c),bU(e,l,c,i,r)))}let m=Fhe(t,"StyleMap",Pe.kml);if(d(m)){let x=m.length;for(s=0;s<x;s++){let _=m[s];if(a=us(_,"id"),d(a)){let C=th(_,"Pair",Pe.kml);for(let V=0;V<C.length;V++){let L=C[V],Z=Xn(L,"key",Pe.kml);if(Z==="normal"){if(a=`#${a}`,o&&d(i)&&(a=i.getUrlComponent()+a),!d(n.getById(a))){c=n.getOrCreateEntity(a);let G=Xn(L,"styleUrl",Pe.kml);if(d(G)){G[0]!=="#"&&(G=`#${G}`),o&&d(i)&&(G=i.getUrlComponent()+G);let X=n.getById(G);d(X)&&c.merge(X)}else l=Pi(L,"Style",Pe.kml),bU(e,l,c,i,r)}}else Pt(`kml-styleMap-${Z}`,`KML - Unsupported StyleMap key: ${Z}`)}}}}let p=[],y=t.getElementsByTagName("styleUrl"),f=y.length;for(s=0;s<f;s++){let x=y[s].textContent;if(x[0]!=="#"){let _=x.split("#");if(_.length===2){let C=_[0],V=i.getDerivedResource({url:C});p.push(B7e(e,V,n))}}}return p}function Qz(e,t,n){let i=new f0(e,t.id,["position"]),o=new mf(t.position);t.polyline=d(n.polyline)?n.polyline.clone():new Da,t.polyline.positions=new h0([i,o])}function Khe(e,t){return!d(e)&&!d(t)||e==="clampToGround"?Oe.CLAMP_TO_GROUND:e==="relativeToGround"?Oe.RELATIVE_TO_GROUND:e==="absolute"?Oe.NONE:t==="clampToSeaFloor"?(Pt("kml-gx:altitudeMode-clampToSeaFloor","KML - <gx:altitudeMode>:clampToSeaFloor is currently not supported, using <kml:altitudeMode>:clampToGround."),Oe.CLAMP_TO_GROUND):t==="relativeToSeaFloor"?(Pt("kml-gx:altitudeMode-relativeToSeaFloor","KML - <gx:altitudeMode>:relativeToSeaFloor is currently not supported, using <kml:altitudeMode>:relativeToGround."),Oe.RELATIVE_TO_GROUND):(d(e)?Pt("kml-altitudeMode-unknown",`KML - Unknown <kml:altitudeMode>:${e}, using <kml:altitudeMode>:CLAMP_TO_GROUND.`):Pt("kml-gx:altitudeMode-unknown",`KML - Unknown <gx:altitudeMode>:${t}, using <kml:altitudeMode>:CLAMP_TO_GROUND.`),Oe.CLAMP_TO_GROUND)}function Y7e(e,t,n){return n==="relativeToSeaFloor"||t==="absolute"||t==="relativeToGround"?e:((d(t)&&t!=="clampToGround"||d(n)&&n!=="clampToSeaFloor")&&Pt("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${g(t,n)}`),new mf(e))}function O7e(e,t,n,i){if(!d(e))return;if(n==="relativeToSeaFloor"||t==="absolute"||t==="relativeToGround")return e;(d(t)&&t!=="clampToGround"||d(n)&&n!=="clampToSeaFloor")&&Pt("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${g(t,n)}`);let o=e.length;for(let r=0;r<o;r++){let s=e[r];i.scaleToGeodeticSurface(s,s)}return e}function xU(e,t,n,i){let o=t.label;d(o)||(o=d(n.label)?n.label.clone():Yhe(),t.label=o),o.text=t.name;let r=t.billboard;d(r)||(r=d(n.billboard)?n.billboard.clone():Bhe(),t.billboard=r),d(r.image)?r.image.getValue()||(r.image=void 0):r.image=e._pinBuilder.fromColor(Y.YELLOW,64);let s=1;d(r.scale)&&(s=r.scale.getValue(),s!==0?o.pixelOffset=new D(s*16+1,0):(o.pixelOffset=void 0,o.horizontalOrigin=void 0)),d(i)&&e._clampToGround&&(r.heightReference=i,o.heightReference=i)}function Hhe(e,t){let n=e.path;d(n)||(n=new up,n.leadTime=0,e.path=n);let i=t.polyline;d(i)&&(n.material=i.material,n.width=i.width)}function K7e(e,t,n,i,o){let r=Xn(n,"coordinates",Pe.kml),s=Xn(n,"altitudeMode",Pe.kml),a=Xn(n,"altitudeMode",Pe.gx),c=nh(n,"extrude",Pe.kml),l=e._ellipsoid,u=gU(r,l);return i.position=u,xU(e,i,o,Khe(s,a)),c&&LP(s,a)&&Qz(t,i,o),!0}function Ahe(e,t,n,i,o){let r=Pi(n,"coordinates",Pe.kml),s=Xn(n,"altitudeMode",Pe.kml),a=Xn(n,"altitudeMode",Pe.gx),c=nh(n,"extrude",Pe.kml),l=nh(n,"tessellate",Pe.kml),u=LP(s,a),m=ei(n,"drawOrder",Pe.gx),p=e._ellipsoid,y=pU(r,p),f=o.polyline;if(u&&c){let x=new mp;i.wall=x,x.positions=y;let _=o.polygon;d(_)&&(x.fill=_.fill,x.material=_.material),x.outline=!0,d(f)?(x.outlineColor=d(f.material)?f.material.color:Y.WHITE,x.outlineWidth=f.width):d(_)&&(x.outlineColor=d(_.material)?_.material.color:Y.WHITE)}else if(e._clampToGround&&!u&&l){let x=new Da;x.clampToGround=!0,i.polyline=x,x.positions=y,d(f)?(x.material=d(f.material)?f.material.color.getValue(Be.MINIMUM_VALUE):Y.WHITE,x.width=g(f.width,1)):(x.material=Y.WHITE,x.width=1),x.zIndex=m}else d(m)&&Pt("kml-gx:drawOrder","KML - gx:drawOrder is not supported in LineStrings when clampToGround is false"),e._clampToGround&&!l&&Pt("kml-line-tesselate","Ignoring clampToGround for KML lines without the tessellate flag."),f=d(f)?f.clone():new Da,i.polyline=f,f.positions=O7e(y,s,a,p),(!l||u)&&(f.arcType=Jt.NONE);return!0}function H7e(e,t,n,i,o){let r=Pi(n,"outerBoundaryIs",Pe.kml),s=Pi(r,"LinearRing",Pe.kml),a=Pi(s,"coordinates",Pe.kml),c=e._ellipsoid,l=pU(a,c),u=nh(n,"extrude",Pe.kml),m=Xn(n,"altitudeMode",Pe.kml),p=Xn(n,"altitudeMode",Pe.gx),y=LP(m,p),f=d(o.polygon)?o.polygon.clone():zz(),x=o.polyline;if(d(x)&&(f.outlineColor=d(x.material)?x.material.color:Y.WHITE,f.outlineWidth=x.width),i.polygon=f,y?(f.perPositionHeight=!0,f.extrudedHeight=u?0:void 0):e._clampToGround||(f.height=0),d(l)){let _=new ha(l),C=th(n,"innerBoundaryIs",Pe.kml);for(let V=0;V<C.length;V++){s=th(C[V],"LinearRing",Pe.kml);for(let L=0;L<s.length;L++)a=Pi(s[L],"coordinates",Pe.kml),l=pU(a,c),d(l)&&_.holes.push(new ha(l))}f.hierarchy=_}return!0}function z7e(e,t,n,i,o){let r=Xn(n,"altitudeMode",Pe.kml),s=Xn(n,"altitudeMode",Pe.gx),a=th(n,"coord",Pe.gx),c=th(n,"angles",Pe.gx),l=th(n,"when",Pe.kml),u=nh(n,"extrude",Pe.kml),m=LP(r,s),p=e._ellipsoid;c.length>0&&Pt("kml-gx:angles","KML - gx:angles are not supported in gx:Tracks");let y=Math.min(a.length,l.length),f=[],x=[];for(let C=0;C<y;C++){let V=gU(a[C].textContent,p);f.push(V),x.push(te.fromIso8601(l[C].textContent))}let _=new js;return _.addSamples(x,f),i.position=_,xU(e,i,o,Khe(r,s)),Hhe(i,o),i.availability=new Lr,l.length>0&&i.availability.addInterval(new Tn({start:x[0],stop:x[x.length-1]})),m&&u&&Qz(t,i,o),!0}function Mhe(e,t,n,i,o,r,s,a,c){let l=e[0],u=e[e.length-1],m=new js;m.addSamples(e,t),n.intervals.addInterval(new Tn({start:l,stop:u,isStartIncluded:c,isStopIncluded:c,data:Y7e(m,s,a)})),i.addInterval(new Tn({start:l,stop:u,isStartIncluded:c,isStopIncluded:c})),o.intervals.addInterval(new Tn({start:l,stop:u,isStartIncluded:c,isStopIncluded:c,data:r}))}function J7e(e,t,n,i,o){let r=nh(n,"interpolate",Pe.gx),s=th(n,"Track",Pe.gx),a,c,l,u=!1,m=new b0,p=new Lr,y=new Js,f=e._ellipsoid;for(let x=0,_=s.length;x<_;x++){let C=s[x],V=th(C,"when",Pe.kml),L=th(C,"coord",Pe.gx),Z=Xn(C,"altitudeMode",Pe.kml),G=Xn(C,"altitudeMode",Pe.gx),X=LP(Z,G),P=nh(C,"extrude",Pe.kml),v=Math.min(L.length,V.length),F=[];a=[];for(let M=0;M<v;M++){let b=gU(L[M].textContent,f);F.push(b),a.push(te.fromIso8601(V[M].textContent))}r&&(d(c)&&Mhe([c,a[0]],[l,F[0]],y,p,m,!1,"absolute",void 0,!1),c=a[v-1],l=F[F.length-1]),Mhe(a,F,y,p,m,X&&P,Z,G,!0),u=u||X&&P}return i.availability=p,i.position=y,xU(e,i,o),Hhe(i,o),u&&(Qz(t,i,o),i.polyline.show=m),!0}var zhe={Point:K7e,LineString:Ahe,LinearRing:Ahe,Polygon:H7e,Track:z7e,MultiTrack:J7e,MultiGeometry:Q7e,Model:j7e};function Q7e(e,t,n,i,o,r){let s=n.childNodes,a=!1;for(let c=0,l=s.length;c<l;c++){let u=s.item(c),m=zhe[u.localName];if(d(m)){let p=Dhe(u,t,r);p.parent=i,p.name=i.name,p.availability=i.availability,p.description=i.description,p.kml=i.kml,m(e,t,u,p,o)&&(a=!0)}}return a}function j7e(e,t,n,i,o){return Pt("kml-unsupportedGeometry",`KML - Unsupported geometry: ${n.localName}`),!1}function q7e(e,t){let n=Pi(e,"ExtendedData",Pe.kml);if(!d(n))return;d(Pi(n,"SchemaData",Pe.kml))&&Pt("kml-schemaData","KML - SchemaData is unsupported"),d(us(n,"xmlns:prefix"))&&Pt("kml-extendedData","KML - ExtendedData with xmlns:prefix is unsupported");let i={},o=th(n,"Data",Pe.kml);if(d(o)){let r=o.length;for(let s=0;s<r;s++){let a=o[s],c=us(a,"name");d(c)&&(i[c]={displayName:Xn(a,"displayName",Pe.kml),value:Xn(a,"value",Pe.kml)})}}t.kml.extendedData=i}var fo;typeof document<"u"&&(fo=document.createElement("div"));function $7e(e,t,n,i,o){let r,s,a,c=t.kml,l=c.extendedData,u=Xn(e,"description",Pe.kml),m=g(t.balloonStyle,n.balloonStyle),p=Y.WHITE,y=Y.BLACK,f=u;d(m)&&(p=g(m.bgColor,Y.WHITE),y=g(m.textColor,Y.BLACK),f=g(m.text,u));let x;if(d(f)){if(f=f.replace("$[name]",g(t.name,"")),f=f.replace("$[description]",g(u,"")),f=f.replace("$[address]",g(c.address,"")),f=f.replace("$[Snippet]",g(c.snippet,"")),f=f.replace("$[id]",t.id),f=f.replace("$[geDirections]",""),d(l)){let V=f.match(/\$\[.+?\]/g);if(V!==null)for(r=0;r<V.length;r++){let L=V[r],Z=L.substr(2,L.length-3),G=/\/displayName$/.test(Z);Z=Z.replace(/\/displayName$/,""),x=l[Z],d(x)&&(x=G?x.displayName:x.value),d(x)&&(f=f.replace(L,g(x,"")))}}}else if(d(l)&&(a=Object.keys(l),a.length>0)){for(f='<table class="cesium-infoBox-defaultTable cesium-infoBox-defaultTable-lighter"><tbody>',r=0;r<a.length;r++)s=a[r],x=l[s],f+=`<tr><th>${g(x.displayName,s)}</th><td>${g(x.value,"")}</td></tr>`;f+="</tbody></table>"}if(!d(f))return;f=v7e.link(f),fo.innerHTML=f;let _=fo.querySelectorAll("a");for(r=0;r<_.length;r++)_[r].setAttribute("target","_blank");d(i)&&i.keys.length>1&&(Td(fo,"a","href",i),Td(fo,"link","href",i),Td(fo,"area","href",i),Td(fo,"img","src",i),Td(fo,"iframe","src",i),Td(fo,"video","src",i),Td(fo,"audio","src",i),Td(fo,"source","src",i),Td(fo,"track","src",i),Td(fo,"input","src",i),Td(fo,"embed","src",i),Td(fo,"script","src",i),Td(fo,"video","poster",i)),Sd(fo,"a","href",o),Sd(fo,"link","href",o),Sd(fo,"area","href",o),Sd(fo,"img","src",o),Sd(fo,"iframe","src",o),Sd(fo,"video","src",o),Sd(fo,"audio","src",o),Sd(fo,"source","src",o),Sd(fo,"track","src",o),Sd(fo,"input","src",o),Sd(fo,"embed","src",o),Sd(fo,"script","src",o),Sd(fo,"video","poster",o);let C='<div class="cesium-infoBox-description-lighter" style="';C+="overflow:auto;",C+="word-wrap:break-word;",C+=`background-color:${p.toCssColorString()};`,C+=`color:${y.toCssColorString()};`,C+='">',C+=`${fo.innerHTML}</div>`,fo.innerHTML="",t.description=C}function _U(e,t,n){let i=n.entityCollection,o=n.parentEntity,r=n.sourceResource,s=n.uriResolver,a=Dhe(t,i,n.context),c=a.kml,l=D7e(e,t,n.styleCollection,r,s),u=Xn(t,"name",Pe.kml);a.name=u,a.parent=o;let m=U7e(t);d(m)||(m=N7e(t)),a.availability=m,$z(a);function p(L){return L?L.show&&p(L.parent):!0}let y=nh(t,"visibility",Pe.kml);a.show=p(o)&&g(y,!0);let f=Pi(t,"author",Pe.atom),x=c.author;x.name=Xn(f,"name",Pe.atom),x.uri=Xn(f,"uri",Pe.atom),x.email=Xn(f,"email",Pe.atom);let _=Pi(t,"link",Pe.atom),C=c.link;C.href=us(_,"href"),C.hreflang=us(_,"hreflang"),C.rel=us(_,"rel"),C.type=us(_,"type"),C.title=us(_,"title"),C.length=us(_,"length"),c.address=Xn(t,"address",Pe.kml),c.phoneNumber=Xn(t,"phoneNumber",Pe.kml),c.snippet=Xn(t,"Snippet",Pe.kml),q7e(t,a),$7e(t,a,l,s,r);let V=e._ellipsoid;return jhe(t,a,V),Qhe(t,a,V),d(Pi(t,"Region",Pe.kml))&&Pt("kml-region","KML - Placemark Regions are unsupported"),{entity:a,styleEntity:l}}function Jhe(e,t,n,i){i.addNodes(t.childNodes,n),i.process()}function e6e(e,t,n,i){let o=_U(e,t,n),r=Ke(n);r.parentEntity=o.entity,Jhe(e,t,r,i)}function t6e(e,t,n,i){let o=_U(e,t,n),r=o.entity,s=o.styleEntity,a=!1,c=t.childNodes;for(let l=0,u=c.length;l<u&&!a;l++){let m=c.item(l),p=zhe[m.localName];d(p)&&(p(e,n.entityCollection,m,r,s,r.id),a=!0)}a||(r.merge(s),xU(e,r,s))}var n6e={FlyTo:r6e,Wait:o6e,SoundCue:Uz,AnimatedUpdate:Uz,TourControl:Uz};function i6e(e,t,n,i){let o=Xn(t,"name",Pe.kml),r=us(t,"id"),s=new _P(o,r),a=Pi(t,"Playlist",Pe.gx);if(a){let c=e._ellipsoid,l=a.childNodes;for(let u=0;u<l.length;u++){let m=l[u];if(m.localName){let p=n6e[m.localName];p?p(s,m,c):console.log(`Unknown KML Tour playlist entry type ${m.localName}`)}}}e._kmlTours.push(s)}function Uz(e,t){Pt(`KML Tour unsupported node ${t.localName}`)}function o6e(e,t){let n=ei(t,"duration",Pe.gx);e.addPlaylistEntry(new CP(n))}function r6e(e,t,n){let i=ei(t,"duration",Pe.gx),o=Xn(t,"flyToMode",Pe.gx),r={kml:{}};jhe(t,r,n),Qhe(t,r,n);let s=r.kml.lookAt||r.kml.camera,a=new SP(i,o,s);e.addPlaylistEntry(a)}function Qhe(e,t,n){let i=Pi(e,"Camera",Pe.kml);if(d(i)){let o=g(ei(i,"longitude",Pe.kml),0),r=g(ei(i,"latitude",Pe.kml),0),s=g(ei(i,"altitude",Pe.kml),0),a=g(ei(i,"heading",Pe.kml),0),c=g(ei(i,"tilt",Pe.kml),0),l=g(ei(i,"roll",Pe.kml),0),u=h.fromDegrees(o,r,s,n),m=Aa.fromDegrees(a,c-90,l);t.kml.camera=new dP(u,m)}}function jhe(e,t,n){let i=Pi(e,"LookAt",Pe.kml);if(d(i)){let o=g(ei(i,"longitude",Pe.kml),0),r=g(ei(i,"latitude",Pe.kml),0),s=g(ei(i,"altitude",Pe.kml),0),a=ei(i,"heading",Pe.kml),c=ei(i,"tilt",Pe.kml),l=g(ei(i,"range",Pe.kml),0);c=W.toRadians(g(c,0)),a=W.toRadians(g(a,0));let u=new Wu(a,c-W.PI_OVER_TWO,l),m=h.fromDegrees(o,r,s,n);t.kml.lookAt=new xP(m,u)}}function s6e(e,t,n,i){let o=n.screenOverlayContainer;if(!d(o))return;let r=n.sourceResource,s=n.uriResolver,a=Pi(t,"Icon",Pe.kml),c=Jz(a,e,r,s,!1);if(!d(c))return;let l=document.createElement("img");e._screenOverlays.push(l),l.src=c.url,l.onload=function(){let u=["position: absolute"],m=Pi(t,"screenXY",Pe.kml),p=Pi(t,"overlayXY",Pe.kml),y=Pi(t,"size",Pe.kml),f,x,_,C,V,L;d(y)&&(f=Fy(y,"x"),x=Fy(y,"y"),_=us(y,"xunits"),C=us(y,"yunits"),d(f)&&f!==-1&&f!==0&&(_==="fraction"?V=`width: ${Math.floor(f*100)}%`:_==="pixels"&&(V=`width: ${f}px`),u.push(V)),d(x)&&x!==-1&&x!==0&&(C==="fraction"?L=`height: ${Math.floor(x*100)}%`:C==="pixels"&&(L=`height: ${x}px`),u.push(L))),l.style=u.join(";");let Z=0,G=l.height;d(p)&&(f=Fy(p,"x"),x=Fy(p,"y"),_=us(p,"xunits"),C=us(p,"yunits"),d(f)&&(_==="fraction"?Z=f*l.width:(_==="pixels"||_==="insetPixels")&&(Z=f)),d(x)&&(C==="fraction"?G=x*l.height:(C==="pixels"||C==="insetPixels")&&(G=x))),d(m)&&(f=Fy(m,"x"),x=Fy(m,"y"),_=us(m,"xunits"),C=us(m,"yunits"),d(f)&&(_==="fraction"?V=`left: calc(${Math.floor(f*100)}% - ${Z}px)`:_==="pixels"?V=`left: ${f-Z}px`:_==="insetPixels"&&(V=`right: ${f-Z}px`),u.push(V)),d(x)&&(C==="fraction"?L=`bottom: calc(${Math.floor(x*100)}% - ${G}px)`:C==="pixels"?L=`bottom: ${x-G}px`:C==="insetPixels"&&(L=`top: ${x-G}px`),u.push(L))),l.style=u.join(";")},o.appendChild(l)}function a6e(e,t,n,i){let r=_U(e,t,n).entity,s,a=!1,c=e._ellipsoid,l=pU(Pi(t,"LatLonQuad",Pe.gx),c),u=ei(t,"drawOrder",Pe.kml);if(d(l))s=zz(),s.hierarchy=new ha(l),s.zIndex=u,r.polygon=s,a=!0;else{s=new um,s.zIndex=u,r.rectangle=s;let f=Pi(t,"LatLonBox",Pe.kml);if(d(f)){let x=ei(f,"west",Pe.kml),_=ei(f,"south",Pe.kml),C=ei(f,"east",Pe.kml),V=ei(f,"north",Pe.kml);d(x)&&(x=W.negativePiToPi(W.toRadians(x))),d(_)&&(_=W.clampToLatitudeRange(W.toRadians(_))),d(C)&&(C=W.negativePiToPi(W.toRadians(C))),d(V)&&(V=W.clampToLatitudeRange(W.toRadians(V))),s.coordinates=new de(x,_,C,V);let L=ei(f,"rotation",Pe.kml);if(d(L)){let Z=W.toRadians(L);s.rotation=Z,s.stRotation=Z}}}let m=Pi(t,"Icon",Pe.kml),p=Jz(m,e,n.sourceResource,n.uriResolver,!0);if(d(p)){a&&Pt("kml-gx:LatLonQuad","KML - gx:LatLonQuad Icon does not support texture projection.");let f=ei(m,"x",Pe.gx),x=ei(m,"y",Pe.gx),_=ei(m,"w",Pe.gx),C=ei(m,"h",Pe.gx);(d(f)||d(x)||d(_)||d(C))&&Pt("kml-groundOverlay-xywh","KML - gx:x, gx:y, gx:w, gx:h aren't supported for GroundOverlays"),s.material=p,s.material.color=M_(t,"color",Pe.kml),s.material.transparent=!0}else s.material=M_(t,"color",Pe.kml);let y=Xn(t,"altitudeMode",Pe.kml);d(y)?y==="absolute"?(s.height=ei(t,"altitude",Pe.kml),s.zIndex=void 0):y!=="clampToGround"&&Pt("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${y}`):(y=Xn(t,"altitudeMode",Pe.gx),y==="relativeToSeaFloor"?(Pt("kml-altitudeMode-relativeToSeaFloor","KML - altitudeMode relativeToSeaFloor is currently not supported, treating as absolute."),s.height=ei(t,"altitude",Pe.kml),s.zIndex=void 0):y==="clampToSeaFloor"?Pt("kml-altitudeMode-clampToSeaFloor","KML - altitudeMode clampToSeaFloor is currently not supported, treating as clampToGround."):d(y)&&Pt("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${y}`))}function qhe(e,t,n,i){e._unsupportedNode.raiseEvent(e,n.parentEntity,t,n.entityCollection,n.styleCollection,n.sourceResource,n.uriResolver),Pt(`kml-unsupportedFeature-${t.nodeName}`,`KML - Unsupported feature: ${t.nodeName}`)}var Ay={INTERVAL:0,EXPIRE:1,STOP:2};function yU(e){if(!d(e)||e.length===0)return"";let t=e[0];return(t==="&"||t==="?")&&(e=e.substring(1)),e}var c6e=new de,w1=new he,kz=new D,l6e=new h;function jz(e,t,n,i,o,r){function s(l){return l<-W.PI_OVER_TWO?-W.PI_OVER_TWO:l>W.PI_OVER_TWO?W.PI_OVER_TWO:l}function a(l){return l>W.PI?l-W.TWO_PI:l<-W.PI?l+W.TWO_PI:l}let c=Zg(e.queryParameters);if(c=c.replace(/%5B/g,"[").replace(/%5D/g,"]"),d(t)&&t._mode!==ie.MORPHING){let l,u;if(o=g(o,c6e),d(n)&&(kz.x=n.clientWidth*.5,kz.y=n.clientHeight*.5,l=t.pickEllipsoid(kz,r,l6e)),d(l)?u=r.cartesianToCartographic(l,w1):(u=de.center(o,w1),l=r.cartographicToCartesian(u)),d(i)&&!W.equalsEpsilon(i,1,W.EPSILON9)){let C=o.width*i*.5,V=o.height*i*.5;o=new de(a(u.longitude-C),s(u.latitude-V),a(u.longitude+C),s(u.latitude+V))}c=c.replace("[bboxWest]",W.toDegrees(o.west).toString()),c=c.replace("[bboxSouth]",W.toDegrees(o.south).toString()),c=c.replace("[bboxEast]",W.toDegrees(o.east).toString()),c=c.replace("[bboxNorth]",W.toDegrees(o.north).toString());let m=W.toDegrees(u.longitude).toString(),p=W.toDegrees(u.latitude).toString();c=c.replace("[lookatLon]",m),c=c.replace("[lookatLat]",p),c=c.replace("[lookatTilt]",W.toDegrees(t.pitch).toString()),c=c.replace("[lookatHeading]",W.toDegrees(t.heading).toString()),c=c.replace("[lookatRange]",h.distance(t.positionWC,l)),c=c.replace("[lookatTerrainLon]",m),c=c.replace("[lookatTerrainLat]",p),c=c.replace("[lookatTerrainAlt]",u.height.toString()),r.cartesianToCartographic(t.positionWC,w1),c=c.replace("[cameraLon]",W.toDegrees(w1.longitude).toString()),c=c.replace("[cameraLat]",W.toDegrees(w1.latitude).toString()),c=c.replace("[cameraAlt]",W.toDegrees(w1.height).toString());let y=t.frustum,f=y.aspectRatio,x="",_="";if(d(f)){let C=W.toDegrees(y.fov);f>1?(x=C,_=C/f):(_=C,x=C*f)}c=c.replace("[horizFov]",x.toString()),c=c.replace("[vertFov]",_.toString())}else c=c.replace("[bboxWest]","-180"),c=c.replace("[bboxSouth]","-90"),c=c.replace("[bboxEast]","180"),c=c.replace("[bboxNorth]","90"),c=c.replace("[lookatLon]",""),c=c.replace("[lookatLat]",""),c=c.replace("[lookatRange]",""),c=c.replace("[lookatTilt]",""),c=c.replace("[lookatHeading]",""),c=c.replace("[lookatTerrainLon]",""),c=c.replace("[lookatTerrainLat]",""),c=c.replace("[lookatTerrainAlt]",""),c=c.replace("[cameraLon]",""),c=c.replace("[cameraLat]",""),c=c.replace("[cameraAlt]",""),c=c.replace("[horizFov]",""),c=c.replace("[vertFov]","");d(n)?(c=c.replace("[horizPixels]",n.clientWidth),c=c.replace("[vertPixels]",n.clientHeight)):(c=c.replace("[horizPixels]",""),c=c.replace("[vertPixels]","")),c=c.replace("[terrainEnabled]","1"),c=c.replace("[clientVersion]","1"),c=c.replace("[kmlVersion]","2.2"),c=c.replace("[clientName]","Cesium"),c=c.replace("[language]","English"),e.setQueryParameters(Yl(c))}function d6e(e,t,n,i){let r=_U(e,t,n).entity,s=n.sourceResource,a=n.uriResolver,c=Pi(t,"Link",Pe.kml);if(d(c)||(c=Pi(t,"Url",Pe.kml)),d(c)){let l=Xn(c,"href",Pe.kml),u,m;if(d(l)){let p=l;if(l=Hz(l,s,n.uriResolver),/^data:/.test(l.getUrlComponent()))/\.kmz/i.test(s.getUrlComponent())||(p=s.getDerivedResource({url:p}));else{if(p=l.clone(),u=Xn(c,"viewRefreshMode",Pe.kml),u==="onRegion"){Pt("kml-refrehMode-onRegion","KML - Unsupported viewRefreshMode: onRegion");return}m=g(Xn(c,"viewBoundScale",Pe.kml),1);let _=u==="onStop"?"BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]":"",C=g(Xn(c,"viewFormat",Pe.kml),_),V=Xn(c,"httpQuery",Pe.kml);d(C)&&l.setQueryParameters(Yl(yU(C))),d(V)&&l.setQueryParameters(Yl(yU(V)));let L=e._ellipsoid;jz(l,e.camera,e.canvas,m,e._lastCameraView.bbox,L)}let y={sourceUri:p,uriResolver:a,context:r.id,screenOverlayContainer:n.screenOverlayContainer},f=new Es,x=qz(e,f,l,y).then(function(_){let C=e._entityCollection,V=f.values;C.suspendEvents();for(let G=0;G<V.length;G++){let X=V[G];d(X.parent)||(X.parent=r,$z(X)),C.add(X)}C.resumeEvents();let L=Xn(c,"refreshMode",Pe.kml),Z=g(ei(c,"refreshInterval",Pe.kml),0);if(L==="onInterval"&&Z>0||L==="onExpire"||u==="onStop"){let G=Pi(_,"NetworkLinkControl",Pe.kml),X=d(G),P=te.now(),v={id:Yn(),href:l,cookie:{},lastUpdated:P,updating:!1,entity:r,viewBoundScale:m,needsUpdate:!1,cameraUpdateTime:P},F=0;if(X&&(v.cookie=Yl(g(Xn(G,"cookie",Pe.kml),"")),F=g(ei(G,"minRefreshPeriod",Pe.kml),0)),L==="onInterval")X&&(Z=Math.max(F,Z)),v.refreshMode=Ay.INTERVAL,v.time=Z;else if(L==="onExpire"){let M;if(X&&(M=Xn(G,"expires",Pe.kml)),d(M))try{let b=te.fromIso8601(M),R=te.secondsDifference(b,P);R>0&&R<F&&te.addSeconds(P,F,b),v.refreshMode=Ay.EXPIRE,v.time=b}catch{Pt("kml-refreshMode-onInterval-onExpire","KML - NetworkLinkControl expires is not a valid date")}else Pt("kml-refreshMode-onExpire","KML - refreshMode of onExpire requires the NetworkLinkControl to have an expires element")}else d(e.camera)?(v.refreshMode=Ay.STOP,v.time=g(ei(c,"viewRefreshTime",Pe.kml),0)):Pt("kml-refrehMode-onStop-noCamera","A NetworkLink with viewRefreshMode=onStop requires the `camera` property to be defined.");d(v.refreshMode)&&e._networkLinks.set(v.id,v)}}).catch(function(_){Pt(`An error occured during loading ${l.url}`),e._error.raiseEvent(e,_)});i.addPromise(x)}}}function u6e(e,t,n,i){let o=Kz[t.localName];return d(o)?o(e,t,n,i):qhe(e,t,n,i)}function Yz(e,t,n,i,o,r,s){t.removeAll();let a=n.documentElement,c=a.localName==="Document"?a:Pi(a,"Document",Pe.kml),l=Xn(c,"name",Pe.kml);d(l)||(l=u0(i.getUrlComponent())),d(e._name)||(e._name=l);let u=new Cd._DeferredLoading(e),m=new Es(e);return Promise.all(Ohe(e,n,m,i,!1,o)).then(function(){let p=n.documentElement;if(p.localName==="kml"){let f=p.childNodes;for(let x=0;x<f.length;x++){let _=f[x];if(d(Kz[_.localName])){p=_;break}}}let y={parentEntity:void 0,entityCollection:t,styleCollection:m,sourceResource:i,uriResolver:o,context:s,screenOverlayContainer:r};return t.suspendEvents(),u6e(e,p,y,u),t.resumeEvents(),u.wait().then(function(){return n.documentElement})})}function m6e(e,t,n,i,o){let r=$t("ThirdParty/Workers/z-worker-pako.js");L1({workerScripts:{deflate:[r,"./pako_deflate.min.js"],inflate:[r,"./pako_inflate.min.js"]}});let s=new cU(new A_(n));return Promise.resolve(s.getEntries()).then(function(a){let c=[],l={},u;for(let m=0;m<a.length;m++){let p=a[m];p.directory||(/\.kml$/i.test(p.filename)&&(!d(u)||!/\//i.test(p.filename))?(d(u)&&c.push(Nz(u,l)),u=p):c.push(Nz(p,l)))}return d(u)&&c.push(M7e(u,l)),Promise.all(c).then(function(){if(s.close(),!d(l.kml))throw new me("KMZ file does not contain a KML document.");return l.keys=Object.keys(l),Yz(e,t,l.kml,i,l,o)})})}function qz(e,t,n,i){i=g(i,g.EMPTY_OBJECT);let o=i.sourceUri,r=i.uriResolver,s=i.context,a=i.screenOverlayContainer,c=n;if(typeof n=="string"||n instanceof Ee){n=Ee.createIfNeeded(n),c=n.fetchBlob(),o=g(o,n.clone());let l=e._resourceCredits,u=n.credits;if(d(u)){let m=u.length;for(let p=0;p<m;p++)l.push(u[p])}}else o=g(o,Ee.DEFAULT.clone());return o=Ee.createIfNeeded(o),d(a)&&(a=En(a)),Promise.resolve(c).then(function(l){return l instanceof Blob?F7e(l).then(function(u){return u?m6e(e,t,l,o,a):A7e(l).then(function(m){m=Uhe(m),m=khe(m);let p,y;try{p=Oz.parseFromString(m,"application/xml")}catch(f){y=f.toString()}if(d(y)||p.body||p.documentElement.tagName==="parsererror"){let f=d(y)?y:p.documentElement.firstChild.nodeValue;throw f||(f=p.body.innerText),new me(f)}return Yz(e,t,p,o,r,a,s)})}):Yz(e,t,l,o,r,a,s)}).catch(function(l){return e._error.raiseEvent(e,l),console.log(l),Promise.reject(l)})}function Cd(e){e=g(e,g.EMPTY_OBJECT);let t=e.camera,n=e.canvas;this._changed=new ye,this._error=new ye,this._loading=new ye,this._refresh=new ye,this._unsupportedNode=new ye,this._clock=void 0,this._entityCollection=new Es(this),this._name=void 0,this._isLoading=!1,this._pinBuilder=new C0,this._networkLinks=new Tt,this._entityCluster=new rd,this.canvas=n,this.camera=t,this._lastCameraView={position:d(t)?h.clone(t.positionWC):void 0,direction:d(t)?h.clone(t.directionWC):void 0,up:d(t)?h.clone(t.upWC):void 0,bbox:d(t)?t.computeViewRectangle():de.clone(de.MAX_VALUE)},this._ellipsoid=g(e.ellipsoid,re.WGS84);let i=e.credit;typeof i=="string"&&(i=new St(i)),this._credit=i,this._resourceCredits=[],this._kmlTours=[],this._screenOverlays=[]}Cd.load=function(e,t){return t=g(t,g.EMPTY_OBJECT),new Cd(t).load(e,t)};Object.defineProperties(Cd.prototype,{name:{get:function(){return this._name},set:function(e){this._name!==e&&(this._name=e,this._changed.raiseEvent(this))}},clock:{get:function(){return this._clock}},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading}},changedEvent:{get:function(){return this._changed}},errorEvent:{get:function(){return this._error}},loadingEvent:{get:function(){return this._loading}},refreshEvent:{get:function(){return this._refresh}},unsupportedNodeEvent:{get:function(){return this._unsupportedNode}},show:{get:function(){return this._entityCollection.show},set:function(e){this._entityCollection.show=e}},clustering:{get:function(){return this._entityCluster},set:function(e){this._entityCluster=e}},credit:{get:function(){return this._credit}},kmlTours:{get:function(){return this._kmlTours}}});Cd.prototype.load=function(e,t){t=g(t,g.EMPTY_OBJECT),Rr.setLoading(this,!0);let n=this._name;this._name=void 0,this._clampToGround=g(t.clampToGround,!1);let i=this;return qz(this,this._entityCollection,e,t).then(function(){let o,r=i._entityCollection.computeAvailability(),s=r.start,a=r.stop,c=te.equals(s,Be.MINIMUM_VALUE),l=te.equals(a,Be.MAXIMUM_VALUE);if(!c||!l){let m;c&&(m=new Date,m.setHours(0,0,0,0),s=te.fromDate(m)),l&&(m=new Date,m.setHours(24,0,0,0),a=te.fromDate(m)),o=new Dm,o.startTime=s,o.stopTime=a,o.currentTime=te.clone(s),o.clockRange=Gr.LOOP_STOP,o.clockStep=mo.SYSTEM_CLOCK_MULTIPLIER,o.multiplier=Math.round(Math.min(Math.max(te.secondsDifference(a,s)/60,1),31556900))}let u=!1;return o!==i._clock&&(i._clock=o,u=!0),n!==i._name&&(u=!0),u&&i._changed.raiseEvent(i),Rr.setLoading(i,!1),i}).catch(function(o){return Rr.setLoading(i,!1),i._error.raiseEvent(i,o),console.log(o),Promise.reject(o)})};Cd.prototype.destroy=function(){for(;this._screenOverlays.length>0;)this._screenOverlays.pop().remove()};function $z(e){let t=e.parent;if(d(t)){let n=t.availability;if(d(n)){let i=e.availability;d(i)?i.intersect(n):e.availability=n}}}function h6e(e,t,n,i,o){return function(r){if(!i.contains(t.id))return;let s=!1,a=Pi(r,"NetworkLinkControl",Pe.kml),c=d(a),l=0;if(c){if(d(Pi(a,"Update",Pe.kml))){Pt("kml-networkLinkControl-update","KML - NetworkLinkControl updates aren't supported."),t.updating=!1,i.remove(t.id);return}t.cookie=Yl(g(Xn(a,"cookie",Pe.kml),"")),l=g(ei(a,"minRefreshPeriod",Pe.kml),0)}let u=te.now(),m=t.refreshMode;if(m===Ay.INTERVAL)d(a)&&(t.time=Math.max(l,t.time));else if(m===Ay.EXPIRE){let P;if(d(a)&&(P=Xn(a,"expires",Pe.kml)),d(P))try{let v=te.fromIso8601(P),F=te.secondsDifference(v,u);F>0&&F<l&&te.addSeconds(u,l,v),t.time=v}catch{Pt("kml-networkLinkControl-expires","KML - NetworkLinkControl expires is not a valid date"),s=!0}else Pt("kml-refreshMode-onExpire","KML - refreshMode of onExpire requires the NetworkLinkControl to have an expires element"),s=!0}let p=t.entity,y=e._entityCollection,f=n.values;function x(P){y.remove(P);let v=P._children,F=v.length;for(let M=0;M<F;++M)x(v[M])}y.suspendEvents();let _=y.values.slice(),C;for(C=0;C<_.length;++C){let P=_[C];P.parent===p&&(P.parent=void 0,x(P))}for(y.resumeEvents(),y.suspendEvents(),C=0;C<f.length;C++){let P=f[C];d(P.parent)||(P.parent=p,$z(P)),y.add(P)}y.resumeEvents(),s?i.remove(t.id):t.lastUpdated=u;let V=y.computeAvailability(),L=V.start,Z=V.stop,G=te.equals(L,Be.MINIMUM_VALUE),X=te.equals(Z,Be.MAXIMUM_VALUE);if(!G||!X){let P=e._clock;(P.startTime!==L||P.stopTime!==Z)&&(P.startTime=L,P.stopTime=Z,e._changed.raiseEvent(e))}t.updating=!1,t.needsUpdate=!1,e._refresh.raiseEvent(e,o.getUrlComponent(!0))}}var Dz=new Tt;Cd.prototype.update=function(e){let t=this._networkLinks;if(t.length===0)return!0;let n=te.now(),i=this;Dz.removeAll();function o(u){let m=u._children,p=m.length;for(let y=0;y<p;++y){let f=m[y];Dz.set(f.id,f),o(f)}}let r=!1,s=this._lastCameraView,a=this.camera;d(a)&&!(a.positionWC.equalsEpsilon(s.position,W.EPSILON7)&&a.directionWC.equalsEpsilon(s.direction,W.EPSILON7)&&a.upWC.equalsEpsilon(s.up,W.EPSILON7))&&(s.position=h.clone(a.positionWC),s.direction=h.clone(a.directionWC),s.up=h.clone(a.upWC),s.bbox=a.computeViewRectangle(),r=!0);let c=new Tt,l=!1;return t.values.forEach(function(u){let m=u.entity;if(!Dz.contains(m.id)){if(!u.updating){let p=!1;if(u.refreshMode===Ay.INTERVAL?te.secondsDifference(n,u.lastUpdated)>u.time&&(p=!0):u.refreshMode===Ay.EXPIRE?te.greaterThan(n,u.time)&&(p=!0):u.refreshMode===Ay.STOP&&(r&&(u.needsUpdate=!0,u.cameraUpdateTime=n),u.needsUpdate&&te.secondsDifference(n,u.cameraUpdateTime)>=u.time&&(p=!0)),p){o(m),u.updating=!0;let y=new Es,f=u.href.clone();f.setQueryParameters(u.cookie);let x=g(i._ellipsoid,re.WGS84);jz(f,i.camera,i.canvas,u.viewBoundScale,s.bbox,x),qz(i,y,f,{context:m.id}).then(h6e(i,u,y,c,f)).catch(function(_){let C=`NetworkLink ${u.href} refresh failed: ${_}`;console.log(C),i._error.raiseEvent(i,C)}),l=!0}}c.set(u.id,u)}}),l&&(this._networkLinks=c,this._changed.raiseEvent(this)),!0};function f6e(){this.author={name:void 0,uri:void 0,email:void 0},this.link={href:void 0,hreflang:void 0,rel:void 0,type:void 0,title:void 0,length:void 0},this.address=void 0,this.phoneNumber=void 0,this.snippet=void 0,this.extendedData=void 0}Cd._DeferredLoading=_f;Cd._getTimestamp=gi;var RP=Cd;var iai=T(S(),1);function ZP(){fe.throwInstantiationError()}ZP.prototype.update=fe.throwInstantiationError;ZP.prototype.getBoundingSphere=fe.throwInstantiationError;ZP.prototype.isDestroyed=fe.throwInstantiationError;ZP.prototype.destroy=fe.throwInstantiationError;var eJ=ZP;var Pai=T(S(),1);var tJ=32,p6e="http://www.opengis.net/kml/2.2",oh="http://www.google.com/kml/ext/2.2",b6e="http://www.w3.org/2000/xmlns/";function TU(e){this._files={},this._promises=[],this._count=0,this._modelCallback=e}var y6e=/^data:image\/([^,;]+)/;TU.prototype.texture=function(e){let t=this,n;if(typeof e=="string"||e instanceof Ee){if(e=Ee.createIfNeeded(e),!e.isDataUri)return e.url;let i=e.url.match(y6e);n=`texture_${++this._count}`,d(i)&&(n+=`.${i[1]}`);let o=e.fetchBlob().then(function(r){t._files[n]=r});return this._promises.push(o),n}if(e instanceof HTMLCanvasElement){n=`texture_${++this._count}.png`;let i=new Promise(o=>{e.toBlob(function(r){t._files[n]=r,o()})});return this._promises.push(i),n}return""};function g6e(e,t){return function(n){e._files[t]=n}}TU.prototype.model=function(e,t){let n=this._modelCallback;if(!d(n))throw new me("Encountered a model entity while exporting to KML, but no model callback was supplied.");let i={},o=n(e,t,i);for(let r in i)if(i.hasOwnProperty(r)){let s=Promise.resolve(i[r]);this._promises.push(s),s.then(g6e(this,r))}return o};Object.defineProperties(TU.prototype,{promise:{get:function(){return Promise.all(this._promises)}},files:{get:function(){return this._files}}});function SU(e){this._time=e}SU.prototype.get=function(e,t,n){let i;return d(e)&&(i=d(e.getValue)?e.getValue(this._time,n):e),g(i,t)};SU.prototype.getColor=function(e,t){let n=this.get(e,t);if(d(n))return U_(n)};SU.prototype.getMaterialType=function(e){if(d(e))return e.getType(this._time)};function nJ(){this._ids={},this._styles={},this._count=0}nJ.prototype.get=function(e){let t=this._ids,n=e.innerHTML;if(d(t[n]))return t[n];let i=`style-${++this._count}`;return e.setAttribute("id",i),i=`#${i}`,t[n]=i,this._styles[n]=e,i};nJ.prototype.save=function(e){let t=this._styles,n=e.childNodes[0];for(let i in t)t.hasOwnProperty(i)&&e.insertBefore(t[i],n)};function tfe(){this._ids={}}tfe.prototype.get=function(e){if(!d(e))return this.get(Yn());let t=this._ids;return d(t[e])?`${e.toString()}-${++t[e]}`:(t[e]=0,e)};function iJ(e){e=g(e,g.EMPTY_OBJECT);let t=e.entities,n=g(e.kmz,!1),i=iJ._createState(e),o=t.values.filter(function(l){return!d(l.parent)}),r=i.kmlDoc,s=r.documentElement;s.setAttributeNS(b6e,"xmlns:gx",oh);let a=r.createElement("Document");s.appendChild(a),ife(i,a,o),i.styleCache.save(a);let c=i.externalFileHandler;return c.promise.then(function(){let u=new XMLSerializer().serializeToString(i.kmlDoc);return n?x6e(u,c.files):{kml:u,externalFiles:c.files}})}function x6e(e,t){let n=$t("ThirdParty/Workers/z-worker-pako.js");L1({workerScripts:{deflate:[n,"./pako_deflate.min.js"],inflate:[n,"./pako_inflate.min.js"]}});let i=new X1,o=new uU(i);return o.add("doc.kml",new Q5(e)).then(function(){let r=Object.keys(t);return nfe(o,r,t,0)}).then(function(){return o.close()}).then(function(r){return{kmz:r}})}function nfe(e,t,n,i){if(t.length===i)return;let o=t[i];return e.add(o,new A_(n[o])).then(function(){return nfe(e,t,n,i+1)})}iJ._createState=function(e){let t=e.entities,n=new nJ,i=t.computeAvailability(),o=d(e.time)?e.time:i.start,r=g(e.defaultAvailability,i),s=g(e.sampleDuration,60);r.start===Be.MINIMUM_VALUE?r.stop===Be.MAXIMUM_VALUE?r=new Tn:te.addSeconds(r.stop,-10*s,r.start):r.stop===Be.MAXIMUM_VALUE&&te.addSeconds(r.start,10*s,r.stop);let a=new TU(e.modelCallback);return{kmlDoc:document.implementation.createDocument(p6e,"kml"),ellipsoid:g(e.ellipsoid,re.WGS84),idManager:new tfe,styleCache:n,externalFileHandler:a,time:o,valueGetter:new SU(o),sampleDuration:s,defaultAvailability:new Lr([r])}};function ife(e,t,n){let i=e.kmlDoc,o=e.styleCache,r=e.valueGetter,s=e.idManager,a=n.length,c,l,u;for(let m=0;m<a;++m){let p=n[m];c=[],l=[],u=[],_6e(e,p,l,u),T6e(e,p.polyline,l,u),efe(e,p.rectangle,l,u,c),efe(e,p.polygon,l,u,c),L6e(e,p,p.model,l,u);let y,f=p.availability;d(f)&&(y=i.createElement("TimeSpan"),te.equals(f.start,Be.MINIMUM_VALUE)||y.appendChild(fn(i,"begin",te.toIso8601(f.start))),te.equals(f.stop,Be.MAXIMUM_VALUE)||y.appendChild(fn(i,"end",te.toIso8601(f.stop))));for(let C=0;C<c.length;++C){let V=c[C];V.setAttribute("id",s.get(p.id)),V.appendChild(fn(i,"name",p.name)),V.appendChild(fn(i,"visibility",p.show)),V.appendChild(fn(i,"description",p.description)),d(y)&&V.appendChild(y),t.appendChild(V)}let x=l.length;if(x>0){let C=i.createElement("Placemark");C.setAttribute("id",s.get(p.id));let V=p.name,L=p.label;if(d(L)){let G=i.createElement("LabelStyle"),X=r.get(L.text);V=d(X)&&X.length>0?X:V;let P=r.getColor(L.fillColor);d(P)&&(G.appendChild(fn(i,"color",P)),G.appendChild(fn(i,"colorMode","normal")));let v=r.get(L.scale);d(v)&&G.appendChild(fn(i,"scale",v)),u.push(G)}C.appendChild(fn(i,"name",V)),C.appendChild(fn(i,"visibility",p.show)),C.appendChild(fn(i,"description",p.description)),d(y)&&C.appendChild(y),t.appendChild(C);let Z=u.length;if(Z>0){let G=i.createElement("Style");for(let X=0;X<Z;++X)G.appendChild(u[X]);C.appendChild(fn(i,"styleUrl",o.get(G)))}if(l.length===1)C.appendChild(l[0]);else if(l.length>1){let G=i.createElement("MultiGeometry");for(let X=0;X<x;++X)G.appendChild(l[X]);C.appendChild(G)}}let _=p._children;if(_.length>0){let C=i.createElement("Folder");C.setAttribute("id",s.get(p.id)),C.appendChild(fn(i,"name",p.name)),C.appendChild(fn(i,"visibility",p.show)),C.appendChild(fn(i,"description",p.description)),t.appendChild(C),ife(e,C,_)}}}var Pl=new h,Dc=new he,ih=new te;function _6e(e,t,n,i){let o=e.kmlDoc,r=e.ellipsoid,s=e.valueGetter,a=g(t.billboard,t.point);if(!d(a)&&!d(t.path))return;let c=t.position;if(!c.isConstant){ofe(e,t,a,n,i);return}s.get(c,void 0,Pl);let l=fn(o,"coordinates",N_(Pl,r)),u=o.createElement("Point"),m=o.createElement("altitudeMode");m.appendChild(k_(e,a.heightReference)),u.appendChild(m),u.appendChild(l),n.push(u);let p=a instanceof Ia?sfe(e,a):rfe(e,a);i.push(p)}function ofe(e,t,n,i,o){let r=e.kmlDoc,s=e.ellipsoid,a=e.valueGetter,c,l=t.position,u=!0;l instanceof Js?(c=l.intervals,u=!1):c=g(t.availability,e.defaultAvailability);let m=n instanceof dp,p,y,f,x=[];for(p=0;p<c.length;++p){let C=c.get(p),V=u?l:C.data,L=r.createElement("altitudeMode");V instanceof mf?(V=V._value,L.appendChild(k_(e,Oe.CLAMP_TO_GROUND))):d(n)?L.appendChild(k_(e,n.heightReference)):L.appendChild(k_(e,Oe.NONE));let Z=[],G=[];if(V.isConstant){a.get(V,void 0,Pl);let P=fn(r,"coordinates",N_(Pl,s));Z.push(te.toIso8601(C.start)),G.push(P),Z.push(te.toIso8601(C.stop)),G.push(P)}else if(V instanceof js)for(f=V._property._times,y=0;y<f.length;++y)Z.push(te.toIso8601(f[y])),V.getValueInReferenceFrame(f[y],io.FIXED,Pl),G.push(N_(Pl,s));else if(V instanceof ld){f=V._times;let P=V._values;for(y=0;y<f.length;++y)Z.push(te.toIso8601(f[y])),h.fromArray(P,y*3,Pl),G.push(N_(Pl,s))}else{let P=e.sampleDuration;C.start.clone(ih),C.isStartIncluded||te.addSeconds(ih,P,ih);let v=C.stop;for(;te.lessThan(ih,v);)V.getValue(ih,Pl),Z.push(te.toIso8601(ih)),G.push(N_(Pl,s)),te.addSeconds(ih,P,ih);C.isStopIncluded&&te.equals(ih,v)&&(V.getValue(ih,Pl),Z.push(te.toIso8601(ih)),G.push(N_(Pl,s)))}let X=r.createElementNS(oh,"Track");X.appendChild(L);for(let P=0;P<Z.length;++P){let v=fn(r,"when",Z[P]),F=fn(r,"coord",G[P],oh);X.appendChild(v),X.appendChild(F)}m&&X.appendChild(afe(e,n)),x.push(X)}if(x.length===1)i.push(x[0]);else if(x.length>1){let C=r.createElementNS(oh,"MultiTrack");for(p=0;p<x.length;++p)C.appendChild(x[p]);i.push(C)}if(d(n)&&!m){let C=n instanceof Ia?sfe(e,n):rfe(e,n);o.push(C)}let _=t.path;if(d(_)){let C=a.get(_.width),V=_.material;if(d(V)||d(C)){let L=r.createElement("LineStyle");d(C)&&L.appendChild(fn(r,"width",C)),oJ(e,V,L),o.push(L)}}}function rfe(e,t){let n=e.kmlDoc,i=e.valueGetter,o=n.createElement("IconStyle"),r=i.getColor(t.color);d(r)&&(o.appendChild(fn(n,"color",r)),o.appendChild(fn(n,"colorMode","normal")));let s=i.get(t.pixelSize);return d(s)&&o.appendChild(fn(n,"scale",s/tJ)),o}function sfe(e,t){let n=e.kmlDoc,i=e.valueGetter,o=e.externalFileHandler,r=n.createElement("IconStyle"),s=i.get(t.image);if(d(s)){s=o.texture(s);let p=n.createElement("Icon");p.appendChild(fn(n,"href",s));let y=i.get(t.imageSubRegion);d(y)&&(p.appendChild(fn(n,"x",y.x,oh)),p.appendChild(fn(n,"y",y.y,oh)),p.appendChild(fn(n,"w",y.width,oh)),p.appendChild(fn(n,"h",y.height,oh))),r.appendChild(p)}let a=i.getColor(t.color);d(a)&&(r.appendChild(fn(n,"color",a)),r.appendChild(fn(n,"colorMode","normal")));let c=i.get(t.scale);d(c)&&r.appendChild(fn(n,"scale",c));let l=i.get(t.pixelOffset);if(d(l)){c=g(c,1),D.divideByScalar(l,c,l);let p=i.get(t.width,tJ),y=i.get(t.height,tJ),f=i.get(t.horizontalOrigin,pi.CENTER);f===pi.CENTER?l.x-=p*.5:f===pi.RIGHT&&(l.x-=p);let x=i.get(t.verticalOrigin,In.CENTER);x===In.TOP?l.y+=y:x===In.CENTER&&(l.y+=y*.5);let _=n.createElement("hotSpot");_.setAttribute("x",-l.x),_.setAttribute("y",l.y),_.setAttribute("xunits","pixels"),_.setAttribute("yunits","pixels"),r.appendChild(_)}let u=i.get(t.rotation),m=i.get(t.alignedAxis);return d(u)&&h.equals(h.UNIT_Z,m)&&(u=W.toDegrees(-u),u===0&&(u=360),r.appendChild(fn(n,"heading",u))),r}function T6e(e,t,n,i){let o=e.kmlDoc,r=e.ellipsoid,s=e.valueGetter;if(!d(t))return;let a=o.createElement("LineString"),c=o.createElement("altitudeMode"),l=s.get(t.clampToGround,!1),u;l?(a.appendChild(fn(o,"tessellate",!0)),u=o.createTextNode("clampToGround")):u=o.createTextNode("absolute"),c.appendChild(u),a.appendChild(c);let m=t.positions,p=s.get(m),y=fn(o,"coordinates",N_(p,r));a.appendChild(y);let f=s.get(t.zIndex);l&&d(f)&&a.appendChild(fn(o,"drawOrder",f,oh)),n.push(a);let x=o.createElement("LineStyle"),_=s.get(t.width);d(_)&&x.appendChild(fn(o,"width",_)),oJ(e,t.material,x),i.push(x)}function S6e(e,t,n){let i=e.kmlDoc,o=e.valueGetter,r=o.get(t.height,0);n>0&&(r=n);let s=t.coordinates,a=o.get(s),c=[],l=[de.northeast,de.southeast,de.southwest,de.northwest];for(let y=0;y<4;++y)l[y](a,Dc),c.push(`${W.toDegrees(Dc.longitude)},${W.toDegrees(Dc.latitude)},${r}`);let u=fn(i,"coordinates",c.join(" ")),m=i.createElement("outerBoundaryIs"),p=i.createElement("LinearRing");return p.appendChild(u),m.appendChild(p),[m]}function $he(e,t,n,i){let o=e.kmlDoc,r=e.ellipsoid,s=[],a=t.length;for(let u=0;u<a;++u)he.fromCartesian(t[u],r,Dc),s.push(`${W.toDegrees(Dc.longitude)},${W.toDegrees(Dc.latitude)},${i?Dc.height:n}`);let c=fn(o,"coordinates",s.join(" ")),l=o.createElement("LinearRing");return l.appendChild(c),l}function C6e(e,t,n){let i=e.kmlDoc,o=e.valueGetter,r=o.get(t.height,0),s=o.get(t.perPositionHeight,!1);!s&&n>0&&(r=n);let a=[],c=t.hierarchy,l=o.get(c),u=Array.isArray(l)?l:l.positions,m=i.createElement("outerBoundaryIs");m.appendChild($he(e,u,r,s)),a.push(m);let p=l.holes;if(d(p)){let y=p.length;for(let f=0;f<y;++f){let x=i.createElement("innerBoundaryIs");x.appendChild($he(e,p[f].positions,r,s)),a.push(x)}}return a}function efe(e,t,n,i,o){let r=e.kmlDoc,s=e.valueGetter;if(!d(t))return;let a=t instanceof um;if(a&&s.getMaterialType(t.material)==="Image"){V6e(e,t,o);return}let c=r.createElement("Polygon"),l=s.get(t.extrudedHeight,0);l>0&&c.appendChild(fn(r,"extrude",!0));let u=a?S6e(e,t,l):C6e(e,t,l),m=u.length;for(let _=0;_<m;++_)c.appendChild(u[_]);let p=r.createElement("altitudeMode");p.appendChild(k_(e,t.heightReference)),c.appendChild(p),n.push(c);let y=r.createElement("PolyStyle"),f=s.get(t.fill,!1);f&&y.appendChild(fn(r,"fill",f)),oJ(e,t.material,y);let x=s.get(t.outline,!1);if(x){y.appendChild(fn(r,"outline",x));let _=r.createElement("LineStyle"),C=s.get(t.outlineWidth,1);_.appendChild(fn(r,"width",C));let V=s.getColor(t.outlineColor,Y.BLACK);_.appendChild(fn(r,"color",V)),_.appendChild(fn(r,"colorMode","normal")),i.push(_)}i.push(y)}function V6e(e,t,n){let i=e.kmlDoc,o=e.valueGetter,r=e.externalFileHandler,s=i.createElement("GroundOverlay"),a=i.createElement("altitudeMode");a.appendChild(k_(e,t.heightReference)),s.appendChild(a);let c=o.get(t.height);d(c)&&s.appendChild(fn(i,"altitude",c));let l=o.get(t.coordinates),u=i.createElement("LatLonBox");u.appendChild(fn(i,"north",W.toDegrees(l.north))),u.appendChild(fn(i,"south",W.toDegrees(l.south))),u.appendChild(fn(i,"east",W.toDegrees(l.east))),u.appendChild(fn(i,"west",W.toDegrees(l.west))),s.appendChild(u);let m=o.get(t.material),p=r.texture(m.image),y=i.createElement("Icon");y.appendChild(fn(i,"href",p)),s.appendChild(y);let f=m.color;d(f)&&s.appendChild(fn(i,"color",U_(m.color))),n.push(s)}function afe(e,t){let n=e.kmlDoc,i=e.valueGetter,o=e.externalFileHandler,r=n.createElement("Model"),s=i.get(t.scale);if(d(s)){let l=n.createElement("scale");l.appendChild(fn(n,"x",s)),l.appendChild(fn(n,"y",s)),l.appendChild(fn(n,"z",s)),r.appendChild(l)}let a=n.createElement("Link"),c=o.model(t,e.time);return a.appendChild(fn(n,"href",c)),r.appendChild(a),r}function L6e(e,t,n,i,o){let r=e.kmlDoc,s=e.ellipsoid,a=e.valueGetter;if(!d(n))return;let c=t.position;if(!c.isConstant){ofe(e,t,n,i,o);return}let l=afe(e,n),u=r.createElement("altitudeMode");u.appendChild(k_(e,n.heightReference)),l.appendChild(u),a.get(c,void 0,Pl),he.fromCartesian(Pl,s,Dc);let m=r.createElement("Location");m.appendChild(fn(r,"longitude",W.toDegrees(Dc.longitude))),m.appendChild(fn(r,"latitude",W.toDegrees(Dc.latitude))),m.appendChild(fn(r,"altitude",Dc.height)),l.appendChild(m),i.push(l)}function oJ(e,t,n){let i=e.kmlDoc,o=e.valueGetter;if(!d(t))return;let r=o.get(t);if(!d(r))return;let s,a=o.getMaterialType(t),c,l;switch(a){case"Image":s=U_(Y.WHITE);break;case"Color":case"Grid":case"PolylineGlow":case"PolylineArrow":case"PolylineDash":s=U_(r.color);break;case"PolylineOutline":s=U_(r.color),c=U_(r.outlineColor),l=r.outlineWidth,n.appendChild(fn(i,"outerColor",c,oh)),n.appendChild(fn(i,"outerWidth",l,oh));break;case"Stripe":s=U_(r.oddColor);break}d(s)&&(n.appendChild(fn(i,"color",s)),n.appendChild(fn(i,"colorMode","normal")))}function k_(e,t){let n=e.kmlDoc,o=e.valueGetter.get(t,Oe.NONE),r;switch(o){case Oe.NONE:r=n.createTextNode("absolute");break;case Oe.CLAMP_TO_GROUND:r=n.createTextNode("clampToGround");break;case Oe.RELATIVE_TO_GROUND:r=n.createTextNode("relativeToGround");break}return r}function N_(e,t){Array.isArray(e)||(e=[e]);let n=e.length,i=[];for(let o=0;o<n;++o)he.fromCartesian(e[o],t,Dc),i.push(`${W.toDegrees(Dc.longitude)},${W.toDegrees(Dc.latitude)},${Dc.height}`);return i.join(" ")}function fn(e,t,n,i){n=g(n,""),typeof n=="boolean"&&(n=n?"1":"0");let o=d(i)?e.createElementNS(i,t):e.createElement(t),r=n==="string"&&n.indexOf("<")!==-1?e.createCDATASection(n):e.createTextNode(n);return o.appendChild(r),o}function U_(e){let t="",n=e.toBytes();for(let i=3;i>=0;--i)t+=n[i]<16?`0${n[i].toString(16)}`:n[i].toString(16);return t}var rJ=iJ;var zai=T(S(),1);var wai=T(S(),1),D_=`in vec4 position;
  7413. in vec2 textureCoordinates;
  7414. out vec2 v_textureCoordinates;
  7415. void main()
  7416. {
  7417. gl_Position = position;
  7418. v_textureCoordinates = textureCoordinates;
  7419. }
  7420. `;function CU(e){this._context=e}var GP,R6e=new nt({primitiveType:Fe.TRIANGLES}),Z6e=new oi({color:new Y(0,0,0,0)});function G6e(e,t){return new Os({context:e,colorTextures:[t],destroyAttachments:!1})}function E6e(e,t){return Qt.fromCache({context:e,vertexShaderSource:D_,fragmentShaderSource:t,attributeLocations:{position:0,textureCoordinates:1}})}function X6e(e,t){return(!d(GP)||GP.viewport.width!==e||GP.viewport.height!==t)&&(GP=De.fromCache({viewport:new He(0,0,e,t)})),GP}CU.prototype.execute=function(e){d(e.preExecute)&&e.preExecute(e);let t=e.outputTexture,n=t.width,i=t.height,o=this._context,r=d(e.vertexArray)?e.vertexArray:o.getViewportQuadVertexArray(),s=d(e.shaderProgram)?e.shaderProgram:E6e(o,e.fragmentShaderSource),a=G6e(o,t),c=X6e(n,i),l=e.uniformMap,u=Z6e;u.framebuffer=a,u.renderState=c,u.execute(o);let m=R6e;m.vertexArray=r,m.renderState=c,m.shaderProgram=s,m.uniformMap=l,m.framebuffer=a,m.execute(o),a.destroy(),e.persists||(s.destroy(),d(e.vertexArray)&&r.destroy()),d(e.postExecute)&&e.postExecute(t)};CU.prototype.isDestroyed=function(){return!1};CU.prototype.destroy=function(){return ue(this)};var EP=CU;var yli=T(S(),1);var Qai=T(S(),1);function I6e(e){this.context=e,this.framebuffer=void 0,this.blendingEnabled=void 0,this.scissorTest=void 0,this.viewport=void 0}var oc=I6e;var nci=T(S(),1);function rh(e){this._context=e,this._shaders={},this._numberOfShaders=0,this._shadersToRelease={}}Object.defineProperties(rh.prototype,{numberOfShaders:{get:function(){return this._numberOfShaders}}});rh.prototype.replaceShaderProgram=function(e){return d(e.shaderProgram)&&e.shaderProgram.destroy(),this.getShaderProgram(e)};function W6e(e){let t=Object.keys(e).sort();return JSON.stringify(e,t)}rh.prototype.getShaderProgram=function(e){let t=e.vertexShaderSource,n=e.fragmentShaderSource,i=e.attributeLocations;typeof t=="string"&&(t=new Ye({sources:[t]})),typeof n=="string"&&(n=new Ye({sources:[n]}));let o=t.getCacheKey(),r=n.getCacheKey(),s=d(i)?W6e(i):"",a=`${o}:${r}:${s}`,c;if(d(this._shaders[a]))c=this._shaders[a],delete this._shadersToRelease[a];else{let l=this._context,u=t.createCombinedVertexShader(l),m=n.createCombinedFragmentShader(l),p=new Qt({gl:l._gl,logShaderCompilation:l.logShaderCompilation,debugShaders:l.debugShaders,vertexShaderSource:t,vertexShaderText:u,fragmentShaderSource:n,fragmentShaderText:m,attributeLocations:i});c={cache:this,shaderProgram:p,keyword:a,derivedKeywords:[],count:0},p._cachedShader=c,this._shaders[a]=c,++this._numberOfShaders}return++c.count,c.shaderProgram};rh.prototype.replaceDerivedShaderProgram=function(e,t,n){let i=e._cachedShader,o=t+i.keyword,r=this._shaders[o];if(d(r)){sJ(this,r);let s=i.derivedKeywords.indexOf(t);s>-1&&i.derivedKeywords.splice(s,1)}return this.createDerivedShaderProgram(e,t,n)};rh.prototype.getDerivedShaderProgram=function(e,t){let n=e._cachedShader,i=t+n.keyword,o=this._shaders[i];if(d(o))return o.shaderProgram};rh.prototype.createDerivedShaderProgram=function(e,t,n){let i=e._cachedShader,o=t+i.keyword,r=n.vertexShaderSource,s=n.fragmentShaderSource,a=n.attributeLocations;typeof r=="string"&&(r=new Ye({sources:[r]})),typeof s=="string"&&(s=new Ye({sources:[s]}));let c=this._context,l=r.createCombinedVertexShader(c),u=s.createCombinedFragmentShader(c),m=new Qt({gl:c._gl,logShaderCompilation:c.logShaderCompilation,debugShaders:c.debugShaders,vertexShaderSource:r,vertexShaderText:l,fragmentShaderSource:s,fragmentShaderText:u,attributeLocations:a}),p={cache:this,shaderProgram:m,keyword:o,derivedKeywords:[],count:0};return i.derivedKeywords.push(t),m._cachedShader=p,this._shaders[o]=p,m};function sJ(e,t){let n=t.derivedKeywords,i=n.length;for(let o=0;o<i;++o){let r=n[o]+t.keyword,s=e._shaders[r];sJ(e,s)}delete e._shaders[t.keyword],t.shaderProgram.finalDestroy()}rh.prototype.destroyReleasedShaderPrograms=function(){let e=this._shadersToRelease;for(let t in e)if(e.hasOwnProperty(t)){let n=e[t];sJ(this,n),--this._numberOfShaders}this._shadersToRelease={}};rh.prototype.releaseShaderProgram=function(e){if(d(e)){let t=e._cachedShader;t&&--t.count===0&&(this._shadersToRelease[t.keyword]=t)}};rh.prototype.isDestroyed=function(){return!1};rh.prototype.destroy=function(){let e=this._shaders;for(let t in e)e.hasOwnProperty(t)&&e[t].shaderProgram.finalDestroy();return ue(this)};var XP=rh;var sci=T(S(),1);function B_(){this._textures={},this._numberOfTextures=0,this._texturesToRelease={}}Object.defineProperties(B_.prototype,{numberOfTextures:{get:function(){return this._numberOfTextures}}});B_.prototype.getTexture=function(e){let t=this._textures[e];if(d(t))return delete this._texturesToRelease[e],++t.count,t.texture};B_.prototype.addTexture=function(e,t){let n={texture:t,count:1};t.finalDestroy=t.destroy;let i=this;t.destroy=function(){--n.count===0&&(i._texturesToRelease[e]=n)},this._textures[e]=n,++this._numberOfTextures};B_.prototype.destroyReleasedTextures=function(){let e=this._texturesToRelease;for(let t in e)if(e.hasOwnProperty(t)){let n=e[t];delete this._textures[t],n.texture.finalDestroy(),--this._numberOfTextures}this._texturesToRelease={}};B_.prototype.isDestroyed=function(){return!1};B_.prototype.destroy=function(){let e=this._textures;for(let t in e)e.hasOwnProperty(t)&&e[t].texture.finalDestroy();return ue(this)};var IP=B_;var Nci=T(S(),1);var pci=T(S(),1);var aJ={};function P6e(e){let t=6.239996+.0172019696544*e;return .001657*Math.sin(t+.01671*Math.sin(t))}var v6e=32.184,w6e=2451545;function Rfe(e,t){t=te.addSeconds(e,v6e,t);let n=te.totalDays(t)-w6e;return t=te.addSeconds(t,P6e(n),t),t}var VU=new te(2451545,0,Jn.TAI),F6e=1e3,wu=W.RADIANS_PER_DEGREE,Vd=W.RADIANS_PER_ARCSECOND,Ta=14959787e4,cfe=new $;function Zfe(e,t,n,i,o,r,s){n<0&&(n=-n,o+=W.PI);let a=e*(1-t),c=i-o,l=o,u=M6e(r-i,t),m=A6e(t,0);B6e(c,n,l,cfe);let p=a*(1+t),y=Math.cos(u),f=Math.sin(u),x=1+t*y,_=p/x;return d(s)?(s.x=_*y,s.y=_*f,s.z=0):s=new h(_*y,_*f,0),$.multiplyByVector(cfe,s,s)}function A6e(e,t){return e<=t?"Circular":e<1-t?"Elliptical":e<=1+t?"Parabolic":"Hyperbolic"}function M6e(e,t){let n=k6e(e,t);return D6e(n,t)}var N6e=50,U6e=W.EPSILON8;function k6e(e,t){let n=Math.floor(e/W.TWO_PI);e-=n*W.TWO_PI;let i=e+t*Math.sin(e)/(1-Math.sin(e+t)+Math.sin(e)),o=Number.MAX_VALUE,r;for(r=0;r<N6e&&Math.abs(o-i)>U6e;++r){o=i;let s=o-t*Math.sin(o)-e,a=1-t*Math.cos(o);i=o-s/a}return o=i+n*W.TWO_PI,o}function D6e(e,t){let n=Math.floor(e/W.TWO_PI);e-=n*W.TWO_PI;let i=Math.cos(e)-t,o=Math.sin(e)*Math.sqrt(1-t*t),r=Math.atan2(o,i);return r=W.zeroToTwoPi(r),e<0&&(r-=W.TWO_PI),r+=n*W.TWO_PI,r}function B6e(e,t,n,i){let o=Math.cos(e),r=Math.sin(e),s=Math.cos(t),a=Math.sin(t),c=Math.cos(n),l=Math.sin(n);return d(i)?(i[0]=c*o-l*r*s,i[1]=l*o+c*r*s,i[2]=r*a,i[3]=-c*r-l*o*s,i[4]=-l*r+c*o*s,i[5]=o*a,i[6]=l*a,i[7]=-c*a,i[8]=s):i=new $(c*o-l*r*s,-c*r-l*o*s,l*a,l*o+c*r*s,-l*r+c*o*s,-c*a,r*a,o*a,s),i}var Y6e=1.0000010178*Ta,O6e=100.46645683*wu,K6e=129597742283429e-5*Vd,lfe=16002,dfe=21863,ufe=32004,mfe=10931,hfe=14529,ffe=16368,pfe=15318,bfe=32794,H6e=64*1e-7*Ta,z6e=-152*1e-7*Ta,J6e=62*1e-7*Ta,Q6e=-8*1e-7*Ta,j6e=32*1e-7*Ta,q6e=-41*1e-7*Ta,$6e=19*1e-7*Ta,eqe=-11*1e-7*Ta,tqe=-150*1e-7*Ta,nqe=-46*1e-7*Ta,iqe=68*1e-7*Ta,oqe=54*1e-7*Ta,rqe=14*1e-7*Ta,sqe=24*1e-7*Ta,aqe=-28*1e-7*Ta,cqe=22*1e-7*Ta,yfe=10,gfe=16002,xfe=21863,_fe=10931,Tfe=1473,Sfe=32004,Cfe=4387,Vfe=73,lqe=-325*1e-7,dqe=-322*1e-7,uqe=-79*1e-7,mqe=232*1e-7,hqe=-52*1e-7,fqe=97*1e-7,pqe=55*1e-7,bqe=-41*1e-7,yqe=-105*1e-7,gqe=-137*1e-7,xqe=258*1e-7,_qe=35*1e-7,Tqe=-116*1e-7,Sqe=-88*1e-7,Cqe=-112*1e-7,Vqe=-80*1e-7,F1=new te(0,0,Jn.TAI);function Lqe(e,t){Rfe(e,F1);let i=(F1.dayNumber-VU.dayNumber+(F1.secondsOfDay-VU.secondsOfDay)/Qn.SECONDS_PER_DAY)/(Qn.DAYS_PER_JULIAN_CENTURY*10),o=.3595362*i,r=Y6e+H6e*Math.cos(lfe*o)+tqe*Math.sin(lfe*o)+z6e*Math.cos(dfe*o)+nqe*Math.sin(dfe*o)+J6e*Math.cos(ufe*o)+iqe*Math.sin(ufe*o)+Q6e*Math.cos(mfe*o)+oqe*Math.sin(mfe*o)+j6e*Math.cos(hfe*o)+rqe*Math.sin(hfe*o)+q6e*Math.cos(ffe*o)+sqe*Math.sin(ffe*o)+$6e*Math.cos(pfe*o)+aqe*Math.sin(pfe*o)+eqe*Math.cos(bfe*o)+cqe*Math.sin(bfe*o),s=O6e+K6e*i+lqe*Math.cos(yfe*o)+yqe*Math.sin(yfe*o)+dqe*Math.cos(gfe*o)+gqe*Math.sin(gfe*o)+uqe*Math.cos(xfe*o)+xqe*Math.sin(xfe*o)+mqe*Math.cos(_fe*o)+_qe*Math.sin(_fe*o)+hqe*Math.cos(Tfe*o)+Tqe*Math.sin(Tfe*o)+fqe*Math.cos(Sfe*o)+Sqe*Math.sin(Sfe*o)+pqe*Math.cos(Cfe*o)+Cqe*Math.sin(Cfe*o)+bqe*Math.cos(Vfe*o)+Vqe*Math.sin(Vfe*o),a=.0167086342-.0004203654*i,c=102.93734808*wu+11612.3529*Vd*i,l=469.97289*Vd*i,u=174.87317577*wu-8679.27034*Vd*i;return Zfe(r,a,l,c,u,s,t)}function Gfe(e,t){Rfe(e,F1);let i=(F1.dayNumber-VU.dayNumber+(F1.secondsOfDay-VU.secondsOfDay)/Qn.SECONDS_PER_DAY)/Qn.DAYS_PER_JULIAN_CENTURY,o=i*i,r=o*i,s=r*i,a=383397.7725+.004*i,c=.055545526-16e-9*i,l=5.15668983*wu,u=-8e-5*i+.02966*o-42e-6*r-13e-8*s,m=83.35324312*wu,p=146434202669e-4*i-38.2702*o-.045047*r+21301e-8*s,y=125.04455501*wu,f=-69679193631e-4*i+6.3602*o+.007625*r-3586e-8*s,x=218.31664563*wu,_=17325593434847e-4*i-6.391*o+.006588*r-3169e-8*s,C=297.85019547*wu+Vd*(1602961601209e-3*i-6.3706*o+.006593*r-3169e-8*s),V=93.27209062*wu+Vd*(17395272628478e-4*i-12.7512*o-.001037*r+417e-8*s),L=134.96340251*wu+Vd*(17179159232178e-4*i+31.8792*o+.051635*r-2447e-7*s),Z=357.52910918*wu+Vd*(1295965810481e-4*i-.5532*o+136e-6*r-1149e-8*s),G=310.17137918*wu-Vd*(6967051436e-3*i+6.2068*o+.007618*r-3219e-8*s),X=2*C,P=4*C,v=6*C,F=2*L,M=3*L,b=4*L,R=2*V;a+=3400.4*Math.cos(X)-635.6*Math.cos(X-L)-235.6*Math.cos(L)+218.1*Math.cos(X-Z)+181*Math.cos(X+L),c+=.014216*Math.cos(X-L)+.008551*Math.cos(X-F)-.001383*Math.cos(L)+.001356*Math.cos(X+L)-.001147*Math.cos(P-M)-914e-6*Math.cos(P-F)+869e-6*Math.cos(X-Z-L)-627e-6*Math.cos(X)-394e-6*Math.cos(P-b)+282e-6*Math.cos(X-Z-F)-279e-6*Math.cos(C-L)-236e-6*Math.cos(F)+231e-6*Math.cos(P)+229e-6*Math.cos(v-b)-201e-6*Math.cos(F-R),u+=486.26*Math.cos(X-R)-40.13*Math.cos(X)+37.51*Math.cos(R)+25.73*Math.cos(F-R)+19.97*Math.cos(X-Z-R),p+=-55609*Math.sin(X-L)-34711*Math.sin(X-F)-9792*Math.sin(L)+9385*Math.sin(P-M)+7505*Math.sin(P-F)+5318*Math.sin(X+L)+3484*Math.sin(P-b)-3417*Math.sin(X-Z-L)-2530*Math.sin(v-b)-2376*Math.sin(X)-2075*Math.sin(X-M)-1883*Math.sin(F)-1736*Math.sin(v-5*L)+1626*Math.sin(Z)-1370*Math.sin(v-M),f+=-5392*Math.sin(X-R)-540*Math.sin(Z)-441*Math.sin(X)+423*Math.sin(R)-288*Math.sin(F-R),_+=-3332.9*Math.sin(X)+1197.4*Math.sin(X-L)-662.5*Math.sin(Z)+396.3*Math.sin(L)-218*Math.sin(X-Z);let E=2*G,I=3*G;u+=46.997*Math.cos(G)*i-.614*Math.cos(X-R+G)*i+.614*Math.cos(X-R-G)*i-.0297*Math.cos(E)*o-.0335*Math.cos(G)*o+.0012*Math.cos(X-R+E)*o-16e-5*Math.cos(G)*r+4e-5*Math.cos(I)*r+4e-5*Math.cos(E)*r;let w=2.116*Math.sin(G)*i-.111*Math.sin(X-R-G)*i-.0015*Math.sin(G)*o;p+=w,_+=w,f+=-520.77*Math.sin(G)*i+13.66*Math.sin(X-R+G)*i+1.12*Math.sin(X-G)*i-1.06*Math.sin(R-G)*i+.66*Math.sin(E)*o+.371*Math.sin(G)*o-.035*Math.sin(X-R+E)*o-.015*Math.sin(X-R+G)*o+.0014*Math.sin(G)*r-.0011*Math.sin(I)*r-9e-4*Math.sin(E)*r,a*=F6e;let N=l+u*Vd,B=m+p*Vd,k=x+_*Vd,O=y+f*Vd;return Zfe(a,c,N,B,O,k,t)}var Lfe=.012300034,Rqe=Lfe/(Lfe+1)*-1;function Zqe(e,t){return t=Gfe(e,t),h.multiplyByScalar(t,Rqe,t)}var Efe=new $(1.0000000000000002,5619723173785822e-31,4690511510146299e-34,-5154129427414611e-31,.9174820620691819,-.39777715593191376,-223970096136568e-30,.39777715593191376,.9174820620691819),WP=new h;aJ.computeSunPositionInEarthInertialFrame=function(e,t){return d(e)||(e=te.now()),d(t)||(t=new h),WP=Lqe(e,WP),t=h.negate(WP,t),Zqe(e,WP),h.subtract(t,WP,t),$.multiplyByVector(Efe,t,t),t};aJ.computeMoonPositionInEarthInertialFrame=function(e,t){return d(e)||(e=te.now()),t=Gfe(e,t),$.multiplyByVector(Efe,t,t),t};var My=aJ;var xci=T(S(),1);function Gqe(e){e=g(e,g.EMPTY_OBJECT),this.color=Y.clone(g(e.color,Y.WHITE)),this.intensity=g(e.intensity,2)}var R0=Gqe;function A1(){this.globeDepthTexture=void 0,this.gamma=void 0,this._viewport=new He,this._viewportCartesian4=new se,this._viewportDirty=!1,this._viewportOrthographicMatrix=A.clone(A.IDENTITY),this._viewportTransformation=A.clone(A.IDENTITY),this._model=A.clone(A.IDENTITY),this._view=A.clone(A.IDENTITY),this._inverseView=A.clone(A.IDENTITY),this._projection=A.clone(A.IDENTITY),this._infiniteProjection=A.clone(A.IDENTITY),this._entireFrustum=new D,this._currentFrustum=new D,this._frustumPlanes=new se,this._farDepthFromNearPlusOne=void 0,this._log2FarDepthFromNearPlusOne=void 0,this._oneOverLog2FarDepthFromNearPlusOne=void 0,this._frameState=void 0,this._temeToPseudoFixed=$.clone(A.IDENTITY),this._view3DDirty=!0,this._view3D=new A,this._inverseView3DDirty=!0,this._inverseView3D=new A,this._inverseModelDirty=!0,this._inverseModel=new A,this._inverseTransposeModelDirty=!0,this._inverseTransposeModel=new $,this._viewRotation=new $,this._inverseViewRotation=new $,this._viewRotation3D=new $,this._inverseViewRotation3D=new $,this._inverseProjectionDirty=!0,this._inverseProjection=new A,this._modelViewDirty=!0,this._modelView=new A,this._modelView3DDirty=!0,this._modelView3D=new A,this._modelViewRelativeToEyeDirty=!0,this._modelViewRelativeToEye=new A,this._inverseModelViewDirty=!0,this._inverseModelView=new A,this._inverseModelView3DDirty=!0,this._inverseModelView3D=new A,this._viewProjectionDirty=!0,this._viewProjection=new A,this._inverseViewProjectionDirty=!0,this._inverseViewProjection=new A,this._modelViewProjectionDirty=!0,this._modelViewProjection=new A,this._inverseModelViewProjectionDirty=!0,this._inverseModelViewProjection=new A,this._modelViewProjectionRelativeToEyeDirty=!0,this._modelViewProjectionRelativeToEye=new A,this._modelViewInfiniteProjectionDirty=!0,this._modelViewInfiniteProjection=new A,this._normalDirty=!0,this._normal=new $,this._normal3DDirty=!0,this._normal3D=new $,this._inverseNormalDirty=!0,this._inverseNormal=new $,this._inverseNormal3DDirty=!0,this._inverseNormal3D=new $,this._encodedCameraPositionMCDirty=!0,this._encodedCameraPositionMC=new On,this._cameraPosition=new h,this._sunPositionWC=new h,this._sunPositionColumbusView=new h,this._sunDirectionWC=new h,this._sunDirectionEC=new h,this._moonDirectionEC=new h,this._lightDirectionWC=new h,this._lightDirectionEC=new h,this._lightColor=new h,this._lightColorHdr=new h,this._pass=void 0,this._mode=void 0,this._mapProjection=void 0,this._ellipsoid=void 0,this._cameraDirection=new h,this._cameraRight=new h,this._cameraUp=new h,this._frustum2DWidth=0,this._eyeHeight=0,this._eyeHeight2D=new D,this._pixelRatio=1,this._orthographicIn3D=!1,this._backgroundColor=new Y,this._brdfLut=void 0,this._environmentMap=void 0,this._sphericalHarmonicCoefficients=void 0,this._specularEnvironmentMaps=void 0,this._specularEnvironmentMapsDimensions=new D,this._specularEnvironmentMapsMaximumLOD=void 0,this._fogDensity=void 0,this._invertClassificationColor=void 0,this._splitPosition=0,this._pixelSizePerMeter=void 0,this._geometricToleranceOverMeter=void 0,this._minimumDisableDepthTestDistance=void 0}Object.defineProperties(A1.prototype,{frameState:{get:function(){return this._frameState}},viewport:{get:function(){return this._viewport},set:function(e){if(!He.equals(e,this._viewport)){He.clone(e,this._viewport);let t=this._viewport,n=this._viewportCartesian4;n.x=t.x,n.y=t.y,n.z=t.width,n.w=t.height,this._viewportDirty=!0}}},viewportCartesian4:{get:function(){return this._viewportCartesian4}},viewportOrthographic:{get:function(){return Xfe(this),this._viewportOrthographicMatrix}},viewportTransformation:{get:function(){return Xfe(this),this._viewportTransformation}},model:{get:function(){return this._model},set:function(e){A.clone(e,this._model),this._modelView3DDirty=!0,this._inverseModelView3DDirty=!0,this._inverseModelDirty=!0,this._inverseTransposeModelDirty=!0,this._modelViewDirty=!0,this._inverseModelViewDirty=!0,this._modelViewRelativeToEyeDirty=!0,this._inverseModelViewDirty=!0,this._modelViewProjectionDirty=!0,this._inverseModelViewProjectionDirty=!0,this._modelViewProjectionRelativeToEyeDirty=!0,this._modelViewInfiniteProjectionDirty=!0,this._normalDirty=!0,this._inverseNormalDirty=!0,this._normal3DDirty=!0,this._inverseNormal3DDirty=!0,this._encodedCameraPositionMCDirty=!0}},inverseModel:{get:function(){return this._inverseModelDirty&&(this._inverseModelDirty=!1,A.inverse(this._model,this._inverseModel)),this._inverseModel}},inverseTransposeModel:{get:function(){let e=this._inverseTransposeModel;return this._inverseTransposeModelDirty&&(this._inverseTransposeModelDirty=!1,A.getMatrix3(this.inverseModel,e),$.transpose(e,e)),e}},view:{get:function(){return this._view}},view3D:{get:function(){return cJ(this),this._view3D}},viewRotation:{get:function(){return cJ(this),this._viewRotation}},viewRotation3D:{get:function(){return cJ(this),this._viewRotation3D}},inverseView:{get:function(){return this._inverseView}},inverseView3D:{get:function(){return Pfe(this),this._inverseView3D}},inverseViewRotation:{get:function(){return this._inverseViewRotation}},inverseViewRotation3D:{get:function(){return Pfe(this),this._inverseViewRotation3D}},projection:{get:function(){return this._projection}},inverseProjection:{get:function(){return Mqe(this),this._inverseProjection}},infiniteProjection:{get:function(){return this._infiniteProjection}},modelView:{get:function(){return Nqe(this),this._modelView}},modelView3D:{get:function(){return Uqe(this),this._modelView3D}},modelViewRelativeToEye:{get:function(){return Kqe(this),this._modelViewRelativeToEye}},inverseModelView:{get:function(){return kqe(this),this._inverseModelView}},inverseModelView3D:{get:function(){return Dqe(this),this._inverseModelView3D}},viewProjection:{get:function(){return Bqe(this),this._viewProjection}},inverseViewProjection:{get:function(){return Yqe(this),this._inverseViewProjection}},modelViewProjection:{get:function(){return Oqe(this),this._modelViewProjection}},inverseModelViewProjection:{get:function(){return Hqe(this),this._inverseModelViewProjection}},modelViewProjectionRelativeToEye:{get:function(){return zqe(this),this._modelViewProjectionRelativeToEye}},modelViewInfiniteProjection:{get:function(){return Jqe(this),this._modelViewInfiniteProjection}},normal:{get:function(){return Qqe(this),this._normal}},normal3D:{get:function(){return jqe(this),this._normal3D}},inverseNormal:{get:function(){return qqe(this),this._inverseNormal}},inverseNormal3D:{get:function(){return $qe(this),this._inverseNormal3D}},entireFrustum:{get:function(){return this._entireFrustum}},currentFrustum:{get:function(){return this._currentFrustum}},frustumPlanes:{get:function(){return this._frustumPlanes}},farDepthFromNearPlusOne:{get:function(){return this._farDepthFromNearPlusOne}},log2FarDepthFromNearPlusOne:{get:function(){return this._log2FarDepthFromNearPlusOne}},oneOverLog2FarDepthFromNearPlusOne:{get:function(){return this._oneOverLog2FarDepthFromNearPlusOne}},eyeHeight:{get:function(){return this._eyeHeight}},eyeHeight2D:{get:function(){return this._eyeHeight2D}},sunPositionWC:{get:function(){return this._sunPositionWC}},sunPositionColumbusView:{get:function(){return this._sunPositionColumbusView}},sunDirectionWC:{get:function(){return this._sunDirectionWC}},sunDirectionEC:{get:function(){return this._sunDirectionEC}},moonDirectionEC:{get:function(){return this._moonDirectionEC}},lightDirectionWC:{get:function(){return this._lightDirectionWC}},lightDirectionEC:{get:function(){return this._lightDirectionEC}},lightColor:{get:function(){return this._lightColor}},lightColorHdr:{get:function(){return this._lightColorHdr}},encodedCameraPositionMCHigh:{get:function(){return Wfe(this),this._encodedCameraPositionMC.high}},encodedCameraPositionMCLow:{get:function(){return Wfe(this),this._encodedCameraPositionMC.low}},temeToPseudoFixedMatrix:{get:function(){return this._temeToPseudoFixed}},pixelRatio:{get:function(){return this._pixelRatio}},fogDensity:{get:function(){return this._fogDensity}},geometricToleranceOverMeter:{get:function(){return this._geometricToleranceOverMeter}},pass:{get:function(){return this._pass}},backgroundColor:{get:function(){return this._backgroundColor}},brdfLut:{get:function(){return this._brdfLut}},environmentMap:{get:function(){return this._environmentMap}},sphericalHarmonicCoefficients:{get:function(){return this._sphericalHarmonicCoefficients}},specularEnvironmentMaps:{get:function(){return this._specularEnvironmentMaps}},specularEnvironmentMapsDimensions:{get:function(){return this._specularEnvironmentMapsDimensions}},specularEnvironmentMapsMaximumLOD:{get:function(){return this._specularEnvironmentMapsMaximumLOD}},splitPosition:{get:function(){return this._splitPosition}},minimumDisableDepthTestDistance:{get:function(){return this._minimumDisableDepthTestDistance}},invertClassificationColor:{get:function(){return this._invertClassificationColor}},orthographicIn3D:{get:function(){return this._orthographicIn3D}},ellipsoid:{get:function(){return g(this._ellipsoid,re.WGS84)}}});function Eqe(e,t){A.clone(t,e._view),A.getMatrix3(t,e._viewRotation),e._view3DDirty=!0,e._inverseView3DDirty=!0,e._modelViewDirty=!0,e._modelView3DDirty=!0,e._modelViewRelativeToEyeDirty=!0,e._inverseModelViewDirty=!0,e._inverseModelView3DDirty=!0,e._viewProjectionDirty=!0,e._inverseViewProjectionDirty=!0,e._modelViewProjectionDirty=!0,e._modelViewProjectionRelativeToEyeDirty=!0,e._modelViewInfiniteProjectionDirty=!0,e._normalDirty=!0,e._inverseNormalDirty=!0,e._normal3DDirty=!0,e._inverseNormal3DDirty=!0}function Xqe(e,t){A.clone(t,e._inverseView),A.getMatrix3(t,e._inverseViewRotation)}function Iqe(e,t){A.clone(t,e._projection),e._inverseProjectionDirty=!0,e._viewProjectionDirty=!0,e._inverseViewProjectionDirty=!0,e._modelViewProjectionDirty=!0,e._modelViewProjectionRelativeToEyeDirty=!0}function Wqe(e,t){A.clone(t,e._infiniteProjection),e._modelViewInfiniteProjectionDirty=!0}function Pqe(e,t){h.clone(t.positionWC,e._cameraPosition),h.clone(t.directionWC,e._cameraDirection),h.clone(t.rightWC,e._cameraRight),h.clone(t.upWC,e._cameraUp);let n=t.positionCartographic;d(n)?e._eyeHeight=n.height:e._eyeHeight=-e._ellipsoid.maximumRadius,e._encodedCameraPositionMCDirty=!0}var PP=new $,vqe=new he;function wqe(e,t){d(vt.computeIcrfToFixedMatrix(t.time,PP))||(PP=vt.computeTemeToPseudoFixedMatrix(t.time,PP));let n=My.computeSunPositionInEarthInertialFrame(t.time,e._sunPositionWC);$.multiplyByVector(PP,n,n),h.normalize(n,e._sunDirectionWC),n=$.multiplyByVector(e.viewRotation3D,n,e._sunDirectionEC),h.normalize(n,n),n=My.computeMoonPositionInEarthInertialFrame(t.time,e._moonDirectionEC),$.multiplyByVector(PP,n,n),$.multiplyByVector(e.viewRotation3D,n,n),h.normalize(n,n);let i=t.mapProjection,r=i.ellipsoid.cartesianToCartographic(e._sunPositionWC,vqe);i.project(r,e._sunPositionColumbusView)}A1.prototype.updateCamera=function(e){Eqe(this,e.viewMatrix),Xqe(this,e.inverseViewMatrix),Pqe(this,e),this._entireFrustum.x=e.frustum.near,this._entireFrustum.y=e.frustum.far,this.updateFrustum(e.frustum),this._orthographicIn3D=this._mode!==ie.SCENE2D&&e.frustum instanceof en};A1.prototype.updateFrustum=function(e){Iqe(this,e.projectionMatrix),d(e.infiniteProjectionMatrix)&&Wqe(this,e.infiniteProjectionMatrix),this._currentFrustum.x=e.near,this._currentFrustum.y=e.far,this._farDepthFromNearPlusOne=e.far-e.near+1,this._log2FarDepthFromNearPlusOne=W.log2(this._farDepthFromNearPlusOne),this._oneOverLog2FarDepthFromNearPlusOne=1/this._log2FarDepthFromNearPlusOne;let t=e.offCenterFrustum;d(t)&&(e=t),this._frustumPlanes.x=e.top,this._frustumPlanes.y=e.bottom,this._frustumPlanes.z=e.left,this._frustumPlanes.w=e.right};A1.prototype.updatePass=function(e){this._pass=e};var Fqe=[],Aqe=new R0;A1.prototype.update=function(e){this._mode=e.mode,this._mapProjection=e.mapProjection,this._ellipsoid=e.mapProjection.ellipsoid,this._pixelRatio=e.pixelRatio;let t=e.camera;this.updateCamera(t),e.mode===ie.SCENE2D?(this._frustum2DWidth=t.frustum.right-t.frustum.left,this._eyeHeight2D.x=this._frustum2DWidth*.5,this._eyeHeight2D.y=this._eyeHeight2D.x*this._eyeHeight2D.x):(this._frustum2DWidth=0,this._eyeHeight2D.x=0,this._eyeHeight2D.y=0),wqe(this,e);let n=g(e.light,Aqe);n instanceof R0?(this._lightDirectionWC=h.clone(this._sunDirectionWC,this._lightDirectionWC),this._lightDirectionEC=h.clone(this._sunDirectionEC,this._lightDirectionEC)):(this._lightDirectionWC=h.normalize(h.negate(n.direction,this._lightDirectionWC),this._lightDirectionWC),this._lightDirectionEC=$.multiplyByVector(this.viewRotation3D,this._lightDirectionWC,this._lightDirectionEC));let i=n.color,o=h.fromElements(i.red,i.green,i.blue,this._lightColorHdr);o=h.multiplyByScalar(o,n.intensity,o);let r=h.maximumComponent(o);r>1?h.divideByScalar(o,r,this._lightColor):h.clone(o,this._lightColor);let s=e.brdfLutGenerator,a=d(s)?s.colorTexture:void 0;this._brdfLut=a,this._environmentMap=g(e.environmentMap,e.context.defaultCubeMap),this._sphericalHarmonicCoefficients=g(e.sphericalHarmonicCoefficients,Fqe),this._specularEnvironmentMaps=e.specularEnvironmentMaps,this._specularEnvironmentMapsMaximumLOD=e.specularEnvironmentMapsMaximumLOD,d(this._specularEnvironmentMaps)&&D.clone(this._specularEnvironmentMaps.dimensions,this._specularEnvironmentMapsDimensions),this._fogDensity=e.fog.density,this._invertClassificationColor=e.invertClassificationColor,this._frameState=e,this._temeToPseudoFixed=vt.computeTemeToPseudoFixedMatrix(e.time,this._temeToPseudoFixed),this._splitPosition=e.splitPosition*e.context.drawingBufferWidth;let c=t.frustum.fov,l=this._viewport,u;d(c)?l.height>l.width?u=Math.tan(.5*c)*2/l.height:u=Math.tan(.5*c)*2/l.width:u=1/Math.max(l.width,l.height),this._geometricToleranceOverMeter=u*e.maximumScreenSpaceError,Y.clone(e.backgroundColor,this._backgroundColor),this._minimumDisableDepthTestDistance=e.minimumDisableDepthTestDistance,this._minimumDisableDepthTestDistance*=this._minimumDisableDepthTestDistance,this._minimumDisableDepthTestDistance===Number.POSITIVE_INFINITY&&(this._minimumDisableDepthTestDistance=-1)};function Xfe(e){if(e._viewportDirty){let t=e._viewport;A.computeOrthographicOffCenter(t.x,t.x+t.width,t.y,t.y+t.height,0,1,e._viewportOrthographicMatrix),A.computeViewportTransformation(t,0,1,e._viewportTransformation),e._viewportDirty=!1}}function Mqe(e){e._inverseProjectionDirty&&(e._inverseProjectionDirty=!1,e._mode!==ie.SCENE2D&&e._mode!==ie.MORPHING&&!e._orthographicIn3D?A.inverse(e._projection,e._inverseProjection):A.clone(A.ZERO,e._inverseProjection))}function Nqe(e){e._modelViewDirty&&(e._modelViewDirty=!1,A.multiplyTransformation(e._view,e._model,e._modelView))}function Uqe(e){e._modelView3DDirty&&(e._modelView3DDirty=!1,A.multiplyTransformation(e.view3D,e._model,e._modelView3D))}function kqe(e){e._inverseModelViewDirty&&(e._inverseModelViewDirty=!1,A.inverse(e.modelView,e._inverseModelView))}function Dqe(e){e._inverseModelView3DDirty&&(e._inverseModelView3DDirty=!1,A.inverse(e.modelView3D,e._inverseModelView3D))}function Bqe(e){e._viewProjectionDirty&&(e._viewProjectionDirty=!1,A.multiply(e._projection,e._view,e._viewProjection))}function Yqe(e){e._inverseViewProjectionDirty&&(e._inverseViewProjectionDirty=!1,A.inverse(e.viewProjection,e._inverseViewProjection))}function Oqe(e){e._modelViewProjectionDirty&&(e._modelViewProjectionDirty=!1,A.multiply(e._projection,e.modelView,e._modelViewProjection))}function Kqe(e){if(e._modelViewRelativeToEyeDirty){e._modelViewRelativeToEyeDirty=!1;let t=e.modelView,n=e._modelViewRelativeToEye;n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n[4]=t[4],n[5]=t[5],n[6]=t[6],n[7]=t[7],n[8]=t[8],n[9]=t[9],n[10]=t[10],n[11]=t[11],n[12]=0,n[13]=0,n[14]=0,n[15]=t[15]}}function Hqe(e){e._inverseModelViewProjectionDirty&&(e._inverseModelViewProjectionDirty=!1,A.inverse(e.modelViewProjection,e._inverseModelViewProjection))}function zqe(e){e._modelViewProjectionRelativeToEyeDirty&&(e._modelViewProjectionRelativeToEyeDirty=!1,A.multiply(e._projection,e.modelViewRelativeToEye,e._modelViewProjectionRelativeToEye))}function Jqe(e){e._modelViewInfiniteProjectionDirty&&(e._modelViewInfiniteProjectionDirty=!1,A.multiply(e._infiniteProjection,e.modelView,e._modelViewInfiniteProjection))}function Qqe(e){if(e._normalDirty){e._normalDirty=!1;let t=e._normal;A.getMatrix3(e.inverseModelView,t),$.transpose(t,t)}}function jqe(e){if(e._normal3DDirty){e._normal3DDirty=!1;let t=e._normal3D;A.getMatrix3(e.inverseModelView3D,t),$.transpose(t,t)}}function qqe(e){if(e._inverseNormalDirty){e._inverseNormalDirty=!1;let t=e._inverseNormal;A.getMatrix3(e.modelView,t),$.transpose(t,t)}}function $qe(e){if(e._inverseNormal3DDirty){e._inverseNormal3DDirty=!1;let t=e._inverseNormal3D;A.getMatrix3(e.modelView3D,t),$.transpose(t,t)}}var Ife=new h;function Wfe(e){e._encodedCameraPositionMCDirty&&(e._encodedCameraPositionMCDirty=!1,A.multiplyByPoint(e.inverseModel,e._cameraPosition,Ife),On.fromCartesian(Ife,e._encodedCameraPositionMC))}var e$e=new h,t$e=new h,n$e=new h,i$e=new h,o$e=new he,r$e=new h,s$e=new A;function a$e(e,t,n,i,o,r,s,a){let c=e$e;c.x=e.y,c.y=e.z,c.z=e.x;let l=t$e;l.x=n.y,l.y=n.z,l.z=n.x;let u=n$e;u.x=i.y,u.y=i.z,u.z=i.x;let m=i$e;m.x=t.y,m.y=t.z,m.z=t.x,r===ie.SCENE2D&&(c.z=o*.5);let p=s.unproject(c,o$e);p.longitude=W.clamp(p.longitude,-Math.PI,Math.PI),p.latitude=W.clamp(p.latitude,-W.PI_OVER_TWO,W.PI_OVER_TWO);let y=s.ellipsoid,f=y.cartographicToCartesian(p,r$e),x=vt.eastNorthUpToFixedFrame(f,y,s$e);return A.multiplyByPointAsVector(x,l,l),A.multiplyByPointAsVector(x,u,u),A.multiplyByPointAsVector(x,m,m),d(a)||(a=new A),a[0]=l.x,a[1]=u.x,a[2]=-m.x,a[3]=0,a[4]=l.y,a[5]=u.y,a[6]=-m.y,a[7]=0,a[8]=l.z,a[9]=u.z,a[10]=-m.z,a[11]=0,a[12]=-h.dot(l,f),a[13]=-h.dot(u,f),a[14]=h.dot(m,f),a[15]=1,a}function cJ(e){e._view3DDirty&&(e._mode===ie.SCENE3D?A.clone(e._view,e._view3D):a$e(e._cameraPosition,e._cameraDirection,e._cameraRight,e._cameraUp,e._frustum2DWidth,e._mode,e._mapProjection,e._view3D),A.getMatrix3(e._view3D,e._viewRotation3D),e._view3DDirty=!1)}function Pfe(e){e._inverseView3DDirty&&(A.inverseTransformation(e.view3D,e._inverseView3D),A.getMatrix3(e._inverseView3D,e._inverseViewRotation3D),e._inverseView3DDirty=!1)}var vP=A1;function Ld(e,t){let{getWebGLStub:n,requestWebgl1:i,webgl:o={},allowTextureFilterAnisotropic:r=!0}=g(t,{});o.alpha=g(o.alpha,!1),o.stencil=g(o.stencil,!0),o.powerPreference=g(o.powerPreference,"high-performance");let s=d(n)?n(e,o):c$e(e,o,i),c=typeof WebGL2RenderingContext<"u"&&s instanceof WebGL2RenderingContext;this._canvas=e,this._originalGLContext=s,this._gl=s,this._webgl2=c,this._id=Yn(),this.validateFramebuffer=!1,this.validateShaderProgram=!1,this.logShaderCompilation=!1,this._throwOnWebGLError=!1,this._shaderCache=new XP(this),this._textureCache=new IP;let l=s;this._stencilBits=l.getParameter(l.STENCIL_BITS),kt._maximumCombinedTextureImageUnits=l.getParameter(l.MAX_COMBINED_TEXTURE_IMAGE_UNITS),kt._maximumCubeMapSize=l.getParameter(l.MAX_CUBE_MAP_TEXTURE_SIZE),kt._maximumFragmentUniformVectors=l.getParameter(l.MAX_FRAGMENT_UNIFORM_VECTORS),kt._maximumTextureImageUnits=l.getParameter(l.MAX_TEXTURE_IMAGE_UNITS),kt._maximumRenderbufferSize=l.getParameter(l.MAX_RENDERBUFFER_SIZE),kt._maximumTextureSize=l.getParameter(l.MAX_TEXTURE_SIZE),kt._maximumVaryingVectors=l.getParameter(l.MAX_VARYING_VECTORS),kt._maximumVertexAttributes=l.getParameter(l.MAX_VERTEX_ATTRIBS),kt._maximumVertexTextureImageUnits=l.getParameter(l.MAX_VERTEX_TEXTURE_IMAGE_UNITS),kt._maximumVertexUniformVectors=l.getParameter(l.MAX_VERTEX_UNIFORM_VECTORS),kt._maximumSamples=this._webgl2?l.getParameter(l.MAX_SAMPLES):0;let u=l.getParameter(l.ALIASED_LINE_WIDTH_RANGE);kt._minimumAliasedLineWidth=u[0],kt._maximumAliasedLineWidth=u[1];let m=l.getParameter(l.ALIASED_POINT_SIZE_RANGE);kt._minimumAliasedPointSize=m[0],kt._maximumAliasedPointSize=m[1];let p=l.getParameter(l.MAX_VIEWPORT_DIMS);kt._maximumViewportWidth=p[0],kt._maximumViewportHeight=p[1];let y=l.getShaderPrecisionFormat(l.FRAGMENT_SHADER,l.HIGH_FLOAT);kt._highpFloatSupported=y.precision!==0;let f=l.getShaderPrecisionFormat(l.FRAGMENT_SHADER,l.HIGH_INT);kt._highpIntSupported=f.rangeMax!==0,this._antialias=l.getContextAttributes().antialias,this._standardDerivatives=!!Ir(l,["OES_standard_derivatives"]),this._blendMinmax=!!Ir(l,["EXT_blend_minmax"]),this._elementIndexUint=!!Ir(l,["OES_element_index_uint"]),this._depthTexture=!!Ir(l,["WEBGL_depth_texture","WEBKIT_WEBGL_depth_texture"]),this._fragDepth=!!Ir(l,["EXT_frag_depth"]),this._debugShaders=Ir(l,["WEBGL_debug_shaders"]),this._textureFloat=!!Ir(l,["OES_texture_float"]),this._textureHalfFloat=!!Ir(l,["OES_texture_half_float"]),this._textureFloatLinear=!!Ir(l,["OES_texture_float_linear"]),this._textureHalfFloatLinear=!!Ir(l,["OES_texture_half_float_linear"]),this._colorBufferFloat=!!Ir(l,["EXT_color_buffer_float","WEBGL_color_buffer_float"]),this._floatBlend=!!Ir(l,["EXT_float_blend"]),this._colorBufferHalfFloat=!!Ir(l,["EXT_color_buffer_half_float"]),this._s3tc=!!Ir(l,["WEBGL_compressed_texture_s3tc","MOZ_WEBGL_compressed_texture_s3tc","WEBKIT_WEBGL_compressed_texture_s3tc"]),this._pvrtc=!!Ir(l,["WEBGL_compressed_texture_pvrtc","WEBKIT_WEBGL_compressed_texture_pvrtc"]),this._astc=!!Ir(l,["WEBGL_compressed_texture_astc"]),this._etc=!!Ir(l,["WEBG_compressed_texture_etc"]),this._etc1=!!Ir(l,["WEBGL_compressed_texture_etc1"]),this._bc7=!!Ir(l,["EXT_texture_compression_bptc"]),sl.setKTX2SupportedFormats(this._s3tc,this._pvrtc,this._astc,this._etc,this._etc1,this._bc7);let x=r?Ir(l,["EXT_texture_filter_anisotropic","WEBKIT_EXT_texture_filter_anisotropic"]):void 0;this._textureFilterAnisotropic=x,kt._maximumTextureFilterAnisotropy=d(x)?l.getParameter(x.MAX_TEXTURE_MAX_ANISOTROPY_EXT):1;let _,C,V,L,Z,G,X,P,v,F;if(c){let E=this;_=function(){return E._gl.createVertexArray()},C=function(I){E._gl.bindVertexArray(I)},V=function(I){E._gl.deleteVertexArray(I)},L=function(I,w,N,B,k){l.drawElementsInstanced(I,w,N,B,k)},Z=function(I,w,N,B){l.drawArraysInstanced(I,w,N,B)},G=function(I,w){l.vertexAttribDivisor(I,w)},X=function(I){l.drawBuffers(I)}}else P=Ir(l,["OES_vertex_array_object"]),d(P)&&(_=function(){return P.createVertexArrayOES()},C=function(E){P.bindVertexArrayOES(E)},V=function(E){P.deleteVertexArrayOES(E)}),v=Ir(l,["ANGLE_instanced_arrays"]),d(v)&&(L=function(E,I,w,N,B){v.drawElementsInstancedANGLE(E,I,w,N,B)},Z=function(E,I,w,N){v.drawArraysInstancedANGLE(E,I,w,N)},G=function(E,I){v.vertexAttribDivisorANGLE(E,I)}),F=Ir(l,["WEBGL_draw_buffers"]),d(F)&&(X=function(E){F.drawBuffersWEBGL(E)});this.glCreateVertexArray=_,this.glBindVertexArray=C,this.glDeleteVertexArray=V,this.glDrawElementsInstanced=L,this.glDrawArraysInstanced=Z,this.glVertexAttribDivisor=G,this.glDrawBuffers=X,this._vertexArrayObject=!!P,this._instancedArrays=!!v,this._drawBuffers=!!F,kt._maximumDrawBuffers=this.drawBuffers?l.getParameter(ne.MAX_DRAW_BUFFERS):1,kt._maximumColorAttachments=this.drawBuffers?l.getParameter(ne.MAX_COLOR_ATTACHMENTS):1,this._clearColor=new Y(0,0,0,0),this._clearDepth=1,this._clearStencil=0;let M=new vP,b=new oc(this),R=De.fromCache();this._defaultPassState=b,this._defaultRenderState=R,this._defaultTexture=void 0,this._defaultEmissiveTexture=void 0,this._defaultNormalTexture=void 0,this._defaultCubeMap=void 0,this._us=M,this._currentRenderState=R,this._currentPassState=b,this._currentFramebuffer=void 0,this._maxFrameTextureUnitIndex=0,this._vertexAttribDivisors=[],this._previousDrawInstanced=!1;for(let E=0;E<kt._maximumVertexAttributes;E++)this._vertexAttribDivisors.push(0);this._pickObjects={},this._nextPickColor=new Uint32Array(1),this.options={getWebGLStub:n,requestWebgl1:i,webgl:o,allowTextureFilterAnisotropic:r},this.cache={},De.apply(l,R,b)}function c$e(e,t,n){if(typeof WebGLRenderingContext>"u")throw new me("The browser does not support WebGL. Visit http://get.webgl.org.");!n&&!(typeof WebGL2RenderingContext<"u")&&(n=!0);let o=n?"webgl":"webgl2",r=e.getContext(o,t);if(!d(r))throw new me("The browser supports WebGL, but initialization failed.");return r}function l$e(e,t){let n="WebGL Error: ";switch(t){case e.INVALID_ENUM:n+="INVALID_ENUM";break;case e.INVALID_VALUE:n+="INVALID_VALUE";break;case e.INVALID_OPERATION:n+="INVALID_OPERATION";break;case e.OUT_OF_MEMORY:n+="OUT_OF_MEMORY";break;case e.CONTEXT_LOST_WEBGL:n+="CONTEXT_LOST_WEBGL lost";break;default:n+=`Unknown (${t})`}return n}function d$e(e,t,n,i){let o=`${l$e(e,i)}: ${t.name}(`;for(let r=0;r<n.length;++r)r!==0&&(o+=", "),o+=n[r];return o+=");",o}function u$e(e,t,n){let i=e.getError();if(i!==e.NO_ERROR)throw new me(d$e(e,t,n,i))}function m$e(e,t,n){return{get:function(){let i=e[t];return n(e,`get: ${t}`,i),e[t]},set:function(i){e[t]=i,n(e,`set: ${t}`,i)}}}function h$e(e,t){if(!d(t))return e;function n(o){return function(){let r=o.apply(e,arguments);return t(e,o,arguments),r}}let i={};for(let o in e){let r=e[o];r instanceof Function?i[o]=n(r):Object.defineProperty(i,o,m$e(e,o,t))}return i}function Ir(e,t){let n=t.length;for(let i=0;i<n;++i){let o=e.getExtension(t[i]);if(o)return o}}var f$e={};Object.defineProperties(Ld.prototype,{id:{get:function(){return this._id}},webgl2:{get:function(){return this._webgl2}},canvas:{get:function(){return this._canvas}},shaderCache:{get:function(){return this._shaderCache}},textureCache:{get:function(){return this._textureCache}},uniformState:{get:function(){return this._us}},stencilBits:{get:function(){return this._stencilBits}},stencilBuffer:{get:function(){return this._stencilBits>=8}},antialias:{get:function(){return this._antialias}},msaa:{get:function(){return this._webgl2}},standardDerivatives:{get:function(){return this._standardDerivatives||this._webgl2}},floatBlend:{get:function(){return this._floatBlend}},blendMinmax:{get:function(){return this._blendMinmax||this._webgl2}},elementIndexUint:{get:function(){return this._elementIndexUint||this._webgl2}},depthTexture:{get:function(){return this._depthTexture||this._webgl2}},floatingPointTexture:{get:function(){return this._webgl2||this._textureFloat}},halfFloatingPointTexture:{get:function(){return this._webgl2||this._textureHalfFloat}},textureFloatLinear:{get:function(){return this._textureFloatLinear}},textureHalfFloatLinear:{get:function(){return this._webgl2&&this._textureFloatLinear||!this._webgl2&&this._textureHalfFloatLinear}},textureFilterAnisotropic:{get:function(){return!!this._textureFilterAnisotropic}},s3tc:{get:function(){return this._s3tc}},pvrtc:{get:function(){return this._pvrtc}},astc:{get:function(){return this._astc}},etc:{get:function(){return this._etc}},etc1:{get:function(){return this._etc1}},bc7:{get:function(){return this._bc7}},supportsBasis:{get:function(){return this._s3tc||this._pvrtc||this._astc||this._etc||this._etc1||this._bc7}},vertexArrayObject:{get:function(){return this._vertexArrayObject||this._webgl2}},fragmentDepth:{get:function(){return this._fragDepth||this._webgl2}},instancedArrays:{get:function(){return this._instancedArrays||this._webgl2}},colorBufferFloat:{get:function(){return this._colorBufferFloat}},colorBufferHalfFloat:{get:function(){return this._webgl2&&this._colorBufferFloat||!this._webgl2&&this._colorBufferHalfFloat}},drawBuffers:{get:function(){return this._drawBuffers||this._webgl2}},debugShaders:{get:function(){return this._debugShaders}},throwOnWebGLError:{get:function(){return this._throwOnWebGLError},set:function(e){this._throwOnWebGLError=e,this._gl=h$e(this._originalGLContext,e?u$e:void 0)}},defaultTexture:{get:function(){return this._defaultTexture===void 0&&(this._defaultTexture=new Wt({context:this,source:{width:1,height:1,arrayBufferView:new Uint8Array([255,255,255,255])},flipY:!1})),this._defaultTexture}},defaultEmissiveTexture:{get:function(){return this._defaultEmissiveTexture===void 0&&(this._defaultEmissiveTexture=new Wt({context:this,pixelFormat:st.RGB,source:{width:1,height:1,arrayBufferView:new Uint8Array([0,0,0])},flipY:!1})),this._defaultEmissiveTexture}},defaultNormalTexture:{get:function(){return this._defaultNormalTexture===void 0&&(this._defaultNormalTexture=new Wt({context:this,pixelFormat:st.RGB,source:{width:1,height:1,arrayBufferView:new Uint8Array([128,128,255])},flipY:!1})),this._defaultNormalTexture}},defaultCubeMap:{get:function(){if(this._defaultCubeMap===void 0){let e={width:1,height:1,arrayBufferView:new Uint8Array([255,255,255,255])};this._defaultCubeMap=new Ma({context:this,source:{positiveX:e,negativeX:e,positiveY:e,negativeY:e,positiveZ:e,negativeZ:e},flipY:!1})}return this._defaultCubeMap}},drawingBufferHeight:{get:function(){return this._gl.drawingBufferHeight}},drawingBufferWidth:{get:function(){return this._gl.drawingBufferWidth}},defaultFramebuffer:{get:function(){return f$e}}});function vfe(e,t,n,i){let o=e._currentRenderState,r=e._currentPassState;e._currentRenderState=t,e._currentPassState=n,De.partialApply(e._gl,o,t,r,n,i)}var lJ;typeof WebGLRenderingContext<"u"&&(lJ=[ne.BACK]);function dJ(e,t){if(t!==e._currentFramebuffer){e._currentFramebuffer=t;let n=lJ;if(d(t))t._bind(),n=t._getActiveColorAttachments();else{let i=e._gl;i.bindFramebuffer(i.FRAMEBUFFER,null)}e.drawBuffers&&e.glDrawBuffers(n)}}var p$e=new oi;Ld.prototype.clear=function(e,t){e=g(e,p$e),t=g(t,this._defaultPassState);let n=this._gl,i=0,o=e.color,r=e.depth,s=e.stencil;d(o)&&(Y.equals(this._clearColor,o)||(Y.clone(o,this._clearColor),n.clearColor(o.red,o.green,o.blue,o.alpha)),i|=n.COLOR_BUFFER_BIT),d(r)&&(r!==this._clearDepth&&(this._clearDepth=r,n.clearDepth(r)),i|=n.DEPTH_BUFFER_BIT),d(s)&&(s!==this._clearStencil&&(this._clearStencil=s,n.clearStencil(s)),i|=n.STENCIL_BUFFER_BIT);let a=g(e.renderState,this._defaultRenderState);vfe(this,a,t,!0);let c=g(e.framebuffer,t.framebuffer);dJ(this,c),n.clear(i)};function b$e(e,t,n,i,o){dJ(e,t),vfe(e,o,n,!1),i._bind(),e._maxFrameTextureUnitIndex=Math.max(e._maxFrameTextureUnitIndex,i.maximumTextureUnitIndex)}function y$e(e,t,n,i){let o=t._primitiveType,r=t._vertexArray,s=t._offset,a=t._count,c=t.instanceCount;e._us.model=g(t._modelMatrix,A.IDENTITY),n._setUniforms(i,e._us,e.validateShaderProgram),r._bind();let l=r.indexBuffer;d(l)?(s=s*l.bytesPerIndex,d(a)?a=Math.min(a,l.numberOfIndices):a=l.numberOfIndices,c===0?e._gl.drawElements(o,a,l.indexDatatype,s):e.glDrawElementsInstanced(o,a,l.indexDatatype,s,c)):(d(a)?a=Math.min(a,r.numberOfVertices):a=r.numberOfVertices,c===0?e._gl.drawArrays(o,s,a):e.glDrawArraysInstanced(o,s,a,c)),r._unBind()}Ld.prototype.draw=function(e,t,n,i){t=g(t,this._defaultPassState);let o=g(e._framebuffer,t.framebuffer),r=g(e._renderState,this._defaultRenderState);n=g(n,e._shaderProgram),i=g(i,e._uniformMap),b$e(this,o,t,n,r),y$e(this,e,n,i)};Ld.prototype.endFrame=function(){let e=this._gl;e.useProgram(null),this._currentFramebuffer=void 0,e.bindFramebuffer(e.FRAMEBUFFER,null);let t=lJ;this.drawBuffers&&this.glDrawBuffers(t);let n=this._maxFrameTextureUnitIndex;this._maxFrameTextureUnitIndex=0;for(let i=0;i<n;++i)e.activeTexture(e.TEXTURE0+i),e.bindTexture(e.TEXTURE_2D,null),e.bindTexture(e.TEXTURE_CUBE_MAP,null)};Ld.prototype.readPixels=function(e){let t=this._gl;e=g(e,g.EMPTY_OBJECT);let n=Math.max(g(e.x,0),0),i=Math.max(g(e.y,0),0),o=g(e.width,t.drawingBufferWidth),r=g(e.height,t.drawingBufferHeight),s=e.framebuffer,a=Je.UNSIGNED_BYTE;d(s)&&s.numberOfColorAttachments>0&&(a=s.getColorTexture(0).pixelDatatype);let c=st.createTypedArray(st.RGBA,a,o,r);return dJ(this,s),t.readPixels(n,i,o,r,st.RGBA,Je.toWebGLConstant(a,this),c),c};var wfe={position:0,textureCoordinates:1};Ld.prototype.getViewportQuadVertexArray=function(){let e=this.cache.viewportQuad_vertexArray;if(!d(e)){let t=new dt({attributes:{position:new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:[-1,-1,1,-1,1,1,-1,1]}),textureCoordinates:new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:[0,0,1,0,1,1,0,1]})},indices:new Uint16Array([0,1,2,0,2,3]),primitiveType:Fe.TRIANGLES});e=ti.fromGeometry({context:this,geometry:t,attributeLocations:wfe,bufferUsage:Ne.STATIC_DRAW,interleave:!0}),this.cache.viewportQuad_vertexArray=e}return e};Ld.prototype.createViewportQuadCommand=function(e,t){return t=g(t,g.EMPTY_OBJECT),new nt({vertexArray:this.getViewportQuadVertexArray(),primitiveType:Fe.TRIANGLES,renderState:t.renderState,shaderProgram:Qt.fromCache({context:this,vertexShaderSource:D_,fragmentShaderSource:e,attributeLocations:wfe}),uniformMap:t.uniformMap,owner:t.owner,framebuffer:t.framebuffer,pass:t.pass})};Ld.prototype.getObjectByPickColor=function(e){return this._pickObjects[e.toRgba()]};function uJ(e,t,n){this._pickObjects=e,this.key=t,this.color=n}Object.defineProperties(uJ.prototype,{object:{get:function(){return this._pickObjects[this.key]},set:function(e){this._pickObjects[this.key]=e}}});uJ.prototype.destroy=function(){delete this._pickObjects[this.key]};Ld.prototype.createPickId=function(e){++this._nextPickColor[0];let t=this._nextPickColor[0];if(t===0)throw new me("Out of unique Pick IDs.");return this._pickObjects[t]=e,new uJ(this._pickObjects,t,Y.fromRgba(t))};Ld.prototype.isDestroyed=function(){return!1};Ld.prototype.destroy=function(){let e=this.cache;for(let t in e)if(e.hasOwnProperty(t)){let n=e[t];d(n.destroy)&&n.destroy()}return this._shaderCache=this._shaderCache.destroy(),this._textureCache=this._textureCache.destroy(),this._defaultTexture=this._defaultTexture&&this._defaultTexture.destroy(),this._defaultEmissiveTexture=this._defaultEmissiveTexture&&this._defaultEmissiveTexture.destroy(),this._defaultNormalTexture=this._defaultNormalTexture&&this._defaultNormalTexture.destroy(),this._defaultCubeMap=this._defaultCubeMap&&this._defaultCubeMap.destroy(),ue(this)};Ld._deprecationWarning=Qr;var wP=Ld;var Tli=T(S(),1);function g$e(e,t,n){let i={flipY:!0,skipColorSpaceConversion:n,preferImageBitmap:!0},o=[Ee.createIfNeeded(t.positiveX).fetchImage(i),Ee.createIfNeeded(t.negativeX).fetchImage(i),Ee.createIfNeeded(t.positiveY).fetchImage(i),Ee.createIfNeeded(t.negativeY).fetchImage(i),Ee.createIfNeeded(t.positiveZ).fetchImage(i),Ee.createIfNeeded(t.negativeZ).fetchImage(i)];return Promise.all(o).then(function(r){return new Ma({context:e,source:{positiveX:r[0],negativeX:r[1],positiveY:r[2],negativeY:r[3],positiveZ:r[4],negativeZ:r[5]}})})}var FP=g$e;var gui=T(S(),1);var Cli=T(S(),1),x$e={NONE:0,LERC:1},Fu=Object.freeze(x$e);var Edi=T(S(),1);var edi=T(S(),1);var Ali=T(S(),1);var Lli=T(S(),1),_$e={NONE:0,BITS12:1},vs=Object.freeze(_$e);var Y_=new h,T$e=new h,Au=new D,LU=new A,S$e=new A,C$e=Math.pow(2,12);function rc(e,t,n,i,o,r,s,a,c,l){let u=vs.NONE,m,p;if(d(t)&&d(n)&&d(i)&&d(o)){let y=t.minimum,f=t.maximum,x=h.subtract(f,y,T$e),_=i-n;Math.max(h.maximumComponent(x),_)<C$e-1?u=vs.BITS12:u=vs.NONE,m=A.inverseTransformation(o,new A);let V=h.negate(y,Y_);A.multiply(A.fromTranslation(V,LU),m,m);let L=Y_;L.x=1/x.x,L.y=1/x.y,L.z=1/x.z,A.multiply(A.fromScale(L,LU),m,m),p=A.clone(o),A.setTranslation(p,h.ZERO,p),o=A.clone(o,new A);let Z=A.fromTranslation(y,LU),G=A.fromScale(x,S$e),X=A.multiply(Z,G,LU);A.multiply(o,X,o),A.multiply(p,X,p)}this.quantization=u,this.minimumHeight=n,this.maximumHeight=i,this.center=h.clone(e),this.toScaledENU=m,this.fromScaledENU=o,this.matrix=p,this.hasVertexNormals=r,this.hasWebMercatorT=g(s,!1),this.hasGeodeticSurfaceNormals=g(a,!1),this.exaggeration=g(c,1),this.exaggerationRelativeHeight=g(l,0),this.stride=0,this._offsetGeodeticSurfaceNormal=0,this._offsetVertexNormal=0,this._calculateStrideAndOffsets()}rc.prototype.encode=function(e,t,n,i,o,r,s,a){let c=i.x,l=i.y;if(this.quantization===vs.BITS12){n=A.multiplyByPoint(this.toScaledENU,n,Y_),n.x=W.clamp(n.x,0,1),n.y=W.clamp(n.y,0,1),n.z=W.clamp(n.z,0,1);let u=this.maximumHeight-this.minimumHeight,m=W.clamp((o-this.minimumHeight)/u,0,1);D.fromElements(n.x,n.y,Au);let p=Kn.compressTextureCoordinates(Au);D.fromElements(n.z,m,Au);let y=Kn.compressTextureCoordinates(Au);D.fromElements(c,l,Au);let f=Kn.compressTextureCoordinates(Au);if(e[t++]=p,e[t++]=y,e[t++]=f,this.hasWebMercatorT){D.fromElements(s,0,Au);let x=Kn.compressTextureCoordinates(Au);e[t++]=x}}else h.subtract(n,this.center,Y_),e[t++]=Y_.x,e[t++]=Y_.y,e[t++]=Y_.z,e[t++]=o,e[t++]=c,e[t++]=l,this.hasWebMercatorT&&(e[t++]=s);return this.hasVertexNormals&&(e[t++]=Kn.octPackFloat(r)),this.hasGeodeticSurfaceNormals&&(e[t++]=a.x,e[t++]=a.y,e[t++]=a.z),t};var V$e=new h,Ffe=new h;rc.prototype.addGeodeticSurfaceNormals=function(e,t,n){if(this.hasGeodeticSurfaceNormals)return;let i=this.stride,o=e.length/i;this.hasGeodeticSurfaceNormals=!0,this._calculateStrideAndOffsets();let r=this.stride;for(let s=0;s<o;s++){for(let u=0;u<i;u++){let m=s*i+u,p=s*r+u;t[p]=e[m]}let a=this.decodePosition(t,s,V$e),c=n.geodeticSurfaceNormal(a,Ffe),l=s*r+this._offsetGeodeticSurfaceNormal;t[l]=c.x,t[l+1]=c.y,t[l+2]=c.z}};rc.prototype.removeGeodeticSurfaceNormals=function(e,t){if(!this.hasGeodeticSurfaceNormals)return;let n=this.stride,i=e.length/n;this.hasGeodeticSurfaceNormals=!1,this._calculateStrideAndOffsets();let o=this.stride;for(let r=0;r<i;r++)for(let s=0;s<o;s++){let a=r*n+s,c=r*o+s;t[c]=e[a]}};rc.prototype.decodePosition=function(e,t,n){if(d(n)||(n=new h),t*=this.stride,this.quantization===vs.BITS12){let i=Kn.decompressTextureCoordinates(e[t],Au);n.x=i.x,n.y=i.y;let o=Kn.decompressTextureCoordinates(e[t+1],Au);return n.z=o.x,A.multiplyByPoint(this.fromScaledENU,n,n)}return n.x=e[t],n.y=e[t+1],n.z=e[t+2],h.add(n,this.center,n)};rc.prototype.getExaggeratedPosition=function(e,t,n){n=this.decodePosition(e,t,n);let i=this.exaggeration,o=this.exaggerationRelativeHeight;if(i!==1&&this.hasGeodeticSurfaceNormals){let s=this.decodeGeodeticSurfaceNormal(e,t,Ffe),a=this.decodeHeight(e,t),c=Sc.getHeight(a,i,o)-a;n.x+=s.x*c,n.y+=s.y*c,n.z+=s.z*c}return n};rc.prototype.decodeTextureCoordinates=function(e,t,n){return d(n)||(n=new D),t*=this.stride,this.quantization===vs.BITS12?Kn.decompressTextureCoordinates(e[t+2],n):D.fromElements(e[t+4],e[t+5],n)};rc.prototype.decodeHeight=function(e,t){return t*=this.stride,this.quantization===vs.BITS12?Kn.decompressTextureCoordinates(e[t+1],Au).y*(this.maximumHeight-this.minimumHeight)+this.minimumHeight:e[t+3]};rc.prototype.decodeWebMercatorT=function(e,t){return t*=this.stride,this.quantization===vs.BITS12?Kn.decompressTextureCoordinates(e[t+3],Au).x:e[t+6]};rc.prototype.getOctEncodedNormal=function(e,t,n){t=t*this.stride+this._offsetVertexNormal;let i=e[t]/256,o=Math.floor(i),r=(i-o)*256;return D.fromElements(o,r,n)};rc.prototype.decodeGeodeticSurfaceNormal=function(e,t,n){return t=t*this.stride+this._offsetGeodeticSurfaceNormal,n.x=e[t],n.y=e[t+1],n.z=e[t+2],n};rc.prototype._calculateStrideAndOffsets=function(){let e=0;switch(this.quantization){case vs.BITS12:e+=3;break;default:e+=6}this.hasWebMercatorT&&(e+=1),this.hasVertexNormals&&(this._offsetVertexNormal=e,e+=1),this.hasGeodeticSurfaceNormals&&(this._offsetGeodeticSurfaceNormal=e,e+=3),this.stride=e};var RU={position3DAndHeight:0,textureCoordAndEncodedNormals:1,geodeticSurfaceNormal:2},ZU={compressed0:0,compressed1:1,geodeticSurfaceNormal:2};rc.prototype.getAttributes=function(e){let t=Q.FLOAT,n=Q.getSizeInBytes(t),i=this.stride*n,o=0,r=[];function s(a,c){r.push({index:a,vertexBuffer:e,componentDatatype:t,componentsPerAttribute:c,offsetInBytes:o,strideInBytes:i}),o+=c*n}if(this.quantization===vs.NONE){s(RU.position3DAndHeight,4);let a=2;a+=this.hasWebMercatorT?1:0,a+=this.hasVertexNormals?1:0,s(RU.textureCoordAndEncodedNormals,a),this.hasGeodeticSurfaceNormals&&s(RU.geodeticSurfaceNormal,3)}else{let a=this.hasWebMercatorT||this.hasVertexNormals,c=this.hasWebMercatorT&&this.hasVertexNormals;s(ZU.compressed0,a?4:3),c&&s(ZU.compressed1,1),this.hasGeodeticSurfaceNormals&&s(ZU.geodeticSurfaceNormal,3)}return r};rc.prototype.getAttributeLocations=function(){return this.quantization===vs.NONE?RU:ZU};rc.clone=function(e,t){if(d(e))return d(t)||(t=new rc),t.quantization=e.quantization,t.minimumHeight=e.minimumHeight,t.maximumHeight=e.maximumHeight,t.center=h.clone(e.center),t.toScaledENU=A.clone(e.toScaledENU),t.fromScaledENU=A.clone(e.fromScaledENU),t.matrix=A.clone(e.matrix),t.hasVertexNormals=e.hasVertexNormals,t.hasWebMercatorT=e.hasWebMercatorT,t.hasGeodeticSurfaceNormals=e.hasGeodeticSurfaceNormals,t.exaggeration=e.exaggeration,t.exaggerationRelativeHeight=e.exaggerationRelativeHeight,t._calculateStrideAndOffsets(),t};var sc=rc;var Tf={};Tf.DEFAULT_STRUCTURE=Object.freeze({heightScale:1,heightOffset:0,elementsPerHeight:1,stride:1,elementMultiplier:256,isBigEndian:!1});var mJ=new h,L$e=new A,R$e=new h,Z$e=new h;Tf.computeVertices=function(e){let t=Math.cos,n=Math.sin,i=Math.sqrt,o=Math.atan,r=Math.exp,s=W.PI_OVER_TWO,a=W.toRadians,c=e.heightmap,l=e.width,u=e.height,m=e.skirtHeight,p=m>0,y=g(e.isGeographic,!0),f=g(e.ellipsoid,re.WGS84),x=1/f.maximumRadius,_=de.clone(e.nativeRectangle),C=de.clone(e.rectangle),V,L,Z,G;d(C)?(V=C.west,L=C.south,Z=C.east,G=C.north):y?(V=a(_.west),L=a(_.south),Z=a(_.east),G=a(_.north)):(V=_.west*x,L=s-2*o(r(-_.south*x)),Z=_.east*x,G=s-2*o(r(-_.north*x)));let X=e.relativeToCenter,P=d(X);X=P?X:h.ZERO;let v=g(e.includeWebMercatorT,!1),F=g(e.exaggeration,1),M=g(e.exaggerationRelativeHeight,0),R=F!==1,E=g(e.structure,Tf.DEFAULT_STRUCTURE),I=g(E.heightScale,Tf.DEFAULT_STRUCTURE.heightScale),w=g(E.heightOffset,Tf.DEFAULT_STRUCTURE.heightOffset),N=g(E.elementsPerHeight,Tf.DEFAULT_STRUCTURE.elementsPerHeight),B=g(E.stride,Tf.DEFAULT_STRUCTURE.stride),k=g(E.elementMultiplier,Tf.DEFAULT_STRUCTURE.elementMultiplier),O=g(E.isBigEndian,Tf.DEFAULT_STRUCTURE.isBigEndian),U=de.computeWidth(_),J=de.computeHeight(_),z=U/(l-1),ee=J/(u-1);y||(U*=x,J*=x);let K=f.radiiSquared,j=K.x,q=K.y,be=K.z,Te=65536,ae=-65536,xe=vt.eastNorthUpToFixedFrame(X,f),_e=A.inverseTransformation(xe,L$e),Ve,Ie;v&&(Ve=Ei.geodeticLatitudeToMercatorAngle(L),Ie=1/(Ei.geodeticLatitudeToMercatorAngle(G)-Ve));let Me=R$e;Me.x=Number.POSITIVE_INFINITY,Me.y=Number.POSITIVE_INFINITY,Me.z=Number.POSITIVE_INFINITY;let ve=Z$e;ve.x=Number.NEGATIVE_INFINITY,ve.y=Number.NEGATIVE_INFINITY,ve.z=Number.NEGATIVE_INFINITY;let ke=Number.POSITIVE_INFINITY,ct=l*u,yt=m>0?l*2+u*2:0,ot=ct+yt,ln=new Array(ot),vn=new Array(ot),Dt=new Array(ot),Nt=v?new Array(ot):[],pe=R?new Array(ot):[],Ce=0,Ht=u,ut=0,hi=l;p&&(--Ce,++Ht,--ut,++hi);let ji=1e-5;for(let Qe=Ce;Qe<Ht;++Qe){let pt=Qe;pt<0&&(pt=0),pt>=u&&(pt=u-1);let Bt=_.north-ee*pt;y?Bt=a(Bt):Bt=s-2*o(r(-Bt*x));let Vn=(Bt-L)/(G-L);Vn=W.clamp(Vn,0,1);let di=Qe===Ce,bo=Qe===Ht-1;m>0&&(di?Bt+=ji*J:bo&&(Bt-=ji*J));let es=t(Bt),ts=n(Bt),Mo=be*ts,Ki;v&&(Ki=(Ei.geodeticLatitudeToMercatorAngle(Bt)-Ve)*Ie);for(let ns=ut;ns<hi;++ns){let zn=ns;zn<0&&(zn=0),zn>=l&&(zn=l-1);let wn=pt*(l*B)+zn*B,mn;if(N===1)mn=c[wn];else{mn=0;let Ga;if(O)for(Ga=0;Ga<N;++Ga)mn=mn*k+c[wn+Ga];else for(Ga=N-1;Ga>=0;--Ga)mn=mn*k+c[wn+Ga]}mn=mn*I+w,ae=Math.max(ae,mn),Te=Math.min(Te,mn);let _i=_.west+z*zn;y?_i=a(_i):_i=_i*x;let ui=(_i-V)/(Z-V);ui=W.clamp(ui,0,1);let As=pt*l+zn;if(m>0){let Ga=ns===ut,Ch=ns===hi-1,DT=di||bo||Ga||Ch;if((di||bo)&&(Ga||Ch))continue;DT&&(mn-=m,Ga?(As=ct+(u-pt-1),_i-=ji*U):bo?As=ct+u+(l-zn-1):Ch?(As=ct+u+l+pt,_i+=ji*U):di&&(As=ct+u+l+u+zn))}let fi=es*t(_i),Pr=es*n(_i),Sh=j*fi,cr=q*Pr,qc=1/i(Sh*fi+cr*Pr+Mo*ts),pg=Sh*qc,Or=cr*qc,bc=Mo*qc,Dd=new h;Dd.x=pg+fi*mn,Dd.y=Or+Pr*mn,Dd.z=bc+ts*mn,A.multiplyByPoint(_e,Dd,mJ),h.minimumByComponent(mJ,Me,Me),h.maximumByComponent(mJ,ve,ve),ke=Math.min(ke,mn),ln[As]=Dd,Dt[As]=new D(ui,Vn),vn[As]=mn,v&&(Nt[As]=Ki),R&&(pe[As]=f.geodeticSurfaceNormal(Dd))}}let pc=ce.fromPoints(ln),bs;d(C)&&(bs=Wn.fromRectangle(C,Te,ae,f));let ys;P&&(ys=new l0(f).computeHorizonCullingPointPossiblyUnderEllipsoid(X,ln,Te));let $r=new ab(Me,ve,X),we=new sc(X,$r,ke,ae,xe,!1,v,R,F,M),je=new Float32Array(ot*we.stride),qe=0;for(let Qe=0;Qe<ot;++Qe)qe=we.encode(je,qe,ln[Qe],Dt[Qe],vn[Qe],void 0,Nt[Qe],pe[Qe]);return{vertices:je,maximumHeight:ae,minimumHeight:Te,encoding:we,boundingSphere3D:pc,orientedBoundingBox:bs,occludeePointInScaledSpace:ys}};var M1=Tf;var idi=T(S(),1);function Ny(){fe.throwInstantiationError()}Object.defineProperties(Ny.prototype,{credits:{get:fe.throwInstantiationError},waterMask:{get:fe.throwInstantiationError}});Ny.prototype.interpolateHeight=fe.throwInstantiationError;Ny.prototype.isChildAvailable=fe.throwInstantiationError;Ny.prototype.createMesh=fe.throwInstantiationError;Ny.prototype.upsample=fe.throwInstantiationError;Ny.prototype.wasCreatedByUpsampling=fe.throwInstantiationError;Ny.maximumAsynchronousTasks=5;var sh=Ny;var sdi=T(S(),1);function G$e(e,t,n,i,o,r,s,a,c,l,u,m,p,y,f,x){this.center=e,this.vertices=t,this.stride=g(l,6),this.indices=n,this.indexCountWithoutSkirts=i,this.vertexCountWithoutSkirts=o,this.minimumHeight=r,this.maximumHeight=s,this.boundingSphere3D=a,this.occludeePointInScaledSpace=c,this.orientedBoundingBox=u,this.encoding=m,this.westIndicesSouthToNorth=p,this.southIndicesEastToWest=y,this.eastIndicesNorthToSouth=f,this.northIndicesWestToEast=x}var Mu=G$e;var mdi=T(S(),1);function Bc(){fe.throwInstantiationError()}Object.defineProperties(Bc.prototype,{errorEvent:{get:fe.throwInstantiationError},credit:{get:fe.throwInstantiationError},tilingScheme:{get:fe.throwInstantiationError},hasWaterMask:{get:fe.throwInstantiationError},hasVertexNormals:{get:fe.throwInstantiationError},availability:{get:fe.throwInstantiationError}});var Afe=[];Bc.getRegularGridIndices=function(e,t){let n=Afe[e];d(n)||(Afe[e]=n=[]);let i=n[t];return d(i)||(e*t<W.SIXTY_FOUR_KILOBYTES?i=n[t]=new Uint16Array((e-1)*(t-1)*6):i=n[t]=new Uint32Array((e-1)*(t-1)*6),kfe(e,t,i,0)),i};var Mfe=[];Bc.getRegularGridIndicesAndEdgeIndices=function(e,t){let n=Mfe[e];d(n)||(Mfe[e]=n=[]);let i=n[t];if(!d(i)){let o=Bc.getRegularGridIndices(e,t),r=Ufe(e,t),s=r.westIndicesSouthToNorth,a=r.southIndicesEastToWest,c=r.eastIndicesNorthToSouth,l=r.northIndicesWestToEast;i=n[t]={indices:o,westIndicesSouthToNorth:s,southIndicesEastToWest:a,eastIndicesNorthToSouth:c,northIndicesWestToEast:l}}return i};var Nfe=[];Bc.getRegularGridAndSkirtIndicesAndEdgeIndices=function(e,t){let n=Nfe[e];d(n)||(Nfe[e]=n=[]);let i=n[t];if(!d(i)){let o=e*t,r=(e-1)*(t-1)*6,s=e*2+t*2,a=Math.max(0,s-4)*6,c=o+s,l=r+a,u=Ufe(e,t),m=u.westIndicesSouthToNorth,p=u.southIndicesEastToWest,y=u.eastIndicesNorthToSouth,f=u.northIndicesWestToEast,x=Ue.createTypedArray(c,l);kfe(e,t,x,0),Bc.addSkirtIndices(m,p,y,f,o,x,r),i=n[t]={indices:x,westIndicesSouthToNorth:m,southIndicesEastToWest:p,eastIndicesNorthToSouth:y,northIndicesWestToEast:f,indexCountWithoutSkirts:r}}return i};Bc.addSkirtIndices=function(e,t,n,i,o,r,s){let a=o;s=GU(e,a,r,s),a+=e.length,s=GU(t,a,r,s),a+=t.length,s=GU(n,a,r,s),a+=n.length,GU(i,a,r,s)};function Ufe(e,t){let n=new Array(t),i=new Array(e),o=new Array(t),r=new Array(e),s;for(s=0;s<e;++s)r[s]=s,i[s]=e*t-1-s;for(s=0;s<t;++s)o[s]=(s+1)*e-1,n[s]=(t-s-1)*e;return{westIndicesSouthToNorth:n,southIndicesEastToWest:i,eastIndicesNorthToSouth:o,northIndicesWestToEast:r}}function kfe(e,t,n,i){let o=0;for(let r=0;r<t-1;++r){for(let s=0;s<e-1;++s){let a=o,c=a+e,l=c+1,u=a+1;n[i++]=a,n[i++]=c,n[i++]=u,n[i++]=u,n[i++]=c,n[i++]=l,++o}++o}}function GU(e,t,n,i){let o=e[0],r=e.length;for(let s=1;s<r;++s){let a=e[s];n[i++]=o,n[i++]=a,n[i++]=t,n[i++]=t,n[i++]=a,n[i++]=t+1,o=a,++t}return i}Bc.heightmapTerrainQuality=.25;Bc.getEstimatedLevelZeroGeometricErrorForAHeightmap=function(e,t,n){return e.maximumRadius*2*Math.PI*Bc.heightmapTerrainQuality/(t*n)};Bc.prototype.requestTileGeometry=fe.throwInstantiationError;Bc.prototype.getLevelMaximumGeometricError=fe.throwInstantiationError;Bc.prototype.getTileDataAvailable=fe.throwInstantiationError;Bc.prototype.loadTileDataAvailability=fe.throwInstantiationError;var Ur=Bc;function Z0(e){this._buffer=e.buffer,this._width=e.width,this._height=e.height,this._childTileMask=g(e.childTileMask,15),this._encoding=g(e.encoding,Fu.NONE);let t=M1.DEFAULT_STRUCTURE,n=e.structure;d(n)?n!==t&&(n.heightScale=g(n.heightScale,t.heightScale),n.heightOffset=g(n.heightOffset,t.heightOffset),n.elementsPerHeight=g(n.elementsPerHeight,t.elementsPerHeight),n.stride=g(n.stride,t.stride),n.elementMultiplier=g(n.elementMultiplier,t.elementMultiplier),n.isBigEndian=g(n.isBigEndian,t.isBigEndian)):n=t,this._structure=n,this._createdByUpsampling=g(e.createdByUpsampling,!1),this._waterMask=e.waterMask,this._skirtHeight=void 0,this._bufferType=this._encoding===Fu.LERC?Float32Array:this._buffer.constructor,this._mesh=void 0}Object.defineProperties(Z0.prototype,{credits:{get:function(){}},waterMask:{get:function(){return this._waterMask}},childTileMask:{get:function(){return this._childTileMask}}});var Dfe="createVerticesFromHeightmap",E$e=new yi(Dfe),X$e=new yi(Dfe,sh.maximumAsynchronousTasks);Z0.prototype.createMesh=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.tilingScheme,n=e.x,i=e.y,o=e.level,r=g(e.exaggeration,1),s=g(e.exaggerationRelativeHeight,0),a=g(e.throttle,!0),c=t.ellipsoid,l=t.tileXYToNativeRectangle(n,i,o),u=t.tileXYToRectangle(n,i,o),m=c.cartographicToCartesian(de.center(u)),p=this._structure,f=Ur.getEstimatedLevelZeroGeometricErrorForAHeightmap(c,this._width,t.getNumberOfXTilesAtLevel(0))/(1<<o);this._skirtHeight=Math.min(f*4,1e3);let _=(a?X$e:E$e).scheduleTask({heightmap:this._buffer,structure:p,includeWebMercatorT:!0,width:this._width,height:this._height,nativeRectangle:l,rectangle:u,relativeToCenter:m,ellipsoid:c,skirtHeight:this._skirtHeight,isGeographic:t.projection instanceof Zi,exaggeration:r,exaggerationRelativeHeight:s,encoding:this._encoding});if(!d(_))return;let C=this;return Promise.resolve(_).then(function(V){let L;C._skirtHeight>0?L=Ur.getRegularGridAndSkirtIndicesAndEdgeIndices(V.gridWidth,V.gridHeight):L=Ur.getRegularGridIndicesAndEdgeIndices(V.gridWidth,V.gridHeight);let Z=V.gridWidth*V.gridHeight;return C._mesh=new Mu(m,new Float32Array(V.vertices),L.indices,L.indexCountWithoutSkirts,Z,V.minimumHeight,V.maximumHeight,ce.clone(V.boundingSphere3D),h.clone(V.occludeePointInScaledSpace),V.numberOfAttributes,Wn.clone(V.orientedBoundingBox),sc.clone(V.encoding),L.westIndicesSouthToNorth,L.southIndicesEastToWest,L.eastIndicesNorthToSouth,L.northIndicesWestToEast),C._buffer=void 0,C._mesh})};Z0.prototype._createMeshSync=function(e){let t=e.tilingScheme,n=e.x,i=e.y,o=e.level,r=g(e.exaggeration,1),s=g(e.exaggerationRelativeHeight,0),a=t.ellipsoid,c=t.tileXYToNativeRectangle(n,i,o),l=t.tileXYToRectangle(n,i,o),u=a.cartographicToCartesian(de.center(l)),m=this._structure,y=Ur.getEstimatedLevelZeroGeometricErrorForAHeightmap(a,this._width,t.getNumberOfXTilesAtLevel(0))/(1<<o);this._skirtHeight=Math.min(y*4,1e3);let f=M1.computeVertices({heightmap:this._buffer,structure:m,includeWebMercatorT:!0,width:this._width,height:this._height,nativeRectangle:c,rectangle:l,relativeToCenter:u,ellipsoid:a,skirtHeight:this._skirtHeight,isGeographic:t.projection instanceof Zi,exaggeration:r,exaggerationRelativeHeight:s});this._buffer=void 0;let x;this._skirtHeight>0?x=Ur.getRegularGridAndSkirtIndicesAndEdgeIndices(this._width,this._height):x=Ur.getRegularGridIndicesAndEdgeIndices(this._width,this._height);let _=f.gridWidth*f.gridHeight;return this._mesh=new Mu(u,f.vertices,x.indices,x.indexCountWithoutSkirts,_,f.minimumHeight,f.maximumHeight,f.boundingSphere3D,f.occludeePointInScaledSpace,f.encoding.stride,f.orientedBoundingBox,f.encoding,x.westIndicesSouthToNorth,x.southIndicesEastToWest,x.eastIndicesNorthToSouth,x.northIndicesWestToEast),this._mesh};Z0.prototype.interpolateHeight=function(e,t,n){let i=this._width,o=this._height,r=this._structure,s=r.stride,a=r.elementsPerHeight,c=r.elementMultiplier,l=r.isBigEndian,u=r.heightOffset,m=r.heightScale,p=d(this._mesh),y=this._encoding===Fu.LERC;if(!p&&y)return;let x;if(p){let _=this._mesh.vertices,C=this._mesh.encoding;x=Bfe(_,C,u,m,e,i,o,t,n)}else x=I$e(this._buffer,a,c,s,l,e,i,o,t,n),x=x*m+u;return x};Z0.prototype.upsample=function(e,t,n,i,o,r,s){let a=this._mesh;if(!d(a))return;let c=this._width,l=this._height,u=this._structure,m=u.stride,p=new this._bufferType(c*l*m),y=a.vertices,f=a.encoding,x=e.tileXYToRectangle(t,n,i),_=e.tileXYToRectangle(o,r,s),C=u.heightOffset,V=u.heightScale,L=u.elementsPerHeight,Z=u.elementMultiplier,G=u.isBigEndian,X=Math.pow(Z,L-1);for(let P=0;P<l;++P){let v=W.lerp(_.north,_.south,P/(l-1));for(let F=0;F<c;++F){let M=W.lerp(_.west,_.east,F/(c-1)),b=Bfe(y,f,C,V,x,c,l,M,v);b=b<u.lowestEncodedHeight?u.lowestEncodedHeight:b,b=b>u.highestEncodedHeight?u.highestEncodedHeight:b,W$e(p,L,Z,X,m,G,P*c+F,b)}}return Promise.resolve(new Z0({buffer:p,width:c,height:l,childTileMask:0,structure:this._structure,createdByUpsampling:!0}))};Z0.prototype.isChildAvailable=function(e,t,n,i){let o=2;return n!==e*2&&++o,i!==t*2&&(o-=2),(this._childTileMask&1<<o)!==0};Z0.prototype.wasCreatedByUpsampling=function(){return this._createdByUpsampling};function I$e(e,t,n,i,o,r,s,a,c,l){let u=(c-r.west)*(s-1)/(r.east-r.west),m=(l-r.south)*(a-1)/(r.north-r.south),p=u|0,y=p+1;y>=s&&(y=s-1,p=s-2);let f=m|0,x=f+1;x>=a&&(x=a-1,f=a-2);let _=u-p,C=m-f;f=a-1-f,x=a-1-x;let V=EU(e,t,n,i,o,f*s+p),L=EU(e,t,n,i,o,f*s+y),Z=EU(e,t,n,i,o,x*s+p),G=EU(e,t,n,i,o,x*s+y);return Yfe(_,C,V,L,Z,G)}function Bfe(e,t,n,i,o,r,s,a,c){let l=(a-o.west)*(r-1)/(o.east-o.west),u=(c-o.south)*(s-1)/(o.north-o.south),m=l|0,p=m+1;p>=r&&(p=r-1,m=r-2);let y=u|0,f=y+1;f>=s&&(f=s-1,y=s-2);let x=l-m,_=u-y;y=s-1-y,f=s-1-f;let C=(t.decodeHeight(e,y*r+m)-n)/i,V=(t.decodeHeight(e,y*r+p)-n)/i,L=(t.decodeHeight(e,f*r+m)-n)/i,Z=(t.decodeHeight(e,f*r+p)-n)/i;return Yfe(x,_,C,V,L,Z)}function Yfe(e,t,n,i,o,r){return t<e?n+e*(i-n)+t*(r-i):n+e*(r-o)+t*(o-n)}function EU(e,t,n,i,o,r){r*=i;let s=0,a;if(o)for(a=0;a<t;++a)s=s*n+e[r+a];else for(a=t-1;a>=0;--a)s=s*n+e[r+a];return s}function W$e(e,t,n,i,o,r,s,a){s*=o;let c;if(r)for(c=0;c<t-1;++c)e[s+c]=a/i|0,a-=e[s+c]*i,i/=n;else for(c=t-1;c>0;--c)e[s+c]=a/i|0,a-=e[s+c]*i,i/=n;e[s+c]=a}var Sa=Z0;var wdi=T(S(),1);function k1(e,t){this._tilingScheme=e,this._maximumLevel=t,this._rootNodes=[]}var O_=new de;function P$e(e,t,n,i){let o=i.length;for(let r=0;r<o;++r){let s=i[r];if(s.x===t&&s.y===n&&s.level===e)return!0}return!1}k1.prototype.addAvailableTileRange=function(e,t,n,i,o){let r=this._tilingScheme,s=this._rootNodes;if(e===0)for(let p=n;p<=o;++p)for(let y=t;y<=i;++y)P$e(e,y,p,s)||s.push(new N1(r,void 0,0,y,p));r.tileXYToRectangle(t,n,e,O_);let a=O_.west,c=O_.north;r.tileXYToRectangle(i,o,e,O_);let l=O_.east,u=O_.south,m=new M$e(e,a,u,l,c);for(let p=0;p<s.length;++p){let y=s[p];hJ(y.extent,m)&&N$e(this._maximumLevel,y,m)}};k1.prototype.computeMaximumLevelAtPosition=function(e){let t;for(let n=0;n<this._rootNodes.length;++n){let i=this._rootNodes[n];if(U1(i.extent,e)){t=i;break}}return d(t)?AP(void 0,t,e):-1};var v$e=[],w$e=[],F$e=new de,A$e=new de;k1.prototype.computeBestAvailableLevelOverRectangle=function(e){let t=v$e;t.length=0,e.east<e.west?(t.push(de.fromRadians(-Math.PI,e.south,e.east,e.north,F$e)),t.push(de.fromRadians(e.west,e.south,Math.PI,e.north,A$e))):t.push(e);let n=w$e;n.length=0;let i;for(i=0;i<this._rootNodes.length;++i)MP(n,this._rootNodes[i],t);for(i=n.length-1;i>=0;--i)if(d(n[i])&&n[i].length===0)return i;return 0};var Ofe=new he;k1.prototype.isTileAvailable=function(e,t,n){let i=this._tilingScheme.tileXYToRectangle(t,n,e,O_);return de.center(i,Ofe),this.computeMaximumLevelAtPosition(Ofe)>=e};k1.prototype.computeChildMaskForTile=function(e,t,n){let i=e+1;if(i>=this._maximumLevel)return 0;let o=0;return o|=this.isTileAvailable(i,2*t,2*n+1)?1:0,o|=this.isTileAvailable(i,2*t+1,2*n+1)?2:0,o|=this.isTileAvailable(i,2*t,2*n)?4:0,o|=this.isTileAvailable(i,2*t+1,2*n)?8:0,o};function N1(e,t,n,i,o){this.tilingScheme=e,this.parent=t,this.level=n,this.x=i,this.y=o,this.extent=e.tileXYToRectangle(i,o,n),this.rectangles=[],this._sw=void 0,this._se=void 0,this._nw=void 0,this._ne=void 0}Object.defineProperties(N1.prototype,{nw:{get:function(){return this._nw||(this._nw=new N1(this.tilingScheme,this,this.level+1,this.x*2,this.y*2)),this._nw}},ne:{get:function(){return this._ne||(this._ne=new N1(this.tilingScheme,this,this.level+1,this.x*2+1,this.y*2)),this._ne}},sw:{get:function(){return this._sw||(this._sw=new N1(this.tilingScheme,this,this.level+1,this.x*2,this.y*2+1)),this._sw}},se:{get:function(){return this._se||(this._se=new N1(this.tilingScheme,this,this.level+1,this.x*2+1,this.y*2+1)),this._se}}});function M$e(e,t,n,i,o){this.level=e,this.west=t,this.south=n,this.east=i,this.north=o}function hJ(e,t){let n=Math.max(e.west,t.west),i=Math.max(e.south,t.south),o=Math.min(e.east,t.east),r=Math.min(e.north,t.north);return i<r&&n<o}function N$e(e,t,n){for(;t.level<e;)if(XU(t.nw.extent,n))t=t.nw;else if(XU(t.ne.extent,n))t=t.ne;else if(XU(t.sw.extent,n))t=t.sw;else if(XU(t.se.extent,n))t=t.se;else break;if(t.rectangles.length===0||t.rectangles[t.rectangles.length-1].level<=n.level)t.rectangles.push(n);else{let i=Lo(t.rectangles,n.level,U$e);i<0&&(i=~i),t.rectangles.splice(i,0,n)}}function U$e(e,t){return e.level-t}function XU(e,t){return t.west>=e.west&&t.east<=e.east&&t.south>=e.south&&t.north<=e.north}function U1(e,t){return t.longitude>=e.west&&t.longitude<=e.east&&t.latitude>=e.south&&t.latitude<=e.north}function AP(e,t,n){let i=0,o=!1;for(;!o;){let r=t._nw&&U1(t._nw.extent,n),s=t._ne&&U1(t._ne.extent,n),a=t._sw&&U1(t._sw.extent,n),c=t._se&&U1(t._se.extent,n);if(r+s+a+c>1){r&&(i=Math.max(i,AP(t,t._nw,n))),s&&(i=Math.max(i,AP(t,t._ne,n))),a&&(i=Math.max(i,AP(t,t._sw,n))),c&&(i=Math.max(i,AP(t,t._se,n)));break}else r?t=t._nw:s?t=t._ne:a?t=t._sw:c?t=t._se:o=!0}for(;t!==e;){let r=t.rectangles;for(let s=r.length-1;s>=0&&r[s].level>i;--s){let a=r[s];U1(a,n)&&(i=a.level)}t=t.parent}return i}function MP(e,t,n){if(!t)return;let i,o=!1;for(i=0;i<n.length;++i)o=o||hJ(t.extent,n[i]);if(!o)return;let r=t.rectangles;for(i=0;i<r.length;++i){let s=r[i];e[s.level]||(e[s.level]=n),e[s.level]=k$e(e[s.level],s)}MP(e,t._nw,n),MP(e,t._ne,n),MP(e,t._sw,n),MP(e,t._se,n)}function k$e(e,t){let n=[];for(let i=0;i<e.length;++i){let o=e[i];hJ(o,t)?(o.west<t.west&&n.push(new de(o.west,o.south,t.west,o.north)),o.east>t.east&&n.push(new de(t.east,o.south,o.east,o.north)),o.south<t.south&&n.push(new de(Math.max(t.west,o.west),o.south,Math.min(t.east,o.east),t.south)),o.north>t.north&&n.push(new de(Math.max(t.west,o.west),t.north,Math.min(t.east,o.east),o.north))):n.push(o)}return n}var ah=k1;var Bdi=T(S(),1);var Mdi=T(S(),1);function D$e(e){let t,n=e.name,i=e.message;d(n)&&d(i)?t=`${n}: ${i}`:t=e.toString();let o=e.stack;return d(o)&&(t+=`
  7421. ${o}`),t}var Sf=D$e;function IU(e,t,n,i,o,r,s){this.provider=e,this.message=t,this.x=n,this.y=i,this.level=o,this.timesRetried=g(r,0),this.retry=!1,this.error=s}IU.reportError=function(e,t,n,i,o,r,s,a){let c=e;return d(e)?(c.provider=t,c.message=i,c.x=o,c.y=r,c.level=s,c.retry=!1,c.error=a,++c.timesRetried):c=new IU(t,i,o,r,s,0,a),d(n)&&n.numberOfListeners>0?n.raiseEvent(c):d(t)&&console.log(`An error occurred in "${t.constructor.name}": ${Sf(i)}`),c};IU.reportSuccess=function(e){d(e)&&(e.timesRetried=-1)};var Vo=IU;var jdi=T(S(),1);function Uy(e){if(e=g(e,g.EMPTY_OBJECT),this._ellipsoid=g(e.ellipsoid,re.WGS84),this._numberOfLevelZeroTilesX=g(e.numberOfLevelZeroTilesX,1),this._numberOfLevelZeroTilesY=g(e.numberOfLevelZeroTilesY,1),this._projection=new Ei(this._ellipsoid),d(e.rectangleSouthwestInMeters)&&d(e.rectangleNortheastInMeters))this._rectangleSouthwestInMeters=e.rectangleSouthwestInMeters,this._rectangleNortheastInMeters=e.rectangleNortheastInMeters;else{let i=this._ellipsoid.maximumRadius*Math.PI;this._rectangleSouthwestInMeters=new D(-i,-i),this._rectangleNortheastInMeters=new D(i,i)}let t=this._projection.unproject(this._rectangleSouthwestInMeters),n=this._projection.unproject(this._rectangleNortheastInMeters);this._rectangle=new de(t.longitude,t.latitude,n.longitude,n.latitude)}Object.defineProperties(Uy.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},rectangle:{get:function(){return this._rectangle}},projection:{get:function(){return this._projection}}});Uy.prototype.getNumberOfXTilesAtLevel=function(e){return this._numberOfLevelZeroTilesX<<e};Uy.prototype.getNumberOfYTilesAtLevel=function(e){return this._numberOfLevelZeroTilesY<<e};Uy.prototype.rectangleToNativeRectangle=function(e,t){let n=this._projection,i=n.project(de.southwest(e)),o=n.project(de.northeast(e));return d(t)?(t.west=i.x,t.south=i.y,t.east=o.x,t.north=o.y,t):new de(i.x,i.y,o.x,o.y)};Uy.prototype.tileXYToNativeRectangle=function(e,t,n,i){let o=this.getNumberOfXTilesAtLevel(n),r=this.getNumberOfYTilesAtLevel(n),s=(this._rectangleNortheastInMeters.x-this._rectangleSouthwestInMeters.x)/o,a=this._rectangleSouthwestInMeters.x+e*s,c=this._rectangleSouthwestInMeters.x+(e+1)*s,l=(this._rectangleNortheastInMeters.y-this._rectangleSouthwestInMeters.y)/r,u=this._rectangleNortheastInMeters.y-t*l,m=this._rectangleNortheastInMeters.y-(t+1)*l;return d(i)?(i.west=a,i.south=m,i.east=c,i.north=u,i):new de(a,m,c,u)};Uy.prototype.tileXYToRectangle=function(e,t,n,i){let o=this.tileXYToNativeRectangle(e,t,n,i),r=this._projection,s=r.unproject(new D(o.west,o.south)),a=r.unproject(new D(o.east,o.north));return o.west=s.longitude,o.south=s.latitude,o.east=a.longitude,o.north=a.latitude,o};Uy.prototype.positionToTileXY=function(e,t,n){let i=this._rectangle;if(!de.contains(i,e))return;let o=this.getNumberOfXTilesAtLevel(t),r=this.getNumberOfYTilesAtLevel(t),a=(this._rectangleNortheastInMeters.x-this._rectangleSouthwestInMeters.x)/o,l=(this._rectangleNortheastInMeters.y-this._rectangleSouthwestInMeters.y)/r,m=this._projection.project(e),p=m.x-this._rectangleSouthwestInMeters.x,y=this._rectangleNortheastInMeters.y-m.y,f=p/a|0;f>=o&&(f=o-1);let x=y/l|0;return x>=r&&(x=r-1),d(n)?(n.x=f,n.y=x,n):new D(f,x)};var kr=Uy;var B$e=15;function Kfe(e){this.ellipsoid=g(e.ellipsoid,re.WGS84),this.credit=void 0,this.tilingScheme=void 0,this.height=void 0,this.width=void 0,this.encoding=void 0,this.lodCount=void 0,this.hasAvailability=!1,this.tilesAvailable=void 0,this.tilesAvailabilityLoaded=void 0,this.levelZeroMaximumGeometricError=void 0,this.terrainDataStructure=void 0}Kfe.prototype.build=function(e){e._credit=this.credit,e._tilingScheme=this.tilingScheme,e._height=this.height,e._width=this.width,e._encoding=this.encoding,e._lodCount=this.lodCount,e._hasAvailability=this.hasAvailability,e._tilesAvailable=this.tilesAvailable,e._tilesAvailabilityLoaded=this.tilesAvailabilityLoaded,e._levelZeroMaximumGeometricError=this.levelZeroMaximumGeometricError,e._terrainDataStructure=this.terrainDataStructure};function Y$e(e,t){let n=t.copyrightText;d(n)&&(e.credit=new St(n));let i=t.spatialReference,o=g(i.latestWkid,i.wkid),r=t.extent,s={ellipsoid:e.ellipsoid};if(o===4326)s.rectangle=de.fromDegrees(r.xmin,r.ymin,r.xmax,r.ymax),e.tilingScheme=new Di(s);else if(o===3857){let l=Math.PI*e.ellipsoid.maximumRadius;t.extent.xmax>l&&(t.extent.xmax=l),t.extent.ymax>l&&(t.extent.ymax=l),t.extent.xmin<-l&&(t.extent.xmin=-l),t.extent.ymin<-l&&(t.extent.ymin=-l),s.rectangleSouthwestInMeters=new D(r.xmin,r.ymin),s.rectangleNortheastInMeters=new D(r.xmax,r.ymax),e.tilingScheme=new kr(s)}else throw new me("Invalid spatial reference");let a=t.tileInfo;if(!d(a))throw new me("tileInfo is required");e.width=a.rows+1,e.height=a.cols+1,e.encoding=a.format==="LERC"?Fu.LERC:Fu.NONE,e.lodCount=a.lods.length-1,(e.hasAvailability=t.capabilities.indexOf("Tilemap")!==-1)&&(e.tilesAvailable=new ah(e.tilingScheme,e.lodCount),e.tilesAvailable.addAvailableTileRange(0,0,0,e.tilingScheme.getNumberOfXTilesAtLevel(0),e.tilingScheme.getNumberOfYTilesAtLevel(0)),e.tilesAvailabilityLoaded=new ah(e.tilingScheme,e.lodCount)),e.levelZeroMaximumGeometricError=Ur.getEstimatedLevelZeroGeometricErrorForAHeightmap(e.tilingScheme.ellipsoid,e.width,e.tilingScheme.getNumberOfXTilesAtLevel(0)),t.bandCount>1&&console.log("ArcGISTiledElevationTerrainProvider: Terrain data has more than 1 band. Using the first one."),d(t.minValues)&&d(t.maxValues)?e.terrainDataStructure={elementMultiplier:1,lowestEncodedHeight:t.minValues[0],highestEncodedHeight:t.maxValues[0]}:e.terrainDataStructure={elementMultiplier:1}}async function O$e(e,t,n){try{let i=await t.fetchJson();Y$e(e,i)}catch(i){let o=`An error occurred while accessing ${t}.`;throw Vo.reportError(void 0,n,d(n)?n._errorEvent:void 0,o),i}}function ky(e){e=g(e,g.EMPTY_OBJECT),this._resource=void 0,this._credit=void 0,this._tilingScheme=void 0,this._levelZeroMaximumGeometricError=void 0,this._maxLevel=void 0,this._terrainDataStructure=void 0,this._width=void 0,this._height=void 0,this._encoding=void 0,this._lodCount=void 0,this._hasAvailability=!1,this._tilesAvailable=void 0,this._tilesAvailabilityLoaded=void 0,this._availableCache={},this._errorEvent=new ye}Object.defineProperties(ky.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},tilingScheme:{get:function(){return this._tilingScheme}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},availability:{get:function(){return this._tilesAvailable}}});ky.fromUrl=async function(e,t){t=g(t,g.EMPTY_OBJECT),e=await Promise.resolve(e);let n=Ee.createIfNeeded(e);n.appendForwardSlash(),d(t.token)&&(n=n.getDerivedResource({queryParameters:{token:t.token}}));let i=n.getDerivedResource({queryParameters:{f:"pjson"}}),o=new Kfe(t);await O$e(o,i);let r=new ky(t);return o.build(r),r._resource=n,r};ky.prototype.requestTileGeometry=function(e,t,n,i){let o=this._resource.getDerivedResource({url:`tile/${n}/${t}/${e}`,request:i}),r=this._hasAvailability,s=Promise.resolve(!0),a;if(r&&!d(fJ(this,n+1,e*2,t*2))){let m=Hfe(this,n+1,e*2,t*2);s=m.promise,a=m.request}let c=o.fetchArrayBuffer();if(!d(c)||!d(s))return;let l=this,u=this._tilesAvailable;return Promise.all([c,s]).then(function(m){return new Sa({buffer:m[0],width:l._width,height:l._height,childTileMask:r?u.computeChildMaskForTile(n,e,t):B$e,structure:l._terrainDataStructure,encoding:l._encoding})}).catch(function(m){return d(a)&&a.state===$n.CANCELLED?(i.cancel(),i.deferred.promise.finally(function(){return i.state=$n.CANCELLED,Promise.reject(m)})):Promise.reject(m)})};function fJ(e,t,n,i){if(!e._hasAvailability)return;let o=e._tilesAvailabilityLoaded,r=e._tilesAvailable;if(t>e._lodCount)return!1;if(r.isTileAvailable(t,n,i))return!0;if(o.isTileAvailable(t,n,i))return!1}ky.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};ky.prototype.getTileDataAvailable=function(e,t,n){if(!this._hasAvailability)return;let i=fJ(this,n,e,t);if(d(i))return i;Hfe(this,n,e,t)};ky.prototype.loadTileDataAvailability=function(e,t,n){};function K$e(e,t,n,i){let o=t-1,r=n-1,s=i[e.y*t+e.x],a=[],c={startX:e.x,startY:e.y,endX:0,endY:0},l=new D(e.x+1,e.y+1),u=!1,m=!1;for(;!(u&&m);){let p=l.x,y=m?l.y+1:l.y;if(!u){for(let f=e.y;f<y;++f)if(i[f*t+l.x]!==s){u=!0;break}u?(a.push(new D(l.x,e.y)),--l.x,--p,c.endX=l.x):l.x===o?(c.endX=l.x,u=!0):++l.x}if(!m){let f=l.y*t;for(let x=e.x;x<=p;++x)if(i[f+x]!==s){m=!0;break}m?(a.push(new D(e.x,l.y)),--l.y,c.endY=l.y):l.y===r?(c.endY=l.y,m=!0):++l.y}}return{endingIndices:a,range:c,value:s}}function H$e(e,t,n,i,o){let r=[];if(o.every(function(c){return c===o[0]}))return o[0]===1&&r.push({startX:e,startY:t,endX:e+n-1,endY:t+i-1}),r;let a=[new D(0,0)];for(;a.length>0;){let c=a.pop(),l=K$e(c,n,i,o);if(l.value===1){let m=l.range;m.startX+=e,m.endX+=e,m.startY+=t,m.endY+=t,r.push(m)}let u=l.endingIndices;u.length>0&&(a=a.concat(u))}return r}function Hfe(e,t,n,i){if(!e._hasAvailability)return{};let o=Math.floor(n/128)*128,r=Math.floor(i/128)*128,s=Math.min(1<<t,128),a=`tilemap/${t}/${r}/${o}/${s}/${s}`,c=e._availableCache;if(d(c[a]))return c[a];let l=new Uo({throttle:!1,throttleByServer:!0,type:Hr.TERRAIN}),m=e._resource.getDerivedResource({url:a,request:l}).fetchJson();return d(m)?(m=m.then(function(p){let y=H$e(o,r,s,s,p.data);e._tilesAvailabilityLoaded.addAvailableTileRange(t,o,r,o+s,r+s);let f=e._tilesAvailable;for(let x=0;x<y.length;++x){let _=y[x];f.addAvailableTileRange(t,_.startX,_.startY,_.endX,_.endY)}return fJ(e,t,n,i)}),c[a]={promise:m,request:l},m=m.finally(function(p){return delete c[a],p}),{promise:m,request:l}):{}}var pJ=ky;var Lui=T(S(),1);var zfe="https://dev.virtualearth.net/REST/v1/Locations";function bJ(e){e=g(e,g.EMPTY_OBJECT);let t=e.key;this._key=t;let n={key:t};d(e.culture)&&(n.culture=e.culture),this._resource=new Ee({url:zfe,queryParameters:n}),this._credit=new St('<img src="http://dev.virtualearth.net/Branding/logo_powered_by.png"/>',!1)}Object.defineProperties(bJ.prototype,{url:{get:function(){return zfe}},key:{get:function(){return this._key}},credit:{get:function(){return this._credit}}});bJ.prototype.geocode=async function(e){return this._resource.getDerivedResource({queryParameters:{query:e}}).fetchJsonp("jsonp").then(function(n){return n.resourceSets.length===0?[]:n.resourceSets[0].resources.map(function(o){let r=o.bbox,s=r[0],a=r[1],c=r[2],l=r[3];return{displayName:o.name,destination:de.fromDegrees(a,s,l,c)}})})};var yJ=bJ;var Gui=T(S(),1);function gJ(){}Object.defineProperties(gJ.prototype,{credit:{get:function(){}}});gJ.prototype.geocode=function(e){let t=e.match(/[^\s,\n]+/g);if(t.length===2||t.length===3){let n=+t[0],i=+t[1],o=t.length===3?+t[2]:300;if(isNaN(n)&&isNaN(i)){let r=/^(\d+.?\d*)([nsew])/i;for(let s=0;s<t.length;++s){let a=t[s].match(r);r.test(t[s])&&a.length===3&&(/^[ns]/i.test(a[2])?i=/^[n]/i.test(a[2])?+a[1]:-a[1]:/^[ew]/i.test(a[2])&&(n=/^[e]/i.test(a[2])?+a[1]:-a[1]))}}if(!isNaN(n)&&!isNaN(i)&&!isNaN(o)){let r={displayName:e,destination:h.fromDegrees(n,i,o)};return Promise.resolve([r])}}return Promise.resolve([])};var xJ=gJ;var Aui=T(S(),1);var z$e=new se,Jfe=new h,D1=new h;function J$e(e){let t=e.points,n=e.times;if(t.length<3){let i=n[0],o=1/(n[1]-i),r=t[0],s=t[1];return function(a,c){d(c)||(c=new h);let l=(a-i)*o;return h.lerp(r,s,l,c)}}return function(i,o){d(o)||(o=new h);let r=e._lastTimeIndex=e.findTimeInterval(i,e._lastTimeIndex),s=(i-n[r])/(n[r+1]-n[r]),a=z$e;a.z=s,a.y=s*s,a.x=a.y*s,a.w=1;let c,l,u,m,p;return r===0?(c=t[0],l=t[1],u=e.firstTangent,m=h.subtract(t[2],c,Jfe),h.multiplyByScalar(m,.5,m),p=A.multiplyByVector(Nb.hermiteCoefficientMatrix,a,a)):r===t.length-2?(c=t[r],l=t[r+1],m=e.lastTangent,u=h.subtract(l,t[r-1],Jfe),h.multiplyByScalar(u,.5,u),p=A.multiplyByVector(Nb.hermiteCoefficientMatrix,a,a)):(c=t[r-1],l=t[r],u=t[r+1],m=t[r+2],p=A.multiplyByVector(Dy.catmullRomCoefficientMatrix,a,a)),o=h.multiplyByScalar(c,p.x,o),h.multiplyByScalar(l,p.y,D1),h.add(o,D1,o),h.multiplyByScalar(u,p.z,D1),h.add(o,D1,o),h.multiplyByScalar(m,p.w,D1),h.add(o,D1,o)}}var Q$e=new h,j$e=new h;function Dy(e){e=g(e,g.EMPTY_OBJECT);let t=e.points,n=e.times,i=e.firstTangent,o=e.lastTangent;if(t.length>2&&(d(i)||(i=Q$e,h.multiplyByScalar(t[1],2,i),h.subtract(i,t[2],i),h.subtract(i,t[0],i),h.multiplyByScalar(i,.5,i)),!d(o))){let r=t.length-1;o=j$e,h.multiplyByScalar(t[r-1],2,o),h.subtract(t[r],o,o),h.add(o,t[r-2],o),h.multiplyByScalar(o,.5,o)}this._times=n,this._points=t,this._firstTangent=h.clone(i),this._lastTangent=h.clone(o),this._evaluateFunction=J$e(this),this._lastTimeIndex=0}Object.defineProperties(Dy.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}},firstTangent:{get:function(){return this._firstTangent}},lastTangent:{get:function(){return this._lastTangent}}});Dy.catmullRomCoefficientMatrix=new A(-.5,1,-.5,0,1.5,-2.5,0,1,-1.5,2,.5,0,.5,-.5,0,0);Dy.prototype.findTimeInterval=ro.prototype.findTimeInterval;Dy.prototype.wrapTime=ro.prototype.wrapTime;Dy.prototype.clampTime=ro.prototype.clampTime;Dy.prototype.evaluate=function(e,t){return this._evaluateFunction(e,t)};var _J=Dy;var Zmi=T(S(),1);var imi=T(S(),1);var Dui=T(S(),1);var WU={};WU.clipTriangleAtAxisAlignedThreshold=function(e,t,n,i,o,r){d(r)?r.length=0:r=[];let s,a,c;t?(s=n<e,a=i<e,c=o<e):(s=n>e,a=i>e,c=o>e);let l=s+a+c,u,m,p,y,f,x;return l===1?s?(u=(e-n)/(i-n),m=(e-n)/(o-n),r.push(1),r.push(2),m!==1&&(r.push(-1),r.push(0),r.push(2),r.push(m)),u!==1&&(r.push(-1),r.push(0),r.push(1),r.push(u))):a?(p=(e-i)/(o-i),y=(e-i)/(n-i),r.push(2),r.push(0),y!==1&&(r.push(-1),r.push(1),r.push(0),r.push(y)),p!==1&&(r.push(-1),r.push(1),r.push(2),r.push(p))):c&&(f=(e-o)/(n-o),x=(e-o)/(i-o),r.push(0),r.push(1),x!==1&&(r.push(-1),r.push(2),r.push(1),r.push(x)),f!==1&&(r.push(-1),r.push(2),r.push(0),r.push(f))):l===2?!s&&n!==e?(y=(e-i)/(n-i),f=(e-o)/(n-o),r.push(0),r.push(-1),r.push(1),r.push(0),r.push(y),r.push(-1),r.push(2),r.push(0),r.push(f)):!a&&i!==e?(x=(e-o)/(i-o),u=(e-n)/(i-n),r.push(1),r.push(-1),r.push(2),r.push(1),r.push(x),r.push(-1),r.push(0),r.push(1),r.push(u)):!c&&o!==e&&(m=(e-n)/(o-n),p=(e-i)/(o-i),r.push(2),r.push(-1),r.push(0),r.push(2),r.push(m),r.push(-1),r.push(1),r.push(2),r.push(p)):l!==3&&(r.push(0),r.push(1),r.push(2)),r};WU.computeBarycentricCoordinates=function(e,t,n,i,o,r,s,a,c){let l=n-s,u=s-o,m=r-a,p=i-a,y=1/(m*l+u*p),f=t-a,x=e-s,_=(m*x+u*f)*y,C=(-p*x+l*f)*y,V=1-_-C;return d(c)?(c.x=_,c.y=C,c.z=V,c):new h(_,C,V)};WU.computeLineSegmentLineSegmentIntersection=function(e,t,n,i,o,r,s,a,c){let l=(s-o)*(t-r)-(a-r)*(e-o),u=(n-e)*(t-r)-(i-t)*(e-o),m=(a-r)*(n-e)-(s-o)*(i-t);if(m===0)return;let p=l/m,y=u/m;if(p>=0&&p<=1&&y>=0&&y<=1)return d(c)||(c=new D),c.x=e+p*(n-e),c.y=t+p*(i-t),c};var G0=WU;function By(e){this._quantizedVertices=e.quantizedVertices,this._encodedNormals=e.encodedNormals,this._indices=e.indices,this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._boundingSphere=e.boundingSphere,this._orientedBoundingBox=e.orientedBoundingBox,this._horizonOcclusionPoint=e.horizonOcclusionPoint,this._credits=e.credits;let t=this._quantizedVertices.length/3,n=this._uValues=this._quantizedVertices.subarray(0,t),i=this._vValues=this._quantizedVertices.subarray(t,2*t);this._heightValues=this._quantizedVertices.subarray(2*t,3*t);function o(s,a){return i[s]-i[a]}function r(s,a){return n[s]-n[a]}this._westIndices=vU(e.westIndices,o,t),this._southIndices=vU(e.southIndices,r,t),this._eastIndices=vU(e.eastIndices,o,t),this._northIndices=vU(e.northIndices,r,t),this._westSkirtHeight=e.westSkirtHeight,this._southSkirtHeight=e.southSkirtHeight,this._eastSkirtHeight=e.eastSkirtHeight,this._northSkirtHeight=e.northSkirtHeight,this._childTileMask=g(e.childTileMask,15),this._createdByUpsampling=g(e.createdByUpsampling,!1),this._waterMask=e.waterMask,this._mesh=void 0}Object.defineProperties(By.prototype,{credits:{get:function(){return this._credits}},waterMask:{get:function(){return this._waterMask}},childTileMask:{get:function(){return this._childTileMask}},canUpsample:{get:function(){return d(this._mesh)}}});var PU=[];function vU(e,t,n){PU.length=e.length;let i=!1;for(let o=0,r=e.length;o<r;++o)PU[o]=e[o],i=i||o>0&&t(e[o-1],e[o])>0;return i?(PU.sort(t),Ue.createTypedArray(n,PU)):e}var Qfe="createVerticesFromQuantizedTerrainMesh",q$e=new yi(Qfe),$$e=new yi(Qfe,sh.maximumAsynchronousTasks);By.prototype.createMesh=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.tilingScheme,n=e.x,i=e.y,o=e.level,r=g(e.exaggeration,1),s=g(e.exaggerationRelativeHeight,0),a=g(e.throttle,!0),c=t.ellipsoid,l=t.tileXYToRectangle(n,i,o),m=(a?$$e:q$e).scheduleTask({minimumHeight:this._minimumHeight,maximumHeight:this._maximumHeight,quantizedVertices:this._quantizedVertices,octEncodedNormals:this._encodedNormals,includeWebMercatorT:!0,indices:this._indices,westIndices:this._westIndices,southIndices:this._southIndices,eastIndices:this._eastIndices,northIndices:this._northIndices,westSkirtHeight:this._westSkirtHeight,southSkirtHeight:this._southSkirtHeight,eastSkirtHeight:this._eastSkirtHeight,northSkirtHeight:this._northSkirtHeight,rectangle:l,relativeToCenter:this._boundingSphere.center,ellipsoid:c,exaggeration:r,exaggerationRelativeHeight:s});if(!d(m))return;let p=this;return Promise.resolve(m).then(function(y){let f=p._quantizedVertices.length/3,x=f+p._westIndices.length+p._southIndices.length+p._eastIndices.length+p._northIndices.length,_=Ue.createTypedArray(x,y.indices),C=new Float32Array(y.vertices),V=y.center,L=y.minimumHeight,Z=y.maximumHeight,G=p._boundingSphere,X=p._orientedBoundingBox,P=g(h.clone(y.occludeePointInScaledSpace),p._horizonOcclusionPoint),v=y.vertexStride,F=sc.clone(y.encoding);return p._mesh=new Mu(V,C,_,y.indexCountWithoutSkirts,f,L,Z,G,P,v,X,F,y.westIndicesSouthToNorth,y.southIndicesEastToWest,y.eastIndicesNorthToSouth,y.northIndicesWestToEast),p._quantizedVertices=void 0,p._encodedNormals=void 0,p._indices=void 0,p._uValues=void 0,p._vValues=void 0,p._heightValues=void 0,p._westIndices=void 0,p._southIndices=void 0,p._eastIndices=void 0,p._northIndices=void 0,p._mesh})};var eet=new yi("upsampleQuantizedTerrainMesh",sh.maximumAsynchronousTasks);By.prototype.upsample=function(e,t,n,i,o,r,s){let a=this._mesh;if(!d(this._mesh))return;let c=t*2!==o,l=n*2===r,u=e.ellipsoid,m=e.tileXYToRectangle(o,r,s),p=eet.scheduleTask({vertices:a.vertices,vertexCountWithoutSkirts:a.vertexCountWithoutSkirts,indices:a.indices,indexCountWithoutSkirts:a.indexCountWithoutSkirts,encoding:a.encoding,minimumHeight:this._minimumHeight,maximumHeight:this._maximumHeight,isEastChild:c,isNorthChild:l,childRectangle:m,ellipsoid:u});if(!d(p))return;let y=Math.min(this._westSkirtHeight,this._eastSkirtHeight);y=Math.min(y,this._southSkirtHeight),y=Math.min(y,this._northSkirtHeight);let f=c?y*.5:this._westSkirtHeight,x=l?y*.5:this._southSkirtHeight,_=c?this._eastSkirtHeight:y*.5,C=l?this._northSkirtHeight:y*.5,V=this._credits;return Promise.resolve(p).then(function(L){let Z=new Uint16Array(L.vertices),G=Ue.createTypedArray(Z.length/3,L.indices),X;return d(L.encodedNormals)&&(X=new Uint8Array(L.encodedNormals)),new By({quantizedVertices:Z,indices:G,encodedNormals:X,minimumHeight:L.minimumHeight,maximumHeight:L.maximumHeight,boundingSphere:ce.clone(L.boundingSphere),orientedBoundingBox:Wn.clone(L.orientedBoundingBox),horizonOcclusionPoint:h.clone(L.horizonOcclusionPoint),westIndices:L.westIndices,southIndices:L.southIndices,eastIndices:L.eastIndices,northIndices:L.northIndices,westSkirtHeight:f,southSkirtHeight:x,eastSkirtHeight:_,northSkirtHeight:C,childTileMask:0,credits:V,createdByUpsampling:!0})})};var TJ=32767,jfe=new h;By.prototype.interpolateHeight=function(e,t,n){let i=W.clamp((t-e.west)/e.width,0,1);i*=TJ;let o=W.clamp((n-e.south)/e.height,0,1);return o*=TJ,d(this._mesh)?oet(this,i,o):ret(this,i,o)};function qfe(e,t,n,i,o,r,s,a){let c=Math.min(n,o,s),l=Math.max(n,o,s),u=Math.min(i,r,a),m=Math.max(i,r,a);return e>=c&&e<=l&&t>=u&&t<=m}var tet=new D,net=new D,iet=new D;function oet(e,t,n){let i=e._mesh,o=i.vertices,r=i.encoding,s=i.indices;for(let a=0,c=s.length;a<c;a+=3){let l=s[a],u=s[a+1],m=s[a+2],p=r.decodeTextureCoordinates(o,l,tet),y=r.decodeTextureCoordinates(o,u,net),f=r.decodeTextureCoordinates(o,m,iet);if(qfe(t,n,p.x,p.y,y.x,y.y,f.x,f.y)){let x=G0.computeBarycentricCoordinates(t,n,p.x,p.y,y.x,y.y,f.x,f.y,jfe);if(x.x>=-1e-15&&x.y>=-1e-15&&x.z>=-1e-15){let _=r.decodeHeight(o,l),C=r.decodeHeight(o,u),V=r.decodeHeight(o,m);return x.x*_+x.y*C+x.z*V}}}}function ret(e,t,n){let i=e._uValues,o=e._vValues,r=e._heightValues,s=e._indices;for(let a=0,c=s.length;a<c;a+=3){let l=s[a],u=s[a+1],m=s[a+2],p=i[l],y=i[u],f=i[m],x=o[l],_=o[u],C=o[m];if(qfe(t,n,p,x,y,_,f,C)){let V=G0.computeBarycentricCoordinates(t,n,p,x,y,_,f,C,jfe);if(V.x>=-1e-15&&V.y>=-1e-15&&V.z>=-1e-15){let L=V.x*r[l]+V.y*r[u]+V.z*r[m];return W.lerp(e._minimumHeight,e._maximumHeight,L/TJ)}}}}By.prototype.isChildAvailable=function(e,t,n,i){let o=2;return n!==e*2&&++o,i!==t*2&&(o-=2),(this._childTileMask&1<<o)!==0};By.prototype.wasCreatedByUpsampling=function(){return this._createdByUpsampling};var K_=By;function set(e){this.resource=e.resource,this.version=e.version,this.isHeightmap=e.isHeightmap,this.tileUrlTemplates=e.tileUrlTemplates,this.availability=e.availability,this.hasVertexNormals=e.hasVertexNormals,this.hasWaterMask=e.hasWaterMask,this.hasMetadata=e.hasMetadata,this.availabilityLevels=e.availabilityLevels,this.availabilityTilesLoaded=e.availabilityTilesLoaded,this.littleEndianExtensionSize=e.littleEndianExtensionSize,this.availabilityPromiseCache={}}function epe(e){this.requestVertexNormals=g(e.requestVertexNormals,!1),this.requestWaterMask=g(e.requestWaterMask,!1),this.requestMetadata=g(e.requestMetadata,!0),this.ellipsoid=e.ellipsoid,this.heightmapWidth=65,this.heightmapStructure=void 0,this.hasWaterMask=!1,this.hasMetadata=!1,this.hasVertexNormals=!1,this.scheme=void 0,this.lastResource=void 0,this.layerJsonResource=void 0,this.previousError=void 0,this.availability=void 0,this.tilingScheme=void 0,this.levelZeroMaximumGeometricError=void 0,this.heightmapStructure=void 0,this.layers=[],this.attribution="",this.overallAvailability=[],this.overallMaxZoom=0,this.tileCredits=[]}epe.prototype.build=function(e){e._heightmapWidth=this.heightmapWidth,e._scheme=this.scheme;let t=d(this.lastResource.credits)?this.lastResource.credits:[];e._tileCredits=t.concat(this.tileCredits),e._availability=this.availability,e._tilingScheme=this.tilingScheme,e._requestWaterMask=this.requestWaterMask,e._levelZeroMaximumGeometricError=this.levelZeroMaximumGeometricError,e._heightmapStructure=this.heightmapStructure,e._layers=this.layers,e._hasWaterMask=this.hasWaterMask,e._hasVertexNormals=this.hasVertexNormals,e._hasMetadata=this.hasMetadata};async function tpe(e,t,n){if(!t.format){let x="The tile format is not specified in the layer.json file.";throw e.previousError=Vo.reportError(e.previousError,n,d(n)?n._errorEvent:void 0,x),new me(x)}if(!t.tiles||t.tiles.length===0){let x="The layer.json file does not specify any tile URL templates.";throw e.previousError=Vo.reportError(e.previousError,n,d(n)?n._errorEvent:void 0,x),new me(x)}let i=!1,o=!1,r=!1,s=!0,a=!1;if(t.format==="heightmap-1.0")a=!0,d(e.heightmapStructure)||(e.heightmapStructure={heightScale:1/5,heightOffset:-1e3,elementsPerHeight:1,stride:1,elementMultiplier:256,isBigEndian:!1,lowestEncodedHeight:0,highestEncodedHeight:256*256-1}),o=!0,e.requestWaterMask=!0;else if(t.format.indexOf("quantized-mesh-1.")!==0){let x=`The tile format "${t.format}" is invalid or not supported.`;throw e.previousError=Vo.reportError(e.previousError,n,d(n)?n._errorEvent:void 0,x),new me(x)}let c=t.tiles,l=t.maxzoom;if(e.overallMaxZoom=Math.max(e.overallMaxZoom,l),!t.projection||t.projection==="EPSG:4326")e.tilingScheme=new Di({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:1,ellipsoid:e.ellipsoid});else if(t.projection==="EPSG:3857")e.tilingScheme=new kr({numberOfLevelZeroTilesX:1,numberOfLevelZeroTilesY:1,ellipsoid:e.ellipsoid});else{let x=`The projection "${t.projection}" is invalid or not supported.`;throw e.previousError=Vo.reportError(e.previousError,n,d(n)?n._errorEvent:void 0,x),new me(x)}if(e.levelZeroMaximumGeometricError=Ur.getEstimatedLevelZeroGeometricErrorForAHeightmap(e.tilingScheme.ellipsoid,e.heightmapWidth,e.tilingScheme.getNumberOfXTilesAtLevel(0)),!t.scheme||t.scheme==="tms"||t.scheme==="slippyMap")e.scheme=t.scheme;else{let x=`The scheme "${t.scheme}" is invalid or not supported.`;throw e.previousError=Vo.reportError(e.previousError,n,d(n)?n._errorEvent:void 0,x),new me(x)}let u;d(t.extensions)&&t.extensions.indexOf("octvertexnormals")!==-1?i=!0:d(t.extensions)&&t.extensions.indexOf("vertexnormals")!==-1&&(i=!0,s=!1),d(t.extensions)&&t.extensions.indexOf("watermask")!==-1&&(o=!0),d(t.extensions)&&t.extensions.indexOf("metadata")!==-1&&(r=!0);let m=t.metadataAvailability,p=t.available,y;if(d(p)&&!d(m)){y=new ah(e.tilingScheme,p.length);for(let x=0;x<p.length;++x){let _=p[x],C=e.tilingScheme.getNumberOfYTilesAtLevel(x);d(e.overallAvailability[x])||(e.overallAvailability[x]=[]);for(let V=0;V<_.length;++V){let L=_[V],Z=C-L.endY-1,G=C-L.startY-1;e.overallAvailability[x].push([L.startX,Z,L.endX,G]),y.addAvailableTileRange(x,L.startX,Z,L.endX,G)}}}else d(m)&&(u=new ah(e.tilingScheme,l),y=new ah(e.tilingScheme,l),e.overallAvailability[0]=[[0,0,1,0]],y.addAvailableTileRange(0,0,0,1,0));e.hasWaterMask=e.hasWaterMask||o,e.hasVertexNormals=e.hasVertexNormals||i,e.hasMetadata=e.hasMetadata||r,d(t.attribution)&&(e.attribution.length>0&&(e.attribution+=" "),e.attribution+=t.attribution),e.layers.push(new set({resource:e.lastResource,version:t.version,isHeightmap:a,tileUrlTemplates:c,availability:y,hasVertexNormals:i,hasWaterMask:o,hasMetadata:r,availabilityLevels:m,availabilityTilesLoaded:u,littleEndianExtensionSize:s}));let f=t.parentUrl;return d(f)?d(y)?(e.lastResource=e.lastResource.getDerivedResource({url:f}),e.lastResource.appendForwardSlash(),e.layerJsonResource=e.lastResource.getDerivedResource({url:"layer.json"}),await VJ(e),!0):(console.log("A layer.json can't have a parentUrl if it does't have an available array."),!0):!0}function aet(e,t,n){let i=`An error occurred while accessing ${e.layerJsonResource.url}.`;if(d(t)&&(i+=`
  7422. ${t.message}`),e.previousError=Vo.reportError(e.previousError,n,d(n)?n._errorEvent:void 0,i),e.previousError.retry)return VJ(e,n);throw new me(i)}async function cet(e,t,n){await tpe(e,t,n);let i=e.overallAvailability.length;if(i>0){let o=e.availability=new ah(e.tilingScheme,e.overallMaxZoom);for(let r=0;r<i;++r){let s=e.overallAvailability[r];for(let a=0;a<s.length;++a){let c=s[a];o.addAvailableTileRange(r,c[0],c[1],c[2],c[3])}}}if(e.attribution.length>0){let o=new St(e.attribution);e.tileCredits.push(o)}return!0}async function VJ(e,t){try{let n=await e.layerJsonResource.fetchJson();return cet(e,n,t)}catch(n){return d(n)&&n.statusCode===404?(await tpe(e,{tilejson:"2.1.0",format:"heightmap-1.0",version:"1.0.0",scheme:"tms",tiles:["{z}/{x}/{y}.terrain?v={version}"]},t),!0):aet(e,n,t)}}function ch(e){e=g(e,g.EMPTY_OBJECT),this._heightmapWidth=void 0,this._heightmapStructure=void 0,this._hasWaterMask=!1,this._hasVertexNormals=!1,this._hasMetadata=!1,this._scheme=void 0,this._ellipsoid=e.ellipsoid,this._requestVertexNormals=g(e.requestVertexNormals,!1),this._requestWaterMask=g(e.requestWaterMask,!1),this._requestMetadata=g(e.requestMetadata,!0),this._errorEvent=new ye;let t=e.credit;typeof t=="string"&&(t=new St(t)),this._credit=t,this._availability=void 0,this._tilingScheme=void 0,this._levelZeroMaximumGeometricError=void 0,this._layers=void 0,this._tileCredits=void 0}var SJ={OCT_VERTEX_NORMALS:1,WATER_MASK:2,METADATA:4};function $fe(e){return!d(e)||e.length===0?{Accept:"application/vnd.quantized-mesh,application/octet-stream;q=0.9,*/*;q=0.01"}:{Accept:`application/vnd.quantized-mesh;extensions=${e.join("-")},application/octet-stream;q=0.9,*/*;q=0.01`}}function det(e,t,n,i,o){let r=new Uint16Array(t,0,e._heightmapWidth*e._heightmapWidth);return new Sa({buffer:r,childTileMask:new Uint8Array(t,r.byteLength,1)[0],waterMask:new Uint8Array(t,r.byteLength+1,t.byteLength-r.byteLength-1),width:e._heightmapWidth,height:e._heightmapWidth,structure:e._heightmapStructure,credits:e._tileCredits})}function uet(e,t,n,i,o,r){let s=r.littleEndianExtensionSize,a=0,c=3,l=c+1,u=Float64Array.BYTES_PER_ELEMENT*c,m=Float64Array.BYTES_PER_ELEMENT*l,p=3,y=Uint16Array.BYTES_PER_ELEMENT*p,f=3,x=Uint16Array.BYTES_PER_ELEMENT,_=x*f,C=new DataView(t),V=new h(C.getFloat64(a,!0),C.getFloat64(a+8,!0),C.getFloat64(a+16,!0));a+=u;let L=C.getFloat32(a,!0);a+=Float32Array.BYTES_PER_ELEMENT;let Z=C.getFloat32(a,!0);a+=Float32Array.BYTES_PER_ELEMENT;let G=new ce(new h(C.getFloat64(a,!0),C.getFloat64(a+8,!0),C.getFloat64(a+16,!0)),C.getFloat64(a+u,!0));a+=m;let X=new h(C.getFloat64(a,!0),C.getFloat64(a+8,!0),C.getFloat64(a+16,!0));a+=u;let P=C.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let v=new Uint16Array(t,a,P*3);a+=P*y,P>64*1024&&(x=Uint32Array.BYTES_PER_ELEMENT,_=x*f);let F=v.subarray(0,P),M=v.subarray(P,2*P),b=v.subarray(P*2,3*P);Kn.zigZagDeltaDecode(F,M,b),a%x!==0&&(a+=x-a%x);let R=C.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let E=Ue.createTypedArrayFromArrayBuffer(P,t,a,R*f);a+=R*_;let I=0,w=E.length;for(let ae=0;ae<w;++ae){let xe=E[ae];E[ae]=I-xe,xe===0&&++I}let N=C.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let B=Ue.createTypedArrayFromArrayBuffer(P,t,a,N);a+=N*x;let k=C.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let O=Ue.createTypedArrayFromArrayBuffer(P,t,a,k);a+=k*x;let U=C.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let J=Ue.createTypedArrayFromArrayBuffer(P,t,a,U);a+=U*x;let z=C.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let ee=Ue.createTypedArrayFromArrayBuffer(P,t,a,z);a+=z*x;let K,j;for(;a<C.byteLength;){let ae=C.getUint8(a,!0);a+=Uint8Array.BYTES_PER_ELEMENT;let xe=C.getUint32(a,s);if(a+=Uint32Array.BYTES_PER_ELEMENT,ae===SJ.OCT_VERTEX_NORMALS&&e._requestVertexNormals)K=new Uint8Array(t,a,P*2);else if(ae===SJ.WATER_MASK&&e._requestWaterMask)j=new Uint8Array(t,a,xe);else if(ae===SJ.METADATA&&e._requestMetadata){let _e=C.getUint32(a,!0);if(_e>0){let Ie=Go(new Uint8Array(t),a+Uint32Array.BYTES_PER_ELEMENT,_e).available;if(d(Ie))for(let Me=0;Me<Ie.length;++Me){let ve=n+Me+1,ke=Ie[Me],ct=e._tilingScheme.getNumberOfYTilesAtLevel(ve);for(let yt=0;yt<ke.length;++yt){let ot=ke[yt],ln=ct-ot.endY-1,vn=ct-ot.startY-1;e.availability.addAvailableTileRange(ve,ot.startX,ln,ot.endX,vn),r.availability.addAvailableTileRange(ve,ot.startX,ln,ot.endX,vn)}}}r.availabilityTilesLoaded.addAvailableTileRange(n,i,o,i,o)}a+=xe}let q=e.getLevelMaximumGeometricError(n)*5,be=e._tilingScheme.tileXYToRectangle(i,o,n),Te=Wn.fromRectangle(be,L,Z,e._tilingScheme.ellipsoid);return new K_({center:V,minimumHeight:L,maximumHeight:Z,boundingSphere:G,orientedBoundingBox:Te,horizonOcclusionPoint:X,quantizedVertices:v,encodedNormals:K,indices:E,westIndices:B,southIndices:O,eastIndices:J,northIndices:ee,westSkirtHeight:q,southSkirtHeight:q,eastSkirtHeight:q,northSkirtHeight:q,childTileMask:e.availability.computeChildMaskForTile(n,i,o),waterMask:j,credits:e._tileCredits})}ch.prototype.requestTileGeometry=function(e,t,n,i){let o=this._layers,r,s=o.length,a=!1,c=Promise.resolve();if(s===1)r=o[0];else for(let l=0;l<s;++l){let u=o[l];if(!d(u.availability)||u.availability.isTileAvailable(n,e,t)){r=u;break}let m=LJ(this,e,t,n,u,l===0);m.result&&(a=!0,c=c.then(()=>m.promise))}return!d(r)&&a?c.then(()=>new Promise(l=>{setTimeout(()=>{let u=this.requestTileGeometry(e,t,n,i);l(u)},0)})):npe(this,e,t,n,r,i)};function npe(e,t,n,i,o,r){if(!d(o))return Promise.reject(new me("Terrain tile doesn't exist"));let s=o.tileUrlTemplates;if(s.length===0)return;let a;!e._scheme||e._scheme==="tms"?a=e._tilingScheme.getNumberOfYTilesAtLevel(i)-n-1:a=n;let c=[];e._requestVertexNormals&&o.hasVertexNormals&&c.push(o.littleEndianExtensionSize?"octvertexnormals":"vertexnormals"),e._requestWaterMask&&o.hasWaterMask&&c.push("watermask"),e._requestMetadata&&o.hasMetadata&&c.push("metadata");let l,u,m=s[(t+a+i)%s.length],p=o.resource;d(p._ionEndpoint)&&!d(p._ionEndpoint.externalType)?(c.length!==0&&(u={extensions:c.join("-")}),l=$fe(void 0)):l=$fe(c);let y=p.getDerivedResource({url:m,templateValues:{version:o.version,z:i,x:t,y:a},queryParameters:u,headers:l,request:r}).fetchArrayBuffer();if(d(y))return y.then(function(f){return d(f)?d(e._heightmapStructure)?det(e,f,i,t,n):uet(e,f,i,t,n,o):Promise.reject(new me("Mesh buffer doesn't exist."))})}Object.defineProperties(ch.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},tilingScheme:{get:function(){return this._tilingScheme}},hasWaterMask:{get:function(){return this._hasWaterMask&&this._requestWaterMask}},hasVertexNormals:{get:function(){return this._hasVertexNormals&&this._requestVertexNormals}},hasMetadata:{get:function(){return this._hasMetadata&&this._requestMetadata}},requestVertexNormals:{get:function(){return this._requestVertexNormals}},requestWaterMask:{get:function(){return this._requestWaterMask}},requestMetadata:{get:function(){return this._requestMetadata}},availability:{get:function(){return this._availability}}});ch.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};ch.fromIonAssetId=async function(e,t){let n=await Ql.fromAssetId(e);return ch.fromUrl(n,t)};ch.fromUrl=async function(e,t){t=g(t,g.EMPTY_OBJECT),e=await Promise.resolve(e);let n=Ee.createIfNeeded(e);n.appendForwardSlash();let i=new epe(t);i.lastResource=n,i.layerJsonResource=i.lastResource.getDerivedResource({url:"layer.json"}),await VJ(i);let o=new ch(t);return i.build(o),o};ch.prototype.getTileDataAvailable=function(e,t,n){if(!d(this._availability))return;if(n>this._availability._maximumLevel)return!1;if(this._availability.isTileAvailable(n,e,t))return!0;if(!this._hasMetadata)return!1;let i=this._layers,o=i.length;for(let r=0;r<o;++r)if(LJ(this,e,t,n,i[r],r===0).result)return;return!1};ch.prototype.loadTileDataAvailability=function(e,t,n){if(!d(this._availability)||n>this._availability._maximumLevel||this._availability.isTileAvailable(n,e,t)||!this._hasMetadata)return;let i=this._layers,o=i.length;for(let r=0;r<o;++r){let s=LJ(this,e,t,n,i[r],r===0);if(d(s.promise))return s.promise}};function CJ(e,t,n,i){if(i===0)return;let o=e.availabilityLevels,r=i%o===0?i-o:(i/o|0)*o,s=1<<i-r,a=t/s|0,c=n/s|0;return{level:r,x:a,y:c}}function LJ(e,t,n,i,o,r){if(!d(o.availabilityLevels))return{result:!1};let s,a=function(){delete o.availabilityPromiseCache[s]},c=o.availabilityTilesLoaded,l=o.availability,u=CJ(o,t,n,i);for(;d(u);){if(l.isTileAvailable(u.level,u.x,u.y)&&!c.isTileAvailable(u.level,u.x,u.y)){let m;if(!r&&(s=`${u.level}-${u.x}-${u.y}`,m=o.availabilityPromiseCache[s],!d(m))){let p=new Uo({throttle:!1,throttleByServer:!0,type:Hr.TERRAIN});m=npe(e,u.x,u.y,u.level,o,p),d(m)&&(o.availabilityPromiseCache[s]=m,m.then(a))}return{result:!0,promise:m}}u=CJ(o,u.x,u.y,u.level)}return{result:!1}}ch._getAvailabilityTile=CJ;var NP=ch;var wmi=T(S(),1);function E0(e){e=g(e,g.EMPTY_OBJECT);let t=e.radius,n={center:e.center,semiMajorAxis:t,semiMinorAxis:t,ellipsoid:e.ellipsoid,height:e.height,extrudedHeight:e.extrudedHeight,granularity:e.granularity,vertexFormat:e.vertexFormat,stRotation:e.stRotation,shadowVolume:e.shadowVolume};this._ellipseGeometry=new Uc(n),this._workerName="createCircleGeometry"}E0.packedLength=Uc.packedLength;E0.pack=function(e,t,n){return Uc.pack(e._ellipseGeometry,t,n)};var met=new Uc({center:new h,semiMajorAxis:1,semiMinorAxis:1}),ac={center:new h,radius:void 0,ellipsoid:re.clone(re.UNIT_SPHERE),height:void 0,extrudedHeight:void 0,granularity:void 0,vertexFormat:new We,stRotation:void 0,semiMajorAxis:void 0,semiMinorAxis:void 0,shadowVolume:void 0};E0.unpack=function(e,t,n){let i=Uc.unpack(e,t,met);return ac.center=h.clone(i._center,ac.center),ac.ellipsoid=re.clone(i._ellipsoid,ac.ellipsoid),ac.height=i._height,ac.extrudedHeight=i._extrudedHeight,ac.granularity=i._granularity,ac.vertexFormat=We.clone(i._vertexFormat,ac.vertexFormat),ac.stRotation=i._stRotation,ac.shadowVolume=i._shadowVolume,d(n)?(ac.semiMajorAxis=i._semiMajorAxis,ac.semiMinorAxis=i._semiMinorAxis,n._ellipseGeometry=new Uc(ac),n):(ac.radius=i._semiMajorAxis,new E0(ac))};E0.createGeometry=function(e){return Uc.createGeometry(e._ellipseGeometry)};E0.createShadowVolume=function(e,t,n){let i=e._ellipseGeometry._granularity,o=e._ellipseGeometry._ellipsoid,r=t(i,o),s=n(i,o);return new E0({center:e._ellipseGeometry._center,radius:e._ellipseGeometry._semiMajorAxis,ellipsoid:o,stRotation:e._ellipseGeometry._stRotation,granularity:i,extrudedHeight:r,height:s,vertexFormat:We.POSITION_ONLY,shadowVolume:!0})};Object.defineProperties(E0.prototype,{rectangle:{get:function(){return this._ellipseGeometry.rectangle}},textureCoordinateRotationPoints:{get:function(){return this._ellipseGeometry.textureCoordinateRotationPoints}}});var RJ=E0;var Dmi=T(S(),1);function B1(e){e=g(e,g.EMPTY_OBJECT);let t=e.radius,n={center:e.center,semiMajorAxis:t,semiMinorAxis:t,ellipsoid:e.ellipsoid,height:e.height,extrudedHeight:e.extrudedHeight,granularity:e.granularity,numberOfVerticalLines:e.numberOfVerticalLines};this._ellipseGeometry=new ud(n),this._workerName="createCircleOutlineGeometry"}B1.packedLength=ud.packedLength;B1.pack=function(e,t,n){return ud.pack(e._ellipseGeometry,t,n)};var het=new ud({center:new h,semiMajorAxis:1,semiMinorAxis:1}),Rd={center:new h,radius:void 0,ellipsoid:re.clone(re.UNIT_SPHERE),height:void 0,extrudedHeight:void 0,granularity:void 0,numberOfVerticalLines:void 0,semiMajorAxis:void 0,semiMinorAxis:void 0};B1.unpack=function(e,t,n){let i=ud.unpack(e,t,het);return Rd.center=h.clone(i._center,Rd.center),Rd.ellipsoid=re.clone(i._ellipsoid,Rd.ellipsoid),Rd.height=i._height,Rd.extrudedHeight=i._extrudedHeight,Rd.granularity=i._granularity,Rd.numberOfVerticalLines=i._numberOfVerticalLines,d(n)?(Rd.semiMajorAxis=i._semiMajorAxis,Rd.semiMinorAxis=i._semiMinorAxis,n._ellipseGeometry=new ud(Rd),n):(Rd.radius=i._semiMajorAxis,new B1(Rd))};B1.createGeometry=function(e){return ud.createGeometry(e._ellipseGeometry)};var ZJ=B1;var qmi=T(S(),1);function Y1(e){e=g(e,g.EMPTY_OBJECT),this._callback=e.callback,this._tilingScheme=e.tilingScheme,d(this._tilingScheme)||(this._tilingScheme=new Di({ellipsoid:g(e.ellipsoid,re.WGS84)})),this._width=e.width,this._height=e.height;let t=Math.max(this._width,this._height);this._levelZeroMaximumGeometricError=Ur.getEstimatedLevelZeroGeometricErrorForAHeightmap(this._tilingScheme.ellipsoid,t,this._tilingScheme.getNumberOfXTilesAtLevel(0)),this._errorEvent=new ye;let n=e.credit;typeof n=="string"&&(n=new St(n)),this._credit=n}Object.defineProperties(Y1.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},tilingScheme:{get:function(){return this._tilingScheme}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},width:{get:function(){return this._width}},height:{get:function(){return this._height}}});Y1.prototype.requestTileGeometry=function(e,t,n,i){let o=this._callback(e,t,n);if(!d(o))return;let r=this._width,s=this._height;return Promise.resolve(o).then(function(a){let c=a;return Array.isArray(c)&&(c=new Float64Array(c)),new Sa({buffer:c,width:r,height:s})})};Y1.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};Y1.prototype.getTileDataAvailable=function(e,t,n){};Y1.prototype.loadTileDataAvailability=function(e,t,n){};var GJ=Y1;var ehi=T(S(),1);function ipe(e){this.proxy=e}ipe.prototype.getURL=function(e){let t=this.proxy.indexOf("?")===-1?"?":"";return this.proxy+t+encodeURIComponent(e)};var EJ=ipe;var ohi=T(S(),1);function lh(e){this._comparator=e.comparator,this._maximumLength=e.maximumLength,this._array=d(e.maximumLength)?new Array(e.maximumLength):[],this._length=0}Object.defineProperties(lh.prototype,{length:{get:function(){return this._length}},maximumLength:{get:function(){return this._maximumLength},set:function(e){if(d(e)){for(;this._length>e;)this.removeMinimum();this._array.length=e}this._maximumLength=e}},internalArray:{get:function(){return this._array}},comparator:{get:function(){return this._comparator}}});lh.prototype.clone=function(){let e=this._maximumLength,t=this._comparator,n=this._array,i=this._length,o=new lh({comparator:t,maximumLength:e});o._length=i;for(let r=0;r<i;r++)o._array[r]=n[r];return o};lh.prototype.reset=function(){this._length=0;let e=this._maximumLength;if(d(e))for(let t=0;t<e;t++)this._array[t]=void 0;else this._array.length=0};lh.prototype.resort=function(){let e=this._length;for(let t=0;t<e;t++)ope(this,t)};lh.prototype.insert=function(e){let t,n=this._maximumLength;if(d(n)){if(n===0)return;if(this._length===n){let o=this._array[0];if(this._comparator(e,o)<=0)return e;t=this.removeMinimum()}}let i=this._length;return this._array[i]=e,this._length++,ope(this,i),t};lh.prototype.removeMinimum=function(){let e=this._length;if(e===0)return;this._length--;let t=this._array[0];return e>=2&&(this._array[0]=this._array[e-1],rpe(this,0)),this._array[e-1]=void 0,t};lh.prototype.removeMaximum=function(){let e=this._length;if(e===0)return;this._length--;let t;if(e<=2)t=this._array[e-1];else{let n=XJ(this,1,2)?1:2;t=this._array[n],this._array[n]=this._array[e-1],e>=4&&rpe(this,n)}return this._array[e-1]=void 0,t};lh.prototype.getMinimum=function(){if(this._length!==0)return this._array[0]};lh.prototype.getMaximum=function(){let e=this._length;if(e!==0)return e<=2?this._array[e-1]:this._array[XJ(this,1,2)?1:2]};function wU(e,t,n){let i=e._array,o=i[t];i[t]=i[n],i[n]=o}function UP(e,t,n){return e._comparator(e._array[t],e._array[n])<0}function XJ(e,t,n){return e._comparator(e._array[t],e._array[n])>0}function ope(e,t){if(t===0)return;let n=Math.floor(W.log2(t+1))%2===0,i=Math.floor((t-1)/2),o=UP(e,t,i);for(o!==n&&(wU(e,t,i),t=i);t>=3;){let r=Math.floor((t-3)/4);if(UP(e,t,r)!==o)break;wU(e,t,r),t=r}}function rpe(e,t){let n=e._length,i=Math.floor(W.log2(t+1))%2===0,o;for(;(o=2*t+1)<n;){let r=o,s=o+1;if(s<n){UP(e,s,r)===i&&(r=s);let a=2*o+1,c=Math.max(Math.min(n-a,4),0);for(let l=0;l<c;l++){let u=a+l;UP(e,u,r)===i&&(r=u)}}if(UP(e,r,t)===i&&(wU(e,r,t),r!==o&&r!==s)){let a=Math.floor((r-1)/2);XJ(e,r,a)===i&&wU(e,r,a)}t=r}}var H_=lh;var hhi=T(S(),1);function O1(e){e=g(e,g.EMPTY_OBJECT),this._tilingScheme=e.tilingScheme,d(this._tilingScheme)||(this._tilingScheme=new Di({ellipsoid:g(e.ellipsoid,re.WGS84)})),this._levelZeroMaximumGeometricError=Ur.getEstimatedLevelZeroGeometricErrorForAHeightmap(this._tilingScheme.ellipsoid,64,this._tilingScheme.getNumberOfXTilesAtLevel(0)),this._errorEvent=new ye}Object.defineProperties(O1.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){}},tilingScheme:{get:function(){return this._tilingScheme}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},availability:{get:function(){}}});O1.prototype.requestTileGeometry=function(e,t,n,i){return Promise.resolve(new Sa({buffer:new Uint8Array(16*16),width:16,height:16}))};O1.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};O1.prototype.getTileDataAvailable=function(e,t,n){};O1.prototype.loadTileDataAvailability=function(e,t,n){};var Cf=O1;var Khi=T(S(),1);var Ghi=T(S(),1);var Shi=T(S(),1);function Vf(e){e=g(e,g.EMPTY_OBJECT),this.left=e.left,this._left=void 0,this.right=e.right,this._right=void 0,this.top=e.top,this._top=void 0,this.bottom=e.bottom,this._bottom=void 0,this.near=g(e.near,1),this._near=this.near,this.far=g(e.far,5e8),this._far=this.far,this._cullingVolume=new jr,this._perspectiveMatrix=new A,this._infinitePerspective=new A}function IJ(e){let t=e.top,n=e.bottom,i=e.right,o=e.left,r=e.near,s=e.far;(t!==e._top||n!==e._bottom||o!==e._left||i!==e._right||r!==e._near||s!==e._far)&&(e._left=o,e._right=i,e._top=t,e._bottom=n,e._near=r,e._far=s,e._perspectiveMatrix=A.computePerspectiveOffCenter(o,i,n,t,r,s,e._perspectiveMatrix),e._infinitePerspective=A.computeInfinitePerspectiveOffCenter(o,i,n,t,r,e._infinitePerspective))}Object.defineProperties(Vf.prototype,{projectionMatrix:{get:function(){return IJ(this),this._perspectiveMatrix}},infiniteProjectionMatrix:{get:function(){return IJ(this),this._infinitePerspective}}});var fet=new h,pet=new h,bet=new h,yet=new h;Vf.prototype.computeCullingVolume=function(e,t,n){let i=this._cullingVolume.planes,o=this.top,r=this.bottom,s=this.right,a=this.left,c=this.near,l=this.far,u=h.cross(t,n,fet),m=pet;h.multiplyByScalar(t,c,m),h.add(e,m,m);let p=bet;h.multiplyByScalar(t,l,p),h.add(e,p,p);let y=yet;h.multiplyByScalar(u,a,y),h.add(m,y,y),h.subtract(y,e,y),h.normalize(y,y),h.cross(y,n,y),h.normalize(y,y);let f=i[0];return d(f)||(f=i[0]=new se),f.x=y.x,f.y=y.y,f.z=y.z,f.w=-h.dot(y,e),h.multiplyByScalar(u,s,y),h.add(m,y,y),h.subtract(y,e,y),h.cross(n,y,y),h.normalize(y,y),f=i[1],d(f)||(f=i[1]=new se),f.x=y.x,f.y=y.y,f.z=y.z,f.w=-h.dot(y,e),h.multiplyByScalar(n,r,y),h.add(m,y,y),h.subtract(y,e,y),h.cross(u,y,y),h.normalize(y,y),f=i[2],d(f)||(f=i[2]=new se),f.x=y.x,f.y=y.y,f.z=y.z,f.w=-h.dot(y,e),h.multiplyByScalar(n,o,y),h.add(m,y,y),h.subtract(y,e,y),h.cross(y,u,y),h.normalize(y,y),f=i[3],d(f)||(f=i[3]=new se),f.x=y.x,f.y=y.y,f.z=y.z,f.w=-h.dot(y,e),f=i[4],d(f)||(f=i[4]=new se),f.x=t.x,f.y=t.y,f.z=t.z,f.w=-h.dot(t,m),h.negate(t,y),f=i[5],d(f)||(f=i[5]=new se),f.x=y.x,f.y=y.y,f.z=y.z,f.w=-h.dot(y,p),this._cullingVolume};Vf.prototype.getPixelDimensions=function(e,t,n,i,o){IJ(this);let r=1/this.near,s=this.top*r,a=2*i*n*s/t;s=this.right*r;let c=2*i*n*s/e;return o.x=c,o.y=a,o};Vf.prototype.clone=function(e){return d(e)||(e=new Vf),e.right=this.right,e.left=this.left,e.top=this.top,e.bottom=this.bottom,e.near=this.near,e.far=this.far,e._left=void 0,e._right=void 0,e._top=void 0,e._bottom=void 0,e._near=void 0,e._far=void 0,e};Vf.prototype.equals=function(e){return d(e)&&e instanceof Vf&&this.right===e.right&&this.left===e.left&&this.top===e.top&&this.bottom===e.bottom&&this.near===e.near&&this.far===e.far};Vf.prototype.equalsEpsilon=function(e,t,n){return e===this||d(e)&&e instanceof Vf&&W.equalsEpsilon(this.right,e.right,t,n)&&W.equalsEpsilon(this.left,e.left,t,n)&&W.equalsEpsilon(this.top,e.top,t,n)&&W.equalsEpsilon(this.bottom,e.bottom,t,n)&&W.equalsEpsilon(this.near,e.near,t,n)&&W.equalsEpsilon(this.far,e.far,t,n)};var Yc=Vf;function vl(e){e=g(e,g.EMPTY_OBJECT),this._offCenterFrustum=new Yc,this.fov=e.fov,this._fov=void 0,this._fovy=void 0,this._sseDenominator=void 0,this.aspectRatio=e.aspectRatio,this._aspectRatio=void 0,this.near=g(e.near,1),this._near=this.near,this.far=g(e.far,5e8),this._far=this.far,this.xOffset=g(e.xOffset,0),this._xOffset=this.xOffset,this.yOffset=g(e.yOffset,0),this._yOffset=this.yOffset}vl.packedLength=6;vl.pack=function(e,t,n){return n=g(n,0),t[n++]=e.fov,t[n++]=e.aspectRatio,t[n++]=e.near,t[n++]=e.far,t[n++]=e.xOffset,t[n]=e.yOffset,t};vl.unpack=function(e,t,n){return t=g(t,0),d(n)||(n=new vl),n.fov=e[t++],n.aspectRatio=e[t++],n.near=e[t++],n.far=e[t++],n.xOffset=e[t++],n.yOffset=e[t],n};function dh(e){let t=e._offCenterFrustum;(e.fov!==e._fov||e.aspectRatio!==e._aspectRatio||e.near!==e._near||e.far!==e._far||e.xOffset!==e._xOffset||e.yOffset!==e._yOffset)&&(e._aspectRatio=e.aspectRatio,e._fov=e.fov,e._fovy=e.aspectRatio<=1?e.fov:Math.atan(Math.tan(e.fov*.5)/e.aspectRatio)*2,e._near=e.near,e._far=e.far,e._sseDenominator=2*Math.tan(.5*e._fovy),e._xOffset=e.xOffset,e._yOffset=e.yOffset,t.top=e.near*Math.tan(.5*e._fovy),t.bottom=-t.top,t.right=e.aspectRatio*t.top,t.left=-t.right,t.near=e.near,t.far=e.far,t.right+=e.xOffset,t.left+=e.xOffset,t.top+=e.yOffset,t.bottom+=e.yOffset)}Object.defineProperties(vl.prototype,{projectionMatrix:{get:function(){return dh(this),this._offCenterFrustum.projectionMatrix}},infiniteProjectionMatrix:{get:function(){return dh(this),this._offCenterFrustum.infiniteProjectionMatrix}},fovy:{get:function(){return dh(this),this._fovy}},sseDenominator:{get:function(){return dh(this),this._sseDenominator}},offCenterFrustum:{get:function(){return dh(this),this._offCenterFrustum}}});vl.prototype.computeCullingVolume=function(e,t,n){return dh(this),this._offCenterFrustum.computeCullingVolume(e,t,n)};vl.prototype.getPixelDimensions=function(e,t,n,i,o){return dh(this),this._offCenterFrustum.getPixelDimensions(e,t,n,i,o)};vl.prototype.clone=function(e){return d(e)||(e=new vl),e.aspectRatio=this.aspectRatio,e.fov=this.fov,e.near=this.near,e.far=this.far,e._aspectRatio=void 0,e._fov=void 0,e._near=void 0,e._far=void 0,this._offCenterFrustum.clone(e._offCenterFrustum),e};vl.prototype.equals=function(e){return!d(e)||!(e instanceof vl)?!1:(dh(this),dh(e),this.fov===e.fov&&this.aspectRatio===e.aspectRatio&&this._offCenterFrustum.equals(e._offCenterFrustum))};vl.prototype.equalsEpsilon=function(e,t,n){return!d(e)||!(e instanceof vl)?!1:(dh(this),dh(e),W.equalsEpsilon(this.fov,e.fov,t,n)&&W.equalsEpsilon(this.aspectRatio,e.aspectRatio,t,n)&&this._offCenterFrustum.equalsEpsilon(e._offCenterFrustum,t,n))};var Ri=vl;var FU=0,get=1;function z_(e){let t=e.frustum,n=e.orientation,i=e.origin,o=g(e.vertexFormat,We.DEFAULT),r=g(e._drawNearPlane,!0),s,a;t instanceof Ri?(s=FU,a=Ri.packedLength):t instanceof en&&(s=get,a=en.packedLength),this._frustumType=s,this._frustum=t.clone(),this._origin=h.clone(i),this._orientation=Ae.clone(n),this._drawNearPlane=r,this._vertexFormat=o,this._workerName="createFrustumGeometry",this.packedLength=2+a+h.packedLength+Ae.packedLength+We.packedLength}z_.pack=function(e,t,n){n=g(n,0);let i=e._frustumType,o=e._frustum;return t[n++]=i,i===FU?(Ri.pack(o,t,n),n+=Ri.packedLength):(en.pack(o,t,n),n+=en.packedLength),h.pack(e._origin,t,n),n+=h.packedLength,Ae.pack(e._orientation,t,n),n+=Ae.packedLength,We.pack(e._vertexFormat,t,n),n+=We.packedLength,t[n]=e._drawNearPlane?1:0,t};var xet=new Ri,_et=new en,Tet=new Ae,Cet=new h,Vet=new We;z_.unpack=function(e,t,n){t=g(t,0);let i=e[t++],o;i===FU?(o=Ri.unpack(e,t,xet),t+=Ri.packedLength):(o=en.unpack(e,t,_et),t+=en.packedLength);let r=h.unpack(e,t,Cet);t+=h.packedLength;let s=Ae.unpack(e,t,Tet);t+=Ae.packedLength;let a=We.unpack(e,t,Vet);t+=We.packedLength;let c=e[t]===1;if(!d(n))return new z_({frustum:o,origin:r,orientation:s,vertexFormat:a,_drawNearPlane:c});let l=i===n._frustumType?n._frustum:void 0;return n._frustum=o.clone(l),n._frustumType=i,n._origin=h.clone(r,n._origin),n._orientation=Ae.clone(s,n._orientation),n._vertexFormat=We.clone(a,n._vertexFormat),n._drawNearPlane=c,n};function K1(e,t,n,i,o,r,s,a){let c=e/3*2;for(let l=0;l<4;++l)d(t)&&(t[e]=r.x,t[e+1]=r.y,t[e+2]=r.z),d(n)&&(n[e]=s.x,n[e+1]=s.y,n[e+2]=s.z),d(i)&&(i[e]=a.x,i[e+1]=a.y,i[e+2]=a.z),e+=3;o[c]=0,o[c+1]=0,o[c+2]=1,o[c+3]=0,o[c+4]=1,o[c+5]=1,o[c+6]=0,o[c+7]=1}var Let=new $,Ret=new A,WJ=new A,spe=new h,ape=new h,cpe=new h,Zet=new h,Get=new h,Eet=new h,Yy=new Array(3),kP=new Array(4);kP[0]=new se(-1,-1,1,1);kP[1]=new se(1,-1,1,1);kP[2]=new se(1,1,1,1);kP[3]=new se(-1,1,1,1);var lpe=new Array(4);for(let e=0;e<4;++e)lpe[e]=new se;z_._computeNearFarPlanes=function(e,t,n,i,o,r,s,a){let c=$.fromQuaternion(t,Let),l=g(r,spe),u=g(s,ape),m=g(a,cpe);l=$.getColumn(c,0,l),u=$.getColumn(c,1,u),m=$.getColumn(c,2,m),h.normalize(l,l),h.normalize(u,u),h.normalize(m,m),h.negate(l,l);let p=A.computeView(e,m,u,l,Ret),y,f,x=i.projectionMatrix;if(n===FU){let _=A.multiply(x,p,WJ);f=A.inverse(_,WJ)}else y=A.inverseTransformation(p,WJ);d(f)?(Yy[0]=i.near,Yy[1]=i.far):(Yy[0]=0,Yy[1]=i.near,Yy[2]=i.far);for(let _=0;_<2;++_)for(let C=0;C<4;++C){let V=se.clone(kP[C],lpe[C]);if(d(f)){V=A.multiplyByVector(f,V,V);let L=1/V.w;h.multiplyByScalar(V,L,V),h.subtract(V,e,V),h.normalize(V,V);let Z=h.dot(m,V);h.multiplyByScalar(V,Yy[_]/Z,V),h.add(V,e,V)}else{let L=i.offCenterFrustum;d(L)&&(i=L);let Z=Yy[_],G=Yy[_+1];V.x=(V.x*(i.right-i.left)+i.left+i.right)*.5,V.y=(V.y*(i.top-i.bottom)+i.bottom+i.top)*.5,V.z=(V.z*(Z-G)-Z-G)*.5,V.w=1,A.multiplyByVector(y,V,V)}o[12*_+C*3]=V.x,o[12*_+C*3+1]=V.y,o[12*_+C*3+2]=V.z}};z_.createGeometry=function(e){let t=e._frustumType,n=e._frustum,i=e._origin,o=e._orientation,r=e._drawNearPlane,s=e._vertexFormat,a=r?6:5,c=new Float64Array(3*4*6);z_._computeNearFarPlanes(i,o,t,n,c);let l=3*4*2;c[l]=c[3*4],c[l+1]=c[3*4+1],c[l+2]=c[3*4+2],c[l+3]=c[0],c[l+4]=c[1],c[l+5]=c[2],c[l+6]=c[3*3],c[l+7]=c[3*3+1],c[l+8]=c[3*3+2],c[l+9]=c[3*7],c[l+10]=c[3*7+1],c[l+11]=c[3*7+2],l+=3*4,c[l]=c[3*5],c[l+1]=c[3*5+1],c[l+2]=c[3*5+2],c[l+3]=c[3],c[l+4]=c[4],c[l+5]=c[5],c[l+6]=c[0],c[l+7]=c[1],c[l+8]=c[2],c[l+9]=c[3*4],c[l+10]=c[3*4+1],c[l+11]=c[3*4+2],l+=3*4,c[l]=c[3],c[l+1]=c[4],c[l+2]=c[5],c[l+3]=c[3*5],c[l+4]=c[3*5+1],c[l+5]=c[3*5+2],c[l+6]=c[3*6],c[l+7]=c[3*6+1],c[l+8]=c[3*6+2],c[l+9]=c[3*2],c[l+10]=c[3*2+1],c[l+11]=c[3*2+2],l+=3*4,c[l]=c[3*2],c[l+1]=c[3*2+1],c[l+2]=c[3*2+2],c[l+3]=c[3*6],c[l+4]=c[3*6+1],c[l+5]=c[3*6+2],c[l+6]=c[3*7],c[l+7]=c[3*7+1],c[l+8]=c[3*7+2],c[l+9]=c[3*3],c[l+10]=c[3*3+1],c[l+11]=c[3*3+2],r||(c=c.subarray(3*4));let u=new hn({position:new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:c})});if(d(s.normal)||d(s.tangent)||d(s.bitangent)||d(s.st)){let p=d(s.normal)?new Float32Array(12*a):void 0,y=d(s.tangent)?new Float32Array(3*4*a):void 0,f=d(s.bitangent)?new Float32Array(3*4*a):void 0,x=d(s.st)?new Float32Array(2*4*a):void 0,_=spe,C=ape,V=cpe,L=h.negate(_,Zet),Z=h.negate(C,Get),G=h.negate(V,Eet);l=0,r&&(K1(l,p,y,f,x,G,_,C),l+=3*4),K1(l,p,y,f,x,V,L,C),l+=3*4,K1(l,p,y,f,x,L,G,C),l+=3*4,K1(l,p,y,f,x,Z,G,L),l+=3*4,K1(l,p,y,f,x,_,V,C),l+=3*4,K1(l,p,y,f,x,C,V,L),d(p)&&(u.normal=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:p})),d(y)&&(u.tangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:y})),d(f)&&(u.bitangent=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:f})),d(x)&&(u.st=new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:x}))}let m=new Uint16Array(6*a);for(let p=0;p<a;++p){let y=p*6,f=p*4;m[y]=f,m[y+1]=f+1,m[y+2]=f+2,m[y+3]=f,m[y+4]=f+2,m[y+5]=f+3}return new dt({attributes:u,indices:m,primitiveType:Fe.TRIANGLES,boundingSphere:ce.fromVertices(c)})};var J_=z_;var afi=T(S(),1);var PJ=0,Xet=1;function DP(e){let t=e.frustum,n=e.orientation,i=e.origin,o=g(e._drawNearPlane,!0),r,s;t instanceof Ri?(r=PJ,s=Ri.packedLength):t instanceof en&&(r=Xet,s=en.packedLength),this._frustumType=r,this._frustum=t.clone(),this._origin=h.clone(i),this._orientation=Ae.clone(n),this._drawNearPlane=o,this._workerName="createFrustumOutlineGeometry",this.packedLength=2+s+h.packedLength+Ae.packedLength}DP.pack=function(e,t,n){n=g(n,0);let i=e._frustumType,o=e._frustum;return t[n++]=i,i===PJ?(Ri.pack(o,t,n),n+=Ri.packedLength):(en.pack(o,t,n),n+=en.packedLength),h.pack(e._origin,t,n),n+=h.packedLength,Ae.pack(e._orientation,t,n),n+=Ae.packedLength,t[n]=e._drawNearPlane?1:0,t};var Iet=new Ri,Wet=new en,Pet=new Ae,vet=new h;DP.unpack=function(e,t,n){t=g(t,0);let i=e[t++],o;i===PJ?(o=Ri.unpack(e,t,Iet),t+=Ri.packedLength):(o=en.unpack(e,t,Wet),t+=en.packedLength);let r=h.unpack(e,t,vet);t+=h.packedLength;let s=Ae.unpack(e,t,Pet);t+=Ae.packedLength;let a=e[t]===1;if(!d(n))return new DP({frustum:o,origin:r,orientation:s,_drawNearPlane:a});let c=i===n._frustumType?n._frustum:void 0;return n._frustum=o.clone(c),n._frustumType=i,n._origin=h.clone(r,n._origin),n._orientation=Ae.clone(s,n._orientation),n._drawNearPlane=a,n};DP.createGeometry=function(e){let t=e._frustumType,n=e._frustum,i=e._origin,o=e._orientation,r=e._drawNearPlane,s=new Float64Array(3*4*2);J_._computeNearFarPlanes(i,o,t,n,s);let a=new hn({position:new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:s})}),c,l,u=r?2:1,m=new Uint16Array(8*(u+1)),p=r?0:1;for(;p<2;++p)c=r?p*8:0,l=p*4,m[c]=l,m[c+1]=l+1,m[c+2]=l+1,m[c+3]=l+2,m[c+4]=l+2,m[c+5]=l+3,m[c+6]=l+3,m[c+7]=l;for(p=0;p<2;++p)c=(u+p)*8,l=p*4,m[c]=l,m[c+1]=l+4,m[c+2]=l+1,m[c+3]=l+5,m[c+4]=l+2,m[c+5]=l+6,m[c+6]=l+3,m[c+7]=l+7;return new dt({attributes:a,indices:m,primitiveType:Fe.LINES,boundingSphere:ce.fromVertices(s)})};var BP=DP;var lfi=T(S(),1),wet={SEARCH:0,AUTOCOMPLETE:1},Oy=Object.freeze(wet);var ffi=T(S(),1);function AU(){fe.throwInstantiationError()}Object.defineProperties(AU.prototype,{credit:{get:fe.throwInstantiationError}});AU.getCreditsFromResult=function(e){if(d(e.attributions))return e.attributions.map(St.getIonCredit)};AU.prototype.geocode=fe.throwInstantiationError;var H1=AU;var yfi=T(S(),1);function dpe(){fe.throwInstantiationError()}dpe.createGeometry=function(e){fe.throwInstantiationError()};var vJ=dpe;var Mfi=T(S(),1),ket=T(wJ(),1);var Vfi=T(S(),1);var _fi=T(S(),1);function Fet(e,t){return(e&t)!==0}var cc=Fet;var Aet=[1,2,4,8],upe=15,Met=16,Net=64,Uet=128;function Lf(e,t,n,i,o,r){this._bits=e,this.cnodeVersion=t,this.imageryVersion=n,this.terrainVersion=i,this.imageryProvider=o,this.terrainProvider=r,this.ancestorHasTerrain=!1,this.terrainState=void 0}Lf.clone=function(e,t){return d(t)?(t._bits=e._bits,t.cnodeVersion=e.cnodeVersion,t.imageryVersion=e.imageryVersion,t.terrainVersion=e.terrainVersion,t.imageryProvider=e.imageryProvider,t.terrainProvider=e.terrainProvider):t=new Lf(e._bits,e.cnodeVersion,e.imageryVersion,e.terrainVersion,e.imageryProvider,e.terrainProvider),t.ancestorHasTerrain=e.ancestorHasTerrain,t.terrainState=e.terrainState,t};Lf.prototype.setParent=function(e){this.ancestorHasTerrain=e.ancestorHasTerrain||this.hasTerrain()};Lf.prototype.hasSubtree=function(){return cc(this._bits,Met)};Lf.prototype.hasImagery=function(){return cc(this._bits,Net)};Lf.prototype.hasTerrain=function(){return cc(this._bits,Uet)};Lf.prototype.hasChildren=function(){return cc(this._bits,upe)};Lf.prototype.hasChild=function(e){return cc(this._bits,Aet[e])};Lf.prototype.getChildBitmask=function(){return this._bits&upe};var YP=Lf;function Det(e){let t=e.length,n=new ArrayBuffer(t),i=new Uint8Array(n);for(let o=0;o<t;++o)i[o]=e.charCodeAt(o);return n}var Bet=Det(`E\xF4\xBD\vy\xE2jE"\x92,\xCDq\xF8IFgQ\0B%\xC6\xE8a,f)\b\xC64\xDCjb%y
  7423. wmi\xD6\xF0\x9Ck\x93\xA1\xBDNu\xE0A[\xDF@V\f\xD9\xBBr\x9B\x81|3S\xEEOl\xD4q\xB0{\xC0\x7FEVZ\xADwUe\v3\x92*\xACl5\xC50s\xF83>mF8J\xB4\xDD\xF0.\xDDu\xDA\x8CDt"\xFAa"\f3"So\xAF9D\v\x8C9\xD99L\xB9\xBF\x7F\xAB\\\x8CP_\x9F"ux\xE9\x07q\x91h;\xC1\xC4\x9B\x7F\xF0<VqH\x82'UfYNe\x98u\xA3aF}a?A\0\x9F\xD7\xB44M\xCE\x87F\xB0\xD5\xB8\x8A'{\x8B\xDC+\xBBMg0\xC8\xD1\xF6\\\x8FP\xFA[/F\x9Bn5/'C.\xEB
  7424. \f^\xA5s\x1Be4\xE5l.jC'c#U\xA9?q{gC}:\xAF\xCD\xE2TU\x9C\xFDK\xC6\xE2\x9F/(\xED\xCB\\\xC6-f\x07\x88\xA7;/*"N\xB0k.\xDD\r\x95}}G\xBAC\xB2\xB2+>M\xAA>}\xE6\xCEI\x89\xC6\xE6x\fa1-\xA4O\xA5~q \x88\xEC\r1\xE8N\v\0nPh}=\b\r\x95\xA6n\xA3h\x97$[k\xF3#\xF3\xB6s\xB3\r\v@\xC0\x9F\xD8Q]\xFA".j\xDFI\0\xB9\xA0wU\xC6\xEFj\xBF{GL\x7F\x83\xEE\xDC\xDCF\x85\xA9\xADS\x07+S4\x07\xFF\x94Y\xE48\xE81\x83N\xB9XFk\xCB-#\x86\x92p\x005\x88"\xCF1\xB2&/\xE7\xC3u-6,rt\xB0#G\xB7\xD3\xD1&\x857r\xE2\0\x8CD\xCF\xDA3-\xDE\`\x86i#i*|\xCDKQ\r\x95T9w.)\xEA\x1B\xA6P\xA2j\x8FoP\x99\\>T\xFB\xEFP[\v\x07E\x89m(w7\xDB\x8EJfJo\x99 \xE5p\xE2\xB9q~\fmI-z\xFEr\xC7\xF2Y0\x8F\xBB]s\xE5\xC9 \xEAx\xEC \x90\xF0\x8A\x7FB|G\`\xB0\xBD&\xB7q\xB6\xC7\x9F\xD13\x82=\xD3\xAB\xEEc\x99\xC8+S\xA0D\\q\xC6\xCCD2O<\xCA\xC0)=R\xD3aX\xA9}e\xB4\xDC\xCF\r\xF4=\xF1\b\xA9B\xDA# \xD8\xBF^PI\xF8M\xC0\xCBGLO\xF7{+\xD8\xC51\x92;\xB5o\xDCl\r\x92\x88\xD1\x9E\xDB?\xE2\xE9\xDA_\xD4\x84\xE2FaZ\xDEU\xCF\xA4\0\xBE\xFD\xCEg\xF1Ji\x97\xE6 H\xD8]\x7F~\xAEq N\xAE\xC0V\xA9\x91<\x82r\xE7v\xEC)I\xD6]-\x83\xE3\xDB6\xA9;f\x97\x87j\xD5\xB6=P^R\xB9K\xC7sWx\xC9\xF4.Y\x07\x95\x93o\xD0KW>''\xC7\`\xDB;\xED\x9ASD>?\x8D\x92mw\xA2
  7425. \xEB?R\xA8\xC6U^1I7\x85\xF4\xC5&-\xA9\xBF\x8B'T\xDA\xC3j \xE5*x\xB0\xD6\x90pr\xAA\x8Bh\xBD\x88\xF7_H\xB1~\xC0XL?f\xF9>\xE1e\xC0p\xA7\xCF8i\xAF\xF0VldI\x9C'\xADxtO\xC2\x87\xDEV9\0\xDAw\v\xCB-\x1B\x89\xFB5O\xF5\bQ\`\xC1
  7426. ZGM&30x\xDA\xC0\x9CFG\xE2[y\`In7gS
  7427. >\xE9\xECF9\xB2\xF14\r\xC6\x84Sun\xE1\fY\xD9\xDE)\x85{II\xA5wy\xBEIV.6\xE7\v:\xBBOb{\xD2M1\x95/\xBD8{\xA8O!\xE1\xECFpv\x95})"x\x88
  7428. \x90\xDD\x9D\\\xDA\xDEQ\xCF\xF0\xFCYRe|3\xDF\xF3H\xDA\xBB*u\xDB\`\xB2\xD4\xFC\xED\x1B\xEC\x7F5\xA8\xFF(1\x07-\xC8\xDC\x88F|\x8A["`);function Zd(e){this.imageryPresent=!0,this.protoImagery=void 0,this.terrainPresent=!0,this.negativeAltitudeExponentBias=32,this.negativeAltitudeThreshold=W.EPSILON12,this.providers={},this.key=void 0,this._resource=void 0,this._quadPacketVersion=1,this._tileInfo={},this._subtreePromises={}}Object.defineProperties(Zd.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},resource:{get:function(){return this._resource}}});Zd.fromUrl=async function(e){let t=e;typeof t!="string"&&!(t instanceof Ee)&&(t=e.url);let n=Ee.createIfNeeded(t);n.appendForwardSlash();let i=new Zd;i._resource=n;try{await Yet(i),await i.getQuadTreePacket("",i._quadPacketVersion)}catch(o){let r=`An error occurred while accessing ${hpe(i,"",1).url}: ${o}`;throw new me(r)}return i};Zd.tileXYToQuadKey=function(e,t,n){let i="";for(let o=n;o>=0;--o){let r=1<<o,s=0;cc(t,r)?cc(e,r)&&(s|=1):(s|=2,cc(e,r)||(s|=1)),i+=s}return i};Zd.quadKeyToTileXY=function(e){let t=0,n=0,i=e.length-1;for(let o=i;o>=0;--o){let r=1<<o,s=+e[i-o];cc(s,2)?cc(s,1)||(t|=r):(n|=r,cc(s,1)&&(t|=r))}return{x:t,y:n,level:i}};Zd.prototype.isValid=function(e){let t=this.getTileInformationFromQuadKey(e);if(d(t))return t!==null;let n=!0,i=e,o;for(;i.length>1;)if(o=i.substring(i.length-1),i=i.substring(0,i.length-1),t=this.getTileInformationFromQuadKey(i),d(t)){!t.hasSubtree()&&!t.hasChild(parseInt(o))&&(n=!1);break}else if(t===null){n=!1;break}return n};var mpe=new yi("decodeGoogleEarthEnterprisePacket");Zd.prototype.getQuadTreePacket=function(e,t,n){t=g(t,1),e=g(e,"");let o=hpe(this,e,t,n).fetchArrayBuffer();if(!d(o))return;let r=this._tileInfo,s=this.key;return o.then(function(a){return mpe.scheduleTask({buffer:a,quadKey:e,type:"Metadata",key:s},[a]).then(function(l){let u,m=-1;if(e!==""){m=e.length+1;let f=l[e];u=r[e],u._bits|=f._bits,delete l[e]}let p=Object.keys(l);p.sort(function(f,x){return f.length-x.length});let y=p.length;for(let f=0;f<y;++f){let x=p[f];if(l[x]!==null){let C=YP.clone(l[x]),V=x.length;if(V===m)C.setParent(u);else if(V>1){let L=r[x.substring(0,x.length-1)];C.setParent(L)}r[x]=C}else r[x]=null}})})};Zd.prototype.populateSubtree=function(e,t,n,i){let o=Zd.tileXYToQuadKey(e,t,n);return MJ(this,o,i)};function MJ(e,t,n){let i=e._tileInfo,o=t,r=i[o];if(d(r)&&(!r.hasSubtree()||r.hasChildren()))return r;for(;r===void 0&&o.length>1;)o=o.substring(0,o.length-1),r=i[o];let s,a=e._subtreePromises,c=a[o];if(d(c))return c.then(function(){return s=new Uo({throttle:n.throttle,throttleByServer:n.throttleByServer,type:n.type,priorityFunction:n.priorityFunction}),MJ(e,t,s)});if(!d(r)||!r.hasSubtree())return Promise.reject(new me(`Couldn't load metadata for tile ${t}`));if(c=e.getQuadTreePacket(o,r.cnodeVersion,n),!!d(c))return a[o]=c,c.then(function(){return s=new Uo({throttle:n.throttle,throttleByServer:n.throttleByServer,type:n.type,priorityFunction:n.priorityFunction}),MJ(e,t,s)}).finally(function(){delete a[o]})}Zd.prototype.getTileInformation=function(e,t,n){let i=Zd.tileXYToQuadKey(e,t,n);return this._tileInfo[i]};Zd.prototype.getTileInformationFromQuadKey=function(e){return this._tileInfo[e]};function hpe(e,t,n,i){return e._resource.getDerivedResource({url:`flatfile?q2-0${t}-q.${n.toString()}`,request:i})}var FJ,AJ;function Yet(e){let t=e._resource.getDerivedResource({url:"dbRoot.v5",queryParameters:{output:"proto"}});if(!d(AJ)){let n=$t("ThirdParty/google-earth-dbroot-parser.js"),i=window.cesiumGoogleEarthDbRootParser;AJ=Rg(n).then(function(){FJ=window.cesiumGoogleEarthDbRootParser(ket),d(i)?window.cesiumGoogleEarthDbRootParser=i:delete window.cesiumGoogleEarthDbRootParser})}return AJ.then(function(){return t.fetchArrayBuffer()}).then(function(n){let i=FJ.EncryptedDbRootProto.decode(new Uint8Array(n)),o=i.encryptionData,r=o.byteOffset,s=r+o.byteLength,a=e.key=o.buffer.slice(r,s);o=i.dbrootData,r=o.byteOffset,s=r+o.byteLength;let c=o.buffer.slice(r,s);return mpe.scheduleTask({buffer:c,type:"DbRoot",key:a},[c])}).then(function(n){let i=FJ.DbRootProto.decode(new Uint8Array(n.buffer));if(e.imageryPresent=g(i.imageryPresent,e.imageryPresent),e.protoImagery=i.protoImagery,e.terrainPresent=g(i.terrainPresent,e.terrainPresent),d(i.endSnippet)&&d(i.endSnippet.model)){let a=i.endSnippet.model;e.negativeAltitudeExponentBias=g(a.negativeAltitudeExponentBias,e.negativeAltitudeExponentBias),e.negativeAltitudeThreshold=g(a.compressedNegativeAltitudeThreshold,e.negativeAltitudeThreshold)}d(i.databaseVersion)&&(e._quadPacketVersion=g(i.databaseVersion.quadtreeVersion,e._quadPacketVersion));let o=e.providers,r=g(i.providerInfo,[]),s=r.length;for(let a=0;a<s;++a){let c=r[a],l=c.copyrightString;d(l)&&(o[c.providerId]=new St(l.value))}}).catch(function(){console.log(`Failed to retrieve ${t.url}. Using defaults.`),e.key=Bet})}var X0=Zd;var tpi=T(S(),1);function Q_(e){e=g(e,g.EMPTY_OBJECT),this._buffer=e.buffer,this._credits=e.credits,this._negativeAltitudeExponentBias=e.negativeAltitudeExponentBias,this._negativeElevationThreshold=e.negativeElevationThreshold;let t=g(e.childTileMask,15),n=t&3;n|=t&4?8:0,n|=t&8?4:0,this._childTileMask=n,this._createdByUpsampling=g(e.createdByUpsampling,!1),this._skirtHeight=void 0,this._bufferType=this._buffer.constructor,this._mesh=void 0,this._minimumHeight=void 0,this._maximumHeight=void 0}Object.defineProperties(Q_.prototype,{credits:{get:function(){return this._credits}},waterMask:{get:function(){}}});var bpe="createVerticesFromGoogleEarthEnterpriseBuffer",Oet=new yi(bpe),Ket=new yi(bpe,sh.maximumAsynchronousTasks),fpe=new de,NJ=new de;Q_.prototype.createMesh=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.tilingScheme,n=e.x,i=e.y,o=e.level,r=g(e.exaggeration,1),s=g(e.exaggerationRelativeHeight,0),a=g(e.throttle,!0),c=t.ellipsoid;t.tileXYToNativeRectangle(n,i,o,fpe),t.tileXYToRectangle(n,i,o,NJ);let l=c.cartographicToCartesian(de.center(NJ)),m=40075.16/(1<<o);this._skirtHeight=Math.min(m*8,1e3);let y=(a?Ket:Oet).scheduleTask({buffer:this._buffer,nativeRectangle:fpe,rectangle:NJ,relativeToCenter:l,ellipsoid:c,skirtHeight:this._skirtHeight,exaggeration:r,exaggerationRelativeHeight:s,includeWebMercatorT:!0,negativeAltitudeExponentBias:this._negativeAltitudeExponentBias,negativeElevationThreshold:this._negativeElevationThreshold});if(!d(y))return;let f=this;return y.then(function(x){return f._mesh=new Mu(l,new Float32Array(x.vertices),new Uint16Array(x.indices),x.indexCountWithoutSkirts,x.vertexCountWithoutSkirts,x.minimumHeight,x.maximumHeight,ce.clone(x.boundingSphere3D),h.clone(x.occludeePointInScaledSpace),x.numberOfAttributes,Wn.clone(x.orientedBoundingBox),sc.clone(x.encoding),x.westIndicesSouthToNorth,x.southIndicesEastToWest,x.eastIndicesNorthToSouth,x.northIndicesWestToEast),f._minimumHeight=x.minimumHeight,f._maximumHeight=x.maximumHeight,f._buffer=void 0,f._mesh})};Q_.prototype.interpolateHeight=function(e,t,n){let i=W.clamp((t-e.west)/e.width,0,1),o=W.clamp((n-e.south)/e.height,0,1);return d(this._mesh)?jet(this,i,o):ett(this,i,o,e)};var Het=new yi("upsampleQuantizedTerrainMesh",sh.maximumAsynchronousTasks);Q_.prototype.upsample=function(e,t,n,i,o,r,s){let a=this._mesh;if(!d(this._mesh))return;let c=t*2!==o,l=n*2===r,u=e.ellipsoid,m=e.tileXYToRectangle(o,r,s),p=Het.scheduleTask({vertices:a.vertices,indices:a.indices,indexCountWithoutSkirts:a.indexCountWithoutSkirts,vertexCountWithoutSkirts:a.vertexCountWithoutSkirts,encoding:a.encoding,minimumHeight:this._minimumHeight,maximumHeight:this._maximumHeight,isEastChild:c,isNorthChild:l,childRectangle:m,ellipsoid:u});if(!d(p))return;let y=this;return p.then(function(f){let x=new Uint16Array(f.vertices),_=Ue.createTypedArray(x.length/3,f.indices),C=y._skirtHeight;return new K_({quantizedVertices:x,indices:_,minimumHeight:f.minimumHeight,maximumHeight:f.maximumHeight,boundingSphere:ce.clone(f.boundingSphere),orientedBoundingBox:Wn.clone(f.orientedBoundingBox),horizonOcclusionPoint:h.clone(f.horizonOcclusionPoint),westIndices:f.westIndices,southIndices:f.southIndices,eastIndices:f.eastIndices,northIndices:f.northIndices,westSkirtHeight:C,southSkirtHeight:C,eastSkirtHeight:C,northSkirtHeight:C,childTileMask:0,createdByUpsampling:!0,credits:y._credits})})};Q_.prototype.isChildAvailable=function(e,t,n,i){let o=2;return n!==e*2&&++o,i!==t*2&&(o-=2),(this._childTileMask&1<<o)!==0};Q_.prototype.wasCreatedByUpsampling=function(){return this._createdByUpsampling};var zet=new D,Jet=new D,Qet=new D,ype=new h;function jet(e,t,n){let i=e._mesh,o=i.vertices,r=i.encoding,s=i.indices;for(let a=0,c=s.length;a<c;a+=3){let l=s[a],u=s[a+1],m=s[a+2],p=r.decodeTextureCoordinates(o,l,zet),y=r.decodeTextureCoordinates(o,u,Jet),f=r.decodeTextureCoordinates(o,m,Qet),x=G0.computeBarycentricCoordinates(t,n,p.x,p.y,y.x,y.y,f.x,f.y,ype);if(x.x>=-1e-15&&x.y>=-1e-15&&x.z>=-1e-15){let _=r.decodeHeight(o,l),C=r.decodeHeight(o,u),V=r.decodeHeight(o,m);return x.x*_+x.y*C+x.z*V}}}var qet=Uint16Array.BYTES_PER_ELEMENT,ppe=Uint32Array.BYTES_PER_ELEMENT,UJ=Int32Array.BYTES_PER_ELEMENT,$et=Float32Array.BYTES_PER_ELEMENT,kJ=Float64Array.BYTES_PER_ELEMENT;function ett(e,t,n,i){let o=e._buffer,r=0,s=0,a=0;n>.5?(t>.5?(r=2,s=.5):r=3,a=.5):t>.5&&(r=1,s=.5);let c=new DataView(o),l=0;for(let G=0;G<r;++G)l+=c.getUint32(l,!0),l+=ppe;l+=ppe,l+=2*kJ;let u=W.toRadians(c.getFloat64(l,!0)*180);l+=kJ;let m=W.toRadians(c.getFloat64(l,!0)*180);l+=kJ;let p=i.width/u/2,y=i.height/m/2,f=c.getInt32(l,!0);l+=UJ;let x=c.getInt32(l,!0)*3;l+=UJ,l+=UJ;let _=new Array(f),C=new Array(f),V=new Array(f),L;for(L=0;L<f;++L)_[L]=s+c.getUint8(l++)*p,C[L]=a+c.getUint8(l++)*y,V[L]=c.getFloat32(l,!0)*6371010,l+=$et;let Z=new Array(x);for(L=0;L<x;++L)Z[L]=c.getUint16(l,!0),l+=qet;for(L=0;L<x;L+=3){let G=Z[L],X=Z[L+1],P=Z[L+2],v=_[G],F=_[X],M=_[P],b=C[G],R=C[X],E=C[P],I=G0.computeBarycentricCoordinates(t,n,v,b,F,R,M,E,ype);if(I.x>=-1e-15&&I.y>=-1e-15&&I.z>=-1e-15)return I.x*V[G]+I.y*V[X]+I.z*V[P]}}var z1=Q_;var xpi=T(S(),1);var Nu={UNKNOWN:0,NONE:1,SELF:2,PARENT:3},MU=new te;function NU(){this._terrainCache={},this._lastTidy=te.now()}NU.prototype.add=function(e,t){this._terrainCache[e]={buffer:t,timestamp:te.now()}};NU.prototype.get=function(e){let n=this._terrainCache[e];if(d(n))return delete this._terrainCache[e],n.buffer};NU.prototype.tidy=function(){if(te.now(MU),te.secondsDifference(MU,this._lastTidy)>10){let e=this._terrainCache,t=Object.keys(e),n=t.length;for(let i=0;i<n;++i){let o=t[i],r=e[o];te.secondsDifference(MU,r.timestamp)>10&&delete e[o]}te.clone(MU,this._lastTidy)}};function Ky(e){e=g(e,g.EMPTY_OBJECT),this._tilingScheme=new Di({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,rectangle:new de(-W.PI,-W.PI,W.PI,W.PI),ellipsoid:e.ellipsoid});let t=e.credit;typeof t=="string"&&(t=new St(t)),this._credit=t,this._levelZeroMaximumGeometricError=40075.16,this._terrainCache=new NU,this._terrainPromises={},this._terrainRequests={},this._errorEvent=new ye}Object.defineProperties(Ky.prototype,{url:{get:function(){return this._metadata.url}},proxy:{get:function(){return this._metadata.proxy}},tilingScheme:{get:function(){return this._tilingScheme}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},availability:{get:function(){}}});Ky.fromMetadata=function(e,t){if(!e.terrainPresent)throw new me(`The server ${e.url} doesn't have terrain`);let n=new Ky(t);return n._metadata=e,n};var ttt=new yi("decodeGoogleEarthEnterprisePacket");function gpe(e,t,n){let i=t.getChildBitmask();if(t.terrainState===Nu.PARENT){i=0;for(let o=0;o<4;++o){let r=n.getTileInformationFromQuadKey(e+o.toString());d(r)&&r.hasTerrain()&&(i|=1<<o)}}return i}Ky.prototype.requestTileGeometry=function(e,t,n,i){let o=X0.tileXYToQuadKey(e,t,n),r=this._terrainCache,s=this._metadata,a=s.getTileInformationFromQuadKey(o);if(!d(a))return Promise.reject(new me("Terrain tile doesn't exist"));let c=a.terrainState;d(c)||(c=a.terrainState=Nu.UNKNOWN);let l=r.get(o);if(d(l)){let C=s.providers[a.terrainProvider];return Promise.resolve(new z1({buffer:l,childTileMask:gpe(o,a,s),credits:d(C)?[C]:void 0,negativeAltitudeExponentBias:s.negativeAltitudeExponentBias,negativeElevationThreshold:s.negativeAltitudeThreshold}))}if(r.tidy(),a.ancestorHasTerrain){if(c===Nu.NONE)return Promise.reject(new me("Terrain tile doesn't exist"))}else return Promise.resolve(new Sa({buffer:new Uint8Array(16*16),width:16,height:16}));let u,m=o,p=-1;switch(c){case Nu.SELF:p=a.terrainVersion;break;case Nu.PARENT:m=m.substring(0,m.length-1),u=s.getTileInformationFromQuadKey(m),p=u.terrainVersion;break;case Nu.UNKNOWN:a.hasTerrain()?p=a.terrainVersion:(m=m.substring(0,m.length-1),u=s.getTileInformationFromQuadKey(m),d(u)&&u.hasTerrain()&&(p=u.terrainVersion));break}if(p<0)return Promise.reject(new me("Terrain tile doesn't exist"));let y=this._terrainPromises,f=this._terrainRequests,x,_;if(d(y[m]))x=y[m],_=f[m];else{_=i;let C=ntt(this,m,p,_).fetchArrayBuffer();if(!d(C))return;x=C.then(function(V){return d(V)?ttt.scheduleTask({buffer:V,type:"Terrain",key:s.key},[V]).then(function(L){let Z=s.getTileInformationFromQuadKey(m);Z.terrainState=Nu.SELF,r.add(m,L[0]);let G=Z.terrainProvider,X=L.length-1;for(let P=0;P<X;++P){let v=m+P.toString(),F=s.getTileInformationFromQuadKey(v);d(F)&&(r.add(v,L[P+1]),F.terrainState=Nu.PARENT,F.terrainProvider===0&&(F.terrainProvider=G))}}):Promise.reject(new me("Failed to load terrain."))}),y[m]=x,f[m]=_,x=x.finally(function(){delete y[m],delete f[m]})}return x.then(function(){let C=r.get(o);if(d(C)){let V=s.providers[a.terrainProvider];return new z1({buffer:C,childTileMask:gpe(o,a,s),credits:d(V)?[V]:void 0,negativeAltitudeExponentBias:s.negativeAltitudeExponentBias,negativeElevationThreshold:s.negativeAltitudeThreshold})}return Promise.reject(new me("Failed to load terrain."))}).catch(function(C){return _.state===$n.CANCELLED?(i.state=_.state,Promise.reject(C)):(a.terrainState=Nu.NONE,Promise.reject(C))})};Ky.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};Ky.prototype.getTileDataAvailable=function(e,t,n){let i=this._metadata,o=X0.tileXYToQuadKey(e,t,n),r=i.getTileInformation(e,t,n);if(r===null)return!1;if(d(r)){if(!r.ancestorHasTerrain)return!0;let s=r.terrainState;if(s===Nu.NONE)return!1;if((!d(s)||s===Nu.UNKNOWN)&&(r.terrainState=Nu.UNKNOWN,!r.hasTerrain())){o=o.substring(0,o.length-1);let a=i.getTileInformationFromQuadKey(o);if(!d(a)||!a.hasTerrain())return!1}return!0}if(i.isValid(o)){let s=new Uo({throttle:!1,throttleByServer:!0,type:Hr.TERRAIN});i.populateSubtree(e,t,n,s)}return!1};Ky.prototype.loadTileDataAvailability=function(e,t,n){};function ntt(e,t,n,i){return n=d(n)&&n>0?n:1,e._metadata.resource.getDerivedResource({url:`flatfile?f1c-0${t}-t.${n.toString()}`,request:i})}var DJ=Ky;var Cpi=T(S(),1);var UU={};UU.defaultApiKey=void 0;UU.mapTilesApiEndpoint=new Ee({url:"https://tile.googleapis.com/v1/"});UU.getDefaultCredit=function(){return new St('<img src="https://assets.ion-development.cesium.com/google-credit.png" alt="Google">',!0)};var j_=UU;var Wpi=T(S(),1);var Lpi=T(S(),1);function itt(e,t,n,i){this.rightAscension=e,this.declination=t,this.rotation=n,this.rotationRate=i}var OP=itt;var Wpe={},ott=32.184,rtt=2451545,xpe=-.0529921,_pe=-.1059842,Tpe=13.0120009,Spe=13.3407154,Cpe=.9856003,Vpe=26.4057084,Lpe=13.064993,Rpe=.3287146,Zpe=1.7484877,Gpe=-.1589763,Epe=.0036096,Xpe=.1643573,Ipe=12.9590088,BJ=new te;Wpe.ComputeMoon=function(e,t){d(e)||(e=te.now()),BJ=te.addSeconds(e,ott,BJ);let n=te.totalDays(BJ)-rtt,i=n/Qn.DAYS_PER_JULIAN_CENTURY,o=(125.045+xpe*n)*W.RADIANS_PER_DEGREE,r=(250.089+_pe*n)*W.RADIANS_PER_DEGREE,s=(260.008+Tpe*n)*W.RADIANS_PER_DEGREE,a=(176.625+Spe*n)*W.RADIANS_PER_DEGREE,c=(357.529+Cpe*n)*W.RADIANS_PER_DEGREE,l=(311.589+Vpe*n)*W.RADIANS_PER_DEGREE,u=(134.963+Lpe*n)*W.RADIANS_PER_DEGREE,m=(276.617+Rpe*n)*W.RADIANS_PER_DEGREE,p=(34.226+Zpe*n)*W.RADIANS_PER_DEGREE,y=(15.134+Gpe*n)*W.RADIANS_PER_DEGREE,f=(119.743+Epe*n)*W.RADIANS_PER_DEGREE,x=(239.961+Xpe*n)*W.RADIANS_PER_DEGREE,_=(25.053+Ipe*n)*W.RADIANS_PER_DEGREE,C=Math.sin(o),V=Math.sin(r),L=Math.sin(s),Z=Math.sin(a),G=Math.sin(c),X=Math.sin(l),P=Math.sin(u),v=Math.sin(m),F=Math.sin(p),M=Math.sin(y),b=Math.sin(f),R=Math.sin(x),E=Math.sin(_),I=Math.cos(o),w=Math.cos(r),N=Math.cos(s),B=Math.cos(a),k=Math.cos(c),O=Math.cos(l),U=Math.cos(u),J=Math.cos(m),z=Math.cos(p),ee=Math.cos(y),K=Math.cos(f),j=Math.cos(x),q=Math.cos(_),be=(269.9949+.0031*i-3.8787*C-.1204*V+.07*L-.0172*Z+.0072*X-.0052*M+.0043*E)*W.RADIANS_PER_DEGREE,Te=(66.5392+.013*i+1.5419*I+.0239*w-.0278*N+.0068*B-.0029*O+9e-4*U+8e-4*ee-9e-4*q)*W.RADIANS_PER_DEGREE,ae=(38.3213+13.17635815*n-14e-13*n*n+3.561*C+.1208*V-.0642*L+.0158*Z+.0252*G-.0066*X-.0047*P-.0046*v+.0028*F+.0052*M+.004*b+.0019*R-.0044*E)*W.RADIANS_PER_DEGREE,xe=(13.17635815-14e-13*(2*n)+3.561*I*xpe+.1208*w*_pe-.0642*N*Tpe+.0158*B*Spe+.0252*k*Cpe-.0066*O*Vpe-.0047*U*Lpe-.0046*J*Rpe+.0028*z*Zpe+.0052*ee*Gpe+.004*K*Epe+.0019*j*Xpe-.0044*q*Ipe)/86400*W.RADIANS_PER_DEGREE;return d(t)||(t=new OP),t.rightAscension=be,t.declination=Te,t.rotation=ae,t.rotationRate=xe,t};var KP=Wpe;var kpi=T(S(),1);function Ppe(e){(!d(e)||typeof e!="function")&&(e=KP.ComputeMoon),this._computeFunction=e}var stt=new h,att=new h,ctt=new h;function ltt(e,t,n){let i=stt;i.x=Math.cos(e+W.PI_OVER_TWO),i.y=Math.sin(e+W.PI_OVER_TWO),i.z=0;let o=Math.cos(t),r=ctt;r.x=o*Math.cos(e),r.y=o*Math.sin(e),r.z=Math.sin(t);let s=h.cross(r,i,att);return d(n)||(n=new $),n[0]=i.x,n[1]=s.x,n[2]=r.x,n[3]=i.y,n[4]=s.y,n[5]=r.y,n[6]=i.z,n[7]=s.z,n[8]=r.z,n}var dtt=new $,utt=new Ae;Ppe.prototype.evaluate=function(e,t){d(e)||(e=te.now());let n=this._computeFunction(e),i=ltt(n.rightAscension,n.declination,t),o=W.zeroToTwoPi(n.rotation),r=Ae.fromAxisAngle(h.UNIT_Z,o,utt),s=$.fromQuaternion(Ae.conjugate(r,r),dtt);return $.multiply(s,i,i)};var HP=Ppe;var Ypi=T(S(),1);var zP={};zP.type=void 0;zP.getRequiredDataPoints=fe.throwInstantiationError;zP.interpolateOrderZero=fe.throwInstantiationError;zP.interpolate=fe.throwInstantiationError;var YJ=zP;var r0i=T(S(),1);var jpi=T(S(),1);function OJ(e){this._url=Ee.createIfNeeded(e),this._url.appendForwardSlash()}Object.defineProperties(OJ.prototype,{url:{get:function(){return this._url}},credit:{get:function(){}}});OJ.prototype.geocode=async function(e,t){return this._url.getDerivedResource({url:t===Oy.AUTOCOMPLETE?"autocomplete":"search",queryParameters:{text:e}}).fetchJson().then(function(i){return i.features.map(function(o){let r,s=o.bbox;if(d(s))r=de.fromDegrees(s[0],s[1],s[2],s[3]);else{let a=o.geometry.coordinates[0],c=o.geometry.coordinates[1];r=h.fromDegrees(a,c)}return{displayName:o.properties.label,destination:r,attributions:i.attributions}})})};var JP=OJ;function KJ(e){e=g(e,g.EMPTY_OBJECT);let t=g(e.accessToken,fm.defaultAccessToken),n=Ee.createIfNeeded(g(e.server,fm.defaultServer));n.appendForwardSlash();let i=fm.getDefaultTokenCredit(t);d(i)&&e.scene.frameState.creditDisplay.addStaticCredit(St.clone(i));let o=n.getDerivedResource({url:"v1/geocode"});d(t)&&o.appendQueryParameters({access_token:t}),this._accessToken=t,this._server=n,this._pelias=new JP(o)}Object.defineProperties(KJ.prototype,{credit:{get:function(){}}});KJ.prototype.geocode=async function(e,t){return this._pelias.geocode(e,t)};var QP=KJ;var a0i=T(S(),1),mtt={SHIFT:0,CTRL:1,ALT:2},na=Object.freeze(mtt);var d0i=T(S(),1);function kU(){fe.throwInstantiationError()}Object.defineProperties(kU.prototype,{ellipsoid:{get:fe.throwInstantiationError}});kU.prototype.project=fe.throwInstantiationError;kU.prototype.unproject=fe.throwInstantiationError;var HJ=kU;var p0i=T(S(),1);function J1(e){e=g(e,g.EMPTY_OBJECT);let t=e.weights,n=e.times;this._times=n,this._weights=t,this._count=t.length/n.length,this._lastTimeIndex=0}Object.defineProperties(J1.prototype,{times:{get:function(){return this._times}},weights:{get:function(){return this._weights}}});J1.prototype.findTimeInterval=ro.prototype.findTimeInterval;J1.prototype.wrapTime=ro.prototype.wrapTime;J1.prototype.clampTime=ro.prototype.clampTime;J1.prototype.evaluate=function(e,t){let n=this.weights,i=this.times,o=this._lastTimeIndex=this.findTimeInterval(e,this._lastTimeIndex),r=(e-i[o])/(i[o+1]-i[o]);d(t)||(t=new Array(this._count));for(let s=0;s<this._count;s++){let a=o*this._count+s;t[s]=n[a]*(1-r)+n[a+this._count]*r}return t};var zJ=J1;var Z0i=T(S(),1);var y0i=T(S(),1),htt={NONE:-1,PARTIAL:0,FULL:1},sr=Object.freeze(htt);function lc(e,t){this._occluderPosition=h.clone(e.center),this._occluderRadius=e.radius,this._horizonDistance=0,this._horizonPlaneNormal=void 0,this._horizonPlanePosition=void 0,this._cameraPosition=void 0,this.cameraPosition=t}var DU=new h;Object.defineProperties(lc.prototype,{position:{get:function(){return this._occluderPosition}},radius:{get:function(){return this._occluderRadius}},cameraPosition:{set:function(e){e=h.clone(e,this._cameraPosition);let t=h.subtract(this._occluderPosition,e,DU),n=h.magnitudeSquared(t),i=this._occluderRadius*this._occluderRadius,o,r,s;if(n>i){o=Math.sqrt(n-i),n=1/Math.sqrt(n),r=h.multiplyByScalar(t,n,DU);let a=o*o*n;s=h.add(e,h.multiplyByScalar(r,a,DU),DU)}else o=Number.MAX_VALUE;this._horizonDistance=o,this._horizonPlaneNormal=r,this._horizonPlanePosition=s,this._cameraPosition=e}}});lc.fromBoundingSphere=function(e,t,n){return d(n)?(h.clone(e.center,n._occluderPosition),n._occluderRadius=e.radius,n.cameraPosition=t,n):new lc(e,t)};var wpe=new h;lc.prototype.isPointVisible=function(e){if(this._horizonDistance!==Number.MAX_VALUE){let t=h.subtract(e,this._occluderPosition,wpe),n=this._occluderRadius;if(n=h.magnitudeSquared(t)-n*n,n>0)return n=Math.sqrt(n)+this._horizonDistance,t=h.subtract(e,this._cameraPosition,t),n*n>h.magnitudeSquared(t)}return!1};var ftt=new h;lc.prototype.isBoundingSphereVisible=function(e){let t=h.clone(e.center,ftt),n=e.radius;if(this._horizonDistance!==Number.MAX_VALUE){let i=h.subtract(t,this._occluderPosition,wpe),o=this._occluderRadius-n;if(o=h.magnitudeSquared(i)-o*o,n<this._occluderRadius)return o>0?(o=Math.sqrt(o)+this._horizonDistance,i=h.subtract(t,this._cameraPosition,i),o*o+n*n>h.magnitudeSquared(i)):!1;if(o>0){i=h.subtract(t,this._cameraPosition,i);let r=h.magnitudeSquared(i),s=this._occluderRadius*this._occluderRadius,a=n*n;return(this._horizonDistance*this._horizonDistance+s)*a>r*s?!0:(o=Math.sqrt(o)+this._horizonDistance,o*o+a>r)}return!0}return!1};var ptt=new h;lc.prototype.computeVisibility=function(e){let t=h.clone(e.center),n=e.radius;if(n>this._occluderRadius)return sr.FULL;if(this._horizonDistance!==Number.MAX_VALUE){let i=h.subtract(t,this._occluderPosition,ptt),o=this._occluderRadius-n,r=h.magnitudeSquared(i);if(o=r-o*o,o>0){o=Math.sqrt(o)+this._horizonDistance,i=h.subtract(t,this._cameraPosition,i);let s=h.magnitudeSquared(i);return o*o+n*n<s?sr.NONE:(o=this._occluderRadius+n,o=r-o*o,o>0?(o=Math.sqrt(o)+this._horizonDistance,s<o*o+n*n?sr.FULL:sr.PARTIAL):(i=h.subtract(t,this._horizonPlanePosition,i),h.dot(i,this._horizonPlaneNormal)>-n?sr.PARTIAL:sr.FULL))}}return sr.NONE};var BU=new h;lc.computeOccludeePoint=function(e,t,n){let i=h.clone(t),o=h.clone(e.center),r=e.radius,s=n.length,a=h.normalize(h.subtract(i,o,BU),BU),c=-h.dot(a,o),l=lc._anyRotationVector(o,a,c),u=lc._horizonToPlaneNormalDotProduct(e,a,c,l,n[0]);if(!u)return;let m;for(let y=1;y<s;++y){if(m=lc._horizonToPlaneNormalDotProduct(e,a,c,l,n[y]),!m)return;m<u&&(u=m)}if(u<.0017453283658983088)return;let p=r/u;return h.add(o,h.multiplyByScalar(a,p,BU),BU)};var btt=[];lc.computeOccludeePointFromRectangle=function(e,t){t=g(t,re.WGS84);let n=de.subsample(e,t,0,btt),i=ce.fromPoints(n),o=h.ZERO;if(!h.equals(o,i.center))return lc.computeOccludeePoint(new ce(o,t.minimumRadius),i.center,n)};var ytt=new h;lc._anyRotationVector=function(e,t,n){let i=h.abs(t,ytt),o=i.x>i.y?0:1;(o===0&&i.z>i.x||o===1&&i.z>i.y)&&(o=2);let r=new h,s;o===0?(i.x=e.x,i.y=e.y+1,i.z=e.z+1,s=h.UNIT_X):o===1?(i.x=e.x+1,i.y=e.y,i.z=e.z+1,s=h.UNIT_Y):(i.x=e.x+1,i.y=e.y+1,i.z=e.z,s=h.UNIT_Z);let a=(h.dot(t,i)+n)/-h.dot(t,s);return h.normalize(h.subtract(h.add(i,h.multiplyByScalar(s,a,r),i),e,i),i)};var gtt=new h;lc._rotationVector=function(e,t,n,i,o){let r=h.subtract(i,e,gtt);if(r=h.normalize(r,r),h.dot(t,r)<.9999999847691291){let s=h.cross(t,r,r);if(h.magnitude(s)>W.EPSILON13)return h.normalize(s,new h)}return o};var JJ=new h,xtt=new h,YU=new h,vpe=new h;lc._horizonToPlaneNormalDotProduct=function(e,t,n,i,o){let r=h.clone(o,JJ),s=h.clone(e.center,xtt),a=e.radius,c=h.subtract(s,r,YU),l=h.magnitudeSquared(c),u=a*a;if(l<u)return!1;let m=l-u,p=Math.sqrt(m),f=1/Math.sqrt(l),_=p*f*p;c=h.normalize(c,c);let C=h.add(r,h.multiplyByScalar(c,_,vpe),vpe),V=Math.sqrt(m-_*_),L=this._rotationVector(s,t,n,r,i),Z=h.fromElements(L.x*L.x*c.x+(L.x*L.y-L.z)*c.y+(L.x*L.z+L.y)*c.z,(L.x*L.y+L.z)*c.x+L.y*L.y*c.y+(L.y*L.z-L.x)*c.z,(L.x*L.z-L.y)*c.x+(L.y*L.z+L.x)*c.y+L.z*L.z*c.z,JJ);Z=h.normalize(Z,Z);let G=h.multiplyByScalar(Z,V,JJ);L=h.normalize(h.subtract(h.add(C,G,YU),s,YU),YU);let X=h.dot(t,L);L=h.normalize(h.subtract(h.subtract(C,G,L),s,L),L);let P=h.dot(t,L);return X<P?X:P};var jP=lc;var F0i=T(S(),1);function QJ(e,t,n){e=Ee.createIfNeeded(e),e.appendForwardSlash(),e.setQueryParameters({key:t}),this._url=e,this._params=g(n,{}),this._credit=new St('Geodata copyright <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors',!1)}Object.defineProperties(QJ.prototype,{url:{get:function(){return this._url}},params:{get:function(){return this._params}},credit:{get:function(){return this._credit}}});QJ.prototype.geocode=async function(e){return this._url.getDerivedResource({url:"json",queryParameters:xt(this._params,{q:e})}).fetchJson().then(function(n){return n.results.map(function(i){let o,r=i.bounds;if(d(r))o=de.fromDegrees(r.southwest.lng,r.southwest.lat,r.northeast.lng,r.northeast.lat);else{let s=i.geometry.lat,a=i.geometry.lng;o=h.fromDegrees(s,a)}return{displayName:i.formatted,destination:o}})})};var jJ=QJ;var N0i=T(S(),1);var _tt={packedLength:void 0,pack:fe.throwInstantiationError,unpack:fe.throwInstantiationError},qJ=_tt;var D0i=T(S(),1);var Ttt={packedInterpolationLength:void 0,convertPackedArrayForInterpolation:fe.throwInstantiationError,unpackInterpolationResult:fe.throwInstantiationError},$J=Ttt;var O0i=T(S(),1);function Fpe(){fe.throwInstantiationError()}Fpe.prototype.getURL=fe.throwInstantiationError;var eQ=Fpe;var obi=T(S(),1);var H0i=T(S(),1),Stt={LEFT_DOWN:0,LEFT_UP:1,LEFT_CLICK:2,LEFT_DOUBLE_CLICK:3,RIGHT_DOWN:5,RIGHT_UP:6,RIGHT_CLICK:7,MIDDLE_DOWN:10,MIDDLE_UP:11,MIDDLE_CLICK:12,MOUSE_MOVE:15,WHEEL:16,PINCH_START:17,PINCH_END:18,PINCH_MOVE:19},_n=Object.freeze(Stt);function Hy(e,t,n){let i=e._element;if(i===document)return n.x=t.clientX,n.y=t.clientY,n;let o=i.getBoundingClientRect();return n.x=t.clientX-o.left,n.y=t.clientY-o.top,n}function sQ(e,t){let n=e;return d(t)&&(n+=`+${t}`),n}function q_(e){if(e.shiftKey)return na.SHIFT;if(e.ctrlKey)return na.CTRL;if(e.altKey)return na.ALT}var ms={LEFT:0,MIDDLE:1,RIGHT:2};function Gd(e,t,n,i){function o(r){i(e,r)}Mt.isInternetExplorer()?n.addEventListener(t,o,!1):n.addEventListener(t,o,{capture:!1,passive:!1}),e._removalFunctions.push(function(){n.removeEventListener(t,o,!1)})}function Ctt(e){let t=e._element,n=d(t.disableRootEvents)?t:document;Mt.supportsPointerEvents()?(Gd(e,"pointerdown",t,Ett),Gd(e,"pointerup",t,Kpe),Gd(e,"pointermove",t,Xtt),Gd(e,"pointercancel",t,Kpe)):(Gd(e,"mousedown",t,Hpe),Gd(e,"mouseup",n,zpe),Gd(e,"mousemove",n,Jpe),Gd(e,"touchstart",t,Ztt),Gd(e,"touchend",n,kpe),Gd(e,"touchmove",n,Gtt),Gd(e,"touchcancel",n,kpe)),Gd(e,"dblclick",t,Ltt);let i;"onwheel"in t?i="wheel":document.onmousewheel!==void 0?i="mousewheel":i="DOMMouseScroll",Gd(e,i,t,Rtt)}function Vtt(e){let t=e._removalFunctions;for(let n=0;n<t.length;++n)t[n]()}var Ape={position:new D};function aQ(e){e._lastSeenTouchEvent=gi()}function cQ(e){return gi()-e._lastSeenTouchEvent>uh.mouseEmulationIgnoreMilliseconds}function rQ(e,t,n){let i=e.x-t.x,o=e.y-t.y;return Math.sqrt(i*i+o*o)<n}function Hpe(e,t){if(!cQ(e))return;let n=t.button;e._buttonDown[n]=!0;let i;if(n===ms.LEFT)i=_n.LEFT_DOWN;else if(n===ms.MIDDLE)i=_n.MIDDLE_DOWN;else if(n===ms.RIGHT)i=_n.RIGHT_DOWN;else return;let o=Hy(e,t,e._primaryPosition);D.clone(o,e._primaryStartPosition),D.clone(o,e._primaryPreviousPosition);let r=q_(t),s=e.getInputAction(i,r);d(s)&&(D.clone(o,Ape.position),s(Ape),t.preventDefault())}var Mpe={position:new D},Npe={position:new D};function tQ(e,t,n,i){let o=q_(i),r=e.getInputAction(t,o),s=e.getInputAction(n,o);if(d(r)||d(s)){let a=Hy(e,i,e._primaryPosition);if(d(r)&&(D.clone(a,Mpe.position),r(Mpe)),d(s)){let c=e._primaryStartPosition;rQ(c,a,e._clickPixelTolerance)&&(D.clone(a,Npe.position),s(Npe))}}}function zpe(e,t){if(!cQ(e))return;let n=t.button;n!==ms.LEFT&&n!==ms.MIDDLE&&n!==ms.RIGHT||(e._buttonDown[ms.LEFT]&&(tQ(e,_n.LEFT_UP,_n.LEFT_CLICK,t),e._buttonDown[ms.LEFT]=!1),e._buttonDown[ms.MIDDLE]&&(tQ(e,_n.MIDDLE_UP,_n.MIDDLE_CLICK,t),e._buttonDown[ms.MIDDLE]=!1),e._buttonDown[ms.RIGHT]&&(tQ(e,_n.RIGHT_UP,_n.RIGHT_CLICK,t),e._buttonDown[ms.RIGHT]=!1))}var nQ={startPosition:new D,endPosition:new D};function Jpe(e,t){if(!cQ(e))return;let n=q_(t),i=Hy(e,t,e._primaryPosition),o=e._primaryPreviousPosition,r=e.getInputAction(_n.MOUSE_MOVE,n);d(r)&&(D.clone(o,nQ.startPosition),D.clone(i,nQ.endPosition),r(nQ)),D.clone(i,o),(e._buttonDown[ms.LEFT]||e._buttonDown[ms.MIDDLE]||e._buttonDown[ms.RIGHT])&&t.preventDefault()}var Upe={position:new D};function Ltt(e,t){let n=t.button,i;if(n===ms.LEFT)i=_n.LEFT_DOUBLE_CLICK;else return;let o=q_(t),r=e.getInputAction(i,o);d(r)&&(Hy(e,t,Upe.position),r(Upe))}function Rtt(e,t){let n;if(d(t.deltaY)){let r=t.deltaMode;r===t.DOM_DELTA_PIXEL?n=-t.deltaY:r===t.DOM_DELTA_LINE?n=-t.deltaY*40:n=-t.deltaY*120}else t.detail>0?n=t.detail*-120:n=t.wheelDelta;if(!d(n))return;let i=q_(t),o=e.getInputAction(_n.WHEEL,i);d(o)&&(o(n),t.preventDefault())}function Ztt(e,t){aQ(e);let n=t.changedTouches,i,o=n.length,r,s,a=e._positions;for(i=0;i<o;++i)r=n[i],s=r.identifier,a.set(s,Hy(e,r,new D));OU(e,t);let c=e._previousPositions;for(i=0;i<o;++i)r=n[i],s=r.identifier,c.set(s,D.clone(a.get(s)))}function kpe(e,t){aQ(e);let n=t.changedTouches,i,o=n.length,r,s,a=e._positions;for(i=0;i<o;++i)r=n[i],s=r.identifier,a.remove(s);OU(e,t);let c=e._previousPositions;for(i=0;i<o;++i)r=n[i],s=r.identifier,c.remove(s)}var Dpe={position:new D},iQ={position1:new D,position2:new D},Bpe={position:new D},Ype={position:new D},Ope={position:new D};function OU(e,t){let n=q_(t),i=e._positions,o=i.length,r,s,a=e._isPinching;if(o!==1&&e._buttonDown[ms.LEFT]){if(e._buttonDown[ms.LEFT]=!1,d(e._touchHoldTimer)&&(clearTimeout(e._touchHoldTimer),e._touchHoldTimer=void 0),r=e.getInputAction(_n.LEFT_UP,n),d(r)&&(D.clone(e._primaryPosition,Bpe.position),r(Bpe)),o===0&&!e._isTouchHolding&&(s=e.getInputAction(_n.LEFT_CLICK,n),d(s))){let c=e._primaryStartPosition,l=e._previousPositions.values[0];rQ(c,l,e._clickPixelTolerance)&&(D.clone(e._primaryPosition,Ype.position),s(Ype))}e._isTouchHolding=!1}if(o===0&&a&&(e._isPinching=!1,r=e.getInputAction(_n.PINCH_END,n),d(r)&&r()),o===1&&!a){let c=i.values[0];D.clone(c,e._primaryPosition),D.clone(c,e._primaryStartPosition),D.clone(c,e._primaryPreviousPosition),e._buttonDown[ms.LEFT]=!0,r=e.getInputAction(_n.LEFT_DOWN,n),d(r)&&(D.clone(c,Dpe.position),r(Dpe)),e._touchHoldTimer=setTimeout(function(){if(!e.isDestroyed()&&(e._touchHoldTimer=void 0,e._isTouchHolding=!0,s=e.getInputAction(_n.RIGHT_CLICK,n),d(s))){let l=e._primaryStartPosition,u=e._previousPositions.values[0];rQ(l,u,e._holdPixelTolerance)&&(D.clone(e._primaryPosition,Ope.position),s(Ope))}},uh.touchHoldDelayMilliseconds),t.preventDefault()}o===2&&!a&&(e._isPinching=!0,r=e.getInputAction(_n.PINCH_START,n),d(r)&&(D.clone(i.values[0],iQ.position1),D.clone(i.values[1],iQ.position2),r(iQ),t.preventDefault()))}function Gtt(e,t){aQ(e);let n=t.changedTouches,i,o=n.length,r,s,a=e._positions;for(i=0;i<o;++i){r=n[i],s=r.identifier;let l=a.get(s);d(l)&&Hy(e,r,l)}Qpe(e,t);let c=e._previousPositions;for(i=0;i<o;++i)r=n[i],s=r.identifier,D.clone(a.get(s),c.get(s))}var oQ={startPosition:new D,endPosition:new D},qP={distance:{startPosition:new D,endPosition:new D},angleAndHeight:{startPosition:new D,endPosition:new D}};function Qpe(e,t){let n=q_(t),i=e._positions,o=e._previousPositions,r=i.length,s;if(r===1&&e._buttonDown[ms.LEFT]){let a=i.values[0];D.clone(a,e._primaryPosition);let c=e._primaryPreviousPosition;s=e.getInputAction(_n.MOUSE_MOVE,n),d(s)&&(D.clone(c,oQ.startPosition),D.clone(a,oQ.endPosition),s(oQ)),D.clone(a,c),t.preventDefault()}else if(r===2&&e._isPinching&&(s=e.getInputAction(_n.PINCH_MOVE,n),d(s))){let a=i.values[0],c=i.values[1],l=o.values[0],u=o.values[1],m=c.x-a.x,p=c.y-a.y,y=Math.sqrt(m*m+p*p)*.25,f=u.x-l.x,x=u.y-l.y,_=Math.sqrt(f*f+x*x)*.25,C=(c.y+a.y)*.125,V=(u.y+l.y)*.125,L=Math.atan2(p,m),Z=Math.atan2(x,f);D.fromElements(0,_,qP.distance.startPosition),D.fromElements(0,y,qP.distance.endPosition),D.fromElements(Z,V,qP.angleAndHeight.startPosition),D.fromElements(L,C,qP.angleAndHeight.endPosition),s(qP)}}function Ett(e,t){if(t.target.setPointerCapture(t.pointerId),t.pointerType==="touch"){let n=e._positions,i=t.pointerId;n.set(i,Hy(e,t,new D)),OU(e,t),e._previousPositions.set(i,D.clone(n.get(i)))}else Hpe(e,t)}function Kpe(e,t){if(t.pointerType==="touch"){let n=e._positions,i=t.pointerId;n.remove(i),OU(e,t),e._previousPositions.remove(i)}else zpe(e,t)}function Xtt(e,t){if(t.pointerType==="touch"){let n=e._positions,i=t.pointerId,o=n.get(i);if(!d(o))return;Hy(e,t,o),Qpe(e,t);let r=e._previousPositions;D.clone(n.get(i),r.get(i))}else Jpe(e,t)}function uh(e){this._inputEvents={},this._buttonDown={LEFT:!1,MIDDLE:!1,RIGHT:!1},this._isPinching=!1,this._isTouchHolding=!1,this._lastSeenTouchEvent=-uh.mouseEmulationIgnoreMilliseconds,this._primaryStartPosition=new D,this._primaryPosition=new D,this._primaryPreviousPosition=new D,this._positions=new Tt,this._previousPositions=new Tt,this._removalFunctions=[],this._touchHoldTimer=void 0,this._clickPixelTolerance=5,this._holdPixelTolerance=25,this._element=g(e,document),Ctt(this)}uh.prototype.setInputAction=function(e,t,n){let i=sQ(t,n);this._inputEvents[i]=e};uh.prototype.getInputAction=function(e,t){let n=sQ(e,t);return this._inputEvents[n]};uh.prototype.removeInputAction=function(e,t){let n=sQ(e,t);delete this._inputEvents[n]};uh.prototype.isDestroyed=function(){return!1};uh.prototype.destroy=function(){return Vtt(this),ue(this)};uh.mouseEmulationIgnoreMilliseconds=800;uh.touchHoldDelayMilliseconds=1500;var Ed=uh;var Tbi=T(S(),1);function Itt(e,t,n,i,o,r,s){let a=Xi.numberOfPoints(e,t,o),c,l=n.red,u=n.green,m=n.blue,p=n.alpha,y=i.red,f=i.green,x=i.blue,_=i.alpha;if(Y.equals(n,i)){for(c=0;c<a;c++)r[s++]=Y.floatToByte(l),r[s++]=Y.floatToByte(u),r[s++]=Y.floatToByte(m),r[s++]=Y.floatToByte(p);return s}let C=(y-l)/a,V=(f-u)/a,L=(x-m)/a,Z=(_-p)/a,G=s;for(c=0;c<a;c++)r[G++]=Y.floatToByte(l+c*C),r[G++]=Y.floatToByte(u+c*V),r[G++]=Y.floatToByte(m+c*L),r[G++]=Y.floatToByte(p+c*Z);return G}function $P(e){e=g(e,g.EMPTY_OBJECT);let t=e.positions,n=e.colors,i=g(e.colorsPerVertex,!1);this._positions=t,this._colors=n,this._colorsPerVertex=i,this._arcType=g(e.arcType,Jt.GEODESIC),this._granularity=g(e.granularity,W.RADIANS_PER_DEGREE),this._ellipsoid=g(e.ellipsoid,re.WGS84),this._workerName="createSimplePolylineGeometry";let o=1+t.length*h.packedLength;o+=d(n)?1+n.length*Y.packedLength:1,this.packedLength=o+re.packedLength+3}$P.pack=function(e,t,n){n=g(n,0);let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=h.packedLength)h.pack(o[i],t,n);let s=e._colors;for(r=d(s)?s.length:0,t[n++]=r,i=0;i<r;++i,n+=Y.packedLength)Y.pack(s[i],t,n);return re.pack(e._ellipsoid,t,n),n+=re.packedLength,t[n++]=e._colorsPerVertex?1:0,t[n++]=e._arcType,t[n]=e._granularity,t};$P.unpack=function(e,t,n){t=g(t,0);let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=h.packedLength)r[i]=h.unpack(e,t);o=e[t++];let s=o>0?new Array(o):void 0;for(i=0;i<o;++i,t+=Y.packedLength)s[i]=Y.unpack(e,t);let a=re.unpack(e,t);t+=re.packedLength;let c=e[t++]===1,l=e[t++],u=e[t];return d(n)?(n._positions=r,n._colors=s,n._ellipsoid=a,n._colorsPerVertex=c,n._arcType=l,n._granularity=u,n):new $P({positions:r,colors:s,ellipsoid:a,colorsPerVertex:c,arcType:l,granularity:u})};var KU=new Array(2),HU=new Array(2),Wtt={positions:KU,height:HU,ellipsoid:void 0,minDistance:void 0,granularity:void 0};$P.createGeometry=function(e){let t=e._positions,n=e._colors,i=e._colorsPerVertex,o=e._arcType,r=e._granularity,s=e._ellipsoid,a=W.chordLength(r,s.maximumRadius),c=d(n)&&!i,l,u=t.length,m,p,y,f,x=0;if(o===Jt.GEODESIC||o===Jt.RHUMB){let Z,G,X;o===Jt.GEODESIC?(Z=W.chordLength(r,s.maximumRadius),G=Xi.numberOfPoints,X=Xi.generateArc):(Z=r,G=Xi.numberOfPointsRhumbLine,X=Xi.generateRhumbArc);let P=Xi.extractHeights(t,s),v=Wtt;if(o===Jt.GEODESIC?v.minDistance=a:v.granularity=r,v.ellipsoid=s,c){let F=0;for(l=0;l<u-1;l++)F+=G(t[l],t[l+1],Z)+1;m=new Float64Array(F*3),y=new Uint8Array(F*4),v.positions=KU,v.height=HU;let M=0;for(l=0;l<u-1;++l){KU[0]=t[l],KU[1]=t[l+1],HU[0]=P[l],HU[1]=P[l+1];let b=X(v);if(d(n)){let R=b.length/3;f=n[l];for(let E=0;E<R;++E)y[M++]=Y.floatToByte(f.red),y[M++]=Y.floatToByte(f.green),y[M++]=Y.floatToByte(f.blue),y[M++]=Y.floatToByte(f.alpha)}m.set(b,x),x+=b.length}}else if(v.positions=t,v.height=P,m=new Float64Array(X(v)),d(n)){for(y=new Uint8Array(m.length/3*4),l=0;l<u-1;++l){let M=t[l],b=t[l+1],R=n[l],E=n[l+1];x=Itt(M,b,R,E,a,y,x)}let F=n[u-1];y[x++]=Y.floatToByte(F.red),y[x++]=Y.floatToByte(F.green),y[x++]=Y.floatToByte(F.blue),y[x++]=Y.floatToByte(F.alpha)}}else{p=c?u*2-2:u,m=new Float64Array(p*3),y=d(n)?new Uint8Array(p*4):void 0;let Z=0,G=0;for(l=0;l<u;++l){let X=t[l];if(c&&l>0&&(h.pack(X,m,Z),Z+=3,f=n[l-1],y[G++]=Y.floatToByte(f.red),y[G++]=Y.floatToByte(f.green),y[G++]=Y.floatToByte(f.blue),y[G++]=Y.floatToByte(f.alpha)),c&&l===u-1)break;h.pack(X,m,Z),Z+=3,d(n)&&(f=n[l],y[G++]=Y.floatToByte(f.red),y[G++]=Y.floatToByte(f.green),y[G++]=Y.floatToByte(f.blue),y[G++]=Y.floatToByte(f.alpha))}}let _=new hn;_.position=new Ze({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:m}),d(n)&&(_.color=new Ze({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:4,values:y,normalize:!0})),p=m.length/3;let C=(p-1)*2,V=Ue.createTypedArray(p,C),L=0;for(l=0;l<p-1;++l)V[L++]=l,V[L++]=l+1;return new dt({attributes:_,indices:V,primitiveType:Fe.LINES,boundingSphere:ce.fromPoints(t)})};var lQ=$P;var Gbi=T(S(),1);function Q1(e){let t=g(e.radius,1),i={radii:new h(t,t,t),stackPartitions:e.stackPartitions,slicePartitions:e.slicePartitions,vertexFormat:e.vertexFormat};this._ellipsoidGeometry=new Is(i),this._workerName="createSphereGeometry"}Q1.packedLength=Is.packedLength;Q1.pack=function(e,t,n){return Is.pack(e._ellipsoidGeometry,t,n)};var Ptt=new Is,zy={radius:void 0,radii:new h,vertexFormat:new We,stackPartitions:void 0,slicePartitions:void 0};Q1.unpack=function(e,t,n){let i=Is.unpack(e,t,Ptt);return zy.vertexFormat=We.clone(i._vertexFormat,zy.vertexFormat),zy.stackPartitions=i._stackPartitions,zy.slicePartitions=i._slicePartitions,d(n)?(h.clone(i._radii,zy.radii),n._ellipsoidGeometry=new Is(zy),n):(zy.radius=i._radii.x,new Q1(zy))};Q1.createGeometry=function(e){return Is.createGeometry(e._ellipsoidGeometry)};var dQ=Q1;var Xbi=T(S(),1),vtt={WEST:0,NORTH:1,EAST:2,SOUTH:3,NORTHWEST:4,NORTHEAST:5,SOUTHWEST:6,SOUTHEAST:7},yn=vtt;var Pbi=T(S(),1);function Jy(e){}Object.defineProperties(Jy.prototype,{ellipsoid:{get:fe.throwInstantiationError},rectangle:{get:fe.throwInstantiationError},projection:{get:fe.throwInstantiationError}});Jy.prototype.getNumberOfXTilesAtLevel=fe.throwInstantiationError;Jy.prototype.getNumberOfYTilesAtLevel=fe.throwInstantiationError;Jy.prototype.rectangleToNativeRectangle=fe.throwInstantiationError;Jy.prototype.tileXYToNativeRectangle=fe.throwInstantiationError;Jy.prototype.tileXYToRectangle=fe.throwInstantiationError;Jy.prototype.positionToTileXY=fe.throwInstantiationError;var uQ=Jy;var Jbi=T(S(),1);function wtt(e,t){this.rectangle=e,this.maxLevel=t}function jpe(e){this.ellipsoid=g(e.ellipsoid,re.WGS84),this.tilingScheme=void 0,this.heightmapWidth=void 0,this.heightmapHeight=void 0,this.levelZeroMaximumGeometricError=void 0,this.rectangles=[]}jpe.prototype.build=function(e){e._tilingScheme=this.tilingScheme,e._heightmapWidth=this.heightmapWidth,e._heightmapHeight=this.heightmapHeight,e._levelZeroMaximumGeometricError=this.levelZeroMaximumGeometricError,e._rectangles=this.rectangles};function Ftt(e,t){let n=t.getElementsByTagName("SRS")[0].textContent;if(n==="EPSG:4326")e.tilingScheme=new Di({ellipsoid:e.ellipsoid});else throw new me(`SRS ${n} is not supported`);let i=t.getElementsByTagName("TileFormat")[0];e.heightmapWidth=parseInt(i.getAttribute("width"),10),e.heightmapHeight=parseInt(i.getAttribute("height"),10),e.levelZeroMaximumGeometricError=Ur.getEstimatedLevelZeroGeometricErrorForAHeightmap(e.ellipsoid,Math.min(e.heightmapWidth,e.heightmapHeight),e.tilingScheme.getNumberOfXTilesAtLevel(0));let o=t.getElementsByTagName("DataExtent");for(let r=0;r<o.length;++r){let s=o[r],a=W.toRadians(parseFloat(s.getAttribute("minx"))),c=W.toRadians(parseFloat(s.getAttribute("miny"))),l=W.toRadians(parseFloat(s.getAttribute("maxx"))),u=W.toRadians(parseFloat(s.getAttribute("maxy"))),m=parseInt(s.getAttribute("maxlevel"),10);e.rectangles.push(new wtt(new de(a,c,l,u),m))}}function Att(e,t,n){let i=`An error occurred while accessing ${e.url}`;throw d(t)&&d(t.message)&&(i=`${i}: ${t.message}`),Vo.reportError(void 0,n,d(n)?n._errorEvent:void 0,i),new me(i)}async function Mtt(e,t,n){try{let i=await t.fetchXML();Ftt(e,i)}catch(i){Att(t,i,n)}}function Qy(e){e=g(e,g.EMPTY_OBJECT),this._errorEvent=new ye,this._terrainDataStructure={heightScale:1/1e3,heightOffset:-1e3,elementsPerHeight:3,stride:4,elementMultiplier:256,isBigEndian:!0,lowestEncodedHeight:0,highestEncodedHeight:256*256*256-1};let t=e.credit;typeof t=="string"&&(t=new St(t)),this._credit=t,this._tilingScheme=void 0,this._rectangles=[]}Object.defineProperties(Qy.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},tilingScheme:{get:function(){return this._tilingScheme}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},availability:{get:function(){}}});Qy.fromUrl=async function(e,t){t=g(t,g.EMPTY_OBJECT);let n=new jpe(t),i=Ee.createIfNeeded(e);await Mtt(n,i);let o=new Qy(t);return n.build(o),o._resource=i,o};Qy.prototype.requestTileGeometry=function(e,t,n,i){let o=this._tilingScheme.getNumberOfYTilesAtLevel(n),s=this._resource.getDerivedResource({url:`${n}/${e}/${o-t-1}.tif`,queryParameters:{cesium:!0},request:i}).fetchImage({preferImageBitmap:!0});if(!d(s))return;let a=this;return Promise.resolve(s).then(function(c){return new Sa({buffer:nm(c),width:a._heightmapWidth,height:a._heightmapHeight,childTileMask:Ntt(a,e,t,n),structure:a._terrainDataStructure})})};Qy.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};var qpe=new de;function Ntt(e,t,n,i){let o=e._tilingScheme,r=e._rectangles,s=o.tileXYToRectangle(t,n,i),a=0;for(let c=0;c<r.length&&a!==15;++c){let l=r[c];if(l.maxLevel<=i)continue;let u=l.rectangle,m=de.intersection(u,s,qpe);d(m)&&(zU(o,u,t*2,n*2,i+1)&&(a|=4),zU(o,u,t*2+1,n*2,i+1)&&(a|=8),zU(o,u,t*2,n*2+1,i+1)&&(a|=1),zU(o,u,t*2+1,n*2+1,i+1)&&(a|=2))}return a}function zU(e,t,n,i,o){let r=e.tileXYToRectangle(n,i,o);return d(de.intersection(r,t,qpe))}Qy.prototype.getTileDataAvailable=function(e,t,n){};Qy.prototype.loadTileDataAvailability=function(e,t,n){};var mQ=Qy;var nyi=T(S(),1);function $_(e){e=g(e,g.EMPTY_OBJECT),this._clock=void 0,this._element=void 0,this._clockSubscription=void 0,this._seekFunction=void 0,this._lastPlaybackRate=void 0,this.clock=e.clock,this.element=e.element,this.epoch=g(e.epoch,Be.MINIMUM_VALUE),this.tolerance=g(e.tolerance,1),this._seeking=!1,this._seekFunction=void 0,this._firstTickAfterSeek=!1}Object.defineProperties($_.prototype,{clock:{get:function(){return this._clock},set:function(e){let t=this._clock;t!==e&&(d(t)&&(this._clockSubscription(),this._clockSubscription=void 0),d(e)&&(this._clockSubscription=e.onTick.addEventListener($_.prototype._onTick,this)),this._clock=e)}},element:{get:function(){return this._element},set:function(e){let t=this._element;t!==e&&(d(t)&&t.removeEventListener("seeked",this._seekFunction,!1),d(e)&&(this._seeking=!1,this._seekFunction=Utt(this),e.addEventListener("seeked",this._seekFunction,!1)),this._element=e,this._seeking=!1,this._firstTickAfterSeek=!1)}}});$_.prototype.destroy=function(){return this.element=void 0,this.clock=void 0,ue(this)};$_.prototype.isDestroyed=function(){return!1};$_.prototype._trySetPlaybackRate=function(e){if(this._lastPlaybackRate===e.multiplier)return;let t=this._element;try{t.playbackRate=e.multiplier}catch{t.playbackRate=0}this._lastPlaybackRate=e.multiplier};$_.prototype._onTick=function(e){let t=this._element;if(!d(t)||t.readyState<2)return;let n=t.paused,i=e.shouldAnimate;if(i===n&&(i?t.play():t.pause()),this._seeking||this._firstTickAfterSeek){this._firstTickAfterSeek=!1;return}this._trySetPlaybackRate(e);let o=e.currentTime,r=g(this.epoch,Be.MINIMUM_VALUE),s=te.secondsDifference(o,r),a=t.duration,c,l=t.currentTime;t.loop?(s=s%a,s<0&&(s=a-s),c=s):s>a?c=a:s<0?c=0:c=s;let u=i?g(this.tolerance,1):.001;Math.abs(c-l)>u&&(this._seeking=!0,t.currentTime=c)};function Utt(e){return function(){e._seeking=!1,e._firstTickAfterSeek=!0}}var hQ=$_;var oyi=T(S(),1),ktt={VK_FORMAT_UNDEFINED:0,VK_FORMAT_R4G4_UNORM_PACK8:1,VK_FORMAT_R4G4B4A4_UNORM_PACK16:2,VK_FORMAT_B4G4R4A4_UNORM_PACK16:3,VK_FORMAT_R5G6B5_UNORM_PACK16:4,VK_FORMAT_B5G6R5_UNORM_PACK16:5,VK_FORMAT_R5G5B5A1_UNORM_PACK16:6,VK_FORMAT_B5G5R5A1_UNORM_PACK16:7,VK_FORMAT_A1R5G5B5_UNORM_PACK16:8,VK_FORMAT_R8_UNORM:9,VK_FORMAT_R8_SNORM:10,VK_FORMAT_R8_USCALED:11,VK_FORMAT_R8_SSCALED:12,VK_FORMAT_R8_UINT:13,VK_FORMAT_R8_SINT:14,VK_FORMAT_R8_SRGB:15,VK_FORMAT_R8G8_UNORM:16,VK_FORMAT_R8G8_SNORM:17,VK_FORMAT_R8G8_USCALED:18,VK_FORMAT_R8G8_SSCALED:19,VK_FORMAT_R8G8_UINT:20,VK_FORMAT_R8G8_SINT:21,VK_FORMAT_R8G8_SRGB:22,VK_FORMAT_R8G8B8_UNORM:23,VK_FORMAT_R8G8B8_SNORM:24,VK_FORMAT_R8G8B8_USCALED:25,VK_FORMAT_R8G8B8_SSCALED:26,VK_FORMAT_R8G8B8_UINT:27,VK_FORMAT_R8G8B8_SINT:28,VK_FORMAT_R8G8B8_SRGB:29,VK_FORMAT_B8G8R8_UNORM:30,VK_FORMAT_B8G8R8_SNORM:31,VK_FORMAT_B8G8R8_USCALED:32,VK_FORMAT_B8G8R8_SSCALED:33,VK_FORMAT_B8G8R8_UINT:34,VK_FORMAT_B8G8R8_SINT:35,VK_FORMAT_B8G8R8_SRGB:36,VK_FORMAT_R8G8B8A8_UNORM:37,VK_FORMAT_R8G8B8A8_SNORM:38,VK_FORMAT_R8G8B8A8_USCALED:39,VK_FORMAT_R8G8B8A8_SSCALED:40,VK_FORMAT_R8G8B8A8_UINT:41,VK_FORMAT_R8G8B8A8_SINT:42,VK_FORMAT_R8G8B8A8_SRGB:43,VK_FORMAT_B8G8R8A8_UNORM:44,VK_FORMAT_B8G8R8A8_SNORM:45,VK_FORMAT_B8G8R8A8_USCALED:46,VK_FORMAT_B8G8R8A8_SSCALED:47,VK_FORMAT_B8G8R8A8_UINT:48,VK_FORMAT_B8G8R8A8_SINT:49,VK_FORMAT_B8G8R8A8_SRGB:50,VK_FORMAT_A8B8G8R8_UNORM_PACK32:51,VK_FORMAT_A8B8G8R8_SNORM_PACK32:52,VK_FORMAT_A8B8G8R8_USCALED_PACK32:53,VK_FORMAT_A8B8G8R8_SSCALED_PACK32:54,VK_FORMAT_A8B8G8R8_UINT_PACK32:55,VK_FORMAT_A8B8G8R8_SINT_PACK32:56,VK_FORMAT_A8B8G8R8_SRGB_PACK32:57,VK_FORMAT_A2R10G10B10_UNORM_PACK32:58,VK_FORMAT_A2R10G10B10_SNORM_PACK32:59,VK_FORMAT_A2R10G10B10_USCALED_PACK32:60,VK_FORMAT_A2R10G10B10_SSCALED_PACK32:61,VK_FORMAT_A2R10G10B10_UINT_PACK32:62,VK_FORMAT_A2R10G10B10_SINT_PACK32:63,VK_FORMAT_A2B10G10R10_UNORM_PACK32:64,VK_FORMAT_A2B10G10R10_SNORM_PACK32:65,VK_FORMAT_A2B10G10R10_USCALED_PACK32:66,VK_FORMAT_A2B10G10R10_SSCALED_PACK32:67,VK_FORMAT_A2B10G10R10_UINT_PACK32:68,VK_FORMAT_A2B10G10R10_SINT_PACK32:69,VK_FORMAT_R16_UNORM:70,VK_FORMAT_R16_SNORM:71,VK_FORMAT_R16_USCALED:72,VK_FORMAT_R16_SSCALED:73,VK_FORMAT_R16_UINT:74,VK_FORMAT_R16_SINT:75,VK_FORMAT_R16_SFLOAT:76,VK_FORMAT_R16G16_UNORM:77,VK_FORMAT_R16G16_SNORM:78,VK_FORMAT_R16G16_USCALED:79,VK_FORMAT_R16G16_SSCALED:80,VK_FORMAT_R16G16_UINT:81,VK_FORMAT_R16G16_SINT:82,VK_FORMAT_R16G16_SFLOAT:83,VK_FORMAT_R16G16B16_UNORM:84,VK_FORMAT_R16G16B16_SNORM:85,VK_FORMAT_R16G16B16_USCALED:86,VK_FORMAT_R16G16B16_SSCALED:87,VK_FORMAT_R16G16B16_UINT:88,VK_FORMAT_R16G16B16_SINT:89,VK_FORMAT_R16G16B16_SFLOAT:90,VK_FORMAT_R16G16B16A16_UNORM:91,VK_FORMAT_R16G16B16A16_SNORM:92,VK_FORMAT_R16G16B16A16_USCALED:93,VK_FORMAT_R16G16B16A16_SSCALED:94,VK_FORMAT_R16G16B16A16_UINT:95,VK_FORMAT_R16G16B16A16_SINT:96,VK_FORMAT_R16G16B16A16_SFLOAT:97,VK_FORMAT_R32_UINT:98,VK_FORMAT_R32_SINT:99,VK_FORMAT_R32_SFLOAT:100,VK_FORMAT_R32G32_UINT:101,VK_FORMAT_R32G32_SINT:102,VK_FORMAT_R32G32_SFLOAT:103,VK_FORMAT_R32G32B32_UINT:104,VK_FORMAT_R32G32B32_SINT:105,VK_FORMAT_R32G32B32_SFLOAT:106,VK_FORMAT_R32G32B32A32_UINT:107,VK_FORMAT_R32G32B32A32_SINT:108,VK_FORMAT_R32G32B32A32_SFLOAT:109,VK_FORMAT_R64_UINT:110,VK_FORMAT_R64_SINT:111,VK_FORMAT_R64_SFLOAT:112,VK_FORMAT_R64G64_UINT:113,VK_FORMAT_R64G64_SINT:114,VK_FORMAT_R64G64_SFLOAT:115,VK_FORMAT_R64G64B64_UINT:116,VK_FORMAT_R64G64B64_SINT:117,VK_FORMAT_R64G64B64_SFLOAT:118,VK_FORMAT_R64G64B64A64_UINT:119,VK_FORMAT_R64G64B64A64_SINT:120,VK_FORMAT_R64G64B64A64_SFLOAT:121,VK_FORMAT_B10G11R11_UFLOAT_PACK32:122,VK_FORMAT_E5B9G9R9_UFLOAT_PACK32:123,VK_FORMAT_D16_UNORM:124,VK_FORMAT_X8_D24_UNORM_PACK32:125,VK_FORMAT_D32_SFLOAT:126,VK_FORMAT_S8_UINT:127,VK_FORMAT_D16_UNORM_S8_UINT:128,VK_FORMAT_D24_UNORM_S8_UINT:129,VK_FORMAT_D32_SFLOAT_S8_UINT:130,VK_FORMAT_BC1_RGB_UNORM_BLOCK:131,VK_FORMAT_BC1_RGB_SRGB_BLOCK:132,VK_FORMAT_BC1_RGBA_UNORM_BLOCK:133,VK_FORMAT_BC1_RGBA_SRGB_BLOCK:134,VK_FORMAT_BC2_UNORM_BLOCK:135,VK_FORMAT_BC2_SRGB_BLOCK:136,VK_FORMAT_BC3_UNORM_BLOCK:137,VK_FORMAT_BC3_SRGB_BLOCK:138,VK_FORMAT_BC4_UNORM_BLOCK:139,VK_FORMAT_BC4_SNORM_BLOCK:140,VK_FORMAT_BC5_UNORM_BLOCK:141,VK_FORMAT_BC5_SNORM_BLOCK:142,VK_FORMAT_BC6H_UFLOAT_BLOCK:143,VK_FORMAT_BC6H_SFLOAT_BLOCK:144,VK_FORMAT_BC7_UNORM_BLOCK:145,VK_FORMAT_BC7_SRGB_BLOCK:146,VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:147,VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:148,VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:149,VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:150,VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:151,VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:152,VK_FORMAT_EAC_R11_UNORM_BLOCK:153,VK_FORMAT_EAC_R11_SNORM_BLOCK:154,VK_FORMAT_EAC_R11G11_UNORM_BLOCK:155,VK_FORMAT_EAC_R11G11_SNORM_BLOCK:156,VK_FORMAT_ASTC_4x4_UNORM_BLOCK:157,VK_FORMAT_ASTC_4x4_SRGB_BLOCK:158,VK_FORMAT_ASTC_5x4_UNORM_BLOCK:159,VK_FORMAT_ASTC_5x4_SRGB_BLOCK:160,VK_FORMAT_ASTC_5x5_UNORM_BLOCK:161,VK_FORMAT_ASTC_5x5_SRGB_BLOCK:162,VK_FORMAT_ASTC_6x5_UNORM_BLOCK:163,VK_FORMAT_ASTC_6x5_SRGB_BLOCK:164,VK_FORMAT_ASTC_6x6_UNORM_BLOCK:165,VK_FORMAT_ASTC_6x6_SRGB_BLOCK:166,VK_FORMAT_ASTC_8x5_UNORM_BLOCK:167,VK_FORMAT_ASTC_8x5_SRGB_BLOCK:168,VK_FORMAT_ASTC_8x6_UNORM_BLOCK:169,VK_FORMAT_ASTC_8x6_SRGB_BLOCK:170,VK_FORMAT_ASTC_8x8_UNORM_BLOCK:171,VK_FORMAT_ASTC_8x8_SRGB_BLOCK:172,VK_FORMAT_ASTC_10x5_UNORM_BLOCK:173,VK_FORMAT_ASTC_10x5_SRGB_BLOCK:174,VK_FORMAT_ASTC_10x6_UNORM_BLOCK:175,VK_FORMAT_ASTC_10x6_SRGB_BLOCK:176,VK_FORMAT_ASTC_10x8_UNORM_BLOCK:177,VK_FORMAT_ASTC_10x8_SRGB_BLOCK:178,VK_FORMAT_ASTC_10x10_UNORM_BLOCK:179,VK_FORMAT_ASTC_10x10_SRGB_BLOCK:180,VK_FORMAT_ASTC_12x10_UNORM_BLOCK:181,VK_FORMAT_ASTC_12x10_SRGB_BLOCK:182,VK_FORMAT_ASTC_12x12_UNORM_BLOCK:183,VK_FORMAT_ASTC_12x12_SRGB_BLOCK:184,VK_FORMAT_G8B8G8R8_422_UNORM:1000156e3,VK_FORMAT_B8G8R8G8_422_UNORM:1000156001,VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:1000156002,VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:1000156003,VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM:1000156004,VK_FORMAT_G8_B8R8_2PLANE_422_UNORM:1000156005,VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM:1000156006,VK_FORMAT_R10X6_UNORM_PACK16:1000156007,VK_FORMAT_R10X6G10X6_UNORM_2PACK16:1000156008,VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16:1000156009,VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16:1000156010,VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16:1000156011,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:1000156012,VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:1000156013,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:1000156014,VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:1000156015,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16:1000156016,VK_FORMAT_R12X4_UNORM_PACK16:1000156017,VK_FORMAT_R12X4G12X4_UNORM_2PACK16:1000156018,VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16:1000156019,VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16:1000156020,VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16:1000156021,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:1000156022,VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16:1000156023,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:1000156024,VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:1000156025,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16:1000156026,VK_FORMAT_G16B16G16R16_422_UNORM:1000156027,VK_FORMAT_B16G16R16G16_422_UNORM:1000156028,VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM:1000156029,VK_FORMAT_G16_B16R16_2PLANE_420_UNORM:1000156030,VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:1000156031,VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:1000156032,VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:1000156033,VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG:1000054e3,VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG:1000054001,VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG:1000054002,VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG:1000054003,VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG:1000054004,VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG:1000054005,VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG:1000054006,VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG:1000054007,VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT:1000066e3,VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT:1000066001,VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT:1000066002,VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT:1000066003,VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT:1000066004,VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT:1000066005,VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT:1000066006,VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT:1000066007,VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT:1000066008,VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT:1000066009,VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT:1000066010,VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT:1000066011,VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT:1000066012,VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT:1000066013,VK_FORMAT_G8B8G8R8_422_UNORM_KHR:1000156e3,VK_FORMAT_B8G8R8G8_422_UNORM_KHR:1000156001,VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR:1000156002,VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR:1000156003,VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR:1000156004,VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR:1000156005,VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR:1000156006,VK_FORMAT_R10X6_UNORM_PACK16_KHR:1000156007,VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR:1000156008,VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR:1000156009,VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR:1000156010,VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR:1000156011,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR:1000156012,VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR:1000156013,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR:1000156014,VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR:1000156015,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR:1000156016,VK_FORMAT_R12X4_UNORM_PACK16_KHR:1000156017,VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR:1000156018,VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR:1000156019,VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR:1000156020,VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR:1000156021,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR:1000156022,VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR:1000156023,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR:1000156024,VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR:1000156025,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR:1000156026,VK_FORMAT_G16B16G16R16_422_UNORM_KHR:1000156027,VK_FORMAT_B16G16R16G16_422_UNORM_KHR:1000156028,VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR:1000156029,VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR:1000156030,VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR:1000156031,VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR:1000156032,VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR:1000156033},fQ=Object.freeze(ktt);var cyi=T(S(),1);function Dtt(e){return e=g(e,g.EMPTY_OBJECT),NP.fromIonAssetId(1,{requestVertexNormals:g(e.requestVertexNormals,!1),requestWaterMask:g(e.requestWaterMask,!1)})}var eT=Dtt;var uyi=T(S(),1);var Btt=1953029805,Ytt=2917034100;function pQ(e,t){if(pQ.passThroughDataForTesting)return t;let n=e.byteLength;if(n===0||n%4!==0)throw new me("The length of key must be greater than 0 and a multiple of 4.");let i=new DataView(t),o=i.getUint32(0,!0);if(o===Btt||o===Ytt)return t;let r=new DataView(e),s=0,a=t.byteLength,c=a-a%8,l=n,u,m=8;for(;s<c;)for(m=(m+8)%24,u=m;s<c&&u<l;)i.setUint32(s,i.getUint32(s,!0)^r.getUint32(u,!0),!0),i.setUint32(s+4,i.getUint32(s+4,!0)^r.getUint32(u+4,!0),!0),s+=8,u+=24;if(s<a)for(u>=l&&(m=(m+8)%24,u=m);s<a;)i.setUint8(s,i.getUint8(s)^r.getUint8(u)),s++,u++}pQ.passThroughDataForTesting=!1;var ev=pQ;var hyi=T(S(),1);function Ott(e,t,n){let i=new Uint8ClampedArray(e.buffer),o=new ImageData(i,t,n),r=document.createElement("canvas");return r.width=t,r.height=n,r.getContext("2d").putImageData(o,0,0),r}var tv=Ott;var pyi=T(S(),1);var bQ=[],yQ=[];function Ktt(e,t,n,i,o,r){let s=o-i+1,a=r-o,c=bQ,l=yQ,u,m;for(u=0;u<s;++u)c[u]=e[i+u];for(m=0;m<a;++m)l[m]=e[o+m+1];u=0,m=0;for(let p=i;p<=r;++p){let y=c[u],f=l[m];u<s&&(m>=a||t(y,f,n)<=0)?(e[p]=y,++u):m<a&&(e[p]=f,++m)}}function gQ(e,t,n,i,o){if(i>=o)return;let r=Math.floor((i+o)*.5);gQ(e,t,n,i,r),gQ(e,t,n,r+1,o),Ktt(e,t,n,i,r,o)}function Htt(e,t,n){let i=e.length,o=Math.ceil(i*.5);bQ.length=o,yQ.length=o,gQ(e,t,n,0,i-1),bQ.length=0,yQ.length=0}var I0=Htt;var _yi=T(S(),1);var ztt=new h;function Jtt(e,t,n,i){let o=Ug(e,t,n,i,ztt);return d(o)?o.x>0&&o.y>0&&o.z>0:!1}var xQ=Jtt;var Cyi=T(S(),1);function Qtt(e){switch(e){case ne.FLOAT:return"float";case ne.FLOAT_VEC2:return"vec2";case ne.FLOAT_VEC3:return"vec3";case ne.FLOAT_VEC4:return"vec4";case ne.FLOAT_MAT2:return"mat2";case ne.FLOAT_MAT3:return"mat3";case ne.FLOAT_MAT4:return"mat4";case ne.SAMPLER_2D:return"sampler2D";case ne.BOOL:return"bool"}}var _Q=Qtt;var Lyi=T(S(),1);function jtt(e,t,n){return function(){n.apply(e,arguments),t.apply(e,arguments)}}var nv=jtt;var Zyi=T(S(),1),j1=`#ifdef MRT
  7429. layout (location = 0) out vec4 out_FragData_0;
  7430. layout (location = 1) out vec4 out_FragData_1;
  7431. #else
  7432. layout (location = 0) out vec4 out_FragColor;
  7433. #endif
  7434. uniform vec4 u_bgColor;
  7435. uniform sampler2D u_depthTexture;
  7436. in vec2 v_textureCoordinates;
  7437. void main()
  7438. {
  7439. if (texture(u_depthTexture, v_textureCoordinates).r < 1.0)
  7440. {
  7441. #ifdef MRT
  7442. out_FragData_0 = u_bgColor;
  7443. out_FragData_1 = vec4(u_bgColor.a);
  7444. #else
  7445. out_FragColor = u_bgColor;
  7446. #endif
  7447. return;
  7448. }
  7449. discard;
  7450. }
  7451. `;var Eyi=T(S(),1),W0=`uniform vec3 u_radiiAndDynamicAtmosphereColor;
  7452. uniform float u_atmosphereLightIntensity;
  7453. uniform float u_atmosphereRayleighScaleHeight;
  7454. uniform float u_atmosphereMieScaleHeight;
  7455. uniform float u_atmosphereMieAnisotropy;
  7456. uniform vec3 u_atmosphereRayleighCoefficient;
  7457. uniform vec3 u_atmosphereMieCoefficient;
  7458. const float ATMOSPHERE_THICKNESS = 111e3; // The thickness of the atmosphere in meters.
  7459. const int PRIMARY_STEPS_MAX = 16; // Maximum number of times the ray from the camera to the world position (primary ray) is sampled.
  7460. const int LIGHT_STEPS_MAX = 4; // Maximum number of times the light is sampled from the light source's intersection with the atmosphere to a sample position on the primary ray.
  7461. /**
  7462. * Rational approximation to tanh(x)
  7463. */
  7464. float approximateTanh(float x) {
  7465. float x2 = x * x;
  7466. return max(-1.0, min(+1.0, x * (27.0 + x2) / (27.0 + 9.0 * x2)));
  7467. }
  7468. /**
  7469. * This function computes the colors contributed by Rayliegh and Mie scattering on a given ray, as well as
  7470. * the transmittance value for the ray.
  7471. *
  7472. * @param {czm_ray} primaryRay The ray from the camera to the position.
  7473. * @param {float} primaryRayLength The length of the primary ray.
  7474. * @param {vec3} lightDirection The direction of the light to calculate the scattering from.
  7475. * @param {vec3} rayleighColor The variable the Rayleigh scattering will be written to.
  7476. * @param {vec3} mieColor The variable the Mie scattering will be written to.
  7477. * @param {float} opacity The variable the transmittance will be written to.
  7478. * @glslFunction
  7479. */
  7480. void computeScattering(
  7481. czm_ray primaryRay,
  7482. float primaryRayLength,
  7483. vec3 lightDirection,
  7484. float atmosphereInnerRadius,
  7485. out vec3 rayleighColor,
  7486. out vec3 mieColor,
  7487. out float opacity
  7488. ) {
  7489. // Initialize the default scattering amounts to 0.
  7490. rayleighColor = vec3(0.0);
  7491. mieColor = vec3(0.0);
  7492. opacity = 0.0;
  7493. float atmosphereOuterRadius = atmosphereInnerRadius + ATMOSPHERE_THICKNESS;
  7494. vec3 origin = vec3(0.0);
  7495. // Calculate intersection from the camera to the outer ring of the atmosphere.
  7496. czm_raySegment primaryRayAtmosphereIntersect = czm_raySphereIntersectionInterval(primaryRay, origin, atmosphereOuterRadius);
  7497. // Return empty colors if no intersection with the atmosphere geometry.
  7498. if (primaryRayAtmosphereIntersect == czm_emptyRaySegment) {
  7499. return;
  7500. }
  7501. // To deal with smaller values of PRIMARY_STEPS (e.g. 4)
  7502. // we implement a split strategy: sky or horizon.
  7503. // For performance reasons, instead of a if/else branch
  7504. // a soft choice is implemented through a weight 0.0 <= w_stop_gt_lprl <= 1.0
  7505. float x = 1e-7 * primaryRayAtmosphereIntersect.stop / length(primaryRayLength);
  7506. // Value close to 0.0: close to the horizon
  7507. // Value close to 1.0: above in the sky
  7508. float w_stop_gt_lprl = 0.5 * (1.0 + approximateTanh(x));
  7509. // The ray should start from the first intersection with the outer atmopshere, or from the camera position, if it is inside the atmosphere.
  7510. float start_0 = primaryRayAtmosphereIntersect.start;
  7511. primaryRayAtmosphereIntersect.start = max(primaryRayAtmosphereIntersect.start, 0.0);
  7512. // The ray should end at the exit from the atmosphere or at the distance to the vertex, whichever is smaller.
  7513. primaryRayAtmosphereIntersect.stop = min(primaryRayAtmosphereIntersect.stop, length(primaryRayLength));
  7514. // For the number of ray steps, distinguish inside or outside atmosphere (outer space)
  7515. // (1) from outer space we have to use more ray steps to get a realistic rendering
  7516. // (2) within atmosphere we need fewer steps for faster rendering
  7517. float x_o_a = start_0 - ATMOSPHERE_THICKNESS; // ATMOSPHERE_THICKNESS used as an ad-hoc constant, no precise meaning here, only the order of magnitude matters
  7518. float w_inside_atmosphere = 1.0 - 0.5 * (1.0 + approximateTanh(x_o_a));
  7519. int PRIMARY_STEPS = PRIMARY_STEPS_MAX - int(w_inside_atmosphere * 12.0); // Number of times the ray from the camera to the world position (primary ray) is sampled.
  7520. int LIGHT_STEPS = LIGHT_STEPS_MAX - int(w_inside_atmosphere * 2.0); // Number of times the light is sampled from the light source's intersection with the atmosphere to a sample position on the primary ray.
  7521. // Setup for sampling positions along the ray - starting from the intersection with the outer ring of the atmosphere.
  7522. float rayPositionLength = primaryRayAtmosphereIntersect.start;
  7523. // (1) Outside the atmosphere: constant rayStepLength
  7524. // (2) Inside atmosphere: variable rayStepLength to compensate the rough rendering of the smaller number of ray steps
  7525. float totalRayLength = primaryRayAtmosphereIntersect.stop - rayPositionLength;
  7526. float rayStepLengthIncrease = w_inside_atmosphere * ((1.0 - w_stop_gt_lprl) * totalRayLength / (float(PRIMARY_STEPS * (PRIMARY_STEPS + 1)) / 2.0));
  7527. float rayStepLength = max(1.0 - w_inside_atmosphere, w_stop_gt_lprl) * totalRayLength / max(7.0 * w_inside_atmosphere, float(PRIMARY_STEPS));
  7528. vec3 rayleighAccumulation = vec3(0.0);
  7529. vec3 mieAccumulation = vec3(0.0);
  7530. vec2 opticalDepth = vec2(0.0);
  7531. vec2 heightScale = vec2(u_atmosphereRayleighScaleHeight, u_atmosphereMieScaleHeight);
  7532. // Sample positions on the primary ray.
  7533. for (int i = 0; i < PRIMARY_STEPS_MAX; ++i) {
  7534. // The loop should be: for (int i = 0; i < PRIMARY_STEPS; ++i) {...} but WebGL1 cannot
  7535. // loop with non-constant condition, so it has to break early instead
  7536. if (i >= PRIMARY_STEPS) {
  7537. break;
  7538. }
  7539. // Calculate sample position along viewpoint ray.
  7540. vec3 samplePosition = primaryRay.origin + primaryRay.direction * (rayPositionLength + rayStepLength);
  7541. // Calculate height of sample position above ellipsoid.
  7542. float sampleHeight = length(samplePosition) - atmosphereInnerRadius;
  7543. // Calculate and accumulate density of particles at the sample position.
  7544. vec2 sampleDensity = exp(-sampleHeight / heightScale) * rayStepLength;
  7545. opticalDepth += sampleDensity;
  7546. // Generate ray from the sample position segment to the light source, up to the outer ring of the atmosphere.
  7547. czm_ray lightRay = czm_ray(samplePosition, lightDirection);
  7548. czm_raySegment lightRayAtmosphereIntersect = czm_raySphereIntersectionInterval(lightRay, origin, atmosphereOuterRadius);
  7549. float lightStepLength = lightRayAtmosphereIntersect.stop / float(LIGHT_STEPS);
  7550. float lightPositionLength = 0.0;
  7551. vec2 lightOpticalDepth = vec2(0.0);
  7552. // Sample positions along the light ray, to accumulate incidence of light on the latest sample segment.
  7553. for (int j = 0; j < LIGHT_STEPS_MAX; ++j) {
  7554. // The loop should be: for (int j = 0; i < LIGHT_STEPS; ++j) {...} but WebGL1 cannot
  7555. // loop with non-constant condition, so it has to break early instead
  7556. if (j >= LIGHT_STEPS) {
  7557. break;
  7558. }
  7559. // Calculate sample position along light ray.
  7560. vec3 lightPosition = samplePosition + lightDirection * (lightPositionLength + lightStepLength * 0.5);
  7561. // Calculate height of the light sample position above ellipsoid.
  7562. float lightHeight = length(lightPosition) - atmosphereInnerRadius;
  7563. // Calculate density of photons at the light sample position.
  7564. lightOpticalDepth += exp(-lightHeight / heightScale) * lightStepLength;
  7565. // Increment distance on light ray.
  7566. lightPositionLength += lightStepLength;
  7567. }
  7568. // Compute attenuation via the primary ray and the light ray.
  7569. vec3 attenuation = exp(-((u_atmosphereMieCoefficient * (opticalDepth.y + lightOpticalDepth.y)) + (u_atmosphereRayleighCoefficient * (opticalDepth.x + lightOpticalDepth.x))));
  7570. // Accumulate the scattering.
  7571. rayleighAccumulation += sampleDensity.x * attenuation;
  7572. mieAccumulation += sampleDensity.y * attenuation;
  7573. // Increment distance on primary ray.
  7574. rayPositionLength += (rayStepLength += rayStepLengthIncrease);
  7575. }
  7576. // Compute the scattering amount.
  7577. rayleighColor = u_atmosphereRayleighCoefficient * rayleighAccumulation;
  7578. mieColor = u_atmosphereMieCoefficient * mieAccumulation;
  7579. // Compute the transmittance i.e. how much light is passing through the atmosphere.
  7580. opacity = length(exp(-((u_atmosphereMieCoefficient * opticalDepth.y) + (u_atmosphereRayleighCoefficient * opticalDepth.x))));
  7581. }
  7582. vec4 computeAtmosphereColor(
  7583. vec3 positionWC,
  7584. vec3 lightDirection,
  7585. vec3 rayleighColor,
  7586. vec3 mieColor,
  7587. float opacity
  7588. ) {
  7589. // Setup the primary ray: from the camera position to the vertex position.
  7590. vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC;
  7591. vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC);
  7592. float cosAngle = dot(cameraToPositionWCDirection, lightDirection);
  7593. float cosAngleSq = cosAngle * cosAngle;
  7594. float G = u_atmosphereMieAnisotropy;
  7595. float GSq = G * G;
  7596. // The Rayleigh phase function.
  7597. float rayleighPhase = 3.0 / (50.2654824574) * (1.0 + cosAngleSq);
  7598. // The Mie phase function.
  7599. float miePhase = 3.0 / (25.1327412287) * ((1.0 - GSq) * (cosAngleSq + 1.0)) / (pow(1.0 + GSq - 2.0 * cosAngle * G, 1.5) * (2.0 + GSq));
  7600. // The final color is generated by combining the effects of the Rayleigh and Mie scattering.
  7601. vec3 rayleigh = rayleighPhase * rayleighColor;
  7602. vec3 mie = miePhase * mieColor;
  7603. vec3 color = (rayleigh + mie) * u_atmosphereLightIntensity;
  7604. return vec4(color, opacity);
  7605. }
  7606. `;var Iyi=T(S(),1),iv=`in vec2 v_textureCoordinates;
  7607. const float M_PI = 3.141592653589793;
  7608. float vdcRadicalInverse(int i)
  7609. {
  7610. float r;
  7611. float base = 2.0;
  7612. float value = 0.0;
  7613. float invBase = 1.0 / base;
  7614. float invBi = invBase;
  7615. for (int x = 0; x < 100; x++)
  7616. {
  7617. if (i <= 0)
  7618. {
  7619. break;
  7620. }
  7621. r = mod(float(i), base);
  7622. value += r * invBi;
  7623. invBi *= invBase;
  7624. i = int(float(i) * invBase);
  7625. }
  7626. return value;
  7627. }
  7628. vec2 hammersley2D(int i, int N)
  7629. {
  7630. return vec2(float(i) / float(N), vdcRadicalInverse(i));
  7631. }
  7632. vec3 importanceSampleGGX(vec2 xi, float roughness, vec3 N)
  7633. {
  7634. float a = roughness * roughness;
  7635. float phi = 2.0 * M_PI * xi.x;
  7636. float cosTheta = sqrt((1.0 - xi.y) / (1.0 + (a * a - 1.0) * xi.y));
  7637. float sinTheta = sqrt(1.0 - cosTheta * cosTheta);
  7638. vec3 H = vec3(sinTheta * cos(phi), sinTheta * sin(phi), cosTheta);
  7639. vec3 upVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
  7640. vec3 tangentX = normalize(cross(upVector, N));
  7641. vec3 tangentY = cross(N, tangentX);
  7642. return tangentX * H.x + tangentY * H.y + N * H.z;
  7643. }
  7644. float G1_Smith(float NdotV, float k)
  7645. {
  7646. return NdotV / (NdotV * (1.0 - k) + k);
  7647. }
  7648. float G_Smith(float roughness, float NdotV, float NdotL)
  7649. {
  7650. float k = roughness * roughness / 2.0;
  7651. return G1_Smith(NdotV, k) * G1_Smith(NdotL, k);
  7652. }
  7653. vec2 integrateBrdf(float roughness, float NdotV)
  7654. {
  7655. vec3 V = vec3(sqrt(1.0 - NdotV * NdotV), 0.0, NdotV);
  7656. float A = 0.0;
  7657. float B = 0.0;
  7658. const int NumSamples = 1024;
  7659. for (int i = 0; i < NumSamples; i++)
  7660. {
  7661. vec2 xi = hammersley2D(i, NumSamples);
  7662. vec3 H = importanceSampleGGX(xi, roughness, vec3(0.0, 0.0, 1.0));
  7663. vec3 L = 2.0 * dot(V, H) * H - V;
  7664. float NdotL = clamp(L.z, 0.0, 1.0);
  7665. float NdotH = clamp(H.z, 0.0, 1.0);
  7666. float VdotH = clamp(dot(V, H), 0.0, 1.0);
  7667. if (NdotL > 0.0)
  7668. {
  7669. float G = G_Smith(roughness, NdotV, NdotL);
  7670. float G_Vis = G * VdotH / (NdotH * NdotV);
  7671. float Fc = pow(1.0 - VdotH, 5.0);
  7672. A += (1.0 - Fc) * G_Vis;
  7673. B += Fc * G_Vis;
  7674. }
  7675. }
  7676. return vec2(A, B) / float(NumSamples);
  7677. }
  7678. void main()
  7679. {
  7680. out_FragColor = vec4(integrateBrdf(v_textureCoordinates.y, v_textureCoordinates.x), 0.0, 1.0);
  7681. }
  7682. `;var Pyi=T(S(),1),ov=`uniform sampler2D u_noiseTexture;
  7683. uniform vec3 u_noiseTextureDimensions;
  7684. uniform float u_noiseDetail;
  7685. in vec2 v_offset;
  7686. in vec3 v_maximumSize;
  7687. in vec4 v_color;
  7688. in float v_slice;
  7689. in float v_brightness;
  7690. float wrap(float value, float rangeLength) {
  7691. if(value < 0.0) {
  7692. float absValue = abs(value);
  7693. float modValue = mod(absValue, rangeLength);
  7694. return mod(rangeLength - modValue, rangeLength);
  7695. }
  7696. return mod(value, rangeLength);
  7697. }
  7698. vec3 wrapVec(vec3 value, float rangeLength) {
  7699. return vec3(wrap(value.x, rangeLength),
  7700. wrap(value.y, rangeLength),
  7701. wrap(value.z, rangeLength));
  7702. }
  7703. vec2 voxelToUV(vec3 voxelIndex) {
  7704. float textureSliceWidth = u_noiseTextureDimensions.x;
  7705. float noiseTextureRows = u_noiseTextureDimensions.y;
  7706. float inverseNoiseTextureRows = u_noiseTextureDimensions.z;
  7707. float textureSliceWidthSquared = textureSliceWidth * textureSliceWidth;
  7708. vec2 inverseNoiseTextureDimensions = vec2(noiseTextureRows / textureSliceWidthSquared,
  7709. inverseNoiseTextureRows / textureSliceWidth);
  7710. vec3 wrappedIndex = wrapVec(voxelIndex, textureSliceWidth);
  7711. float column = mod(wrappedIndex.z, textureSliceWidth * inverseNoiseTextureRows);
  7712. float row = floor(wrappedIndex.z / textureSliceWidth * noiseTextureRows);
  7713. float xPixelCoord = wrappedIndex.x + column * textureSliceWidth;
  7714. float yPixelCoord = wrappedIndex.y + row * textureSliceWidth;
  7715. return vec2(xPixelCoord, yPixelCoord) * inverseNoiseTextureDimensions;
  7716. }
  7717. // Interpolate a voxel with its neighbor (along the positive X-axis)
  7718. vec4 lerpSamplesX(vec3 voxelIndex, float x) {
  7719. vec2 uv0 = voxelToUV(voxelIndex);
  7720. vec2 uv1 = voxelToUV(voxelIndex + vec3(1.0, 0.0, 0.0));
  7721. vec4 sample0 = texture(u_noiseTexture, uv0);
  7722. vec4 sample1 = texture(u_noiseTexture, uv1);
  7723. return mix(sample0, sample1, x);
  7724. }
  7725. vec4 sampleNoiseTexture(vec3 position) {
  7726. float textureSliceWidth = u_noiseTextureDimensions.x;
  7727. vec3 recenteredPos = position + vec3(textureSliceWidth / 2.0);
  7728. vec3 lerpValue = fract(recenteredPos);
  7729. vec3 voxelIndex = floor(recenteredPos);
  7730. vec4 xLerp00 = lerpSamplesX(voxelIndex, lerpValue.x);
  7731. vec4 xLerp01 = lerpSamplesX(voxelIndex + vec3(0.0, 0.0, 1.0), lerpValue.x);
  7732. vec4 xLerp10 = lerpSamplesX(voxelIndex + vec3(0.0, 1.0, 0.0), lerpValue.x);
  7733. vec4 xLerp11 = lerpSamplesX(voxelIndex + vec3(0.0, 1.0, 1.0), lerpValue.x);
  7734. vec4 yLerp0 = mix(xLerp00, xLerp10, lerpValue.y);
  7735. vec4 yLerp1 = mix(xLerp01, xLerp11, lerpValue.y);
  7736. return mix(yLerp0, yLerp1, lerpValue.z);
  7737. }
  7738. // Intersection with a unit sphere with radius 0.5 at center (0, 0, 0).
  7739. bool intersectSphere(vec3 origin, vec3 dir, float slice,
  7740. out vec3 point, out vec3 normal) {
  7741. float A = dot(dir, dir);
  7742. float B = dot(origin, dir);
  7743. float C = dot(origin, origin) - 0.25;
  7744. float discriminant = (B * B) - (A * C);
  7745. if(discriminant < 0.0) {
  7746. return false;
  7747. }
  7748. float root = sqrt(discriminant);
  7749. float t = (-B - root) / A;
  7750. if(t < 0.0) {
  7751. t = (-B + root) / A;
  7752. }
  7753. point = origin + t * dir;
  7754. if(slice >= 0.0) {
  7755. point.z = (slice / 2.0) - 0.5;
  7756. if(length(point) > 0.5) {
  7757. return false;
  7758. }
  7759. }
  7760. normal = normalize(point);
  7761. point -= czm_epsilon2 * normal;
  7762. return true;
  7763. }
  7764. // Transforms the ray origin and direction into unit sphere space,
  7765. // then transforms the result back into the ellipsoid's space.
  7766. bool intersectEllipsoid(vec3 origin, vec3 dir, vec3 center, vec3 scale, float slice,
  7767. out vec3 point, out vec3 normal) {
  7768. if(scale.x <= 0.01 || scale.y < 0.01 || scale.z < 0.01) {
  7769. return false;
  7770. }
  7771. vec3 o = (origin - center) / scale;
  7772. vec3 d = dir / scale;
  7773. vec3 p, n;
  7774. bool intersected = intersectSphere(o, d, slice, p, n);
  7775. if(intersected) {
  7776. point = (p * scale) + center;
  7777. normal = n;
  7778. }
  7779. return intersected;
  7780. }
  7781. // Assume that if phase shift is being called for octave i,
  7782. // the frequency is of i - 1. This saves us from doing extra
  7783. // division / multiplication operations.
  7784. vec2 phaseShift2D(vec2 p, vec2 freq) {
  7785. return (czm_pi / 2.0) * sin(freq.yx * p.yx);
  7786. }
  7787. vec2 phaseShift3D(vec3 p, vec2 freq) {
  7788. return phaseShift2D(p.xy, freq) + czm_pi * vec2(sin(freq.x * p.z));
  7789. }
  7790. // The cloud texture function derived from Gardner's 1985 paper,
  7791. // "Visual Simulation of Clouds."
  7792. // https://www.cs.drexel.edu/~david/Classes/Papers/p297-gardner.pdf
  7793. const float T0 = 0.6; // contrast of the texture pattern
  7794. const float k = 0.1; // computed to produce a maximum value of 1
  7795. const float C0 = 0.8; // coefficient
  7796. const float FX0 = 0.6; // frequency X
  7797. const float FY0 = 0.6; // frequency Y
  7798. const int octaves = 5;
  7799. float T(vec3 point) {
  7800. vec2 sum = vec2(0.0);
  7801. float Ci = C0;
  7802. vec2 FXY = vec2(FX0, FY0);
  7803. vec2 PXY = vec2(0.0);
  7804. for(int i = 1; i <= octaves; i++) {
  7805. PXY = phaseShift3D(point, FXY);
  7806. Ci *= 0.707;
  7807. FXY *= 2.0;
  7808. vec2 sinTerm = sin(FXY * point.xy + PXY);
  7809. sum += Ci * sinTerm + vec2(T0);
  7810. }
  7811. return k * sum.x * sum.y;
  7812. }
  7813. const float a = 0.5; // fraction of surface reflection due to ambient or scattered light,
  7814. const float t = 0.4; // fraction of texture shading
  7815. const float s = 0.25; // fraction of specular reflection
  7816. float I(float Id, float Is, float It) {
  7817. return (1.0 - a) * ((1.0 - t) * ((1.0 - s) * Id + s * Is) + t * It) + a;
  7818. }
  7819. const vec3 lightDir = normalize(vec3(0.2, -1.0, 0.7));
  7820. vec4 drawCloud(vec3 rayOrigin, vec3 rayDir, vec3 cloudCenter, vec3 cloudScale, float cloudSlice,
  7821. float brightness) {
  7822. vec3 cloudPoint, cloudNormal;
  7823. if(!intersectEllipsoid(rayOrigin, rayDir, cloudCenter, cloudScale, cloudSlice,
  7824. cloudPoint, cloudNormal)) {
  7825. return vec4(0.0);
  7826. }
  7827. float Id = clamp(dot(cloudNormal, -lightDir), 0.0, 1.0); // diffuse reflection
  7828. float Is = max(pow(dot(-lightDir, -rayDir), 2.0), 0.0); // specular reflection
  7829. float It = T(cloudPoint); // texture function
  7830. float intensity = I(Id, Is, It);
  7831. vec3 color = vec3(intensity * clamp(brightness, 0.1, 1.0));
  7832. vec4 noise = sampleNoiseTexture(u_noiseDetail * cloudPoint);
  7833. float W = noise.x;
  7834. float W2 = noise.y;
  7835. float W3 = noise.z;
  7836. // The dot product between the cloud's normal and the ray's direction is greatest
  7837. // in the center of the ellipsoid's surface. It decreases towards the edge.
  7838. // Thus, it is used to blur the areas leading to the edges of the ellipsoid,
  7839. // so that no harsh lines appear.
  7840. // The first (and biggest) layer of worley noise is then subtracted from this.
  7841. // The final result is scaled up so that the base cloud is not too translucent.
  7842. float ndDot = clamp(dot(cloudNormal, -rayDir), 0.0, 1.0);
  7843. float TR = pow(ndDot, 3.0) - W; // translucency
  7844. TR *= 1.3;
  7845. // Subtracting the second and third layers of worley noise is more complicated.
  7846. // If these layers of noise were simply subtracted from the current translucency,
  7847. // the shape derived from the first layer of noise would be completely deleted.
  7848. // The erosion of this noise should thus be constricted to the edges of the cloud.
  7849. // However, because the edges of the ellipsoid were already blurred away, mapping
  7850. // the noise to (1.0 - ndDot) will have no impact on most of the cloud's appearance.
  7851. // The value of (0.5 - ndDot) provides the best compromise.
  7852. float minusDot = 0.5 - ndDot;
  7853. // Even with the previous calculation, subtracting the second layer of wnoise
  7854. // erode too much of the cloud. The addition of it, however, will detailed
  7855. // volume to the cloud. As long as the noise is only added and not subtracted,
  7856. // the results are aesthetically pleasing.
  7857. // The minusDot product is mapped in a way that it is larger at the edges of
  7858. // the ellipsoid, so a subtraction and min operation are used instead of
  7859. // an addition and max one.
  7860. TR -= min(minusDot * W2, 0.0);
  7861. // The third level of worley noise is subtracted from the result, with some
  7862. // modifications. First, a scalar is added to minusDot so that the noise
  7863. // starts affecting the shape farther away from the center of the ellipsoid's
  7864. // surface. Then, it is scaled down so its impact is not too intense.
  7865. TR -= 0.8 * (minusDot + 0.25) * W3;
  7866. // The texture function's shading does not correlate with the shape of the cloud
  7867. // produced by the layers of noise, so an extra shading scalar is calculated.
  7868. // The darkest areas of the cloud are assigned to be where the noise erodes
  7869. // the cloud the most. This is then interpolated based on the translucency
  7870. // and the diffuse shading term of that point in the cloud.
  7871. float shading = mix(1.0 - 0.8 * W * W, 1.0, Id * TR);
  7872. // To avoid values that are too dark, this scalar is increased by a small amount
  7873. // and clamped so it never goes to zero.
  7874. shading = clamp(shading + 0.2, 0.3, 1.0);
  7875. // Finally, the contrast of the cloud's color is increased.
  7876. vec3 finalColor = mix(vec3(0.5), shading * color, 1.15);
  7877. return vec4(finalColor, clamp(TR, 0.0, 1.0)) * v_color;
  7878. }
  7879. void main() {
  7880. #ifdef DEBUG_BILLBOARDS
  7881. out_FragColor = vec4(0.0, 0.5, 0.5, 1.0);
  7882. #endif
  7883. // To avoid calculations with high values,
  7884. // we raycast from an arbitrarily smaller space.
  7885. vec2 coordinate = v_maximumSize.xy * v_offset;
  7886. vec3 ellipsoidScale = 0.82 * v_maximumSize;
  7887. vec3 ellipsoidCenter = vec3(0.0);
  7888. float zOffset = max(ellipsoidScale.z - 10.0, 0.0);
  7889. vec3 eye = vec3(0, 0, -10.0 - zOffset);
  7890. vec3 rayDir = normalize(vec3(coordinate, 1.0) - eye);
  7891. vec3 rayOrigin = eye;
  7892. #ifdef DEBUG_ELLIPSOIDS
  7893. vec3 point, normal;
  7894. if(intersectEllipsoid(rayOrigin, rayDir, ellipsoidCenter, ellipsoidScale, v_slice,
  7895. point, normal)) {
  7896. out_FragColor = v_brightness * v_color;
  7897. }
  7898. #else
  7899. #ifndef DEBUG_BILLBOARDS
  7900. vec4 cloud = drawCloud(rayOrigin, rayDir,
  7901. ellipsoidCenter, ellipsoidScale, v_slice, v_brightness);
  7902. if(cloud.w < 0.01) {
  7903. discard;
  7904. }
  7905. out_FragColor = cloud;
  7906. #endif
  7907. #endif
  7908. }
  7909. `;var wyi=T(S(),1),rv=`#ifdef INSTANCED
  7910. in vec2 direction;
  7911. #endif
  7912. in vec4 positionHighAndScaleX;
  7913. in vec4 positionLowAndScaleY;
  7914. in vec4 packedAttribute0;
  7915. in vec4 packedAttribute1;
  7916. in vec4 color;
  7917. out vec2 v_offset;
  7918. out vec3 v_maximumSize;
  7919. out vec4 v_color;
  7920. out float v_slice;
  7921. out float v_brightness;
  7922. void main() {
  7923. // Unpack attributes.
  7924. vec3 positionHigh = positionHighAndScaleX.xyz;
  7925. vec3 positionLow = positionLowAndScaleY.xyz;
  7926. vec2 scale = vec2(positionHighAndScaleX.w, positionLowAndScaleY.w);
  7927. float show = packedAttribute0.x;
  7928. float brightness = packedAttribute0.y;
  7929. vec2 coordinates = packedAttribute0.wz;
  7930. vec3 maximumSize = packedAttribute1.xyz;
  7931. float slice = packedAttribute1.w;
  7932. #ifdef INSTANCED
  7933. vec2 dir = direction;
  7934. #else
  7935. vec2 dir = coordinates;
  7936. #endif
  7937. vec2 offset = dir - vec2(0.5, 0.5);
  7938. vec2 scaledOffset = scale * offset;
  7939. vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);
  7940. vec4 positionEC = czm_modelViewRelativeToEye * p;
  7941. positionEC.xy += scaledOffset;
  7942. positionEC.xyz *= show;
  7943. gl_Position = czm_projection * positionEC;
  7944. v_offset = offset;
  7945. v_maximumSize = maximumSize;
  7946. v_color = color;
  7947. v_slice = slice;
  7948. v_brightness = brightness;
  7949. }
  7950. `;var Ayi=T(S(),1),sv=`uniform vec3 u_noiseTextureDimensions;
  7951. uniform float u_noiseDetail;
  7952. uniform vec3 u_noiseOffset;
  7953. in vec2 v_position;
  7954. float wrap(float value, float rangeLength) {
  7955. if(value < 0.0) {
  7956. float absValue = abs(value);
  7957. float modValue = mod(absValue, rangeLength);
  7958. return mod(rangeLength - modValue, rangeLength);
  7959. }
  7960. return mod(value, rangeLength);
  7961. }
  7962. vec3 wrapVec(vec3 value, float rangeLength) {
  7963. return vec3(wrap(value.x, rangeLength),
  7964. wrap(value.y, rangeLength),
  7965. wrap(value.z, rangeLength));
  7966. }
  7967. vec3 random3(vec3 p) {
  7968. float dot1 = dot(p, vec3(127.1, 311.7, 932.8));
  7969. float dot2 = dot(p, vec3(269.5, 183.3, 421.4));
  7970. return fract(vec3(sin(dot1 - dot2), cos(dot1 * dot2), dot1 * dot2));
  7971. }
  7972. // Frequency corresponds to cell size.
  7973. // The higher the frequency, the smaller the cell size.
  7974. vec3 getWorleyCellPoint(vec3 centerCell, vec3 offset, float freq) {
  7975. float textureSliceWidth = u_noiseTextureDimensions.x;
  7976. vec3 cell = centerCell + offset;
  7977. cell = wrapVec(cell, textureSliceWidth / u_noiseDetail);
  7978. cell += floor(u_noiseOffset / u_noiseDetail);
  7979. vec3 p = offset + random3(cell);
  7980. return p;
  7981. }
  7982. float worleyNoise(vec3 p, float freq) {
  7983. vec3 centerCell = floor(p * freq);
  7984. vec3 pointInCell = fract(p * freq);
  7985. float shortestDistance = 1000.0;
  7986. for(float z = -1.0; z <= 1.0; z++) {
  7987. for(float y = -1.0; y <= 1.0; y++) {
  7988. for(float x = -1.0; x <= 1.0; x++) {
  7989. vec3 offset = vec3(x, y, z);
  7990. vec3 point = getWorleyCellPoint(centerCell, offset, freq);
  7991. float distance = length(pointInCell - point);
  7992. if(distance < shortestDistance) {
  7993. shortestDistance = distance;
  7994. }
  7995. }
  7996. }
  7997. }
  7998. return shortestDistance;
  7999. }
  8000. const float MAX_FBM_ITERATIONS = 10.0;
  8001. float worleyFBMNoise(vec3 p, float octaves, float scale) {
  8002. float noise = 0.0;
  8003. float freq = 1.0;
  8004. float persistence = 0.625;
  8005. for(float i = 0.0; i < MAX_FBM_ITERATIONS; i++) {
  8006. if(i >= octaves) {
  8007. break;
  8008. }
  8009. noise += worleyNoise(p * scale, freq * scale) * persistence;
  8010. persistence *= 0.5;
  8011. freq *= 2.0;
  8012. }
  8013. return noise;
  8014. }
  8015. void main() {
  8016. float textureSliceWidth = u_noiseTextureDimensions.x;
  8017. float inverseNoiseTextureRows = u_noiseTextureDimensions.z;
  8018. float x = mod(v_position.x, textureSliceWidth);
  8019. float y = mod(v_position.y, textureSliceWidth);
  8020. float sliceRow = floor(v_position.y / textureSliceWidth);
  8021. float z = floor(v_position.x / textureSliceWidth) + sliceRow * inverseNoiseTextureRows * textureSliceWidth;
  8022. vec3 position = vec3(x, y, z);
  8023. position /= u_noiseDetail;
  8024. float worley0 = clamp(worleyFBMNoise(position, 3.0, 1.0), 0.0, 1.0);
  8025. float worley1 = clamp(worleyFBMNoise(position, 3.0, 2.0), 0.0, 1.0);
  8026. float worley2 = clamp(worleyFBMNoise(position, 3.0, 3.0), 0.0, 1.0);
  8027. out_FragColor = vec4(worley0, worley1, worley2, 1.0);
  8028. }
  8029. `;var Nyi=T(S(),1),av=`uniform vec3 u_noiseTextureDimensions;
  8030. in vec2 position;
  8031. out vec2 v_position;
  8032. void main()
  8033. {
  8034. gl_Position = vec4(position, 0.1, 1.0);
  8035. float textureSliceWidth = u_noiseTextureDimensions.x;
  8036. float noiseTextureRows = u_noiseTextureDimensions.y;
  8037. float inverseNoiseTextureRows = u_noiseTextureDimensions.z;
  8038. vec2 transformedPos = (position * 0.5) + vec2(0.5);
  8039. transformedPos *= textureSliceWidth;
  8040. transformedPos.x *= textureSliceWidth * inverseNoiseTextureRows;
  8041. transformedPos.y *= noiseTextureRows;
  8042. v_position = transformedPos;
  8043. }
  8044. `;var kyi=T(S(),1),cv=`uniform sampler2D u_opaqueDepthTexture;
  8045. uniform sampler2D u_translucentDepthTexture;
  8046. in vec2 v_textureCoordinates;
  8047. void main()
  8048. {
  8049. float opaqueDepth = texture(u_opaqueDepthTexture, v_textureCoordinates).r;
  8050. float translucentDepth = texture(u_translucentDepthTexture, v_textureCoordinates).r;
  8051. translucentDepth = czm_branchFreeTernary(translucentDepth > opaqueDepth, 1.0, translucentDepth);
  8052. out_FragColor = czm_packDepth(translucentDepth);
  8053. }
  8054. `;var Byi=T(S(),1),lv=`/**
  8055. * Compositing for Weighted Blended Order-Independent Transparency. See:
  8056. * - http://jcgt.org/published/0002/02/09/
  8057. * - http://casual-effects.blogspot.com/2014/03/weighted-blended-order-independent.html
  8058. */
  8059. uniform sampler2D u_opaque;
  8060. uniform sampler2D u_accumulation;
  8061. uniform sampler2D u_revealage;
  8062. in vec2 v_textureCoordinates;
  8063. void main()
  8064. {
  8065. vec4 opaque = texture(u_opaque, v_textureCoordinates);
  8066. vec4 accum = texture(u_accumulation, v_textureCoordinates);
  8067. float r = texture(u_revealage, v_textureCoordinates).r;
  8068. #ifdef MRT
  8069. vec4 transparent = vec4(accum.rgb / clamp(r, 1e-4, 5e4), accum.a);
  8070. #else
  8071. vec4 transparent = vec4(accum.rgb / clamp(accum.a, 1e-4, 5e4), r);
  8072. #endif
  8073. out_FragColor = (1.0 - transparent.a) * transparent + transparent.a * opaque;
  8074. if (opaque != czm_backgroundColor)
  8075. {
  8076. out_FragColor.a = 1.0;
  8077. }
  8078. }
  8079. `;var Oyi=T(S(),1),dv=`in vec4 positionEC;
  8080. void main()
  8081. {
  8082. vec3 position;
  8083. vec3 direction;
  8084. if (czm_orthographicIn3D == 1.0)
  8085. {
  8086. vec2 uv = (gl_FragCoord.xy - czm_viewport.xy) / czm_viewport.zw;
  8087. vec2 minPlane = vec2(czm_frustumPlanes.z, czm_frustumPlanes.y); // left, bottom
  8088. vec2 maxPlane = vec2(czm_frustumPlanes.w, czm_frustumPlanes.x); // right, top
  8089. position = vec3(mix(minPlane, maxPlane, uv), 0.0);
  8090. direction = vec3(0.0, 0.0, -1.0);
  8091. }
  8092. else
  8093. {
  8094. position = vec3(0.0);
  8095. direction = normalize(positionEC.xyz);
  8096. }
  8097. czm_ray ray = czm_ray(position, direction);
  8098. vec3 ellipsoid_center = czm_view[3].xyz;
  8099. czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid_center, czm_ellipsoidInverseRadii);
  8100. if (!czm_isEmpty(intersection))
  8101. {
  8102. out_FragColor = vec4(1.0, 1.0, 0.0, 1.0);
  8103. }
  8104. else
  8105. {
  8106. discard;
  8107. }
  8108. czm_writeLogDepth();
  8109. }
  8110. `;var Hyi=T(S(),1),uv=`in vec4 position;
  8111. out vec4 positionEC;
  8112. void main()
  8113. {
  8114. positionEC = czm_modelView * position;
  8115. gl_Position = czm_projection * positionEC;
  8116. czm_vertexLogDepth();
  8117. }
  8118. `;var Jyi=T(S(),1),q1=`uniform vec3 u_radii;
  8119. uniform vec3 u_oneOverEllipsoidRadiiSquared;
  8120. in vec3 v_positionEC;
  8121. vec4 computeEllipsoidColor(czm_ray ray, float intersection, float side)
  8122. {
  8123. vec3 positionEC = czm_pointAlongRay(ray, intersection);
  8124. vec3 positionMC = (czm_inverseModelView * vec4(positionEC, 1.0)).xyz;
  8125. vec3 geodeticNormal = normalize(czm_geodeticSurfaceNormal(positionMC, vec3(0.0), u_oneOverEllipsoidRadiiSquared));
  8126. vec3 sphericalNormal = normalize(positionMC / u_radii);
  8127. vec3 normalMC = geodeticNormal * side; // normalized surface normal (always facing the viewer) in model coordinates
  8128. vec3 normalEC = normalize(czm_normal * normalMC); // normalized surface normal in eye coordinates
  8129. vec2 st = czm_ellipsoidWgs84TextureCoordinates(sphericalNormal);
  8130. vec3 positionToEyeEC = -positionEC;
  8131. czm_materialInput materialInput;
  8132. materialInput.s = st.s;
  8133. materialInput.st = st;
  8134. materialInput.str = (positionMC + u_radii) / u_radii;
  8135. materialInput.normalEC = normalEC;
  8136. materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(positionMC, normalEC);
  8137. materialInput.positionToEyeEC = positionToEyeEC;
  8138. czm_material material = czm_getMaterial(materialInput);
  8139. #ifdef ONLY_SUN_LIGHTING
  8140. return czm_private_phong(normalize(positionToEyeEC), material, czm_sunDirectionEC);
  8141. #else
  8142. return czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);
  8143. #endif
  8144. }
  8145. void main()
  8146. {
  8147. // PERFORMANCE_TODO: When dynamic branching is available, compute ratio of maximum and minimum radii
  8148. // in the vertex shader. Only when it is larger than some constant, march along the ray.
  8149. // Otherwise perform one intersection test which will be the common case.
  8150. // Test if the ray intersects a sphere with the ellipsoid's maximum radius.
  8151. // For very oblate ellipsoids, using the ellipsoid's radii for an intersection test
  8152. // may cause false negatives. This will discard fragments before marching the ray forward.
  8153. float maxRadius = max(u_radii.x, max(u_radii.y, u_radii.z)) * 1.5;
  8154. vec3 direction = normalize(v_positionEC);
  8155. vec3 ellipsoidCenter = czm_modelView[3].xyz;
  8156. float t1 = -1.0;
  8157. float t2 = -1.0;
  8158. float b = -2.0 * dot(direction, ellipsoidCenter);
  8159. float c = dot(ellipsoidCenter, ellipsoidCenter) - maxRadius * maxRadius;
  8160. float discriminant = b * b - 4.0 * c;
  8161. if (discriminant >= 0.0) {
  8162. t1 = (-b - sqrt(discriminant)) * 0.5;
  8163. t2 = (-b + sqrt(discriminant)) * 0.5;
  8164. }
  8165. if (t1 < 0.0 && t2 < 0.0) {
  8166. discard;
  8167. }
  8168. float t = min(t1, t2);
  8169. if (t < 0.0) {
  8170. t = 0.0;
  8171. }
  8172. // March ray forward to intersection with larger sphere and find
  8173. czm_ray ray = czm_ray(t * direction, direction);
  8174. vec3 ellipsoid_inverseRadii = vec3(1.0 / u_radii.x, 1.0 / u_radii.y, 1.0 / u_radii.z);
  8175. czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoidCenter, ellipsoid_inverseRadii);
  8176. if (czm_isEmpty(intersection))
  8177. {
  8178. discard;
  8179. }
  8180. // If the viewer is outside, compute outsideFaceColor, with normals facing outward.
  8181. vec4 outsideFaceColor = (intersection.start != 0.0) ? computeEllipsoidColor(ray, intersection.start, 1.0) : vec4(0.0);
  8182. // If the viewer either is inside or can see inside, compute insideFaceColor, with normals facing inward.
  8183. vec4 insideFaceColor = (outsideFaceColor.a < 1.0) ? computeEllipsoidColor(ray, intersection.stop, -1.0) : vec4(0.0);
  8184. out_FragColor = mix(insideFaceColor, outsideFaceColor, outsideFaceColor.a);
  8185. out_FragColor.a = 1.0 - (1.0 - insideFaceColor.a) * (1.0 - outsideFaceColor.a);
  8186. #if (defined(WRITE_DEPTH) && (__VERSION__ == 300 || defined(GL_EXT_frag_depth)))
  8187. t = (intersection.start != 0.0) ? intersection.start : intersection.stop;
  8188. vec3 positionEC = czm_pointAlongRay(ray, t);
  8189. vec4 positionCC = czm_projection * vec4(positionEC, 1.0);
  8190. #ifdef LOG_DEPTH
  8191. czm_writeLogDepth(1.0 + positionCC.w);
  8192. #else
  8193. float z = positionCC.z / positionCC.w;
  8194. float n = czm_depthRange.near;
  8195. float f = czm_depthRange.far;
  8196. gl_FragDepth = (z * (f - n) + f + n) * 0.5;
  8197. #endif
  8198. #endif
  8199. }
  8200. `;var jyi=T(S(),1),$1=`in vec3 position;
  8201. uniform vec3 u_radii;
  8202. out vec3 v_positionEC;
  8203. void main()
  8204. {
  8205. // In the vertex data, the cube goes from (-1.0, -1.0, -1.0) to (1.0, 1.0, 1.0) in model coordinates.
  8206. // Scale to consider the radii. We could also do this once on the CPU when using the BoxGeometry,
  8207. // but doing it here allows us to change the radii without rewriting the vertex data, and
  8208. // allows all ellipsoids to reuse the same vertex data.
  8209. vec4 p = vec4(u_radii * position, 1.0);
  8210. v_positionEC = (czm_modelView * p).xyz; // position in eye coordinates
  8211. gl_Position = czm_modelViewProjection * p; // position in clip coordinates
  8212. // With multi-frustum, when the ellipsoid primitive is positioned on the intersection of two frustums
  8213. // and close to terrain, the terrain (writes depth) in the closest frustum can overwrite part of the
  8214. // ellipsoid (does not write depth) that was rendered in the farther frustum.
  8215. //
  8216. // Here, we clamp the depth in the vertex shader to avoid being overwritten; however, this creates
  8217. // artifacts since some fragments can be alpha blended twice. This is solved by only rendering
  8218. // the ellipsoid in the closest frustum to the viewer.
  8219. gl_Position.z = clamp(gl_Position.z, czm_depthRange.near, czm_depthRange.far);
  8220. czm_vertexLogDepth();
  8221. }
  8222. `;var $yi=T(S(),1);/**
  8223. * @license
  8224. * Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.
  8225. *
  8226. * Redistribution and use in source and binary forms, with or without
  8227. * modification, are permitted provided that the following conditions
  8228. * are met:
  8229. * * Redistributions of source code must retain the above copyright
  8230. * notice, this list of conditions and the following disclaimer.
  8231. * * Redistributions in binary form must reproduce the above copyright
  8232. * notice, this list of conditions and the following disclaimer in the
  8233. * documentation and/or other materials provided with the distribution.
  8234. * * Neither the name of NVIDIA CORPORATION nor the names of its
  8235. * contributors may be used to endorse or promote products derived
  8236. * from this software without specific prior written permission.
  8237. *
  8238. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
  8239. * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  8240. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  8241. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  8242. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  8243. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  8244. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  8245. * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  8246. * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  8247. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  8248. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  8249. */var mv=`/**
  8250. * @license
  8251. * Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.
  8252. *
  8253. * Redistribution and use in source and binary forms, with or without
  8254. * modification, are permitted provided that the following conditions
  8255. * are met:
  8256. * * Redistributions of source code must retain the above copyright
  8257. * notice, this list of conditions and the following disclaimer.
  8258. * * Redistributions in binary form must reproduce the above copyright
  8259. * notice, this list of conditions and the following disclaimer in the
  8260. * documentation and/or other materials provided with the distribution.
  8261. * * Neither the name of NVIDIA CORPORATION nor the names of its
  8262. * contributors may be used to endorse or promote products derived
  8263. * from this software without specific prior written permission.
  8264. *
  8265. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS \`\`AS IS'' AND ANY
  8266. * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  8267. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  8268. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  8269. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  8270. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  8271. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  8272. * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  8273. * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  8274. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  8275. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  8276. */
  8277. // NVIDIA GameWorks Graphics Samples GitHub link: https://github.com/NVIDIAGameWorks/GraphicsSamples
  8278. // Original FXAA 3.11 shader link: https://github.com/NVIDIAGameWorks/GraphicsSamples/blob/master/samples/es3-kepler/FXAA/FXAA3_11.h
  8279. // Steps used to integrate into Cesium:
  8280. // * The following defines are set:
  8281. // #define FXAA_PC 1
  8282. // #define FXAA_WEBGL_1 1
  8283. // #define FXAA_GREEN_AS_LUMA 1
  8284. // #define FXAA_EARLY_EXIT 1
  8285. // #define FXAA_GLSL_120 1
  8286. // * All other preprocessor directives besides the FXAA_QUALITY__P* directives were removed.
  8287. // * Double underscores are invalid for preprocessor directives so replace them with a single underscore. Replace
  8288. // /FXAA_QUALITY__P(.*)/g with /FXAA_QUALITY__P$1/.
  8289. // * There are no implicit conversions from ivec* to vec* so replace:
  8290. // #define FxaaInt2 ivec2
  8291. // with
  8292. // #define FxaaInt2 vec2
  8293. // * The texture2DLod function is only available in vertex shaders so replace:
  8294. // #define FxaaTexTop(t, p) texture2DLod(t, p, 0.0)
  8295. // #define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0)
  8296. // with
  8297. // #define FxaaTexTop(t, p) texture(t, p)
  8298. // #define FxaaTexOff(t, p, o, r) texture(t, p + (o * r))
  8299. // * FXAA_QUALITY_PRESET is prepended in the javascript code. We may want to expose that setting in the future.
  8300. // * The following parameters to FxaaPixelShader are unused and can be removed:
  8301. // fxaaConsolePosPos
  8302. // fxaaConsoleRcpFrameOpt
  8303. // fxaaConsoleRcpFrameOpt2
  8304. // fxaaConsole360RcpFrameOpt2
  8305. // fxaaConsoleEdgeSharpness
  8306. // fxaaConsoleEdgeThreshold
  8307. // fxaaConsoleEdgeThresholdMi
  8308. // fxaaConsole360ConstDir
  8309. //
  8310. // Choose the quality preset.
  8311. // This needs to be compiled into the shader as it effects code.
  8312. // Best option to include multiple presets is to
  8313. // in each shader define the preset, then include this file.
  8314. //
  8315. // OPTIONS
  8316. // -----------------------------------------------------------------------
  8317. // 10 to 15 - default medium dither (10=fastest, 15=highest quality)
  8318. // 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality)
  8319. // 39 - no dither, very expensive
  8320. //
  8321. // NOTES
  8322. // -----------------------------------------------------------------------
  8323. // 12 = slightly faster then FXAA 3.9 and higher edge quality (default)
  8324. // 13 = about same speed as FXAA 3.9 and better than 12
  8325. // 23 = closest to FXAA 3.9 visually and performance wise
  8326. // _ = the lowest digit is directly related to performance
  8327. // _ = the highest digit is directly related to style
  8328. //
  8329. //#define FXAA_QUALITY_PRESET 12
  8330. #if (FXAA_QUALITY_PRESET == 10)
  8331. #define FXAA_QUALITY_PS 3
  8332. #define FXAA_QUALITY_P0 1.5
  8333. #define FXAA_QUALITY_P1 3.0
  8334. #define FXAA_QUALITY_P2 12.0
  8335. #endif
  8336. #if (FXAA_QUALITY_PRESET == 11)
  8337. #define FXAA_QUALITY_PS 4
  8338. #define FXAA_QUALITY_P0 1.0
  8339. #define FXAA_QUALITY_P1 1.5
  8340. #define FXAA_QUALITY_P2 3.0
  8341. #define FXAA_QUALITY_P3 12.0
  8342. #endif
  8343. #if (FXAA_QUALITY_PRESET == 12)
  8344. #define FXAA_QUALITY_PS 5
  8345. #define FXAA_QUALITY_P0 1.0
  8346. #define FXAA_QUALITY_P1 1.5
  8347. #define FXAA_QUALITY_P2 2.0
  8348. #define FXAA_QUALITY_P3 4.0
  8349. #define FXAA_QUALITY_P4 12.0
  8350. #endif
  8351. #if (FXAA_QUALITY_PRESET == 13)
  8352. #define FXAA_QUALITY_PS 6
  8353. #define FXAA_QUALITY_P0 1.0
  8354. #define FXAA_QUALITY_P1 1.5
  8355. #define FXAA_QUALITY_P2 2.0
  8356. #define FXAA_QUALITY_P3 2.0
  8357. #define FXAA_QUALITY_P4 4.0
  8358. #define FXAA_QUALITY_P5 12.0
  8359. #endif
  8360. #if (FXAA_QUALITY_PRESET == 14)
  8361. #define FXAA_QUALITY_PS 7
  8362. #define FXAA_QUALITY_P0 1.0
  8363. #define FXAA_QUALITY_P1 1.5
  8364. #define FXAA_QUALITY_P2 2.0
  8365. #define FXAA_QUALITY_P3 2.0
  8366. #define FXAA_QUALITY_P4 2.0
  8367. #define FXAA_QUALITY_P5 4.0
  8368. #define FXAA_QUALITY_P6 12.0
  8369. #endif
  8370. #if (FXAA_QUALITY_PRESET == 15)
  8371. #define FXAA_QUALITY_PS 8
  8372. #define FXAA_QUALITY_P0 1.0
  8373. #define FXAA_QUALITY_P1 1.5
  8374. #define FXAA_QUALITY_P2 2.0
  8375. #define FXAA_QUALITY_P3 2.0
  8376. #define FXAA_QUALITY_P4 2.0
  8377. #define FXAA_QUALITY_P5 2.0
  8378. #define FXAA_QUALITY_P6 4.0
  8379. #define FXAA_QUALITY_P7 12.0
  8380. #endif
  8381. #if (FXAA_QUALITY_PRESET == 20)
  8382. #define FXAA_QUALITY_PS 3
  8383. #define FXAA_QUALITY_P0 1.5
  8384. #define FXAA_QUALITY_P1 2.0
  8385. #define FXAA_QUALITY_P2 8.0
  8386. #endif
  8387. #if (FXAA_QUALITY_PRESET == 21)
  8388. #define FXAA_QUALITY_PS 4
  8389. #define FXAA_QUALITY_P0 1.0
  8390. #define FXAA_QUALITY_P1 1.5
  8391. #define FXAA_QUALITY_P2 2.0
  8392. #define FXAA_QUALITY_P3 8.0
  8393. #endif
  8394. #if (FXAA_QUALITY_PRESET == 22)
  8395. #define FXAA_QUALITY_PS 5
  8396. #define FXAA_QUALITY_P0 1.0
  8397. #define FXAA_QUALITY_P1 1.5
  8398. #define FXAA_QUALITY_P2 2.0
  8399. #define FXAA_QUALITY_P3 2.0
  8400. #define FXAA_QUALITY_P4 8.0
  8401. #endif
  8402. #if (FXAA_QUALITY_PRESET == 23)
  8403. #define FXAA_QUALITY_PS 6
  8404. #define FXAA_QUALITY_P0 1.0
  8405. #define FXAA_QUALITY_P1 1.5
  8406. #define FXAA_QUALITY_P2 2.0
  8407. #define FXAA_QUALITY_P3 2.0
  8408. #define FXAA_QUALITY_P4 2.0
  8409. #define FXAA_QUALITY_P5 8.0
  8410. #endif
  8411. #if (FXAA_QUALITY_PRESET == 24)
  8412. #define FXAA_QUALITY_PS 7
  8413. #define FXAA_QUALITY_P0 1.0
  8414. #define FXAA_QUALITY_P1 1.5
  8415. #define FXAA_QUALITY_P2 2.0
  8416. #define FXAA_QUALITY_P3 2.0
  8417. #define FXAA_QUALITY_P4 2.0
  8418. #define FXAA_QUALITY_P5 3.0
  8419. #define FXAA_QUALITY_P6 8.0
  8420. #endif
  8421. #if (FXAA_QUALITY_PRESET == 25)
  8422. #define FXAA_QUALITY_PS 8
  8423. #define FXAA_QUALITY_P0 1.0
  8424. #define FXAA_QUALITY_P1 1.5
  8425. #define FXAA_QUALITY_P2 2.0
  8426. #define FXAA_QUALITY_P3 2.0
  8427. #define FXAA_QUALITY_P4 2.0
  8428. #define FXAA_QUALITY_P5 2.0
  8429. #define FXAA_QUALITY_P6 4.0
  8430. #define FXAA_QUALITY_P7 8.0
  8431. #endif
  8432. #if (FXAA_QUALITY_PRESET == 26)
  8433. #define FXAA_QUALITY_PS 9
  8434. #define FXAA_QUALITY_P0 1.0
  8435. #define FXAA_QUALITY_P1 1.5
  8436. #define FXAA_QUALITY_P2 2.0
  8437. #define FXAA_QUALITY_P3 2.0
  8438. #define FXAA_QUALITY_P4 2.0
  8439. #define FXAA_QUALITY_P5 2.0
  8440. #define FXAA_QUALITY_P6 2.0
  8441. #define FXAA_QUALITY_P7 4.0
  8442. #define FXAA_QUALITY_P8 8.0
  8443. #endif
  8444. #if (FXAA_QUALITY_PRESET == 27)
  8445. #define FXAA_QUALITY_PS 10
  8446. #define FXAA_QUALITY_P0 1.0
  8447. #define FXAA_QUALITY_P1 1.5
  8448. #define FXAA_QUALITY_P2 2.0
  8449. #define FXAA_QUALITY_P3 2.0
  8450. #define FXAA_QUALITY_P4 2.0
  8451. #define FXAA_QUALITY_P5 2.0
  8452. #define FXAA_QUALITY_P6 2.0
  8453. #define FXAA_QUALITY_P7 2.0
  8454. #define FXAA_QUALITY_P8 4.0
  8455. #define FXAA_QUALITY_P9 8.0
  8456. #endif
  8457. #if (FXAA_QUALITY_PRESET == 28)
  8458. #define FXAA_QUALITY_PS 11
  8459. #define FXAA_QUALITY_P0 1.0
  8460. #define FXAA_QUALITY_P1 1.5
  8461. #define FXAA_QUALITY_P2 2.0
  8462. #define FXAA_QUALITY_P3 2.0
  8463. #define FXAA_QUALITY_P4 2.0
  8464. #define FXAA_QUALITY_P5 2.0
  8465. #define FXAA_QUALITY_P6 2.0
  8466. #define FXAA_QUALITY_P7 2.0
  8467. #define FXAA_QUALITY_P8 2.0
  8468. #define FXAA_QUALITY_P9 4.0
  8469. #define FXAA_QUALITY_P10 8.0
  8470. #endif
  8471. #if (FXAA_QUALITY_PRESET == 29)
  8472. #define FXAA_QUALITY_PS 12
  8473. #define FXAA_QUALITY_P0 1.0
  8474. #define FXAA_QUALITY_P1 1.5
  8475. #define FXAA_QUALITY_P2 2.0
  8476. #define FXAA_QUALITY_P3 2.0
  8477. #define FXAA_QUALITY_P4 2.0
  8478. #define FXAA_QUALITY_P5 2.0
  8479. #define FXAA_QUALITY_P6 2.0
  8480. #define FXAA_QUALITY_P7 2.0
  8481. #define FXAA_QUALITY_P8 2.0
  8482. #define FXAA_QUALITY_P9 2.0
  8483. #define FXAA_QUALITY_P10 4.0
  8484. #define FXAA_QUALITY_P11 8.0
  8485. #endif
  8486. #if (FXAA_QUALITY_PRESET == 39)
  8487. #define FXAA_QUALITY_PS 12
  8488. #define FXAA_QUALITY_P0 1.0
  8489. #define FXAA_QUALITY_P1 1.0
  8490. #define FXAA_QUALITY_P2 1.0
  8491. #define FXAA_QUALITY_P3 1.0
  8492. #define FXAA_QUALITY_P4 1.0
  8493. #define FXAA_QUALITY_P5 1.5
  8494. #define FXAA_QUALITY_P6 2.0
  8495. #define FXAA_QUALITY_P7 2.0
  8496. #define FXAA_QUALITY_P8 2.0
  8497. #define FXAA_QUALITY_P9 2.0
  8498. #define FXAA_QUALITY_P10 4.0
  8499. #define FXAA_QUALITY_P11 8.0
  8500. #endif
  8501. #define FxaaBool bool
  8502. #define FxaaFloat float
  8503. #define FxaaFloat2 vec2
  8504. #define FxaaFloat3 vec3
  8505. #define FxaaFloat4 vec4
  8506. #define FxaaHalf float
  8507. #define FxaaHalf2 vec2
  8508. #define FxaaHalf3 vec3
  8509. #define FxaaHalf4 vec4
  8510. #define FxaaInt2 vec2
  8511. #define FxaaTex sampler2D
  8512. #define FxaaSat(x) clamp(x, 0.0, 1.0)
  8513. #define FxaaTexTop(t, p) texture(t, p)
  8514. #define FxaaTexOff(t, p, o, r) texture(t, p + (o * r))
  8515. FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; }
  8516. FxaaFloat4 FxaaPixelShader(
  8517. //
  8518. // Use noperspective interpolation here (turn off perspective interpolation).
  8519. // {xy} = center of pixel
  8520. FxaaFloat2 pos,
  8521. //
  8522. // Input color texture.
  8523. // {rgb_} = color in linear or perceptual color space
  8524. // if (FXAA_GREEN_AS_LUMA == 0)
  8525. // {___a} = luma in perceptual color space (not linear)
  8526. FxaaTex tex,
  8527. //
  8528. // Only used on FXAA Quality.
  8529. // This must be from a constant/uniform.
  8530. // {x_} = 1.0/screenWidthInPixels
  8531. // {_y} = 1.0/screenHeightInPixels
  8532. FxaaFloat2 fxaaQualityRcpFrame,
  8533. //
  8534. // Only used on FXAA Quality.
  8535. // This used to be the FXAA_QUALITY_SUBPIX define.
  8536. // It is here now to allow easier tuning.
  8537. // Choose the amount of sub-pixel aliasing removal.
  8538. // This can effect sharpness.
  8539. // 1.00 - upper limit (softer)
  8540. // 0.75 - default amount of filtering
  8541. // 0.50 - lower limit (sharper, less sub-pixel aliasing removal)
  8542. // 0.25 - almost off
  8543. // 0.00 - completely off
  8544. FxaaFloat fxaaQualitySubpix,
  8545. //
  8546. // Only used on FXAA Quality.
  8547. // This used to be the FXAA_QUALITY_EDGE_THRESHOLD define.
  8548. // It is here now to allow easier tuning.
  8549. // The minimum amount of local contrast required to apply algorithm.
  8550. // 0.333 - too little (faster)
  8551. // 0.250 - low quality
  8552. // 0.166 - default
  8553. // 0.125 - high quality
  8554. // 0.063 - overkill (slower)
  8555. FxaaFloat fxaaQualityEdgeThreshold,
  8556. //
  8557. // Only used on FXAA Quality.
  8558. // This used to be the FXAA_QUALITY_EDGE_THRESHOLD_MIN define.
  8559. // It is here now to allow easier tuning.
  8560. // Trims the algorithm from processing darks.
  8561. // 0.0833 - upper limit (default, the start of visible unfiltered edges)
  8562. // 0.0625 - high quality (faster)
  8563. // 0.0312 - visible limit (slower)
  8564. // Special notes when using FXAA_GREEN_AS_LUMA,
  8565. // Likely want to set this to zero.
  8566. // As colors that are mostly not-green
  8567. // will appear very dark in the green channel!
  8568. // Tune by looking at mostly non-green content,
  8569. // then start at zero and increase until aliasing is a problem.
  8570. FxaaFloat fxaaQualityEdgeThresholdMin
  8571. ) {
  8572. /*--------------------------------------------------------------------------*/
  8573. FxaaFloat2 posM;
  8574. posM.x = pos.x;
  8575. posM.y = pos.y;
  8576. FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);
  8577. #define lumaM rgbyM.y
  8578. FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy));
  8579. FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy));
  8580. FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy));
  8581. FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy));
  8582. /*--------------------------------------------------------------------------*/
  8583. FxaaFloat maxSM = max(lumaS, lumaM);
  8584. FxaaFloat minSM = min(lumaS, lumaM);
  8585. FxaaFloat maxESM = max(lumaE, maxSM);
  8586. FxaaFloat minESM = min(lumaE, minSM);
  8587. FxaaFloat maxWN = max(lumaN, lumaW);
  8588. FxaaFloat minWN = min(lumaN, lumaW);
  8589. FxaaFloat rangeMax = max(maxWN, maxESM);
  8590. FxaaFloat rangeMin = min(minWN, minESM);
  8591. FxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;
  8592. FxaaFloat range = rangeMax - rangeMin;
  8593. FxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);
  8594. FxaaBool earlyExit = range < rangeMaxClamped;
  8595. /*--------------------------------------------------------------------------*/
  8596. if(earlyExit)
  8597. return rgbyM;
  8598. /*--------------------------------------------------------------------------*/
  8599. FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy));
  8600. FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy));
  8601. FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy));
  8602. FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));
  8603. /*--------------------------------------------------------------------------*/
  8604. FxaaFloat lumaNS = lumaN + lumaS;
  8605. FxaaFloat lumaWE = lumaW + lumaE;
  8606. FxaaFloat subpixRcpRange = 1.0/range;
  8607. FxaaFloat subpixNSWE = lumaNS + lumaWE;
  8608. FxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS;
  8609. FxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE;
  8610. /*--------------------------------------------------------------------------*/
  8611. FxaaFloat lumaNESE = lumaNE + lumaSE;
  8612. FxaaFloat lumaNWNE = lumaNW + lumaNE;
  8613. FxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE;
  8614. FxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE;
  8615. /*--------------------------------------------------------------------------*/
  8616. FxaaFloat lumaNWSW = lumaNW + lumaSW;
  8617. FxaaFloat lumaSWSE = lumaSW + lumaSE;
  8618. FxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);
  8619. FxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);
  8620. FxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;
  8621. FxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE;
  8622. FxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4;
  8623. FxaaFloat edgeVert = abs(edgeVert3) + edgeVert4;
  8624. /*--------------------------------------------------------------------------*/
  8625. FxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE;
  8626. FxaaFloat lengthSign = fxaaQualityRcpFrame.x;
  8627. FxaaBool horzSpan = edgeHorz >= edgeVert;
  8628. FxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;
  8629. /*--------------------------------------------------------------------------*/
  8630. if(!horzSpan) lumaN = lumaW;
  8631. if(!horzSpan) lumaS = lumaE;
  8632. if(horzSpan) lengthSign = fxaaQualityRcpFrame.y;
  8633. FxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM;
  8634. /*--------------------------------------------------------------------------*/
  8635. FxaaFloat gradientN = lumaN - lumaM;
  8636. FxaaFloat gradientS = lumaS - lumaM;
  8637. FxaaFloat lumaNN = lumaN + lumaM;
  8638. FxaaFloat lumaSS = lumaS + lumaM;
  8639. FxaaBool pairN = abs(gradientN) >= abs(gradientS);
  8640. FxaaFloat gradient = max(abs(gradientN), abs(gradientS));
  8641. if(pairN) lengthSign = -lengthSign;
  8642. FxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange);
  8643. /*--------------------------------------------------------------------------*/
  8644. FxaaFloat2 posB;
  8645. posB.x = posM.x;
  8646. posB.y = posM.y;
  8647. FxaaFloat2 offNP;
  8648. offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;
  8649. offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;
  8650. if(!horzSpan) posB.x += lengthSign * 0.5;
  8651. if( horzSpan) posB.y += lengthSign * 0.5;
  8652. /*--------------------------------------------------------------------------*/
  8653. FxaaFloat2 posN;
  8654. posN.x = posB.x - offNP.x * FXAA_QUALITY_P0;
  8655. posN.y = posB.y - offNP.y * FXAA_QUALITY_P0;
  8656. FxaaFloat2 posP;
  8657. posP.x = posB.x + offNP.x * FXAA_QUALITY_P0;
  8658. posP.y = posB.y + offNP.y * FXAA_QUALITY_P0;
  8659. FxaaFloat subpixD = ((-2.0)*subpixC) + 3.0;
  8660. FxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN));
  8661. FxaaFloat subpixE = subpixC * subpixC;
  8662. FxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP));
  8663. /*--------------------------------------------------------------------------*/
  8664. if(!pairN) lumaNN = lumaSS;
  8665. FxaaFloat gradientScaled = gradient * 1.0/4.0;
  8666. FxaaFloat lumaMM = lumaM - lumaNN * 0.5;
  8667. FxaaFloat subpixF = subpixD * subpixE;
  8668. FxaaBool lumaMLTZero = lumaMM < 0.0;
  8669. /*--------------------------------------------------------------------------*/
  8670. lumaEndN -= lumaNN * 0.5;
  8671. lumaEndP -= lumaNN * 0.5;
  8672. FxaaBool doneN = abs(lumaEndN) >= gradientScaled;
  8673. FxaaBool doneP = abs(lumaEndP) >= gradientScaled;
  8674. if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P1;
  8675. if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P1;
  8676. FxaaBool doneNP = (!doneN) || (!doneP);
  8677. if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P1;
  8678. if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P1;
  8679. /*--------------------------------------------------------------------------*/
  8680. if(doneNP) {
  8681. if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
  8682. if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
  8683. if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
  8684. if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
  8685. doneN = abs(lumaEndN) >= gradientScaled;
  8686. doneP = abs(lumaEndP) >= gradientScaled;
  8687. if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P2;
  8688. if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P2;
  8689. doneNP = (!doneN) || (!doneP);
  8690. if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P2;
  8691. if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P2;
  8692. /*--------------------------------------------------------------------------*/
  8693. #if (FXAA_QUALITY_PS > 3)
  8694. if(doneNP) {
  8695. if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
  8696. if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
  8697. if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
  8698. if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
  8699. doneN = abs(lumaEndN) >= gradientScaled;
  8700. doneP = abs(lumaEndP) >= gradientScaled;
  8701. if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P3;
  8702. if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P3;
  8703. doneNP = (!doneN) || (!doneP);
  8704. if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P3;
  8705. if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P3;
  8706. /*--------------------------------------------------------------------------*/
  8707. #if (FXAA_QUALITY_PS > 4)
  8708. if(doneNP) {
  8709. if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
  8710. if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
  8711. if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
  8712. if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
  8713. doneN = abs(lumaEndN) >= gradientScaled;
  8714. doneP = abs(lumaEndP) >= gradientScaled;
  8715. if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P4;
  8716. if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P4;
  8717. doneNP = (!doneN) || (!doneP);
  8718. if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P4;
  8719. if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P4;
  8720. /*--------------------------------------------------------------------------*/
  8721. #if (FXAA_QUALITY_PS > 5)
  8722. if(doneNP) {
  8723. if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
  8724. if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
  8725. if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
  8726. if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
  8727. doneN = abs(lumaEndN) >= gradientScaled;
  8728. doneP = abs(lumaEndP) >= gradientScaled;
  8729. if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P5;
  8730. if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P5;
  8731. doneNP = (!doneN) || (!doneP);
  8732. if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P5;
  8733. if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P5;
  8734. /*--------------------------------------------------------------------------*/
  8735. #if (FXAA_QUALITY_PS > 6)
  8736. if(doneNP) {
  8737. if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
  8738. if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
  8739. if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
  8740. if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
  8741. doneN = abs(lumaEndN) >= gradientScaled;
  8742. doneP = abs(lumaEndP) >= gradientScaled;
  8743. if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P6;
  8744. if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P6;
  8745. doneNP = (!doneN) || (!doneP);
  8746. if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P6;
  8747. if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P6;
  8748. /*--------------------------------------------------------------------------*/
  8749. #if (FXAA_QUALITY_PS > 7)
  8750. if(doneNP) {
  8751. if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
  8752. if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
  8753. if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
  8754. if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
  8755. doneN = abs(lumaEndN) >= gradientScaled;
  8756. doneP = abs(lumaEndP) >= gradientScaled;
  8757. if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P7;
  8758. if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P7;
  8759. doneNP = (!doneN) || (!doneP);
  8760. if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P7;
  8761. if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P7;
  8762. /*--------------------------------------------------------------------------*/
  8763. #if (FXAA_QUALITY_PS > 8)
  8764. if(doneNP) {
  8765. if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
  8766. if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
  8767. if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
  8768. if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
  8769. doneN = abs(lumaEndN) >= gradientScaled;
  8770. doneP = abs(lumaEndP) >= gradientScaled;
  8771. if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P8;
  8772. if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P8;
  8773. doneNP = (!doneN) || (!doneP);
  8774. if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P8;
  8775. if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P8;
  8776. /*--------------------------------------------------------------------------*/
  8777. #if (FXAA_QUALITY_PS > 9)
  8778. if(doneNP) {
  8779. if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
  8780. if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
  8781. if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
  8782. if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
  8783. doneN = abs(lumaEndN) >= gradientScaled;
  8784. doneP = abs(lumaEndP) >= gradientScaled;
  8785. if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P9;
  8786. if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P9;
  8787. doneNP = (!doneN) || (!doneP);
  8788. if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P9;
  8789. if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P9;
  8790. /*--------------------------------------------------------------------------*/
  8791. #if (FXAA_QUALITY_PS > 10)
  8792. if(doneNP) {
  8793. if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
  8794. if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
  8795. if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
  8796. if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
  8797. doneN = abs(lumaEndN) >= gradientScaled;
  8798. doneP = abs(lumaEndP) >= gradientScaled;
  8799. if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P10;
  8800. if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P10;
  8801. doneNP = (!doneN) || (!doneP);
  8802. if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P10;
  8803. if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P10;
  8804. /*--------------------------------------------------------------------------*/
  8805. #if (FXAA_QUALITY_PS > 11)
  8806. if(doneNP) {
  8807. if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
  8808. if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
  8809. if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
  8810. if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
  8811. doneN = abs(lumaEndN) >= gradientScaled;
  8812. doneP = abs(lumaEndP) >= gradientScaled;
  8813. if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P11;
  8814. if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P11;
  8815. doneNP = (!doneN) || (!doneP);
  8816. if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P11;
  8817. if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P11;
  8818. /*--------------------------------------------------------------------------*/
  8819. #if (FXAA_QUALITY_PS > 12)
  8820. if(doneNP) {
  8821. if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
  8822. if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
  8823. if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
  8824. if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
  8825. doneN = abs(lumaEndN) >= gradientScaled;
  8826. doneP = abs(lumaEndP) >= gradientScaled;
  8827. if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P12;
  8828. if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P12;
  8829. doneNP = (!doneN) || (!doneP);
  8830. if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P12;
  8831. if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P12;
  8832. /*--------------------------------------------------------------------------*/
  8833. }
  8834. #endif
  8835. /*--------------------------------------------------------------------------*/
  8836. }
  8837. #endif
  8838. /*--------------------------------------------------------------------------*/
  8839. }
  8840. #endif
  8841. /*--------------------------------------------------------------------------*/
  8842. }
  8843. #endif
  8844. /*--------------------------------------------------------------------------*/
  8845. }
  8846. #endif
  8847. /*--------------------------------------------------------------------------*/
  8848. }
  8849. #endif
  8850. /*--------------------------------------------------------------------------*/
  8851. }
  8852. #endif
  8853. /*--------------------------------------------------------------------------*/
  8854. }
  8855. #endif
  8856. /*--------------------------------------------------------------------------*/
  8857. }
  8858. #endif
  8859. /*--------------------------------------------------------------------------*/
  8860. }
  8861. #endif
  8862. /*--------------------------------------------------------------------------*/
  8863. }
  8864. /*--------------------------------------------------------------------------*/
  8865. FxaaFloat dstN = posM.x - posN.x;
  8866. FxaaFloat dstP = posP.x - posM.x;
  8867. if(!horzSpan) dstN = posM.y - posN.y;
  8868. if(!horzSpan) dstP = posP.y - posM.y;
  8869. /*--------------------------------------------------------------------------*/
  8870. FxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;
  8871. FxaaFloat spanLength = (dstP + dstN);
  8872. FxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;
  8873. FxaaFloat spanLengthRcp = 1.0/spanLength;
  8874. /*--------------------------------------------------------------------------*/
  8875. FxaaBool directionN = dstN < dstP;
  8876. FxaaFloat dst = min(dstN, dstP);
  8877. FxaaBool goodSpan = directionN ? goodSpanN : goodSpanP;
  8878. FxaaFloat subpixG = subpixF * subpixF;
  8879. FxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5;
  8880. FxaaFloat subpixH = subpixG * fxaaQualitySubpix;
  8881. /*--------------------------------------------------------------------------*/
  8882. FxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0;
  8883. FxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH);
  8884. if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;
  8885. if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;
  8886. return FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM);
  8887. }
  8888. `;var tgi=T(S(),1),hv=`uniform vec4 u_initialColor;
  8889. #if TEXTURE_UNITS > 0
  8890. uniform sampler2D u_dayTextures[TEXTURE_UNITS];
  8891. uniform vec4 u_dayTextureTranslationAndScale[TEXTURE_UNITS];
  8892. uniform bool u_dayTextureUseWebMercatorT[TEXTURE_UNITS];
  8893. #ifdef APPLY_ALPHA
  8894. uniform float u_dayTextureAlpha[TEXTURE_UNITS];
  8895. #endif
  8896. #ifdef APPLY_DAY_NIGHT_ALPHA
  8897. uniform float u_dayTextureNightAlpha[TEXTURE_UNITS];
  8898. uniform float u_dayTextureDayAlpha[TEXTURE_UNITS];
  8899. #endif
  8900. #ifdef APPLY_SPLIT
  8901. uniform float u_dayTextureSplit[TEXTURE_UNITS];
  8902. #endif
  8903. #ifdef APPLY_BRIGHTNESS
  8904. uniform float u_dayTextureBrightness[TEXTURE_UNITS];
  8905. #endif
  8906. #ifdef APPLY_CONTRAST
  8907. uniform float u_dayTextureContrast[TEXTURE_UNITS];
  8908. #endif
  8909. #ifdef APPLY_HUE
  8910. uniform float u_dayTextureHue[TEXTURE_UNITS];
  8911. #endif
  8912. #ifdef APPLY_SATURATION
  8913. uniform float u_dayTextureSaturation[TEXTURE_UNITS];
  8914. #endif
  8915. #ifdef APPLY_GAMMA
  8916. uniform float u_dayTextureOneOverGamma[TEXTURE_UNITS];
  8917. #endif
  8918. #ifdef APPLY_IMAGERY_CUTOUT
  8919. uniform vec4 u_dayTextureCutoutRectangles[TEXTURE_UNITS];
  8920. #endif
  8921. #ifdef APPLY_COLOR_TO_ALPHA
  8922. uniform vec4 u_colorsToAlpha[TEXTURE_UNITS];
  8923. #endif
  8924. uniform vec4 u_dayTextureTexCoordsRectangle[TEXTURE_UNITS];
  8925. #endif
  8926. #ifdef SHOW_REFLECTIVE_OCEAN
  8927. uniform sampler2D u_waterMask;
  8928. uniform vec4 u_waterMaskTranslationAndScale;
  8929. uniform float u_zoomedOutOceanSpecularIntensity;
  8930. #endif
  8931. #ifdef SHOW_OCEAN_WAVES
  8932. uniform sampler2D u_oceanNormalMap;
  8933. #endif
  8934. #if defined(ENABLE_DAYNIGHT_SHADING) || defined(GROUND_ATMOSPHERE)
  8935. uniform vec2 u_lightingFadeDistance;
  8936. #endif
  8937. #ifdef TILE_LIMIT_RECTANGLE
  8938. uniform vec4 u_cartographicLimitRectangle;
  8939. #endif
  8940. #ifdef GROUND_ATMOSPHERE
  8941. uniform vec2 u_nightFadeDistance;
  8942. #endif
  8943. #ifdef ENABLE_CLIPPING_PLANES
  8944. uniform highp sampler2D u_clippingPlanes;
  8945. uniform mat4 u_clippingPlanesMatrix;
  8946. uniform vec4 u_clippingPlanesEdgeStyle;
  8947. #endif
  8948. #if defined(GROUND_ATMOSPHERE) || defined(FOG) && defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_VERTEX_LIGHTING) || defined(ENABLE_DAYNIGHT_SHADING))
  8949. uniform float u_minimumBrightness;
  8950. #endif
  8951. #ifdef COLOR_CORRECT
  8952. uniform vec3 u_hsbShift; // Hue, saturation, brightness
  8953. #endif
  8954. #ifdef HIGHLIGHT_FILL_TILE
  8955. uniform vec4 u_fillHighlightColor;
  8956. #endif
  8957. #ifdef TRANSLUCENT
  8958. uniform vec4 u_frontFaceAlphaByDistance;
  8959. uniform vec4 u_backFaceAlphaByDistance;
  8960. uniform vec4 u_translucencyRectangle;
  8961. #endif
  8962. #ifdef UNDERGROUND_COLOR
  8963. uniform vec4 u_undergroundColor;
  8964. uniform vec4 u_undergroundColorAlphaByDistance;
  8965. #endif
  8966. #ifdef ENABLE_VERTEX_LIGHTING
  8967. uniform float u_lambertDiffuseMultiplier;
  8968. uniform float u_vertexShadowDarkness;
  8969. #endif
  8970. in vec3 v_positionMC;
  8971. in vec3 v_positionEC;
  8972. in vec3 v_textureCoordinates;
  8973. in vec3 v_normalMC;
  8974. in vec3 v_normalEC;
  8975. #ifdef APPLY_MATERIAL
  8976. in float v_height;
  8977. in float v_slope;
  8978. in float v_aspect;
  8979. #endif
  8980. #if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)
  8981. in float v_distance;
  8982. #endif
  8983. #if defined(GROUND_ATMOSPHERE) || defined(FOG)
  8984. in vec3 v_atmosphereRayleighColor;
  8985. in vec3 v_atmosphereMieColor;
  8986. in float v_atmosphereOpacity;
  8987. #endif
  8988. #if defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)
  8989. float interpolateByDistance(vec4 nearFarScalar, float distance)
  8990. {
  8991. float startDistance = nearFarScalar.x;
  8992. float startValue = nearFarScalar.y;
  8993. float endDistance = nearFarScalar.z;
  8994. float endValue = nearFarScalar.w;
  8995. float t = clamp((distance - startDistance) / (endDistance - startDistance), 0.0, 1.0);
  8996. return mix(startValue, endValue, t);
  8997. }
  8998. #endif
  8999. #if defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT) || defined(APPLY_MATERIAL)
  9000. vec4 alphaBlend(vec4 sourceColor, vec4 destinationColor)
  9001. {
  9002. return sourceColor * vec4(sourceColor.aaa, 1.0) + destinationColor * (1.0 - sourceColor.a);
  9003. }
  9004. #endif
  9005. #ifdef TRANSLUCENT
  9006. bool inTranslucencyRectangle()
  9007. {
  9008. return
  9009. v_textureCoordinates.x > u_translucencyRectangle.x &&
  9010. v_textureCoordinates.x < u_translucencyRectangle.z &&
  9011. v_textureCoordinates.y > u_translucencyRectangle.y &&
  9012. v_textureCoordinates.y < u_translucencyRectangle.w;
  9013. }
  9014. #endif
  9015. vec4 sampleAndBlend(
  9016. vec4 previousColor,
  9017. sampler2D textureToSample,
  9018. vec2 tileTextureCoordinates,
  9019. vec4 textureCoordinateRectangle,
  9020. vec4 textureCoordinateTranslationAndScale,
  9021. float textureAlpha,
  9022. float textureNightAlpha,
  9023. float textureDayAlpha,
  9024. float textureBrightness,
  9025. float textureContrast,
  9026. float textureHue,
  9027. float textureSaturation,
  9028. float textureOneOverGamma,
  9029. float split,
  9030. vec4 colorToAlpha,
  9031. float nightBlend)
  9032. {
  9033. // This crazy step stuff sets the alpha to 0.0 if this following condition is true:
  9034. // tileTextureCoordinates.s < textureCoordinateRectangle.s ||
  9035. // tileTextureCoordinates.s > textureCoordinateRectangle.p ||
  9036. // tileTextureCoordinates.t < textureCoordinateRectangle.t ||
  9037. // tileTextureCoordinates.t > textureCoordinateRectangle.q
  9038. // In other words, the alpha is zero if the fragment is outside the rectangle
  9039. // covered by this texture. Would an actual 'if' yield better performance?
  9040. vec2 alphaMultiplier = step(textureCoordinateRectangle.st, tileTextureCoordinates);
  9041. textureAlpha = textureAlpha * alphaMultiplier.x * alphaMultiplier.y;
  9042. alphaMultiplier = step(vec2(0.0), textureCoordinateRectangle.pq - tileTextureCoordinates);
  9043. textureAlpha = textureAlpha * alphaMultiplier.x * alphaMultiplier.y;
  9044. #if defined(APPLY_DAY_NIGHT_ALPHA) && defined(ENABLE_DAYNIGHT_SHADING)
  9045. textureAlpha *= mix(textureDayAlpha, textureNightAlpha, nightBlend);
  9046. #endif
  9047. vec2 translation = textureCoordinateTranslationAndScale.xy;
  9048. vec2 scale = textureCoordinateTranslationAndScale.zw;
  9049. vec2 textureCoordinates = tileTextureCoordinates * scale + translation;
  9050. vec4 value = texture(textureToSample, textureCoordinates);
  9051. vec3 color = value.rgb;
  9052. float alpha = value.a;
  9053. #ifdef APPLY_COLOR_TO_ALPHA
  9054. vec3 colorDiff = abs(color.rgb - colorToAlpha.rgb);
  9055. colorDiff.r = max(max(colorDiff.r, colorDiff.g), colorDiff.b);
  9056. alpha = czm_branchFreeTernary(colorDiff.r < colorToAlpha.a, 0.0, alpha);
  9057. #endif
  9058. #if !defined(APPLY_GAMMA)
  9059. vec4 tempColor = czm_gammaCorrect(vec4(color, alpha));
  9060. color = tempColor.rgb;
  9061. alpha = tempColor.a;
  9062. #else
  9063. color = pow(color, vec3(textureOneOverGamma));
  9064. #endif
  9065. #ifdef APPLY_SPLIT
  9066. float splitPosition = czm_splitPosition;
  9067. // Split to the left
  9068. if (split < 0.0 && gl_FragCoord.x > splitPosition) {
  9069. alpha = 0.0;
  9070. }
  9071. // Split to the right
  9072. else if (split > 0.0 && gl_FragCoord.x < splitPosition) {
  9073. alpha = 0.0;
  9074. }
  9075. #endif
  9076. #ifdef APPLY_BRIGHTNESS
  9077. color = mix(vec3(0.0), color, textureBrightness);
  9078. #endif
  9079. #ifdef APPLY_CONTRAST
  9080. color = mix(vec3(0.5), color, textureContrast);
  9081. #endif
  9082. #ifdef APPLY_HUE
  9083. color = czm_hue(color, textureHue);
  9084. #endif
  9085. #ifdef APPLY_SATURATION
  9086. color = czm_saturation(color, textureSaturation);
  9087. #endif
  9088. float sourceAlpha = alpha * textureAlpha;
  9089. float outAlpha = mix(previousColor.a, 1.0, sourceAlpha);
  9090. outAlpha += sign(outAlpha) - 1.0;
  9091. vec3 outColor = mix(previousColor.rgb * previousColor.a, color, sourceAlpha) / outAlpha;
  9092. // When rendering imagery for a tile in multiple passes,
  9093. // some GPU/WebGL implementation combinations will not blend fragments in
  9094. // additional passes correctly if their computation includes an unmasked
  9095. // divide-by-zero operation,
  9096. // even if it's not in the output or if the output has alpha zero.
  9097. //
  9098. // For example, without sanitization for outAlpha,
  9099. // this renders without artifacts:
  9100. // if (outAlpha == 0.0) { outColor = vec3(0.0); }
  9101. //
  9102. // but using czm_branchFreeTernary will cause portions of the tile that are
  9103. // alpha-zero in the additional pass to render as black instead of blending
  9104. // with the previous pass:
  9105. // outColor = czm_branchFreeTernary(outAlpha == 0.0, vec3(0.0), outColor);
  9106. //
  9107. // So instead, sanitize against divide-by-zero,
  9108. // store this state on the sign of outAlpha, and correct on return.
  9109. return vec4(outColor, max(outAlpha, 0.0));
  9110. }
  9111. vec3 colorCorrect(vec3 rgb) {
  9112. #ifdef COLOR_CORRECT
  9113. // Convert rgb color to hsb
  9114. vec3 hsb = czm_RGBToHSB(rgb);
  9115. // Perform hsb shift
  9116. hsb.x += u_hsbShift.x; // hue
  9117. hsb.y = clamp(hsb.y + u_hsbShift.y, 0.0, 1.0); // saturation
  9118. hsb.z = hsb.z > czm_epsilon7 ? hsb.z + u_hsbShift.z : 0.0; // brightness
  9119. // Convert shifted hsb back to rgb
  9120. rgb = czm_HSBToRGB(hsb);
  9121. #endif
  9122. return rgb;
  9123. }
  9124. vec4 computeDayColor(vec4 initialColor, vec3 textureCoordinates, float nightBlend);
  9125. vec4 computeWaterColor(vec3 positionEyeCoordinates, vec2 textureCoordinates, mat3 enuToEye, vec4 imageryColor, float specularMapValue, float fade);
  9126. const float fExposure = 2.0;
  9127. vec3 computeEllipsoidPosition()
  9128. {
  9129. float mpp = czm_metersPerPixel(vec4(0.0, 0.0, -czm_currentFrustum.x, 1.0), 1.0);
  9130. vec2 xy = gl_FragCoord.xy / czm_viewport.zw * 2.0 - vec2(1.0);
  9131. xy *= czm_viewport.zw * mpp * 0.5;
  9132. vec3 direction = normalize(vec3(xy, -czm_currentFrustum.x));
  9133. czm_ray ray = czm_ray(vec3(0.0), direction);
  9134. vec3 ellipsoid_center = czm_view[3].xyz;
  9135. czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid_center, czm_ellipsoidInverseRadii);
  9136. vec3 ellipsoidPosition = czm_pointAlongRay(ray, intersection.start);
  9137. return (czm_inverseView * vec4(ellipsoidPosition, 1.0)).xyz;
  9138. }
  9139. void main()
  9140. {
  9141. #ifdef TILE_LIMIT_RECTANGLE
  9142. if (v_textureCoordinates.x < u_cartographicLimitRectangle.x || u_cartographicLimitRectangle.z < v_textureCoordinates.x ||
  9143. v_textureCoordinates.y < u_cartographicLimitRectangle.y || u_cartographicLimitRectangle.w < v_textureCoordinates.y)
  9144. {
  9145. discard;
  9146. }
  9147. #endif
  9148. #ifdef ENABLE_CLIPPING_PLANES
  9149. float clipDistance = clip(gl_FragCoord, u_clippingPlanes, u_clippingPlanesMatrix);
  9150. #endif
  9151. #if defined(SHOW_REFLECTIVE_OCEAN) || defined(ENABLE_DAYNIGHT_SHADING) || defined(HDR)
  9152. vec3 normalMC = czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), vec3(1.0)); // normalized surface normal in model coordinates
  9153. vec3 normalEC = czm_normal3D * normalMC; // normalized surface normal in eye coordinates
  9154. #endif
  9155. #if defined(APPLY_DAY_NIGHT_ALPHA) && defined(ENABLE_DAYNIGHT_SHADING)
  9156. float nightBlend = 1.0 - clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * 5.0, 0.0, 1.0);
  9157. #else
  9158. float nightBlend = 0.0;
  9159. #endif
  9160. // The clamp below works around an apparent bug in Chrome Canary v23.0.1241.0
  9161. // where the fragment shader sees textures coordinates < 0.0 and > 1.0 for the
  9162. // fragments on the edges of tiles even though the vertex shader is outputting
  9163. // coordinates strictly in the 0-1 range.
  9164. vec4 color = computeDayColor(u_initialColor, clamp(v_textureCoordinates, 0.0, 1.0), nightBlend);
  9165. #ifdef SHOW_TILE_BOUNDARIES
  9166. if (v_textureCoordinates.x < (1.0/256.0) || v_textureCoordinates.x > (255.0/256.0) ||
  9167. v_textureCoordinates.y < (1.0/256.0) || v_textureCoordinates.y > (255.0/256.0))
  9168. {
  9169. color = vec4(1.0, 0.0, 0.0, 1.0);
  9170. }
  9171. #endif
  9172. #if defined(ENABLE_DAYNIGHT_SHADING) || defined(GROUND_ATMOSPHERE)
  9173. float cameraDist;
  9174. if (czm_sceneMode == czm_sceneMode2D)
  9175. {
  9176. cameraDist = max(czm_frustumPlanes.x - czm_frustumPlanes.y, czm_frustumPlanes.w - czm_frustumPlanes.z) * 0.5;
  9177. }
  9178. else if (czm_sceneMode == czm_sceneModeColumbusView)
  9179. {
  9180. cameraDist = -czm_view[3].z;
  9181. }
  9182. else
  9183. {
  9184. cameraDist = length(czm_view[3]);
  9185. }
  9186. float fadeOutDist = u_lightingFadeDistance.x;
  9187. float fadeInDist = u_lightingFadeDistance.y;
  9188. if (czm_sceneMode != czm_sceneMode3D) {
  9189. vec3 radii = czm_ellipsoidRadii;
  9190. float maxRadii = max(radii.x, max(radii.y, radii.z));
  9191. fadeOutDist -= maxRadii;
  9192. fadeInDist -= maxRadii;
  9193. }
  9194. float fade = clamp((cameraDist - fadeOutDist) / (fadeInDist - fadeOutDist), 0.0, 1.0);
  9195. #else
  9196. float fade = 0.0;
  9197. #endif
  9198. #ifdef SHOW_REFLECTIVE_OCEAN
  9199. vec2 waterMaskTranslation = u_waterMaskTranslationAndScale.xy;
  9200. vec2 waterMaskScale = u_waterMaskTranslationAndScale.zw;
  9201. vec2 waterMaskTextureCoordinates = v_textureCoordinates.xy * waterMaskScale + waterMaskTranslation;
  9202. waterMaskTextureCoordinates.y = 1.0 - waterMaskTextureCoordinates.y;
  9203. float mask = texture(u_waterMask, waterMaskTextureCoordinates).r;
  9204. if (mask > 0.0)
  9205. {
  9206. mat3 enuToEye = czm_eastNorthUpToEyeCoordinates(v_positionMC, normalEC);
  9207. vec2 ellipsoidTextureCoordinates = czm_ellipsoidWgs84TextureCoordinates(normalMC);
  9208. vec2 ellipsoidFlippedTextureCoordinates = czm_ellipsoidWgs84TextureCoordinates(normalMC.zyx);
  9209. vec2 textureCoordinates = mix(ellipsoidTextureCoordinates, ellipsoidFlippedTextureCoordinates, czm_morphTime * smoothstep(0.9, 0.95, normalMC.z));
  9210. color = computeWaterColor(v_positionEC, textureCoordinates, enuToEye, color, mask, fade);
  9211. }
  9212. #endif
  9213. #ifdef APPLY_MATERIAL
  9214. czm_materialInput materialInput;
  9215. materialInput.st = v_textureCoordinates.st;
  9216. materialInput.normalEC = normalize(v_normalEC);
  9217. materialInput.positionToEyeEC = -v_positionEC;
  9218. materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(v_positionMC, normalize(v_normalEC));
  9219. materialInput.slope = v_slope;
  9220. materialInput.height = v_height;
  9221. materialInput.aspect = v_aspect;
  9222. czm_material material = czm_getMaterial(materialInput);
  9223. vec4 materialColor = vec4(material.diffuse, material.alpha);
  9224. color = alphaBlend(materialColor, color);
  9225. #endif
  9226. #ifdef ENABLE_VERTEX_LIGHTING
  9227. float diffuseIntensity = clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalize(v_normalEC)) * u_lambertDiffuseMultiplier + u_vertexShadowDarkness, 0.0, 1.0);
  9228. vec4 finalColor = vec4(color.rgb * czm_lightColor * diffuseIntensity, color.a);
  9229. #elif defined(ENABLE_DAYNIGHT_SHADING)
  9230. float diffuseIntensity = clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * 5.0 + 0.3, 0.0, 1.0);
  9231. diffuseIntensity = mix(1.0, diffuseIntensity, fade);
  9232. vec4 finalColor = vec4(color.rgb * czm_lightColor * diffuseIntensity, color.a);
  9233. #else
  9234. vec4 finalColor = color;
  9235. #endif
  9236. #ifdef ENABLE_CLIPPING_PLANES
  9237. vec4 clippingPlanesEdgeColor = vec4(1.0);
  9238. clippingPlanesEdgeColor.rgb = u_clippingPlanesEdgeStyle.rgb;
  9239. float clippingPlanesEdgeWidth = u_clippingPlanesEdgeStyle.a;
  9240. if (clipDistance < clippingPlanesEdgeWidth)
  9241. {
  9242. finalColor = clippingPlanesEdgeColor;
  9243. }
  9244. #endif
  9245. #ifdef HIGHLIGHT_FILL_TILE
  9246. finalColor = vec4(mix(finalColor.rgb, u_fillHighlightColor.rgb, u_fillHighlightColor.a), finalColor.a);
  9247. #endif
  9248. #if defined(DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN)
  9249. vec3 atmosphereLightDirection = czm_sunDirectionWC;
  9250. #else
  9251. vec3 atmosphereLightDirection = czm_lightDirectionWC;
  9252. #endif
  9253. #if defined(GROUND_ATMOSPHERE) || defined(FOG)
  9254. if (!czm_backFacing())
  9255. {
  9256. bool dynamicLighting = false;
  9257. #if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_DAYNIGHT_SHADING) || defined(ENABLE_VERTEX_LIGHTING))
  9258. dynamicLighting = true;
  9259. #endif
  9260. vec3 rayleighColor;
  9261. vec3 mieColor;
  9262. float opacity;
  9263. vec3 positionWC;
  9264. vec3 lightDirection;
  9265. // When the camera is far away (camera distance > nightFadeOutDistance), the scattering is computed in the fragment shader.
  9266. // Otherwise, the scattering is computed in the vertex shader.
  9267. #ifdef PER_FRAGMENT_GROUND_ATMOSPHERE
  9268. positionWC = computeEllipsoidPosition();
  9269. lightDirection = czm_branchFreeTernary(dynamicLighting, atmosphereLightDirection, normalize(positionWC));
  9270. computeAtmosphereScattering(
  9271. positionWC,
  9272. lightDirection,
  9273. rayleighColor,
  9274. mieColor,
  9275. opacity
  9276. );
  9277. #else
  9278. positionWC = v_positionMC;
  9279. lightDirection = czm_branchFreeTernary(dynamicLighting, atmosphereLightDirection, normalize(positionWC));
  9280. rayleighColor = v_atmosphereRayleighColor;
  9281. mieColor = v_atmosphereMieColor;
  9282. opacity = v_atmosphereOpacity;
  9283. #endif
  9284. rayleighColor = colorCorrect(rayleighColor);
  9285. mieColor = colorCorrect(mieColor);
  9286. vec4 groundAtmosphereColor = computeAtmosphereColor(positionWC, lightDirection, rayleighColor, mieColor, opacity);
  9287. // Fog is applied to tiles selected for fog, close to the Earth.
  9288. #ifdef FOG
  9289. vec3 fogColor = groundAtmosphereColor.rgb;
  9290. // If there is lighting, apply that to the fog.
  9291. #if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_VERTEX_LIGHTING) || defined(ENABLE_DAYNIGHT_SHADING))
  9292. float darken = clamp(dot(normalize(czm_viewerPositionWC), atmosphereLightDirection), u_minimumBrightness, 1.0);
  9293. fogColor *= darken;
  9294. #endif
  9295. #ifndef HDR
  9296. fogColor.rgb = czm_acesTonemapping(fogColor.rgb);
  9297. fogColor.rgb = czm_inverseGamma(fogColor.rgb);
  9298. #endif
  9299. const float modifier = 0.15;
  9300. finalColor = vec4(czm_fog(v_distance, finalColor.rgb, fogColor.rgb, modifier), finalColor.a);
  9301. #else
  9302. // The transmittance is based on optical depth i.e. the length of segment of the ray inside the atmosphere.
  9303. // This value is larger near the "circumference", as it is further away from the camera. We use it to
  9304. // brighten up that area of the ground atmosphere.
  9305. const float transmittanceModifier = 0.5;
  9306. float transmittance = transmittanceModifier + clamp(1.0 - groundAtmosphereColor.a, 0.0, 1.0);
  9307. vec3 finalAtmosphereColor = finalColor.rgb + groundAtmosphereColor.rgb * transmittance;
  9308. #if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_VERTEX_LIGHTING) || defined(ENABLE_DAYNIGHT_SHADING))
  9309. float fadeInDist = u_nightFadeDistance.x;
  9310. float fadeOutDist = u_nightFadeDistance.y;
  9311. float sunlitAtmosphereIntensity = clamp((cameraDist - fadeOutDist) / (fadeInDist - fadeOutDist), 0.05, 1.0);
  9312. float darken = clamp(dot(normalize(positionWC), atmosphereLightDirection), 0.0, 1.0);
  9313. vec3 darkenendGroundAtmosphereColor = mix(groundAtmosphereColor.rgb, finalAtmosphereColor.rgb, darken);
  9314. finalAtmosphereColor = mix(darkenendGroundAtmosphereColor, finalAtmosphereColor, sunlitAtmosphereIntensity);
  9315. #endif
  9316. #ifndef HDR
  9317. finalAtmosphereColor.rgb = vec3(1.0) - exp(-fExposure * finalAtmosphereColor.rgb);
  9318. #else
  9319. finalAtmosphereColor.rgb = czm_saturation(finalAtmosphereColor.rgb, 1.6);
  9320. #endif
  9321. finalColor.rgb = mix(finalColor.rgb, finalAtmosphereColor.rgb, fade);
  9322. #endif
  9323. }
  9324. #endif
  9325. #ifdef UNDERGROUND_COLOR
  9326. if (czm_backFacing())
  9327. {
  9328. float distanceFromEllipsoid = max(czm_eyeHeight, 0.0);
  9329. float distance = max(v_distance - distanceFromEllipsoid, 0.0);
  9330. float blendAmount = interpolateByDistance(u_undergroundColorAlphaByDistance, distance);
  9331. vec4 undergroundColor = vec4(u_undergroundColor.rgb, u_undergroundColor.a * blendAmount);
  9332. finalColor = alphaBlend(undergroundColor, finalColor);
  9333. }
  9334. #endif
  9335. #ifdef TRANSLUCENT
  9336. if (inTranslucencyRectangle())
  9337. {
  9338. vec4 alphaByDistance = gl_FrontFacing ? u_frontFaceAlphaByDistance : u_backFaceAlphaByDistance;
  9339. finalColor.a *= interpolateByDistance(alphaByDistance, v_distance);
  9340. }
  9341. #endif
  9342. out_FragColor = finalColor;
  9343. }
  9344. #ifdef SHOW_REFLECTIVE_OCEAN
  9345. float waveFade(float edge0, float edge1, float x)
  9346. {
  9347. float y = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);
  9348. return pow(1.0 - y, 5.0);
  9349. }
  9350. float linearFade(float edge0, float edge1, float x)
  9351. {
  9352. return clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);
  9353. }
  9354. // Based on water rendering by Jonas Wagner:
  9355. // http://29a.ch/2012/7/19/webgl-terrain-rendering-water-fog
  9356. // low altitude wave settings
  9357. const float oceanFrequencyLowAltitude = 825000.0;
  9358. const float oceanAnimationSpeedLowAltitude = 0.004;
  9359. const float oceanOneOverAmplitudeLowAltitude = 1.0 / 2.0;
  9360. const float oceanSpecularIntensity = 0.5;
  9361. // high altitude wave settings
  9362. const float oceanFrequencyHighAltitude = 125000.0;
  9363. const float oceanAnimationSpeedHighAltitude = 0.008;
  9364. const float oceanOneOverAmplitudeHighAltitude = 1.0 / 2.0;
  9365. vec4 computeWaterColor(vec3 positionEyeCoordinates, vec2 textureCoordinates, mat3 enuToEye, vec4 imageryColor, float maskValue, float fade)
  9366. {
  9367. vec3 positionToEyeEC = -positionEyeCoordinates;
  9368. float positionToEyeECLength = length(positionToEyeEC);
  9369. // The double normalize below works around a bug in Firefox on Android devices.
  9370. vec3 normalizedPositionToEyeEC = normalize(normalize(positionToEyeEC));
  9371. // Fade out the waves as the camera moves far from the surface.
  9372. float waveIntensity = waveFade(70000.0, 1000000.0, positionToEyeECLength);
  9373. #ifdef SHOW_OCEAN_WAVES
  9374. // high altitude waves
  9375. float time = czm_frameNumber * oceanAnimationSpeedHighAltitude;
  9376. vec4 noise = czm_getWaterNoise(u_oceanNormalMap, textureCoordinates * oceanFrequencyHighAltitude, time, 0.0);
  9377. vec3 normalTangentSpaceHighAltitude = vec3(noise.xy, noise.z * oceanOneOverAmplitudeHighAltitude);
  9378. // low altitude waves
  9379. time = czm_frameNumber * oceanAnimationSpeedLowAltitude;
  9380. noise = czm_getWaterNoise(u_oceanNormalMap, textureCoordinates * oceanFrequencyLowAltitude, time, 0.0);
  9381. vec3 normalTangentSpaceLowAltitude = vec3(noise.xy, noise.z * oceanOneOverAmplitudeLowAltitude);
  9382. // blend the 2 wave layers based on distance to surface
  9383. float highAltitudeFade = linearFade(0.0, 60000.0, positionToEyeECLength);
  9384. float lowAltitudeFade = 1.0 - linearFade(20000.0, 60000.0, positionToEyeECLength);
  9385. vec3 normalTangentSpace =
  9386. (highAltitudeFade * normalTangentSpaceHighAltitude) +
  9387. (lowAltitudeFade * normalTangentSpaceLowAltitude);
  9388. normalTangentSpace = normalize(normalTangentSpace);
  9389. // fade out the normal perturbation as we move farther from the water surface
  9390. normalTangentSpace.xy *= waveIntensity;
  9391. normalTangentSpace = normalize(normalTangentSpace);
  9392. #else
  9393. vec3 normalTangentSpace = vec3(0.0, 0.0, 1.0);
  9394. #endif
  9395. vec3 normalEC = enuToEye * normalTangentSpace;
  9396. const vec3 waveHighlightColor = vec3(0.3, 0.45, 0.6);
  9397. // Use diffuse light to highlight the waves
  9398. float diffuseIntensity = czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * maskValue;
  9399. vec3 diffuseHighlight = waveHighlightColor * diffuseIntensity * (1.0 - fade);
  9400. #ifdef SHOW_OCEAN_WAVES
  9401. // Where diffuse light is low or non-existent, use wave highlights based solely on
  9402. // the wave bumpiness and no particular light direction.
  9403. float tsPerturbationRatio = normalTangentSpace.z;
  9404. vec3 nonDiffuseHighlight = mix(waveHighlightColor * 5.0 * (1.0 - tsPerturbationRatio), vec3(0.0), diffuseIntensity);
  9405. #else
  9406. vec3 nonDiffuseHighlight = vec3(0.0);
  9407. #endif
  9408. // Add specular highlights in 3D, and in all modes when zoomed in.
  9409. float specularIntensity = czm_getSpecular(czm_lightDirectionEC, normalizedPositionToEyeEC, normalEC, 10.0);
  9410. float surfaceReflectance = mix(0.0, mix(u_zoomedOutOceanSpecularIntensity, oceanSpecularIntensity, waveIntensity), maskValue);
  9411. float specular = specularIntensity * surfaceReflectance;
  9412. #ifdef HDR
  9413. specular *= 1.4;
  9414. float e = 0.2;
  9415. float d = 3.3;
  9416. float c = 1.7;
  9417. vec3 color = imageryColor.rgb + (c * (vec3(e) + imageryColor.rgb * d) * (diffuseHighlight + nonDiffuseHighlight + specular));
  9418. #else
  9419. vec3 color = imageryColor.rgb + diffuseHighlight + nonDiffuseHighlight + specular;
  9420. #endif
  9421. return vec4(color, imageryColor.a);
  9422. }
  9423. #endif // #ifdef SHOW_REFLECTIVE_OCEAN
  9424. `;var igi=T(S(),1),fv=`#ifdef QUANTIZATION_BITS12
  9425. in vec4 compressed0;
  9426. in float compressed1;
  9427. #else
  9428. in vec4 position3DAndHeight;
  9429. in vec4 textureCoordAndEncodedNormals;
  9430. #endif
  9431. #ifdef GEODETIC_SURFACE_NORMALS
  9432. in vec3 geodeticSurfaceNormal;
  9433. #endif
  9434. #ifdef EXAGGERATION
  9435. uniform vec2 u_terrainExaggerationAndRelativeHeight;
  9436. #endif
  9437. uniform vec3 u_center3D;
  9438. uniform mat4 u_modifiedModelView;
  9439. uniform mat4 u_modifiedModelViewProjection;
  9440. uniform vec4 u_tileRectangle;
  9441. // Uniforms for 2D Mercator projection
  9442. uniform vec2 u_southAndNorthLatitude;
  9443. uniform vec2 u_southMercatorYAndOneOverHeight;
  9444. out vec3 v_positionMC;
  9445. out vec3 v_positionEC;
  9446. out vec3 v_textureCoordinates;
  9447. out vec3 v_normalMC;
  9448. out vec3 v_normalEC;
  9449. #ifdef APPLY_MATERIAL
  9450. out float v_slope;
  9451. out float v_aspect;
  9452. out float v_height;
  9453. #endif
  9454. #if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)
  9455. out float v_distance;
  9456. #endif
  9457. #if defined(FOG) || defined(GROUND_ATMOSPHERE)
  9458. out vec3 v_atmosphereRayleighColor;
  9459. out vec3 v_atmosphereMieColor;
  9460. out float v_atmosphereOpacity;
  9461. #endif
  9462. // These functions are generated at runtime.
  9463. vec4 getPosition(vec3 position, float height, vec2 textureCoordinates);
  9464. float get2DYPositionFraction(vec2 textureCoordinates);
  9465. vec4 getPosition3DMode(vec3 position, float height, vec2 textureCoordinates)
  9466. {
  9467. return u_modifiedModelViewProjection * vec4(position, 1.0);
  9468. }
  9469. float get2DMercatorYPositionFraction(vec2 textureCoordinates)
  9470. {
  9471. // The width of a tile at level 11, in radians and assuming a single root tile, is
  9472. // 2.0 * czm_pi / pow(2.0, 11.0)
  9473. // We want to just linearly interpolate the 2D position from the texture coordinates
  9474. // when we're at this level or higher. The constant below is the expression
  9475. // above evaluated and then rounded up at the 4th significant digit.
  9476. const float maxTileWidth = 0.003068;
  9477. float positionFraction = textureCoordinates.y;
  9478. float southLatitude = u_southAndNorthLatitude.x;
  9479. float northLatitude = u_southAndNorthLatitude.y;
  9480. if (northLatitude - southLatitude > maxTileWidth)
  9481. {
  9482. float southMercatorY = u_southMercatorYAndOneOverHeight.x;
  9483. float oneOverMercatorHeight = u_southMercatorYAndOneOverHeight.y;
  9484. float currentLatitude = mix(southLatitude, northLatitude, textureCoordinates.y);
  9485. currentLatitude = clamp(currentLatitude, -czm_webMercatorMaxLatitude, czm_webMercatorMaxLatitude);
  9486. positionFraction = czm_latitudeToWebMercatorFraction(currentLatitude, southMercatorY, oneOverMercatorHeight);
  9487. }
  9488. return positionFraction;
  9489. }
  9490. float get2DGeographicYPositionFraction(vec2 textureCoordinates)
  9491. {
  9492. return textureCoordinates.y;
  9493. }
  9494. vec4 getPositionPlanarEarth(vec3 position, float height, vec2 textureCoordinates)
  9495. {
  9496. float yPositionFraction = get2DYPositionFraction(textureCoordinates);
  9497. vec4 rtcPosition2D = vec4(height, mix(u_tileRectangle.st, u_tileRectangle.pq, vec2(textureCoordinates.x, yPositionFraction)), 1.0);
  9498. return u_modifiedModelViewProjection * rtcPosition2D;
  9499. }
  9500. vec4 getPosition2DMode(vec3 position, float height, vec2 textureCoordinates)
  9501. {
  9502. return getPositionPlanarEarth(position, 0.0, textureCoordinates);
  9503. }
  9504. vec4 getPositionColumbusViewMode(vec3 position, float height, vec2 textureCoordinates)
  9505. {
  9506. return getPositionPlanarEarth(position, height, textureCoordinates);
  9507. }
  9508. vec4 getPositionMorphingMode(vec3 position, float height, vec2 textureCoordinates)
  9509. {
  9510. // We do not do RTC while morphing, so there is potential for jitter.
  9511. // This is unlikely to be noticeable, though.
  9512. vec3 position3DWC = position + u_center3D;
  9513. float yPositionFraction = get2DYPositionFraction(textureCoordinates);
  9514. vec4 position2DWC = vec4(height, mix(u_tileRectangle.st, u_tileRectangle.pq, vec2(textureCoordinates.x, yPositionFraction)), 1.0);
  9515. vec4 morphPosition = czm_columbusViewMorph(position2DWC, vec4(position3DWC, 1.0), czm_morphTime);
  9516. return czm_modelViewProjection * morphPosition;
  9517. }
  9518. #ifdef QUANTIZATION_BITS12
  9519. uniform vec2 u_minMaxHeight;
  9520. uniform mat4 u_scaleAndBias;
  9521. #endif
  9522. void main()
  9523. {
  9524. #ifdef QUANTIZATION_BITS12
  9525. vec2 xy = czm_decompressTextureCoordinates(compressed0.x);
  9526. vec2 zh = czm_decompressTextureCoordinates(compressed0.y);
  9527. vec3 position = vec3(xy, zh.x);
  9528. float height = zh.y;
  9529. vec2 textureCoordinates = czm_decompressTextureCoordinates(compressed0.z);
  9530. height = height * (u_minMaxHeight.y - u_minMaxHeight.x) + u_minMaxHeight.x;
  9531. position = (u_scaleAndBias * vec4(position, 1.0)).xyz;
  9532. #if (defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL)) && defined(INCLUDE_WEB_MERCATOR_Y)
  9533. float webMercatorT = czm_decompressTextureCoordinates(compressed0.w).x;
  9534. float encodedNormal = compressed1;
  9535. #elif defined(INCLUDE_WEB_MERCATOR_Y)
  9536. float webMercatorT = czm_decompressTextureCoordinates(compressed0.w).x;
  9537. float encodedNormal = 0.0;
  9538. #elif defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL)
  9539. float webMercatorT = textureCoordinates.y;
  9540. float encodedNormal = compressed0.w;
  9541. #else
  9542. float webMercatorT = textureCoordinates.y;
  9543. float encodedNormal = 0.0;
  9544. #endif
  9545. #else
  9546. // A single float per element
  9547. vec3 position = position3DAndHeight.xyz;
  9548. float height = position3DAndHeight.w;
  9549. vec2 textureCoordinates = textureCoordAndEncodedNormals.xy;
  9550. #if (defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)) && defined(INCLUDE_WEB_MERCATOR_Y)
  9551. float webMercatorT = textureCoordAndEncodedNormals.z;
  9552. float encodedNormal = textureCoordAndEncodedNormals.w;
  9553. #elif defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)
  9554. float webMercatorT = textureCoordinates.y;
  9555. float encodedNormal = textureCoordAndEncodedNormals.z;
  9556. #elif defined(INCLUDE_WEB_MERCATOR_Y)
  9557. float webMercatorT = textureCoordAndEncodedNormals.z;
  9558. float encodedNormal = 0.0;
  9559. #else
  9560. float webMercatorT = textureCoordinates.y;
  9561. float encodedNormal = 0.0;
  9562. #endif
  9563. #endif
  9564. vec3 position3DWC = position + u_center3D;
  9565. #ifdef GEODETIC_SURFACE_NORMALS
  9566. vec3 ellipsoidNormal = geodeticSurfaceNormal;
  9567. #else
  9568. vec3 ellipsoidNormal = normalize(position3DWC);
  9569. #endif
  9570. #if defined(EXAGGERATION) && defined(GEODETIC_SURFACE_NORMALS)
  9571. float exaggeration = u_terrainExaggerationAndRelativeHeight.x;
  9572. float relativeHeight = u_terrainExaggerationAndRelativeHeight.y;
  9573. float newHeight = (height - relativeHeight) * exaggeration + relativeHeight;
  9574. // stop from going through center of earth
  9575. float minRadius = min(min(czm_ellipsoidRadii.x, czm_ellipsoidRadii.y), czm_ellipsoidRadii.z);
  9576. newHeight = max(newHeight, -minRadius);
  9577. vec3 offset = ellipsoidNormal * (newHeight - height);
  9578. position += offset;
  9579. position3DWC += offset;
  9580. height = newHeight;
  9581. #endif
  9582. gl_Position = getPosition(position, height, textureCoordinates);
  9583. v_positionEC = (u_modifiedModelView * vec4(position, 1.0)).xyz;
  9584. v_positionMC = position3DWC; // position in model coordinates
  9585. v_textureCoordinates = vec3(textureCoordinates, webMercatorT);
  9586. #if defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)
  9587. vec3 normalMC = czm_octDecode(encodedNormal);
  9588. #if defined(EXAGGERATION) && defined(GEODETIC_SURFACE_NORMALS)
  9589. vec3 projection = dot(normalMC, ellipsoidNormal) * ellipsoidNormal;
  9590. vec3 rejection = normalMC - projection;
  9591. normalMC = normalize(projection + rejection * exaggeration);
  9592. #endif
  9593. v_normalMC = normalMC;
  9594. v_normalEC = czm_normal3D * v_normalMC;
  9595. #endif
  9596. #if defined(FOG) || (defined(GROUND_ATMOSPHERE) && !defined(PER_FRAGMENT_GROUND_ATMOSPHERE))
  9597. bool dynamicLighting = false;
  9598. #if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_DAYNIGHT_SHADING) || defined(ENABLE_VERTEX_LIGHTING))
  9599. dynamicLighting = true;
  9600. #endif
  9601. #if defined(DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN)
  9602. vec3 atmosphereLightDirection = czm_sunDirectionWC;
  9603. #else
  9604. vec3 atmosphereLightDirection = czm_lightDirectionWC;
  9605. #endif
  9606. vec3 lightDirection = czm_branchFreeTernary(dynamicLighting, atmosphereLightDirection, normalize(position3DWC));
  9607. computeAtmosphereScattering(
  9608. position3DWC,
  9609. lightDirection,
  9610. v_atmosphereRayleighColor,
  9611. v_atmosphereMieColor,
  9612. v_atmosphereOpacity
  9613. );
  9614. #endif
  9615. #if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT)
  9616. v_distance = length((czm_modelView3D * vec4(position3DWC, 1.0)).xyz);
  9617. #endif
  9618. #ifdef APPLY_MATERIAL
  9619. float northPoleZ = czm_ellipsoidRadii.z;
  9620. vec3 northPolePositionMC = vec3(0.0, 0.0, northPoleZ);
  9621. vec3 vectorEastMC = normalize(cross(northPolePositionMC - v_positionMC, ellipsoidNormal));
  9622. float dotProd = abs(dot(ellipsoidNormal, v_normalMC));
  9623. v_slope = acos(dotProd);
  9624. vec3 normalRejected = ellipsoidNormal * dotProd;
  9625. vec3 normalProjected = v_normalMC - normalRejected;
  9626. vec3 aspectVector = normalize(normalProjected);
  9627. v_aspect = acos(dot(aspectVector, vectorEastMC));
  9628. float determ = dot(cross(vectorEastMC, aspectVector), ellipsoidNormal);
  9629. v_aspect = czm_branchFreeTernary(determ < 0.0, 2.0 * czm_pi - v_aspect, v_aspect);
  9630. v_height = height;
  9631. #endif
  9632. }
  9633. `;var rgi=T(S(),1),eV=`void computeAtmosphereScattering(vec3 positionWC, vec3 lightDirection, out vec3 rayleighColor, out vec3 mieColor, out float opacity) {
  9634. vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC;
  9635. vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC);
  9636. czm_ray primaryRay = czm_ray(czm_viewerPositionWC, cameraToPositionWCDirection);
  9637. float atmosphereInnerRadius = length(positionWC);
  9638. computeScattering(
  9639. primaryRay,
  9640. length(cameraToPositionWC),
  9641. lightDirection,
  9642. atmosphereInnerRadius,
  9643. rayleighColor,
  9644. mieColor,
  9645. opacity
  9646. );
  9647. }
  9648. `;var agi=T(S(),1),pv=`uniform sampler2D u_texture;
  9649. in vec2 v_textureCoordinates;
  9650. void main()
  9651. {
  9652. out_FragColor = texture(u_texture, v_textureCoordinates);
  9653. }
  9654. `;var lgi=T(S(),1),bv=`in vec4 position;
  9655. in float webMercatorT;
  9656. uniform vec2 u_textureDimensions;
  9657. out vec2 v_textureCoordinates;
  9658. void main()
  9659. {
  9660. v_textureCoordinates = vec2(position.x, webMercatorT);
  9661. gl_Position = czm_viewportOrthographic * (position * vec4(u_textureDimensions, 1.0, 1.0));
  9662. }
  9663. `;var ugi=T(S(),1),tV=`float interpolateByDistance(vec4 nearFarScalar, float distance)
  9664. {
  9665. float startDistance = nearFarScalar.x;
  9666. float startValue = nearFarScalar.y;
  9667. float endDistance = nearFarScalar.z;
  9668. float endValue = nearFarScalar.w;
  9669. float t = clamp((distance - startDistance) / (endDistance - startDistance), 0.0, 1.0);
  9670. return mix(startValue, endValue, t);
  9671. }
  9672. vec3 getLightDirection(vec3 positionWC)
  9673. {
  9674. float lightEnum = u_radiiAndDynamicAtmosphereColor.z;
  9675. vec3 lightDirection =
  9676. positionWC * float(lightEnum == 0.0) +
  9677. czm_lightDirectionWC * float(lightEnum == 1.0) +
  9678. czm_sunDirectionWC * float(lightEnum == 2.0);
  9679. return normalize(lightDirection);
  9680. }
  9681. void computeAtmosphereScattering(vec3 positionWC, vec3 lightDirection, out vec3 rayleighColor, out vec3 mieColor, out float opacity, out float underTranslucentGlobe)
  9682. {
  9683. float ellipsoidRadiiDifference = czm_ellipsoidRadii.x - czm_ellipsoidRadii.z;
  9684. // Adjustment to the atmosphere radius applied based on the camera height.
  9685. float distanceAdjustMin = czm_ellipsoidRadii.x / 4.0;
  9686. float distanceAdjustMax = czm_ellipsoidRadii.x;
  9687. float distanceAdjustModifier = ellipsoidRadiiDifference / 2.0;
  9688. float distanceAdjust = distanceAdjustModifier * clamp((czm_eyeHeight - distanceAdjustMin) / (distanceAdjustMax - distanceAdjustMin), 0.0, 1.0);
  9689. // Since atmosphere scattering assumes the atmosphere is a spherical shell, we compute an inner radius of the atmosphere best fit
  9690. // for the position on the ellipsoid.
  9691. float radiusAdjust = (ellipsoidRadiiDifference / 4.0) + distanceAdjust;
  9692. float atmosphereInnerRadius = (length(czm_viewerPositionWC) - czm_eyeHeight) - radiusAdjust;
  9693. // Setup the primary ray: from the camera position to the vertex position.
  9694. vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC;
  9695. vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC);
  9696. czm_ray primaryRay = czm_ray(czm_viewerPositionWC, cameraToPositionWCDirection);
  9697. underTranslucentGlobe = 0.0;
  9698. // Brighten the sky atmosphere under the Earth's atmosphere when translucency is enabled.
  9699. #if defined(GLOBE_TRANSLUCENT)
  9700. // Check for intersection with the inner radius of the atmopshere.
  9701. czm_raySegment primaryRayEarthIntersect = czm_raySphereIntersectionInterval(primaryRay, vec3(0.0), atmosphereInnerRadius + radiusAdjust);
  9702. if (primaryRayEarthIntersect.start > 0.0 && primaryRayEarthIntersect.stop > 0.0) {
  9703. // Compute position on globe.
  9704. vec3 direction = normalize(positionWC);
  9705. czm_ray ellipsoidRay = czm_ray(positionWC, -direction);
  9706. czm_raySegment ellipsoidIntersection = czm_rayEllipsoidIntersectionInterval(ellipsoidRay, vec3(0.0), czm_ellipsoidInverseRadii);
  9707. vec3 onEarth = positionWC - (direction * ellipsoidIntersection.start);
  9708. // Control the color using the camera angle.
  9709. float angle = dot(normalize(czm_viewerPositionWC), normalize(onEarth));
  9710. // Control the opacity using the distance from Earth.
  9711. opacity = interpolateByDistance(vec4(0.0, 1.0, czm_ellipsoidRadii.x, 0.0), length(czm_viewerPositionWC - onEarth));
  9712. vec3 horizonColor = vec3(0.1, 0.2, 0.3);
  9713. vec3 nearColor = vec3(0.0);
  9714. rayleighColor = mix(nearColor, horizonColor, exp(-angle) * opacity);
  9715. // Set the traslucent flag to avoid alpha adjustment in computeFinalColor funciton.
  9716. underTranslucentGlobe = 1.0;
  9717. return;
  9718. }
  9719. #endif
  9720. computeScattering(
  9721. primaryRay,
  9722. length(cameraToPositionWC),
  9723. lightDirection,
  9724. atmosphereInnerRadius,
  9725. rayleighColor,
  9726. mieColor,
  9727. opacity
  9728. );
  9729. // Alter the opacity based on how close the viewer is to the ground.
  9730. // (0.0 = At edge of atmosphere, 1.0 = On ground)
  9731. float cameraHeight = czm_eyeHeight + atmosphereInnerRadius;
  9732. float atmosphereOuterRadius = atmosphereInnerRadius + ATMOSPHERE_THICKNESS;
  9733. opacity = clamp((atmosphereOuterRadius - cameraHeight) / (atmosphereOuterRadius - atmosphereInnerRadius), 0.0, 1.0);
  9734. // Alter alpha based on time of day (0.0 = night , 1.0 = day)
  9735. float nightAlpha = (u_radiiAndDynamicAtmosphereColor.z != 0.0) ? clamp(dot(normalize(positionWC), lightDirection), 0.0, 1.0) : 1.0;
  9736. opacity *= pow(nightAlpha, 0.5);
  9737. }
  9738. `;var hgi=T(S(),1),yv=`in vec3 v_outerPositionWC;
  9739. uniform vec3 u_hsbShift;
  9740. #ifndef PER_FRAGMENT_ATMOSPHERE
  9741. in vec3 v_mieColor;
  9742. in vec3 v_rayleighColor;
  9743. in float v_opacity;
  9744. in float v_translucent;
  9745. #endif
  9746. void main (void)
  9747. {
  9748. vec3 lightDirection = getLightDirection(v_outerPositionWC);
  9749. vec3 mieColor;
  9750. vec3 rayleighColor;
  9751. float opacity;
  9752. float translucent;
  9753. #ifdef PER_FRAGMENT_ATMOSPHERE
  9754. computeAtmosphereScattering(
  9755. v_outerPositionWC,
  9756. lightDirection,
  9757. rayleighColor,
  9758. mieColor,
  9759. opacity,
  9760. translucent
  9761. );
  9762. #else
  9763. mieColor = v_mieColor;
  9764. rayleighColor = v_rayleighColor;
  9765. opacity = v_opacity;
  9766. translucent = v_translucent;
  9767. #endif
  9768. vec4 color = computeAtmosphereColor(v_outerPositionWC, lightDirection, rayleighColor, mieColor, opacity);
  9769. #ifndef HDR
  9770. color.rgb = czm_acesTonemapping(color.rgb);
  9771. color.rgb = czm_inverseGamma(color.rgb);
  9772. #endif
  9773. #ifdef COLOR_CORRECT
  9774. // Convert rgb color to hsb
  9775. vec3 hsb = czm_RGBToHSB(color.rgb);
  9776. // Perform hsb shift
  9777. hsb.x += u_hsbShift.x; // hue
  9778. hsb.y = clamp(hsb.y + u_hsbShift.y, 0.0, 1.0); // saturation
  9779. hsb.z = hsb.z > czm_epsilon7 ? hsb.z + u_hsbShift.z : 0.0; // brightness
  9780. // Convert shifted hsb back to rgb
  9781. color.rgb = czm_HSBToRGB(hsb);
  9782. #endif
  9783. // For the parts of the sky atmosphere that are not behind a translucent globe,
  9784. // we mix in the default opacity so that the sky atmosphere still appears at distance.
  9785. // This is needed because the opacity in the sky atmosphere is initially adjusted based
  9786. // on the camera height.
  9787. if (translucent == 0.0) {
  9788. color.a = mix(color.b, 1.0, color.a) * smoothstep(0.0, 1.0, czm_morphTime);
  9789. }
  9790. out_FragColor = color;
  9791. }
  9792. `;var pgi=T(S(),1),gv=`in vec4 position;
  9793. out vec3 v_outerPositionWC;
  9794. #ifndef PER_FRAGMENT_ATMOSPHERE
  9795. out vec3 v_mieColor;
  9796. out vec3 v_rayleighColor;
  9797. out float v_opacity;
  9798. out float v_translucent;
  9799. #endif
  9800. void main(void)
  9801. {
  9802. vec4 positionWC = czm_model * position;
  9803. vec3 lightDirection = getLightDirection(positionWC.xyz);
  9804. #ifndef PER_FRAGMENT_ATMOSPHERE
  9805. computeAtmosphereScattering(
  9806. positionWC.xyz,
  9807. lightDirection,
  9808. v_rayleighColor,
  9809. v_mieColor,
  9810. v_opacity,
  9811. v_translucent
  9812. );
  9813. #endif
  9814. v_outerPositionWC = positionWC.xyz;
  9815. gl_Position = czm_modelViewProjection * position;
  9816. }
  9817. `;var ygi=T(S(),1),xv=`uniform samplerCube u_cubeMap;
  9818. in vec3 v_texCoord;
  9819. void main()
  9820. {
  9821. vec4 color = czm_textureCube(u_cubeMap, normalize(v_texCoord));
  9822. out_FragColor = vec4(czm_gammaCorrect(color).rgb, czm_morphTime);
  9823. }
  9824. `;var xgi=T(S(),1),_v=`in vec3 position;
  9825. out vec3 v_texCoord;
  9826. void main()
  9827. {
  9828. vec3 p = czm_viewRotation * (czm_temeToPseudoFixed * (czm_entireFrustum.y * position));
  9829. gl_Position = czm_projection * vec4(p, 1.0);
  9830. v_texCoord = position.xyz;
  9831. }
  9832. `;var Tgi=T(S(),1),Tv=`uniform sampler2D u_texture;
  9833. in vec2 v_textureCoordinates;
  9834. void main()
  9835. {
  9836. vec4 color = texture(u_texture, v_textureCoordinates);
  9837. out_FragColor = czm_gammaCorrect(color);
  9838. }
  9839. `;var Cgi=T(S(),1),Sv=`uniform float u_radiusTS;
  9840. in vec2 v_textureCoordinates;
  9841. vec2 rotate(vec2 p, vec2 direction)
  9842. {
  9843. return vec2(p.x * direction.x - p.y * direction.y, p.x * direction.y + p.y * direction.x);
  9844. }
  9845. vec4 addBurst(vec2 position, vec2 direction, float lengthScalar)
  9846. {
  9847. vec2 rotatedPosition = rotate(position, direction) * vec2(25.0, 0.75);
  9848. float radius = length(rotatedPosition) * lengthScalar;
  9849. float burst = 1.0 - smoothstep(0.0, 0.55, radius);
  9850. return vec4(burst);
  9851. }
  9852. void main()
  9853. {
  9854. float lengthScalar = 2.0 / sqrt(2.0);
  9855. vec2 position = v_textureCoordinates - vec2(0.5);
  9856. float radius = length(position) * lengthScalar;
  9857. float surface = step(radius, u_radiusTS);
  9858. vec4 color = vec4(vec2(1.0), surface + 0.2, surface);
  9859. float glow = 1.0 - smoothstep(0.0, 0.55, radius);
  9860. color.ba += mix(vec2(0.0), vec2(1.0), glow) * 0.75;
  9861. vec4 burst = vec4(0.0);
  9862. // The following loop has been manually unrolled for speed, to
  9863. // avoid sin() and cos().
  9864. //
  9865. //for (float i = 0.4; i < 3.2; i += 1.047) {
  9866. // vec2 direction = vec2(sin(i), cos(i));
  9867. // burst += 0.4 * addBurst(position, direction, lengthScalar);
  9868. //
  9869. // direction = vec2(sin(i - 0.08), cos(i - 0.08));
  9870. // burst += 0.3 * addBurst(position, direction, lengthScalar);
  9871. //}
  9872. burst += 0.4 * addBurst(position, vec2(0.38942, 0.92106), lengthScalar); // angle == 0.4
  9873. burst += 0.4 * addBurst(position, vec2(0.99235, 0.12348), lengthScalar); // angle == 0.4 + 1.047
  9874. burst += 0.4 * addBurst(position, vec2(0.60327, -0.79754), lengthScalar); // angle == 0.4 + 1.047 * 2.0
  9875. burst += 0.3 * addBurst(position, vec2(0.31457, 0.94924), lengthScalar); // angle == 0.4 - 0.08
  9876. burst += 0.3 * addBurst(position, vec2(0.97931, 0.20239), lengthScalar); // angle == 0.4 + 1.047 - 0.08
  9877. burst += 0.3 * addBurst(position, vec2(0.66507, -0.74678), lengthScalar); // angle == 0.4 + 1.047 * 2.0 - 0.08
  9878. // End of manual loop unrolling.
  9879. color += clamp(burst, vec4(0.0), vec4(1.0)) * 0.15;
  9880. out_FragColor = clamp(color, vec4(0.0), vec4(1.0));
  9881. }
  9882. `;var Lgi=T(S(),1),Cv=`in vec2 direction;
  9883. uniform float u_size;
  9884. out vec2 v_textureCoordinates;
  9885. void main()
  9886. {
  9887. vec4 position;
  9888. if (czm_morphTime == 1.0)
  9889. {
  9890. position = vec4(czm_sunPositionWC, 1.0);
  9891. }
  9892. else
  9893. {
  9894. position = vec4(czm_sunPositionColumbusView.zxy, 1.0);
  9895. }
  9896. vec4 positionEC = czm_view * position;
  9897. vec4 positionWC = czm_eyeToWindowCoordinates(positionEC);
  9898. vec2 halfSize = vec2(u_size * 0.5);
  9899. halfSize *= ((direction * 2.0) - 1.0);
  9900. gl_Position = czm_viewportOrthographic * vec4(positionWC.xy + halfSize, -positionWC.z, 1.0);
  9901. v_textureCoordinates = direction;
  9902. }
  9903. `;var Zgi=T(S(),1),Vv=`
  9904. in vec2 v_textureCoordinates;
  9905. void main()
  9906. {
  9907. czm_materialInput materialInput;
  9908. materialInput.s = v_textureCoordinates.s;
  9909. materialInput.st = v_textureCoordinates;
  9910. materialInput.str = vec3(v_textureCoordinates, 0.0);
  9911. materialInput.normalEC = vec3(0.0, 0.0, -1.0);
  9912. czm_material material = czm_getMaterial(materialInput);
  9913. out_FragColor = vec4(material.diffuse + material.emission, material.alpha);
  9914. }
  9915. `;var BMi=T(S(),1);var FLi=T(S(),1);var Ngi=T(S(),1);var Igi=T(S(),1);var qtt=new D;function $tt(e,t){let n=e.unionClippingRegions,i=e.length,o=rs.useFloatTexture(t),r=rs.getTextureResolution(e,t,qtt),s=r.x,a=r.y,c=o?nnt(s,a):int(s,a);return c+=`
  9916. `,c+=n?ent(i):tnt(i),c}function ent(e){return`float clip(vec4 fragCoord, sampler2D clippingPlanes, mat4 clippingPlanesMatrix)
  9917. {
  9918. vec4 position = czm_windowToEyeCoordinates(fragCoord);
  9919. vec3 clipNormal = vec3(0.0);
  9920. vec3 clipPosition = vec3(0.0);
  9921. float clipAmount;
  9922. float pixelWidth = czm_metersPerPixel(position);
  9923. bool breakAndDiscard = false;
  9924. for (int i = 0; i < ${e}; ++i)
  9925. {
  9926. vec4 clippingPlane = getClippingPlane(clippingPlanes, i, clippingPlanesMatrix);
  9927. clipNormal = clippingPlane.xyz;
  9928. clipPosition = -clippingPlane.w * clipNormal;
  9929. float amount = dot(clipNormal, (position.xyz - clipPosition)) / pixelWidth;
  9930. clipAmount = czm_branchFreeTernary(i == 0, amount, min(amount, clipAmount));
  9931. if (amount <= 0.0)
  9932. {
  9933. breakAndDiscard = true;
  9934. break;
  9935. }
  9936. }
  9937. if (breakAndDiscard) {
  9938. discard;
  9939. }
  9940. return clipAmount;
  9941. }
  9942. `}function tnt(e){return`float clip(vec4 fragCoord, sampler2D clippingPlanes, mat4 clippingPlanesMatrix)
  9943. {
  9944. bool clipped = true;
  9945. vec4 position = czm_windowToEyeCoordinates(fragCoord);
  9946. vec3 clipNormal = vec3(0.0);
  9947. vec3 clipPosition = vec3(0.0);
  9948. float clipAmount = 0.0;
  9949. float pixelWidth = czm_metersPerPixel(position);
  9950. for (int i = 0; i < ${e}; ++i)
  9951. {
  9952. vec4 clippingPlane = getClippingPlane(clippingPlanes, i, clippingPlanesMatrix);
  9953. clipNormal = clippingPlane.xyz;
  9954. clipPosition = -clippingPlane.w * clipNormal;
  9955. float amount = dot(clipNormal, (position.xyz - clipPosition)) / pixelWidth;
  9956. clipAmount = max(amount, clipAmount);
  9957. clipped = clipped && (amount <= 0.0);
  9958. }
  9959. if (clipped)
  9960. {
  9961. discard;
  9962. }
  9963. return clipAmount;
  9964. }
  9965. `}function nnt(e,t){let n=1/e,i=1/t,o=`${n}`;o.indexOf(".")===-1&&(o+=".0");let r=`${i}`;return r.indexOf(".")===-1&&(r+=".0"),`vec4 getClippingPlane(highp sampler2D packedClippingPlanes, int clippingPlaneNumber, mat4 transform)
  9966. {
  9967. int pixY = clippingPlaneNumber / ${e};
  9968. int pixX = clippingPlaneNumber - (pixY * ${e});
  9969. float u = (float(pixX) + 0.5) * ${o};
  9970. float v = (float(pixY) + 0.5) * ${r};
  9971. vec4 plane = texture(packedClippingPlanes, vec2(u, v));
  9972. return czm_transformPlane(plane, transform);
  9973. }
  9974. `}function int(e,t){let n=1/e,i=1/t,o=`${n}`;o.indexOf(".")===-1&&(o+=".0");let r=`${i}`;return r.indexOf(".")===-1&&(r+=".0"),`vec4 getClippingPlane(highp sampler2D packedClippingPlanes, int clippingPlaneNumber, mat4 transform)
  9975. {
  9976. int clippingPlaneStartIndex = clippingPlaneNumber * 2;
  9977. int pixY = clippingPlaneStartIndex / ${e};
  9978. int pixX = clippingPlaneStartIndex - (pixY * ${e});
  9979. float u = (float(pixX) + 0.5) * ${o};
  9980. float v = (float(pixY) + 0.5) * ${r};
  9981. vec4 oct32 = texture(packedClippingPlanes, vec2(u, v)) * 255.0;
  9982. vec2 oct = vec2(oct32.x * 256.0 + oct32.y, oct32.z * 256.0 + oct32.w);
  9983. vec4 plane;
  9984. plane.xyz = czm_octDecode(oct, 65535.0);
  9985. plane.w = czm_unpackFloat(texture(packedClippingPlanes, vec2(u + ${o}, v)));
  9986. return czm_transformPlane(plane, transform);
  9987. }
  9988. `}var P0=$tt;function ont(e,t,n,i,o){this.numberOfDayTextures=e,this.flags=t,this.material=n,this.shaderProgram=i,this.clippingShaderState=o}function TQ(){this.baseVertexShaderSource=void 0,this.baseFragmentShaderSource=void 0,this._shadersByTexturesFlags=[],this.material=void 0}function rnt(e){let t="vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPosition3DMode(position, height, textureCoordinates); }",n="vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPositionColumbusViewMode(position, height, textureCoordinates); }",i="vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPositionMorphingMode(position, height, textureCoordinates); }",o;switch(e){case ie.SCENE3D:o=t;break;case ie.SCENE2D:case ie.COLUMBUS_VIEW:o=n;break;case ie.MORPHING:o=i;break}return o}function snt(e){return e?"float get2DYPositionFraction(vec2 textureCoordinates) { return get2DMercatorYPositionFraction(textureCoordinates); }":"float get2DYPositionFraction(vec2 textureCoordinates) { return get2DGeographicYPositionFraction(textureCoordinates); }"}TQ.prototype.getShaderProgram=function(e){let t=e.frameState,n=e.surfaceTile,i=e.numberOfDayTextures,o=e.applyBrightness,r=e.applyContrast,s=e.applyHue,a=e.applySaturation,c=e.applyGamma,l=e.applyAlpha,u=e.applyDayNightAlpha,m=e.applySplit,p=e.showReflectiveOcean,y=e.showOceanWaves,f=e.enableLighting,x=e.dynamicAtmosphereLighting,_=e.dynamicAtmosphereLightingFromSun,C=e.showGroundAtmosphere,V=e.perFragmentGroundAtmosphere,L=e.hasVertexNormals,Z=e.useWebMercatorProjection,G=e.enableFog,X=e.enableClippingPlanes,P=e.clippingPlanes,v=e.clippedByBoundaries,F=e.hasImageryLayerCutout,M=e.colorCorrect,b=e.highlightFillTile,R=e.colorToAlpha,E=e.hasGeodeticSurfaceNormals,I=e.hasExaggeration,w=e.showUndergroundColor,N=e.translucent,B=0,k="",U=n.renderedMesh.encoding;U.quantization===vs.BITS12&&(B=1,k="QUANTIZATION_BITS12");let z=0,ee="";v&&(z=1,ee="TILE_LIMIT_RECTANGLE");let K=0,j="";F&&(K=1,j="APPLY_IMAGERY_CUTOUT");let q=t.mode,be=q|o<<2|r<<3|s<<4|a<<5|c<<6|l<<7|p<<8|y<<9|f<<10|x<<11|_<<12|C<<13|V<<14|L<<15|Z<<16|G<<17|B<<18|m<<19|X<<20|z<<21|K<<22|M<<23|b<<24|R<<25|E<<26|I<<27|w<<28|N<<29|u<<30,Te=0;d(P)&&P.length>0&&(Te=X?P.clippingPlanesState:0);let ae=n.surfaceShader;if(d(ae)&&ae.numberOfDayTextures===i&&ae.flags===be&&ae.material===this.material&&ae.clippingShaderState===Te)return ae.shaderProgram;let xe=this._shadersByTexturesFlags[i];if(d(xe)||(xe=this._shadersByTexturesFlags[i]=[]),ae=xe[be],!d(ae)||ae.material!==this.material||ae.clippingShaderState!==Te){let _e=this.baseVertexShaderSource.clone(),Ve=this.baseFragmentShaderSource.clone();Te!==0&&Ve.sources.unshift(P0(P,t.context)),_e.defines.push(k),Ve.defines.push(`TEXTURE_UNITS ${i}`,ee,j),o&&Ve.defines.push("APPLY_BRIGHTNESS"),r&&Ve.defines.push("APPLY_CONTRAST"),s&&Ve.defines.push("APPLY_HUE"),a&&Ve.defines.push("APPLY_SATURATION"),c&&Ve.defines.push("APPLY_GAMMA"),l&&Ve.defines.push("APPLY_ALPHA"),u&&Ve.defines.push("APPLY_DAY_NIGHT_ALPHA"),p&&(Ve.defines.push("SHOW_REFLECTIVE_OCEAN"),_e.defines.push("SHOW_REFLECTIVE_OCEAN")),y&&Ve.defines.push("SHOW_OCEAN_WAVES"),R&&Ve.defines.push("APPLY_COLOR_TO_ALPHA"),w&&(_e.defines.push("UNDERGROUND_COLOR"),Ve.defines.push("UNDERGROUND_COLOR")),N&&(_e.defines.push("TRANSLUCENT"),Ve.defines.push("TRANSLUCENT")),f&&(L?(_e.defines.push("ENABLE_VERTEX_LIGHTING"),Ve.defines.push("ENABLE_VERTEX_LIGHTING")):(_e.defines.push("ENABLE_DAYNIGHT_SHADING"),Ve.defines.push("ENABLE_DAYNIGHT_SHADING"))),x&&(_e.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING"),Ve.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING"),_&&(_e.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN"),Ve.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN"))),C&&(_e.defines.push("GROUND_ATMOSPHERE"),Ve.defines.push("GROUND_ATMOSPHERE"),V&&(_e.defines.push("PER_FRAGMENT_GROUND_ATMOSPHERE"),Ve.defines.push("PER_FRAGMENT_GROUND_ATMOSPHERE"))),_e.defines.push("INCLUDE_WEB_MERCATOR_Y"),Ve.defines.push("INCLUDE_WEB_MERCATOR_Y"),G&&(_e.defines.push("FOG"),Ve.defines.push("FOG")),m&&Ve.defines.push("APPLY_SPLIT"),X&&Ve.defines.push("ENABLE_CLIPPING_PLANES"),M&&Ve.defines.push("COLOR_CORRECT"),b&&Ve.defines.push("HIGHLIGHT_FILL_TILE"),E&&_e.defines.push("GEODETIC_SURFACE_NORMALS"),I&&_e.defines.push("EXAGGERATION");let Ie=` vec4 computeDayColor(vec4 initialColor, vec3 textureCoordinates, float nightBlend)
  9989. {
  9990. vec4 color = initialColor;
  9991. `;F&&(Ie+=` vec4 cutoutAndColorResult;
  9992. bool texelUnclipped;
  9993. `);for(let ve=0;ve<i;++ve)F?Ie+=` cutoutAndColorResult = u_dayTextureCutoutRectangles[${ve}];
  9994. texelUnclipped = v_textureCoordinates.x < cutoutAndColorResult.x || cutoutAndColorResult.z < v_textureCoordinates.x || v_textureCoordinates.y < cutoutAndColorResult.y || cutoutAndColorResult.w < v_textureCoordinates.y;
  9995. cutoutAndColorResult = sampleAndBlend(
  9996. `:Ie+=` color = sampleAndBlend(
  9997. `,Ie+=` color,
  9998. u_dayTextures[${ve}],
  9999. u_dayTextureUseWebMercatorT[${ve}] ? textureCoordinates.xz : textureCoordinates.xy,
  10000. u_dayTextureTexCoordsRectangle[${ve}],
  10001. u_dayTextureTranslationAndScale[${ve}],
  10002. ${l?`u_dayTextureAlpha[${ve}]`:"1.0"},
  10003. ${u?`u_dayTextureNightAlpha[${ve}]`:"1.0"},
  10004. ${u?`u_dayTextureDayAlpha[${ve}]`:"1.0"},
  10005. ${o?`u_dayTextureBrightness[${ve}]`:"0.0"},
  10006. ${r?`u_dayTextureContrast[${ve}]`:"0.0"},
  10007. ${s?`u_dayTextureHue[${ve}]`:"0.0"},
  10008. ${a?`u_dayTextureSaturation[${ve}]`:"0.0"},
  10009. ${c?`u_dayTextureOneOverGamma[${ve}]`:"0.0"},
  10010. ${m?`u_dayTextureSplit[${ve}]`:"0.0"},
  10011. ${R?`u_colorsToAlpha[${ve}]`:"vec4(0.0)"},
  10012. nightBlend );
  10013. `,F&&(Ie+=` color = czm_branchFreeTernary(texelUnclipped, cutoutAndColorResult, color);
  10014. `);Ie+=` return color;
  10015. }`,Ve.sources.push(Ie),_e.sources.push(rnt(q)),_e.sources.push(snt(Z));let Me=Qt.fromCache({context:t.context,vertexShaderSource:_e,fragmentShaderSource:Ve,attributeLocations:U.getAttributeLocations()});ae=xe[be]=new ont(i,be,this.material,Me,Te)}return n.surfaceShader=ae,ae.shaderProgram};TQ.prototype.destroy=function(){let e,t,n=this._shadersByTexturesFlags;for(let i in n)if(n.hasOwnProperty(i)){let o=n[i];if(!d(o))continue;for(e in o)o.hasOwnProperty(e)&&(t=o[e],d(t)&&t.shaderProgram.destroy())}return ue(this)};var Lv=TQ;var uVi=T(S(),1);var _xi=T(S(),1);var kgi=T(S(),1),ant={UNLOADED:0,TRANSITIONING:1,RECEIVED:2,TEXTURE_LOADED:3,READY:4,FAILED:5,INVALID:6,PLACEHOLDER:7},ci=Object.freeze(ant);var Bgi=T(S(),1),cnt={START:0,LOADING:1,DONE:2,FAILED:3},ws=Object.freeze(cnt);var Ogi=T(S(),1),lnt={FAILED:0,UNLOADED:1,RECEIVING:2,RECEIVED:3,TRANSFORMING:4,TRANSFORMED:5,READY:6},ao=Object.freeze(lnt);function Qo(){this.imagery=[],this.waterMaskTexture=void 0,this.waterMaskTranslationAndScale=new se(0,0,1,1),this.terrainData=void 0,this.vertexArray=void 0,this.tileBoundingRegion=void 0,this.occludeePointInScaledSpace=new h,this.boundingVolumeSourceTile=void 0,this.boundingVolumeIsFromMesh=!1,this.terrainState=ao.UNLOADED,this.mesh=void 0,this.fill=void 0,this.pickBoundingSphere=new ce,this.surfaceShader=void 0,this.isClipped=!0,this.clippedByBoundaries=!1}Object.defineProperties(Qo.prototype,{eligibleForUnloading:{get:function(){let e=this.terrainState,n=!(e===ao.RECEIVING||e===ao.TRANSFORMING),i=this.imagery;for(let o=0,r=i.length;n&&o<r;++o){let s=i[o];n=!d(s.loadingImagery)||s.loadingImagery.state!==ci.TRANSITIONING}return n}},renderedMesh:{get:function(){if(d(this.vertexArray))return this.mesh;if(d(this.fill))return this.fill.mesh}}});var dnt=new he;function SQ(e,t,n,i,o,r){let s=e.getExaggeratedPosition(i,o,r);if(d(t)&&t!==ie.SCENE3D){let c=n.ellipsoid.cartesianToCartographic(s,dnt);s=n.project(c,r),s=h.fromElements(s.z,s.x,s.y,r)}return s}var unt=new h,mnt=new h,hnt=new h;Qo.prototype.pick=function(e,t,n,i,o){let r=this.renderedMesh;if(!d(r))return;let s=r.vertices,a=r.indices,c=r.encoding,l=a.length,u=Number.MAX_VALUE;for(let m=0;m<l;m+=3){let p=a[m],y=a[m+1],f=a[m+2],x=SQ(c,t,n,s,p,unt),_=SQ(c,t,n,s,y,mnt),C=SQ(c,t,n,s,f,hnt),V=Si.rayTriangleParametric(e,x,_,C,i);d(V)&&V<u&&V>=0&&(u=V)}return u!==Number.MAX_VALUE?Sn.getPoint(e,u,o):void 0};Qo.prototype.freeResources=function(){d(this.waterMaskTexture)&&(--this.waterMaskTexture.referenceCount,this.waterMaskTexture.referenceCount===0&&this.waterMaskTexture.destroy(),this.waterMaskTexture=void 0),this.terrainData=void 0,this.terrainState=ao.UNLOADED,this.mesh=void 0,this.fill=this.fill&&this.fill.destroy();let e=this.imagery;for(let t=0,n=e.length;t<n;++t)e[t].freeResources();this.imagery.length=0,this.freeVertexArray()};Qo.prototype.freeVertexArray=function(){Qo._freeVertexArray(this.vertexArray),this.vertexArray=void 0,Qo._freeVertexArray(this.wireframeVertexArray),this.wireframeVertexArray=void 0};Qo.initialize=function(e,t,n){let i=e.data;d(i)||(i=e.data=new Qo),e.state===ws.START&&(fnt(e,t,n),e.state=ws.LOADING)};Qo.processStateMachine=function(e,t,n,i,o,r,s){Qo.initialize(e,n,i);let a=e.data;if(e.state===ws.LOADING&&pnt(e,t,n,i,o,r),s)return;let c=e.renderable;e.renderable=d(a.vertexArray);let l=a.terrainState===ao.READY;e.upsampledFromParent=d(a.terrainData)&&a.terrainData.wasCreatedByUpsampling();let u=a.processImagery(e,n,t);if(l&&u){let m=e._loadedCallbacks,p={};for(let y in m)m.hasOwnProperty(y)&&(m[y](e)||(p[y]=m[y]));e._loadedCallbacks=p,e.state=ws.DONE}c&&(e.renderable=!0)};Qo.prototype.processImagery=function(e,t,n,i){let o=e.data,r=e.upsampledFromParent,s=!1,a=!0,c=o.imagery,l,u;for(l=0,u=c.length;l<u;++l){let m=c[l];if(!d(m.loadingImagery)){r=!1;continue}if(m.loadingImagery.state===ci.PLACEHOLDER){let y=m.loadingImagery.imageryLayer;if(y.ready){m.freeResources(),c.splice(l,1),y._createTileImagerySkeletons(e,t,l),--l,u=c.length;continue}else r=!1}let p=m.processStateMachine(e,n,i);a=a&&p,s=s||p||d(m.readyImagery),r=r&&d(m.loadingImagery)&&(m.loadingImagery.state===ci.FAILED||m.loadingImagery.state===ci.INVALID)}return e.upsampledFromParent=r,e.renderable=e.renderable&&(s||a),a};function $pe(e,t,n,i){let o=e.renderedMesh,r=o.vertices,s=o.encoding,a=r.length/s.stride,c=sc.clone(s);c.hasGeodeticSurfaceNormals=t,c=sc.clone(c);let l=c.stride,u=new Float32Array(a*l);t?s.addGeodeticSurfaceNormals(r,u,n):s.removeGeodeticSurfaceNormals(r,u),o.vertices=u,o.stride=l,o!==e.mesh?(Qo._freeVertexArray(e.fill.vertexArray),e.fill.vertexArray=Qo._createVertexArrayForMesh(i.context,o)):(Qo._freeVertexArray(e.vertexArray),e.vertexArray=Qo._createVertexArrayForMesh(i.context,o)),Qo._freeVertexArray(e.wireframeVertexArray),e.wireframeVertexArray=void 0}Qo.prototype.addGeodeticSurfaceNormals=function(e,t){$pe(this,!0,e,t)};Qo.prototype.removeGeodeticSurfaceNormals=function(e){$pe(this,!1,void 0,e)};Qo.prototype.updateExaggeration=function(e,t,n){let i=this,o=i.renderedMesh;if(o===void 0)return;let r=t.terrainExaggeration,s=t.terrainExaggerationRelativeHeight,a=r!==1,c=o.encoding,l=c.exaggeration!==r,u=c.exaggerationRelativeHeight!==s;if(l||u){if(l)if(a&&!c.hasGeodeticSurfaceNormals){let m=e.tilingScheme.ellipsoid;i.addGeodeticSurfaceNormals(m,t)}else!a&&c.hasGeodeticSurfaceNormals&&i.removeGeodeticSurfaceNormals(t);if(c.exaggeration=r,c.exaggerationRelativeHeight=s,n!==void 0){n._tileToUpdateHeights.push(e);let m=e.customData,p=m.length;for(let y=0;y<p;y++){let f=m[y];f.level=-1}}}};function fnt(e,t,n){let i=t.getTileDataAvailable(e.x,e.y,e.level);if(!d(i)&&d(e.parent)){let o=e.parent,r=o.data;d(r)&&d(r.terrainData)&&(i=r.terrainData.isChildAvailable(o.x,o.y,e.x,e.y))}i===!1&&(e.data.terrainState=ao.FAILED);for(let o=0,r=n.length;o<r;++o){let s=n.get(o);s.show&&s._createTileImagerySkeletons(e,t)}}function pnt(e,t,n,i,o,r){let s=e.data,a=e.parent;if(s.terrainState===ao.FAILED&&a!==void 0&&(a.data!==void 0&&a.data.terrainData!==void 0&&a.data.terrainData.canUpsample!==!1||Qo.processStateMachine(a,t,n,i,o,r,!0)),s.terrainState===ao.FAILED&&bnt(s,e,t,n,e.x,e.y,e.level),s.terrainState===ao.UNLOADED&&ynt(s,n,e.x,e.y,e.level),s.terrainState===ao.RECEIVED&&xnt(s,t,n,e.x,e.y,e.level),s.terrainState===ao.TRANSFORMED&&(_nt(s,t.context,n,e.x,e.y,e.level,r),s.updateExaggeration(e,t,o)),s.terrainState>=ao.RECEIVED&&s.waterMaskTexture===void 0&&n.hasWaterMask)if(s.terrainData.waterMask!==void 0)Snt(t.context,s);else{let l=s._findAncestorTileWithTerrainData(e);d(l)&&d(l.data.waterMaskTexture)&&(s.waterMaskTexture=l.data.waterMaskTexture,++s.waterMaskTexture.referenceCount,s._computeWaterMaskTranslationAndScale(e,l,s.waterMaskTranslationAndScale))}}function bnt(e,t,n,i,o,r,s){let a=t.parent;if(!a){t.state=ws.FAILED;return}let c=a.data.terrainData,l=a.x,u=a.y,m=a.level;if(!d(c))return;let p=c.upsample(i.tilingScheme,l,u,m,o,r,s);d(p)&&(e.terrainState=ao.RECEIVING,Promise.resolve(p).then(function(y){d(y)&&(e.terrainData=y,e.terrainState=ao.RECEIVED)}).catch(function(){e.terrainState=ao.FAILED}))}function ynt(e,t,n,i,o){function r(c){if(!d(c)){e.terrainState=ao.UNLOADED,e.request=void 0;return}e.terrainData=c,e.terrainState=ao.RECEIVED,e.request=void 0}function s(c){if(e.request.state===$n.CANCELLED){e.terrainData=void 0,e.terrainState=ao.UNLOADED,e.request=void 0;return}e.terrainState=ao.FAILED,e.request=void 0;let l=`Failed to obtain terrain tile X: ${n} Y: ${i} Level: ${o}. Error message: "${c}"`;t._requestError=Vo.reportError(t._requestError,t,t.errorEvent,l,n,i,o),t._requestError.retry&&a()}function a(){let c=new Uo({throttle:!1,throttleByServer:!0,type:Hr.TERRAIN});e.request=c;let l=t.requestTileGeometry(n,i,o,c);d(l)?(e.terrainState=ao.RECEIVING,Promise.resolve(l).then(function(u){r(u)}).catch(function(u){s(u)})):(e.terrainState=ao.UNLOADED,e.request=void 0)}a()}var gnt={tilingScheme:void 0,x:0,y:0,level:0,exaggeration:1,exaggerationRelativeHeight:0,throttle:!0};function xnt(e,t,n,i,o,r){let s=n.tilingScheme,a=gnt;a.tilingScheme=s,a.x=i,a.y=o,a.level=r,a.exaggeration=t.terrainExaggeration,a.exaggerationRelativeHeight=t.terrainExaggerationRelativeHeight,a.throttle=!0;let l=e.terrainData.createMesh(a);d(l)&&(e.terrainState=ao.TRANSFORMING,Promise.resolve(l).then(function(u){e.mesh=u,e.terrainState=ao.TRANSFORMED}).catch(function(){e.terrainState=ao.FAILED}))}Qo._createVertexArrayForMesh=function(e,t){let n=t.vertices,i=mt.createVertexBuffer({context:e,typedArray:n,usage:Ne.STATIC_DRAW}),o=t.encoding.getAttributes(i),r=t.indices.indexBuffers||{},s=r[e.id];if(!d(s)||s.isDestroyed()){let a=t.indices;s=mt.createIndexBuffer({context:e,typedArray:a,usage:Ne.STATIC_DRAW,indexDatatype:Ue.fromSizeInBytes(a.BYTES_PER_ELEMENT)}),s.vertexArrayDestroyable=!1,s.referenceCount=1,r[e.id]=s,t.indices.indexBuffers=r}else++s.referenceCount;return new ti({context:e,attributes:o,indexBuffer:s})};Qo._freeVertexArray=function(e){if(d(e)){let t=e.indexBuffer;e.isDestroyed()||e.destroy(),d(t)&&!t.isDestroyed()&&d(t.referenceCount)&&(--t.referenceCount,t.referenceCount===0&&t.destroy())}};function _nt(e,t,n,i,o,r,s){e.vertexArray=Qo._createVertexArrayForMesh(t,e.mesh),e.terrainState=ao.READY,e.fill=e.fill&&e.fill.destroy(s)}function Tnt(e){let t=e.cache.tile_waterMaskData;if(!d(t)){let n=Wt.create({context:e,pixelFormat:st.LUMINANCE,pixelDatatype:Je.UNSIGNED_BYTE,source:{arrayBufferView:new Uint8Array([255]),width:1,height:1}});n.referenceCount=1;let i=new un({wrapS:Gn.CLAMP_TO_EDGE,wrapT:Gn.CLAMP_TO_EDGE,minificationFilter:cn.LINEAR,magnificationFilter:Ti.LINEAR});t={allWaterTexture:n,sampler:i,destroy:function(){this.allWaterTexture.destroy()}},e.cache.tile_waterMaskData=t}return t}function Snt(e,t){let n=t.terrainData.waterMask,i=Tnt(e),o,r=n.length;if(r===1)if(n[0]!==0)o=i.allWaterTexture;else return;else{let s=Math.sqrt(r);o=Wt.create({context:e,pixelFormat:st.LUMINANCE,pixelDatatype:Je.UNSIGNED_BYTE,source:{width:s,height:s,arrayBufferView:n},sampler:i.sampler,flipY:!1}),o.referenceCount=0}++o.referenceCount,t.waterMaskTexture=o,se.fromElements(0,0,1,1,t.waterMaskTranslationAndScale)}Qo.prototype._findAncestorTileWithTerrainData=function(e){let t=e.parent;for(;d(t)&&(!d(t.data)||!d(t.data.terrainData)||t.data.terrainData.wasCreatedByUpsampling());)t=t.parent;return t};Qo.prototype._computeWaterMaskTranslationAndScale=function(e,t,n){let i=t.rectangle,o=e.rectangle,r=o.width,s=o.height,a=r/i.width,c=s/i.height;return n.x=a*(o.west-i.west)/r,n.y=c*(o.south-i.south)/s,n.z=a,n.w=c,n};var Uu=Qo;var kCi=T(S(),1);var KSi=T(S(),1);var NSi=T(S(),1);var d_i=T(S(),1);var Lxi=T(S(),1);var CQ,e0e="AAPK2b93071721df4cc78be0d8b3d79b1fd54YMocOcx2NxlbYTDkyO5gPk8XsDnguQgeMdFKepFwLwTgb8vHfPvSTdjy_KlMHlS",nV={};nV.defaultAccessToken=e0e;nV.defaultWorldImageryServer=new Ee({url:"https://ibasemaps-api.arcgis.com/arcgis/rest/services/World_Imagery/MapServer"});nV.defaultWorldHillshadeServer=new Ee({url:"https://ibasemaps-api.arcgis.com/arcgis/rest/services/Elevation/World_Hillshade/MapServer"});nV.defaultWorldOceanServer=new Ee({url:"https://ibasemaps-api.arcgis.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer"});nV.getDefaultTokenCredit=function(e){if(e===e0e){if(!d(CQ)){let t='<b> This application is using a default ArcGIS access token. Please assign <i>Cesium.ArcGisMapService.defaultAccessToken</i> with an API key from your ArcGIS Developer account before using the ArcGIS tile services. You can sign up for a free ArcGIS Developer account at <a href="https://developers.arcgis.com/">https://developers.arcgis.com/</a>.</b>';CQ=new St(t,!0)}return CQ}};var Xd=nV;var Ixi=T(S(),1);function VQ(e){e=g(e,g.EMPTY_OBJECT),this._pixelsToCheck=e.pixelsToCheck,this._missingImagePixels=void 0,this._missingImageByteLength=void 0,this._isReady=!1;let t=Ee.createIfNeeded(e.missingImageUrl),n=this;function i(r){d(r.blob)&&(n._missingImageByteLength=r.blob.size);let s=nm(r);if(e.disableCheckIfAllPixelsAreTransparent){let a=!0,c=r.width,l=e.pixelsToCheck;for(let u=0,m=l.length;a&&u<m;++u){let p=l[u],y=p.x*4+p.y*c;s[y+3]>0&&(a=!1)}a&&(s=void 0)}n._missingImagePixels=s,n._isReady=!0}function o(){n._missingImagePixels=void 0,n._isReady=!0}t.fetchImage({preferBlob:!0,preferImageBitmap:!0,flipY:!0}).then(i).catch(o)}VQ.prototype.isReady=function(){return this._isReady};VQ.prototype.shouldDiscardImage=function(e){let t=this._pixelsToCheck,n=this._missingImagePixels;if(!d(n)||d(e.blob)&&e.blob.size!==this._missingImageByteLength)return!1;let i=nm(e),o=e.width;for(let r=0,s=t.length;r<s;++r){let a=t[r],c=a.x*4+a.y*o;for(let l=0;l<4;++l){let u=c+l;if(i[u]!==n[u])return!1}}return!0};var Rv=VQ;var vxi=T(S(),1);function LQ(){this.name=void 0,this.description=void 0,this.position=void 0,this.data=void 0,this.imageryLayer=void 0}LQ.prototype.configureNameFromProperties=function(e){let t=10,n;for(let i in e)if(e.hasOwnProperty(i)&&e[i]){let o=i.toLowerCase();t>1&&o==="name"?(t=1,n=i):t>2&&o==="title"?(t=2,n=i):t>3&&/name/i.test(i)?(t=3,n=i):t>4&&/title/i.test(i)&&(t=4,n=i)}d(n)&&(this.name=e[n])};LQ.prototype.configureDescriptionFromProperties=function(e){function t(n){let i='<table class="cesium-infoBox-defaultTable">';for(let o in n)if(n.hasOwnProperty(o)){let r=n[o];d(r)&&(typeof r=="object"?i+=`<tr><td>${o}</td><td>${t(r)}</td></tr>`:i+=`<tr><td>${o}</td><td>${r}</td></tr>`)}return i+="</table>",i}this.description=t(e)};var mh=LQ;var Uxi=T(S(),1);function iV(){fe.throwInstantiationError()}Object.defineProperties(iV.prototype,{rectangle:{get:fe.throwInstantiationError},tileWidth:{get:fe.throwInstantiationError},tileHeight:{get:fe.throwInstantiationError},maximumLevel:{get:fe.throwInstantiationError},minimumLevel:{get:fe.throwInstantiationError},tilingScheme:{get:fe.throwInstantiationError},tileDiscardPolicy:{get:fe.throwInstantiationError},errorEvent:{get:fe.throwInstantiationError},credit:{get:fe.throwInstantiationError},proxy:{get:fe.throwInstantiationError},hasAlphaChannel:{get:fe.throwInstantiationError}});iV.prototype.getTileCredits=function(e,t,n){fe.throwInstantiationError()};iV.prototype.requestImage=function(e,t,n,i){fe.throwInstantiationError()};iV.prototype.pickFeatures=function(e,t,n,i,o){fe.throwInstantiationError()};var Cnt=/\.ktx2$/i;iV.loadImage=function(e,t){let n=Ee.createIfNeeded(t);return Cnt.test(n.url)?sl(n):d(e)&&d(e.tileDiscardPolicy)?n.fetchImage({preferBlob:!0,preferImageBitmap:!0,flipY:!0}):n.fetchImage({preferImageBitmap:!0,flipY:!0})};var Oc=iV;var Dxi=T(S(),1),Vnt={SATELLITE:1,OCEANS:2,HILLSHADE:3},hh=Object.freeze(Vnt);function t0e(e){this.useTiles=g(e.usePreCachedTilesIfAvailable,!0);let t=e.ellipsoid;this.tilingScheme=g(e.tilingScheme,new Di({ellipsoid:t})),this.rectangle=g(e.rectangle,this.tilingScheme.rectangle),this.ellipsoid=t;let n=e.credit;typeof n=="string"&&(n=new St(n)),this.credit=n,this.tileCredits=void 0,this.tileDiscardPolicy=e.tileDiscardPolicy,this.tileWidth=g(e.tileWidth,256),this.tileHeight=g(e.tileHeight,256),this.maximumLevel=e.maximumLevel}t0e.prototype.build=function(e){e._useTiles=this.useTiles,e._tilingScheme=this.tilingScheme,e._rectangle=this.rectangle,e._credit=this.credit,e._tileCredits=this.tileCredits,e._tileDiscardPolicy=this.tileDiscardPolicy,e._tileWidth=this.tileWidth,e._tileHeight=this.tileHeight,e._maximumLevel=this.maximumLevel,this.useTiles&&!d(this.tileDiscardPolicy)&&(e._tileDiscardPolicy=new Rv({missingImageUrl:n0e(e,0,0,this.maximumLevel).url,pixelsToCheck:[new D(0,0),new D(200,20),new D(20,200),new D(80,110),new D(160,130)],disableCheckIfAllPixelsAreTransparent:!0}))};function Lnt(e,t){let n=e.tileInfo;if(!d(n))t.useTiles=!1;else{if(t.tileWidth=n.rows,t.tileHeight=n.cols,n.spatialReference.wkid===102100||n.spatialReference.wkid===102113)t.tilingScheme=new kr({ellipsoid:t.ellipsoid});else if(e.tileInfo.spatialReference.wkid===4326)t.tilingScheme=new Di({ellipsoid:t.ellipsoid});else{let i=`Tile spatial reference WKID ${e.tileInfo.spatialReference.wkid} is not supported.`;throw new me(i)}if(t.maximumLevel=e.tileInfo.lods.length-1,d(e.fullExtent)){if(d(e.fullExtent.spatialReference)&&d(e.fullExtent.spatialReference.wkid))if(e.fullExtent.spatialReference.wkid===102100||e.fullExtent.spatialReference.wkid===102113){let i=new Ei,o=e.fullExtent,r=i.unproject(new h(Math.max(o.xmin,-t.tilingScheme.ellipsoid.maximumRadius*Math.PI),Math.max(o.ymin,-t.tilingScheme.ellipsoid.maximumRadius*Math.PI),0)),s=i.unproject(new h(Math.min(o.xmax,t.tilingScheme.ellipsoid.maximumRadius*Math.PI),Math.min(o.ymax,t.tilingScheme.ellipsoid.maximumRadius*Math.PI),0));t.rectangle=new de(r.longitude,r.latitude,s.longitude,s.latitude)}else if(e.fullExtent.spatialReference.wkid===4326)t.rectangle=de.fromDegrees(e.fullExtent.xmin,e.fullExtent.ymin,e.fullExtent.xmax,e.fullExtent.ymax);else{let i=`fullExtent.spatialReference WKID ${e.fullExtent.spatialReference.wkid} is not supported.`;throw new me(i)}}else t.rectangle=t.tilingScheme.rectangle;t.useTiles=!0}d(e.copyrightText)&&e.copyrightText.length>0&&(d(t.credit)?t.tileCredits=[new St(e.copyrightText)]:t.credit=new St(e.copyrightText))}function Rnt(e,t){let n=`An error occurred while accessing ${e.url}`;throw d(t)&&d(t.message)&&(n+=`: ${t.message}`),new me(n)}async function Znt(e,t){let n=e.getDerivedResource({queryParameters:{f:"json"}});try{let i=await n.fetchJson();Lnt(i,t)}catch(i){Rnt(e,i)}}function Rf(e){e=g(e,g.EMPTY_OBJECT),this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._tileDiscardPolicy=e.tileDiscardPolicy,this._tileWidth=g(e.tileWidth,256),this._tileHeight=g(e.tileHeight,256),this._maximumLevel=e.maximumLevel,this._tilingScheme=g(e.tilingScheme,new Di({ellipsoid:e.ellipsoid})),this._useTiles=g(e.usePreCachedTilesIfAvailable,!0),this._rectangle=g(e.rectangle,this._tilingScheme.rectangle),this._layers=e.layers,this._credit=e.credit,this._tileCredits=void 0;let t=e.credit;typeof t=="string"&&(t=new St(t)),this.enablePickFeatures=g(e.enablePickFeatures,!0),this._errorEvent=new ye}Rf.fromBasemapType=async function(e,t){t=g(t,g.EMPTY_OBJECT);let n,i,o;switch(e){case hh.SATELLITE:{n=g(t.token,Xd.defaultAccessToken),i=Ee.createIfNeeded(Xd.defaultWorldImageryServer),i.appendForwardSlash();let r=Xd.getDefaultTokenCredit(n);d(r)&&(o=St.clone(r))}break;case hh.OCEANS:{n=g(t.token,Xd.defaultAccessToken),i=Ee.createIfNeeded(Xd.defaultWorldOceanServer),i.appendForwardSlash();let r=Xd.getDefaultTokenCredit(n);d(r)&&(o=St.clone(r))}break;case hh.HILLSHADE:{n=g(t.token,Xd.defaultAccessToken),i=Ee.createIfNeeded(Xd.defaultWorldHillshadeServer),i.appendForwardSlash();let r=Xd.getDefaultTokenCredit(n);d(r)&&(o=St.clone(r))}break;default:}return Rf.fromUrl(i,{...t,token:n,credit:o,usePreCachedTilesIfAvailable:!0})};function n0e(e,t,n,i,o){let r;if(e._useTiles)r=e._resource.getDerivedResource({url:`tile/${i}/${n}/${t}`,request:o});else{let s=e._tilingScheme.tileXYToNativeRectangle(t,n,i),c={bbox:`${s.west},${s.south},${s.east},${s.north}`,size:`${e._tileWidth},${e._tileHeight}`,format:"png32",transparent:!0,f:"image"};e._tilingScheme.projection instanceof Zi?(c.bboxSR=4326,c.imageSR=4326):(c.bboxSR=3857,c.imageSR=3857),e.layers&&(c.layers=`show:${e.layers}`),r=e._resource.getDerivedResource({url:"export",request:o,queryParameters:c})}return r}Object.defineProperties(Rf.prototype,{url:{get:function(){return this._resource._url}},token:{get:function(){return this._resource.queryParameters.token}},proxy:{get:function(){return this._resource.proxy}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return 0}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},usingPrecachedTiles:{get:function(){return this._useTiles}},hasAlphaChannel:{get:function(){return!0}},layers:{get:function(){return this._layers}}});Rf.fromUrl=async function(e,t){t=g(t,g.EMPTY_OBJECT);let n=Ee.createIfNeeded(e);n.appendForwardSlash(),d(t.token)&&n.setQueryParameters({token:t.token});let i=new Rf(t);i._resource=n;let o=new t0e(t);return g(t.usePreCachedTilesIfAvailable,!0)&&await Znt(n,o),o.build(i),i};Rf.prototype.getTileCredits=function(e,t,n){return this._tileCredits};Rf.prototype.requestImage=function(e,t,n,i){return Oc.loadImage(this,n0e(this,e,t,n,i))};Rf.prototype.pickFeatures=function(e,t,n,i,o){if(!this.enablePickFeatures)return;let r=this._tilingScheme.tileXYToNativeRectangle(e,t,n),s,a,c;if(this._tilingScheme.projection instanceof Zi)s=W.toDegrees(i),a=W.toDegrees(o),c="4326";else{let p=this._tilingScheme.projection.project(new he(i,o,0));s=p.x,a=p.y,c="3857"}let l="visible";d(this._layers)&&(l+=`:${this._layers}`);let u={f:"json",tolerance:2,geometryType:"esriGeometryPoint",geometry:`${s},${a}`,mapExtent:`${r.west},${r.south},${r.east},${r.north}`,imageDisplay:`${this._tileWidth},${this._tileHeight},96`,sr:c,layers:l};return this._resource.getDerivedResource({url:"identify",queryParameters:u}).fetchJson().then(function(p){let y=[],f=p.results;if(!d(f))return y;for(let x=0;x<f.length;++x){let _=f[x],C=new mh;if(C.data=_,C.name=_.value,C.properties=_.attributes,C.configureDescriptionFromProperties(_.attributes),_.geometryType==="esriGeometryPoint"&&_.geometry){let V=_.geometry.spatialReference&&_.geometry.spatialReference.wkid?_.geometry.spatialReference.wkid:4326;if(V===4326||V===4283)C.position=he.fromDegrees(_.geometry.x,_.geometry.y,_.geometry.z);else if(V===102100||V===900913||V===3857){let L=new Ei;C.position=L.unproject(new h(_.geometry.x,_.geometry.y,_.geometry.z))}}y.push(C)}return y})};Rf._metadataCache={};var v0=Rf;var I_i=T(S(),1);var m_i=T(S(),1),Gnt={AERIAL:"Aerial",AERIAL_WITH_LABELS:"AerialWithLabels",AERIAL_WITH_LABELS_ON_DEMAND:"AerialWithLabelsOnDemand",ROAD:"Road",ROAD_ON_DEMAND:"RoadOnDemand",CANVAS_DARK:"CanvasDark",CANVAS_LIGHT:"CanvasLight",CANVAS_GRAY:"CanvasGray",ORDNANCE_SURVEY:"OrdnanceSurvey",COLLINS_BART:"CollinsBart"},oV=Object.freeze(Gnt);var p_i=T(S(),1);function Zv(e){}Zv.prototype.isReady=function(){return!0};Zv.prototype.shouldDiscardImage=function(e){return Zv.EMPTY_IMAGE===e};var JU;Object.defineProperties(Zv,{EMPTY_IMAGE:{get:function(){return d(JU)||(JU=new Image,JU.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="),JU}}});var rV=Zv;function i0e(e){this.tileWidth=void 0,this.tileHeight=void 0,this.maximumLevel=void 0,this.imageUrlSubdomains=void 0,this.imageUrlTemplate=void 0,this.attributionList=void 0}i0e.prototype.build=function(e){e._tileWidth=this.tileWidth,e._tileHeight=this.tileHeight,e._maximumLevel=this.maximumLevel,e._imageUrlSubdomains=this.imageUrlSubdomains,e._imageUrlTemplate=this.imageUrlTemplate;let t=e._attributionList=this.attributionList;t||(t=[]),e._attributionList=t;for(let n=0,i=t.length;n<i;++n){let o=t[n];if(o.credit instanceof St)break;o.credit=new St(o.attribution);let r=o.coverageAreas;for(let s=0,a=o.coverageAreas.length;s<a;++s){let c=r[s],l=c.bbox;c.bbox=new de(W.toRadians(l[1]),W.toRadians(l[0]),W.toRadians(l[3]),W.toRadians(l[2]))}}};function Ent(e,t){if(e.resourceSets.length!==1)throw new me("metadata does not specify one resource in resourceSets");let n=e.resourceSets[0].resources[0];t.tileWidth=n.imageWidth,t.tileHeight=n.imageHeight,t.maximumLevel=n.zoomMax-1,t.imageUrlSubdomains=n.imageUrlSubdomains,t.imageUrlTemplate=n.imageUrl,t.attributionList=n.imageryProviders}function Xnt(e,t,n){let i=`An error occurred while accessing ${e.url}`;throw d(t)&&d(t.message)&&(i+=`: ${t.message}`),Vo.reportError(void 0,n,d(n)?n._errorEvent:void 0,i,void 0,void 0,void 0,t),new me(i)}async function Int(e,t,n){let i=e.url,o=hs._metadataCache[i];d(o)||(o=e.fetchJsonp("jsonp"),hs._metadataCache[i]=o);try{let r=await o;return Ent(r,t)}catch(r){Xnt(e,r,n)}}function hs(e){e=g(e,g.EMPTY_OBJECT),this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=1,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._mapStyle=g(e.mapStyle,oV.AERIAL),this._mapLayer=e.mapLayer,this._culture=g(e.culture,""),this._key=e.key,this._tileDiscardPolicy=e.tileDiscardPolicy,d(this._tileDiscardPolicy)||(this._tileDiscardPolicy=new rV),this._proxy=e.proxy,this._credit=new St(`<a href="https://www.microsoft.com/en-us/maps/product/enduserterms"><img src="${hs.logoUrl}" title="Bing Imagery"/></a>`),this._tilingScheme=new kr({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,ellipsoid:e.ellipsoid}),this._tileWidth=void 0,this._tileHeight=void 0,this._maximumLevel=void 0,this._imageUrlTemplate=void 0,this._imageUrlSubdomains=void 0,this._attributionList=void 0,this._errorEvent=new ye}Object.defineProperties(hs.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},key:{get:function(){return this._key}},mapStyle:{get:function(){return this._mapStyle}},mapLayer:{get:function(){return this._mapLayer}},culture:{get:function(){return this._culture}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return 0}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return d(this.mapLayer)}}});hs.fromUrl=async function(e,t){t=g(t,g.EMPTY_OBJECT);let n=t.tileProtocol;d(n)?n.length>0&&n[n.length-1]===":"&&(n=n.substr(0,n.length-1)):n=document.location.protocol==="http:"?"http":"https";let i=g(t.mapStyle,oV.AERIAL),o=Ee.createIfNeeded(e);o.appendForwardSlash();let r={incl:"ImageryProviders",key:t.key,uriScheme:n};d(t.mapLayer)&&(r.mapLayer=t.mapLayer);let s=o.getDerivedResource({url:`REST/v1/Imagery/Metadata/${i}`,queryParameters:r}),a=new hs(t);a._resource=o;let c=new i0e(t);return await Int(s,c),c.build(a),a};var Wnt=new de;hs.prototype.getTileCredits=function(e,t,n){let i=this._tilingScheme.tileXYToRectangle(e,t,n,Wnt);return wnt(this._attributionList,n,i)};hs.prototype.requestImage=function(e,t,n,i){let o=Oc.loadImage(this,Pnt(this,e,t,n,i));if(d(o))return o.catch(function(r){return d(r.blob)&&r.blob.size===0?rV.EMPTY_IMAGE:Promise.reject(r)})};hs.prototype.pickFeatures=function(e,t,n,i,o){};hs.tileXYToQuadKey=function(e,t,n){let i="";for(let o=n;o>=0;--o){let r=1<<o,s=0;e&r&&(s|=1),t&r&&(s|=2),i+=s}return i};hs.quadKeyToTileXY=function(e){let t=0,n=0,i=e.length-1;for(let o=i;o>=0;--o){let r=1<<o,s=+e[i-o];s&1&&(t|=r),s&2&&(n|=r)}return{x:t,y:n,level:i}};hs._logoUrl=void 0;Object.defineProperties(hs,{logoUrl:{get:function(){return d(hs._logoUrl)||(hs._logoUrl=$t("Assets/Images/bing_maps_credit.png")),hs._logoUrl},set:function(e){hs._logoUrl=e}}});function Pnt(e,t,n,i,o){let r=e._imageUrlTemplate,s=e._imageUrlSubdomains,a=(t+n+i)%s.length;return e._resource.getDerivedResource({url:r,request:o,templateValues:{quadkey:hs.tileXYToQuadKey(t,n,i),subdomain:s[a],culture:e._culture},queryParameters:{n:"z"}})}var vnt=new de;function wnt(e,t,n){++t;let i=[];for(let o=0,r=e.length;o<r;++o){let s=e[o],a=s.coverageAreas,c=!1;for(let l=0,u=s.coverageAreas.length;!c&&l<u;++l){let m=a[l];if(t>=m.zoomMin&&t<=m.zoomMax){let p=de.intersection(n,m.bbox,vnt);d(p)&&(c=!0)}}c&&i.push(s.credit)}return i}hs._metadataCache={};var Gv=hs;var cTi=T(S(),1);var H_i=T(S(),1);var o0e=/{[^}]+}/g,r0e={x:Nnt,y:knt,z:Ynt,s:Ont,reverseX:Unt,reverseY:Dnt,reverseZ:Bnt,westDegrees:Knt,southDegrees:Hnt,eastDegrees:znt,northDegrees:Jnt,westProjected:Qnt,southProjected:jnt,eastProjected:qnt,northProjected:$nt,width:eit,height:tit},Fnt=xt(r0e,{i:nit,j:iit,reverseI:oit,reverseJ:rit,longitudeDegrees:ait,latitudeDegrees:cit,longitudeProjected:lit,latitudeProjected:dit,format:mit});function Ev(e){e=g(e,g.EMPTY_OBJECT),this._errorEvent=new ye;let t=Ee.createIfNeeded(e.url),n=Ee.createIfNeeded(e.pickFeaturesUrl);this._resource=t,this._urlSchemeZeroPadding=e.urlSchemeZeroPadding,this._getFeatureInfoFormats=e.getFeatureInfoFormats,this._pickFeaturesResource=n;let i=e.subdomains;Array.isArray(i)?i=i.slice():d(i)&&i.length>0?i=i.split(""):i=["a","b","c"],this._subdomains=i,this._tileWidth=g(e.tileWidth,256),this._tileHeight=g(e.tileHeight,256),this._minimumLevel=g(e.minimumLevel,0),this._maximumLevel=e.maximumLevel,this._tilingScheme=g(e.tilingScheme,new kr({ellipsoid:e.ellipsoid})),this._rectangle=g(e.rectangle,this._tilingScheme.rectangle),this._rectangle=de.intersection(this._rectangle,this._tilingScheme.rectangle),this._tileDiscardPolicy=e.tileDiscardPolicy;let o=e.credit;typeof o=="string"&&(o=new St(o)),this._credit=o,this._hasAlphaChannel=g(e.hasAlphaChannel,!0);let r=e.customTags,s=xt(r0e,r),a=xt(Fnt,r);this._tags=s,this._pickFeaturesTags=a,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this.enablePickFeatures=g(e.enablePickFeatures,!0)}Object.defineProperties(Ev.prototype,{url:{get:function(){return this._resource.url}},urlSchemeZeroPadding:{get:function(){return this._urlSchemeZeroPadding}},pickFeaturesUrl:{get:function(){return this._pickFeaturesResource.url}},proxy:{get:function(){return this._resource.proxy}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return this._minimumLevel}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return this._hasAlphaChannel}}});Ev.prototype.getTileCredits=function(e,t,n){};Ev.prototype.requestImage=function(e,t,n,i){return Oc.loadImage(this,Ant(this,e,t,n,i))};Ev.prototype.pickFeatures=function(e,t,n,i,o){if(!this.enablePickFeatures||!d(this._pickFeaturesResource)||this._getFeatureInfoFormats.length===0)return;let r=0,s=this;function a(l,u){return l.callback(u)}function c(){if(r>=s._getFeatureInfoFormats.length)return Promise.resolve([]);let l=s._getFeatureInfoFormats[r],u=Mnt(s,e,t,n,i,o,l.format);return++r,l.type==="json"?u.fetchJson().then(l.callback).catch(c):l.type==="xml"?u.fetchXML().then(l.callback).catch(c):l.type==="text"||l.type==="html"?u.fetchText().then(l.callback).catch(c):u.fetch({responseType:l.format}).then(a.bind(void 0,l)).catch(c)}return c()};var QU=!1,Id=new de,jU=!1,Xv=new de;function Ant(e,t,n,i,o){QU=!1,jU=!1;let r=e._resource,s=r.getUrlComponent(!0),a=e._tags,c={},l=s.match(o0e);return d(l)&&l.forEach(function(u){let m=u.substring(1,u.length-1);d(a[m])&&(c[m]=a[m](e,t,n,i))}),r.getDerivedResource({request:o,templateValues:c})}var RQ=!1,aV=new D,ZQ=!1;function Mnt(e,t,n,i,o,r,s){QU=!1,jU=!1,RQ=!1,ZQ=!1;let a=e._pickFeaturesResource,c=a.getUrlComponent(!0),l=e._pickFeaturesTags,u={},m=c.match(o0e);return d(m)&&m.forEach(function(p){let y=p.substring(1,p.length-1);d(l[y])&&(u[y]=l[y](e,t,n,i,o,r,s))}),a.getDerivedResource({templateValues:u})}function cV(e,t,n){if(e&&e.urlSchemeZeroPadding&&e.urlSchemeZeroPadding.hasOwnProperty(t)){let i=e.urlSchemeZeroPadding[t];if(typeof i=="string"){let o=i.length;o>1&&(n=n.length>=o?n:new Array(o-n.toString().length+1).join("0")+n)}}return n}function Nnt(e,t,n,i){return cV(e,"{x}",t)}function Unt(e,t,n,i){let o=e.tilingScheme.getNumberOfXTilesAtLevel(i)-t-1;return cV(e,"{reverseX}",o)}function knt(e,t,n,i){return cV(e,"{y}",n)}function Dnt(e,t,n,i){let o=e.tilingScheme.getNumberOfYTilesAtLevel(i)-n-1;return cV(e,"{reverseY}",o)}function Bnt(e,t,n,i){let o=e.maximumLevel,r=d(o)&&i<o?o-i-1:i;return cV(e,"{reverseZ}",r)}function Ynt(e,t,n,i){return cV(e,"{z}",i)}function Ont(e,t,n,i){let o=(t+n+i)%e._subdomains.length;return e._subdomains[o]}function qU(e,t,n,i){QU||(e.tilingScheme.tileXYToRectangle(t,n,i,Id),Id.west=W.toDegrees(Id.west),Id.south=W.toDegrees(Id.south),Id.east=W.toDegrees(Id.east),Id.north=W.toDegrees(Id.north),QU=!0)}function Knt(e,t,n,i){return qU(e,t,n,i),Id.west}function Hnt(e,t,n,i){return qU(e,t,n,i),Id.south}function znt(e,t,n,i){return qU(e,t,n,i),Id.east}function Jnt(e,t,n,i){return qU(e,t,n,i),Id.north}function $U(e,t,n,i){jU||(e.tilingScheme.tileXYToNativeRectangle(t,n,i,Xv),jU=!0)}function Qnt(e,t,n,i){return $U(e,t,n,i),Xv.west}function jnt(e,t,n,i){return $U(e,t,n,i),Xv.south}function qnt(e,t,n,i){return $U(e,t,n,i),Xv.east}function $nt(e,t,n,i){return $U(e,t,n,i),Xv.north}function eit(e,t,n,i){return e.tileWidth}function tit(e,t,n,i){return e.tileHeight}function nit(e,t,n,i,o,r,s){return ek(e,t,n,i,o,r),aV.x}function iit(e,t,n,i,o,r,s){return ek(e,t,n,i,o,r),aV.y}function oit(e,t,n,i,o,r,s){return ek(e,t,n,i,o,r),e.tileWidth-aV.x-1}function rit(e,t,n,i,o,r,s){return ek(e,t,n,i,o,r),e.tileHeight-aV.y-1}var sit=new de,sV=new h;function ek(e,t,n,i,o,r,s){if(RQ)return;GQ(e,t,n,i,o,r);let a=sV,c=e.tilingScheme.tileXYToNativeRectangle(t,n,i,sit);aV.x=e.tileWidth*(a.x-c.west)/c.width|0,aV.y=e.tileHeight*(c.north-a.y)/c.height|0,RQ=!0}function ait(e,t,n,i,o,r,s){return W.toDegrees(o)}function cit(e,t,n,i,o,r,s){return W.toDegrees(r)}function lit(e,t,n,i,o,r,s){return GQ(e,t,n,i,o,r),sV.x}function dit(e,t,n,i,o,r,s){return GQ(e,t,n,i,o,r),sV.y}var uit=new he;function GQ(e,t,n,i,o,r,s){if(!ZQ){if(e.tilingScheme.projection instanceof Zi)sV.x=W.toDegrees(o),sV.y=W.toDegrees(r);else{let a=uit;a.longitude=o,a.latitude=r,e.tilingScheme.projection.project(a,sV)}ZQ=!0}}function mit(e,t,n,i,o,r,s){return s}var Ca=Ev;function ku(e){Ca.call(this,e)}ku._requestMetadata=async function(e,t,n,i){try{let o=await n.fetchXML();return ku._metadataSuccess(o,e,t,n,i)}catch(o){if(o instanceof Rh)return ku._metadataFailure(e,t);throw o}};ku.fromUrl=async function(e,t){let n=Ee.createIfNeeded(e);n.appendForwardSlash();let i=n,o=n.getDerivedResource({url:"tilemapresource.xml"});t=g(t,g.EMPTY_OBJECT);let r=await ku._requestMetadata(t,i,o);return new ku(r)};d(Object.create)&&(ku.prototype=Object.create(Ca.prototype),ku.prototype.constructor=ku);function s0e(e,t){return e.west<t.rectangle.west&&(e.west=t.rectangle.west),e.east>t.rectangle.east&&(e.east=t.rectangle.east),e.south<t.rectangle.south&&(e.south=t.rectangle.south),e.north>t.rectangle.north&&(e.north=t.rectangle.north),e}function a0e(e,t,n){let i=e.positionToTileXY(de.southwest(t),n),o=e.positionToTileXY(de.northeast(t),n);return(Math.abs(o.x-i.x)+1)*(Math.abs(o.y-i.y)+1)>4?0:n}ku._metadataSuccess=function(e,t,n,i,o){let r=/tileformat/i,s=/tileset/i,a=/tilesets/i,c=/boundingbox/i,l,u,m,p=[],y=e.childNodes[0].childNodes;for(let v=0;v<y.length;v++)if(r.test(y.item(v).nodeName))l=y.item(v);else if(a.test(y.item(v).nodeName)){m=y.item(v);let F=y.item(v).childNodes;for(let M=0;M<F.length;M++)s.test(F.item(M).nodeName)&&p.push(F.item(M))}else c.test(y.item(v).nodeName)&&(u=y.item(v));let f;if(!d(m)||!d(u))throw f=`Unable to find expected tilesets or bbox attributes in ${i.url}.`,d(o)&&Vo.reportError(void 0,o,o.errorEvent,f),new me(f);let x=g(t.fileExtension,l.getAttribute("extension")),_=g(t.tileWidth,parseInt(l.getAttribute("width"),10)),C=g(t.tileHeight,parseInt(l.getAttribute("height"),10)),V=g(t.minimumLevel,parseInt(p[0].getAttribute("order"),10)),L=g(t.maximumLevel,parseInt(p[p.length-1].getAttribute("order"),10)),Z=m.getAttribute("profile"),G=t.tilingScheme;if(!d(G))if(Z==="geodetic"||Z==="global-geodetic")G=new Di({ellipsoid:t.ellipsoid});else if(Z==="mercator"||Z==="global-mercator")G=new kr({ellipsoid:t.ellipsoid});else throw f=`${i.url} specifies an unsupported profile attribute, ${Z}.`,d(o)&&Vo.reportError(void 0,o,o.errorEvent,f),new me(f);let X=de.clone(t.rectangle);if(!d(X)){let v,F,M,b;g(t.flipXY,!1)?(M=new D(parseFloat(u.getAttribute("miny")),parseFloat(u.getAttribute("minx"))),b=new D(parseFloat(u.getAttribute("maxy")),parseFloat(u.getAttribute("maxx")))):(M=new D(parseFloat(u.getAttribute("minx")),parseFloat(u.getAttribute("miny"))),b=new D(parseFloat(u.getAttribute("maxx")),parseFloat(u.getAttribute("maxy"))));let E=Z==="geodetic"||Z==="mercator";if(G.projection instanceof Zi||E)v=he.fromDegrees(M.x,M.y),F=he.fromDegrees(b.x,b.y);else{let I=G.projection;v=I.unproject(M),F=I.unproject(b)}X=new de(v.longitude,v.latitude,F.longitude,F.latitude)}return X=s0e(X,G),V=a0e(G,X,V),{url:n.getDerivedResource({url:`{z}/{x}/{reverseY}.${x}`}),tilingScheme:G,rectangle:X,tileWidth:_,tileHeight:C,minimumLevel:V,maximumLevel:L,tileDiscardPolicy:t.tileDiscardPolicy,credit:t.credit}};ku._metadataFailure=function(e,t){let n=g(e.fileExtension,"png"),i=g(e.tileWidth,256),o=g(e.tileHeight,256),r=e.maximumLevel,s=d(e.tilingScheme)?e.tilingScheme:new kr({ellipsoid:e.ellipsoid}),a=g(e.rectangle,s.rectangle);a=s0e(a,s);let c=a0e(s,a,e.minimumLevel);return{url:t.getDerivedResource({url:`{z}/{x}/{reverseY}.${n}`}),tilingScheme:s,rectangle:a,tileWidth:i,tileHeight:o,minimumLevel:c,maximumLevel:r,tileDiscardPolicy:e.tileDiscardPolicy,credit:e.credit}};var jy=ku;var STi=T(S(),1);function c0e(e){this.channel=e.channel,this.ellipsoid=e.ellipsoid,this.tilingScheme=void 0,this.version=void 0}c0e.prototype.build=function(e){e._channel=this.channel,e._version=this.version,e._tilingScheme=this.tilingScheme};function hit(e,t){let n;try{n=JSON.parse(e)}catch{n=JSON.parse(e.replace(/([\[\{,])[\n\r ]*([A-Za-z0-9]+)[\n\r ]*:/g,'$1"$2":'))}let i;for(let o=0;o<n.layers.length;o++)if(n.layers[o].id===t.channel){i=n.layers[o];break}if(!d(i)){let o=`Could not find layer with channel (id) of ${t.channel}.`;throw new me(o)}if(!d(i.version)){let o=`Could not find a version in channel (id) ${t.channel}.`;throw new me(o)}if(t.version=i.version,d(n.projection)&&n.projection==="flat")t.tilingScheme=new Di({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,rectangle:new de(-Math.PI,-Math.PI,Math.PI,Math.PI),ellipsoid:t.ellipsoid});else if(!d(n.projection)||n.projection==="mercator")t.tilingScheme=new kr({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,ellipsoid:t.ellipsoid});else{let o=`Unsupported projection ${n.projection}.`;throw new me(o)}return!0}function fit(e,t,n){let i=`An error occurred while accessing ${t.url}.`;throw d(e)&&d(e.message)&&(i+=`: ${e.message}`),Vo.reportError(void 0,n,d(n)?n._errorEvent:void 0,i),new me(i)}async function pit(e,t,n){try{let i=await e.fetchText();hit(i,t)}catch(i){fit(i,e,n)}}function wl(e){e=g(e,{}),this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=1.9,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._tileDiscardPolicy=e.tileDiscardPolicy,this._channel=e.channel,this._requestType="ImageryMaps",this._credit=new St(`<a href="http://www.google.com/enterprise/mapsearth/products/earthenterprise.html"><img src="${wl.logoUrl}" title="Google Imagery"/></a>`),this._tilingScheme=void 0,this._version=void 0,this._tileWidth=256,this._tileHeight=256,this._maximumLevel=e.maximumLevel,this._errorEvent=new ye}Object.defineProperties(wl.prototype,{url:{get:function(){return this._url}},path:{get:function(){return this._path}},proxy:{get:function(){return this._resource.proxy}},channel:{get:function(){return this._channel}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return 0}},tilingScheme:{get:function(){return this._tilingScheme}},version:{get:function(){return this._version}},requestType:{get:function(){return this._requestType}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return!0}}});wl.fromUrl=async function(e,t,n){n=g(n,{});let i=g(n.path,"/default_map"),o=Ee.createIfNeeded(e).getDerivedResource({url:i[0]==="/"?i.substring(1):i});o.appendForwardSlash();let r=o.getDerivedResource({url:"query",queryParameters:{request:"Json",vars:"geeServerDefs",is2d:"t"}}),s=new c0e(n);s.channel=t,await pit(r,s);let a=new wl(n);return s.build(a),a._resource=o,a._url=e,a._path=i,a};wl.prototype.getTileCredits=function(e,t,n){};wl.prototype.requestImage=function(e,t,n,i){let o=this._resource.getDerivedResource({url:"query",request:i,queryParameters:{request:this._requestType,channel:this._channel,version:this._version,x:e,y:t,z:n+1}});return Oc.loadImage(this,o)};wl.prototype.pickFeatures=function(e,t,n,i,o){};wl._logoUrl=void 0;Object.defineProperties(wl,{logoUrl:{get:function(){return d(wl._logoUrl)||(wl._logoUrl=$t("Assets/Images/google_earth_credit.png")),wl._logoUrl},set:function(e){wl._logoUrl=e}}});var Iv=wl;var ETi=T(S(),1);var bit=/\/$/,l0e=new St('&copy; <a href="https://www.mapbox.com/about/maps/">Mapbox</a> &copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> <strong><a href="https://www.mapbox.com/map-feedback/">Improve this map</a></strong>');function lV(e){e=g(e,g.EMPTY_OBJECT);let t=e.mapId,n=e.accessToken;this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0;let i=Ee.createIfNeeded(g(e.url,"https://{s}.tiles.mapbox.com/v4/"));this._mapId=t,this._accessToken=n;let o=g(e.format,"png");/\./.test(o)||(o=`.${o}`),this._format=o;let r=i.getUrlComponent();bit.test(r)||(r+="/"),r+=`${t}/{z}/{x}/{y}${this._format}`,i.url=r,i.setQueryParameters({access_token:n});let s;d(e.credit)?(s=e.credit,typeof s=="string"&&(s=new St(s))):s=l0e,this._resource=i,this._imageryProvider=new Ca({url:i,credit:s,ellipsoid:e.ellipsoid,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,rectangle:e.rectangle})}Object.defineProperties(lV.prototype,{url:{get:function(){return this._imageryProvider.url}},rectangle:{get:function(){return this._imageryProvider.rectangle}},tileWidth:{get:function(){return this._imageryProvider.tileWidth}},tileHeight:{get:function(){return this._imageryProvider.tileHeight}},maximumLevel:{get:function(){return this._imageryProvider.maximumLevel}},minimumLevel:{get:function(){return this._imageryProvider.minimumLevel}},tilingScheme:{get:function(){return this._imageryProvider.tilingScheme}},tileDiscardPolicy:{get:function(){return this._imageryProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._imageryProvider.errorEvent}},credit:{get:function(){return this._imageryProvider.credit}},proxy:{get:function(){return this._imageryProvider.proxy}},hasAlphaChannel:{get:function(){return this._imageryProvider.hasAlphaChannel}}});lV.prototype.getTileCredits=function(e,t,n){};lV.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)};lV.prototype.pickFeatures=function(e,t,n,i,o){return this._imageryProvider.pickFeatures(e,t,n,i,o)};lV._defaultCredit=l0e;var Wv=lV;var kTi=T(S(),1);function tT(e){e=g(e,g.EMPTY_OBJECT),this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0;let t=g(e.rectangle,de.MAX_VALUE),n=new Di({rectangle:t,numberOfLevelZeroTilesX:1,numberOfLevelZeroTilesY:1,ellipsoid:e.ellipsoid});this._tilingScheme=n,this._image=void 0,this._texture=void 0,this._hasError=!1,this._errorEvent=new ye;let i=e.credit;typeof i=="string"&&(i=new St(i)),this._credit=i;let o=Ee.createIfNeeded(e.url);this._resource=o,this._tileWidth=e.tileWidth,this._tileHeight=e.tileHeight}Object.defineProperties(tT.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return 0}},minimumLevel:{get:function(){return 0}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return!0}}});function yit(e,t,n,i){let o=`Failed to load image ${e.url}`;d(t)&&d(t.message)&&(o+=`: ${t.message}`);let r=Vo.reportError(i,n,d(n)?n._errorEvent:void 0,o,0,0,0,t);if(r.retry)return EQ(e,n,r);throw d(n)&&(n._hasError=!0),new me(o)}async function EQ(e,t,n){try{return await Oc.loadImage(null,e)}catch(i){return yit(e,i,t,n)}}tT.fromUrl=async function(e,t){let n=Ee.createIfNeeded(e),i=await EQ(n);t=g(t,g.EMPTY_OBJECT);let o=new tT({...t,url:e,tileWidth:i.width,tileHeight:i.height});return o._image=i,o};tT.prototype.getTileCredits=function(e,t,n){};tT.prototype.requestImage=async function(e,t,n,i){if(!this._hasError&&!d(this._image)){let o=await EQ(this._resource,this);return this._image=o,Vo.reportSuccess(this._errorEvent),o}return this._image};tT.prototype.pickFeatures=function(e,t,n,i,o){};var Pv=tT;var uSi=T(S(),1);var HTi=T(S(),1);function git(e,t,n){this.type=e,d(t)||(e==="json"?t="application/json":e==="xml"?t="text/xml":e==="html"?t="text/html":e==="text"&&(t="text/plain")),this.format=t,d(n)||(e==="json"?n=xit:e==="xml"?n=Cit:(e==="html"||e==="text")&&(n=d0e)),this.callback=n}function xit(e){let t=[],n=e.features;for(let i=0;i<n.length;++i){let o=n[i],r=new mh;if(r.data=o,r.properties=o.properties,r.configureNameFromProperties(o.properties),r.configureDescriptionFromProperties(o.properties),d(o.geometry)&&o.geometry.type==="Point"){let s=o.geometry.coordinates[0],a=o.geometry.coordinates[1];r.position=he.fromDegrees(s,a)}t.push(r)}return t}var XQ="http://www.mapinfo.com/mxp",_it="http://www.esri.com/wms",Tit="http://www.opengis.net/wfs",Sit="http://www.opengis.net/gml";function Cit(e){let t=e.documentElement;if(t.localName==="MultiFeatureCollection"&&t.namespaceURI===XQ)return Vit(e);if(t.localName==="FeatureInfoResponse"&&t.namespaceURI===_it)return Lit(e);if(t.localName==="FeatureCollection"&&t.namespaceURI===Tit)return Rit(e);if(t.localName==="ServiceExceptionReport")throw new me(new XMLSerializer().serializeToString(t));return t.localName==="msGMLOutput"?Zit(e):Git(e)}function Vit(e){let t=[],i=e.documentElement.getElementsByTagNameNS(XQ,"Feature");for(let o=0;o<i.length;++o){let r=i[o],s={},a=r.getElementsByTagNameNS(XQ,"Val");for(let l=0;l<a.length;++l){let u=a[l];if(u.hasAttribute("ref")){let m=u.getAttribute("ref"),p=u.textContent.trim();s[m]=p}}let c=new mh;c.data=r,c.properties=s,c.configureNameFromProperties(s),c.configureDescriptionFromProperties(s),t.push(c)}return t}function Lit(e){let t=e.documentElement,n=[],i,o=t.getElementsByTagNameNS("*","FIELDS");if(o.length>0)for(let r=0;r<o.length;++r){let s=o[r];i={};let a=s.attributes;for(let c=0;c<a.length;++c){let l=a[c];i[l.name]=l.value}n.push(tk(s,i))}else{let r=t.getElementsByTagNameNS("*","FeatureInfo");for(let s=0;s<r.length;++s){let a=r[s];i={};let c=a.childNodes;for(let l=0;l<c.length;++l){let u=c[l];u.nodeType===Node.ELEMENT_NODE&&(i[u.localName]=u.textContent)}n.push(tk(a,i))}}return n}function Rit(e){let t=[],i=e.documentElement.getElementsByTagNameNS(Sit,"featureMember");for(let o=0;o<i.length;++o){let r=i[o],s={};IQ(r,s),t.push(tk(r,s))}return t}function Zit(e){let t=[],n,i=e.documentElement.childNodes;for(let r=0;r<i.length;r++)if(i[r].nodeType===Node.ELEMENT_NODE){n=i[r];break}if(!d(n))throw new me("Unable to find first child of the feature info xml document");let o=n.childNodes;for(let r=0;r<o.length;++r){let s=o[r];if(s.nodeType===Node.ELEMENT_NODE){let a={};IQ(s,a),t.push(tk(s,a))}}return t}function IQ(e,t){let n=!0;for(let i=0;i<e.childNodes.length;++i){let o=e.childNodes[i];o.nodeType===Node.ELEMENT_NODE&&(n=!1),!(o.localName==="Point"||o.localName==="LineString"||o.localName==="Polygon"||o.localName==="boundedBy")&&o.hasChildNodes()&&IQ(o,t)&&(t[o.localName]=o.textContent)}return n}function tk(e,t){let n=new mh;return n.data=e,n.properties=t,n.configureNameFromProperties(t),n.configureDescriptionFromProperties(t),n}function Git(e){let t=new XMLSerializer().serializeToString(e),n=document.createElement("div"),i=document.createElement("pre");i.textContent=t,n.appendChild(i);let o=new mh;return o.data=e,o.description=n.innerHTML,[o]}var Eit=/<body>\s*<\/body>/im,Xit=/<ServiceExceptionReport([\s\S]*)<\/ServiceExceptionReport>/im,Iit=/<title>([\s\S]*)<\/title>/im;function d0e(e){if(Eit.test(e)||Xit.test(e))return;let t,n=Iit.exec(e);n&&n.length>1&&(t=n[1]);let i=new mh;return i.name=t,i.description=e,i.data=e,[i]}var nT=git;var eSi=T(S(),1);function vv(e){e=g(e,g.EMPTY_OBJECT),this._tileCache={},this._tilesRequestedForInterval=[];let t=this._clock=e.clock;this._times=e.times,this._requestImageFunction=e.requestImageFunction,this._reloadFunction=e.reloadFunction,this._currentIntervalIndex=-1,t.onTick.addEventListener(this._clockOnTick,this),this._clockOnTick(t)}Object.defineProperties(vv.prototype,{clock:{get:function(){return this._clock},set:function(e){this._clock!==e&&(this._clock=e,this._clockOnTick(e),this._reloadFunction())}},times:{get:function(){return this._times},set:function(e){this._times!==e&&(this._times=e,this._clockOnTick(this._clock),this._reloadFunction())}},currentInterval:{get:function(){return this._times.get(this._currentIntervalIndex)}}});vv.prototype.getFromCache=function(e,t,n,i){let o=u0e(e,t,n),r,s=this._tileCache[this._currentIntervalIndex];if(d(s)&&d(s[o])){let a=s[o];r=a.promise.catch(function(c){throw i.state=a.request.state,c}),delete s[o]}return r};vv.prototype.checkApproachingInterval=function(e,t,n,i){let o=u0e(e,t,n),r=this._tilesRequestedForInterval,s=m0e(this),a={key:o,priorityFunction:i.priorityFunction};(!d(s)||!h0e(this,a,s))&&r.push(a),r.length>=512&&r.splice(0,256)};vv.prototype._clockOnTick=function(e){let t=e.currentTime,i=this._times.indexOf(t),o=this._currentIntervalIndex;if(i!==o){let s=this._tileCache[o];for(let a in s)s.hasOwnProperty(a)&&s[a].request.cancel();delete this._tileCache[o],this._tilesRequestedForInterval=[],this._currentIntervalIndex=i,this._reloadFunction();return}let r=m0e(this);if(d(r)){let s=this._tilesRequestedForInterval,a=!0;for(;a&&s.length!==0;){let c=s.pop();a=h0e(this,c,r),a||s.push(c)}}};function u0e(e,t,n){return`${e}-${t}-${n}`}function Wit(e){let t=e.split("-");if(t.length===3)return{x:Number(t[0]),y:Number(t[1]),level:Number(t[2])}}function m0e(e){let t=e._times;if(!d(t))return;let n=e._clock,i=n.currentTime,o=n.canAnimate&&n.shouldAnimate,r=n.multiplier;if(!o&&r!==0)return;let s,a=t.indexOf(i);if(a<0)return;let c=t.get(a);return r>0?(s=te.secondsDifference(c.stop,i),++a):(s=te.secondsDifference(c.start,i),--a),s/=r,a>=0&&s<=5?t.get(a):void 0}function h0e(e,t,n){let i=e._times.indexOf(n.start),o=e._tileCache,r=o[i];d(r)||(r=o[i]={});let s=t.key;if(d(r[s]))return!0;let a=Wit(s),c=new Uo({throttle:!1,throttleByServer:!0,type:Hr.IMAGERY,priorityFunction:t.priorityFunction}),l=e._requestImageFunction(a.x,a.y,a.level,c,n);return d(l)?(r[s]={promise:l,request:c},!0):!1}var iT=vv;var Pit=[3034,3035,3042,3043,3044],vit=[4471,4559];function fh(e){if(e=g(e,g.EMPTY_OBJECT),d(e.times)&&!d(e.clock))throw new fe("options.times was specified, so options.clock is required.");this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._getFeatureInfoUrl=g(e.getFeatureInfoUrl,e.url);let t=Ee.createIfNeeded(e.url),n=Ee.createIfNeeded(this._getFeatureInfoUrl);t.setQueryParameters(fh.DefaultParameters,!0),n.setQueryParameters(fh.GetFeatureInfoDefaultParameters,!0),d(e.parameters)&&t.setQueryParameters(f0e(e.parameters)),d(e.getFeatureInfoParameters)&&n.setQueryParameters(f0e(e.getFeatureInfoParameters));let i=this;this._reload=void 0,d(e.times)&&(this._timeDynamicImagery=new iT({clock:e.clock,times:e.times,requestImageFunction:function(s,a,c,l,u){return p0e(i,s,a,c,l,u)},reloadFunction:function(){d(i._reload)&&i._reload()}}));let o={};if(o.layers=e.layers,o.bbox="{westProjected},{southProjected},{eastProjected},{northProjected}",o.width="{width}",o.height="{height}",parseFloat(t.queryParameters.version)>=1.3){o.crs=g(e.crs,e.tilingScheme&&e.tilingScheme.projection instanceof Ei?"EPSG:3857":"CRS:84");let s=o.crs.split(":");if(s[0]==="EPSG"&&s.length===2){let a=Number(s[1]);(a>=4e3&&a<5e3&&!vit.includes(a)||Pit.includes(a))&&(o.bbox="{southProjected},{westProjected},{northProjected},{eastProjected}")}}else o.srs=g(e.srs,e.tilingScheme&&e.tilingScheme.projection instanceof Ei?"EPSG:3857":"EPSG:4326");t.setQueryParameters(o,!0),n.setQueryParameters(o,!0);let r={query_layers:e.layers,info_format:"{format}"};parseFloat(n.queryParameters.version)>=1.3?(r.i="{i}",r.j="{j}"):(r.x="{i}",r.y="{j}"),n.setQueryParameters(r,!0),this._resource=t,this._pickFeaturesResource=n,this._layers=e.layers,this._tileProvider=new Ca({url:t,pickFeaturesUrl:n,tilingScheme:g(e.tilingScheme,new Di({ellipsoid:e.ellipsoid})),rectangle:e.rectangle,tileWidth:e.tileWidth,tileHeight:e.tileHeight,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,subdomains:e.subdomains,tileDiscardPolicy:e.tileDiscardPolicy,credit:e.credit,getFeatureInfoFormats:g(e.getFeatureInfoFormats,fh.DefaultGetFeatureInfoFormats),enablePickFeatures:e.enablePickFeatures})}function p0e(e,t,n,i,o,r){let s=d(r)?r.data:void 0,a=e._tileProvider;return d(s)&&a._resource.setQueryParameters(s),a.requestImage(t,n,i,o)}function wit(e,t,n,i,o,r,s){let a=d(s)?s.data:void 0,c=e._tileProvider;return d(a)&&c._pickFeaturesResource.setQueryParameters(a),c.pickFeatures(t,n,i,o,r)}Object.defineProperties(fh.prototype,{url:{get:function(){return this._resource._url}},proxy:{get:function(){return this._resource.proxy}},layers:{get:function(){return this._layers}},tileWidth:{get:function(){return this._tileProvider.tileWidth}},tileHeight:{get:function(){return this._tileProvider.tileHeight}},maximumLevel:{get:function(){return this._tileProvider.maximumLevel}},minimumLevel:{get:function(){return this._tileProvider.minimumLevel}},tilingScheme:{get:function(){return this._tileProvider.tilingScheme}},rectangle:{get:function(){return this._tileProvider.rectangle}},tileDiscardPolicy:{get:function(){return this._tileProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._tileProvider.errorEvent}},credit:{get:function(){return this._tileProvider.credit}},hasAlphaChannel:{get:function(){return this._tileProvider.hasAlphaChannel}},enablePickFeatures:{get:function(){return this._tileProvider.enablePickFeatures},set:function(e){this._tileProvider.enablePickFeatures=e}},clock:{get:function(){return this._timeDynamicImagery.clock},set:function(e){this._timeDynamicImagery.clock=e}},times:{get:function(){return this._timeDynamicImagery.times},set:function(e){this._timeDynamicImagery.times=e}},getFeatureInfoUrl:{get:function(){return this._getFeatureInfoUrl}}});fh.prototype.getTileCredits=function(e,t,n){return this._tileProvider.getTileCredits(e,t,n)};fh.prototype.requestImage=function(e,t,n,i){let o,r=this._timeDynamicImagery,s;return d(r)&&(s=r.currentInterval,o=r.getFromCache(e,t,n,i)),d(o)||(o=p0e(this,e,t,n,i,s)),d(o)&&d(r)&&r.checkApproachingInterval(e,t,n,i),o};fh.prototype.pickFeatures=function(e,t,n,i,o){let r=this._timeDynamicImagery,s=d(r)?r.currentInterval:void 0;return wit(this,e,t,n,i,o,s)};fh.DefaultParameters=Object.freeze({service:"WMS",version:"1.1.1",request:"GetMap",styles:"",format:"image/jpeg"});fh.GetFeatureInfoDefaultParameters=Object.freeze({service:"WMS",version:"1.1.1",request:"GetFeatureInfo"});fh.DefaultGetFeatureInfoFormats=Object.freeze([Object.freeze(new nT("json","application/json")),Object.freeze(new nT("xml","text/xml")),Object.freeze(new nT("text","text/html"))]);function f0e(e){let t={};for(let n in e)e.hasOwnProperty(n)&&(t[n.toLowerCase()]=e[n]);return t}var wv=fh;var CSi=T(S(),1);var Fit=Object.freeze({service:"WMTS",version:"1.0.0",request:"GetTile"});function Fv(e){e=g(e,g.EMPTY_OBJECT),this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0;let t=Ee.createIfNeeded(e.url),n=e.style,i=e.tileMatrixSetID,o=t.url,r=o.match(/{/g);if(!d(r)||r.length===1&&/{s}/.test(o))t.setQueryParameters(Fit),this._useKvp=!0;else{let m={style:n,Style:n,TileMatrixSet:i};t.setTemplateValues(m),this._useKvp=!1}this._resource=t,this._layer=e.layer,this._style=n,this._tileMatrixSetID=i,this._tileMatrixLabels=e.tileMatrixLabels,this._format=g(e.format,"image/jpeg"),this._tileDiscardPolicy=e.tileDiscardPolicy,this._tilingScheme=d(e.tilingScheme)?e.tilingScheme:new kr({ellipsoid:e.ellipsoid}),this._tileWidth=g(e.tileWidth,256),this._tileHeight=g(e.tileHeight,256),this._minimumLevel=g(e.minimumLevel,0),this._maximumLevel=e.maximumLevel,this._rectangle=g(e.rectangle,this._tilingScheme.rectangle),this._dimensions=e.dimensions;let s=this;this._reload=void 0,d(e.times)&&(this._timeDynamicImagery=new iT({clock:e.clock,times:e.times,requestImageFunction:function(m,p,y,f,x){return b0e(s,m,p,y,f,x)},reloadFunction:function(){d(s._reload)&&s._reload()}}));let a=this._tilingScheme.positionToTileXY(de.southwest(this._rectangle),this._minimumLevel),c=this._tilingScheme.positionToTileXY(de.northeast(this._rectangle),this._minimumLevel),l=(Math.abs(c.x-a.x)+1)*(Math.abs(c.y-a.y)+1);this._errorEvent=new ye;let u=e.credit;this._credit=typeof u=="string"?new St(u):u,this._subdomains=e.subdomains,Array.isArray(this._subdomains)?this._subdomains=this._subdomains.slice():d(this._subdomains)&&this._subdomains.length>0?this._subdomains=this._subdomains.split(""):this._subdomains=["a","b","c"]}function b0e(e,t,n,i,o,r){let s=e._tileMatrixLabels,a=d(s)?s[i]:i.toString(),c=e._subdomains,l=e._dimensions,u=d(r)?r.data:void 0,m,p;if(!e._useKvp)p={TileMatrix:a,TileRow:n.toString(),TileCol:t.toString(),s:c[(t+n+i)%c.length]},m=e._resource.getDerivedResource({request:o}),m.setTemplateValues(p),d(l)&&m.setTemplateValues(l),d(u)&&m.setTemplateValues(u);else{let y={};y.tilematrix=a,y.layer=e._layer,y.style=e._style,y.tilerow=n,y.tilecol=t,y.tilematrixset=e._tileMatrixSetID,y.format=e._format,d(l)&&(y=xt(y,l)),d(u)&&(y=xt(y,u)),p={s:c[(t+n+i)%c.length]},m=e._resource.getDerivedResource({queryParameters:y,request:o}),m.setTemplateValues(p)}return Oc.loadImage(e,m)}Object.defineProperties(Fv.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return this._minimumLevel}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},format:{get:function(){return this._format}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return!0}},clock:{get:function(){return this._timeDynamicImagery.clock},set:function(e){this._timeDynamicImagery.clock=e}},times:{get:function(){return this._timeDynamicImagery.times},set:function(e){this._timeDynamicImagery.times=e}},dimensions:{get:function(){return this._dimensions},set:function(e){this._dimensions!==e&&(this._dimensions=e,d(this._reload)&&this._reload())}}});Fv.prototype.getTileCredits=function(e,t,n){};Fv.prototype.requestImage=function(e,t,n,i){let o,r=this._timeDynamicImagery,s;return d(r)&&(s=r.currentInterval,o=r.getFromCache(e,t,n,i)),d(o)||(o=b0e(this,e,t,n,i,s)),d(o)&&d(r)&&r.checkApproachingInterval(e,t,n,i),o};Fv.prototype.pickFeatures=function(e,t,n,i,o){};var Av=Fv;var Ait={ARCGIS_MAPSERVER:v0.fromUrl,BING:async(e,t)=>Gv.fromUrl(e,t),GOOGLE_EARTH:async(e,t)=>{let n=t.channel;return delete t.channel,Iv.fromUrl(e,n,t)},MAPBOX:(e,t)=>new Wv({url:e,...t}),SINGLE_TILE:Pv.fromUrl,TMS:jy.fromUrl,URL_TEMPLATE:(e,t)=>new Ca({url:e,...t}),WMS:(e,t)=>new wv({url:e,...t}),WMTS:(e,t)=>new Av({url:e,...t})};function Zf(e){e=g(e,g.EMPTY_OBJECT),this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._tileCredits=void 0,this._errorEvent=new ye}Object.defineProperties(Zf.prototype,{rectangle:{get:function(){return this._imageryProvider.rectangle}},tileWidth:{get:function(){return this._imageryProvider.tileWidth}},tileHeight:{get:function(){return this._imageryProvider.tileHeight}},maximumLevel:{get:function(){return this._imageryProvider.maximumLevel}},minimumLevel:{get:function(){return this._imageryProvider.minimumLevel}},tilingScheme:{get:function(){return this._imageryProvider.tilingScheme}},tileDiscardPolicy:{get:function(){return this._imageryProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._imageryProvider.credit}},hasAlphaChannel:{get:function(){return this._imageryProvider.hasAlphaChannel}},proxy:{get:function(){}}});Zf.fromAssetId=async function(e,t){t=g(t,g.EMPTY_OBJECT);let n=Ql._createEndpointResource(e,t),i=e.toString()+t.accessToken+t.server,o=Zf._endpointCache[i];d(o)||(o=n.fetchJson(),Zf._endpointCache[i]=o);let r=await o;if(r.type!=="IMAGERY")throw new me(`Cesium ion asset ${e} is not an imagery asset.`);let s,a=r.externalType;if(!d(a))s=await jy.fromUrl(new Ql(r,n));else{let l=Ait[a];if(!d(l))throw new me(`Unrecognized Cesium ion imagery type: ${a}`);let u={...r.options},m=u.url;delete u.url,s=await l(m,u)}let c=new Zf(t);return s.errorEvent.addEventListener(function(l){l.provider=c,c._errorEvent.raiseEvent(l)}),c._tileCredits=Ql.getCreditsFromEndpoint(r,n),c._imageryProvider=s,c};Zf.prototype.getTileCredits=function(e,t,n){let i=this._imageryProvider.getTileCredits(e,t,n);return d(i)?this._tileCredits.concat(i):this._tileCredits};Zf.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)};Zf.prototype.pickFeatures=function(e,t,n,i,o){return this._imageryProvider.pickFeatures(e,t,n,i,o)};Zf._endpointCache={};var w0=Zf;var kSi=T(S(),1),Mit={AERIAL:2,AERIAL_WITH_LABELS:3,ROAD:4},F0=Object.freeze(Mit);function Nit(e){e=g(e,g.EMPTY_OBJECT);let t=g(e.style,F0.AERIAL);return w0.fromAssetId(t)}var A0=Nit;var jSi=T(S(),1);function dV(e,t,n,i,o){if(this.imageryLayer=e,this.x=t,this.y=n,this.level=i,this.request=void 0,i!==0){let r=t/2|0,s=n/2|0,a=i-1;this.parent=e.getImageryFromCache(r,s,a)}this.state=ci.UNLOADED,this.imageUrl=void 0,this.image=void 0,this.texture=void 0,this.textureWebMercator=void 0,this.credits=void 0,this.referenceCount=0,!d(o)&&e.ready&&(o=e.imageryProvider.tilingScheme.tileXYToRectangle(t,n,i)),this.rectangle=o}dV.createPlaceholder=function(e){let t=new dV(e,0,0,0);return t.addReference(),t.state=ci.PLACEHOLDER,t};dV.prototype.addReference=function(){++this.referenceCount};dV.prototype.releaseReference=function(){return--this.referenceCount,this.referenceCount===0?(this.imageryLayer.removeImageryFromCache(this),d(this.parent)&&this.parent.releaseReference(),d(this.image)&&d(this.image.destroy)&&this.image.destroy(),d(this.texture)&&this.texture.destroy(),d(this.textureWebMercator)&&this.texture!==this.textureWebMercator&&this.textureWebMercator.destroy(),ue(this),0):this.referenceCount};dV.prototype.processStateMachine=function(e,t,n){this.state===ci.UNLOADED&&!n&&(this.state=ci.TRANSITIONING,this.imageryLayer._requestImagery(this)),this.state===ci.RECEIVED&&(this.state=ci.TRANSITIONING,this.imageryLayer._createTexture(e.context,this));let i=this.state===ci.READY&&t&&!this.texture;(this.state===ci.TEXTURE_LOADED||i)&&(this.state=ci.TRANSITIONING,this.imageryLayer._reprojectTexture(e,this,t))};var uV=dV;var tCi=T(S(),1);function WQ(e,t,n){this.readyImagery=void 0,this.loadingImagery=e,this.textureCoordinateRectangle=t,this.textureTranslationAndScale=void 0,this.useWebMercatorT=n}WQ.prototype.freeResources=function(){d(this.readyImagery)&&this.readyImagery.releaseReference(),d(this.loadingImagery)&&this.loadingImagery.releaseReference()};WQ.prototype.processStateMachine=function(e,t,n){let i=this.loadingImagery,o=i.imageryLayer;if(i.processStateMachine(t,!this.useWebMercatorT,n),i.state===ci.READY)return d(this.readyImagery)&&this.readyImagery.releaseReference(),this.readyImagery=this.loadingImagery,this.loadingImagery=void 0,this.textureTranslationAndScale=o._calculateTextureTranslationAndScale(e,this),!0;let r=i.parent,s;for(;d(r)&&(r.state!==ci.READY||!this.useWebMercatorT&&!d(r.texture));)r.state!==ci.FAILED&&r.state!==ci.INVALID&&(s=s||r),r=r.parent;return this.readyImagery!==r&&(d(this.readyImagery)&&this.readyImagery.releaseReference(),this.readyImagery=r,d(r)&&(r.addReference(),this.textureTranslationAndScale=o._calculateTextureTranslationAndScale(e,this))),i.state===ci.FAILED||i.state===ci.INVALID?d(s)?(s.processStateMachine(t,!this.useWebMercatorT,n),!1):!0:!1};var mV=WQ;function xi(e,t){this._imageryProvider=e,this._readyEvent=new ye,this._errorEvent=new ye,t=g(t,g.EMPTY_OBJECT),e=g(e,g.EMPTY_OBJECT),this.alpha=g(t.alpha,g(e._defaultAlpha,1)),this.nightAlpha=g(t.nightAlpha,g(e._defaultNightAlpha,1)),this.dayAlpha=g(t.dayAlpha,g(e._defaultDayAlpha,1)),this.brightness=g(t.brightness,g(e._defaultBrightness,xi.DEFAULT_BRIGHTNESS)),this.contrast=g(t.contrast,g(e._defaultContrast,xi.DEFAULT_CONTRAST)),this.hue=g(t.hue,g(e._defaultHue,xi.DEFAULT_HUE)),this.saturation=g(t.saturation,g(e._defaultSaturation,xi.DEFAULT_SATURATION)),this.gamma=g(t.gamma,g(e._defaultGamma,xi.DEFAULT_GAMMA)),this.splitDirection=g(t.splitDirection,xi.DEFAULT_SPLIT),this.minificationFilter=g(t.minificationFilter,g(e._defaultMinificationFilter,xi.DEFAULT_MINIFICATION_FILTER)),this.magnificationFilter=g(t.magnificationFilter,g(e._defaultMagnificationFilter,xi.DEFAULT_MAGNIFICATION_FILTER)),this.show=g(t.show,!0),this._minimumTerrainLevel=t.minimumTerrainLevel,this._maximumTerrainLevel=t.maximumTerrainLevel,this._rectangle=g(t.rectangle,de.MAX_VALUE),this._maximumAnisotropy=t.maximumAnisotropy,this._imageryCache={},this._skeletonPlaceholder=new mV(uV.createPlaceholder(this)),this._show=!0,this._layerIndex=-1,this._isBaseLayer=!1,this._requestImageError=void 0,this._reprojectComputeCommands=[],this.cutoutRectangle=t.cutoutRectangle,this.colorToAlpha=t.colorToAlpha,this.colorToAlphaThreshold=g(t.colorToAlphaThreshold,xi.DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD)}Object.defineProperties(xi.prototype,{imageryProvider:{get:function(){return this._imageryProvider}},ready:{get:function(){return d(this._imageryProvider)}},errorEvent:{get:function(){return this._errorEvent}},readyEvent:{get:function(){return this._readyEvent}},rectangle:{get:function(){return this._rectangle}}});xi.DEFAULT_BRIGHTNESS=1;xi.DEFAULT_CONTRAST=1;xi.DEFAULT_HUE=0;xi.DEFAULT_SATURATION=1;xi.DEFAULT_GAMMA=1;xi.DEFAULT_SPLIT=Pc.NONE;xi.DEFAULT_MINIFICATION_FILTER=cn.LINEAR;xi.DEFAULT_MAGNIFICATION_FILTER=Ti.LINEAR;xi.DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD=.004;xi.fromProviderAsync=function(e,t){let n=new xi(void 0,t);return Yit(n,Promise.resolve(e)),n};xi.fromWorldImagery=function(e){return e=g(e,g.EMPTY_OBJECT),xi.fromProviderAsync(A0({style:e.style}),e)};xi.prototype.isBaseLayer=function(){return this._isBaseLayer};xi.prototype.isDestroyed=function(){return!1};xi.prototype.destroy=function(){return ue(this)};var x0e=new de,y0e=new de,PQ=new de,_0e=new de;xi.prototype.getImageryRectangle=function(){let e=this._imageryProvider,t=this._rectangle;return de.intersection(e.rectangle,t)};xi.prototype._createTileImagerySkeletons=function(e,t,n){let i=e.data;if(!d(t)||d(this._minimumTerrainLevel)&&e.level<this._minimumTerrainLevel||d(this._maximumTerrainLevel)&&e.level>this._maximumTerrainLevel)return!1;d(n)||(n=i.imagery.length);let o=this._imageryProvider;if(!this.ready)return this._skeletonPlaceholder.loadingImagery.addReference(),i.imagery.splice(n,0,this._skeletonPlaceholder),!0;let r=o.tilingScheme.projection instanceof Ei&&e.rectangle.north<Ei.MaximumLatitude&&e.rectangle.south>-Ei.MaximumLatitude,s=de.intersection(o.rectangle,this._rectangle,x0e),a=de.intersection(e.rectangle,s,y0e);if(!d(a)){if(!this.isBaseLayer())return!1;let E=s,I=e.rectangle;a=y0e,I.south>=E.north?a.north=a.south=E.north:I.north<=E.south?a.north=a.south=E.south:(a.south=Math.max(I.south,E.south),a.north=Math.min(I.north,E.north)),I.west>=E.east?a.west=a.east=E.east:I.east<=E.west?a.west=a.east=E.west:(a.west=Math.max(I.west,E.west),a.east=Math.min(I.east,E.east))}let c=0;a.south>0?c=a.south:a.north<0&&(c=a.north);let u=1*t.getLevelMaximumGeometricError(e.level),m=Dit(this,u,c);m=Math.max(0,m);let p=o.maximumLevel;if(m>p&&(m=p),d(o.minimumLevel)){let E=o.minimumLevel;m<E&&(m=E)}let y=o.tilingScheme,f=y.positionToTileXY(de.northwest(a),m),x=y.positionToTileXY(de.southeast(a),m),_=e.rectangle.width/512,C=e.rectangle.height/512,V=y.tileXYToRectangle(f.x,f.y,m);Math.abs(V.south-e.rectangle.north)<C&&f.y<x.y&&++f.y,Math.abs(V.east-e.rectangle.west)<_&&f.x<x.x&&++f.x;let L=y.tileXYToRectangle(x.x,x.y,m);Math.abs(L.north-e.rectangle.south)<C&&x.y>f.y&&--x.y,Math.abs(L.west-e.rectangle.east)<_&&x.x>f.x&&--x.x;let Z=de.clone(e.rectangle,_0e),G=y.tileXYToRectangle(f.x,f.y,m),X=de.intersection(G,s,PQ),P;r?(y.rectangleToNativeRectangle(Z,Z),y.rectangleToNativeRectangle(G,G),y.rectangleToNativeRectangle(X,X),y.rectangleToNativeRectangle(s,s),P=y.tileXYToNativeRectangle.bind(y),_=Z.width/512,C=Z.height/512):P=y.tileXYToRectangle.bind(y);let v,F=0,M=1,b;!this.isBaseLayer()&&Math.abs(X.west-Z.west)>=_&&(F=Math.min(1,(X.west-Z.west)/Z.width)),!this.isBaseLayer()&&Math.abs(X.north-Z.north)>=C&&(M=Math.max(0,(X.north-Z.south)/Z.height));let R=M;for(let E=f.x;E<=x.x;E++)if(v=F,G=P(E,f.y,m),X=de.simpleIntersection(G,s,PQ),!!d(X)){F=Math.min(1,(X.east-Z.west)/Z.width),E===x.x&&(this.isBaseLayer()||Math.abs(X.east-Z.east)<_)&&(F=1),M=R;for(let I=f.y;I<=x.y;I++){if(b=M,G=P(E,I,m),X=de.simpleIntersection(G,s,PQ),!d(X))continue;M=Math.max(0,(X.south-Z.south)/Z.height),I===x.y&&(this.isBaseLayer()||Math.abs(X.south-Z.south)<C)&&(M=0);let w=new se(v,M,F,b),N=this.getImageryFromCache(E,I,m);i.imagery.splice(n,0,new mV(N,w,r)),++n}}return!0};xi.prototype._calculateTextureTranslationAndScale=function(e,t){let n=t.readyImagery.rectangle,i=e.rectangle;if(t.useWebMercatorT){let c=t.readyImagery.imageryLayer.imageryProvider.tilingScheme;n=c.rectangleToNativeRectangle(n,x0e),i=c.rectangleToNativeRectangle(i,_0e)}let o=i.width,r=i.height,s=o/n.width,a=r/n.height;return new se(s*(i.west-n.west)/o,a*(i.south-n.south)/r,s,a)};xi.prototype._requestImagery=function(e){let t=this._imageryProvider,n=this;function i(s){if(!d(s))return o();e.image=s,e.state=ci.RECEIVED,e.request=void 0,Vo.reportSuccess(n._requestImageError)}function o(s){if(e.request.state===$n.CANCELLED){e.state=ci.UNLOADED,e.request=void 0;return}e.state=ci.FAILED,e.request=void 0;let a=`Failed to obtain image tile X: ${e.x} Y: ${e.y} Level: ${e.level}.`;n._requestImageError=Vo.reportError(n._requestImageError,t,t.errorEvent,a,e.x,e.y,e.level,s),n._requestImageError.retry&&r()}function r(){let s=new Uo({throttle:!1,throttleByServer:!0,type:Hr.IMAGERY});e.request=s,e.state=ci.TRANSITIONING;let a=t.requestImage(e.x,e.y,e.level,s);if(!d(a)){e.state=ci.UNLOADED,e.request=void 0;return}d(t.getTileCredits)&&(e.credits=t.getTileCredits(e.x,e.y,e.level)),a.then(function(c){i(c)}).catch(function(c){o(c)})}r()};xi.prototype._createTextureWebGL=function(e,t){let n=new un({minificationFilter:this.minificationFilter,magnificationFilter:this.magnificationFilter}),i=t.image;return d(i.internalFormat)?new Wt({context:e,pixelFormat:i.internalFormat,width:i.width,height:i.height,source:{arrayBufferView:i.bufferView},sampler:n}):new Wt({context:e,source:i,pixelFormat:this._imageryProvider.hasAlphaChannel?st.RGBA:st.RGB,sampler:n})};xi.prototype._createTexture=function(e,t){let n=this._imageryProvider,i=t.image;if(d(n.tileDiscardPolicy)){let r=n.tileDiscardPolicy;if(d(r)){if(!r.isReady()){t.state=ci.RECEIVED;return}if(r.shouldDiscardImage(i)){t.state=ci.INVALID;return}}}let o=this._createTextureWebGL(e,t);n.tilingScheme.projection instanceof Ei?t.textureWebMercator=o:t.texture=o,t.image=void 0,t.state=ci.TEXTURE_LOADED};function g0e(e,t,n){return`${e}:${t}:${n}`}xi.prototype._finalizeReprojectTexture=function(e,t){let n=this.minificationFilter,i=this.magnificationFilter;if(n===cn.LINEAR&&i===Ti.LINEAR&&!st.isCompressedFormat(t.pixelFormat)&&W.isPowerOfTwo(t.width)&&W.isPowerOfTwo(t.height)){n=cn.LINEAR_MIPMAP_LINEAR;let r=kt.maximumTextureFilterAnisotropy,s=Math.min(r,g(this._maximumAnisotropy,r)),a=g0e(n,i,s),c=e.cache.imageryLayerMipmapSamplers;d(c)||(c={},e.cache.imageryLayerMipmapSamplers=c);let l=c[a];d(l)||(l=c[a]=new un({wrapS:Gn.CLAMP_TO_EDGE,wrapT:Gn.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i,maximumAnisotropy:s})),t.generateMipmap(Ih.NICEST),t.sampler=l}else{let r=g0e(n,i,0),s=e.cache.imageryLayerNonMipmapSamplers;d(s)||(s={},e.cache.imageryLayerNonMipmapSamplers=s);let a=s[r];d(a)||(a=s[r]=new un({wrapS:Gn.CLAMP_TO_EDGE,wrapT:Gn.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i})),t.sampler=a}};xi.prototype._reprojectTexture=function(e,t,n){let i=t.textureWebMercator||t.texture,o=t.rectangle,r=e.context;if(n=g(n,!0),n&&!(this._imageryProvider.tilingScheme.projection instanceof Zi)&&o.width/i.width>1e-5){let s=this;t.addReference();let a=new qd({persists:!0,owner:this,preExecute:function(c){kit(c,r,i,t.rectangle)},postExecute:function(c){t.texture=c,s._finalizeReprojectTexture(r,c),t.state=ci.READY,t.releaseReference()},canceled:function(){t.state=ci.TEXTURE_LOADED,t.releaseReference()}});this._reprojectComputeCommands.push(a)}else n&&(t.texture=i),this._finalizeReprojectTexture(r,i),t.state=ci.READY};xi.prototype.queueReprojectionCommands=function(e){let t=this._reprojectComputeCommands,n=t.length;for(let i=0;i<n;++i)e.commandList.push(t[i]);t.length=0};xi.prototype.cancelReprojections=function(){this._reprojectComputeCommands.forEach(function(e){d(e.canceled)&&e.canceled()}),this._reprojectComputeCommands.length=0};xi.prototype.getImageryFromCache=function(e,t,n,i){let o=T0e(e,t,n),r=this._imageryCache[o];return d(r)||(r=new uV(this,e,t,n,i),this._imageryCache[o]=r),r.addReference(),r};xi.prototype.removeImageryFromCache=function(e){let t=T0e(e.x,e.y,e.level);delete this._imageryCache[t]};function T0e(e,t,n){return JSON.stringify([e,t,n])}var nk={u_textureDimensions:function(){return this.textureDimensions},u_texture:function(){return this.texture},textureDimensions:new D,texture:void 0},Uit=Mt.supportsTypedArrays()?new Float32Array(2*64):void 0;function kit(e,t,n,i){let o=t.cache.imageryLayer_reproject;if(!d(o)){o=t.cache.imageryLayer_reproject={vertexArray:void 0,shaderProgram:void 0,sampler:void 0,destroy:function(){d(this.framebuffer)&&this.framebuffer.destroy(),d(this.vertexArray)&&this.vertexArray.destroy(),d(this.shaderProgram)&&this.shaderProgram.destroy()}};let _=new Float32Array(2*64*2),C=0;for(let X=0;X<64;++X){let P=X/63;_[C++]=0,_[C++]=P,_[C++]=1,_[C++]=P}let V={position:0,webMercatorT:1},L=Ur.getRegularGridIndices(2,64),Z=mt.createIndexBuffer({context:t,typedArray:L,usage:Ne.STATIC_DRAW,indexDatatype:Ue.UNSIGNED_SHORT});o.vertexArray=new ti({context:t,attributes:[{index:V.position,vertexBuffer:mt.createVertexBuffer({context:t,typedArray:_,usage:Ne.STATIC_DRAW}),componentsPerAttribute:2},{index:V.webMercatorT,vertexBuffer:mt.createVertexBuffer({context:t,sizeInBytes:64*2*4,usage:Ne.STREAM_DRAW}),componentsPerAttribute:1}],indexBuffer:Z});let G=new Ye({sources:[bv]});o.shaderProgram=Qt.fromCache({context:t,vertexShaderSource:G,fragmentShaderSource:pv,attributeLocations:V}),o.sampler=new un({wrapS:Gn.CLAMP_TO_EDGE,wrapT:Gn.CLAMP_TO_EDGE,minificationFilter:cn.LINEAR,magnificationFilter:Ti.LINEAR})}n.sampler=o.sampler;let r=n.width,s=n.height;nk.textureDimensions.x=r,nk.textureDimensions.y=s,nk.texture=n;let a=Math.sin(i.south),c=.5*Math.log((1+a)/(1-a));a=Math.sin(i.north);let u=1/(.5*Math.log((1+a)/(1-a))-c),m=new Wt({context:t,width:r,height:s,pixelFormat:n.pixelFormat,pixelDatatype:n.pixelDatatype,preMultiplyAlpha:n.preMultiplyAlpha});W.isPowerOfTwo(r)&&W.isPowerOfTwo(s)&&m.generateMipmap(Ih.NICEST);let p=i.south,y=i.north,f=Uit,x=0;for(let _=0;_<64;++_){let C=_/63,V=W.lerp(p,y,C);a=Math.sin(V);let Z=(.5*Math.log((1+a)/(1-a))-c)*u;f[x++]=Z,f[x++]=Z}o.vertexArray.getAttribute(1).vertexBuffer.copyFromArrayView(f),e.shaderProgram=o.shaderProgram,e.outputTexture=m,e.uniformMap=nk,e.vertexArray=o.vertexArray}function Dit(e,t,n){let i=e._imageryProvider,o=i.tilingScheme,r=o.ellipsoid,s=e._imageryProvider.tilingScheme.projection instanceof Zi?1:Math.cos(n),a=o.rectangle,l=r.maximumRadius*a.width*s/(i.tileWidth*o.getNumberOfXTilesAtLevel(0))/t,u=Math.log(l)/Math.log(2);return Math.round(u)|0}function Bit(e,t){e.numberOfListeners>0?e.raiseEvent(t):console.error(t)}async function Yit(e,t){let n;try{if(n=await Promise.resolve(t),e.isDestroyed())return;e._imageryProvider=n,e._readyEvent.raiseEvent(n)}catch(i){Bit(e._errorEvent,i)}}var ia=xi;var u1i=T(S(),1);var BCi=T(S(),1),S0e={NONE:0,CULLED:1,RENDERED:2,REFINED:3,RENDERED_AND_KICKED:6,REFINED_AND_KICKED:7,CULLED_BUT_NEEDED:9,wasKicked:function(e){return e>=S0e.RENDERED_AND_KICKED},originalResult:function(e){return e&3},kick:function(e){return e|4}},jn=S0e;function fV(e){this.tile=e,this.frameLastUpdated=void 0,this.westMeshes=[],this.westTiles=[],this.southMeshes=[],this.southTiles=[],this.eastMeshes=[],this.eastTiles=[],this.northMeshes=[],this.northTiles=[],this.southwestMesh=void 0,this.southwestTile=void 0,this.southeastMesh=void 0,this.southeastTile=void 0,this.northwestMesh=void 0,this.northwestTile=void 0,this.northeastMesh=void 0,this.northeastTile=void 0,this.changedThisFrame=!0,this.visitedFrame=void 0,this.enqueuedFrame=void 0,this.mesh=void 0,this.vertexArray=void 0,this.waterMaskTexture=void 0,this.waterMaskTranslationAndScale=new se}fV.prototype.update=function(e,t,n){this.changedThisFrame&&(E0e(e,t,this.tile,n),this.changedThisFrame=!1)};fV.prototype.destroy=function(e){this._destroyVertexArray(e),d(this.waterMaskTexture)&&(--this.waterMaskTexture.referenceCount,this.waterMaskTexture.referenceCount===0&&this.waterMaskTexture.destroy(),this.waterMaskTexture=void 0)};fV.prototype._destroyVertexArray=function(e){d(this.vertexArray)&&(d(e)?e.push(this.vertexArray):Uu._freeVertexArray(this.vertexArray),this.vertexArray=void 0)};var Oit=new ty;fV.updateFillTiles=function(e,t,n,i){let o=e._quadtree,r=o._levelZeroTiles,s=o._lastSelectionFrameNumber,a=Oit;a.clear();for(let l=0;l<t.length;++l){let u=t[l];d(u.data.vertexArray)&&a.enqueue(t[l])}let c=a.dequeue();for(;c!==void 0;){let l=c.findTileToWest(r),u=c.findTileToSouth(r),m=c.findTileToEast(r),p=c.findTileToNorth(r);fs(e,n,c,l,s,yn.EAST,!1,a,i),fs(e,n,c,u,s,yn.NORTH,!1,a,i),fs(e,n,c,m,s,yn.WEST,!1,a,i),fs(e,n,c,p,s,yn.SOUTH,!1,a,i);let y=l.findTileToNorth(r),f=l.findTileToSouth(r),x=m.findTileToNorth(r),_=m.findTileToSouth(r);fs(e,n,c,y,s,yn.SOUTHEAST,!1,a,i),fs(e,n,c,x,s,yn.SOUTHWEST,!1,a,i),fs(e,n,c,f,s,yn.NORTHEAST,!1,a,i),fs(e,n,c,_,s,yn.NORTHWEST,!1,a,i),c=a.dequeue()}};function fs(e,t,n,i,o,r,s,a,c){if(i===void 0)return;let l=i;for(;l&&(l._lastSelectionResultFrame!==o||jn.wasKicked(l._lastSelectionResult)||jn.originalResult(l._lastSelectionResult)===jn.CULLED);){if(s)return;let u=l.parent;if(r>=yn.NORTHWEST&&u!==void 0)switch(r){case yn.NORTHWEST:l=l===u.northwestChild?u:void 0;break;case yn.NORTHEAST:l=l===u.northeastChild?u:void 0;break;case yn.SOUTHWEST:l=l===u.southwestChild?u:void 0;break;case yn.SOUTHEAST:l=l===u.southeastChild?u:void 0;break}else l=u}if(l!==void 0){if(l._lastSelectionResult===jn.RENDERED){if(d(l.data.vertexArray))return;Kit(e,t,n,l,r,o,a,c);return}if(jn.originalResult(i._lastSelectionResult)!==jn.CULLED)switch(r){case yn.WEST:fs(e,t,n,i.northwestChild,o,r,!0,a,c),fs(e,t,n,i.southwestChild,o,r,!0,a,c);break;case yn.EAST:fs(e,t,n,i.southeastChild,o,r,!0,a,c),fs(e,t,n,i.northeastChild,o,r,!0,a,c);break;case yn.SOUTH:fs(e,t,n,i.southwestChild,o,r,!0,a,c),fs(e,t,n,i.southeastChild,o,r,!0,a,c);break;case yn.NORTH:fs(e,t,n,i.northeastChild,o,r,!0,a,c),fs(e,t,n,i.northwestChild,o,r,!0,a,c);break;case yn.NORTHWEST:fs(e,t,n,i.northwestChild,o,r,!0,a,c);break;case yn.NORTHEAST:fs(e,t,n,i.northeastChild,o,r,!0,a,c);break;case yn.SOUTHWEST:fs(e,t,n,i.southwestChild,o,r,!0,a,c);break;case yn.SOUTHEAST:fs(e,t,n,i.southeastChild,o,r,!0,a,c);break;default:throw new fe("Invalid edge")}}}function Kit(e,t,n,i,o,r,s,a){let c=i.data;if(c.fill===void 0)c.fill=new fV(i);else if(c.fill.visitedFrame===r)return;c.fill.enqueuedFrame!==r&&(c.fill.enqueuedFrame=r,c.fill.changedThisFrame=!1,s.enqueue(i)),Hit(e,t,n,i,o,a)}function Hit(e,t,n,i,o,r){let s=i.data.fill,a,c=n.data.fill;d(c)?(c.visitedFrame=t.frameNumber,c.changedThisFrame&&(E0e(e,t,n,r),c.changedThisFrame=!1),a=n.data.fill.mesh):a=n.data.mesh;let l,u;switch(o){case yn.WEST:l=s.westMeshes,u=s.westTiles;break;case yn.SOUTH:l=s.southMeshes,u=s.southTiles;break;case yn.EAST:l=s.eastMeshes,u=s.eastTiles;break;case yn.NORTH:l=s.northMeshes,u=s.northTiles;break;case yn.NORTHWEST:s.changedThisFrame=s.changedThisFrame||s.northwestMesh!==a,s.northwestMesh=a,s.northwestTile=n;return;case yn.NORTHEAST:s.changedThisFrame=s.changedThisFrame||s.northeastMesh!==a,s.northeastMesh=a,s.northeastTile=n;return;case yn.SOUTHWEST:s.changedThisFrame=s.changedThisFrame||s.southwestMesh!==a,s.southwestMesh=a,s.southwestTile=n;return;case yn.SOUTHEAST:s.changedThisFrame=s.changedThisFrame||s.southeastMesh!==a,s.southeastMesh=a,s.southeastTile=n;return}if(n.level<=i.level){s.changedThisFrame=s.changedThisFrame||l[0]!==a||l.length!==1,l[0]=a,u[0]=n,l.length=1,u.length=1;return}let m,p,y,f,x=n.rectangle,_,C=i.rectangle;switch(o){case yn.WEST:for(_=(C.north-C.south)*W.EPSILON5,m=0;m<u.length&&(y=u[m],f=y.rectangle,!W.greaterThan(x.north,f.south,_));++m);for(p=m;p<u.length&&(y=u[p],f=y.rectangle,!W.greaterThanOrEquals(x.south,f.north,_));++p);break;case yn.SOUTH:for(_=(C.east-C.west)*W.EPSILON5,m=0;m<u.length&&(y=u[m],f=y.rectangle,!W.lessThan(x.west,f.east,_));++m);for(p=m;p<u.length&&(y=u[p],f=y.rectangle,!W.lessThanOrEquals(x.east,f.west,_));++p);break;case yn.EAST:for(_=(C.north-C.south)*W.EPSILON5,m=0;m<u.length&&(y=u[m],f=y.rectangle,!W.lessThan(x.south,f.north,_));++m);for(p=m;p<u.length&&(y=u[p],f=y.rectangle,!W.lessThanOrEquals(x.north,f.south,_));++p);break;case yn.NORTH:for(_=(C.east-C.west)*W.EPSILON5,m=0;m<u.length&&(y=u[m],f=y.rectangle,!W.greaterThan(x.east,f.west,_));++m);for(p=m;p<u.length&&(y=u[p],f=y.rectangle,!W.greaterThanOrEquals(x.west,f.east,_));++p);break}p-m===1?(s.changedThisFrame=s.changedThisFrame||l[m]!==a,l[m]=a,u[m]=n):(s.changedThisFrame=!0,l.splice(m,p-m,a),u.splice(m,p-m,n))}var oT=new he,zit=new he,hV=new h,AQ=new h,vQ=new D,wQ=new D,Wd=new D;function lk(){this.height=0,this.encodedNormal=new D}function ik(e,t,n,i,o,r,s,a,c){if(d(o))return o;let l;if(d(r)&&d(s))l=(r.height+s.height)*.5;else if(d(r))l=r.height;else if(d(s))l=s.height;else if(d(a))l=a.height;else{let m=e.tile.data.tileBoundingRegion,p=0,y=0;d(m)&&(p=m.minimumHeight,y=m.maximumHeight),l=(p+y)*.5}return X0e(e,t,n,i,l,c),c}var Jit={minimumHeight:0,maximumHeight:0},Qit=new h,C0e=new lk,V0e=new lk,L0e=new lk,R0e=new lk,jit=typeof Uint8Array<"u"?new Uint8Array(9*9):void 0,qit={tilingScheme:void 0,x:0,y:0,level:0,exaggeration:1,exaggerationRelativeHeight:0};function E0e(e,t,n,i){Uu.initialize(n,e.terrainProvider,e._imageryLayers);let o=n.data,r=o.fill,s=n.rectangle,a=t.terrainExaggeration,c=t.terrainExaggerationRelativeHeight,l=a!==1,u=n.tilingScheme.ellipsoid,m=rk(r,u,0,1,r.northwestTile,r.northwestMesh,r.northTiles,r.northMeshes,r.westTiles,r.westMeshes,L0e),p=rk(r,u,0,0,r.southwestTile,r.southwestMesh,r.westTiles,r.westMeshes,r.southTiles,r.southMeshes,C0e),y=rk(r,u,1,0,r.southeastTile,r.southeastMesh,r.southTiles,r.southMeshes,r.eastTiles,r.eastMeshes,V0e),f=rk(r,u,1,1,r.northeastTile,r.northeastMesh,r.eastTiles,r.eastMeshes,r.northTiles,r.northMeshes,R0e);m=ik(r,u,0,1,m,p,f,y,L0e),p=ik(r,u,0,0,p,m,y,f,C0e),y=ik(r,u,1,1,y,p,f,m,V0e),f=ik(r,u,1,1,f,y,m,p,R0e);let x=p.height,_=y.height,C=m.height,V=f.height,L=Math.min(x,_,C,V),Z=Math.max(x,_,C,V),G=(L+Z)*.5,X,P,v=e.getLevelMaximumGeometricError(n.level),F=u.maximumRadius-v,M=Math.acos(F/u.maximumRadius)*4;if(M*=1.5,s.width>M&&Z-L<=v){let E=new Sa({width:9,height:9,buffer:jit,structure:{heightOffset:Z}}),I=qit;I.tilingScheme=n.tilingScheme,I.x=n.x,I.y=n.y,I.level=n.level,I.exaggeration=a,I.exaggerationRelativeHeight=c,r.mesh=E._createMeshSync(I)}else{let E=l,I=de.center(s,zit);I.height=G;let w=u.cartographicToCartesian(I,Qit),N=new sc(w,void 0,void 0,void 0,void 0,!0,!0,E,a,c),B=5,k;for(k=r.westMeshes,X=0,P=k.length;X<P;++X)B+=k[X].eastIndicesNorthToSouth.length;for(k=r.southMeshes,X=0,P=k.length;X<P;++X)B+=k[X].northIndicesWestToEast.length;for(k=r.eastMeshes,X=0,P=k.length;X<P;++X)B+=k[X].westIndicesSouthToNorth.length;for(k=r.northMeshes,X=0,P=k.length;X<P;++X)B+=k[X].southIndicesEastToWest.length;let O=Jit;O.minimumHeight=L,O.maximumHeight=Z;let U=N.stride,J=new Float32Array(B*U),z=0,ee=z;z=ok(u,s,N,J,z,0,1,m.height,m.encodedNormal,1,O),z=ak(r,u,N,J,z,r.westTiles,r.westMeshes,yn.EAST,O);let K=z;z=ok(u,s,N,J,z,0,0,p.height,p.encodedNormal,0,O),z=ak(r,u,N,J,z,r.southTiles,r.southMeshes,yn.NORTH,O);let j=z;z=ok(u,s,N,J,z,1,0,y.height,y.encodedNormal,0,O),z=ak(r,u,N,J,z,r.eastTiles,r.eastMeshes,yn.WEST,O);let q=z;z=ok(u,s,N,J,z,1,1,f.height,f.encodedNormal,1,O),z=ak(r,u,N,J,z,r.northTiles,r.northMeshes,yn.SOUTH,O),L=O.minimumHeight,Z=O.maximumHeight;let be=Wn.fromRectangle(s,L,Z,n.tilingScheme.ellipsoid),Te=Ei.geodeticLatitudeToMercatorAngle(s.south),ae=1/(Ei.geodeticLatitudeToMercatorAngle(s.north)-Te),xe=(Ei.geodeticLatitudeToMercatorAngle(I.latitude)-Te)*ae,_e=u.geodeticSurfaceNormalCartographic(oT,AQ),Ve=Kn.octEncode(_e,vQ),Ie=z;N.encode(J,z*U,be.center,D.fromElements(.5,.5,Wd),G,Ve,xe,_e),++z;let Me=z,ve=Me<256?1:2,ke=(Me-1)*3,ct=ke*ve,yt=(J.length-Me*U)*Float32Array.BYTES_PER_ELEMENT,ot;if(yt>=ct){let Ce=Me*U*Float32Array.BYTES_PER_ELEMENT;ot=Me<256?new Uint8Array(J.buffer,Ce,ke):new Uint16Array(J.buffer,Ce,ke)}else ot=Me<256?new Uint8Array(ke):new Uint16Array(ke);J=new Float32Array(J.buffer,0,Me*U);let ln=0;for(X=0;X<Me-2;++X)ot[ln++]=Ie,ot[ln++]=X,ot[ln++]=X+1;ot[ln++]=Ie,ot[ln++]=X,ot[ln++]=0;let vn=[];for(X=K;X>=ee;--X)vn.push(X);let Dt=[];for(X=j;X>=K;--X)Dt.push(X);let Nt=[];for(X=q;X>=j;--X)Nt.push(X);let pe=[];for(pe.push(0),X=Ie-1;X>=q;--X)pe.push(X);r.mesh=new Mu(N.center,J,ot,ke,Me,L,Z,ce.fromOrientedBoundingBox(be),rot(e,be.center,s,L,Z),N.stride,be,N,vn,Dt,Nt,pe)}let b=t.context;r._destroyVertexArray(i),r.vertexArray=Uu._createVertexArrayForMesh(b,r.mesh),o.processImagery(n,e.terrainProvider,t,!0);let R=r.waterMaskTexture;if(r.waterMaskTexture=void 0,e.terrainProvider.hasWaterMask){let E=o._findAncestorTileWithTerrainData(n);d(E)&&d(E.data.waterMaskTexture)&&(r.waterMaskTexture=E.data.waterMaskTexture,++r.waterMaskTexture.referenceCount,o._computeWaterMaskTranslationAndScale(n,E,r.waterMaskTranslationAndScale))}d(R)&&(--R.referenceCount,R.referenceCount===0&&R.destroy())}function ok(e,t,n,i,o,r,s,a,c,l,u){let m=oT;m.longitude=W.lerp(t.west,t.east,r),m.latitude=W.lerp(t.south,t.north,s),m.height=a;let p=e.cartographicToCartesian(m,hV),y;n.hasGeodeticSurfaceNormals&&(y=e.geodeticSurfaceNormal(p,AQ));let f=wQ;return f.x=r,f.y=s,n.encode(i,o*n.stride,p,f,a,c,l,y),u.minimumHeight=Math.min(u.minimumHeight,a),u.maximumHeight=Math.max(u.maximumHeight,a),o+1}var ck=new de;function Mv(e,t,n,i){let o=e.rectangle,r=t.rectangle;t.x===0&&n.x===1&&e.x===e.tilingScheme.getNumberOfXTilesAtLevel(e.level)-1?(o=de.clone(e.rectangle,ck),o.west-=W.TWO_PI,o.east-=W.TWO_PI):e.x===0&&n.x===0&&t.x===t.tilingScheme.getNumberOfXTilesAtLevel(t.level)-1&&(o=de.clone(e.rectangle,ck),o.west+=W.TWO_PI,o.east+=W.TWO_PI);let s=o.east-o.west,a=(r.west-o.west)/s,c=(r.east-o.west)/s,l=o.north-o.south,u=(r.south-o.south)/l,m=(r.north-o.south)/l,p=(n.x-a)/(c-a),y=(n.y-u)/(m-u);return Math.abs(p)<Math.EPSILON5?p=0:Math.abs(p-1)<Math.EPSILON5&&(p=1),Math.abs(y)<Math.EPSILON5?y=0:Math.abs(y-1)<Math.EPSILON5&&(y=1),i.x=p,i.y=y,i}var $it=new D;function FQ(e,t,n,i,o){let r=e.encoding,s=e.vertices;if(o.height=r.decodeHeight(s,t),r.hasVertexNormals)r.getOctEncodedNormal(s,t,o.encodedNormal);else{let a=o.encodedNormal;a.x=0,a.y=0}}var eot=new D,tot=new h;function not(e,t,n,i,o,r,s,a,c,l){let u=i.encoding,m=i.vertices,p=Mv(t,n,u.decodeTextureCoordinates(m,o,Wd),Wd),y=Mv(t,n,u.decodeTextureCoordinates(m,r,wQ),wQ),f;c?f=(s-p.x)/(y.x-p.x):f=(a-p.y)/(y.y-p.y);let x=u.decodeHeight(m,o),_=u.decodeHeight(m,r),C=n.rectangle;oT.longitude=W.lerp(C.west,C.east,s),oT.latitude=W.lerp(C.south,C.north,a),l.height=oT.height=W.lerp(x,_,f);let V;if(u.hasVertexNormals){let L=u.getOctEncodedNormal(m,o,$it),Z=u.getOctEncodedNormal(m,r,eot),G=Kn.octDecode(L.x,L.y,hV),X=Kn.octDecode(Z.x,Z.y,tot);V=h.lerp(G,X,f,hV),h.normalize(V,V),Kn.octEncode(V,l.encodedNormal)}else V=e.geodeticSurfaceNormalCartographic(oT,hV),Kn.octEncode(V,l.encodedNormal)}function X0e(e,t,n,i,o,r){r.height=o;let s=t.geodeticSurfaceNormalCartographic(oT,hV);Kn.octEncode(s,r.encodedNormal)}function rk(e,t,n,i,o,r,s,a,c,l,u){if(G0e(e,t,a,s,!1,n,i,u)||G0e(e,t,l,c,!0,n,i,u))return u;let p;if(MQ(o,r))return n===0?i===0?p=r.eastIndicesNorthToSouth[0]:p=r.southIndicesEastToWest[0]:i===0?p=r.northIndicesWestToEast[0]:p=r.westIndicesSouthToNorth[0],FQ(r,p,n,i,u),u;let y;if(n===0?i===0?y=sk(e.westMeshes,e.westTiles,yn.EAST,e.southMeshes,e.southTiles,yn.NORTH,n,i):y=sk(e.northMeshes,e.northTiles,yn.SOUTH,e.westMeshes,e.westTiles,yn.EAST,n,i):i===0?y=sk(e.southMeshes,e.southTiles,yn.NORTH,e.eastMeshes,e.eastTiles,yn.WEST,n,i):y=sk(e.eastMeshes,e.eastTiles,yn.WEST,e.northMeshes,e.northTiles,yn.SOUTH,n,i),d(y))return X0e(e,t,n,i,y,u),u}function sk(e,t,n,i,o,r,s,a){let c=Z0e(e,t,!1,n,s,a),l=Z0e(i,o,!0,r,s,a);return d(c)&&d(l)?(c+l)*.5:d(c)?c:l}function ak(e,t,n,i,o,r,s,a,c){for(let l=0;l<r.length;++l)o=iot(e,t,n,i,o,r[l],s[l],a,c);return o}function iot(e,t,n,i,o,r,s,a,c){let l=r.rectangle;a===yn.EAST&&e.tile.x===0?(l=de.clone(r.rectangle,ck),l.west-=W.TWO_PI,l.east-=W.TWO_PI):a===yn.WEST&&r.x===0&&(l=de.clone(r.rectangle,ck),l.west+=W.TWO_PI,l.east+=W.TWO_PI);let u=e.tile.rectangle,m,p;o>0&&(n.decodeTextureCoordinates(i,o-1,Wd),m=Wd.x,p=Wd.y);let y,f;switch(a){case yn.WEST:y=s.westIndicesSouthToNorth,f=!1;break;case yn.NORTH:y=s.northIndicesWestToEast,f=!0;break;case yn.EAST:y=s.eastIndicesNorthToSouth,f=!1;break;case yn.SOUTH:y=s.southIndicesEastToWest,f=!0;break}let x=r,_=e.tile,C=s.encoding,V=s.vertices,L=n.stride,Z,G;C.hasWebMercatorT&&(Z=Ei.geodeticLatitudeToMercatorAngle(u.south),G=1/(Ei.geodeticLatitudeToMercatorAngle(u.north)-Z));for(let X=0;X<y.length;++X){let P=y[X],v=C.decodeTextureCoordinates(V,P,Wd);Mv(x,_,v,v);let F=v.x,M=v.y,b=f?F:M;if(b<0||b>1||Math.abs(F-m)<W.EPSILON5&&Math.abs(M-p)<W.EPSILON5)continue;let R=Math.abs(F)<W.EPSILON5||Math.abs(F-1)<W.EPSILON5,E=Math.abs(M)<W.EPSILON5||Math.abs(M-1)<W.EPSILON5;if(R&&E)continue;let I=C.decodePosition(V,P,hV),w=C.decodeHeight(V,P),N;C.hasVertexNormals?N=C.getOctEncodedNormal(V,P,vQ):(N=vQ,N.x=0,N.y=0);let B=M;if(C.hasWebMercatorT){let O=W.lerp(u.south,u.north,M);B=(Ei.geodeticLatitudeToMercatorAngle(O)-Z)*G}let k;n.hasGeodeticSurfaceNormals&&(k=t.geodeticSurfaceNormal(I,AQ)),n.encode(i,o*L,I,v,w,N,B,k),c.minimumHeight=Math.min(c.minimumHeight,w),c.maximumHeight=Math.max(c.maximumHeight,w),++o}return o}function Z0e(e,t,n,i,o,r){let s,a,c;n?(s=0,a=e.length,c=1):(s=e.length-1,a=-1,c=-1);for(let l=s;l!==a;l+=c){let u=e[l],m=t[l];if(!MQ(m,u))continue;let p;switch(i){case yn.WEST:p=u.westIndicesSouthToNorth;break;case yn.SOUTH:p=u.southIndicesEastToWest;break;case yn.EAST:p=u.eastIndicesNorthToSouth;break;case yn.NORTH:p=u.northIndicesWestToEast;break}let y=p[n?0:p.length-1];if(d(y))return u.encoding.decodeHeight(u.vertices,y)}}function MQ(e,t){return d(t)&&(!d(e.data.fill)||!e.data.fill.changedThisFrame)}function G0e(e,t,n,i,o,r,s,a){let c,l,u,m,p,y=i[o?0:n.length-1],f=n[o?0:n.length-1];if(MQ(y,f)&&(r===0?s===0?(c=o?f.northIndicesWestToEast:f.eastIndicesNorthToSouth,l=o,u=o):(c=o?f.eastIndicesNorthToSouth:f.southIndicesEastToWest,l=!o,u=!1):s===0?(c=o?f.westIndicesSouthToNorth:f.northIndicesWestToEast,l=!o,u=!0):(c=o?f.southIndicesEastToWest:f.westIndicesSouthToNorth,l=o,u=!o),c.length>0)){m=o?0:c.length-1,p=c[m],f.encoding.decodeTextureCoordinates(f.vertices,p,Wd);let x=Mv(y,e.tile,Wd,Wd);if(x.x===r&&x.y===s)return FQ(f,p,r,s,a),!0;if(m=Lo(c,l?r:s,function(_,C){f.encoding.decodeTextureCoordinates(f.vertices,_,Wd);let V=Mv(y,e.tile,Wd,Wd);return u?l?V.x-r:V.y-s:l?r-V.x:s-V.y}),m<0){if(m=~m,m>0&&m<c.length)return not(t,y,e.tile,f,c[m-1],c[m],r,s,l,a),!0}else return FQ(f,c[m],r,s,a),!0}return!1}var oot=[new h,new h,new h,new h];function rot(e,t,n,i,o,r){let s=e.quadtree._occluders.ellipsoid,a=s.ellipsoid,c=oot;return h.fromRadians(n.west,n.south,o,a,c[0]),h.fromRadians(n.east,n.south,o,a,c[1]),h.fromRadians(n.west,n.north,o,a,c[2]),h.fromRadians(n.east,n.north,o,a,c[3]),s.computeHorizonCullingPointPossiblyUnderEllipsoid(t,c,i,r)}var pV=fV;function jo(e){this.lightingFadeOutDistance=65e5,this.lightingFadeInDistance=9e6,this.hasWaterMask=!1,this.oceanNormalMap=void 0,this.zoomedOutOceanSpecularIntensity=.5,this.enableLighting=!1,this.dynamicAtmosphereLighting=!1,this.dynamicAtmosphereLightingFromSun=!1,this.showGroundAtmosphere=!1,this.shadows=xn.RECEIVE_ONLY,this.vertexShadowDarkness=.3,this.fillHighlightColor=void 0,this.hueShift=0,this.saturationShift=0,this.brightnessShift=0,this.showSkirts=!0,this.backFaceCulling=!0,this.undergroundColor=void 0,this.undergroundColorAlphaByDistance=void 0,this.lambertDiffuseMultiplier=0,this.materialUniformMap=void 0,this._materialUniformMap=void 0,this._quadtree=void 0,this._terrainProvider=e.terrainProvider,this._imageryLayers=e.imageryLayers,this._surfaceShaderSet=e.surfaceShaderSet,this._renderState=void 0,this._blendRenderState=void 0,this._disableCullingRenderState=void 0,this._disableCullingBlendRenderState=void 0,this._errorEvent=new ye,this._removeLayerAddedListener=this._imageryLayers.layerAdded.addEventListener(jo.prototype._onLayerAdded,this),this._removeLayerRemovedListener=this._imageryLayers.layerRemoved.addEventListener(jo.prototype._onLayerRemoved,this),this._removeLayerMovedListener=this._imageryLayers.layerMoved.addEventListener(jo.prototype._onLayerMoved,this),this._removeLayerShownListener=this._imageryLayers.layerShownOrHidden.addEventListener(jo.prototype._onLayerShownOrHidden,this),this._imageryLayersUpdatedEvent=new ye,this._layerOrderChanged=!1,this._tilesToRenderByTextureCount=[],this._drawCommands=[],this._uniformMaps=[],this._usedDrawCommands=0,this._vertexArraysToDestroy=[],this._debug={wireframe:!1,boundingSphereTile:void 0},this._baseColor=void 0,this._firstPassInitialColor=void 0,this.baseColor=new Y(0,0,.5,1),this._clippingPlanes=void 0,this.cartographicLimitRectangle=de.clone(de.MAX_VALUE),this._hasLoadedTilesThisFrame=!1,this._hasFillTilesThisFrame=!1,this._oldTerrainExaggeration=void 0,this._oldTerrainExaggerationRelativeHeight=void 0}Object.defineProperties(jo.prototype,{baseColor:{get:function(){return this._baseColor},set:function(e){this._baseColor=e,this._firstPassInitialColor=se.fromColor(e,this._firstPassInitialColor)}},quadtree:{get:function(){return this._quadtree},set:function(e){this._quadtree=e}},tilingScheme:{get:function(){if(d(this._terrainProvider))return this._terrainProvider.tilingScheme}},errorEvent:{get:function(){return this._errorEvent}},imageryLayersUpdatedEvent:{get:function(){return this._imageryLayersUpdatedEvent}},terrainProvider:{get:function(){return this._terrainProvider},set:function(e){this._terrainProvider!==e&&(this._terrainProvider=e,d(this._quadtree)&&this._quadtree.invalidateAllTiles())}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){rs.setOwner(e,this,"_clippingPlanes")}}});function sot(e,t){let n=e.loadingImagery;d(n)||(n=e.readyImagery);let i=t.loadingImagery;return d(i)||(i=t.readyImagery),n.imageryLayer._layerIndex-i.imageryLayer._layerIndex}jo.prototype.update=function(e){this._imageryLayers._update()};function aot(e,t){let n=t.creditDisplay,i=e._terrainProvider;d(i)&&d(i.credit)&&n.addCreditToNextFrame(i.credit);let o=e._imageryLayers;for(let r=0,s=o.length;r<s;++r){let a=o.get(r);a.ready&&a.show&&d(a.imageryProvider.credit)&&n.addCreditToNextFrame(a.imageryProvider.credit)}}jo.prototype.initialize=function(e){this._imageryLayers.queueReprojectionCommands(e),this._layerOrderChanged&&(this._layerOrderChanged=!1,this._quadtree.forEachLoadedTile(function(i){i.data.imagery.sort(sot)})),aot(this,e);let t=this._vertexArraysToDestroy,n=t.length;for(let i=0;i<n;++i)Uu._freeVertexArray(t[i]);t.length=0};jo.prototype.beginUpdate=function(e){let t=this._tilesToRenderByTextureCount;for(let i=0,o=t.length;i<o;++i){let r=t[i];d(r)&&(r.length=0)}let n=this._clippingPlanes;d(n)&&n.enabled&&n.update(e),this._usedDrawCommands=0,this._hasLoadedTilesThisFrame=!1,this._hasFillTilesThisFrame=!1};jo.prototype.endUpdate=function(e){if(!d(this._renderState)){this._renderState=De.fromCache({cull:{enabled:!0},depthTest:{enabled:!0,func:Ua.LESS}}),this._blendRenderState=De.fromCache({cull:{enabled:!0},depthTest:{enabled:!0,func:Ua.LESS_OR_EQUAL},blending:dn.ALPHA_BLEND});let s=Ke(this._renderState,!0);s.cull.enabled=!1,this._disableCullingRenderState=De.fromCache(s),s=Ke(this._blendRenderState,!0),s.cull.enabled=!1,this._disableCullingBlendRenderState=De.fromCache(s)}this._hasFillTilesThisFrame&&this._hasLoadedTilesThisFrame&&pV.updateFillTiles(this,this._quadtree._tilesToRender,e,this._vertexArraysToDestroy);let t=this.quadtree,n=e.terrainExaggeration,i=e.terrainExaggerationRelativeHeight,o=this._oldTerrainExaggeration!==n||this._oldTerrainExaggerationRelativeHeight!==i;this._oldTerrainExaggeration=n,this._oldTerrainExaggerationRelativeHeight=i,o&&t.forEachLoadedTile(function(s){s.data.updateExaggeration(s,e,t)});let r=this._tilesToRenderByTextureCount;for(let s=0,a=r.length;s<a;++s){let c=r[s];if(d(c))for(let l=0,u=c.length;l<u;++l){let m=c[l],p=m.data.tileBoundingRegion;Iot(this,m,e),e.minimumTerrainHeight=Math.min(e.minimumTerrainHeight,p.minimumHeight)}}};function w0e(e,t){let n=t.globeTranslucencyState;if(n.translucent){let i=e.renderState.blending.enabled;n.pushDerivedCommands(e,i,t)}else t.commandList.push(e)}jo.prototype.updateForPick=function(e){let t=this._drawCommands;for(let n=0,i=this._usedDrawCommands;n<i;++n)w0e(t[n],e)};jo.prototype.cancelReprojections=function(){this._imageryLayers.cancelReprojections()};jo.prototype.getLevelMaximumGeometricError=function(e){return d(this._terrainProvider)?this._terrainProvider.getLevelMaximumGeometricError(e):0};jo.prototype.loadTile=function(e,t){let n=t.data,i=!0,o;d(n)&&(i=n.boundingVolumeSourceTile!==t||t._lastSelectionResult===jn.CULLED_BUT_NEEDED,o=n.terrainState),Uu.processStateMachine(t,e,this.terrainProvider,this._imageryLayers,this.quadtree,this._vertexArraysToDestroy,i),n=t.data,i&&o!==t.data.terrainState&&this.computeTileVisibility(t,e,this.quadtree.occluders)!==sr.NONE&&n.boundingVolumeSourceTile===t&&(i=!1,Uu.processStateMachine(t,e,this.terrainProvider,this._imageryLayers,this.quadtree,this._vertexArraysToDestroy,i))};var cot=new ce,F0e=new de,lot=new de,dot=new he;function uk(e,t){if(t.west<t.east)return t;let n=de.clone(t,lot);return de.center(e,dot).longitude>0?n.east=W.PI:n.west=-W.PI,n}function A0e(e,t){if(t.cameraUnderground||t.globeTranslucencyState.translucent)return!0;if(e.backFaceCulling)return!1;let n=e._clippingPlanes;return!!(d(n)&&n.enabled||!de.equals(e.cartographicLimitRectangle,de.MAX_VALUE))}jo.prototype.computeTileVisibility=function(e,t,n){let i=this.computeDistanceToTile(e,t);e._distance=i;let o=A0e(this,t);if(t.fog.enabled&&!o&&W.fog(i,t.fog.density)>=1)return sr.NONE;let r=e.data,s=r.tileBoundingRegion;if(r.boundingVolumeSourceTile===void 0)return sr.PARTIAL;let a=t.cullingVolume,c=s.boundingVolume;d(c)||(c=s.boundingSphere),r.clippedByBoundaries=!1;let l=uk(e.rectangle,this.cartographicLimitRectangle),u=de.simpleIntersection(l,e.rectangle,F0e);if(!d(u))return sr.NONE;if(de.equals(u,e.rectangle)||(r.clippedByBoundaries=!0),t.mode!==ie.SCENE3D&&(c=cot,ce.fromRectangleWithHeights2D(e.rectangle,t.mapProjection,s.minimumHeight,s.maximumHeight,c),h.fromElements(c.center.z,c.center.x,c.center.y,c.center),t.mode===ie.MORPHING&&d(r.renderedMesh)&&(c=ce.union(s.boundingSphere,c,c))),!d(c))return sr.PARTIAL;let m=this._clippingPlanes;if(d(m)&&m.enabled){let x=m.computeIntersectionWithBoundingVolume(c);if(e.isClipped=x!==qt.INSIDE,x===qt.OUTSIDE)return sr.NONE}let p,y=a.computeVisibility(c);if(y===qt.OUTSIDE?p=sr.NONE:y===qt.INTERSECTING?p=sr.PARTIAL:y===qt.INSIDE&&(p=sr.FULL),p===sr.NONE)return p;let f=t.mode===ie.SCENE3D&&t.camera.frustum instanceof en;if(t.mode===ie.SCENE3D&&!f&&d(n)&&!o){let x=r.occludeePointInScaledSpace;return!d(x)||n.ellipsoid.isScaledSpacePointVisiblePossiblyUnderEllipsoid(x,s.minimumHeight)?p:sr.NONE}return p};jo.prototype.canRefine=function(e){return d(e.data.terrainData)?!0:this.terrainProvider.getTileDataAvailable(e.x*2,e.y*2,e.level+1)!==void 0};var uot=[],mot=[];jo.prototype.canRenderWithoutLosingDetail=function(e,t){let n=e.data,i=uot;i.length=this._imageryLayers.length;let o=!1,r=!1,s;d(n)&&(o=n.terrainState===ao.READY,r=!0,s=n.imagery);let a,c;for(a=0,c=i.length;a<c;++a)i[a]=r;if(d(s))for(a=0,c=s.length;a<c;++a){let m=s[a],p=m.loadingImagery,y=!d(p)||p.state===ci.FAILED||p.state===ci.INVALID,f=(m.loadingImagery||m.readyImagery).imageryLayer._layerIndex;i[f]=y&&i[f]}let l=this.quadtree._lastSelectionFrameNumber,u=mot;for(u.length=0,u.push(e.southwestChild,e.southeastChild,e.northwestChild,e.northeastChild);u.length>0;){let m=u.pop(),p=m._lastSelectionResultFrame===l?m._lastSelectionResult:jn.NONE;if(p===jn.RENDERED){let y=m.data;if(!d(y))continue;if(!o&&m.data.terrainState===ao.READY)return!1;let f=m.data.imagery;for(a=0,c=f.length;a<c;++a){let x=f[a],_=x.loadingImagery,C=!d(_)||_.state===ci.FAILED||_.state===ci.INVALID,V=(x.loadingImagery||x.readyImagery).imageryLayer._layerIndex;if(C&&!i[V])return!1}}else p===jn.REFINED&&u.push(m.southwestChild,m.southeastChild,m.northwestChild,m.northeastChild)}return!0};var hot=new h;jo.prototype.computeTileLoadPriority=function(e,t){let n=e.data;if(n===void 0)return 0;let i=n.tileBoundingRegion.boundingVolume;if(i===void 0)return 0;let o=t.camera.positionWC,r=t.camera.directionWC,s=h.subtract(i.center,o,hot),a=h.magnitude(s);return a<W.EPSILON5?0:(h.divideByScalar(s,a,s),(1-h.dot(s,r))*e._distance)};var I0e=new A,dk=new A,fot=new se,pot=new se,bot=new se,yot=new h,W0e=new h,got=new h,xot=new h;jo.prototype.showTileThisFrame=function(e,t){let n=0,i=e.data.imagery;for(let a=0,c=i.length;a<c;++a){let l=i[a];d(l.readyImagery)&&l.readyImagery.imageryLayer.alpha!==0&&++n}let o=this._tilesToRenderByTextureCount[n];d(o)||(o=[],this._tilesToRenderByTextureCount[n]=o),o.push(e);let r=e.data;d(r.vertexArray)?this._hasLoadedTilesThisFrame=!0:this._hasFillTilesThisFrame=!0;let s=this._debug;++s.tilesRendered,s.texturesRendered+=n};var _ot=[new h,new h,new h,new h];function P0e(e,t,n,i,o,r){let s=e.quadtree._occluders.ellipsoid,a=s.ellipsoid,c=_ot;return h.fromRadians(n.west,n.south,o,a,c[0]),h.fromRadians(n.east,n.south,o,a,c[1]),h.fromRadians(n.west,n.north,o,a,c[2]),h.fromRadians(n.east,n.north,o,a,c[3]),s.computeHorizonCullingPointPossiblyUnderEllipsoid(t,c,i,r)}jo.prototype.computeDistanceToTile=function(e,t){Tot(e,this,t);let n=e.data;if(n.boundingVolumeSourceTile===void 0)return 9999999999;let o=n.tileBoundingRegion,r=o.minimumHeight,s=o.maximumHeight;if(n.boundingVolumeSourceTile!==e){let c=t.camera.positionCartographic.height,l=Math.abs(c-r),u=Math.abs(c-s);l>u?(o.minimumHeight=r,o.maximumHeight=r):(o.minimumHeight=s,o.maximumHeight=s)}let a=o.distanceToCamera(t);return o.minimumHeight=r,o.maximumHeight=s,a};function Tot(e,t,n){let i=e.data;i===void 0&&(i=e.data=new Uu);let o=e.tilingScheme.ellipsoid;i.tileBoundingRegion===void 0&&(i.tileBoundingRegion=new pu({computeBoundingVolumes:!1,rectangle:e.rectangle,ellipsoid:o,minimumHeight:0,maximumHeight:0}));let r=i.tileBoundingRegion,s=r.minimumHeight,a=r.maximumHeight,c=!1,l=e,u=i.mesh,m=i.terrainData;if(u!==void 0&&u.minimumHeight!==void 0&&u.maximumHeight!==void 0)r.minimumHeight=u.minimumHeight,r.maximumHeight=u.maximumHeight,c=!0;else if(m!==void 0&&m._minimumHeight!==void 0&&m._maximumHeight!==void 0)r.minimumHeight=m._minimumHeight,r.maximumHeight=m._maximumHeight;else{r.minimumHeight=Number.NaN,r.maximumHeight=Number.NaN;let p=e.parent;for(;p!==void 0;){let y=p.data;if(y!==void 0){let f=y.mesh,x=y.terrainData;if(f!==void 0&&f.minimumHeight!==void 0&&f.maximumHeight!==void 0){r.minimumHeight=f.minimumHeight,r.maximumHeight=f.maximumHeight;break}else if(x!==void 0&&x._minimumHeight!==void 0&&x._maximumHeight!==void 0){r.minimumHeight=x._minimumHeight,r.maximumHeight=x._maximumHeight;break}}p=p.parent}l=p}if(l!==void 0){let p=n.terrainExaggeration,y=n.terrainExaggerationRelativeHeight;if(p!==1&&(c=!1,r.minimumHeight=Sc.getHeight(r.minimumHeight,p,y),r.maximumHeight=Sc.getHeight(r.maximumHeight,p,y)),c)i.boundingVolumeIsFromMesh||(r._orientedBoundingBox=Wn.clone(u.orientedBoundingBox,r._orientedBoundingBox),r._boundingSphere=ce.clone(u.boundingSphere3D,r._boundingSphere),i.occludeePointInScaledSpace=h.clone(u.occludeePointInScaledSpace,i.occludeePointInScaledSpace),d(i.occludeePointInScaledSpace)||(i.occludeePointInScaledSpace=P0e(t,r._orientedBoundingBox.center,e.rectangle,r.minimumHeight,r.maximumHeight,i.occludeePointInScaledSpace)));else{let x=r._orientedBoundingBox===void 0||r._boundingSphere===void 0;(r.minimumHeight!==s||r.maximumHeight!==a||x)&&(r.computeBoundingVolumes(o),i.occludeePointInScaledSpace=P0e(t,r._orientedBoundingBox.center,e.rectangle,r.minimumHeight,r.maximumHeight,i.occludeePointInScaledSpace))}i.boundingVolumeSourceTile=l,i.boundingVolumeIsFromMesh=c}else i.boundingVolumeSourceTile=void 0,i.boundingVolumeIsFromMesh=!1}jo.prototype.isDestroyed=function(){return!1};jo.prototype.destroy=function(){return this._tileProvider=this._tileProvider&&this._tileProvider.destroy(),this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),this._removeLayerAddedListener=this._removeLayerAddedListener&&this._removeLayerAddedListener(),this._removeLayerRemovedListener=this._removeLayerRemovedListener&&this._removeLayerRemovedListener(),this._removeLayerMovedListener=this._removeLayerMovedListener&&this._removeLayerMovedListener(),this._removeLayerShownListener=this._removeLayerShownListener&&this._removeLayerShownListener(),ue(this)};function Sot(e,t,n){return function(i){let o,r,s=-1,a=i.data.imagery,c=a.length,l;for(l=0;l<c;++l)if(o=a[l],r=g(o.readyImagery,o.loadingImagery),r.imageryLayer===t){s=l;break}if(s!==-1){let u=s+e;if(o=a[u],r=d(o)?g(o.readyImagery,o.loadingImagery):void 0,!d(r)||r.imageryLayer!==t)return!t._createTileImagerySkeletons(i,n,u);for(l=s;l<u;++l)a[l].freeResources();a.splice(s,e)}return!0}}jo.prototype._onLayerAdded=function(e,t){if(!this.isDestroyed()&&e.show){let n=this._terrainProvider,i=this,o=this._imageryLayersUpdatedEvent,r=function(){e._imageryCache={},i._quadtree.forEachLoadedTile(function(s){if(d(s._loadedCallbacks[e._layerIndex]))return;let a,c=s.data.imagery,l=c.length,u=-1,m=0;for(a=0;a<l;++a){let y=c[a];if(g(y.readyImagery,y.loadingImagery).imageryLayer===e)u===-1&&(u=a),++m;else if(u!==-1)break}if(u===-1)return;let p=u+m;e._createTileImagerySkeletons(s,n,p)&&(s._loadedCallbacks[e._layerIndex]=Sot(m,e,n),s.state=ws.LOADING)})};if(e.ready){let s=e.imageryProvider;s._reload=r}this._quadtree.forEachLoadedTile(function(s){e._createTileImagerySkeletons(s,n)&&(s.state=ws.LOADING,s.level!==0&&(s._lastSelectionResultFrame!==i.quadtree._lastSelectionFrameNumber||s._lastSelectionResult!==jn.RENDERED)&&(s.renderable=!1))}),this._layerOrderChanged=!0,o.raiseEvent()}};jo.prototype._onLayerRemoved=function(e,t){this._quadtree.forEachLoadedTile(function(n){let i=n.data.imagery,o=-1,r=0;for(let s=0,a=i.length;s<a;++s){let c=i[s],l=c.loadingImagery;if(d(l)||(l=c.readyImagery),l.imageryLayer===e)o===-1&&(o=s),c.freeResources(),++r;else if(o!==-1)break}o!==-1&&i.splice(o,r)}),d(e.imageryProvider)&&(e.imageryProvider._reload=void 0),this._imageryLayersUpdatedEvent.raiseEvent()};jo.prototype._onLayerMoved=function(e,t,n){this._layerOrderChanged=!0,this._imageryLayersUpdatedEvent.raiseEvent()};jo.prototype._onLayerShownOrHidden=function(e,t,n){n?this._onLayerAdded(e,t):this._onLayerRemoved(e,t)};var Cot=new A,Vot=new A;function v0e(e,t){let n={u_initialColor:function(){return this.properties.initialColor},u_fillHighlightColor:function(){return this.properties.fillHighlightColor},u_zoomedOutOceanSpecularIntensity:function(){return this.properties.zoomedOutOceanSpecularIntensity},u_oceanNormalMap:function(){return this.properties.oceanNormalMap},u_atmosphereLightIntensity:function(){return this.properties.atmosphereLightIntensity},u_atmosphereRayleighCoefficient:function(){return this.properties.atmosphereRayleighCoefficient},u_atmosphereMieCoefficient:function(){return this.properties.atmosphereMieCoefficient},u_atmosphereRayleighScaleHeight:function(){return this.properties.atmosphereRayleighScaleHeight},u_atmosphereMieScaleHeight:function(){return this.properties.atmosphereMieScaleHeight},u_atmosphereMieAnisotropy:function(){return this.properties.atmosphereMieAnisotropy},u_lightingFadeDistance:function(){return this.properties.lightingFadeDistance},u_nightFadeDistance:function(){return this.properties.nightFadeDistance},u_center3D:function(){return this.properties.center3D},u_terrainExaggerationAndRelativeHeight:function(){return this.properties.terrainExaggerationAndRelativeHeight},u_tileRectangle:function(){return this.properties.tileRectangle},u_modifiedModelView:function(){let i=e.context.uniformState.view,o=A.multiplyByPoint(i,this.properties.rtc,W0e);return A.setTranslation(i,o,I0e),I0e},u_modifiedModelViewProjection:function(){let i=e.context.uniformState.view,o=e.context.uniformState.projection,r=A.multiplyByPoint(i,this.properties.rtc,W0e);return A.setTranslation(i,r,dk),A.multiply(o,dk,dk),dk},u_dayTextures:function(){return this.properties.dayTextures},u_dayTextureTranslationAndScale:function(){return this.properties.dayTextureTranslationAndScale},u_dayTextureTexCoordsRectangle:function(){return this.properties.dayTextureTexCoordsRectangle},u_dayTextureUseWebMercatorT:function(){return this.properties.dayTextureUseWebMercatorT},u_dayTextureAlpha:function(){return this.properties.dayTextureAlpha},u_dayTextureNightAlpha:function(){return this.properties.dayTextureNightAlpha},u_dayTextureDayAlpha:function(){return this.properties.dayTextureDayAlpha},u_dayTextureBrightness:function(){return this.properties.dayTextureBrightness},u_dayTextureContrast:function(){return this.properties.dayTextureContrast},u_dayTextureHue:function(){return this.properties.dayTextureHue},u_dayTextureSaturation:function(){return this.properties.dayTextureSaturation},u_dayTextureOneOverGamma:function(){return this.properties.dayTextureOneOverGamma},u_dayIntensity:function(){return this.properties.dayIntensity},u_southAndNorthLatitude:function(){return this.properties.southAndNorthLatitude},u_southMercatorYAndOneOverHeight:function(){return this.properties.southMercatorYAndOneOverHeight},u_waterMask:function(){return this.properties.waterMask},u_waterMaskTranslationAndScale:function(){return this.properties.waterMaskTranslationAndScale},u_minMaxHeight:function(){return this.properties.minMaxHeight},u_scaleAndBias:function(){return this.properties.scaleAndBias},u_dayTextureSplit:function(){return this.properties.dayTextureSplit},u_dayTextureCutoutRectangles:function(){return this.properties.dayTextureCutoutRectangles},u_clippingPlanes:function(){let i=t._clippingPlanes;return d(i)&&d(i.texture)?i.texture:e.context.defaultTexture},u_cartographicLimitRectangle:function(){return this.properties.localizedCartographicLimitRectangle},u_clippingPlanesMatrix:function(){let i=t._clippingPlanes,o=d(i)?A.multiply(e.context.uniformState.view,i.modelMatrix,Cot):A.IDENTITY;return A.inverseTranspose(o,Vot)},u_clippingPlanesEdgeStyle:function(){let i=this.properties.clippingPlanesEdgeColor;return i.alpha=this.properties.clippingPlanesEdgeWidth,i},u_minimumBrightness:function(){return e.fog.minimumBrightness},u_hsbShift:function(){return this.properties.hsbShift},u_colorsToAlpha:function(){return this.properties.colorsToAlpha},u_frontFaceAlphaByDistance:function(){return this.properties.frontFaceAlphaByDistance},u_backFaceAlphaByDistance:function(){return this.properties.backFaceAlphaByDistance},u_translucencyRectangle:function(){return this.properties.localizedTranslucencyRectangle},u_undergroundColor:function(){return this.properties.undergroundColor},u_undergroundColorAlphaByDistance:function(){return this.properties.undergroundColorAlphaByDistance},u_lambertDiffuseMultiplier:function(){return this.properties.lambertDiffuseMultiplier},u_vertexShadowDarkness:function(){return this.properties.vertexShadowDarkness},properties:{initialColor:new se(0,0,.5,1),fillHighlightColor:new Y(0,0,0,0),zoomedOutOceanSpecularIntensity:.5,oceanNormalMap:void 0,lightingFadeDistance:new D(65e5,9e6),nightFadeDistance:new D(1e7,4e7),atmosphereLightIntensity:10,atmosphereRayleighCoefficient:new h(55e-7,13e-6,284e-7),atmosphereMieCoefficient:new h(21e-6,21e-6,21e-6),atmosphereRayleighScaleHeight:1e4,atmosphereMieScaleHeight:3200,atmosphereMieAnisotropy:.9,hsbShift:new h,center3D:void 0,rtc:new h,modifiedModelView:new A,tileRectangle:new se,terrainExaggerationAndRelativeHeight:new D(1,0),dayTextures:[],dayTextureTranslationAndScale:[],dayTextureTexCoordsRectangle:[],dayTextureUseWebMercatorT:[],dayTextureAlpha:[],dayTextureNightAlpha:[],dayTextureDayAlpha:[],dayTextureBrightness:[],dayTextureContrast:[],dayTextureHue:[],dayTextureSaturation:[],dayTextureOneOverGamma:[],dayTextureSplit:[],dayTextureCutoutRectangles:[],dayIntensity:0,colorsToAlpha:[],southAndNorthLatitude:new D,southMercatorYAndOneOverHeight:new D,waterMask:void 0,waterMaskTranslationAndScale:new se,minMaxHeight:new D,scaleAndBias:new A,clippingPlanesEdgeColor:Y.clone(Y.WHITE),clippingPlanesEdgeWidth:0,localizedCartographicLimitRectangle:new se,frontFaceAlphaByDistance:new se,backFaceAlphaByDistance:new se,localizedTranslucencyRectangle:new se,undergroundColor:Y.clone(Y.TRANSPARENT),undergroundColorAlphaByDistance:new se,lambertDiffuseMultiplier:0,vertexShadowDarkness:0}};return d(t.materialUniformMap)?xt(n,t.materialUniformMap):n}function Lot(e,t,n){let i=n.data,o,r;if(d(i.vertexArray)?(o=i.mesh,r=i.vertexArray):d(i.fill)&&d(i.fill.vertexArray)&&(o=i.fill.mesh,r=i.fill.vertexArray),!(!d(o)||!d(r))){if(d(i.wireframeVertexArray)){if(i.wireframeVertexArray.mesh===o)return;i.wireframeVertexArray.destroy(),i.wireframeVertexArray=void 0}i.wireframeVertexArray=Rot(e,r,o),i.wireframeVertexArray.mesh=o}}function Rot(e,t,n){let o={indices:n.indices,primitiveType:Fe.TRIANGLES};An.toWireframe(o);let r=o.indices,s=mt.createIndexBuffer({context:e,typedArray:r,usage:Ne.STATIC_DRAW,indexDatatype:Ue.fromSizeInBytes(r.BYTES_PER_ELEMENT)});return new ti({context:e,attributes:t._attributes,indexBuffer:s})}var M0e,N0e,mk;(function(){let e=new _t({geometry:im.fromDimensions({dimensions:new h(2,2,2)})}),t=new _t({geometry:new $p({radius:1})}),n=new A,i,o;function r(s){return new Zn({geometryInstances:s,appearance:new rn({translucent:!1,flat:!0}),asynchronous:!1})}M0e=function(s,a){return s===i||(mk(),i=s,n=A.fromRotationTranslation(s.halfAxes,s.center,n),e.modelMatrix=n,e.attributes.color=Ut.fromColor(a),o=r(e)),o},N0e=function(s,a){return s===i||(mk(),i=s,n=A.fromTranslation(s.center,n),n=A.multiplyByUniformScale(n,s.radius,n),t.modelMatrix=n,t.attributes.color=Ut.fromColor(a),o=r(t)),o},mk=function(){d(o)&&(o.destroy(),o=void 0,i=void 0)}})();var Zot=new se(0,0,0,0),Got={frameState:void 0,surfaceTile:void 0,numberOfDayTextures:void 0,applyBrightness:void 0,applyContrast:void 0,applyHue:void 0,applySaturation:void 0,applyGamma:void 0,applyAlpha:void 0,applyDayNightAlpha:void 0,applySplit:void 0,showReflectiveOcean:void 0,showOceanWaves:void 0,enableLighting:void 0,dynamicAtmosphereLighting:void 0,dynamicAtmosphereLightingFromSun:void 0,showGroundAtmosphere:void 0,perFragmentGroundAtmosphere:void 0,hasVertexNormals:void 0,useWebMercatorProjection:void 0,enableFog:void 0,enableClippingPlanes:void 0,clippingPlanes:void 0,clippedByBoundaries:void 0,hasImageryLayerCutout:void 0,colorCorrect:void 0,colorToAlpha:void 0,hasGeodeticSurfaceNormals:void 0,hasExaggeration:void 0},Eot=Y.TRANSPARENT,Xot=new It;function Iot(e,t,n){let i=t.data;d(i.vertexArray)||(i.fill===void 0&&(i.fill=new pV(t)),i.fill.update(e,n));let o=n.creditDisplay,r=i.terrainData;if(d(r)&&d(r.credits)){let pe=r.credits;for(let Ce=0,Ht=pe.length;Ce<Ht;++Ce)o.addCreditToNextFrame(pe[Ce])}let s=kt.maximumTextureImageUnits,a=i.waterMaskTexture,c=i.waterMaskTranslationAndScale;!d(a)&&d(i.fill)&&(a=i.fill.waterMaskTexture,c=i.fill.waterMaskTranslationAndScale);let l=n.cameraUnderground,u=n.globeTranslucencyState,m=u.translucent,p=u.frontFaceAlphaByDistance,y=u.backFaceAlphaByDistance,f=u.rectangle,x=g(e.undergroundColor,Eot),_=g(e.undergroundColorAlphaByDistance,Xot),C=A0e(e,n)&&n.mode===ie.SCENE3D&&x.alpha>0&&(_.nearValue>0||_.farValue>0),V=e.lambertDiffuseMultiplier,L=e.vertexShadowDarkness,Z=e.hasWaterMask&&d(a),G=e.oceanNormalMap,X=Z&&d(G),P=e.terrainProvider,v=d(P)&&e.terrainProvider.hasVertexNormals,F=n.fog.enabled&&n.fog.renderable&&!l,M=e.showGroundAtmosphere&&n.mode===ie.SCENE3D,b=xn.castShadows(e.shadows)&&!m,R=xn.receiveShadows(e.shadows)&&!m,E=e.hueShift,I=e.saturationShift,w=e.brightnessShift,N=!(W.equalsEpsilon(E,0,W.EPSILON7)&&W.equalsEpsilon(I,0,W.EPSILON7)&&W.equalsEpsilon(w,0,W.EPSILON7)),B=!1;if(M){let pe=h.magnitude(n.camera.positionWC),Ce=e.nightFadeOutDistance;B=pe>Ce}Z&&--s,X&&--s,d(n.shadowState)&&n.shadowState.shadowsEnabled&&--s,d(e.clippingPlanes)&&e.clippingPlanes.enabled&&--s,s-=u.numberOfTextureUniforms;let k=i.renderedMesh,O=k.center,U=k.encoding,J=i.tileBoundingRegion,z=n.terrainExaggeration,ee=n.terrainExaggerationRelativeHeight,K=z!==1,j=U.hasGeodeticSurfaceNormals,q=fot,be=0,Te=0,ae=0,xe=0,_e=!1;if(n.mode!==ie.SCENE3D){let pe=n.mapProjection,Ce=pe.project(de.southwest(t.rectangle),got),Ht=pe.project(de.northeast(t.rectangle),xot);if(q.x=Ce.x,q.y=Ce.y,q.z=Ht.x,q.w=Ht.y,n.mode!==ie.MORPHING&&(O=yot,O.x=0,O.y=(q.z+q.x)*.5,O.z=(q.w+q.y)*.5,q.x-=O.y,q.y-=O.z,q.z-=O.y,q.w-=O.z),n.mode===ie.SCENE2D&&U.quantization===vs.BITS12){let ut=1/(Math.pow(2,12)-1)*.5,hi=(q.z-q.x)*ut,ji=(q.w-q.y)*ut;q.x-=hi,q.y-=ji,q.z+=hi,q.w+=ji}pe instanceof Ei&&(be=t.rectangle.south,Te=t.rectangle.north,ae=Ei.geodeticLatitudeToMercatorAngle(be),xe=1/(Ei.geodeticLatitudeToMercatorAngle(Te)-ae),_e=!0)}let Ve=Got;Ve.frameState=n,Ve.surfaceTile=i,Ve.showReflectiveOcean=Z,Ve.showOceanWaves=X,Ve.enableLighting=e.enableLighting,Ve.dynamicAtmosphereLighting=e.dynamicAtmosphereLighting,Ve.dynamicAtmosphereLightingFromSun=e.dynamicAtmosphereLightingFromSun,Ve.showGroundAtmosphere=M,Ve.atmosphereLightIntensity=e.atmosphereLightIntensity,Ve.atmosphereRayleighCoefficient=e.atmosphereRayleighCoefficient,Ve.atmosphereMieCoefficient=e.atmosphereMieCoefficient,Ve.atmosphereRayleighScaleHeight=e.atmosphereRayleighScaleHeight,Ve.atmosphereMieScaleHeight=e.atmosphereMieScaleHeight,Ve.atmosphereMieAnisotropy=e.atmosphereMieAnisotropy,Ve.perFragmentGroundAtmosphere=B,Ve.hasVertexNormals=v,Ve.useWebMercatorProjection=_e,Ve.clippedByBoundaries=i.clippedByBoundaries,Ve.hasGeodeticSurfaceNormals=j,Ve.hasExaggeration=K;let Ie=i.imagery,Me=0,ve=Ie.length,ke=e.showSkirts&&!l&&!m,ct=e.backFaceCulling&&!l&&!m,yt=ct?e._renderState:e._disableCullingRenderState,ot=ct?e._blendRenderState:e._disableCullingBlendRenderState,ln=yt,vn=e._firstPassInitialColor,Dt=n.context;if(d(e._debug.boundingSphereTile)||mk(),e._materialUniformMap!==e.materialUniformMap){e._materialUniformMap=e.materialUniformMap;let pe=e._drawCommands.length;for(let Ce=0;Ce<pe;++Ce)e._uniformMaps[Ce]=v0e(n,e)}do{let pe=0,Ce,Ht;if(e._drawCommands.length<=e._usedDrawCommands?(Ce=new nt,Ce.owner=t,Ce.cull=!1,Ce.boundingVolume=new ce,Ce.orientedBoundingBox=void 0,Ht=v0e(n,e),e._drawCommands.push(Ce),e._uniformMaps.push(Ht)):(Ce=e._drawCommands[e._usedDrawCommands],Ht=e._uniformMaps[e._usedDrawCommands]),Ce.owner=t,++e._usedDrawCommands,t===e._debug.boundingSphereTile){let fi=J.boundingVolume,Pr=J.boundingSphere;d(fi)?M0e(fi,Y.RED).update(n):d(Pr)&&N0e(Pr,Y.RED).update(n)}let ut=Ht.properties;se.clone(vn,ut.initialColor),ut.oceanNormalMap=G,ut.lightingFadeDistance.x=e.lightingFadeOutDistance,ut.lightingFadeDistance.y=e.lightingFadeInDistance,ut.nightFadeDistance.x=e.nightFadeOutDistance,ut.nightFadeDistance.y=e.nightFadeInDistance,ut.atmosphereLightIntensity=e.atmosphereLightIntensity,ut.atmosphereRayleighCoefficient=e.atmosphereRayleighCoefficient,ut.atmosphereMieCoefficient=e.atmosphereMieCoefficient,ut.atmosphereRayleighScaleHeight=e.atmosphereRayleighScaleHeight,ut.atmosphereMieScaleHeight=e.atmosphereMieScaleHeight,ut.atmosphereMieAnisotropy=e.atmosphereMieAnisotropy,ut.zoomedOutOceanSpecularIntensity=e.zoomedOutOceanSpecularIntensity;let hi=l?y:p,ji=l?p:y;d(hi)&&(se.fromElements(hi.near,hi.nearValue,hi.far,hi.farValue,ut.frontFaceAlphaByDistance),se.fromElements(ji.near,ji.nearValue,ji.far,ji.farValue,ut.backFaceAlphaByDistance)),se.fromElements(_.near,_.nearValue,_.far,_.farValue,ut.undergroundColorAlphaByDistance),Y.clone(x,ut.undergroundColor),ut.lambertDiffuseMultiplier=V,ut.vertexShadowDarkness=L;let pc=!d(i.vertexArray)&&d(e.fillHighlightColor)&&e.fillHighlightColor.alpha>0;pc&&Y.clone(e.fillHighlightColor,ut.fillHighlightColor),ut.terrainExaggerationAndRelativeHeight.x=z,ut.terrainExaggerationAndRelativeHeight.y=ee,ut.center3D=k.center,h.clone(O,ut.rtc),se.clone(q,ut.tileRectangle),ut.southAndNorthLatitude.x=be,ut.southAndNorthLatitude.y=Te,ut.southMercatorYAndOneOverHeight.x=ae,ut.southMercatorYAndOneOverHeight.y=xe;let bs=pot,ys=uk(t.rectangle,e.cartographicLimitRectangle),$r=bot,we=uk(t.rectangle,f);h.fromElements(E,I,w,ut.hsbShift);let je=t.rectangle,qe=1/je.width,Qe=1/je.height;bs.x=(ys.west-je.west)*qe,bs.y=(ys.south-je.south)*Qe,bs.z=(ys.east-je.west)*qe,bs.w=(ys.north-je.south)*Qe,se.clone(bs,ut.localizedCartographicLimitRectangle),$r.x=(we.west-je.west)*qe,$r.y=(we.south-je.south)*Qe,$r.z=(we.east-je.west)*qe,$r.w=(we.north-je.south)*Qe,se.clone($r,ut.localizedTranslucencyRectangle);let pt=F&&W.fog(t._distance,n.fog.density)>W.EPSILON3;N=N&&(pt||M);let Bt=!1,Vn=!1,di=!1,bo=!1,es=!1,ts=!1,Mo=!1,Ki=!1,ns=!1,zn=!1;for(;pe<s&&Me<ve;){let fi=Ie[Me],Pr=fi.readyImagery;if(++Me,!d(Pr)||Pr.imageryLayer.alpha===0)continue;let Sh=fi.useWebMercatorT?Pr.textureWebMercator:Pr.texture,cr=Pr.imageryLayer;d(fi.textureTranslationAndScale)||(fi.textureTranslationAndScale=cr._calculateTextureTranslationAndScale(t,fi)),ut.dayTextures[pe]=Sh,ut.dayTextureTranslationAndScale[pe]=fi.textureTranslationAndScale,ut.dayTextureTexCoordsRectangle[pe]=fi.textureCoordinateRectangle,ut.dayTextureUseWebMercatorT[pe]=fi.useWebMercatorT,ut.dayTextureAlpha[pe]=cr.alpha,ts=ts||ut.dayTextureAlpha[pe]!==1,ut.dayTextureNightAlpha[pe]=cr.nightAlpha,Mo=Mo||ut.dayTextureNightAlpha[pe]!==1,ut.dayTextureDayAlpha[pe]=cr.dayAlpha,Mo=Mo||ut.dayTextureDayAlpha[pe]!==1,ut.dayTextureBrightness[pe]=cr.brightness,Bt=Bt||ut.dayTextureBrightness[pe]!==ia.DEFAULT_BRIGHTNESS,ut.dayTextureContrast[pe]=cr.contrast,Vn=Vn||ut.dayTextureContrast[pe]!==ia.DEFAULT_CONTRAST,ut.dayTextureHue[pe]=cr.hue,di=di||ut.dayTextureHue[pe]!==ia.DEFAULT_HUE,ut.dayTextureSaturation[pe]=cr.saturation,bo=bo||ut.dayTextureSaturation[pe]!==ia.DEFAULT_SATURATION,ut.dayTextureOneOverGamma[pe]=1/cr.gamma,es=es||ut.dayTextureOneOverGamma[pe]!==1/ia.DEFAULT_GAMMA,ut.dayTextureSplit[pe]=cr.splitDirection,Ki=Ki||ut.dayTextureSplit[pe]!==0;let kd=ut.dayTextureCutoutRectangles[pe];if(d(kd)||(kd=ut.dayTextureCutoutRectangles[pe]=new se),se.clone(se.ZERO,kd),d(cr.cutoutRectangle)){let Or=uk(je,cr.cutoutRectangle),bc=de.simpleIntersection(Or,je,F0e);ns=d(bc)||ns,kd.x=(Or.west-je.west)*qe,kd.y=(Or.south-je.south)*Qe,kd.z=(Or.east-je.west)*qe,kd.w=(Or.north-je.south)*Qe}let qc=ut.colorsToAlpha[pe];d(qc)||(qc=ut.colorsToAlpha[pe]=new se);let pg=d(cr.colorToAlpha)&&cr.colorToAlphaThreshold>0;if(zn=zn||pg,pg){let Or=cr.colorToAlpha;qc.x=Or.red,qc.y=Or.green,qc.z=Or.blue,qc.w=cr.colorToAlphaThreshold}else qc.w=-1;if(d(Pr.credits)){let Or=Pr.credits;for(let bc=0,Dd=Or.length;bc<Dd;++bc)o.addCreditToNextFrame(Or[bc])}++pe}ut.dayTextures.length=pe,ut.waterMask=a,se.clone(c,ut.waterMaskTranslationAndScale),ut.minMaxHeight.x=U.minimumHeight,ut.minMaxHeight.y=U.maximumHeight,A.clone(U.matrix,ut.scaleAndBias);let wn=e._clippingPlanes,mn=d(wn)&&wn.enabled&&t.isClipped;mn&&(ut.clippingPlanesEdgeColor=Y.clone(wn.edgeColor,ut.clippingPlanesEdgeColor),ut.clippingPlanesEdgeWidth=wn.edgeWidth),Ve.numberOfDayTextures=pe,Ve.applyBrightness=Bt,Ve.applyContrast=Vn,Ve.applyHue=di,Ve.applySaturation=bo,Ve.applyGamma=es,Ve.applyAlpha=ts,Ve.applyDayNightAlpha=Mo,Ve.applySplit=Ki,Ve.enableFog=pt,Ve.enableClippingPlanes=mn,Ve.clippingPlanes=wn,Ve.hasImageryLayerCutout=ns,Ve.colorCorrect=N,Ve.highlightFillTile=pc,Ve.colorToAlpha=zn,Ve.showUndergroundColor=C,Ve.translucent=m;let _i=i.renderedMesh.indices.length;ke||(_i=i.renderedMesh.indexCountWithoutSkirts),Ce.shaderProgram=e._surfaceShaderSet.getShaderProgram(Ve),Ce.castShadows=b,Ce.receiveShadows=R,Ce.renderState=ln,Ce.primitiveType=Fe.TRIANGLES,Ce.vertexArray=i.vertexArray||i.fill.vertexArray,Ce.count=_i,Ce.uniformMap=Ht,Ce.pass=Re.GLOBE,e._debug.wireframe&&(Lot(Dt,e,t),d(i.wireframeVertexArray)&&(Ce.vertexArray=i.wireframeVertexArray,Ce.primitiveType=Fe.LINES,Ce.count=_i*2));let ui=Ce.boundingVolume,As=Ce.orientedBoundingBox;n.mode!==ie.SCENE3D?(ce.fromRectangleWithHeights2D(t.rectangle,n.mapProjection,J.minimumHeight,J.maximumHeight,ui),h.fromElements(ui.center.z,ui.center.x,ui.center.y,ui.center),n.mode===ie.MORPHING&&(ui=ce.union(J.boundingSphere,ui,ui))):(Ce.boundingVolume=ce.clone(J.boundingSphere,ui),Ce.orientedBoundingBox=Wn.clone(J.boundingVolume,As)),Ce.dirty=!0,m&&u.updateDerivedCommands(Ce,n),w0e(Ce,n),ln=ot,vn=Zot}while(Me<ve)}var Nv=jo;var bVi=T(S(),1);function U0e(){this._enabled=!1,this._frontFaceAlpha=1,this._frontFaceAlphaByDistance=void 0,this._backFaceAlpha=1,this._backFaceAlphaByDistance=void 0,this._rectangle=de.clone(de.MAX_VALUE)}Object.defineProperties(U0e.prototype,{enabled:{get:function(){return this._enabled},set:function(e){this._enabled=e}},frontFaceAlpha:{get:function(){return this._frontFaceAlpha},set:function(e){this._frontFaceAlpha=e}},frontFaceAlphaByDistance:{get:function(){return this._frontFaceAlphaByDistance},set:function(e){this._frontFaceAlphaByDistance=It.clone(e,this._frontFaceAlphaByDistance)}},backFaceAlpha:{get:function(){return this._backFaceAlpha},set:function(e){this._backFaceAlpha=e}},backFaceAlphaByDistance:{get:function(){return this._backFaceAlphaByDistance},set:function(e){this._backFaceAlphaByDistance=It.clone(e,this._backFaceAlphaByDistance)}},rectangle:{get:function(){return this._rectangle},set:function(e){d(e)||(e=de.clone(de.MAX_VALUE)),de.clone(e,this._rectangle)}}});var Uv=U0e;var LVi=T(S(),1);function ps(){this._layers=[],this.layerAdded=new ye,this.layerRemoved=new ye,this.layerMoved=new ye,this.layerShownOrHidden=new ye}Object.defineProperties(ps.prototype,{length:{get:function(){return this._layers.length}}});ps.prototype.add=function(e,t){d(t)?this._layers.splice(t,0,e):(t=this._layers.length,this._layers.push(e)),this._update(),this.layerAdded.raiseEvent(e,t);let i=e.readyEvent.addEventListener(()=>{this.layerShownOrHidden.raiseEvent(e,e._layerIndex,e.show),i()})};ps.prototype.addImageryProvider=function(e,t){let n=new ia(e);return this.add(n,t),n};ps.prototype.remove=function(e,t){t=g(t,!0);let n=this._layers.indexOf(e);return n!==-1?(this._layers.splice(n,1),this._update(),this.layerRemoved.raiseEvent(e,n),t&&e.destroy(),!0):!1};ps.prototype.removeAll=function(e){e=g(e,!0);let t=this._layers;for(let n=0,i=t.length;n<i;n++){let o=t[n];this.layerRemoved.raiseEvent(o,n),e&&o.destroy()}this._layers=[]};ps.prototype.contains=function(e){return this.indexOf(e)!==-1};ps.prototype.indexOf=function(e){return this._layers.indexOf(e)};ps.prototype.get=function(e){return this._layers[e]};function hk(e,t){return e.indexOf(t)}function k0e(e,t,n){let i=e._layers;if(t=W.clamp(t,0,i.length-1),n=W.clamp(n,0,i.length-1),t===n)return;let o=i[t];i[t]=i[n],i[n]=o,e._update(),e.layerMoved.raiseEvent(o,n,t)}ps.prototype.raise=function(e){let t=hk(this._layers,e);k0e(this,t,t+1)};ps.prototype.lower=function(e){let t=hk(this._layers,e);k0e(this,t,t-1)};ps.prototype.raiseToTop=function(e){let t=hk(this._layers,e);t!==this._layers.length-1&&(this._layers.splice(t,1),this._layers.push(e),this._update(),this.layerMoved.raiseEvent(e,this._layers.length-1,t))};ps.prototype.lowerToBottom=function(e){let t=hk(this._layers,e);t!==0&&(this._layers.splice(t,1),this._layers.splice(0,0,e),this._update(),this.layerMoved.raiseEvent(e,0,t))};var Wot=new de;function D0e(e,t,n,i){let o=e.globe._surface._tilesToRender,r;for(let a=0;!d(r)&&a<o.length;++a){let c=o[a];de.contains(c.rectangle,t)&&(r=c)}if(!d(r))return;let s=r.data.imagery;for(let a=s.length-1;a>=0;--a){let c=s[a],l=c.readyImagery;if(!d(l)||!l.imageryLayer.ready)continue;let u=l.imageryLayer.imageryProvider;if(n&&!d(u.pickFeatures)||!de.contains(l.rectangle,t))continue;let m=Wot,p=1/1024;m.west=W.lerp(r.rectangle.west,r.rectangle.east,c.textureCoordinateRectangle.x-p),m.east=W.lerp(r.rectangle.west,r.rectangle.east,c.textureCoordinateRectangle.z+p),m.south=W.lerp(r.rectangle.south,r.rectangle.north,c.textureCoordinateRectangle.y-p),m.north=W.lerp(r.rectangle.south,r.rectangle.north,c.textureCoordinateRectangle.w+p),de.contains(m,t)&&i(l)}}ps.prototype.pickImageryLayers=function(e,t){let n=t.globe.pick(e,t);if(!d(n))return;let i=t.globe.ellipsoid.cartesianToCartographic(n),o=[];if(D0e(t,i,!1,function(r){o.push(r.imageryLayer)}),o.length!==0)return o};ps.prototype.pickImageryLayerFeatures=function(e,t){let n=t.globe.pick(e,t);if(!d(n))return;let i=t.globe.ellipsoid.cartesianToCartographic(n),o=[],r=[];if(D0e(t,i,!0,function(s){if(!s.imageryLayer.ready)return;let c=s.imageryLayer.imageryProvider.pickFeatures(s.x,s.y,s.level,i.longitude,i.latitude);d(c)&&(o.push(c),r.push(s.imageryLayer))}),o.length!==0)return Promise.all(o).then(function(s){let a=[];for(let c=0;c<s.length;++c){let l=s[c],u=r[c];if(d(l)&&l.length>0)for(let m=0;m<l.length;++m){let p=l[m];p.imageryLayer=u,d(p.position)||(p.position=i),a.push(p)}}return a})};ps.prototype.queueReprojectionCommands=function(e){let t=this._layers;for(let n=0,i=t.length;n<i;++n)t[n].queueReprojectionCommands(e)};ps.prototype.cancelReprojections=function(){let e=this._layers;for(let t=0,n=e.length;t<n;++t)e[t].cancelReprojections()};ps.prototype.isDestroyed=function(){return!1};ps.prototype.destroy=function(){return this.removeAll(!0),ue(this)};ps.prototype._update=function(){let e=!0,t=this._layers,n,i,o,r;for(o=0,r=t.length;o<r;++o)i=t[o],i._layerIndex=o,i.show?(i._isBaseLayer=e,e=!1):i._isBaseLayer=!1,i.show!==i._show&&(d(i._show)&&(d(n)||(n=[]),n.push(i)),i._show=i.show);if(d(n))for(o=0,r=n.length;o<r;++o)i=n[o],this.layerShownOrHidden.raiseEvent(i,i._layerIndex,i.show)};var kv=ps;var rLi=T(S(),1);var EVi=T(S(),1);function B0e(e){this._ellipsoid=new l0(e.ellipsoid,h.ZERO)}Object.defineProperties(B0e.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});var Dv=B0e;var wVi=T(S(),1);function Kc(e){this._tilingScheme=e.tilingScheme,this._x=e.x,this._y=e.y,this._level=e.level,this._parent=e.parent,this._rectangle=this._tilingScheme.tileXYToRectangle(this._x,this._y,this._level),this._southwestChild=void 0,this._southeastChild=void 0,this._northwestChild=void 0,this._northeastChild=void 0,this.replacementPrevious=void 0,this.replacementNext=void 0,this._distance=0,this._loadPriority=0,this._customData=[],this._frameUpdated=void 0,this._lastSelectionResult=jn.NONE,this._lastSelectionResultFrame=void 0,this._loadedCallbacks={},this.state=ws.START,this.renderable=!1,this.upsampledFromParent=!1,this.data=void 0}Kc.createLevelZeroTiles=function(e){let t=e.getNumberOfXTilesAtLevel(0),n=e.getNumberOfYTilesAtLevel(0),i=new Array(t*n),o=0;for(let r=0;r<n;++r)for(let s=0;s<t;++s)i[o++]=new Kc({tilingScheme:e,x:s,y:r,level:0});return i};Kc.prototype._updateCustomData=function(e,t,n){let i=this.customData,o,r,s;if(d(t)&&d(n)){for(i=i.filter(function(a){return n.indexOf(a)===-1}),this._customData=i,s=this._rectangle,o=0;o<t.length;++o)r=t[o],de.contains(s,r.positionCartographic)&&i.push(r);this._frameUpdated=e}else{let a=this._parent;if(d(a)&&this._frameUpdated!==a._frameUpdated){i.length=0,s=this._rectangle;let c=a.customData;for(o=0;o<c.length;++o)r=c[o],de.contains(s,r.positionCartographic)&&i.push(r);this._frameUpdated=a._frameUpdated}}};Object.defineProperties(Kc.prototype,{tilingScheme:{get:function(){return this._tilingScheme}},x:{get:function(){return this._x}},y:{get:function(){return this._y}},level:{get:function(){return this._level}},parent:{get:function(){return this._parent}},rectangle:{get:function(){return this._rectangle}},children:{get:function(){return[this.northwestChild,this.northeastChild,this.southwestChild,this.southeastChild]}},southwestChild:{get:function(){return d(this._southwestChild)||(this._southwestChild=new Kc({tilingScheme:this.tilingScheme,x:this.x*2,y:this.y*2+1,level:this.level+1,parent:this})),this._southwestChild}},southeastChild:{get:function(){return d(this._southeastChild)||(this._southeastChild=new Kc({tilingScheme:this.tilingScheme,x:this.x*2+1,y:this.y*2+1,level:this.level+1,parent:this})),this._southeastChild}},northwestChild:{get:function(){return d(this._northwestChild)||(this._northwestChild=new Kc({tilingScheme:this.tilingScheme,x:this.x*2,y:this.y*2,level:this.level+1,parent:this})),this._northwestChild}},northeastChild:{get:function(){return d(this._northeastChild)||(this._northeastChild=new Kc({tilingScheme:this.tilingScheme,x:this.x*2+1,y:this.y*2,level:this.level+1,parent:this})),this._northeastChild}},customData:{get:function(){return this._customData}},needsLoading:{get:function(){return this.state<ws.DONE}},eligibleForUnloading:{get:function(){let e=!0;return d(this.data)&&(e=this.data.eligibleForUnloading,d(e)||(e=!0)),e}}});Kc.prototype.findLevelZeroTile=function(e,t,n){let i=this.tilingScheme.getNumberOfXTilesAtLevel(0);if(t<0?t+=i:t>=i&&(t-=i),!(n<0||n>=this.tilingScheme.getNumberOfYTilesAtLevel(0)))return e.filter(function(o){return o.x===t&&o.y===n})[0]};Kc.prototype.findTileToWest=function(e){let t=this.parent;if(t===void 0)return this.findLevelZeroTile(e,this.x-1,this.y);if(t.southeastChild===this)return t.southwestChild;if(t.northeastChild===this)return t.northwestChild;let n=t.findTileToWest(e);if(n!==void 0)return t.southwestChild===this?n.southeastChild:n.northeastChild};Kc.prototype.findTileToEast=function(e){let t=this.parent;if(t===void 0)return this.findLevelZeroTile(e,this.x+1,this.y);if(t.southwestChild===this)return t.southeastChild;if(t.northwestChild===this)return t.northeastChild;let n=t.findTileToEast(e);if(n!==void 0)return t.southeastChild===this?n.southwestChild:n.northwestChild};Kc.prototype.findTileToSouth=function(e){let t=this.parent;if(t===void 0)return this.findLevelZeroTile(e,this.x,this.y+1);if(t.northwestChild===this)return t.southwestChild;if(t.northeastChild===this)return t.southeastChild;let n=t.findTileToSouth(e);if(n!==void 0)return t.southwestChild===this?n.northwestChild:n.northeastChild};Kc.prototype.findTileToNorth=function(e){let t=this.parent;if(t===void 0)return this.findLevelZeroTile(e,this.x,this.y-1);if(t.southwestChild===this)return t.northwestChild;if(t.southeastChild===this)return t.northeastChild;let n=t.findTileToNorth(e);if(n!==void 0)return t.northwestChild===this?n.southwestChild:n.southeastChild};Kc.prototype.freeResources=function(){this.state=ws.START,this.renderable=!1,this.upsampledFromParent=!1,d(this.data)&&d(this.data.freeResources)&&this.data.freeResources(),fk(this._southwestChild),this._southwestChild=void 0,fk(this._southeastChild),this._southeastChild=void 0,fk(this._northwestChild),this._northwestChild=void 0,fk(this._northeastChild),this._northeastChild=void 0};function fk(e){d(e)&&e.freeResources()}var Bv=Kc;var MVi=T(S(),1);function pk(){this.head=void 0,this.tail=void 0,this.count=0,this._lastBeforeStartOfFrame=void 0}pk.prototype.markStartOfRenderFrame=function(){this._lastBeforeStartOfFrame=this.head};pk.prototype.trimTiles=function(e){let t=this.tail,n=!0;for(;n&&d(this._lastBeforeStartOfFrame)&&this.count>e&&d(t);){n=t!==this._lastBeforeStartOfFrame;let i=t.replacementPrevious;t.eligibleForUnloading&&(t.freeResources(),Y0e(this,t)),t=i}};function Y0e(e,t){let n=t.replacementPrevious,i=t.replacementNext;t===e._lastBeforeStartOfFrame&&(e._lastBeforeStartOfFrame=i),t===e.head?e.head=i:n.replacementNext=i,t===e.tail?e.tail=n:i.replacementPrevious=n,t.replacementPrevious=void 0,t.replacementNext=void 0,--e.count}pk.prototype.markTileRendered=function(e){let t=this.head;if(t===e){e===this._lastBeforeStartOfFrame&&(this._lastBeforeStartOfFrame=e.replacementNext);return}if(++this.count,!d(t)){e.replacementPrevious=void 0,e.replacementNext=void 0,this.head=e,this.tail=e;return}(d(e.replacementPrevious)||d(e.replacementNext))&&Y0e(this,e),e.replacementPrevious=void 0,e.replacementNext=t,t.replacementPrevious=e,this.head=e};var Yv=pk;function Du(e){this._tileProvider=e.tileProvider,this._tileProvider.quadtree=this,this._debug={enableDebugOutput:!1,maxDepth:0,maxDepthVisited:0,tilesVisited:0,tilesCulled:0,tilesRendered:0,tilesWaitingForChildren:0,lastMaxDepth:-1,lastMaxDepthVisited:-1,lastTilesVisited:-1,lastTilesCulled:-1,lastTilesRendered:-1,lastTilesWaitingForChildren:-1,suspendLodUpdate:!1};let n=this._tileProvider.tilingScheme.ellipsoid;this._tilesToRender=[],this._tileLoadQueueHigh=[],this._tileLoadQueueMedium=[],this._tileLoadQueueLow=[],this._tileReplacementQueue=new Yv,this._levelZeroTiles=void 0,this._loadQueueTimeSlice=5,this._tilesInvalidated=!1,this._addHeightCallbacks=[],this._removeHeightCallbacks=[],this._tileToUpdateHeights=[],this._lastTileIndex=0,this._updateHeightsTimeSlice=2,this._cameraPositionCartographic=void 0,this._cameraReferenceFrameOriginCartographic=void 0,this.maximumScreenSpaceError=g(e.maximumScreenSpaceError,2),this.tileCacheSize=g(e.tileCacheSize,100),this.loadingDescendantLimit=20,this.preloadAncestors=!0,this.preloadSiblings=!1,this._occluders=new Dv({ellipsoid:n}),this._tileLoadProgressEvent=new ye,this._lastTileLoadQueueLength=0,this._lastSelectionFrameNumber=void 0}Object.defineProperties(Du.prototype,{tileProvider:{get:function(){return this._tileProvider}},tileLoadProgressEvent:{get:function(){return this._tileLoadProgressEvent}},occluders:{get:function(){return this._occluders}}});Du.prototype.invalidateAllTiles=function(){this._tilesInvalidated=!0};function Pot(e){let t=e._tileReplacementQueue;t.head=void 0,t.tail=void 0,t.count=0,K0e(e);let n=e._levelZeroTiles;if(d(n))for(let i=0;i<n.length;++i){let r=n[i].customData,s=r.length;for(let a=0;a<s;++a){let c=r[a];c.level=0,e._addHeightCallbacks.push(c)}n[i].freeResources()}e._levelZeroTiles=void 0,e._tileProvider.cancelReprojections()}Du.prototype.forEachLoadedTile=function(e){let t=this._tileReplacementQueue.head;for(;d(t);)t.state!==ws.START&&e(t),t=t.replacementNext};Du.prototype.forEachRenderedTile=function(e){let t=this._tilesToRender;for(let n=0,i=t.length;n<i;++n)e(t[n])};Du.prototype.updateHeight=function(e,t){let n=this,i={positionOnEllipsoidSurface:void 0,positionCartographic:e,level:-1,callback:t};return i.removeFunc=function(){let o=n._addHeightCallbacks,r=o.length;for(let s=0;s<r;++s)if(o[s]===i){o.splice(s,1);break}n._removeHeightCallbacks.push(i),i.callback&&(i.callback=void 0)},n._addHeightCallbacks.push(i),i.removeFunc};Du.prototype.update=function(e){d(this._tileProvider.update)&&this._tileProvider.update(e)};function K0e(e){let t=e._debug;t.maxDepth=0,t.maxDepthVisited=0,t.tilesVisited=0,t.tilesCulled=0,t.tilesRendered=0,t.tilesWaitingForChildren=0,e._tileLoadQueueHigh.length=0,e._tileLoadQueueMedium.length=0,e._tileLoadQueueLow.length=0}Du.prototype.beginFrame=function(e){e.passes.render&&(this._tilesInvalidated&&(Pot(this),this._tilesInvalidated=!1),this._tileProvider.initialize(e),K0e(this),!this._debug.suspendLodUpdate&&this._tileReplacementQueue.markStartOfRenderFrame())};Du.prototype.render=function(e){let t=e.passes,n=this._tileProvider;t.render&&(n.beginUpdate(e),Aot(this,e),Hot(this,e),n.endUpdate(e)),t.pick&&this._tilesToRender.length>0&&n.updateForPick(e)};function vot(e,t){let n=e._tileLoadQueueHigh.length+e._tileLoadQueueMedium.length+e._tileLoadQueueLow.length;if(n!==e._lastTileLoadQueueLength||e._tilesInvalidated){let o=ye.prototype.raiseEvent.bind(e._tileLoadProgressEvent,n);t.afterRender.push(()=>(o(),!0)),e._lastTileLoadQueueLength=n}let i=e._debug;i.enableDebugOutput&&!i.suspendLodUpdate&&(i.maxDepth=e._tilesToRender.reduce(function(o,r){return Math.max(o,r.level)},-1),i.tilesRendered=e._tilesToRender.length,(i.tilesVisited!==i.lastTilesVisited||i.tilesRendered!==i.lastTilesRendered||i.tilesCulled!==i.lastTilesCulled||i.maxDepth!==i.lastMaxDepth||i.tilesWaitingForChildren!==i.lastTilesWaitingForChildren||i.maxDepthVisited!==i.lastMaxDepthVisited)&&(console.log(`Visited ${i.tilesVisited}, Rendered: ${i.tilesRendered}, Culled: ${i.tilesCulled}, Max Depth Rendered: ${i.maxDepth}, Max Depth Visited: ${i.maxDepthVisited}, Waiting for children: ${i.tilesWaitingForChildren}`),i.lastTilesVisited=i.tilesVisited,i.lastTilesRendered=i.tilesRendered,i.lastTilesCulled=i.tilesCulled,i.lastMaxDepth=i.maxDepth,i.lastTilesWaitingForChildren=i.tilesWaitingForChildren,i.lastMaxDepthVisited=i.maxDepthVisited))}Du.prototype.endFrame=function(e){!e.passes.render||e.mode===ie.MORPHING||(Bot(this,e),Kot(this,e),vot(this,e))};Du.prototype.isDestroyed=function(){return!1};Du.prototype.destroy=function(){this._tileProvider=this._tileProvider&&this._tileProvider.destroy()};var Kv,O0e=new he;function wot(e,t){let n=de.center(e.rectangle,O0e),i=n.longitude-Kv.longitude,o=n.latitude-Kv.latitude;n=de.center(t.rectangle,O0e);let r=n.longitude-Kv.longitude,s=n.latitude-Kv.latitude;return i*i+o*o-(r*r+s*s)}var Fot=new h,Ov=[];function Aot(e,t){let n=e._debug;if(n.suspendLodUpdate)return;let i=e._tilesToRender;i.length=0;let o,r=e._tileProvider;if(!d(e._levelZeroTiles)){let x=r.tilingScheme;if(d(x)){let _=r.tilingScheme;e._levelZeroTiles=Bv.createLevelZeroTiles(_);let C=e._levelZeroTiles.length;if(Ov.length<C)for(Ov=new Array(C),o=0;o<C;++o)Ov[o]===void 0&&(Ov[o]=new Hv)}else return}e._occluders.ellipsoid.cameraPosition=t.camera.positionWC;let s,a=e._levelZeroTiles,c=a.length>1?e._occluders:void 0;Kv=t.camera.positionCartographic,a.sort(wot);let l=e._addHeightCallbacks,u=e._removeHeightCallbacks,m=t.frameNumber,p;if(l.length>0||u.length>0){for(o=0,p=a.length;o<p;++o)s=a[o],s._updateCustomData(m,l,u);l.length=0,u.length=0}let y=t.camera;e._cameraPositionCartographic=y.positionCartographic;let f=A.getTranslation(y.transform,Fot);for(e._cameraReferenceFrameOriginCartographic=e.tileProvider.tilingScheme.ellipsoid.cartesianToCartographic(f,e._cameraReferenceFrameOriginCartographic),o=0,p=a.length;o<p;++o)s=a[o],e._tileReplacementQueue.markTileRendered(s),s.renderable?Va(e,s,r,t,c,!1,Ov[o]):(M0(e,e._tileLoadQueueHigh,s,t),++n.tilesWaitingForChildren);e._lastSelectionFrameNumber=m}function M0(e,t,n,i){n.needsLoading&&(e.tileProvider.computeTileLoadPriority!==void 0&&(n._loadPriority=e.tileProvider.computeTileLoadPriority(n,i)),t.push(n))}function Hv(){this.allAreRenderable=!0,this.anyWereRenderedLastFrame=!1,this.notYetRenderableCount=0}function H0e(){this.southwest=new Hv,this.southeast=new Hv,this.northwest=new Hv,this.northeast=new Hv}H0e.prototype.combine=function(e){let t=this.southwest,n=this.southeast,i=this.northwest,o=this.northeast;e.allAreRenderable=t.allAreRenderable&&n.allAreRenderable&&i.allAreRenderable&&o.allAreRenderable,e.anyWereRenderedLastFrame=t.anyWereRenderedLastFrame||n.anyWereRenderedLastFrame||i.anyWereRenderedLastFrame||o.anyWereRenderedLastFrame,e.notYetRenderableCount=t.notYetRenderableCount+n.notYetRenderableCount+i.notYetRenderableCount+o.notYetRenderableCount};var kQ=new Array(31);for(let e=0;e<kQ.length;++e)kQ[e]=new H0e;function Mot(e,t,n,i,o){let r=e._debug;++r.tilesVisited,e._tileReplacementQueue.markTileRendered(n),n._updateCustomData(t.frameNumber),n.level>r.maxDepthVisited&&(r.maxDepthVisited=n.level);let s=kot(e,t,n)<e.maximumScreenSpaceError,a=n.southwestChild,c=n.southeastChild,l=n.northwestChild,u=n.northeastChild,m=e._lastSelectionFrameNumber,p=n._lastSelectionResultFrame===m?n._lastSelectionResult:jn.NONE,y=e.tileProvider;if(s||i){let f=jn.originalResult(p)===jn.RENDERED,x=jn.originalResult(p)===jn.CULLED||p===jn.NONE,_=n.state===ws.DONE,C=f||x||_;if(C||d(y.canRenderWithoutLosingDetail)&&(C=y.canRenderWithoutLosingDetail(n)),C){s&&M0(e,e._tileLoadQueueMedium,n,t),bk(e,n),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=p===jn.RENDERED,o.notYetRenderableCount=n.renderable?0:1,n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=jn.RENDERED,o.anyWereRenderedLastFrame||e._tileToUpdateHeights.push(n);return}i=!0,s&&M0(e,e._tileLoadQueueHigh,n,t)}if(y.canRefine(n)){if(a.upsampledFromParent&&c.upsampledFromParent&&l.upsampledFromParent&&u.upsampledFromParent){bk(e,n),M0(e,e._tileLoadQueueMedium,n,t),e._tileReplacementQueue.markTileRendered(a),e._tileReplacementQueue.markTileRendered(c),e._tileReplacementQueue.markTileRendered(l),e._tileReplacementQueue.markTileRendered(u),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=p===jn.RENDERED,o.notYetRenderableCount=n.renderable?0:1,n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=jn.RENDERED,o.anyWereRenderedLastFrame||e._tileToUpdateHeights.push(n);return}n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=jn.REFINED;let x=e._tilesToRender.length,_=e._tileLoadQueueLow.length,C=e._tileLoadQueueMedium.length,V=e._tileLoadQueueHigh.length,L=e._tileToUpdateHeights.length;if(Not(e,a,c,l,u,t,i,o),x!==e._tilesToRender.length){let Z=o.allAreRenderable,G=o.anyWereRenderedLastFrame,X=o.notYetRenderableCount,P=!1;if(!Z&&!G){let v=e._tilesToRender;for(let M=x;M<v.length;++M){let b=v[M];for(;b!==void 0&&b._lastSelectionResult!==jn.KICKED&&b!==n;)b._lastSelectionResult=jn.kick(b._lastSelectionResult),b=b.parent}e._tilesToRender.length=x,e._tileToUpdateHeights.length=L,bk(e,n),n._lastSelectionResult=jn.RENDERED;let F=p===jn.RENDERED;!F&&X>e.loadingDescendantLimit&&(e._tileLoadQueueLow.length=_,e._tileLoadQueueMedium.length=C,e._tileLoadQueueHigh.length=V,M0(e,e._tileLoadQueueMedium,n,t),o.notYetRenderableCount=n.renderable?0:1,P=!0),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=F,F||e._tileToUpdateHeights.push(n),++r.tilesWaitingForChildren}e.preloadAncestors&&!P&&M0(e,e._tileLoadQueueLow,n,t)}return}n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=jn.RENDERED,bk(e,n),M0(e,e._tileLoadQueueHigh,n,t),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=p===jn.RENDERED,o.notYetRenderableCount=n.renderable?0:1}function Not(e,t,n,i,o,r,s,a){let c=r.camera.positionCartographic,l=e._tileProvider,u=e._occluders,m=kQ[t.level],p=m.southwest,y=m.southeast,f=m.northwest,x=m.northeast;c.longitude<t.rectangle.east?c.latitude<t.rectangle.north?(Va(e,t,l,r,u,s,p),Va(e,n,l,r,u,s,y),Va(e,i,l,r,u,s,f),Va(e,o,l,r,u,s,x)):(Va(e,i,l,r,u,s,f),Va(e,t,l,r,u,s,p),Va(e,o,l,r,u,s,x),Va(e,n,l,r,u,s,y)):c.latitude<t.rectangle.north?(Va(e,n,l,r,u,s,y),Va(e,t,l,r,u,s,p),Va(e,o,l,r,u,s,x),Va(e,i,l,r,u,s,f)):(Va(e,o,l,r,u,s,x),Va(e,i,l,r,u,s,f),Va(e,n,l,r,u,s,y),Va(e,t,l,r,u,s,p)),m.combine(a)}function Uot(e,t){let n=t.rectangle;return d(e._cameraPositionCartographic)&&de.contains(n,e._cameraPositionCartographic)||d(e._cameraReferenceFrameOriginCartographic)&&de.contains(n,e._cameraReferenceFrameOriginCartographic)}function Va(e,t,n,i,o,r,s){if(n.computeTileVisibility(t,i,o)!==sr.NONE)return Mot(e,i,t,r,s);if(++e._debug.tilesCulled,e._tileReplacementQueue.markTileRendered(t),s.allAreRenderable=!0,s.anyWereRenderedLastFrame=!1,s.notYetRenderableCount=0,Uot(e,t)){(!d(t.data)||!d(t.data.vertexArray))&&M0(e,e._tileLoadQueueMedium,t,i);let a=e._lastSelectionFrameNumber,c=t._lastSelectionResultFrame===a?t._lastSelectionResult:jn.NONE;c!==jn.CULLED_BUT_NEEDED&&c!==jn.RENDERED&&e._tileToUpdateHeights.push(t),t._lastSelectionResult=jn.CULLED_BUT_NEEDED}else e.preloadSiblings||t.level===0?(M0(e,e._tileLoadQueueLow,t,i),t._lastSelectionResult=jn.CULLED):t._lastSelectionResult=jn.CULLED;t._lastSelectionResultFrame=i.frameNumber}function kot(e,t,n){if(t.mode===ie.SCENE2D||t.camera.frustum instanceof en||t.camera.frustum instanceof yr)return Dot(e,t,n);let i=e._tileProvider.getLevelMaximumGeometricError(n.level),o=n._distance,r=t.context.drawingBufferHeight,s=t.camera.frustum.sseDenominator,a=i*r/(o*s);return t.fog.enabled&&(a-=W.fog(o,t.fog.density)*t.fog.sse),a/=t.pixelRatio,a}function Dot(e,t,n){let o=t.camera.frustum,r=o.offCenterFrustum;d(r)&&(o=r);let s=t.context,a=s.drawingBufferWidth,c=s.drawingBufferHeight,l=e._tileProvider.getLevelMaximumGeometricError(n.level),u=Math.max(o.top-o.bottom,o.right-o.left)/Math.max(a,c),m=l/u;return t.fog.enabled&&t.mode!==ie.SCENE2D&&(m-=W.fog(n._distance,t.fog.density)*t.fog.sse),m/=t.pixelRatio,m}function bk(e,t){e._tilesToRender.push(t)}function Bot(e,t){let n=e._tileLoadQueueHigh,i=e._tileLoadQueueMedium,o=e._tileLoadQueueLow;if(n.length===0&&i.length===0&&o.length===0)return;e._tileReplacementQueue.trimTiles(e.tileCacheSize);let r=gi()+e._loadQueueTimeSlice,s=e._tileProvider,a=NQ(e,t,s,r,n,!1);a=NQ(e,t,s,r,i,a),NQ(e,t,s,r,o,a)}function Yot(e,t){return e._loadPriority-t._loadPriority}function NQ(e,t,n,i,o,r){n.computeTileLoadPriority!==void 0&&o.sort(Yot);for(let s=0,a=o.length;s<a&&(gi()<i||!r);++s){let c=o[s];e._tileReplacementQueue.markTileRendered(c),n.loadTile(t,c),r=!0}return r}var bV=new Sn,UQ=new he,qy=new h,Oot=[];function Kot(e,t){if(!d(e.tileProvider.tilingScheme))return;let n=Oot;n.length=0;let i=e._tileToUpdateHeights,o=gi(),r=e._updateHeightsTimeSlice,s=o+r,a=t.mode,c=t.mapProjection,l=e.tileProvider.tilingScheme.ellipsoid,u;for(;i.length>0;){let m=i[0];if(!d(m.data)||!d(m.data.mesh)){let x=m._lastSelectionResultFrame===e._lastSelectionFrameNumber?m._lastSelectionResult:jn.NONE;(x===jn.RENDERED||x===jn.CULLED_BUT_NEEDED)&&n.push(m),i.shift(),e._lastTileIndex=0;continue}let p=m.customData,y=p.length,f=!1;for(u=e._lastTileIndex;u<y;++u){let x=p[u],_=m.data.terrainData,C=d(_)&&_.wasCreatedByUpsampling();if(m.level>x.level&&!C){if(d(x.positionOnEllipsoidSurface)||(x.positionOnEllipsoidSurface=h.fromRadians(x.positionCartographic.longitude,x.positionCartographic.latitude,0,l)),a===ie.SCENE3D){let L=l.geodeticSurfaceNormal(x.positionOnEllipsoidSurface,bV.direction),Z=l.getSurfaceNormalIntersectionWithZAxis(x.positionOnEllipsoidSurface,11500,bV.origin);if(!d(Z)){let G=0;d(m.data.tileBoundingRegion)&&(G=m.data.tileBoundingRegion.minimumHeight);let X=Math.min(G,-11500),P=h.multiplyByScalar(L,Math.abs(X)+1,qy);h.subtract(x.positionOnEllipsoidSurface,P,bV.origin)}}else he.clone(x.positionCartographic,UQ),UQ.height=-11500,c.project(UQ,qy),h.fromElements(qy.z,qy.x,qy.y,qy),h.clone(qy,bV.origin),h.clone(h.UNIT_X,bV.direction);let V=m.data.pick(bV,a,c,!1,qy);d(V)&&(d(x.callback)&&x.callback(V),x.level=m.level)}if(gi()>=s){f=!0;break}}if(f){e._lastTileIndex=u;break}else e._lastTileIndex=0,i.shift()}for(u=0;u<n.length;u++)i.push(n[u])}function Hot(e,t){let n=e._tileProvider,i=e._tilesToRender;for(let o=0,r=i.length;o<r;++o){let s=i[o];n.showTileThisFrame(s,t)}}var zv=Du;function ph(e){e=g(e,re.WGS84);let t=new Cf({ellipsoid:e}),n=new kv;this._ellipsoid=e,this._imageryLayerCollection=n,this._surfaceShaderSet=new Lv,this._material=void 0,this._surface=new zv({tileProvider:new Nv({terrainProvider:t,imageryLayers:n,surfaceShaderSet:this._surfaceShaderSet})}),this._terrainProvider=t,this._terrainProviderChanged=new ye,this._undergroundColor=Y.clone(Y.BLACK),this._undergroundColorAlphaByDistance=new It(e.maximumRadius/1e3,0,e.maximumRadius/5,1),this._translucency=new Uv,BQ(this),this.show=!0,this._oceanNormalMapResourceDirty=!0,this._oceanNormalMapResource=new Ee({url:$t("Assets/Textures/waterNormalsSmall.jpg")}),this.maximumScreenSpaceError=2,this.tileCacheSize=100,this.loadingDescendantLimit=20,this.preloadAncestors=!0,this.preloadSiblings=!1,this.fillHighlightColor=void 0,this.enableLighting=!1,this.lambertDiffuseMultiplier=.9,this.dynamicAtmosphereLighting=!0,this.dynamicAtmosphereLightingFromSun=!1,this.showGroundAtmosphere=!0,this.atmosphereLightIntensity=10,this.atmosphereRayleighCoefficient=new h(55e-7,13e-6,284e-7),this.atmosphereMieCoefficient=new h(21e-6,21e-6,21e-6),this.atmosphereRayleighScaleHeight=1e4,this.atmosphereMieScaleHeight=3200,this.atmosphereMieAnisotropy=.9,this.lightingFadeOutDistance=1e7,this.lightingFadeInDistance=2e7,this.nightFadeOutDistance=1e7,this.nightFadeInDistance=5e7,this.showWaterEffect=!0,this.depthTestAgainstTerrain=!1,this.shadows=xn.RECEIVE_ONLY,this.atmosphereHueShift=0,this.atmosphereSaturationShift=0,this.atmosphereBrightnessShift=0,this.terrainExaggeration=1,this.terrainExaggerationRelativeHeight=0,this.showSkirts=!0,this.backFaceCulling=!0,this._oceanNormalMap=void 0,this._zoomedOutOceanSpecularIntensity=void 0,this.vertexShadowDarkness=.3}Object.defineProperties(ph.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},imageryLayers:{get:function(){return this._imageryLayerCollection}},imageryLayersUpdatedEvent:{get:function(){return this._surface.tileProvider.imageryLayersUpdatedEvent}},tilesLoaded:{get:function(){return d(this._surface)?this._surface._tileLoadQueueHigh.length===0&&this._surface._tileLoadQueueMedium.length===0&&this._surface._tileLoadQueueLow.length===0:!0}},baseColor:{get:function(){return this._surface.tileProvider.baseColor},set:function(e){this._surface.tileProvider.baseColor=e}},clippingPlanes:{get:function(){return this._surface.tileProvider.clippingPlanes},set:function(e){this._surface.tileProvider.clippingPlanes=e}},cartographicLimitRectangle:{get:function(){return this._surface.tileProvider.cartographicLimitRectangle},set:function(e){d(e)||(e=de.clone(de.MAX_VALUE)),this._surface.tileProvider.cartographicLimitRectangle=e}},oceanNormalMapUrl:{get:function(){return this._oceanNormalMapResource.url},set:function(e){this._oceanNormalMapResource.url=e,this._oceanNormalMapResourceDirty=!0}},terrainProvider:{get:function(){return this._terrainProvider},set:function(e){e!==this._terrainProvider&&(this._terrainProvider=e,this._terrainProviderChanged.raiseEvent(e),d(this._material)&&BQ(this))}},terrainProviderChanged:{get:function(){return this._terrainProviderChanged}},tileLoadProgressEvent:{get:function(){return this._surface.tileLoadProgressEvent}},material:{get:function(){return this._material},set:function(e){this._material!==e&&(this._material=e,BQ(this))}},undergroundColor:{get:function(){return this._undergroundColor},set:function(e){this._undergroundColor=Y.clone(e,this._undergroundColor)}},undergroundColorAlphaByDistance:{get:function(){return this._undergroundColorAlphaByDistance},set:function(e){this._undergroundColorAlphaByDistance=It.clone(e,this._undergroundColorAlphaByDistance)}},translucency:{get:function(){return this._translucency}}});function BQ(e){let t=[],n=d(e._material)&&(e._material.shaderSource.match(/slope/)||e._material.shaderSource.match("normalEC")),i=[W0,eV];d(e._material)&&(!n||e._terrainProvider.requestVertexNormals)?(i.push(e._material.shaderSource),t.push("APPLY_MATERIAL"),e._surface._tileProvider.materialUniformMap=e._material._uniforms):e._surface._tileProvider.materialUniformMap=void 0,i.push(hv),e._surfaceShaderSet.baseVertexShaderSource=new Ye({sources:[W0,eV,fv],defines:t}),e._surfaceShaderSet.baseFragmentShaderSource=new Ye({sources:i,defines:t}),e._surfaceShaderSet.material=e._material}function zot(e){return function(t,n){let i=ce.distanceSquaredTo(t.pickBoundingSphere,e),o=ce.distanceSquaredTo(n.pickBoundingSphere,e);return i-o}}var Jot=[],Qot={start:0,stop:0};ph.prototype.pickWorldCoordinates=function(e,t,n,i){n=g(n,!0);let o=t.mode,r=t.mapProjection,s=Jot;s.length=0;let a=this._surface._tilesToRender,c=a.length,l,u;for(u=0;u<c;++u){l=a[u];let p=l.data;if(!d(p))continue;let y=p.pickBoundingSphere;if(o!==ie.SCENE3D)p.pickBoundingSphere=y=ce.fromRectangleWithHeights2D(l.rectangle,r,p.tileBoundingRegion.minimumHeight,p.tileBoundingRegion.maximumHeight,y),h.fromElements(y.center.z,y.center.x,y.center.y,y.center);else if(d(p.renderedMesh))ce.clone(p.tileBoundingRegion.boundingSphere,y);else continue;let f=Si.raySphere(e,y,Qot);d(f)&&s.push(p)}s.sort(zot(e.origin));let m;for(c=s.length,u=0;u<c&&(m=s[u].pick(e,t.mode,t.mapProjection,n,i),!d(m));++u);return m};var jot=new he;ph.prototype.pick=function(e,t,n){if(n=this.pickWorldCoordinates(e,t,!0,n),d(n)&&t.mode!==ie.SCENE3D){n=h.fromElements(n.y,n.z,n.x,n);let i=t.mapProjection.unproject(n,jot);n=t.globe.ellipsoid.cartographicToCartesian(i,n)}return n};var qot=new h,z0e=new h,$ot=new he,ert=new Sn;function DQ(e,t){return d(e)&&de.contains(e.rectangle,t)?e:void 0}ph.prototype.getHeight=function(e){let t=this._surface._levelZeroTiles;if(!d(t))return;let n,i,o=t.length;for(i=0;i<o&&(n=t[i],!de.contains(n.rectangle,e));++i);if(i>=o)return;let r=n;for(;d(n);)n=DQ(n._southwestChild,e)||DQ(n._southeastChild,e)||DQ(n._northwestChild,e)||n._northeastChild,d(n)&&d(n.data)&&d(n.data.renderedMesh)&&(r=n);if(n=r,!d(n)||!d(n.data)||!d(n.data.renderedMesh))return;let s=this._surface._tileProvider.tilingScheme.projection,a=this._surface._tileProvider.tilingScheme.ellipsoid,c=h.fromRadians(e.longitude,e.latitude,0,a,qot),l=ert,u=a.geodeticSurfaceNormal(c,l.direction),m=a.getSurfaceNormalIntersectionWithZAxis(c,11500,l.origin);if(!d(m)){let y;d(n.data.tileBoundingRegion)&&(y=n.data.tileBoundingRegion.minimumHeight);let f=Math.min(g(y,0),-11500),x=h.multiplyByScalar(u,Math.abs(f)+1,z0e);h.subtract(c,x,l.origin)}let p=n.data.pick(l,void 0,s,!1,z0e);if(d(p))return a.cartesianToCartographic(p,$ot).height};ph.prototype.update=function(e){this.show&&e.passes.render&&this._surface.update(e)};ph.prototype.beginFrame=function(e){let t=this._surface,n=t.tileProvider,i=this.terrainProvider,o=this.showWaterEffect&&d(i)&&i.hasWaterMask&&i.hasWaterMask;if(o&&this._oceanNormalMapResourceDirty){this._oceanNormalMapResourceDirty=!1;let a=this._oceanNormalMapResource,c=a.url;if(d(c)){let l=this;a.fetchImage().then(function(u){c===l._oceanNormalMapResource.url&&(l._oceanNormalMap=l._oceanNormalMap&&l._oceanNormalMap.destroy(),l._oceanNormalMap=new Wt({context:e.context,source:u}))})}else this._oceanNormalMap=this._oceanNormalMap&&this._oceanNormalMap.destroy()}let r=e.passes,s=e.mode;r.render&&(this.showGroundAtmosphere?this._zoomedOutOceanSpecularIntensity=.4:this._zoomedOutOceanSpecularIntensity=.5,t.maximumScreenSpaceError=this.maximumScreenSpaceError,t.tileCacheSize=this.tileCacheSize,t.loadingDescendantLimit=this.loadingDescendantLimit,t.preloadAncestors=this.preloadAncestors,t.preloadSiblings=this.preloadSiblings,n.terrainProvider=this.terrainProvider,n.lightingFadeOutDistance=this.lightingFadeOutDistance,n.lightingFadeInDistance=this.lightingFadeInDistance,n.nightFadeOutDistance=this.nightFadeOutDistance,n.nightFadeInDistance=this.nightFadeInDistance,n.zoomedOutOceanSpecularIntensity=s===ie.SCENE3D?this._zoomedOutOceanSpecularIntensity:0,n.hasWaterMask=o,n.oceanNormalMap=this._oceanNormalMap,n.enableLighting=this.enableLighting,n.dynamicAtmosphereLighting=this.dynamicAtmosphereLighting,n.dynamicAtmosphereLightingFromSun=this.dynamicAtmosphereLightingFromSun,n.showGroundAtmosphere=this.showGroundAtmosphere,n.atmosphereLightIntensity=this.atmosphereLightIntensity,n.atmosphereRayleighCoefficient=this.atmosphereRayleighCoefficient,n.atmosphereMieCoefficient=this.atmosphereMieCoefficient,n.atmosphereRayleighScaleHeight=this.atmosphereRayleighScaleHeight,n.atmosphereMieScaleHeight=this.atmosphereMieScaleHeight,n.atmosphereMieAnisotropy=this.atmosphereMieAnisotropy,n.shadows=this.shadows,n.hueShift=this.atmosphereHueShift,n.saturationShift=this.atmosphereSaturationShift,n.brightnessShift=this.atmosphereBrightnessShift,n.fillHighlightColor=this.fillHighlightColor,n.showSkirts=this.showSkirts,n.backFaceCulling=this.backFaceCulling,n.vertexShadowDarkness=this.vertexShadowDarkness,n.undergroundColor=this._undergroundColor,n.undergroundColorAlphaByDistance=this._undergroundColorAlphaByDistance,n.lambertDiffuseMultiplier=this.lambertDiffuseMultiplier,t.beginFrame(e))};ph.prototype.render=function(e){this.show&&(d(this._material)&&this._material.update(e.context),this._surface.render(e))};ph.prototype.endFrame=function(e){this.show&&e.passes.render&&this._surface.endFrame(e)};ph.prototype.isDestroyed=function(){return!1};ph.prototype.destroy=function(){return this._surfaceShaderSet=this._surfaceShaderSet&&this._surfaceShaderSet.destroy(),this._surface=this._surface&&this._surface.destroy(),this._oceanNormalMap=this._oceanNormalMap&&this._oceanNormalMap.destroy(),ue(this)};var Jv=ph;var TRi=T(S(),1);var sRi=T(S(),1);var YQ={position:0};function yk(e){e=g(e,g.EMPTY_OBJECT),this.center=h.clone(g(e.center,h.ZERO)),this._center=new h,this.radii=h.clone(e.radii),this._radii=new h,this._oneOverEllipsoidRadiiSquared=new h,this._boundingSphere=new ce,this.modelMatrix=A.clone(g(e.modelMatrix,A.IDENTITY)),this._modelMatrix=new A,this._computedModelMatrix=new A,this.show=g(e.show,!0),this.material=g(e.material,ki.fromType(ki.ColorType)),this._material=void 0,this._translucent=void 0,this.id=e.id,this._id=void 0,this.debugShowBoundingVolume=g(e.debugShowBoundingVolume,!1),this.onlySunLighting=g(e.onlySunLighting,!1),this._onlySunLighting=!1,this._depthTestEnabled=g(e.depthTestEnabled,!0),this._useLogDepth=!1,this._sp=void 0,this._rs=void 0,this._va=void 0,this._pickSP=void 0,this._pickId=void 0,this._colorCommand=new nt({owner:g(e._owner,this)}),this._pickCommand=new nt({owner:g(e._owner,this),pickOnly:!0});let t=this;this._uniforms={u_radii:function(){return t.radii},u_oneOverEllipsoidRadiiSquared:function(){return t._oneOverEllipsoidRadiiSquared}},this._pickUniforms={czm_pickColor:function(){return t._pickId.color}}}function trt(e){let t=e.cache.ellipsoidPrimitive_vertexArray;if(d(t))return t;let n=rl.createGeometry(rl.fromDimensions({dimensions:new h(2,2,2),vertexFormat:We.POSITION_ONLY}));return t=ti.fromGeometry({context:e,geometry:n,attributeLocations:YQ,bufferUsage:Ne.STATIC_DRAW,interleave:!0}),e.cache.ellipsoidPrimitive_vertexArray=t,t}yk.prototype.update=function(e){if(!this.show||e.mode!==ie.SCENE3D||!d(this.center)||!d(this.radii))return;let t=e.context,n=this.material.isTranslucent(),i=this._translucent!==n;(!d(this._rs)||i)&&(this._translucent=n,this._rs=De.fromCache({cull:{enabled:!0,face:bi.FRONT},depthTest:{enabled:this._depthTestEnabled},depthMask:!n&&t.fragmentDepth,blending:n?dn.ALPHA_BLEND:void 0})),d(this._va)||(this._va=trt(t));let o=!1,r=this.radii;if(!h.equals(this._radii,r)){h.clone(r,this._radii);let x=this._oneOverEllipsoidRadiiSquared;x.x=1/(r.x*r.x),x.y=1/(r.y*r.y),x.z=1/(r.z*r.z),o=!0}(!A.equals(this.modelMatrix,this._modelMatrix)||!h.equals(this.center,this._center))&&(A.clone(this.modelMatrix,this._modelMatrix),h.clone(this.center,this._center),A.multiplyByTranslation(this.modelMatrix,this.center,this._computedModelMatrix),o=!0),o&&(h.clone(h.ZERO,this._boundingSphere.center),this._boundingSphere.radius=h.maximumComponent(r),ce.transform(this._boundingSphere,this._computedModelMatrix,this._boundingSphere));let s=this._material!==this.material;this._material=this.material,this._material.update(t);let a=this.onlySunLighting!==this._onlySunLighting;this._onlySunLighting=this.onlySunLighting;let c=e.useLogDepth,l=this._useLogDepth!==c;this._useLogDepth=c;let u=this._colorCommand,m,p;(s||a||i||l)&&(m=new Ye({sources:[$1]}),p=new Ye({sources:[this.material.shaderSource,q1]}),this.onlySunLighting&&p.defines.push("ONLY_SUN_LIGHTING"),!n&&t.fragmentDepth&&p.defines.push("WRITE_DEPTH"),this._useLogDepth&&(m.defines.push("LOG_DEPTH"),p.defines.push("LOG_DEPTH")),this._sp=Qt.replaceCache({context:t,shaderProgram:this._sp,vertexShaderSource:m,fragmentShaderSource:p,attributeLocations:YQ}),u.vertexArray=this._va,u.renderState=this._rs,u.shaderProgram=this._sp,u.uniformMap=xt(this._uniforms,this.material._uniforms),u.executeInClosestFrustum=n);let y=e.commandList,f=e.passes;if(f.render&&(u.boundingVolume=this._boundingSphere,u.debugShowBoundingVolume=this.debugShowBoundingVolume,u.modelMatrix=this._computedModelMatrix,u.pass=n?Re.TRANSLUCENT:Re.OPAQUE,y.push(u)),f.pick){let x=this._pickCommand;(!d(this._pickId)||this._id!==this.id)&&(this._id=this.id,this._pickId=this._pickId&&this._pickId.destroy(),this._pickId=t.createPickId({primitive:this,id:this.id})),(s||a||!d(this._pickSP)||l)&&(m=new Ye({sources:[$1]}),p=new Ye({sources:[this.material.shaderSource,q1],pickColorQualifier:"uniform"}),this.onlySunLighting&&p.defines.push("ONLY_SUN_LIGHTING"),!n&&t.fragmentDepth&&p.defines.push("WRITE_DEPTH"),this._useLogDepth&&(m.defines.push("LOG_DEPTH"),p.defines.push("LOG_DEPTH")),this._pickSP=Qt.replaceCache({context:t,shaderProgram:this._pickSP,vertexShaderSource:m,fragmentShaderSource:p,attributeLocations:YQ}),x.vertexArray=this._va,x.renderState=this._rs,x.shaderProgram=this._pickSP,x.uniformMap=xt(xt(this._uniforms,this._pickUniforms),this.material._uniforms),x.executeInClosestFrustum=n),x.boundingVolume=this._boundingSphere,x.modelMatrix=this._computedModelMatrix,x.pass=n?Re.TRANSLUCENT:Re.OPAQUE,y.push(x)}};yk.prototype.isDestroyed=function(){return!1};yk.prototype.destroy=function(){return this._sp=this._sp&&this._sp.destroy(),this._pickSP=this._pickSP&&this._pickSP.destroy(),this._pickId=this._pickId&&this._pickId.destroy(),ue(this)};var Qv=yk;function jv(e){e=g(e,g.EMPTY_OBJECT);let t=e.textureUrl;d(t)||(t=$t("Assets/Textures/moonSmall.jpg")),this.show=g(e.show,!0),this.textureUrl=t,this._ellipsoid=g(e.ellipsoid,re.MOON),this.onlySunLighting=g(e.onlySunLighting,!0),this._ellipsoidPrimitive=new Qv({radii:this.ellipsoid.radii,material:ki.fromType(ki.ImageType),depthTestEnabled:!1,_owner:this}),this._ellipsoidPrimitive.material.translucent=!1,this._axes=new HP}Object.defineProperties(jv.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});var gk=new $,nrt=new $,irt=new h,xk=[];jv.prototype.update=function(e){if(!this.show)return;let t=this._ellipsoidPrimitive;t.material.uniforms.image=this.textureUrl,t.onlySunLighting=this.onlySunLighting;let n=e.time;d(vt.computeIcrfToFixedMatrix(n,gk))||vt.computeTemeToPseudoFixedMatrix(n,gk);let i=this._axes.evaluate(n,nrt);$.transpose(i,i),$.multiply(gk,i,i);let o=My.computeMoonPositionInEarthInertialFrame(n,irt);$.multiplyByVector(gk,o,o),A.fromRotationTranslation(i,o,t.modelMatrix);let r=e.commandList;return e.commandList=xk,xk.length=0,t.update(e),e.commandList=r,xk.length===1?xk[0]:void 0};jv.prototype.isDestroyed=function(){return!1};jv.prototype.destroy=function(){return this._ellipsoidPrimitive=this._ellipsoidPrimitive&&this._ellipsoidPrimitive.destroy(),ue(this)};var qv=jv;var q9i=T(S(),1);var PRi=T(S(),1);function $v(){this._colorTexture=void 0,this._drawCommand=void 0}Object.defineProperties($v.prototype,{colorTexture:{get:function(){return this._colorTexture}}});function ort(e,t,n){let i=t.createViewportQuadCommand(iv,{framebuffer:n,renderState:De.fromCache({viewport:new He(0,0,256,256)})});e._drawCommand=i}$v.prototype.update=function(e){if(!d(this._colorTexture)){let t=e.context,n=new Wt({context:t,width:256,height:256,pixelFormat:st.RGBA,pixelDatatype:Je.UNSIGNED_BYTE,sampler:un.NEAREST});this._colorTexture=n;let i=new Os({context:t,colorTextures:[n],destroyAttachments:!1});ort(this,t,i),this._drawCommand.execute(t),i.destroy(),this._drawCommand.shaderProgram=this._drawCommand.shaderProgram&&this._drawCommand.shaderProgram.destroy()}};$v.prototype.isDestroyed=function(){return!1};$v.prototype.destroy=function(){return this._colorTexture=this._colorTexture&&this._colorTexture.destroy(),ue(this)};var ew=$v;var CZi=T(S(),1);var ORi=T(S(),1);var q0e={};function rrt(e,t,n){let i,o,r;if(e instanceof Ri){let s=Math.tan(.5*e.fovy);return i=e.near,o=e.near*s,r=e.aspectRatio*o,Math.max(t*i/r,n*i/o)}else if(e instanceof Yc)return i=e.near,o=e.top,r=e.right,Math.max(t*i/r,n*i/o);return Math.max(t,n)}var srt=new h,J0e=new h;function $0e(e,t,n,i){if(d(i)&&n(.5)>i){let o=n(0),r=n(1),s=n(.5),a=s-o,c=s-r;return function(l){let u=n(l);if(l<=.5){let p=(u-o)/a;return W.lerp(e,-W.PI_OVER_TWO,p)}let m=(u-r)/c;return W.lerp(-W.PI_OVER_TWO,t,1-m)}}return function(o){return W.lerp(e,t,o)}}function KQ(e,t,n,i,o){let r=o,s=Math.max(n,i);if(!d(r)){let a=e.position,c=t,l=e.up,u=e.right,m=e.frustum,p=h.subtract(a,c,srt),y=h.magnitude(h.multiplyByScalar(l,h.dot(p,l),J0e)),f=h.magnitude(h.multiplyByScalar(u,h.dot(p,u),J0e));r=Math.min(rrt(m,y,f)*.2,1e9)}if(s<r){let l=-Math.pow((r-n)*1e6,.125),u=Math.pow((r-i)*1e6,1/8);return function(m){let p=m*(u-l)+l;return-Math.pow(p,8)/1e6+r}}return function(a){return W.lerp(n,i,a)}}function tw(e,t){return W.equalsEpsilon(e,W.TWO_PI,W.EPSILON11)&&(e=0),t>e+Math.PI?e+=W.TWO_PI:t<e-Math.PI&&(e-=W.TWO_PI),e}var ebe=new h;function art(e,t,n,i,o,r,s,a){let c=e.camera,l=h.clone(c.position,ebe),u=c.pitch,m=tw(c.heading,i),p=tw(c.roll,r),y=KQ(c,n,l.z,n.z,s),f=$0e(u,o,y,a);function x(_){let C=_.time/t;c.setView({orientation:{heading:W.lerp(m,i,C),pitch:f(C),roll:W.lerp(p,r,C)}}),D.lerp(l,n,C,c.position),c.position.z=y(C)}return x}function crt(e,t){e.longitude<t.longitude?e.longitude+=W.TWO_PI:t.longitude+=W.TWO_PI}function lrt(e,t){let n=e.longitude-t.longitude;n<-W.PI?e.longitude+=W.TWO_PI:n>W.PI&&(t.longitude+=W.TWO_PI)}var drt=new he,urt=new he;function mrt(e,t,n,i,o,r,s,a,c,l){let u=e.camera,p=e.mapProjection.ellipsoid,y=he.clone(u.positionCartographic,drt),f=u.pitch,x=tw(u.heading,i),_=tw(u.roll,r),C=p.cartesianToCartographic(n,urt);y.longitude=W.zeroToTwoPi(y.longitude),C.longitude=W.zeroToTwoPi(C.longitude);let V=!1;if(d(a)){let X=W.zeroToTwoPi(a),P=Math.min(y.longitude,C.longitude),v=Math.max(y.longitude,C.longitude),F=X>=P&&X<=v;if(d(c)){let M=Math.abs(y.longitude-C.longitude),b=W.TWO_PI-M;(F?M:b)<(F?b:M)*c&&!F&&(V=!0)}else F||(V=!0)}V?crt(y,C):lrt(y,C);let L=KQ(u,n,y.height,C.height,s),Z=$0e(f,o,L,l);function G(){let X=y.longitude,P=C.longitude,v=y.latitude,F=C.latitude;return function(b){let R=b.time/t,E=h.fromRadians(W.lerp(X,P,R),W.lerp(v,F,R),L(R),p);u.setView({destination:E,orientation:{heading:W.lerp(x,i,R),pitch:Z(R),roll:W.lerp(_,r,R)}})}}return G()}function hrt(e,t,n,i,o,r,s){let a=e.camera,c=h.clone(a.position,ebe),l=tw(a.heading,i),u=a.frustum.right-a.frustum.left,m=KQ(a,n,u,n.z,s);function p(y){let f=y.time/t;a.setView({orientation:{heading:W.lerp(l,i,f)}}),D.lerp(c,n,f,a.position);let x=m(f),_=a.frustum,C=_.top/_.right,V=(x-(_.right-_.left))*.5;_.right+=V,_.left-=V,_.top=C*_.right,_.bottom=-_.top}return p}var Q0e=new he,frt=new h;function OQ(e,t){return{startObject:{},stopObject:{},duration:0,complete:e,cancel:t}}function j0e(e,t){function n(){typeof t=="function"&&t(),e.enableInputs=!0}return n}q0e.createTween=function(e,t){t=g(t,g.EMPTY_OBJECT);let n=t.destination,i=e.mode;if(i===ie.MORPHING)return OQ();let o=g(t.convert,!0),r=e.mapProjection,s=r.ellipsoid,a=t.maximumHeight,c=t.flyOverLongitude,l=t.flyOverLongitudeWeight,u=t.pitchAdjustHeight,m=t.easingFunction;o&&i!==ie.SCENE3D&&(s.cartesianToCartographic(n,Q0e),n=r.project(Q0e,frt));let p=e.camera,y=t.endTransform;d(y)&&p._setTransform(y);let f=t.duration;d(f)||(f=Math.ceil(h.distance(p.position,n)/1e6)+2,f=Math.min(f,3));let x=g(t.heading,0),_=g(t.pitch,-W.PI_OVER_TWO),C=g(t.roll,0),V=e.screenSpaceCameraController;V.enableInputs=!1;let L=j0e(V,t.complete),Z=j0e(V,t.cancel),G=p.frustum,X=e.mode===ie.SCENE2D;if(X=X&&D.equalsEpsilon(p.position,n,W.EPSILON6),X=X&&W.equalsEpsilon(Math.max(G.right-G.left,G.top-G.bottom),n.z,W.EPSILON6),X=X||e.mode!==ie.SCENE2D&&h.equalsEpsilon(n,p.position,W.EPSILON10),X=X&&W.equalsEpsilon(W.negativePiToPi(x),W.negativePiToPi(p.heading),W.EPSILON10)&&W.equalsEpsilon(W.negativePiToPi(_),W.negativePiToPi(p.pitch),W.EPSILON10)&&W.equalsEpsilon(W.negativePiToPi(C),W.negativePiToPi(p.roll),W.EPSILON10),X)return OQ(L,Z);let P=new Array(4);if(P[ie.SCENE2D]=hrt,P[ie.SCENE3D]=mrt,P[ie.COLUMBUS_VIEW]=art,f<=0)return OQ(function(){P[i](e,1,n,x,_,C,a,c,l,u)({time:1}),typeof L=="function"&&L()},Z);let v=P[i](e,f,n,x,_,C,a,c,l,u);if(!d(m)){let F=p.positionCartographic.height,M=i===ie.SCENE3D?s.cartesianToCartographic(n).height:n.z;F>M&&F>11500?m=Xr.CUBIC_OUT:m=Xr.QUINTIC_IN_OUT}return{duration:f,easingFunction:m,startObject:{time:0},stopObject:{time:f},update:v,complete:L,cancel:Z}};var nw=q0e;var HRi=T(S(),1),prt={ROTATE:0,INFINITE_SCROLL:1},Fl=Object.freeze(prt);function jt(e){this._scene=e,this._transform=A.clone(A.IDENTITY),this._invTransform=A.clone(A.IDENTITY),this._actualTransform=A.clone(A.IDENTITY),this._actualInvTransform=A.clone(A.IDENTITY),this._transformChanged=!1,this.position=new h,this._position=new h,this._positionWC=new h,this._positionCartographic=new he,this._oldPositionWC=void 0,this.positionWCDeltaMagnitude=0,this.positionWCDeltaMagnitudeLastFrame=0,this.timeSinceMoved=0,this._lastMovedTimestamp=0,this.direction=new h,this._direction=new h,this._directionWC=new h,this.up=new h,this._up=new h,this._upWC=new h,this.right=new h,this._right=new h,this._rightWC=new h,this.frustum=new Ri,this.frustum.aspectRatio=e.drawingBufferWidth/e.drawingBufferHeight,this.frustum.fov=W.toRadians(60),this.defaultMoveAmount=1e5,this.defaultLookAmount=Math.PI/60,this.defaultRotateAmount=Math.PI/3600,this.defaultZoomAmount=1e5,this.constrainedAxis=void 0,this.maximumZoomFactor=1.5,this._moveStart=new ye,this._moveEnd=new ye,this._changed=new ye,this._changedPosition=void 0,this._changedDirection=void 0,this._changedFrustum=void 0,this._changedHeading=void 0,this.percentageChanged=.5,this._viewMatrix=new A,this._invViewMatrix=new A,cbe(this),this._mode=ie.SCENE3D,this._modeChanged=!0;let t=e.mapProjection;this._projection=t,this._maxCoord=t.project(new he(Math.PI,W.PI_OVER_TWO)),this._max2Dfrustum=void 0,_be(this,jt.DEFAULT_VIEW_RECTANGLE,this.position,!0);let n=h.magnitude(this.position);n+=n*jt.DEFAULT_VIEW_FACTOR,h.normalize(this.position,this.position),h.multiplyByScalar(this.position,n,this.position)}jt.TRANSFORM_2D=new A(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1);jt.TRANSFORM_2D_INVERSE=A.inverseTransformation(jt.TRANSFORM_2D,new A);jt.DEFAULT_VIEW_RECTANGLE=de.fromDegrees(-95,-20,-70,90);jt.DEFAULT_VIEW_FACTOR=.5;jt.DEFAULT_OFFSET=new Wu(0,-W.PI_OVER_FOUR,0);function cbe(e){A.computeView(e._position,e._direction,e._up,e._right,e._viewMatrix),A.multiply(e._viewMatrix,e._actualInvTransform,e._viewMatrix),A.inverseTransformation(e._viewMatrix,e._invViewMatrix)}function brt(e){if(!d(e._oldPositionWC))e._oldPositionWC=h.clone(e.positionWC,e._oldPositionWC);else{e.positionWCDeltaMagnitudeLastFrame=e.positionWCDeltaMagnitude;let t=h.subtract(e.positionWC,e._oldPositionWC,e._oldPositionWC);e.positionWCDeltaMagnitude=h.magnitude(t),e._oldPositionWC=h.clone(e.positionWC,e._oldPositionWC),e.positionWCDeltaMagnitude>0?(e.timeSinceMoved=0,e._lastMovedTimestamp=gi()):e.timeSinceMoved=Math.max(gi()-e._lastMovedTimestamp,0)/1e3}}jt.prototype.canPreloadFlight=function(){return d(this._currentFlight)&&this._mode!==ie.SCENE2D};jt.prototype._updateCameraChanged=function(){let e=this;if(brt(e),e._changed.numberOfListeners===0)return;let t=e.percentageChanged,n=e.heading;d(e._changedHeading)||(e._changedHeading=n);let i=Math.abs(e._changedHeading-n)%W.TWO_PI;i=i>W.PI?W.TWO_PI-i:i;let o=i/Math.PI;if(o>t&&(e._changed.raiseEvent(o),e._changedHeading=n),e._mode===ie.SCENE2D){if(!d(e._changedFrustum)){e._changedPosition=h.clone(e.position,e._changedPosition),e._changedFrustum=e.frustum.clone();return}let l=e.position,u=e._changedPosition,m=e.frustum,p=e._changedFrustum,y=l.x+m.left,f=l.x+m.right,x=u.x+p.left,_=u.x+p.right,C=l.y+m.bottom,V=l.y+m.top,L=u.y+p.bottom,Z=u.y+p.top,G=Math.max(y,x),X=Math.min(f,_),P=Math.max(C,L),v=Math.min(V,Z),F;if(G>=X||P>=V)F=1;else{let M=p;y<x&&f>_&&C<L&&V>Z&&(M=m),F=1-(X-G)*(v-P)/((M.right-M.left)*(M.top-M.bottom))}F>t&&(e._changed.raiseEvent(F),e._changedPosition=h.clone(e.position,e._changedPosition),e._changedFrustum=e.frustum.clone(e._changedFrustum));return}if(!d(e._changedDirection)){e._changedPosition=h.clone(e.positionWC,e._changedPosition),e._changedDirection=h.clone(e.directionWC,e._changedDirection);return}let r=W.acosClamped(h.dot(e.directionWC,e._changedDirection)),s;d(e.frustum.fovy)?s=r/(e.frustum.fovy*.5):s=r;let c=h.distance(e.positionWC,e._changedPosition)/e.positionCartographic.height;(s>t||c>t)&&(e._changed.raiseEvent(Math.max(s,c)),e._changedPosition=h.clone(e.positionWC,e._changedPosition),e._changedDirection=h.clone(e.directionWC,e._changedDirection))};function yrt(e){vt.basisTo2D(e._projection,e._transform,e._actualTransform)}var grt=new he,xrt=new h,_k=new h,_rt=new se,Trt=new se,Srt=new se,Crt=new se,Vrt=new se;function Lrt(e){let t=e._projection,n=t.ellipsoid,i=A.getColumn(e._transform,3,_rt),o=n.cartesianToCartographic(i,grt),r=t.project(o,xrt),s=Trt;s.x=r.z,s.y=r.x,s.z=r.y,s.w=1;let a=se.clone(se.UNIT_X,Vrt),c=se.add(A.getColumn(e._transform,0,_k),i,_k);n.cartesianToCartographic(c,o),t.project(o,r);let l=Srt;l.x=r.z,l.y=r.x,l.z=r.y,l.w=0,h.subtract(l,s,l),l.x=0;let u=Crt;if(h.magnitudeSquared(l)>W.EPSILON10)h.cross(a,l,u);else{let m=se.add(A.getColumn(e._transform,1,_k),i,_k);n.cartesianToCartographic(m,o),t.project(o,r),u.x=r.z,u.y=r.x,u.z=r.y,u.w=0,h.subtract(u,s,u),u.x=0,h.magnitudeSquared(u)<W.EPSILON10&&(se.clone(se.UNIT_Y,l),se.clone(se.UNIT_Z,u))}h.cross(u,a,l),h.normalize(l,l),h.cross(a,l,u),h.normalize(u,u),A.setColumn(e._actualTransform,0,l,e._actualTransform),A.setColumn(e._actualTransform,1,u,e._actualTransform),A.setColumn(e._actualTransform,2,a,e._actualTransform),A.setColumn(e._actualTransform,3,s,e._actualTransform)}var HQ=new h;function uc(e){let t=e._mode,n=!1,i=0;t===ie.SCENE2D&&(i=e.frustum.right-e.frustum.left,n=i!==e._positionCartographic.height);let o=e._position,r=!h.equals(o,e.position)||n;r&&(o=h.clone(e.position,e._position));let s=e._direction,a=!h.equals(s,e.direction);a&&(h.normalize(e.direction,e.direction),s=h.clone(e.direction,e._direction));let c=e._up,l=!h.equals(c,e.up);l&&(h.normalize(e.up,e.up),c=h.clone(e.up,e._up));let u=e._right,m=!h.equals(u,e.right);m&&(h.normalize(e.right,e.right),u=h.clone(e.right,e._right));let p=e._transformChanged||e._modeChanged;e._transformChanged=!1,p&&(A.inverseTransformation(e._transform,e._invTransform),e._mode===ie.COLUMBUS_VIEW||e._mode===ie.SCENE2D?A.equals(A.IDENTITY,e._transform)?A.clone(jt.TRANSFORM_2D,e._actualTransform):e._mode===ie.COLUMBUS_VIEW?yrt(e):Lrt(e):A.clone(e._transform,e._actualTransform),A.inverseTransformation(e._actualTransform,e._actualInvTransform),e._modeChanged=!1);let y=e._actualTransform;if(r||p)if(e._positionWC=A.multiplyByPoint(y,o,e._positionWC),t===ie.SCENE3D||t===ie.MORPHING)e._positionCartographic=e._projection.ellipsoid.cartesianToCartographic(e._positionWC,e._positionCartographic);else{let f=HQ;f.x=e._positionWC.y,f.y=e._positionWC.z,f.z=e._positionWC.x,t===ie.SCENE2D&&(f.z=i),e._projection.unproject(f,e._positionCartographic)}if(a||l||m){let f=h.dot(s,h.cross(c,u,HQ));if(Math.abs(1-f)>W.EPSILON2){let x=1/h.magnitudeSquared(c),_=h.dot(c,s)*x,C=h.multiplyByScalar(s,_,HQ);c=h.normalize(h.subtract(c,C,e._up),e._up),h.clone(c,e.up),u=h.cross(s,c,e._right),h.clone(u,e.right)}}(a||p)&&(e._directionWC=A.multiplyByPointAsVector(y,s,e._directionWC),h.normalize(e._directionWC,e._directionWC)),(l||p)&&(e._upWC=A.multiplyByPointAsVector(y,c,e._upWC),h.normalize(e._upWC,e._upWC)),(m||p)&&(e._rightWC=A.multiplyByPointAsVector(y,u,e._rightWC),h.normalize(e._rightWC,e._rightWC)),(r||a||l||m||p)&&cbe(e)}function lbe(e,t){let n;return W.equalsEpsilon(Math.abs(e.z),1,W.EPSILON3)?n=Math.atan2(t.y,t.x)-W.PI_OVER_TWO:n=Math.atan2(e.y,e.x)-W.PI_OVER_TWO,W.TWO_PI-W.zeroToTwoPi(n)}function dbe(e){return W.PI_OVER_TWO-W.acosClamped(e.z)}function ube(e,t,n){let i=0;return W.equalsEpsilon(Math.abs(e.z),1,W.EPSILON3)||(i=Math.atan2(-n.z,t.z),i=W.zeroToTwoPi(i+W.TWO_PI)),i}var Ck=new A,Vk=new A;Object.defineProperties(jt.prototype,{transform:{get:function(){return this._transform}},inverseTransform:{get:function(){return uc(this),this._invTransform}},viewMatrix:{get:function(){return uc(this),this._viewMatrix}},inverseViewMatrix:{get:function(){return uc(this),this._invViewMatrix}},positionCartographic:{get:function(){return uc(this),this._positionCartographic}},positionWC:{get:function(){return uc(this),this._positionWC}},directionWC:{get:function(){return uc(this),this._directionWC}},upWC:{get:function(){return uc(this),this._upWC}},rightWC:{get:function(){return uc(this),this._rightWC}},heading:{get:function(){if(this._mode!==ie.MORPHING){let e=this._projection.ellipsoid,t=A.clone(this._transform,Ck),n=vt.eastNorthUpToFixedFrame(this.positionWC,e,Vk);this._setTransform(n);let i=lbe(this.direction,this.up);return this._setTransform(t),i}}},pitch:{get:function(){if(this._mode!==ie.MORPHING){let e=this._projection.ellipsoid,t=A.clone(this._transform,Ck),n=vt.eastNorthUpToFixedFrame(this.positionWC,e,Vk);this._setTransform(n);let i=dbe(this.direction);return this._setTransform(t),i}}},roll:{get:function(){if(this._mode!==ie.MORPHING){let e=this._projection.ellipsoid,t=A.clone(this._transform,Ck),n=vt.eastNorthUpToFixedFrame(this.positionWC,e,Vk);this._setTransform(n);let i=ube(this.direction,this.up,this.right);return this._setTransform(t),i}}},moveStart:{get:function(){return this._moveStart}},moveEnd:{get:function(){return this._moveEnd}},changed:{get:function(){return this._changed}}});jt.prototype.update=function(e){let t=!1;if(e!==this._mode&&(this._mode=e,this._modeChanged=e!==ie.MORPHING,t=this._mode===ie.SCENE2D),t){let n=this._max2Dfrustum=this.frustum.clone(),i=2,o=n.top/n.right;n.right=this._maxCoord.x*i,n.left=-n.right,n.top=o*n.right,n.bottom=-n.top}this._mode===ie.SCENE2D&&pbe(this,this.position)};var Rrt=new h,Zrt=new h,Grt=new h;jt.prototype._setTransform=function(e){let t=h.clone(this.positionWC,Rrt),n=h.clone(this.upWC,Zrt),i=h.clone(this.directionWC,Grt);A.clone(e,this._transform),this._transformChanged=!0,uc(this);let o=this._actualInvTransform;A.multiplyByPoint(o,t,this.position),A.multiplyByPointAsVector(o,i,this.direction),A.multiplyByPointAsVector(o,n,this.up),h.cross(this.direction,this.up,this.right),uc(this)};var Ert=new D,Xrt=new Sn,Irt=new h,Wrt=new h;function mbe(e){if(!A.equals(A.IDENTITY,e.transform))return h.magnitude(e.position);let t=e._scene,n=t.globe,i=Ert;i.x=t.drawingBufferWidth/2,i.y=t.drawingBufferHeight/2;let o;if(d(n)){let a=e.getPickRay(i,Xrt);o=n.pickWorldCoordinates(a,t,!0,Irt)}let r;t.pickPositionSupported&&(r=t.pickPositionWorldCoordinates(i,Wrt));let s;if(d(o)||d(r)){let a=d(r)?h.distance(r,e.positionWC):Number.POSITIVE_INFINITY,c=d(o)?h.distance(o,e.positionWC):Number.POSITIVE_INFINITY;s=Math.min(a,c)}else s=Math.max(e.positionCartographic.height,0);return s}jt.prototype._adjustOrthographicFrustum=function(e){this.frustum instanceof en&&(!e&&this._positionCartographic.height<15e4||(this.frustum.width=mbe(this)))};var Lk=new h,qQ=new A,Prt=new A,$Q=new Ae,e4=new $,hbe=new he;function vrt(e,t,n){let i=A.clone(e.transform,qQ),o=vt.eastNorthUpToFixedFrame(t,e._projection.ellipsoid,Prt);e._setTransform(o),h.clone(h.ZERO,e.position),n.heading=n.heading-W.PI_OVER_TWO;let r=Ae.fromHeadingPitchRoll(n,$Q),s=$.fromQuaternion(r,e4);$.getColumn(s,0,e.direction),$.getColumn(s,2,e.up),h.cross(e.direction,e.up,e.right),e._setTransform(i),e._adjustOrthographicFrustum(!0)}function wrt(e,t,n,i){let o=A.clone(e.transform,qQ);if(e._setTransform(A.IDENTITY),!h.equals(t,e.positionWC)){if(i){let a=e._projection,c=a.ellipsoid.cartesianToCartographic(t,hbe);t=a.project(c,Lk)}h.clone(t,e.position)}n.heading=n.heading-W.PI_OVER_TWO;let r=Ae.fromHeadingPitchRoll(n,$Q),s=$.fromQuaternion(r,e4);$.getColumn(s,0,e.direction),$.getColumn(s,2,e.up),h.cross(e.direction,e.up,e.right),e._setTransform(o),e._adjustOrthographicFrustum(!0)}function Frt(e,t,n,i){let o=A.clone(e.transform,qQ);if(e._setTransform(A.IDENTITY),!h.equals(t,e.positionWC)){if(i){let c=e._projection,l=c.ellipsoid.cartesianToCartographic(t,hbe);t=c.project(l,Lk)}D.clone(t,e.position);let r=-t.z*.5,s=-r,a=e.frustum;if(s>r){let c=a.top/a.right;a.right=s,a.left=r,a.top=a.right*c,a.bottom=-a.top}}if(e._scene.mapMode2D===Fl.ROTATE){n.heading=n.heading-W.PI_OVER_TWO,n.pitch=-W.PI_OVER_TWO,n.roll=0;let r=Ae.fromHeadingPitchRoll(n,$Q),s=$.fromQuaternion(r,e4);$.getColumn(s,2,e.up),h.cross(e.direction,e.up,e.right)}e._setTransform(o)}var Art=new h,Mrt=new h,Nrt=new h;function fbe(e,t,n,i){let o=h.clone(n.direction,Art),r=h.clone(n.up,Mrt);if(e._scene.mode===ie.SCENE3D){let a=e._projection.ellipsoid,c=vt.eastNorthUpToFixedFrame(t,a,Ck),l=A.inverseTransformation(c,Vk);A.multiplyByPointAsVector(l,o,o),A.multiplyByPointAsVector(l,r,r)}let s=h.cross(o,r,Nrt);return i.heading=lbe(o,r),i.pitch=dbe(o),i.roll=ube(o,r,s),i}var jQ={destination:void 0,orientation:{direction:void 0,up:void 0,heading:void 0,pitch:void 0,roll:void 0},convert:void 0,endTransform:void 0},yV=new Aa;jt.prototype.setView=function(e){e=g(e,g.EMPTY_OBJECT);let t=g(e.orientation,g.EMPTY_OBJECT),n=this._mode;if(n===ie.MORPHING)return;d(e.endTransform)&&this._setTransform(e.endTransform);let i=g(e.convert,!0),o=g(e.destination,h.clone(this.positionWC,Lk));d(o)&&d(o.west)&&(o=this.getRectangleCameraCoordinates(o,Lk),i=!1),d(t.direction)&&(t=fbe(this,o,t,jQ.orientation)),yV.heading=g(t.heading,0),yV.pitch=g(t.pitch,-W.PI_OVER_TWO),yV.roll=g(t.roll,0),n===ie.SCENE3D?vrt(this,o,yV):n===ie.SCENE2D?Frt(this,o,yV,i):wrt(this,o,yV,i)};var Urt=new h;jt.prototype.flyHome=function(e){let t=this._mode;if(t===ie.MORPHING&&this._scene.completeMorph(),t===ie.SCENE2D)this.flyTo({destination:jt.DEFAULT_VIEW_RECTANGLE,duration:e,endTransform:A.IDENTITY});else if(t===ie.SCENE3D){let n=this.getRectangleCameraCoordinates(jt.DEFAULT_VIEW_RECTANGLE),i=h.magnitude(n);i+=i*jt.DEFAULT_VIEW_FACTOR,h.normalize(n,n),h.multiplyByScalar(n,i,n),this.flyTo({destination:n,duration:e,endTransform:A.IDENTITY})}else if(t===ie.COLUMBUS_VIEW){let n=this._projection.ellipsoid.maximumRadius,i=new h(0,-1,1);i=h.multiplyByScalar(h.normalize(i,i),5*n,i),this.flyTo({destination:i,duration:e,orientation:{heading:0,pitch:-Math.acos(h.normalize(i,Urt).z),roll:0},endTransform:A.IDENTITY,convert:!1})}};jt.prototype.worldToCameraCoordinates=function(e,t){return d(t)||(t=new se),uc(this),A.multiplyByVector(this._actualInvTransform,e,t)};jt.prototype.worldToCameraCoordinatesPoint=function(e,t){return d(t)||(t=new h),uc(this),A.multiplyByPoint(this._actualInvTransform,e,t)};jt.prototype.worldToCameraCoordinatesVector=function(e,t){return d(t)||(t=new h),uc(this),A.multiplyByPointAsVector(this._actualInvTransform,e,t)};jt.prototype.cameraToWorldCoordinates=function(e,t){return d(t)||(t=new se),uc(this),A.multiplyByVector(this._actualTransform,e,t)};jt.prototype.cameraToWorldCoordinatesPoint=function(e,t){return d(t)||(t=new h),uc(this),A.multiplyByPoint(this._actualTransform,e,t)};jt.prototype.cameraToWorldCoordinatesVector=function(e,t){return d(t)||(t=new h),uc(this),A.multiplyByPointAsVector(this._actualTransform,e,t)};function pbe(e,t){let n=e._scene.mapMode2D===Fl.ROTATE,i=e._maxCoord.x,o=e._maxCoord.y,r,s;n?(s=i,r=-s):(s=t.x-i*2,r=t.x+i*2),t.x>i&&(t.x=s),t.x<-i&&(t.x=r),t.y>o&&(t.y=o),t.y<-o&&(t.y=-o)}var tbe=new h;jt.prototype.move=function(e,t){let n=this.position;h.multiplyByScalar(e,t,tbe),h.add(n,tbe,n),this._mode===ie.SCENE2D&&pbe(this,n),this._adjustOrthographicFrustum(!0)};jt.prototype.moveForward=function(e){e=g(e,this.defaultMoveAmount),this._mode===ie.SCENE2D?Rk(this,e):this.move(this.direction,e)};jt.prototype.moveBackward=function(e){e=g(e,this.defaultMoveAmount),this._mode===ie.SCENE2D?Rk(this,-e):this.move(this.direction,-e)};jt.prototype.moveUp=function(e){e=g(e,this.defaultMoveAmount),this.move(this.up,e)};jt.prototype.moveDown=function(e){e=g(e,this.defaultMoveAmount),this.move(this.up,-e)};jt.prototype.moveRight=function(e){e=g(e,this.defaultMoveAmount),this.move(this.right,e)};jt.prototype.moveLeft=function(e){e=g(e,this.defaultMoveAmount),this.move(this.right,-e)};jt.prototype.lookLeft=function(e){e=g(e,this.defaultLookAmount),this._mode!==ie.SCENE2D&&this.look(this.up,-e)};jt.prototype.lookRight=function(e){e=g(e,this.defaultLookAmount),this._mode!==ie.SCENE2D&&this.look(this.up,e)};jt.prototype.lookUp=function(e){e=g(e,this.defaultLookAmount),this._mode!==ie.SCENE2D&&this.look(this.right,-e)};jt.prototype.lookDown=function(e){e=g(e,this.defaultLookAmount),this._mode!==ie.SCENE2D&&this.look(this.right,e)};var krt=new Ae,Drt=new $;jt.prototype.look=function(e,t){let n=g(t,this.defaultLookAmount),i=Ae.fromAxisAngle(e,-n,krt),o=$.fromQuaternion(i,Drt),r=this.direction,s=this.up,a=this.right;$.multiplyByVector(o,r,r),$.multiplyByVector(o,s,s),$.multiplyByVector(o,a,a)};jt.prototype.twistLeft=function(e){e=g(e,this.defaultLookAmount),this.look(this.direction,e)};jt.prototype.twistRight=function(e){e=g(e,this.defaultLookAmount),this.look(this.direction,-e)};var Brt=new Ae,Yrt=new $;jt.prototype.rotate=function(e,t){let n=g(t,this.defaultRotateAmount),i=Ae.fromAxisAngle(e,-n,Brt),o=$.fromQuaternion(i,Yrt);$.multiplyByVector(o,this.position,this.position),$.multiplyByVector(o,this.direction,this.direction),$.multiplyByVector(o,this.up,this.up),h.cross(this.direction,this.up,this.right),h.cross(this.right,this.direction,this.up),this._adjustOrthographicFrustum(!1)};jt.prototype.rotateDown=function(e){e=g(e,this.defaultRotateAmount),bbe(this,e)};jt.prototype.rotateUp=function(e){e=g(e,this.defaultRotateAmount),bbe(this,-e)};var Ort=new h,Krt=new h,Hrt=new h,nbe=new h;function bbe(e,t){let n=e.position;if(d(e.constrainedAxis)&&!h.equalsEpsilon(e.position,h.ZERO,W.EPSILON2)){let i=h.normalize(n,Ort),o=h.equalsEpsilon(i,e.constrainedAxis,W.EPSILON2),r=h.equalsEpsilon(i,h.negate(e.constrainedAxis,nbe),W.EPSILON2);if(!o&&!r){let s=h.normalize(e.constrainedAxis,Krt),a=h.dot(i,s),c=W.acosClamped(a);t>0&&t>c&&(t=c-W.EPSILON4),a=h.dot(i,h.negate(s,nbe)),c=W.acosClamped(a),t<0&&-t>c&&(t=-c+W.EPSILON4);let l=h.cross(s,i,Hrt);e.rotate(l,t)}else(o&&t<0||r&&t>0)&&e.rotate(e.right,t)}else e.rotate(e.right,t)}jt.prototype.rotateRight=function(e){e=g(e,this.defaultRotateAmount),ybe(this,-e)};jt.prototype.rotateLeft=function(e){e=g(e,this.defaultRotateAmount),ybe(this,e)};function ybe(e,t){d(e.constrainedAxis)?e.rotate(e.constrainedAxis,t):e.rotate(e.up,t)}function Rk(e,t){let n=e.frustum,i;if(t=t*.5,Math.abs(n.top)+Math.abs(n.bottom)>Math.abs(n.left)+Math.abs(n.right)){let o=n.top-t,r=n.bottom+t,s=e._maxCoord.y;e._scene.mapMode2D===Fl.ROTATE&&(s*=e.maximumZoomFactor),r>s&&(r=s,o=-s),o<=r&&(o=1,r=-1),i=n.right/n.top,n.top=o,n.bottom=r,n.right=n.top*i,n.left=-n.right}else{let o=n.right-t,r=n.left+t,s=e._maxCoord.x;e._scene.mapMode2D===Fl.ROTATE&&(s*=e.maximumZoomFactor),o>s&&(o=s,r=-s),o<=r&&(o=1,r=-1),i=n.top/n.right,n.right=o,n.left=r,n.top=n.right*i,n.bottom=-n.top}}function gbe(e,t){e.move(e.direction,t)}jt.prototype.zoomIn=function(e){e=g(e,this.defaultZoomAmount),this._mode===ie.SCENE2D?Rk(this,e):gbe(this,e)};jt.prototype.zoomOut=function(e){e=g(e,this.defaultZoomAmount),this._mode===ie.SCENE2D?Rk(this,-e):gbe(this,-e)};jt.prototype.getMagnitude=function(){if(this._mode===ie.SCENE3D)return h.magnitude(this.position);if(this._mode===ie.COLUMBUS_VIEW)return Math.abs(this.position.z);if(this._mode===ie.SCENE2D)return Math.max(this.frustum.right-this.frustum.left,this.frustum.top-this.frustum.bottom)};var zrt=new A;jt.prototype.lookAt=function(e,t){let n=vt.eastNorthUpToFixedFrame(e,re.WGS84,zrt);this.lookAtTransform(n,t)};var Jrt=new h,Qrt=new Ae,jrt=new Ae,qrt=new $;function xbe(e,t,n){t=W.clamp(t,-W.PI_OVER_TWO,W.PI_OVER_TWO),e=W.zeroToTwoPi(e)-W.PI_OVER_TWO;let i=Ae.fromAxisAngle(h.UNIT_Y,-t,Qrt),o=Ae.fromAxisAngle(h.UNIT_Z,-e,jrt),r=Ae.multiply(o,i,o),s=$.fromQuaternion(r,qrt),a=h.clone(h.UNIT_X,Jrt);return $.multiplyByVector(s,a,a),h.negate(a,a),h.multiplyByScalar(a,n,a),a}jt.prototype.lookAtTransform=function(e,t){if(this._setTransform(e),!d(t))return;let n;if(d(t.heading)?n=xbe(t.heading,t.pitch,t.range):n=t,this._mode===ie.SCENE2D){D.clone(D.ZERO,this.position),h.negate(n,this.up),this.up.z=0,h.magnitudeSquared(this.up)<W.EPSILON10&&h.clone(h.UNIT_Y,this.up),h.normalize(this.up,this.up),this._setTransform(A.IDENTITY),h.negate(h.UNIT_Z,this.direction),h.cross(this.direction,this.up,this.right),h.normalize(this.right,this.right);let i=this.frustum,o=i.top/i.right;i.right=h.magnitude(n)*.5,i.left=-i.right,i.top=o*i.right,i.bottom=-i.top,this._setTransform(e);return}h.clone(n,this.position),h.negate(this.position,this.direction),h.normalize(this.direction,this.direction),h.cross(this.direction,h.UNIT_Z,this.right),h.magnitudeSquared(this.right)<W.EPSILON10&&h.clone(h.UNIT_X,this.right),h.normalize(this.right,this.right),h.cross(this.right,this.direction,this.up),h.normalize(this.up,this.up),this._adjustOrthographicFrustum(!0)};var iw=new he,$rt=new he,est=new h,tst=new h,nst=new h,ist=new h,ost=new h,rst=new h,sst=new h,zQ=new h,ast={direction:new h,right:new h,up:new h},ibe;function dc(e,t,n,i){return Math.abs(h.dot(t,n))/i-h.dot(e,n)}function _be(e,t,n,i){let o=e._projection.ellipsoid,r=i?e:ast,s=t.north,a=t.south,c=t.east,l=t.west;l>c&&(c+=W.TWO_PI);let u=(l+c)*.5,m;if(a<-W.PI_OVER_TWO+W.RADIANS_PER_DEGREE&&s>W.PI_OVER_TWO-W.RADIANS_PER_DEGREE)m=0;else{let F=iw;F.longitude=u,F.latitude=s,F.height=0;let M=$rt;M.longitude=u,M.latitude=a,M.height=0;let b=ibe;(!d(b)||b.ellipsoid!==o)&&(ibe=b=new jd(void 0,void 0,o)),b.setEndPoints(F,M),m=b.interpolateUsingFraction(.5,iw).latitude}let p=iw;p.longitude=u,p.latitude=m,p.height=0;let y=o.cartographicToCartesian(p,sst),f=iw;f.longitude=c,f.latitude=s;let x=o.cartographicToCartesian(f,est);f.longitude=l;let _=o.cartographicToCartesian(f,nst);f.longitude=u;let C=o.cartographicToCartesian(f,ost);f.latitude=a;let V=o.cartographicToCartesian(f,rst);f.longitude=c;let L=o.cartographicToCartesian(f,ist);f.longitude=l;let Z=o.cartographicToCartesian(f,tst);h.subtract(_,y,_),h.subtract(L,y,L),h.subtract(x,y,x),h.subtract(Z,y,Z),h.subtract(C,y,C),h.subtract(V,y,V);let G=o.geodeticSurfaceNormal(y,r.direction);h.negate(G,G);let X=h.cross(G,h.UNIT_Z,r.right);h.normalize(X,X);let P=h.cross(X,G,r.up),v;if(e.frustum instanceof en){let F=Math.max(h.distance(x,_),h.distance(L,Z)),M=Math.max(h.distance(x,L),h.distance(_,Z)),b,R,E=e.frustum._offCenterFrustum,I=E.right/E.top,w=M*I;F>w?(b=F,R=b/I):(R=M,b=w),v=Math.max(b,R)}else{let F=Math.tan(e.frustum.fovy*.5),M=e.frustum.aspectRatio*F;if(v=Math.max(dc(G,P,_,F),dc(G,P,L,F),dc(G,P,x,F),dc(G,P,Z,F),dc(G,P,C,F),dc(G,P,V,F),dc(G,X,_,M),dc(G,X,L,M),dc(G,X,x,M),dc(G,X,Z,M),dc(G,X,C,M),dc(G,X,V,M)),a<0&&s>0){let b=iw;b.longitude=l,b.latitude=0,b.height=0;let R=o.cartographicToCartesian(b,zQ);h.subtract(R,y,R),v=Math.max(v,dc(G,P,R,F),dc(G,X,R,M)),b.longitude=c,R=o.cartographicToCartesian(b,zQ),h.subtract(R,y,R),v=Math.max(v,dc(G,P,R,F),dc(G,X,R,M))}}return h.add(y,h.multiplyByScalar(G,-v,zQ),n)}var cst=new he,lst=new h,dst=new h;function ust(e,t,n){let i=e._projection;t.west>t.east&&(t=de.MAX_VALUE);let o=e._actualTransform,r=e._actualInvTransform,s=cst;s.longitude=t.east,s.latitude=t.north;let a=i.project(s,lst);A.multiplyByPoint(o,a,a),A.multiplyByPoint(r,a,a),s.longitude=t.west,s.latitude=t.south;let c=i.project(s,dst);if(A.multiplyByPoint(o,c,c),A.multiplyByPoint(r,c,c),n.x=(a.x-c.x)*.5+c.x,n.y=(a.y-c.y)*.5+c.y,d(e.frustum.fovy)){let l=Math.tan(e.frustum.fovy*.5),u=e.frustum.aspectRatio*l;n.z=Math.max((a.x-c.x)/u,(a.y-c.y)/l)*.5}else{let l=a.x-c.x,u=a.y-c.y;n.z=Math.max(l,u)}return n}var mst=new he,hst=new h,fst=new h;function pst(e,t,n){let i=e._projection,o=t.east;t.west>t.east&&(e._scene.mapMode2D===Fl.INFINITE_SCROLL?o+=W.TWO_PI:(t=de.MAX_VALUE,o=t.east));let r=mst;r.longitude=o,r.latitude=t.north;let s=i.project(r,hst);r.longitude=t.west,r.latitude=t.south;let a=i.project(r,fst),c=Math.abs(s.x-a.x)*.5,l=Math.abs(s.y-a.y)*.5,u,m,p=e.frustum.right/e.frustum.top,y=l*p;return c>y?(u=c,m=u/p):(m=l,u=y),l=Math.max(2*u,2*m),n.x=(s.x-a.x)*.5+a.x,n.y=(s.y-a.y)*.5+a.y,r=i.unproject(n,r),r.height=l,n=i.project(r,n),n}jt.prototype.getRectangleCameraCoordinates=function(e,t){let n=this._mode;if(d(t)||(t=new h),n===ie.SCENE3D)return _be(this,e,t);if(n===ie.COLUMBUS_VIEW)return ust(this,e,t);if(n===ie.SCENE2D)return pst(this,e,t)};var bst=new Sn;function yst(e,t,n,i){n=g(n,re.WGS84);let o=e.getPickRay(t,bst),r=Si.rayEllipsoid(o,n);if(!r)return;let s=r.start>0?r.start:r.stop;return Sn.getPoint(o,s,i)}var gst=new Sn;function xst(e,t,n,i){let r=e.getPickRay(t,gst).origin;r=h.fromElements(r.y,r.z,0,r);let s=n.unproject(r);if(!(s.latitude<-W.PI_OVER_TWO||s.latitude>W.PI_OVER_TWO))return n.ellipsoid.cartographicToCartesian(s,i)}var _st=new Sn;function Tst(e,t,n,i){let o=e.getPickRay(t,_st),r=-o.origin.x/o.direction.x;Sn.getPoint(o,r,i);let s=n.unproject(new h(i.y,i.z,0));if(!(s.latitude<-W.PI_OVER_TWO||s.latitude>W.PI_OVER_TWO||s.longitude<-Math.PI||s.longitude>Math.PI))return n.ellipsoid.cartographicToCartesian(s,i)}jt.prototype.pickEllipsoid=function(e,t,n){let i=this._scene.canvas;if(!(i.clientWidth===0||i.clientHeight===0)){if(d(n)||(n=new h),t=g(t,re.WGS84),this._mode===ie.SCENE3D)n=yst(this,e,t,n);else if(this._mode===ie.SCENE2D)n=xst(this,e,this._projection,n);else if(this._mode===ie.COLUMBUS_VIEW)n=Tst(this,e,this._projection,n);else return;return n}};var Sst=new h,Cst=new h,Vst=new h;function Lst(e,t,n){let i=e._scene.canvas,o=i.clientWidth,r=i.clientHeight,s=Math.tan(e.frustum.fovy*.5),a=e.frustum.aspectRatio*s,c=e.frustum.near,l=2/o*t.x-1,u=2/r*(r-t.y)-1,m=e.positionWC;h.clone(m,n.origin);let p=h.multiplyByScalar(e.directionWC,c,Sst);h.add(m,p,p);let y=h.multiplyByScalar(e.rightWC,l*c*a,Cst),f=h.multiplyByScalar(e.upWC,u*c*s,Vst),x=h.add(p,y,n.direction);return h.add(x,f,x),h.subtract(x,m,x),h.normalize(x,x),n}var Tk=new h;function Rst(e,t,n){let i=e._scene.canvas,o=i.clientWidth,r=i.clientHeight,s=e.frustum,a=s.offCenterFrustum;d(a)&&(s=a);let c=2/o*t.x-1;c*=(s.right-s.left)*.5;let l=2/r*(r-t.y)-1;l*=(s.top-s.bottom)*.5;let u=n.origin;return h.clone(e.position,u),h.multiplyByScalar(e.right,c,Tk),h.add(Tk,u,u),h.multiplyByScalar(e.up,l,Tk),h.add(Tk,u,u),h.clone(e.directionWC,n.direction),(e._mode===ie.COLUMBUS_VIEW||e._mode===ie.SCENE2D)&&h.fromElements(n.origin.z,n.origin.x,n.origin.y,n.origin),n}jt.prototype.getPickRay=function(e,t){d(t)||(t=new Sn);let n=this._scene.canvas;if(n.clientWidth<=0||n.clientHeight<=0)return;let i=this.frustum;return d(i.aspectRatio)&&d(i.fov)&&d(i.near)?Lst(this,e,t):Rst(this,e,t)};var Zst=new h,Gst=new h;jt.prototype.distanceToBoundingSphere=function(e){let t=h.subtract(this.positionWC,e.center,Zst),n=h.multiplyByScalar(this.directionWC,h.dot(t,this.directionWC),Gst);return Math.max(0,h.magnitude(n)-e.radius)};var Est=new D;jt.prototype.getPixelSize=function(e,t,n){let i=this.distanceToBoundingSphere(e),o=this.frustum.getPixelDimensions(t,n,i,this._scene.pixelRatio,Est);return Math.max(o.x,o.y)};function Xst(e,t,n,i,o,r){let s=h.clone(t);n.y>i?s.y-=n.y-i:n.y<-i&&(s.y+=-i-n.y),n.z>o?s.z-=n.z-o:n.z<-o&&(s.z+=-o-n.z);function a(c){let l=h.lerp(t,s,c.time,new h);e.worldToCameraCoordinatesPoint(l,e.position)}return{easingFunction:Xr.EXPONENTIAL_OUT,startObject:{time:0},stopObject:{time:1},duration:r,update:a}}var Ist=new h,obe=new h,Wst=new h,Pst=new h;function vst(e,t){let n=e.position,i=e.direction,o=e.worldToCameraCoordinatesVector(h.UNIT_X,Ist),r=-h.dot(o,n)/h.dot(o,i),s=h.add(n,h.multiplyByScalar(i,r,obe),obe);e.cameraToWorldCoordinatesPoint(s,s),n=e.cameraToWorldCoordinatesPoint(e.position,Wst);let a=Math.tan(e.frustum.fovy*.5),c=e.frustum.aspectRatio*a,l=h.magnitude(h.subtract(n,s,Pst)),u=c*l,m=a*l,p=e._maxCoord.x,y=e._maxCoord.y,f=Math.max(u-p,p),x=Math.max(m-y,y);if(n.z<-f||n.z>f||n.y<-x||n.y>x){let _=s.y<-f||s.y>f,C=s.z<-x||s.z>x;if(_||C)return Xst(e,n,s,f,x,t)}}jt.prototype.createCorrectPositionTween=function(e){if(this._mode===ie.COLUMBUS_VIEW)return vst(this,e)};var wst=new h,Fs={destination:void 0,heading:void 0,pitch:void 0,roll:void 0,duration:void 0,complete:void 0,cancel:void 0,endTransform:void 0,maximumHeight:void 0,easingFunction:void 0};jt.prototype.cancelFlight=function(){d(this._currentFlight)&&(this._currentFlight.cancelTween(),this._currentFlight=void 0)};jt.prototype.completeFlight=function(){if(d(this._currentFlight)){this._currentFlight.cancelTween();let e={destination:void 0,orientation:{heading:void 0,pitch:void 0,roll:void 0}};e.destination=Fs.destination,e.orientation.heading=Fs.heading,e.orientation.pitch=Fs.pitch,e.orientation.roll=Fs.roll,this.setView(e),d(this._currentFlight.complete)&&this._currentFlight.complete(),this._currentFlight=void 0}};jt.prototype.flyTo=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.destination;if(this._mode===ie.MORPHING)return;this.cancelFlight();let i=t instanceof de;i&&(t=this.getRectangleCameraCoordinates(t,wst));let o=g(e.orientation,g.EMPTY_OBJECT);if(d(o.direction)&&(o=fbe(this,t,o,jQ.orientation)),d(e.duration)&&e.duration<=0){let u=jQ;u.destination=e.destination,u.orientation.heading=o.heading,u.orientation.pitch=o.pitch,u.orientation.roll=o.roll,u.convert=e.convert,u.endTransform=e.endTransform,this.setView(u),typeof e.complete=="function"&&e.complete();return}let r=this,s;Fs.destination=t,Fs.heading=o.heading,Fs.pitch=o.pitch,Fs.roll=o.roll,Fs.duration=e.duration,Fs.complete=function(){s===r._currentFlight&&(r._currentFlight=void 0),d(e.complete)&&e.complete()},Fs.cancel=e.cancel,Fs.endTransform=e.endTransform,Fs.convert=i?!1:e.convert,Fs.maximumHeight=e.maximumHeight,Fs.pitchAdjustHeight=e.pitchAdjustHeight,Fs.flyOverLongitude=e.flyOverLongitude,Fs.flyOverLongitudeWeight=e.flyOverLongitudeWeight,Fs.easingFunction=e.easingFunction;let a=this._scene,c=nw.createTween(a,Fs);if(c.duration===0){typeof c.complete=="function"&&c.complete();return}s=a.tweens.add(c),this._currentFlight=s;let l=this._scene.preloadFlightCamera;this._mode!==ie.SCENE2D&&(d(l)||(l=jt.clone(this)),l.setView({destination:t,orientation:o}),this._scene.preloadFlightCullingVolume=l.frustum.computeCullingVolume(l.positionWC,l.directionWC,l.upWC))};function Fst(e,t){let n=e.frustum,i=Math.tan(n.fovy*.5),o=n.aspectRatio*i;return Math.max(t/o,t/i)}function Ast(e,t){let n=e.frustum,i=n.offCenterFrustum;d(i)&&(n=i);let o,r,s=n.right/n.top,a=t*s;return t>a?(o=t,r=o/s):(r=t,o=a),Math.max(o,r)*1.5}var Mst=100;function Tbe(e,t,n){n=Wu.clone(d(n)?n:jt.DEFAULT_OFFSET);let i=e._scene.screenSpaceCameraController.minimumZoomDistance,o=e._scene.screenSpaceCameraController.maximumZoomDistance,r=n.range;if(!d(r)||r===0){let s=t.radius;s===0?n.range=Mst:e.frustum instanceof en||e._mode===ie.SCENE2D?n.range=Ast(e,s):n.range=Fst(e,s),n.range=W.clamp(n.range,i,o)}return n}jt.prototype.viewBoundingSphere=function(e,t){t=Tbe(this,e,t),this.lookAt(e.center,t)};var Nst=new A,Ust=new h,kst=new h,Dst=new h,Bst=new h,Yst=new se,Ost=new Ae,Kst=new $;jt.prototype.flyToBoundingSphere=function(e,t){t=g(t,g.EMPTY_OBJECT);let n=this._mode===ie.SCENE2D||this._mode===ie.COLUMBUS_VIEW;this._setTransform(A.IDENTITY);let i=Tbe(this,e,t.offset),o;n?o=h.multiplyByScalar(h.UNIT_Z,i.range,Ust):o=xbe(i.heading,i.pitch,i.range);let r=vt.eastNorthUpToFixedFrame(e.center,re.WGS84,Nst);A.multiplyByPoint(r,o,o);let s,a;if(!n){if(s=h.subtract(e.center,o,kst),h.normalize(s,s),a=A.multiplyByPointAsVector(r,h.UNIT_Z,Dst),1-Math.abs(h.dot(s,a))<W.EPSILON6){let l=Ae.fromAxisAngle(s,i.heading,Ost),u=$.fromQuaternion(l,Kst);h.fromCartesian4(A.getColumn(r,1,Yst),a),$.multiplyByVector(u,a,a)}let c=h.cross(s,a,Bst);h.cross(c,s,a),h.normalize(a,a)}this.flyTo({destination:o,orientation:{direction:s,up:a},duration:t.duration,complete:t.complete,cancel:t.cancel,endTransform:t.endTransform,maximumHeight:t.maximumHeight,easingFunction:t.easingFunction,flyOverLongitude:t.flyOverLongitude,flyOverLongitudeWeight:t.flyOverLongitudeWeight,pitchAdjustHeight:t.pitchAdjustHeight})};var rbe=new h,sbe=new h,JQ=new h,abe=new h,ow=[new h,new h,new h,new h];function Hst(e,t){let n=t.radii,i=e.positionWC,o=h.multiplyComponents(t.oneOverRadii,i,rbe),r=h.magnitude(o),s=h.normalize(o,sbe),a,c;h.equalsEpsilon(s,h.UNIT_Z,W.EPSILON10)?(a=new h(0,1,0),c=new h(0,0,1)):(a=h.normalize(h.cross(h.UNIT_Z,s,JQ),JQ),c=h.normalize(h.cross(s,a,abe),abe));let l=Math.sqrt(h.magnitudeSquared(o)-1),u=h.multiplyByScalar(s,1/r,rbe),m=l/r,p=h.multiplyByScalar(a,m,sbe),y=h.multiplyByScalar(c,m,JQ),f=h.add(u,y,ow[0]);h.subtract(f,p,f),h.multiplyComponents(n,f,f);let x=h.subtract(u,y,ow[1]);h.subtract(x,p,x),h.multiplyComponents(n,x,x);let _=h.subtract(u,y,ow[2]);h.add(_,p,_),h.multiplyComponents(n,_,_);let C=h.add(u,y,ow[3]);return h.add(C,p,C),h.multiplyComponents(n,C,C),ow}var QQ=new D,zst=new h,$y=[new he,new he,new he,new he];function Sk(e,t,n,i,o,r){QQ.x=e,QQ.y=t;let s=i.pickEllipsoid(QQ,o,zst);return d(s)?($y[n]=o.cartesianToCartographic(s,$y[n]),1):($y[n]=o.cartesianToCartographic(r[n],$y[n]),0)}jt.prototype.computeViewRectangle=function(e,t){e=g(e,re.WGS84);let n=this.frustum.computeCullingVolume(this.positionWC,this.directionWC,this.upWC),i=new ce(h.ZERO,e.maximumRadius);if(n.computeVisibility(i)===qt.OUTSIDE)return;let r=this._scene.canvas,s=r.clientWidth,a=r.clientHeight,c=0,l=Hst(this,e);if(c+=Sk(0,0,0,this,e,l),c+=Sk(0,a,1,this,e,l),c+=Sk(s,a,2,this,e,l),c+=Sk(s,0,3,this,e,l),c<2)return de.MAX_VALUE;t=de.fromCartographicArray($y,t);let u=0,m=$y[3].longitude;for(let p=0;p<4;++p){let y=$y[p].longitude,f=Math.abs(y-m);f>W.PI?u+=W.TWO_PI-f:u+=f,m=y}return W.equalsEpsilon(Math.abs(u),W.TWO_PI,W.EPSILON9)&&(t.west=-W.PI,t.east=W.PI,$y[0].latitude>=0?t.north=W.PI_OVER_TWO:t.south=-W.PI_OVER_TWO),t};jt.prototype.switchToPerspectiveFrustum=function(){if(this._mode===ie.SCENE2D||this.frustum instanceof Ri)return;let e=this._scene;this.frustum=new Ri,this.frustum.aspectRatio=e.drawingBufferWidth/e.drawingBufferHeight,this.frustum.fov=W.toRadians(60)};jt.prototype.switchToOrthographicFrustum=function(){if(this._mode===ie.SCENE2D||this.frustum instanceof en)return;let e=mbe(this),t=this._scene;this.frustum=new en,this.frustum.aspectRatio=t.drawingBufferWidth/t.drawingBufferHeight,this.frustum.width=e};jt.clone=function(e,t){return d(t)||(t=new jt(e._scene)),h.clone(e.position,t.position),h.clone(e.direction,t.direction),h.clone(e.up,t.up),h.clone(e.right,t.right),A.clone(e._transform,t.transform),t._transformChanged=!0,t.frustum=e.frustum.clone(),t};var co=jt;var LZi=T(S(),1);function Jst(e){this.pass=e.pass,this.commandList=e.commandList,this.camera=e.camera,this.cullingVolume=e.cullingVolume,this.ready=!1}var Bu=Jst;var PZi=T(S(),1);var Rbe=T(Bl(),1),Sbe=576,Qst=100,rw="#ffffff",t4="#48b";function Zbe(e,t){this.credit=e,this.count=g(t,1)}function jst(e,t){let n=e.length;for(let i=0;i<n;i++){let o=e[i];if(St.equals(o,t))return!0}return!1}function qst(e){let t=e._previousCesiumCredit,n=e._currentCesiumCredit;St.equals(n,t)||(d(t)&&e._cesiumCreditContainer.removeChild(t.element),d(n)&&e._cesiumCreditContainer.appendChild(n.element),e._previousCesiumCredit=n)}var Gbe="cesium-credit-delimiter";function Cbe(e){let t=document.createElement("span");return t.textContent=e,t.className=Gbe,t}function Vbe(e,t){if(d(t)){let n=document.createElement(t);n._creditId=e._creditId,n.appendChild(e),e=n}return e}function Lbe(e,t,n,i){let o=e.childNodes,r=-1;t.sort(function(s,a){return a.count-s.count});for(let s=0;s<t.length;++s){let a=t[s].credit;if(d(a)){if(r=s,d(n)&&(r*=2,s>0)){let l=r-1;if(o.length<=l)e.appendChild(Cbe(n));else{let u=o[l];u.className!==Gbe&&e.replaceChild(Cbe(n),u)}}let c=a.element;if(o.length<=r)e.appendChild(Vbe(c,i));else{let l=o[r];l._creditId!==a._id&&e.replaceChild(Vbe(c,i),l)}}}for(++r;r<o.length;)e.removeChild(o[r])}function $st(e){let t=e._lightboxCredits,n=e.viewport.clientWidth,i=e.viewport.clientHeight;n!==e._lastViewportWidth&&(n<Sbe?(t.className="cesium-credit-lightbox cesium-credit-lightbox-mobile",t.style.marginTop="0"):(t.className="cesium-credit-lightbox cesium-credit-lightbox-expanded",t.style.marginTop=`${Math.floor((i-t.clientHeight)*.5)}px`),e._lastViewportWidth=n),n>=Sbe&&i!==e._lastViewportHeight&&(t.style.marginTop=`${Math.floor((i-t.clientHeight)*.5)}px`,e._lastViewportHeight=i)}function mc(e,t){let n=`${e} {`;for(let i in t)t.hasOwnProperty(i)&&(n+=`${i}: ${t[i]}; `);return n+=` }
  10016. `,n}function eat(e){let t="";t+=mc(".cesium-credit-lightbox-overlay",{display:"none","z-index":"1",position:"absolute",top:"0",left:"0",width:"100%",height:"100%","background-color":"rgba(80, 80, 80, 0.8)"}),t+=mc(".cesium-credit-lightbox",{"background-color":"#303336",color:rw,position:"relative","min-height":`${Qst}px`,margin:"auto"}),t+=mc(".cesium-credit-lightbox > ul > li a, .cesium-credit-lightbox > ul > li a:visited",{color:rw}),t+=mc(".cesium-credit-lightbox > ul > li a:hover",{color:t4}),t+=mc(".cesium-credit-lightbox.cesium-credit-lightbox-expanded",{border:"1px solid #444","border-radius":"5px","max-width":"370px"}),t+=mc(".cesium-credit-lightbox.cesium-credit-lightbox-mobile",{height:"100%",width:"100%"}),t+=mc(".cesium-credit-lightbox-title",{padding:"20px 20px 0 20px"}),t+=mc(".cesium-credit-lightbox-close",{"font-size":"18pt",cursor:"pointer",position:"absolute",top:"0",right:"6px",color:rw}),t+=mc(".cesium-credit-lightbox-close:hover",{color:t4}),t+=mc(".cesium-credit-lightbox > ul",{margin:"0",padding:"12px 20px 12px 40px","font-size":"13px"}),t+=mc(".cesium-credit-lightbox > ul > li",{"padding-bottom":"6px"}),t+=mc(".cesium-credit-lightbox > ul > li *",{padding:"0",margin:"0"}),t+=mc(".cesium-credit-expand-link",{"padding-left":"5px",cursor:"pointer","text-decoration":"underline",color:rw}),t+=mc(".cesium-credit-expand-link:hover",{color:t4}),t+=mc(".cesium-credit-text",{color:rw}),t+=mc(".cesium-credit-textContainer *, .cesium-credit-logoContainer *",{display:"inline"});function n(r){if(r.shadowRoot)return r.shadowRoot;if(r.getRootNode){let s=r.getRootNode();if(s instanceof ShadowRoot)return s}}let i=g(n(e),document.head),o=document.createElement("style");o.innerHTML=t,i.appendChild(o)}function ar(e,t,n){let i=this;n=g(n,document.body);let o=document.createElement("div");o.className="cesium-credit-lightbox-overlay",n.appendChild(o);let r=document.createElement("div");r.className="cesium-credit-lightbox",o.appendChild(r);function s(f){r.contains(f.target)||i.hideLightbox()}o.addEventListener("click",s,!1);let a=document.createElement("div");a.className="cesium-credit-lightbox-title",a.textContent="Data provided by:",r.appendChild(a);let c=document.createElement("a");c.onclick=this.hideLightbox.bind(this),c.innerHTML="&times;",c.className="cesium-credit-lightbox-close",r.appendChild(c);let l=document.createElement("ul");r.appendChild(l);let u=document.createElement("div");u.className="cesium-credit-logoContainer",u.style.display="inline",e.appendChild(u);let m=document.createElement("div");m.className="cesium-credit-textContainer",m.style.display="inline",e.appendChild(m);let p=document.createElement("a");p.className="cesium-credit-expand-link",p.onclick=this.showLightbox.bind(this),p.textContent="Data attribution",e.appendChild(p),eat(e);let y=St.clone(ar.cesiumCredit);this._delimiter=g(t," \u2022 "),this._screenContainer=m,this._cesiumCreditContainer=u,this._lastViewportHeight=void 0,this._lastViewportWidth=void 0,this._lightboxCredits=r,this._creditList=l,this._lightbox=o,this._hideLightbox=s,this._expandLink=p,this._expanded=!1,this._staticCredits=[],this._cesiumCredit=y,this._previousCesiumCredit=void 0,this._currentCesiumCredit=y,this._creditDisplayElementPool=[],this._creditDisplayElementIndex=0,this._currentFrameCredits={screenCredits:new Tt,lightboxCredits:new Tt},this._defaultCredit=void 0,this.viewport=n,this.container=e}function Ebe(e,t,n,i){i=g(i,1);let o=t.get(n.id);if(d(o))o.count<Number.MAX_VALUE&&(o.count+=i);else{let r=e._creditDisplayElementPool,s=e._creditDisplayElementPoolIndex;s<r.length?(o=r[s],o.credit=n,o.count=i):(o=new Zbe(n,i),r.push(o)),++e._creditDisplayElementPoolIndex,t.set(n.id,o)}}ar.prototype.addCreditToNextFrame=function(e){if(e.isIon()){d(this._defaultCredit)||(this._defaultCredit=St.clone(Xbe())),this._currentCesiumCredit=this._defaultCredit;return}let t;e.showOnScreen?t=this._currentFrameCredits.screenCredits:t=this._currentFrameCredits.lightboxCredits,Ebe(this,t,e)};ar.prototype.addStaticCredit=function(e){let t=this._staticCredits;jst(t,e)||t.push(e)};ar.prototype.removeStaticCredit=function(e){let t=this._staticCredits,n=t.indexOf(e);n!==-1&&t.splice(n,1)};ar.prototype.showLightbox=function(){this._lightbox.style.display="block",this._expanded=!0};ar.prototype.hideLightbox=function(){this._lightbox.style.display="none",this._expanded=!1};ar.prototype.update=function(){this._expanded&&$st(this)};ar.prototype.beginFrame=function(){let e=this._currentFrameCredits;this._creditDisplayElementPoolIndex=0;let t=e.screenCredits,n=e.lightboxCredits;t.removeAll(),n.removeAll();let i=this._staticCredits;for(let o=0;o<i.length;++o){let r=i[o],s=r.showOnScreen?t:n;r.isIon()&&St.equals(ar.cesiumCredit,this._cesiumCredit)||Ebe(this,s,r,Number.MAX_VALUE)}St.equals(ar.cesiumCredit,this._cesiumCredit)||(this._cesiumCredit=St.clone(ar.cesiumCredit)),this._currentCesiumCredit=this._cesiumCredit};ar.prototype.endFrame=function(){let e=this._currentFrameCredits.screenCredits.values;Lbe(this._screenContainer,e,this._delimiter,void 0);let t=this._currentFrameCredits.lightboxCredits.values;this._expandLink.style.display=t.length>0?"inline":"none",Lbe(this._creditList,t,void 0,"li"),qst(this)};ar.prototype.destroy=function(){return this._lightbox.removeEventListener("click",this._hideLightbox,!1),this.container.removeChild(this._cesiumCreditContainer),this.container.removeChild(this._screenContainer),this.container.removeChild(this._expandLink),this.viewport.removeChild(this._lightbox),ue(this)};ar.prototype.isDestroyed=function(){return!1};ar._cesiumCredit=void 0;ar._cesiumCreditInitialized=!1;var Zk;function Xbe(){if(!d(Zk)){let e=$t("Assets/Images/ion-credit.png");e.indexOf("http://")!==0&&e.indexOf("https://")!==0&&e.indexOf("data:")!==0&&(e=new Rbe.default(e).path()),Zk=new St(`<a href="https://cesium.com/" target="_blank"><img src="${e}" title="Cesium ion"/></a>`,!0)}return ar._cesiumCreditInitialized||(ar._cesiumCredit=Zk,ar._cesiumCreditInitialized=!0),Zk}Object.defineProperties(ar,{cesiumCredit:{get:function(){return Xbe(),ar._cesiumCredit},set:function(e){ar._cesiumCredit=e,ar._cesiumCreditInitialized=!0}}});ar.CreditDisplayElement=Zbe;var sw=ar;var qZi=T(S(),1);function Gk(e){e=g(e,g.EMPTY_OBJECT),this._camera=e.camera,this._frustumSplits=e.frustumSplits,this._color=g(e.color,Y.CYAN),this._updateOnChange=g(e.updateOnChange,!0),this.show=g(e.show,!0),this.id=e.id,this._id=void 0,this._outlinePrimitives=[],this._planesPrimitives=[]}var tat=new h,nat=new $,iat=new Ae,oat=new Ri,rat=new Yc,sat=new en,aat=new yr,cat=new Y,lat=[1,1e5];Gk.prototype.update=function(e){if(!this.show)return;let t=this._planesPrimitives,n=this._outlinePrimitives,i,o;if(this._updateOnChange){for(o=t.length,i=0;i<o;++i)n[i]=n[i]&&n[i].destroy(),t[i]=t[i]&&t[i].destroy();t.length=0,n.length=0}if(t.length===0){let r=this._camera,s=r.frustum,a;s instanceof Ri?a=oat:s instanceof Yc?a=rat:s instanceof en?a=sat:a=aat,a=s.clone(a);let c,l=this._frustumSplits;!d(l)||l.length<=1?(l=lat,l[0]=this._camera.frustum.near,l[1]=this._camera.frustum.far,c=1):c=l.length-1;let u=r.positionWC,m=r.directionWC,p=r.upWC,y=r.rightWC;y=h.negate(y,tat);let f=nat;$.setColumn(f,0,y,f),$.setColumn(f,1,p,f),$.setColumn(f,2,m,f);let x=Ae.fromRotationMatrix(f,iat);for(t.length=n.length=c,i=0;i<c;++i)a.near=l[i],a.far=l[i+1],t[i]=new Zn({geometryInstances:new _t({geometry:new J_({origin:u,orientation:x,frustum:a,_drawNearPlane:i===0}),attributes:{color:Ut.fromColor(Y.fromAlpha(this._color,.1,cat))},id:this.id,pickPrimitive:this}),appearance:new rn({translucent:!0,flat:!0}),asynchronous:!1}),n[i]=new Zn({geometryInstances:new _t({geometry:new BP({origin:u,orientation:x,frustum:a,_drawNearPlane:i===0}),attributes:{color:Ut.fromColor(this._color)},id:this.id,pickPrimitive:this}),appearance:new rn({translucent:!1,flat:!0}),asynchronous:!1})}for(o=t.length,i=0;i<o;++i)n[i].update(e),t[i].update(e)};Gk.prototype.isDestroyed=function(){return!1};Gk.prototype.destroy=function(){let e=this._planesPrimitives.length;for(let t=0;t<e;++t)this._outlinePrimitives[t]=this._outlinePrimitives[t]&&this._outlinePrimitives[t].destroy(),this._planesPrimitives[t]=this._planesPrimitives[t]&&this._planesPrimitives[t].destroy();return ue(this)};var Gf=Gk;var TGi=T(S(),1);function cw(e){this._rs=void 0,this._sp=void 0,this._va=void 0,this._command=void 0,this._mode=void 0,this._useLogDepth=!1,this._ellipsoidOffset=g(e,0)}var aw=Mt.supportsTypedArrays()?new Float32Array(12):[],Ibe=new h,Wbe=new h,n4=new h,Pbe=new h,Ek=new h;function dat(e,t){let n=e.radii,i=t.camera,o,r,s;if(i.frustum instanceof en)o=h.ZERO,r=i.rightWC,s=i.upWC;else{let m=i.positionWC,p=h.multiplyComponents(e.oneOverRadii,m,Ibe),y=h.normalize(p,Wbe),f=h.normalize(h.cross(h.UNIT_Z,p,n4),n4),x=h.normalize(h.cross(y,f,Pbe),Pbe),_=h.magnitude(p),C=Math.sqrt(_*_-1);o=h.multiplyByScalar(y,1/_,Ibe);let V=C/_;r=h.multiplyByScalar(f,V,Wbe),s=h.multiplyByScalar(x,V,n4)}let a=h.add(o,s,Ek);h.subtract(a,r,a),h.multiplyComponents(n,a,a),h.pack(a,aw,0);let c=h.subtract(o,s,Ek);h.subtract(c,r,c),h.multiplyComponents(n,c,c),h.pack(c,aw,3);let l=h.add(o,s,Ek);h.add(l,r,l),h.multiplyComponents(n,l,l),h.pack(l,aw,6);let u=h.subtract(o,s,Ek);return h.add(u,r,u),h.multiplyComponents(n,u,u),h.pack(u,aw,9),aw}cw.prototype.update=function(e){if(this._mode=e.mode,e.mode!==ie.SCENE3D)return;let t=e.context,n=e.mapProjection.ellipsoid.radii,i=new re(n.x+this._ellipsoidOffset,n.y+this._ellipsoidOffset,n.z+this._ellipsoidOffset),o=e.useLogDepth;if(d(this._command)||(this._rs=De.fromCache({cull:{enabled:!0},depthTest:{enabled:!0},colorMask:{red:!1,green:!1,blue:!1,alpha:!1}}),this._command=new nt({renderState:this._rs,boundingVolume:new ce(h.ZERO,i.maximumRadius),pass:Re.OPAQUE,owner:this})),!d(this._sp)||this._useLogDepth!==o){this._useLogDepth=o;let s=new Ye({sources:[uv]}),a=new Ye({sources:[dv]});o&&(a.defines.push("LOG_DEPTH"),s.defines.push("LOG_DEPTH")),this._sp=Qt.replaceCache({shaderProgram:this._sp,context:t,vertexShaderSource:s,fragmentShaderSource:a,attributeLocations:{position:0}}),this._command.shaderProgram=this._sp}let r=dat(i,e);if(d(this._va))this._va.getAttribute(0).vertexBuffer.copyFromArrayView(r);else{let s=new dt({attributes:{position:new Ze({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:r})},indices:[0,1,2,2,1,3],primitiveType:Fe.TRIANGLES});this._va=ti.fromGeometry({context:t,geometry:s,attributeLocations:{position:0},bufferUsage:Ne.DYNAMIC_DRAW}),this._command.vertexArray=this._va}};cw.prototype.execute=function(e,t){this._mode===ie.SCENE3D&&this._command.execute(e,t)};cw.prototype.isDestroyed=function(){return!1};cw.prototype.destroy=function(){this._sp=this._sp&&this._sp.destroy(),this._va=this._va&&this._va.destroy()};var lw=cw;var ZGi=T(S(),1);function dw(){}var uat=/\bgl_FragDepth\b/,mat=/\bdiscard\b/;function hat(e,t){let n=e.shaderCache.getDerivedShaderProgram(t,"depthOnly");if(!d(n)){let i=t._attributeLocations,o=t.fragmentShaderSource,r,s=!1,a=o.sources,c=a.length;for(r=0;r<c;++r)if(uat.test(a[r])||mat.test(a[r])){s=!0;break}let l=!1,u=o.defines;for(c=u.length,r=0;r<c;++r)if(u[r]==="LOG_DEPTH"){l=!0;break}let m;!s&&!l?(m=`void main()
  10017. {
  10018. out_FragColor = vec4(1.0);
  10019. }
  10020. `,o=new Ye({sources:[m]})):!s&&l&&(m=`void main()
  10021. {
  10022. out_FragColor = vec4(1.0);
  10023. czm_writeLogDepth();
  10024. }
  10025. `,o=new Ye({defines:["LOG_DEPTH"],sources:[m]})),n=e.shaderCache.createDerivedShaderProgram(t,"depthOnly",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:o,attributeLocations:i})}return n}function fat(e,t){let n=e._depthOnlyRenderStateCache,i=n[t.id];if(!d(i)){let o=De.getState(t);o.depthMask=!0,o.colorMask={red:!1,green:!1,blue:!1,alpha:!1},i=De.fromCache(o),n[t.id]=i}return i}dw.createDepthOnlyDerivedCommand=function(e,t,n,i){d(i)||(i={});let o,r;return d(i.depthOnlyCommand)&&(o=i.depthOnlyCommand.shaderProgram,r=i.depthOnlyCommand.renderState),i.depthOnlyCommand=nt.shallowClone(t,i.depthOnlyCommand),!d(o)||i.shaderProgramId!==t.shaderProgram.id?(i.depthOnlyCommand.shaderProgram=hat(n,t.shaderProgram),i.depthOnlyCommand.renderState=fat(e,t.renderState),i.shaderProgramId=t.shaderProgram.id):(i.depthOnlyCommand.shaderProgram=o,i.depthOnlyCommand.renderState=r),i};var pat=/\s+czm_writeLogDepth\(/,bat=/\s+czm_vertexLogDepth\(/;function yat(e,t){if(t.fragmentShaderSource.defines.indexOf("LOG_DEPTH_READ_ONLY")>=0)return t;let i=e.shaderCache.getDerivedShaderProgram(t,"logDepth");if(!d(i)){let o=t._attributeLocations,r=t.vertexShaderSource.clone(),s=t.fragmentShaderSource.clone();r.defines=d(r.defines)?r.defines.slice(0):[],r.defines.push("LOG_DEPTH"),s.defines=d(s.defines)?s.defines.slice(0):[],s.defines.push("LOG_DEPTH");let a,c,l=!1,u=r.sources,m=u.length;for(a=0;a<m;++a)if(bat.test(u[a])){l=!0;break}if(!l){for(a=0;a<m;++a)u[a]=Ye.replaceMain(u[a],"czm_log_depth_main");c=`
  10026. void main()
  10027. {
  10028. czm_log_depth_main();
  10029. czm_vertexLogDepth();
  10030. }
  10031. `,u.push(c)}for(u=s.sources,m=u.length,l=!1,a=0;a<m;++a)pat.test(u[a])&&(l=!0);s.defines.indexOf("LOG_DEPTH_WRITE")!==-1&&(l=!0);let p="";if(!l){for(a=0;a<m;a++)u[a]=Ye.replaceMain(u[a],"czm_log_depth_main");p+=`
  10032. void main()
  10033. {
  10034. czm_log_depth_main();
  10035. czm_writeLogDepth();
  10036. }
  10037. `}u.push(p),i=e.shaderCache.createDerivedShaderProgram(t,"logDepth",{vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:o})}return i}dw.createLogDepthCommand=function(e,t,n){d(n)||(n={});let i;return d(n.command)&&(i=n.command.shaderProgram),n.command=nt.shallowClone(e,n.command),!d(i)||n.shaderProgramId!==e.shaderProgram.id?(n.command.shaderProgram=yat(t,e.shaderProgram),n.shaderProgramId=e.shaderProgram.id):n.command.shaderProgram=i,n};function gat(e,t,n){let i=e.shaderCache.getDerivedShaderProgram(t,"pick");if(!d(i)){let o=t._attributeLocations,r=t.fragmentShaderSource,s=r.sources,a=s.length,l=s.some(p=>p.includes("out_FragData"))?"out_FragData_0":"out_FragColor",u=`void main ()
  10038. {
  10039. czm_non_pick_main();
  10040. if (${l}.a == 0.0) {
  10041. discard;
  10042. }
  10043. ${l} = ${n};
  10044. } `,m=new Array(a+1);for(let p=0;p<a;++p)m[p]=Ye.replaceMain(s[p],"czm_non_pick_main");m[a]=u,r=new Ye({sources:m,defines:r.defines}),i=e.shaderCache.createDerivedShaderProgram(t,"pick",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:r,attributeLocations:o})}return i}function xat(e,t){let n=e.picking.pickRenderStateCache,i=n[t.id];if(!d(i)){let o=De.getState(t);o.blending.enabled=!1,o.depthMask=!0,i=De.fromCache(o),n[t.id]=i}return i}dw.createPickDerivedCommand=function(e,t,n,i){d(i)||(i={});let o,r;return d(i.pickCommand)&&(o=i.pickCommand.shaderProgram,r=i.pickCommand.renderState),i.pickCommand=nt.shallowClone(t,i.pickCommand),!d(o)||i.shaderProgramId!==t.shaderProgram.id?(i.pickCommand.shaderProgram=gat(n,t.shaderProgram,t.pickId),i.pickCommand.renderState=xat(e,t.renderState),i.shaderProgramId=t.shaderProgram.id):(i.pickCommand.shaderProgram=o,i.pickCommand.renderState=r),i};function _at(e,t){let n=e.shaderCache.getDerivedShaderProgram(t,"HDR");if(!d(n)){let i=t._attributeLocations,o=t.vertexShaderSource.clone(),r=t.fragmentShaderSource.clone();o.defines=d(o.defines)?o.defines.slice(0):[],o.defines.push("HDR"),r.defines=d(r.defines)?r.defines.slice(0):[],r.defines.push("HDR"),n=e.shaderCache.createDerivedShaderProgram(t,"HDR",{vertexShaderSource:o,fragmentShaderSource:r,attributeLocations:i})}return n}dw.createHdrCommand=function(e,t,n){d(n)||(n={});let i;return d(n.command)&&(i=n.command.shaderProgram),n.command=nt.shallowClone(e,n.command),!d(i)||n.shaderProgramId!==e.shaderProgram.id?(n.command.shaderProgram=_at(t,e.shaderProgram),n.shaderProgramId=e.shaderProgram.id):n.command.shaderProgram=i,n};var N0=dw;var vGi=T(S(),1);function Xk(e){this._scene=e,this._lastAlpha=void 0,this._lastBeta=void 0,this._lastGamma=void 0,this._alpha=void 0,this._beta=void 0,this._gamma=void 0;let t=this;function n(i){let o=i.alpha;if(!d(o)){t._alpha=void 0,t._beta=void 0,t._gamma=void 0;return}t._alpha=W.toRadians(o),t._beta=W.toRadians(i.beta),t._gamma=W.toRadians(i.gamma)}window.addEventListener("deviceorientation",n,!1),this._removeListener=function(){window.removeEventListener("deviceorientation",n,!1)}}var Tat=new Ae,vbe=new Ae,Sat=new $;function Cat(e,t,n,i){let o=e.direction,r=e.right,s=e.up,a=Ae.fromAxisAngle(o,n,vbe),c=Ae.fromAxisAngle(r,i,Tat),l=Ae.multiply(c,a,c),u=Ae.fromAxisAngle(s,t,vbe);Ae.multiply(u,l,l);let m=$.fromQuaternion(l,Sat);$.multiplyByVector(m,r,r),$.multiplyByVector(m,s,s),$.multiplyByVector(m,o,o)}Xk.prototype.update=function(){if(!d(this._alpha))return;d(this._lastAlpha)||(this._lastAlpha=this._alpha,this._lastBeta=this._beta,this._lastGamma=this._gamma);let e=this._lastAlpha-this._alpha,t=this._lastBeta-this._beta,n=this._lastGamma-this._gamma;Cat(this._scene.camera,-e,t,n),this._lastAlpha=this._alpha,this._lastBeta=this._beta,this._lastGamma=this._gamma};Xk.prototype.isDestroyed=function(){return!1};Xk.prototype.destroy=function(){return this._removeListener(),ue(this)};var uw=Xk;var UGi=T(S(),1);function wbe(){this.enabled=!0,this.renderable=!0,this.density=2e-4,this.screenSpaceErrorFactor=2,this.minimumBrightness=.03}var Ik=[359.393,800.749,1275.6501,2151.1192,3141.7763,4777.5198,6281.2493,12364.307,15900.765,49889.0549,78026.8259,99260.7344,120036.3873,151011.0158,156091.1953,203849.3112,274866.9803,319916.3149,493552.0528,628733.5874],Ef=[2e-5,2e-4,1e-4,7e-5,5e-5,4e-5,3e-5,19e-6,1e-5,85e-7,62e-7,58e-7,53e-7,52e-7,51e-7,42e-7,4e-6,34e-7,26e-7,22e-7];for(let e=0;e<Ef.length;++e)Ef[e]*=1e6;var Fbe=Ef[1],i4=Ef[Ef.length-1];for(let e=0;e<Ef.length;++e)Ef[e]=(Ef[e]-i4)/(Fbe-i4);var oa=0;function Vat(e){let t=Ik,n=t.length;if(e<t[0])return oa=0,oa;if(e>t[n-1])return oa=n-2,oa;if(e>=t[oa]){if(oa+1<n&&e<t[oa+1])return oa;if(oa+2<n&&e<t[oa+2])return++oa,oa}else if(oa-1>=0&&e>=t[oa-1])return--oa,oa;let i;for(i=0;i<n-2&&!(e>=t[i]&&e<t[i+1]);++i);return oa=i,oa}var Lat=new h;wbe.prototype.update=function(e){if(!(e.fog.enabled=this.enabled))return;e.fog.renderable=this.renderable;let n=e.camera,i=n.positionCartographic;if(!d(i)||i.height>8e5||e.mode!==ie.SCENE3D){e.fog.enabled=!1;return}let o=i.height,r=Vat(o),s=W.clamp((o-Ik[r])/(Ik[r+1]-Ik[r]),0,1),a=W.lerp(Ef[r],Ef[r+1],s),c=this.density*1e6,l=c/Fbe*i4;a=a*(c-l)*1e-6;let u=h.normalize(n.positionWC,Lat),m=Math.abs(h.dot(n.directionWC,u));a*=1-m,e.fog.density=a,e.fog.sse=this.screenSpaceErrorFactor,e.fog.minimumBrightness=this.minimumBrightness};var mw=wbe;var BGi=T(S(),1);function Rat(e,t,n){this.context=e,this.commandList=[],this.shadowMaps=[],this.brdfLutGenerator=void 0,this.environmentMap=void 0,this.sphericalHarmonicCoefficients=void 0,this.specularEnvironmentMaps=void 0,this.specularEnvironmentMapsMaximumLOD=void 0,this.mode=ie.SCENE3D,this.morphTime=ie.getMorphTime(ie.SCENE3D),this.frameNumber=0,this.newFrame=!1,this.time=void 0,this.jobScheduler=n,this.mapProjection=void 0,this.camera=void 0,this.cameraUnderground=!1,this.globeTranslucencyState=void 0,this.cullingVolume=void 0,this.occluder=void 0,this.maximumScreenSpaceError=void 0,this.pixelRatio=1,this.passes={render:!1,pick:!1,depth:!1,postProcess:!1,offscreen:!1},this.creditDisplay=t,this.afterRender=[],this.scene3DOnly=!1,this.fog={enabled:!1,density:void 0,sse:void 0,minimumBrightness:void 0},this.terrainExaggeration=1,this.terrainExaggerationRelativeHeight=0,this.shadowState={shadowsEnabled:!0,shadowMaps:[],lightShadowMaps:[],nearPlane:1,farPlane:5e3,closestObjectSize:1e3,lastDirtyTime:0,outOfView:!0},this.splitPosition=0,this.frustumSplits=[],this.backgroundColor=void 0,this.light=void 0,this.minimumDisableDepthTestDistance=void 0,this.invertClassification=!1,this.invertClassificationColor=void 0,this.useLogDepth=!1,this.tilesetPassState=void 0,this.minimumTerrainHeight=0}var hw=Rat;var iEi=T(S(),1);var ra={OPAQUE_FRONT_FACE:0,OPAQUE_BACK_FACE:1,DEPTH_ONLY_FRONT_FACE:2,DEPTH_ONLY_BACK_FACE:3,DEPTH_ONLY_FRONT_AND_BACK_FACE:4,TRANSLUCENT_FRONT_FACE:5,TRANSLUCENT_BACK_FACE:6,TRANSLUCENT_FRONT_FACE_MANUAL_DEPTH_TEST:7,TRANSLUCENT_BACK_FACE_MANUAL_DEPTH_TEST:8,PICK_FRONT_FACE:9,PICK_BACK_FACE:10,DERIVED_COMMANDS_MAXIMUM_LENGTH:11},rT=ra.DERIVED_COMMANDS_MAXIMUM_LENGTH,Kbe=["opaqueFrontFaceCommand","opaqueBackFaceCommand","depthOnlyFrontFaceCommand","depthOnlyBackFaceCommand","depthOnlyFrontAndBackFaceCommand","translucentFrontFaceCommand","translucentBackFaceCommand","translucentFrontFaceManualDepthTestCommand","translucentBackFaceManualDepthTestCommand","pickFrontFaceCommand","pickBackFaceCommand"];function sT(){this._frontFaceAlphaByDistance=new It(0,1,0,1),this._backFaceAlphaByDistance=new It(0,1,0,1),this._frontFaceTranslucent=!1,this._backFaceTranslucent=!1,this._requiresManualDepthTest=!1,this._sunVisibleThroughGlobe=!1,this._environmentVisible=!1,this._useDepthPlane=!1,this._numberOfTextureUniforms=0,this._globeTranslucencyFramebuffer=void 0,this._rectangle=de.clone(de.MAX_VALUE),this._derivedCommandKey=0,this._derivedCommandsDirty=!1,this._derivedCommandPacks=void 0,this._derivedCommandTypes=new Array(rT),this._derivedBlendCommandTypes=new Array(rT),this._derivedPickCommandTypes=new Array(rT),this._derivedCommandTypesToUpdate=new Array(rT),this._derivedCommandsLength=0,this._derivedBlendCommandsLength=0,this._derivedPickCommandsLength=0,this._derivedCommandsToUpdateLength=0}Object.defineProperties(sT.prototype,{frontFaceAlphaByDistance:{get:function(){return this._frontFaceAlphaByDistance}},backFaceAlphaByDistance:{get:function(){return this._backFaceAlphaByDistance}},translucent:{get:function(){return this._frontFaceTranslucent}},sunVisibleThroughGlobe:{get:function(){return this._sunVisibleThroughGlobe}},environmentVisible:{get:function(){return this._environmentVisible}},useDepthPlane:{get:function(){return this._useDepthPlane}},numberOfTextureUniforms:{get:function(){return this._numberOfTextureUniforms}},rectangle:{get:function(){return this._rectangle}}});sT.prototype.update=function(e){let t=e.globe;if(!d(t)||!t.show){this._frontFaceTranslucent=!1,this._backFaceTranslucent=!1,this._sunVisibleThroughGlobe=!0,this._environmentVisible=!0,this._useDepthPlane=!1;return}this._frontFaceAlphaByDistance=Abe(t.translucency.enabled,t.translucency.frontFaceAlpha,t.translucency.frontFaceAlphaByDistance,this._frontFaceAlphaByDistance),this._backFaceAlphaByDistance=Abe(t.translucency.enabled,t.translucency.backFaceAlpha,t.translucency.backFaceAlphaByDistance,this._backFaceAlphaByDistance),this._frontFaceTranslucent=Mbe(t.translucency.enabled,this._frontFaceAlphaByDistance,t),this._backFaceTranslucent=Mbe(t.translucency.enabled,this._backFaceAlphaByDistance,t),this._requiresManualDepthTest=Xat(this,e,t),this._sunVisibleThroughGlobe=Zat(this,e),this._environmentVisible=Gat(this,e),this._useDepthPlane=Eat(this,e),this._numberOfTextureUniforms=Iat(this),this._rectangle=de.clone(t.translucency.rectangle,this._rectangle),Wat(this,e)};function Abe(e,t,n,i){return e?d(n)?(It.clone(n,i),i.nearValue*=t,i.farValue*=t,i):(i.nearValue=t,i.farValue=t,i):(i.nearValue=1,i.farValue=1,i)}function Mbe(e,t,n){return e&&(n.baseColor.alpha<1||t.nearValue<1||t.farValue<1)}function Zat(e,t){let n=e._frontFaceTranslucent,i=e._backFaceTranslucent;return n&&(t.cameraUnderground||i)}function Gat(e,t){return!t.cameraUnderground||e._frontFaceTranslucent}function Eat(e,t){return!t.cameraUnderground&&!e._frontFaceTranslucent}function Xat(e,t,n){return e._frontFaceTranslucent&&!e._backFaceTranslucent&&!n.depthTestAgainstTerrain&&t.mode!==ie.SCENE2D&&t.context.depthTexture}function Iat(e){let t=0;return e._frontFaceTranslucent&&++t,e._requiresManualDepthTest&&++t,t}function Wat(e,t){e._derivedCommandsLength=o4(e,t,!1,!1,e._derivedCommandTypes),e._derivedBlendCommandsLength=o4(e,t,!0,!1,e._derivedBlendCommandTypes),e._derivedPickCommandsLength=o4(e,t,!1,!0,e._derivedPickCommandTypes);let n,i=0;for(n=0;n<e._derivedCommandsLength;++n)i|=1<<e._derivedCommandTypes[n];for(n=0;n<e._derivedBlendCommandsLength;++n)i|=1<<e._derivedBlendCommandTypes[n];for(n=0;n<e._derivedPickCommandsLength;++n)i|=1<<e._derivedPickCommandTypes[n];let o=0;for(n=0;n<rT;++n)(i&1<<n)>0&&(e._derivedCommandTypesToUpdate[o++]=n);e._derivedCommandsToUpdateLength=o;let r=i!==e._derivedCommandKey;e._derivedCommandKey=i,e._derivedCommandsDirty=r,!d(e._derivedCommandPacks)&&e._frontFaceTranslucent&&(e._derivedCommandPacks=Hat())}function o4(e,t,n,i,o){let r=0,s=e._frontFaceTranslucent,a=e._backFaceTranslucent;if(!s)return r;let c=t.cameraUnderground,l=e._requiresManualDepthTest,u=i?ra.PICK_FRONT_FACE:l?ra.TRANSLUCENT_FRONT_FACE_MANUAL_DEPTH_TEST:ra.TRANSLUCENT_FRONT_FACE,m=i?ra.PICK_BACK_FACE:l?ra.TRANSLUCENT_BACK_FACE_MANUAL_DEPTH_TEST:ra.TRANSLUCENT_BACK_FACE;return t.mode===ie.SCENE2D?(o[r++]=ra.DEPTH_ONLY_FRONT_FACE,o[r++]=u,r):(a?(n||(o[r++]=ra.DEPTH_ONLY_FRONT_AND_BACK_FACE),c?(o[r++]=u,o[r++]=m):(o[r++]=m,o[r++]=u)):c?(n||(o[r++]=ra.DEPTH_ONLY_BACK_FACE),o[r++]=ra.OPAQUE_FRONT_FACE,o[r++]=m):(n||(o[r++]=ra.DEPTH_ONLY_FRONT_FACE),o[r++]=ra.OPAQUE_BACK_FACE,o[r++]=u),r)}function Yu(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function Nbe(e,t){return e.indexOf(t)>-1}function Pat(e,t){Yu(e.defines,"TRANSLUCENT"),Yu(t.defines,"TRANSLUCENT")}function vat(e,t){Yu(e.defines,"GROUND_ATMOSPHERE"),Yu(t.defines,"GROUND_ATMOSPHERE"),Yu(e.defines,"FOG"),Yu(t.defines,"FOG"),Yu(e.defines,"TRANSLUCENT"),Yu(t.defines,"TRANSLUCENT")}function r4(e,t){if(Nbe(t.defines,"TILE_LIMIT_RECTANGLE")||Nbe(t.defines,"ENABLE_CLIPPING_PLANES"))return;let n=`void main()
  10045. {
  10046. out_FragColor = vec4(1.0);
  10047. }
  10048. `;t.sources=[n]}function s4(e,t){let n=t.sources,i=n.length;for(let r=0;r<i;++r)n[r]=Ye.replaceMain(n[r],"czm_globe_translucency_main");let o=`
  10049. uniform sampler2D u_classificationTexture;
  10050. void main()
  10051. {
  10052. vec2 st = gl_FragCoord.xy / czm_viewport.zw;
  10053. #ifdef MANUAL_DEPTH_TEST
  10054. float logDepthOrDepth = czm_unpackDepth(texture(czm_globeDepthTexture, st));
  10055. if (logDepthOrDepth != 0.0)
  10056. {
  10057. vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth);
  10058. float depthEC = eyeCoordinate.z / eyeCoordinate.w;
  10059. if (v_positionEC.z < depthEC)
  10060. {
  10061. discard;
  10062. }
  10063. }
  10064. #endif
  10065. czm_globe_translucency_main();
  10066. vec4 classificationColor = texture(u_classificationTexture, st);
  10067. if (classificationColor.a > 0.0)
  10068. {
  10069. // Reverse premultiplication process to get the correct composited result of the classification primitives
  10070. classificationColor.rgb /= classificationColor.a;
  10071. }
  10072. out_FragColor = classificationColor * vec4(classificationColor.aaa, 1.0) + out_FragColor * (1.0 - classificationColor.a);
  10073. }
  10074. `;n.push(o)}function Hbe(e,t){s4(e,t),Yu(e.defines,"GROUND_ATMOSPHERE"),Yu(t.defines,"GROUND_ATMOSPHERE"),Yu(e.defines,"FOG"),Yu(t.defines,"FOG")}function wat(e,t){s4(e,t),e.defines.push("GENERATE_POSITION"),t.defines.push("MANUAL_DEPTH_TEST")}function Fat(e,t){Hbe(e,t),e.defines.push("GENERATE_POSITION"),t.defines.push("MANUAL_DEPTH_TEST")}function Ube(e,t){let n=`uniform sampler2D u_classificationTexture;
  10075. void main()
  10076. {
  10077. vec2 st = gl_FragCoord.xy / czm_viewport.zw;
  10078. vec4 pickColor = texture(u_classificationTexture, st);
  10079. if (pickColor == vec4(0.0))
  10080. {
  10081. discard;
  10082. }
  10083. out_FragColor = pickColor;
  10084. }
  10085. `;t.sources=[n]}function Aat(e,t,n,i,o,r){if(!d(o))return t;if(!i&&d(n))return n;let s=e.shaderCache.getDerivedShaderProgram(t,r);if(!d(s)){let a=t._attributeLocations,c=t.vertexShaderSource.clone(),l=t.fragmentShaderSource.clone();c.defines=d(c.defines)?c.defines.slice(0):[],l.defines=d(l.defines)?l.defines.slice(0):[],o(c,l),s=e.shaderCache.createDerivedShaderProgram(t,r,{vertexShaderSource:c,fragmentShaderSource:l,attributeLocations:a})}return s}function Mat(e){e.cull.face=bi.BACK,e.cull.enabled=!0}function Nat(e){e.cull.face=bi.FRONT,e.cull.enabled=!0}function Uat(e){e.cull.face=bi.BACK,e.cull.enabled=!0,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function kat(e){e.cull.face=bi.FRONT,e.cull.enabled=!0,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function Dat(e){e.cull.enabled=!1,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function kbe(e){e.cull.face=bi.BACK,e.cull.enabled=!0,e.depthMask=!1,e.blending=dn.ALPHA_BLEND}function Dbe(e){e.cull.face=bi.FRONT,e.cull.enabled=!0,e.depthMask=!1,e.blending=dn.ALPHA_BLEND}function Bat(e){e.cull.face=bi.BACK,e.cull.enabled=!0,e.blending.enabled=!1}function Yat(e){e.cull.face=bi.FRONT,e.cull.enabled=!0,e.blending.enabled=!1}function Oat(e,t,n,i,o){if(!d(i))return e;if(!n&&d(t))return t;let r=o[e.id];if(!d(r)){let s=De.getState(e);i(s),r=De.fromCache(s),o[e.id]=r}return r}function gV(e){return{u_classificationTexture:function(){return e._globeTranslucencyFramebuffer.classificationTexture}}}function Kat(e,t,n,i,o){return d(o)?!i&&d(n)?n:xt(t,o(e),!1):t}function bh(e){this.pass=e.pass,this.pickOnly=e.pickOnly,this.getShaderProgramFunction=e.getShaderProgramFunction,this.getRenderStateFunction=e.getRenderStateFunction,this.getUniformMapFunction=e.getUniformMapFunction,this.renderStateCache={}}function Hat(){return[new bh({pass:Re.GLOBE,pickOnly:!1,getShaderProgramFunction:Pat,getRenderStateFunction:Mat,getUniformMapFunction:void 0}),new bh({pass:Re.GLOBE,pickOnly:!1,getShaderProgramFunction:vat,getRenderStateFunction:Nat,getUniformMapFunction:void 0}),new bh({pass:Re.GLOBE,pickOnly:!1,getShaderProgramFunction:r4,getRenderStateFunction:Uat,getUniformMapFunction:void 0}),new bh({pass:Re.GLOBE,pickOnly:!1,getShaderProgramFunction:r4,getRenderStateFunction:kat,getUniformMapFunction:void 0}),new bh({pass:Re.GLOBE,pickOnly:!1,getShaderProgramFunction:r4,getRenderStateFunction:Dat,getUniformMapFunction:void 0}),new bh({pass:Re.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:s4,getRenderStateFunction:kbe,getUniformMapFunction:gV}),new bh({pass:Re.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:Hbe,getRenderStateFunction:Dbe,getUniformMapFunction:gV}),new bh({pass:Re.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:wat,getRenderStateFunction:kbe,getUniformMapFunction:gV}),new bh({pass:Re.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:Fat,getRenderStateFunction:Dbe,getUniformMapFunction:gV}),new bh({pass:Re.TRANSLUCENT,pickOnly:!0,getShaderProgramFunction:Ube,getRenderStateFunction:Bat,getUniformMapFunction:gV}),new bh({pass:Re.TRANSLUCENT,pickOnly:!0,getShaderProgramFunction:Ube,getRenderStateFunction:Yat,getUniformMapFunction:gV})]}var Bbe=new Array(rT),Ybe=new Array(rT);sT.prototype.updateDerivedCommands=function(e,t){let n=this._derivedCommandTypesToUpdate,i=this._derivedCommandsToUpdateLength;if(i!==0){for(let o=0;o<i;++o)Ybe[o]=this._derivedCommandPacks[n[o]],Bbe[o]=Kbe[n[o]];zat(this,e,i,n,Bbe,Ybe,t)}};function zat(e,t,n,i,o,r,s){let a=t.derivedCommands.globeTranslucency,c=e._derivedCommandsDirty;if(t.dirty||!d(a)||c){t.dirty=!1,d(a)||(a={},t.derivedCommands.globeTranslucency=a);let l=s.frameNumber,u=g(a.uniformMapDirtyFrame,0),m=g(a.shaderProgramDirtyFrame,0),p=g(a.renderStateDirtyFrame,0),y=a.uniformMap!==t.uniformMap,f=a.shaderProgramId!==t.shaderProgram.id,x=a.renderStateId!==t.renderState.id;y&&(a.uniformMapDirtyFrame=l),f&&(a.shaderProgramDirtyFrame=l),x&&(a.renderStateDirtyFrame=l),a.uniformMap=t.uniformMap,a.shaderProgramId=t.shaderProgram.id,a.renderStateId=t.renderState.id;for(let _=0;_<n;++_){let C=r[_],V=i[_],L=o[_],Z=a[L],G,X,P;d(Z)?(G=Z.uniformMap,X=Z.shaderProgram,P=Z.renderState):(G=void 0,X=void 0,P=void 0),Z=nt.shallowClone(t,Z),a[L]=Z;let v=g(Z.derivedCommands.uniformMapDirtyFrame,0),F=g(Z.derivedCommands.shaderProgramDirtyFrame,0),M=g(Z.derivedCommands.renderStateDirtyFrame,0),b=y||v<u,R=f||F<m,E=x||M<p;b&&(Z.derivedCommands.uniformMapDirtyFrame=l),R&&(Z.derivedCommands.shaderProgramDirtyFrame=l),E&&(Z.derivedCommands.renderStateDirtyFrame=l),Z.derivedCommands.type=V,Z.pass=C.pass,Z.pickOnly=C.pickOnly,Z.uniformMap=Kat(e,t.uniformMap,G,b,C.getUniformMapFunction),Z.shaderProgram=Aat(s.context,t.shaderProgram,X,R,C.getShaderProgramFunction,L),Z.renderState=Oat(t.renderState,P,E,C.getRenderStateFunction,C.renderStateCache)}}}sT.prototype.pushDerivedCommands=function(e,t,n){let i=n.passes.pick;if(i&&t)return;let o=this._derivedCommandTypes,r=this._derivedCommandsLength;if(i?(o=this._derivedPickCommandTypes,r=this._derivedPickCommandsLength):t&&(o=this._derivedBlendCommandTypes,r=this._derivedBlendCommandsLength),r===0){n.commandList.push(e);return}let s=e.derivedCommands.globeTranslucency;for(let a=0;a<r;++a){let c=Kbe[o[a]];n.commandList.push(s[c])}};function zbe(e,t,n,i,o,r,s){for(let a=0;a<t;++a){let c=e[a],l=c.derivedCommands.type;(!d(s)||s.indexOf(l)>-1)&&n(c,i,o,r)}}function Obe(e,t,n,i,o,r){for(let s=0;s<t;++s)n(e[s],i,o,r)}var Jat=[ra.OPAQUE_FRONT_FACE,ra.OPAQUE_BACK_FACE],Qat=[ra.DEPTH_ONLY_FRONT_FACE,ra.DEPTH_ONLY_BACK_FACE,ra.DEPTH_ONLY_FRONT_AND_BACK_FACE];sT.prototype.executeGlobeCommands=function(e,t,n,i,o){let r=i.context,s=e.commands[Re.GLOBE],a=e.indices[Re.GLOBE];a!==0&&(this._globeTranslucencyFramebuffer=n,n.clearClassification(r,o),zbe(s,a,t,i,r,o,Jat))};sT.prototype.executeGlobeClassificationCommands=function(e,t,n,i,o){let r=i.context,s=e.commands[Re.GLOBE],a=e.indices[Re.GLOBE],c=e.commands[Re.TERRAIN_CLASSIFICATION],l=e.indices[Re.TERRAIN_CLASSIFICATION];if(a===0||l===0)return;let u=this._frontFaceTranslucent,m=this._backFaceTranslucent;if((!u||!m)&&Obe(c,l,t,i,r,o),!u&&!m)return;this._globeTranslucencyFramebuffer=n;let p=r.uniformState.globeDepthTexture,y=o.framebuffer;if(o.framebuffer=n.classificationFramebuffer,zbe(s,a,t,i,r,o,Qat),r.depthTexture){let f=n.packDepth(r,o);r.uniformState.globeDepthTexture=f}Obe(c,l,t,i,r,o),r.uniformState.globeDepthTexture=p,o.framebuffer=y};var fw=sT;var VEi=T(S(),1);var rEi=T(S(),1),Al=`uniform sampler2D colorTexture;
  10086. in vec2 v_textureCoordinates;
  10087. void main()
  10088. {
  10089. out_FragColor = texture(colorTexture, v_textureCoordinates);
  10090. }
  10091. `;function Xf(){this._numSamples=1,this.previousFramebuffer=void 0,this._previousFramebuffer=void 0,this._depthStencilTexture=void 0,this._depthStencilRenderbuffer=void 0,this._fbo=new mi({depthStencil:!0,createDepthAttachments:!1}),this._fboClassified=new mi({depthStencil:!0,createDepthAttachments:!1}),this._rsUnclassified=void 0,this._rsClassified=void 0,this._unclassifiedCommand=void 0,this._classifiedCommand=void 0,this._translucentCommand=void 0,this._clearColorCommand=new oi({color:new Y(0,0,0,0),owner:this}),this._clearCommand=new oi({color:new Y(0,0,0,0),depth:1,stencil:0});let e=this;this._uniformMap={colorTexture:function(){return e._fbo.getColorTexture()},depthTexture:function(){return e._depthStencilTexture},classifiedTexture:function(){return e._fboClassified.getColorTexture()}}}Object.defineProperties(Xf.prototype,{unclassifiedCommand:{get:function(){return this._unclassifiedCommand}}});Xf.isTranslucencySupported=function(e){return e.depthTexture&&e.fragmentDepth};var jat={depthMask:!1,stencilTest:{enabled:!0,frontFunction:Dn.EQUAL,frontOperation:{fail:ht.KEEP,zFail:ht.KEEP,zPass:ht.KEEP},backFunction:Dn.NEVER,reference:0,mask:Ft.CLASSIFICATION_MASK},blending:dn.ALPHA_BLEND},qat={depthMask:!1,stencilTest:{enabled:!0,frontFunction:Dn.NOT_EQUAL,frontOperation:{fail:ht.KEEP,zFail:ht.KEEP,zPass:ht.KEEP},backFunction:Dn.NEVER,reference:0,mask:Ft.CLASSIFICATION_MASK},blending:dn.ALPHA_BLEND},$at={depthMask:!0,depthTest:{enabled:!0},stencilTest:Ft.setCesium3DTileBit(),stencilMask:Ft.CESIUM_3D_TILE_MASK,blending:dn.ALPHA_BLEND},ect=`uniform sampler2D colorTexture;
  10092. uniform sampler2D depthTexture;
  10093. uniform sampler2D classifiedTexture;
  10094. in vec2 v_textureCoordinates;
  10095. void main()
  10096. {
  10097. vec4 color = texture(colorTexture, v_textureCoordinates);
  10098. if (color.a == 0.0)
  10099. {
  10100. discard;
  10101. }
  10102. bool isClassified = all(equal(texture(classifiedTexture, v_textureCoordinates), vec4(0.0)));
  10103. #ifdef UNCLASSIFIED
  10104. vec4 highlightColor = czm_invertClassificationColor;
  10105. if (isClassified)
  10106. {
  10107. discard;
  10108. }
  10109. #else
  10110. vec4 highlightColor = vec4(1.0);
  10111. if (!isClassified)
  10112. {
  10113. discard;
  10114. }
  10115. #endif
  10116. out_FragColor = color * highlightColor;
  10117. gl_FragDepth = texture(depthTexture, v_textureCoordinates).r;
  10118. }
  10119. `,tct=`uniform sampler2D colorTexture;
  10120. in vec2 v_textureCoordinates;
  10121. void main()
  10122. {
  10123. vec4 color = texture(colorTexture, v_textureCoordinates);
  10124. if (color.a == 0.0)
  10125. {
  10126. discard;
  10127. }
  10128. #ifdef UNCLASSIFIED
  10129. out_FragColor = color * czm_invertClassificationColor;
  10130. #else
  10131. out_FragColor = color;
  10132. #endif
  10133. }
  10134. `;Xf.prototype.update=function(e,t,n){let i=this._fbo.getColorTexture(),o=this.previousFramebuffer!==this._previousFramebuffer;this._previousFramebuffer=this.previousFramebuffer;let r=this._numSamples!==t,s=e.drawingBufferWidth,a=e.drawingBufferHeight,c=!d(i)||i.width!==s||i.height!==a;if((c||o||r)&&(this._numSamples=t,this._depthStencilTexture=this._depthStencilTexture&&this._depthStencilTexture.destroy(),this._depthStencilRenderbuffer=this._depthStencilRenderbuffer&&this._depthStencilRenderbuffer.destroy(),d(this._previousFramebuffer)||(this._depthStencilTexture=new Wt({context:e,width:s,height:a,pixelFormat:st.DEPTH_STENCIL,pixelDatatype:Je.UNSIGNED_INT_24_8}),t>1&&(this._depthStencilRenderbuffer=new ed({context:e,width:s,height:a,format:Wc.DEPTH24_STENCIL8,numSamples:t})))),!d(this._fbo.framebuffer)||c||o||r){this._fbo.destroy(),this._fboClassified.destroy();let l,u;d(this._previousFramebuffer)?(l=n.getDepthStencilTexture(),u=n.getDepthStencilRenderbuffer()):(l=this._depthStencilTexture,u=this._depthStencilRenderbuffer),this._fbo.setDepthStencilTexture(l),d(u)&&this._fbo.setDepthStencilRenderbuffer(u),this._fbo.update(e,s,a,t),d(this._previousFramebuffer)||(this._fboClassified.setDepthStencilTexture(l),this._fboClassified.update(e,s,a))}if(d(this._rsUnclassified)||(this._rsUnclassified=De.fromCache(jat),this._rsClassified=De.fromCache(qat),this._rsDefault=De.fromCache($at)),!d(this._unclassifiedCommand)||o||r){d(this._unclassifiedCommand)&&(this._unclassifiedCommand.shaderProgram=this._unclassifiedCommand.shaderProgram&&this._unclassifiedCommand.shaderProgram.destroy(),this._classifiedCommand.shaderProgram=this._classifiedCommand.shaderProgram&&this._classifiedCommand.shaderProgram.destroy());let l=d(this._previousFramebuffer)?tct:ect,u=new Ye({defines:["UNCLASSIFIED"],sources:[l]}),m=new Ye({sources:[l]});this._unclassifiedCommand=e.createViewportQuadCommand(u,{renderState:d(this._previousFramebuffer)?this._rsUnclassified:this._rsDefault,uniformMap:this._uniformMap,owner:this}),this._classifiedCommand=e.createViewportQuadCommand(m,{renderState:d(this._previousFramebuffer)?this._rsClassified:this._rsDefault,uniformMap:this._uniformMap,owner:this}),d(this._translucentCommand)&&(this._translucentCommand.shaderProgram=this._translucentCommand.shaderProgram&&this._translucentCommand.shaderProgram.destroy()),d(this._previousFramebuffer)||(this._translucentCommand=e.createViewportQuadCommand(Al,{renderState:this._rsUnclassified,uniformMap:this._uniformMap,owner:this}))}};Xf.prototype.prepareTextures=function(e,t){this._fbo._numSamples>1&&this._fbo.prepareTextures(e,t)};Xf.prototype.clear=function(e,t){d(this._previousFramebuffer)?this._fbo.clear(e,this._clearColorCommand,t):(this._fbo.clear(e,this._clearCommand,t),this._fboClassified.clear(e,this._clearCommand,t))};Xf.prototype.executeClassified=function(e,t){if(!d(this._previousFramebuffer)){let n=t.framebuffer;this.prepareTextures(e,!0),t.framebuffer=this._fboClassified.framebuffer,this._translucentCommand.execute(e,t),t.framebuffer=n}this._classifiedCommand.execute(e,t)};Xf.prototype.executeUnclassified=function(e,t){this._unclassifiedCommand.execute(e,t)};Xf.prototype.isDestroyed=function(){return!1};Xf.prototype.destroy=function(){return this._fbo.destroy(),this._fboClassified.destroy(),this._depthStencilTexture=this._depthStencilTexture&&this._depthStencilTexture.destroy(),this._depthStencilRenderbuffer=this._depthStencilRenderbuffer&&this._depthStencilRenderbuffer.destroy(),d(this._unclassifiedCommand)&&(this._unclassifiedCommand.shaderProgram=this._unclassifiedCommand.shaderProgram&&this._unclassifiedCommand.shaderProgram.destroy(),this._classifiedCommand.shaderProgram=this._classifiedCommand.shaderProgram&&this._classifiedCommand.shaderProgram.destroy()),ue(this)};var xV=Xf;var EEi=T(S(),1);function Wk(e){this._total=e,this.usedThisFrame=0,this.stolenFromMeThisFrame=0,this.starvedThisFrame=!1,this.starvedLastFrame=!1}Object.defineProperties(Wk.prototype,{total:{get:function(){return this._total}}});function eg(e){let t=new Array(pa.NUMBER_OF_JOB_TYPES);t[pa.TEXTURE]=new Wk(d(e)?e[pa.TEXTURE]:10),t[pa.PROGRAM]=new Wk(d(e)?e[pa.PROGRAM]:10),t[pa.BUFFER]=new Wk(d(e)?e[pa.BUFFER]:30);let n=t.length,i,o=0;for(i=0;i<n;++i)o+=t[i].total;let r=new Array(n);for(i=0;i<n;++i)r[i]=!1;this._totalBudget=o,this._totalUsedThisFrame=0,this._budgets=t,this._executedThisFrame=r}eg.getTimestamp=gi;Object.defineProperties(eg.prototype,{totalBudget:{get:function(){return this._totalBudget}}});eg.prototype.disableThisFrame=function(){this._totalUsedThisFrame=this._totalBudget};eg.prototype.resetBudgets=function(){let e=this._budgets,t=e.length;for(let n=0;n<t;++n){let i=e[n];i.starvedLastFrame=i.starvedThisFrame,i.starvedThisFrame=!1,i.usedThisFrame=0,i.stolenFromMeThisFrame=0}this._totalUsedThisFrame=0};eg.prototype.execute=function(e,t){let n=this._budgets,i=n[t],o=this._executedThisFrame[t];if(this._totalUsedThisFrame>=this._totalBudget&&o)return i.starvedThisFrame=!0,!1;let r;if(i.usedThisFrame+i.stolenFromMeThisFrame>=i.total){let c=n.length,l;for(l=0;l<c&&(r=n[l],!(r.usedThisFrame+r.stolenFromMeThisFrame<r.total&&!r.starvedLastFrame));++l);if(l===c&&o)return!1;o&&(i.starvedThisFrame=!0)}let s=eg.getTimestamp();e.execute();let a=eg.getTimestamp()-s;return this._totalUsedThisFrame+=a,r?r.stolenFromMeThisFrame+=a:i.usedThisFrame+=a,this._executedThisFrame[t]=!0,!0};var pw=eg;var wEi=T(S(),1);function Pk(e){e=g(e,g.EMPTY_OBJECT);let t=En(e.container);this._container=t;let n=document.createElement("div");n.className="cesium-performanceDisplay";let i=document.createElement("div");i.className="cesium-performanceDisplay-fps",this._fpsText=document.createTextNode(""),i.appendChild(this._fpsText);let o=document.createElement("div");o.className="cesium-performanceDisplay-ms",this._msText=document.createTextNode(""),o.appendChild(this._msText),n.appendChild(o),n.appendChild(i),this._container.appendChild(n),this._lastFpsSampleTime=gi(),this._lastMsSampleTime=gi(),this._fpsFrameCount=0,this._msFrameCount=0,this._throttled=!1;let r=document.createElement("div");r.className="cesium-performanceDisplay-throttled",this._throttledText=document.createTextNode(""),r.appendChild(this._throttledText),n.appendChild(r)}Object.defineProperties(Pk.prototype,{throttled:{get:function(){return this._throttled},set:function(e){this._throttled!==e&&(e?this._throttledText.nodeValue="(throttled)":this._throttledText.nodeValue="",this._throttled=e)}}});Pk.prototype.update=function(e){let t=gi(),n=g(e,!0);this._fpsFrameCount++;let i=t-this._lastFpsSampleTime;if(i>1e3){let r="N/A";n&&(r=this._fpsFrameCount*1e3/i|0),this._fpsText.nodeValue=`${r} FPS`,this._lastFpsSampleTime=t,this._fpsFrameCount=0}this._msFrameCount++;let o=t-this._lastMsSampleTime;if(o>200){let r="N/A";n&&(r=(o/this._msFrameCount).toFixed(2)),this._msText.nodeValue=`${r} MS`,this._lastMsSampleTime=t,this._msFrameCount=0}};Pk.prototype.destroy=function(){return ue(this)};var U0=Pk;var V2i=T(S(),1);var DEi=T(S(),1);function aT(){this._framebuffer=new mi,this._textureToCopy=void 0,this._copyDepthCommand=void 0}Object.defineProperties(aT.prototype,{framebuffer:{get:function(){return this._framebuffer.framebuffer}}});function nct(e,t,n){let i=n.width,o=n.height;e._framebuffer.update(t,i,o)}function ict(e,t,n){if(!d(e._copyDepthCommand)){let i=`uniform highp sampler2D u_texture;
  10135. in vec2 v_textureCoordinates;
  10136. void main()
  10137. {
  10138. out_FragColor = czm_packDepth(texture(u_texture, v_textureCoordinates).r);
  10139. }
  10140. `;e._copyDepthCommand=t.createViewportQuadCommand(i,{renderState:De.fromCache(),uniformMap:{u_texture:function(){return e._textureToCopy}},owner:e})}e._textureToCopy=n,e._copyDepthCommand.framebuffer=e.framebuffer}aT.prototype.update=function(e,t){nct(this,e,t),ict(this,e,t)};var oct=new se,rct=new se(1,1/255,1/65025,1/16581375);aT.prototype.getDepth=function(e,t,n){if(!d(this.framebuffer))return;let i=e.readPixels({x:t,y:n,width:1,height:1,framebuffer:this.framebuffer}),o=se.unpack(i,0,oct);return se.divideByScalar(o,255,o),se.dot(o,rct)};aT.prototype.executeCopyDepth=function(e,t){this._copyDepthCommand.execute(e,t)};aT.prototype.isDestroyed=function(){return!1};aT.prototype.destroy=function(){return this._framebuffer.destroy(),d(this._copyDepthCommand)&&(this._copyDepthCommand.shaderProgram=d(this._copyDepthCommand.shaderProgram)&&this._copyDepthCommand.shaderProgram.destroy()),ue(this)};var bw=aT;var qWi=T(S(),1);var KEi=T(S(),1);function sct(e,t){this.near=g(e,0),this.far=g(t,0);let n=Re.NUMBER_OF_PASSES,i=new Array(n),o=new Array(n);for(let r=0;r<n;++r)i[r]=[],o[r]=0;this.commands=i,this.indices=o}var yw=sct;var dXi=T(S(),1);var zEi=T(S(),1),tg=`uniform highp sampler2D u_depthTexture;
  10141. in vec2 v_textureCoordinates;
  10142. void main()
  10143. {
  10144. out_FragColor = czm_packDepth(texture(u_depthTexture, v_textureCoordinates).r);
  10145. }
  10146. `;function If(){this._picking=!1,this._numSamples=1,this._tempCopyDepthTexture=void 0,this._pickColorFramebuffer=new mi({depthStencil:!0,supportsDepthTexture:!0}),this._outputFramebuffer=new mi({depthStencil:!0,supportsDepthTexture:!0}),this._copyDepthFramebuffer=new mi,this._tempCopyDepthFramebuffer=new mi,this._updateDepthFramebuffer=new mi({createColorAttachments:!1,createDepthAttachments:!1,depthStencil:!0}),this._clearGlobeColorCommand=void 0,this._copyColorCommand=void 0,this._copyDepthCommand=void 0,this._tempCopyDepthCommand=void 0,this._updateDepthCommand=void 0,this._viewport=new He,this._rs=void 0,this._rsBlend=void 0,this._rsUpdate=void 0,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useHdr=void 0,this._clearGlobeDepth=void 0}Object.defineProperties(If.prototype,{colorFramebufferManager:{get:function(){return this._picking?this._pickColorFramebuffer:this._outputFramebuffer}},framebuffer:{get:function(){return this.colorFramebufferManager.framebuffer}},depthStencilTexture:{get:function(){return this.colorFramebufferManager.getDepthStencilTexture()}},picking:{get:function(){return this._picking},set:function(e){this._picking=e}}});function act(e){e._pickColorFramebuffer.destroy(),e._outputFramebuffer.destroy(),e._copyDepthFramebuffer.destroy(),e._tempCopyDepthFramebuffer.destroy(),e._updateDepthFramebuffer.destroy()}function Jbe(e,t,n,i,o){e._viewport.width=n,e._viewport.height=i;let r=!He.equals(e._viewport,o.viewport),s=r!==e._useScissorTest;e._useScissorTest=r,He.equals(e._scissorRectangle,o.viewport)||(e._scissorRectangle=He.clone(o.viewport,e._scissorRectangle),s=!0),(!d(e._rs)||!He.equals(e._viewport,e._rs.viewport)||s)&&(e._rs=De.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}}),e._rsBlend=De.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},blending:dn.ALPHA_BLEND}),e._rsUpdate=De.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},stencilTest:{enabled:!0,frontFunction:Dn.EQUAL,frontOperation:{fail:ht.KEEP,zFail:ht.KEEP,zPass:ht.KEEP},backFunction:Dn.NEVER,reference:Ft.CESIUM_3D_TILE_MASK,mask:Ft.CESIUM_3D_TILE_MASK}})),d(e._copyDepthCommand)||(e._copyDepthCommand=t.createViewportQuadCommand(tg,{uniformMap:{u_depthTexture:function(){return e.colorFramebufferManager.getDepthStencilTexture()}},owner:e})),e._copyDepthCommand.framebuffer=e._copyDepthFramebuffer.framebuffer,e._copyDepthCommand.renderState=e._rs,d(e._copyColorCommand)||(e._copyColorCommand=t.createViewportQuadCommand(Al,{uniformMap:{colorTexture:function(){return e.colorFramebufferManager.getColorTexture()}},owner:e})),e._copyColorCommand.renderState=e._rs,d(e._tempCopyDepthCommand)||(e._tempCopyDepthCommand=t.createViewportQuadCommand(tg,{uniformMap:{u_depthTexture:function(){return e._tempCopyDepthTexture}},owner:e})),e._tempCopyDepthCommand.framebuffer=e._tempCopyDepthFramebuffer.framebuffer,e._tempCopyDepthCommand.renderState=e._rs,d(e._updateDepthCommand)||(e._updateDepthCommand=t.createViewportQuadCommand(Al,{uniformMap:{colorTexture:function(){return e._tempCopyDepthFramebuffer.getColorTexture()}},owner:e})),e._updateDepthCommand.framebuffer=e._updateDepthFramebuffer.framebuffer,e._updateDepthCommand.renderState=e._rsUpdate,d(e._clearGlobeColorCommand)||(e._clearGlobeColorCommand=new oi({color:new Y(0,0,0,0),stencil:0,owner:e})),e._clearGlobeColorCommand.framebuffer=e.framebuffer}If.prototype.update=function(e,t,n,i,o,r){let s=n.width,a=n.height,c=o?e.halfFloatingPointTexture?Je.HALF_FLOAT:Je.FLOAT:Je.UNSIGNED_BYTE;this._numSamples=i,this.picking?this._pickColorFramebuffer.update(e,s,a):this._outputFramebuffer.update(e,s,a,i,c),this._copyDepthFramebuffer.update(e,s,a),Jbe(this,e,s,a,t),e.uniformState.globeDepthTexture=void 0,this._useHdr=o,this._clearGlobeDepth=r};If.prototype.prepareColorTextures=function(e,t){!this.picking&&this._numSamples>1&&this._outputFramebuffer.prepareTextures(e,t)};If.prototype.executeCopyDepth=function(e,t){d(this._copyDepthCommand)&&(this.prepareColorTextures(e),this._copyDepthCommand.execute(e,t),e.uniformState.globeDepthTexture=this._copyDepthFramebuffer.getColorTexture())};If.prototype.executeUpdateDepth=function(e,t,n,i){let o=d(i)?i:t.framebuffer.depthStencilTexture;if(n||o!==this.colorFramebufferManager.getDepthStencilTexture()){if(d(this._updateDepthCommand)){if(!d(this._updateDepthFramebuffer.framebuffer)||this._updateDepthFramebuffer.getDepthStencilTexture()!==o||this._updateDepthFramebuffer.getColorTexture()!==this._copyDepthFramebuffer.getColorTexture()){let r=this._copyDepthFramebuffer.getColorTexture().width,s=this._copyDepthFramebuffer.getColorTexture().height;this._tempCopyDepthFramebuffer.destroy(),this._tempCopyDepthFramebuffer.update(e,r,s);let a=this._copyDepthFramebuffer.getColorTexture();this._updateDepthFramebuffer.setColorTexture(a,0),this._updateDepthFramebuffer.setDepthStencilTexture(o),this._updateDepthFramebuffer.update(e,r,s),Jbe(this,e,r,s,t)}this._tempCopyDepthTexture=o,this._tempCopyDepthCommand.execute(e,t),this._updateDepthCommand.execute(e,t)}return}d(this._copyDepthCommand)&&this._copyDepthCommand.execute(e,t)};If.prototype.executeCopyColor=function(e,t){d(this._copyColorCommand)&&this._copyColorCommand.execute(e,t)};If.prototype.clear=function(e,t,n){let i=this._clearGlobeColorCommand;d(i)&&(Y.clone(n,i.color),this.colorFramebufferManager.clear(e,i,t))};If.prototype.isDestroyed=function(){return!1};If.prototype.destroy=function(){return act(this),d(this._copyColorCommand)&&(this._copyColorCommand.shaderProgram=this._copyColorCommand.shaderProgram.destroy()),d(this._copyDepthCommand)&&(this._copyDepthCommand.shaderProgram=this._copyDepthCommand.shaderProgram.destroy()),d(this._tempCopyDepthCommand)&&(this._tempCopyDepthCommand.shaderProgram=this._tempCopyDepthCommand.shaderProgram.destroy()),d(this._updateDepthCommand)&&(this._updateDepthCommand.shaderProgram=this._updateDepthCommand.shaderProgram.destroy()),ue(this)};var gw=If;var TXi=T(S(),1);function cT(){this._framebuffer=new mi({depthStencil:!0,supportsDepthTexture:!0}),this._packedDepthFramebuffer=new mi,this._renderState=void 0,this._packedDepthCommand=void 0,this._clearCommand=void 0,this._viewport=new He,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useHdr=void 0}Object.defineProperties(cT.prototype,{classificationTexture:{get:function(){return this._framebuffer.getColorTexture()}},classificationFramebuffer:{get:function(){return this._framebuffer.framebuffer}},packedDepthFramebuffer:{get:function(){return this._packedDepthFramebuffer.framebuffer}},depthStencilTexture:{get:function(){return this._framebuffer.getDepthStencilTexture()}},depthStencilRenderbuffer:{get:function(){return this._framebuffer.getDepthStencilRenderbuffer()}},packedDepthTexture:{get:function(){return this._packedDepthFramebuffer.getColorTexture()}}});function cct(e){e._framebuffer.destroy(),e._packedDepthFramebuffer.destroy()}function lct(e,t,n,i,o){let r=o?t.halfFloatingPointTexture?Je.HALF_FLOAT:Je.FLOAT:Je.UNSIGNED_BYTE;e._framebuffer.update(t,n,i,1,r),e._packedDepthFramebuffer.update(t,n,i)}function dct(e,t,n,i,o){e._viewport.width=n,e._viewport.height=i;let r=!He.equals(e._viewport,o.viewport),s=r!==e._useScissorTest;e._useScissorTest=r,He.equals(e._scissorRectangle,o.viewport)||(e._scissorRectangle=He.clone(o.viewport,e._scissorRectangle),s=!0),(!d(e._renderState)||!He.equals(e._viewport,e._renderState.viewport)||s)&&(e._renderState=De.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}})),d(e._packedDepthCommand)||(e._packedDepthCommand=t.createViewportQuadCommand(tg,{uniformMap:{u_depthTexture:function(){return e.depthStencilTexture}},owner:e})),d(e._clearCommand)||(e._clearCommand=new oi({color:new Y(0,0,0,0),depth:1,stencil:0,owner:e})),e._packedDepthCommand.framebuffer=e._packedDepthFramebuffer.framebuffer,e._packedDepthCommand.renderState=e._renderState,e._clearCommand.framebuffer=e.classificationFramebuffer,e._clearCommand.renderState=e._renderState}cT.prototype.updateAndClear=function(e,t,n,i){let o=t.width,r=t.height;lct(this,n,o,r,e),dct(this,n,o,r,i),this._useHdr=e};cT.prototype.clearClassification=function(e,t){this._clearCommand.execute(e,t)};cT.prototype.packDepth=function(e,t){return this._packedDepthCommand.execute(e,t),this.packedDepthTexture};cT.prototype.isDestroyed=function(){return!1};cT.prototype.destroy=function(){return cct(this),ue(this)};var xw=cT;var UXi=T(S(),1);function k0(e){this._numSamples=1,this._translucentMultipassSupport=!1,this._translucentMRTSupport=!1;let t=e.colorBufferFloat&&e.depthTexture&&e.floatBlend;this._translucentMRTSupport=e.drawBuffers&&t,this._translucentMultipassSupport=!this._translucentMRTSupport&&t,this._opaqueFBO=void 0,this._opaqueTexture=void 0,this._depthStencilTexture=void 0,this._accumulationTexture=void 0,this._translucentFBO=new mi({colorAttachmentsLength:this._translucentMRTSupport?2:1,createColorAttachments:!1,createDepthAttachments:!1,depth:!0}),this._alphaFBO=new mi({createColorAttachments:!1,createDepthAttachments:!1,depth:!0}),this._adjustTranslucentFBO=new mi({colorAttachmentsLength:this._translucentMRTSupport?2:1,createColorAttachments:!1}),this._adjustAlphaFBO=new mi({createColorAttachments:!1}),this._opaqueClearCommand=new oi({color:new Y(0,0,0,0),owner:this}),this._translucentMRTClearCommand=new oi({color:new Y(0,0,0,1),owner:this}),this._translucentMultipassClearCommand=new oi({color:new Y(0,0,0,0),owner:this}),this._alphaClearCommand=new oi({color:new Y(1,1,1,1),owner:this}),this._translucentRenderStateCache={},this._alphaRenderStateCache={},this._compositeCommand=void 0,this._adjustTranslucentCommand=void 0,this._adjustAlphaCommand=void 0,this._viewport=new He,this._rs=void 0,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useHDR=!1}function Qbe(e){e._accumulationTexture=e._accumulationTexture&&!e._accumulationTexture.isDestroyed()&&e._accumulationTexture.destroy(),e._revealageTexture=e._revealageTexture&&!e._revealageTexture.isDestroyed()&&e._revealageTexture.destroy()}function a4(e){e._translucentFBO.destroy(),e._alphaFBO.destroy(),e._adjustTranslucentFBO.destroy(),e._adjustAlphaFBO.destroy()}function jbe(e){Qbe(e),a4(e)}function uct(e,t,n,i){Qbe(e),e._accumulationTexture=new Wt({context:t,width:n,height:i,pixelFormat:st.RGBA,pixelDatatype:Je.FLOAT});let o=new Float32Array(n*i*4);e._revealageTexture=new Wt({context:t,pixelFormat:st.RGBA,pixelDatatype:Je.FLOAT,source:{arrayBufferView:o,width:n,height:i},flipY:!1})}function mct(e,t){a4(e);let n=ne.FRAMEBUFFER_COMPLETE,i=!0,{width:o,height:r}=e._accumulationTexture;if(e._translucentMRTSupport&&(e._translucentFBO.setColorTexture(e._accumulationTexture,0),e._translucentFBO.setColorTexture(e._revealageTexture,1),e._translucentFBO.setDepthStencilTexture(e._depthStencilTexture),e._translucentFBO.update(t,o,r),e._adjustTranslucentFBO.setColorTexture(e._accumulationTexture,0),e._adjustTranslucentFBO.setColorTexture(e._revealageTexture,1),e._adjustTranslucentFBO.update(t,o,r),(e._translucentFBO.status!==n||e._adjustTranslucentFBO.status!==n)&&(a4(e),e._translucentMRTSupport=!1)),!e._translucentMRTSupport){e._translucentFBO.setColorTexture(e._accumulationTexture),e._translucentFBO.setDepthStencilTexture(e._depthStencilTexture),e._translucentFBO.update(t,o,r),e._alphaFBO.setColorTexture(e._revealageTexture),e._alphaFBO.setDepthStencilTexture(e._depthStencilTexture),e._alphaFBO.update(t,o,r),e._adjustTranslucentFBO.setColorTexture(e._accumulationTexture),e._adjustTranslucentFBO.update(t,o,r),e._adjustAlphaFBO.setColorTexture(e._revealageTexture),e._adjustAlphaFBO.update(t,o,r);let s=e._translucentFBO.status===n,a=e._alphaFBO.status===n,c=e._adjustTranslucentFBO.status===n,l=e._adjustAlphaFBO.status===n;(!s||!a||!c||!l)&&(jbe(e),e._translucentMultipassSupport=!1,i=!1)}return i}k0.prototype.update=function(e,t,n,i,o){if(!this.isSupported())return;this._opaqueFBO=n,this._opaqueTexture=n.getColorTexture(0),this._depthStencilTexture=n.getDepthStencilTexture();let{width:r,height:s}=this._opaqueTexture,a=this._accumulationTexture,c=!d(a)||a.width!==r||a.height!==s||i!==this._useHDR,l=this._numSamples!==o;if((c||l)&&(this._numSamples=o,uct(this,e,r,s)),(!d(this._translucentFBO.framebuffer)||c||l)&&!mct(this,e))return;this._useHDR=i;let u=this,m,p;d(this._compositeCommand)||(m=new Ye({sources:[lv]}),this._translucentMRTSupport&&m.defines.push("MRT"),p={u_opaque:function(){return u._opaqueTexture},u_accumulation:function(){return u._accumulationTexture},u_revealage:function(){return u._revealageTexture}},this._compositeCommand=e.createViewportQuadCommand(m,{uniformMap:p,owner:this})),d(this._adjustTranslucentCommand)||(this._translucentMRTSupport?(m=new Ye({defines:["MRT"],sources:[j1]}),p={u_bgColor:function(){return u._translucentMRTClearCommand.color},u_depthTexture:function(){return u._depthStencilTexture}},this._adjustTranslucentCommand=e.createViewportQuadCommand(m,{uniformMap:p,owner:this})):this._translucentMultipassSupport&&(m=new Ye({sources:[j1]}),p={u_bgColor:function(){return u._translucentMultipassClearCommand.color},u_depthTexture:function(){return u._depthStencilTexture}},this._adjustTranslucentCommand=e.createViewportQuadCommand(m,{uniformMap:p,owner:this}),p={u_bgColor:function(){return u._alphaClearCommand.color},u_depthTexture:function(){return u._depthStencilTexture}},this._adjustAlphaCommand=e.createViewportQuadCommand(m,{uniformMap:p,owner:this}))),this._viewport.width=r,this._viewport.height=s;let y=!He.equals(this._viewport,t.viewport),f=y!==this._useScissorTest;this._useScissorTest=y,He.equals(this._scissorRectangle,t.viewport)||(this._scissorRectangle=He.clone(t.viewport,this._scissorRectangle),f=!0),(!d(this._rs)||!He.equals(this._viewport,this._rs.viewport)||f)&&(this._rs=De.fromCache({viewport:this._viewport,scissorTest:{enabled:this._useScissorTest,rectangle:this._scissorRectangle}})),d(this._compositeCommand)&&(this._compositeCommand.renderState=this._rs),this._adjustTranslucentCommand&&(this._adjustTranslucentCommand.renderState=this._rs),d(this._adjustAlphaCommand)&&(this._adjustAlphaCommand.renderState=this._rs)};var hct={enabled:!0,color:new Y(0,0,0,0),equationRgb:da.ADD,equationAlpha:da.ADD,functionSourceRgb:_o.ONE,functionDestinationRgb:_o.ONE,functionSourceAlpha:_o.ZERO,functionDestinationAlpha:_o.ONE_MINUS_SOURCE_ALPHA},fct={enabled:!0,color:new Y(0,0,0,0),equationRgb:da.ADD,equationAlpha:da.ADD,functionSourceRgb:_o.ONE,functionDestinationRgb:_o.ONE,functionSourceAlpha:_o.ONE,functionDestinationAlpha:_o.ONE},pct={enabled:!0,color:new Y(0,0,0,0),equationRgb:da.ADD,equationAlpha:da.ADD,functionSourceRgb:_o.ZERO,functionDestinationRgb:_o.ONE_MINUS_SOURCE_ALPHA,functionSourceAlpha:_o.ZERO,functionDestinationAlpha:_o.ONE_MINUS_SOURCE_ALPHA};function c4(e,t,n,i){let o=n[i.id];if(!d(o)){let r=De.getState(i);r.depthMask=!1,r.blending=t,o=De.fromCache(r),n[i.id]=o}return o}function bct(e,t,n){return c4(t,hct,e._translucentRenderStateCache,n)}function yct(e,t,n){return c4(t,fct,e._translucentRenderStateCache,n)}function gct(e,t,n){return c4(t,pct,e._alphaRenderStateCache,n)}var xct=` vec3 Ci = czm_out_FragColor.rgb * czm_out_FragColor.a;
  10147. float ai = czm_out_FragColor.a;
  10148. float wzi = czm_alphaWeight(ai);
  10149. out_FragData_0 = vec4(Ci * wzi, ai);
  10150. out_FragData_1 = vec4(ai * wzi);
  10151. `,_ct=` vec3 Ci = czm_out_FragColor.rgb * czm_out_FragColor.a;
  10152. float ai = czm_out_FragColor.a;
  10153. float wzi = czm_alphaWeight(ai);
  10154. out_FragColor = vec4(Ci, ai) * wzi;
  10155. `,Tct=` float ai = czm_out_FragColor.a;
  10156. out_FragColor = vec4(ai);
  10157. `;function l4(e,t,n,i){let{shaderCache:o}=e,r=o.getDerivedShaderProgram(t,n);if(d(r))return r;let s=t._attributeLocations,a=t.fragmentShaderSource.clone();a.sources=a.sources.map(function(u){return Ye.replaceMain(u,"czm_translucent_main").replace(/out_FragColor/g,"czm_out_FragColor").replace(/layout\s*\(location\s*=\s*0\)\s*out\s+vec4\s+out_FragColor;/g,"").replace(/\bdiscard\b/g,"czm_discard = true").replace(/czm_phong/g,"czm_translucentPhong")}),a.sources.splice(0,0,`vec4 czm_out_FragColor;
  10158. bool czm_discard = false;
  10159. `);let c=[...i.matchAll(/out_FragData_(\d+)/g)],l="";for(let u=0;u<c.length;u++){let m=c[u];l=`layout (location = ${m[1]}) out vec4 ${m[0]};
  10160. ${l}`}return a.sources.push(l),a.sources.push(`void main()
  10161. {
  10162. czm_translucent_main();
  10163. if (czm_discard)
  10164. {
  10165. discard;
  10166. }
  10167. ${i}}
  10168. `),o.createDerivedShaderProgram(t,n,{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:a,attributeLocations:s})}function Sct(e,t){return l4(e,t,"translucentMRT",xct)}function Cct(e,t){return l4(e,t,"translucentMultipass",_ct)}function Vct(e,t){return l4(e,t,"alphaMultipass",Tct)}k0.prototype.createDerivedCommands=function(e,t,n){if(d(n)||(n={}),this._translucentMRTSupport){let a,c;return d(n.translucentCommand)&&(a=n.translucentCommand.shaderProgram,c=n.translucentCommand.renderState),n.translucentCommand=nt.shallowClone(e,n.translucentCommand),!d(a)||n.shaderProgramId!==e.shaderProgram.id?(n.translucentCommand.shaderProgram=Sct(t,e.shaderProgram),n.translucentCommand.renderState=bct(this,t,e.renderState),n.shaderProgramId=e.shaderProgram.id):(n.translucentCommand.shaderProgram=a,n.translucentCommand.renderState=c),n}let i,o,r,s;return d(n.translucentCommand)&&(i=n.translucentCommand.shaderProgram,o=n.translucentCommand.renderState,r=n.alphaCommand.shaderProgram,s=n.alphaCommand.renderState),n.translucentCommand=nt.shallowClone(e,n.translucentCommand),n.alphaCommand=nt.shallowClone(e,n.alphaCommand),!d(i)||n.shaderProgramId!==e.shaderProgram.id?(n.translucentCommand.shaderProgram=Cct(t,e.shaderProgram),n.translucentCommand.renderState=yct(this,t,e.renderState),n.alphaCommand.shaderProgram=Vct(t,e.shaderProgram),n.alphaCommand.renderState=gct(this,t,e.renderState),n.shaderProgramId=e.shaderProgram.id):(n.translucentCommand.shaderProgram=i,n.translucentCommand.renderState=o,n.alphaCommand.shaderProgram=r,n.alphaCommand.renderState=s),n};function Lct(e,t,n,i,o,r){let s,a,c,{context:l,frameState:u}=t,{useLogDepth:m,shadowState:p}=u,y=t._hdr,f=i.framebuffer,x=p.lightShadowsEnabled;i.framebuffer=e._adjustTranslucentFBO.framebuffer,e._adjustTranslucentCommand.execute(l,i),i.framebuffer=e._adjustAlphaFBO.framebuffer,e._adjustAlphaCommand.execute(l,i);let _=e._opaqueFBO.framebuffer;for(i.framebuffer=e._translucentFBO.framebuffer,c=0;c<o.length;++c)s=o[c],s=m?s.derivedCommands.logDepth.command:s,s=y?s.derivedCommands.hdr.command:s,a=x&&s.receiveShadows?s.derivedCommands.oit.shadows.translucentCommand:s.derivedCommands.oit.translucentCommand,n(a,t,l,i,_);for(d(r)&&(s=r.unclassifiedCommand,a=x&&s.receiveShadows?s.derivedCommands.oit.shadows.translucentCommand:s.derivedCommands.oit.translucentCommand,n(a,t,l,i,_)),i.framebuffer=e._alphaFBO.framebuffer,c=0;c<o.length;++c)s=o[c],s=m?s.derivedCommands.logDepth.command:s,s=y?s.derivedCommands.hdr.command:s,a=x&&s.receiveShadows?s.derivedCommands.oit.shadows.alphaCommand:s.derivedCommands.oit.alphaCommand,n(a,t,l,i,_);d(r)&&(s=r.unclassifiedCommand,a=x&&s.receiveShadows?s.derivedCommands.oit.shadows.alphaCommand:s.derivedCommands.oit.alphaCommand,n(a,t,l,i,_)),i.framebuffer=f}function Rct(e,t,n,i,o,r){let{context:s,frameState:a}=t,{useLogDepth:c,shadowState:l}=a,u=t._hdr,m=i.framebuffer,p=l.lightShadowsEnabled;i.framebuffer=e._adjustTranslucentFBO.framebuffer,e._adjustTranslucentCommand.execute(s,i);let y=e._opaqueFBO.framebuffer;i.framebuffer=e._translucentFBO.framebuffer;let f,x;for(let _=0;_<o.length;++_)f=o[_],f=c?f.derivedCommands.logDepth.command:f,f=u?f.derivedCommands.hdr.command:f,x=p&&f.receiveShadows?f.derivedCommands.oit.shadows.translucentCommand:f.derivedCommands.oit.translucentCommand,n(x,t,s,i,y);d(r)&&(f=r.unclassifiedCommand,x=p&&f.receiveShadows?f.derivedCommands.oit.shadows.translucentCommand:f.derivedCommands.oit.translucentCommand,n(x,t,s,i,y)),i.framebuffer=m}k0.prototype.executeCommands=function(e,t,n,i,o){if(this._translucentMRTSupport){Rct(this,e,t,n,i,o);return}Lct(this,e,t,n,i,o)};k0.prototype.execute=function(e,t){this._compositeCommand.execute(e,t)};k0.prototype.clear=function(e,t,n){let i=t.framebuffer;t.framebuffer=this._opaqueFBO.framebuffer,Y.clone(n,this._opaqueClearCommand.color),this._opaqueClearCommand.execute(e,t),t.framebuffer=this._translucentFBO.framebuffer,(this._translucentMRTSupport?this._translucentMRTClearCommand:this._translucentMultipassClearCommand).execute(e,t),this._translucentMultipassSupport&&(t.framebuffer=this._alphaFBO.framebuffer,this._alphaClearCommand.execute(e,t)),t.framebuffer=i};k0.prototype.isSupported=function(){return this._translucentMRTSupport||this._translucentMultipassSupport};k0.prototype.isDestroyed=function(){return!1};k0.prototype.destroy=function(){return jbe(this),d(this._compositeCommand)&&(this._compositeCommand.shaderProgram=this._compositeCommand.shaderProgram&&this._compositeCommand.shaderProgram.destroy()),d(this._adjustTranslucentCommand)&&(this._adjustTranslucentCommand.shaderProgram=this._adjustTranslucentCommand.shaderProgram&&this._adjustTranslucentCommand.shaderProgram.destroy()),d(this._adjustAlphaCommand)&&(this._adjustAlphaCommand.shaderProgram=this._adjustAlphaCommand.shaderProgram&&this._adjustAlphaCommand.shaderProgram.destroy()),ue(this)};var _w=k0;var KXi=T(S(),1);function Tw(){this._framebuffer=new mi({color:!1,depthStencil:!0,supportsDepthTexture:!0}),this._passState=void 0}Object.defineProperties(Tw.prototype,{framebuffer:{get:function(){return this._framebuffer.framebuffer}}});function Zct(e){e._framebuffer.destroy()}function Gct(e,t){let n=t.drawingBufferWidth,i=t.drawingBufferHeight;e._framebuffer.update(t,n,i);let o=new oc(t);o.blendingEnabled=!1,o.scissorTest={enabled:!0,rectangle:new He},o.viewport=new He,e._passState=o}Tw.prototype.update=function(e,t,n){let i=n.width,o=n.height;this._framebuffer.isDirty(i,o)&&Gct(this,e);let r=this.framebuffer,s=this._passState;return s.framebuffer=r,s.viewport.width=i,s.viewport.height=o,s.scissorTest.rectangle.x=t.x,s.scissorTest.rectangle.y=o-t.y,s.scissorTest.rectangle.width=1,s.scissorTest.rectangle.height=1,s};Tw.prototype.isDestroyed=function(){return!1};Tw.prototype.destroy=function(){return Zct(this),ue(this)};var Sw=Tw;var tIi=T(S(),1);function Vw(e){let t=new oc(e);t.blendingEnabled=!1,t.scissorTest={enabled:!0,rectangle:new He},t.viewport=new He,this._context=e,this._fb=new mi({depthStencil:!0}),this._passState=t,this._width=0,this._height=0}Vw.prototype.begin=function(e,t){let n=this._context,i=t.width,o=t.height;return He.clone(e,this._passState.scissorTest.rectangle),this._width=i,this._height=o,this._fb.update(n,i,o),this._passState.framebuffer=this._fb.framebuffer,this._passState.viewport.width=i,this._passState.viewport.height=o,this._passState};var Cw=new Y;Vw.prototype.end=function(e){let t=g(e.width,1),n=g(e.height,1),i=this._context,o=i.readPixels({x:e.x,y:e.y,width:t,height:n,framebuffer:this._fb.framebuffer}),r=Math.max(t,n),s=r*r,a=Math.floor(t*.5),c=Math.floor(n*.5),l=0,u=0,m=0,p=-1;for(let y=0;y<s;++y){if(-a<=l&&l<=a&&-c<=u&&u<=c){let f=4*((c-u)*t+l+a);Cw.red=Y.byteToFloat(o[f]),Cw.green=Y.byteToFloat(o[f+1]),Cw.blue=Y.byteToFloat(o[f+2]),Cw.alpha=Y.byteToFloat(o[f+3]);let x=i.getObjectByPickColor(Cw);if(d(x))return x}if(l===u||l<0&&-l===u||l>0&&l===1-u){let f=m;m=-p,p=f}l+=m,u+=p}};Vw.prototype.isDestroyed=function(){return!1};Vw.prototype.destroy=function(){return this._fb.destroy(),ue(this)};var Lw=Vw;var cIi=T(S(),1);function D0(){this._numSamples=1,this._colorFramebuffer=new mi({depthStencil:!0,supportsDepthTexture:!0}),this._idFramebuffer=new mi({depthStencil:!0,supportsDepthTexture:!0}),this._idClearColor=new Y(0,0,0,0),this._clearCommand=new oi({color:new Y(0,0,0,0),depth:1,owner:this})}function Ect(e){e._colorFramebuffer.destroy(),e._idFramebuffer.destroy()}Object.defineProperties(D0.prototype,{framebuffer:{get:function(){return this._colorFramebuffer.framebuffer}},idFramebuffer:{get:function(){return this._idFramebuffer.framebuffer}},depthStencilTexture:{get:function(){return this._colorFramebuffer.getDepthStencilTexture()}}});D0.prototype.update=function(e,t,n,i){let o=t.width,r=t.height,s=n?e.halfFloatingPointTexture?Je.HALF_FLOAT:Je.FLOAT:Je.UNSIGNED_BYTE;this._numSamples=i,this._colorFramebuffer.update(e,o,r,i,s),this._idFramebuffer.update(e,o,r)};D0.prototype.clear=function(e,t,n){Y.clone(n,this._clearCommand.color),Y.clone(this._idClearColor,this._clearCommand.color),this._colorFramebuffer.clear(e,this._clearCommand,t),this._idFramebuffer.clear(e,this._clearCommand,t)};D0.prototype.getFramebuffer=function(){return this._colorFramebuffer.framebuffer};D0.prototype.getIdFramebuffer=function(){return this._idFramebuffer.framebuffer};D0.prototype.prepareColorTextures=function(e){this._numSamples>1&&this._colorFramebuffer.prepareTextures(e)};D0.prototype.isDestroyed=function(){return!1};D0.prototype.destroy=function(){return Ect(this),ue(this)};var lT=D0;var rWi=T(S(),1);var mIi=T(S(),1);function dT(){}dT.getShadowCastShaderKeyword=function(e,t,n,i){return`castShadow ${e} ${t} ${n} ${i}`};dT.createShadowCastVertexShader=function(e,t,n){let i=e.defines.slice(0),o=e.sources.slice(0);i.push("SHADOW_MAP"),n&&i.push("GENERATE_POSITION");let r=Ye.findPositionVarying(e),s=d(r);if(t&&!s){let a=o.length;for(let l=0;l<a;++l)o[l]=Ye.replaceMain(o[l],"czm_shadow_cast_main");let c=`out vec3 v_positionEC;
  10169. void main()
  10170. {
  10171. czm_shadow_cast_main();
  10172. v_positionEC = (czm_inverseProjection * gl_Position).xyz;
  10173. }`;o.push(c)}return new Ye({defines:i,sources:o})};dT.createShadowCastFragmentShader=function(e,t,n,i){let o=e.defines.slice(0),r=e.sources.slice(0);o.push("SHADOW_MAP");let s=Ye.findPositionVarying(e),a=d(s);a||(s="v_positionEC");let c=r.length;for(let u=0;u<c;++u)r[u]=Ye.replaceMain(r[u],"czm_shadow_cast_main");let l="";return t&&(a||(l+=`in vec3 v_positionEC;
  10174. `),l+=`uniform vec4 shadowMap_lightPositionEC;
  10175. `),i?l+=`void main()
  10176. {
  10177. `:l+=`void main()
  10178. {
  10179. czm_shadow_cast_main();
  10180. if (out_FragColor.a == 0.0)
  10181. {
  10182. discard;
  10183. }
  10184. `,t?l+=` float distance = length(${s});
  10185. if (distance >= shadowMap_lightPositionEC.w)
  10186. {
  10187. discard;
  10188. }
  10189. distance /= shadowMap_lightPositionEC.w; // radius
  10190. out_FragColor = czm_packDepth(distance);
  10191. `:n?l+=` out_FragColor = vec4(1.0);
  10192. `:l+=` out_FragColor = czm_packDepth(gl_FragCoord.z);
  10193. `,l+=`}
  10194. `,r.push(l),new Ye({defines:o,sources:r})};dT.getShadowReceiveShaderKeyword=function(e,t,n,i){let o=e._usesDepthTexture,r=e._polygonOffsetSupported,s=e._isPointLight,a=e._isSpotLight,c=e._numberOfCascades>1,l=e.debugCascadeColors,u=e.softShadows;return`receiveShadow ${o}${r}${s}${a}${c}${l}${u}${t}${n}${i}`};dT.createShadowReceiveVertexShader=function(e,t,n){let i=e.defines.slice(0),o=e.sources.slice(0);return i.push("SHADOW_MAP"),t&&(n?i.push("GENERATE_POSITION_AND_NORMAL"):i.push("GENERATE_POSITION")),new Ye({defines:i,sources:o})};dT.createShadowReceiveFragmentShader=function(e,t,n,i,o){let r=Ye.findNormalVarying(e),s=!i&&d(r)||i&&o,a=Ye.findPositionVarying(e),c=d(a),l=t._usesDepthTexture,u=t._polygonOffsetSupported,m=t._isPointLight,p=t._isSpotLight,y=t._numberOfCascades>1,f=t.debugCascadeColors,x=t.softShadows,_=m?t._pointBias:i?t._terrainBias:t._primitiveBias,C=e.defines.slice(0),V=e.sources.slice(0),L=V.length;for(let X=0;X<L;++X)V[X]=Ye.replaceMain(V[X],"czm_shadow_receive_main");m?C.push("USE_CUBE_MAP_SHADOW"):l&&C.push("USE_SHADOW_DEPTH_TEXTURE"),x&&!m&&C.push("USE_SOFT_SHADOWS"),y&&n&&i&&(s?C.push("ENABLE_VERTEX_LIGHTING"):C.push("ENABLE_DAYNIGHT_SHADING")),n&&_.normalShading&&s&&(C.push("USE_NORMAL_SHADING"),_.normalShadingSmooth>0&&C.push("USE_NORMAL_SHADING_SMOOTH"));let Z="";m?Z+=`uniform samplerCube shadowMap_textureCube;
  10195. `:Z+=`uniform sampler2D shadowMap_texture;
  10196. `;let G;return c?G=` return vec4(${a}, 1.0);
  10197. `:G=`#ifndef LOG_DEPTH
  10198. return czm_windowToEyeCoordinates(gl_FragCoord);
  10199. #else
  10200. return vec4(v_logPositionEC, 1.0);
  10201. #endif
  10202. `,Z+=`uniform mat4 shadowMap_matrix;
  10203. uniform vec3 shadowMap_lightDirectionEC;
  10204. uniform vec4 shadowMap_lightPositionEC;
  10205. uniform vec4 shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness;
  10206. uniform vec4 shadowMap_texelSizeDepthBiasAndNormalShadingSmooth;
  10207. #ifdef LOG_DEPTH
  10208. in vec3 v_logPositionEC;
  10209. #endif
  10210. vec4 getPositionEC()
  10211. {
  10212. ${G}}
  10213. vec3 getNormalEC()
  10214. {
  10215. ${s?` return normalize(${r});
  10216. `:` return vec3(1.0);
  10217. `}}
  10218. void applyNormalOffset(inout vec4 positionEC, vec3 normalEC, float nDotL)
  10219. {
  10220. ${_.normalOffset&&s?` float normalOffset = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.x;
  10221. float normalOffsetScale = 1.0 - nDotL;
  10222. vec3 offset = normalOffset * normalOffsetScale * normalEC;
  10223. positionEC.xyz += offset;
  10224. `:""}}
  10225. `,Z+=`void main()
  10226. {
  10227. czm_shadow_receive_main();
  10228. vec4 positionEC = getPositionEC();
  10229. vec3 normalEC = getNormalEC();
  10230. float depth = -positionEC.z;
  10231. `,Z+=` czm_shadowParameters shadowParameters;
  10232. shadowParameters.texelStepSize = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.xy;
  10233. shadowParameters.depthBias = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.z;
  10234. shadowParameters.normalShadingSmooth = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.w;
  10235. shadowParameters.darkness = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.w;
  10236. `,i?Z+=` shadowParameters.depthBias *= max(depth * 0.01, 1.0);
  10237. `:u||(Z+=` shadowParameters.depthBias *= mix(1.0, 100.0, depth * 0.0015);
  10238. `),m?Z+=` vec3 directionEC = positionEC.xyz - shadowMap_lightPositionEC.xyz;
  10239. float distance = length(directionEC);
  10240. directionEC = normalize(directionEC);
  10241. float radius = shadowMap_lightPositionEC.w;
  10242. // Stop early if the fragment is beyond the point light radius
  10243. if (distance > radius)
  10244. {
  10245. return;
  10246. }
  10247. vec3 directionWC = czm_inverseViewRotation * directionEC;
  10248. shadowParameters.depth = distance / radius;
  10249. shadowParameters.nDotL = clamp(dot(normalEC, -directionEC), 0.0, 1.0);
  10250. shadowParameters.texCoords = directionWC;
  10251. float visibility = czm_shadowVisibility(shadowMap_textureCube, shadowParameters);
  10252. `:p?Z+=` vec3 directionEC = normalize(positionEC.xyz - shadowMap_lightPositionEC.xyz);
  10253. float nDotL = clamp(dot(normalEC, -directionEC), 0.0, 1.0);
  10254. applyNormalOffset(positionEC, normalEC, nDotL);
  10255. vec4 shadowPosition = shadowMap_matrix * positionEC;
  10256. // Spot light uses a perspective projection, so perform the perspective divide
  10257. shadowPosition /= shadowPosition.w;
  10258. // Stop early if the fragment is not in the shadow bounds
  10259. if (any(lessThan(shadowPosition.xyz, vec3(0.0))) || any(greaterThan(shadowPosition.xyz, vec3(1.0))))
  10260. {
  10261. return;
  10262. }
  10263. shadowParameters.texCoords = shadowPosition.xy;
  10264. shadowParameters.depth = shadowPosition.z;
  10265. shadowParameters.nDotL = nDotL;
  10266. float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters);
  10267. `:y?Z+=` float maxDepth = shadowMap_cascadeSplits[1].w;
  10268. // Stop early if the eye depth exceeds the last cascade
  10269. if (depth > maxDepth)
  10270. {
  10271. return;
  10272. }
  10273. // Get the cascade based on the eye-space depth
  10274. vec4 weights = czm_cascadeWeights(depth);
  10275. // Apply normal offset
  10276. float nDotL = clamp(dot(normalEC, shadowMap_lightDirectionEC), 0.0, 1.0);
  10277. applyNormalOffset(positionEC, normalEC, nDotL);
  10278. // Transform position into the cascade
  10279. vec4 shadowPosition = czm_cascadeMatrix(weights) * positionEC;
  10280. // Get visibility
  10281. shadowParameters.texCoords = shadowPosition.xy;
  10282. shadowParameters.depth = shadowPosition.z;
  10283. shadowParameters.nDotL = nDotL;
  10284. float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters);
  10285. // Fade out shadows that are far away
  10286. float shadowMapMaximumDistance = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.z;
  10287. float fade = max((depth - shadowMapMaximumDistance * 0.8) / (shadowMapMaximumDistance * 0.2), 0.0);
  10288. visibility = mix(visibility, 1.0, fade);
  10289. ${f?` // Draw cascade colors for debugging
  10290. out_FragColor *= czm_cascadeColor(weights);
  10291. `:""}`:Z+=` float nDotL = clamp(dot(normalEC, shadowMap_lightDirectionEC), 0.0, 1.0);
  10292. applyNormalOffset(positionEC, normalEC, nDotL);
  10293. vec4 shadowPosition = shadowMap_matrix * positionEC;
  10294. // Stop early if the fragment is not in the shadow bounds
  10295. if (any(lessThan(shadowPosition.xyz, vec3(0.0))) || any(greaterThan(shadowPosition.xyz, vec3(1.0))))
  10296. {
  10297. return;
  10298. }
  10299. shadowParameters.texCoords = shadowPosition.xy;
  10300. shadowParameters.depth = shadowPosition.z;
  10301. shadowParameters.nDotL = nDotL;
  10302. float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters);
  10303. `,Z+=` out_FragColor.rgb *= visibility;
  10304. }
  10305. `,V.push(Z),new Ye({defines:C,sources:V})};var Wf=dT;function Pf(e){e=g(e,g.EMPTY_OBJECT);let t=e.context;this._enabled=g(e.enabled,!0),this._softShadows=g(e.softShadows,!1),this._normalOffset=g(e.normalOffset,!0),this.dirty=!0,this.fromLightSource=g(e.fromLightSource,!0),this.darkness=g(e.darkness,.3),this._darkness=this.darkness,this.fadingEnabled=g(e.fadingEnabled,!0),this.maximumDistance=g(e.maximumDistance,5e3),this._outOfView=!1,this._outOfViewPrevious=!1,this._needsUpdate=!0;let n=!0;(Mt.isInternetExplorer()||Mt.isEdge()||(Mt.isChrome()||Mt.isFirefox())&&Mt.isWindows()&&!t.depthTexture)&&(n=!1),this._polygonOffsetSupported=n,this._terrainBias={polygonOffset:n,polygonOffsetFactor:1.1,polygonOffsetUnits:4,normalOffset:this._normalOffset,normalOffsetScale:.5,normalShading:!0,normalShadingSmooth:.3,depthBias:1e-4},this._primitiveBias={polygonOffset:n,polygonOffsetFactor:1.1,polygonOffsetUnits:4,normalOffset:this._normalOffset,normalOffsetScale:.1,normalShading:!0,normalShadingSmooth:.05,depthBias:2e-5},this._pointBias={polygonOffset:!1,polygonOffsetFactor:1.1,polygonOffsetUnits:4,normalOffset:this._normalOffset,normalOffsetScale:0,normalShading:!0,normalShadingSmooth:.1,depthBias:5e-4},this._depthAttachment=void 0,this._colorAttachment=void 0,this._shadowMapMatrix=new A,this._shadowMapTexture=void 0,this._lightDirectionEC=new h,this._lightPositionEC=new se,this._distance=0,this._lightCamera=e.lightCamera,this._shadowMapCamera=new vk,this._shadowMapCullingVolume=void 0,this._sceneCamera=void 0,this._boundingSphere=new ce,this._isPointLight=g(e.isPointLight,!1),this._pointLightRadius=g(e.pointLightRadius,100),this._cascadesEnabled=this._isPointLight?!1:g(e.cascadesEnabled,!0),this._numberOfCascades=this._cascadesEnabled?g(e.numberOfCascades,4):0,this._fitNearFar=!0,this._maximumCascadeDistances=[25,150,700,Number.MAX_VALUE],this._textureSize=new D,this._isSpotLight=!1,this._cascadesEnabled?this._shadowMapCamera.frustum=new yr:d(this._lightCamera.frustum.fov)&&(this._isSpotLight=!0),this._cascadeSplits=[new se,new se],this._cascadeMatrices=[new A,new A,new A,new A],this._cascadeDistances=new se;let i;this._isPointLight?i=6:this._cascadesEnabled?i=this._numberOfCascades:i=1,this._passes=new Array(i);for(let o=0;o<i;++o)this._passes[o]=new Xct(t);this.debugShow=!1,this.debugFreezeFrame=!1,this._debugFreezeFrame=!1,this._debugCascadeColors=!1,this._debugLightFrustum=void 0,this._debugCameraFrustum=void 0,this._debugCascadeFrustums=new Array(this._numberOfCascades),this._debugShadowViewCommand=void 0,this._usesDepthTexture=t.depthTexture,this._isPointLight&&(this._usesDepthTexture=!1),this._primitiveRenderState=void 0,this._terrainRenderState=void 0,this._pointRenderState=void 0,u4(this),this._clearCommand=new oi({depth:1,color:new Y}),this._clearPassState=new oc(t),this._size=g(e.size,2048),this.size=this._size}Pf.MAXIMUM_DISTANCE=2e4;function Xct(e){this.camera=new vk,this.passState=new oc(e),this.framebuffer=void 0,this.textureOffsets=void 0,this.commandList=[],this.cullingVolume=void 0}function d4(e,t){return De.fromCache({cull:{enabled:!0,face:bi.BACK},depthTest:{enabled:!0},colorMask:{red:e,green:e,blue:e,alpha:e},depthMask:!0,polygonOffset:{enabled:t.polygonOffset,factor:t.polygonOffsetFactor,units:t.polygonOffsetUnits}})}function u4(e){let t=!e._usesDepthTexture;e._primitiveRenderState=d4(t,e._primitiveBias),e._terrainRenderState=d4(t,e._terrainBias),e._pointRenderState=d4(t,e._pointBias)}Pf.prototype.debugCreateRenderStates=function(){u4(this)};Object.defineProperties(Pf.prototype,{enabled:{get:function(){return this._enabled},set:function(e){this.dirty=this._enabled!==e,this._enabled=e}},normalOffset:{get:function(){return this._normalOffset},set:function(e){this.dirty=this._normalOffset!==e,this._normalOffset=e,this._terrainBias.normalOffset=e,this._primitiveBias.normalOffset=e,this._pointBias.normalOffset=e}},softShadows:{get:function(){return this._softShadows},set:function(e){this.dirty=this._softShadows!==e,this._softShadows=e}},size:{get:function(){return this._size},set:function(e){Fct(this,e)}},outOfView:{get:function(){return this._outOfView}},shadowMapCullingVolume:{get:function(){return this._shadowMapCullingVolume}},passes:{get:function(){return this._passes}},isPointLight:{get:function(){return this._isPointLight}},debugCascadeColors:{get:function(){return this._debugCascadeColors},set:function(e){this.dirty=this._debugCascadeColors!==e,this._debugCascadeColors=e}}});function m4(e){let t=e._passes.length;for(let n=0;n<t;++n){let i=e._passes[n],o=i.framebuffer;d(o)&&!o.isDestroyed()&&o.destroy(),i.framebuffer=void 0}e._depthAttachment=e._depthAttachment&&e._depthAttachment.destroy(),e._colorAttachment=e._colorAttachment&&e._colorAttachment.destroy()}function Ict(e,t){let n=new ed({context:t,width:e._textureSize.x,height:e._textureSize.y,format:Wc.DEPTH_COMPONENT16}),i=new Wt({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:st.RGBA,pixelDatatype:Je.UNSIGNED_BYTE,sampler:un.NEAREST}),o=new Os({context:t,depthRenderbuffer:n,colorTextures:[i],destroyAttachments:!1}),r=e._passes.length;for(let s=0;s<r;++s){let a=e._passes[s];a.framebuffer=o,a.passState.framebuffer=o}e._shadowMapTexture=i,e._depthAttachment=n,e._colorAttachment=i}function Wct(e,t){let n=new Wt({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:st.DEPTH_STENCIL,pixelDatatype:Je.UNSIGNED_INT_24_8,sampler:un.NEAREST}),i=new Os({context:t,depthStencilTexture:n,destroyAttachments:!1}),o=e._passes.length;for(let r=0;r<o;++r){let s=e._passes[r];s.framebuffer=i,s.passState.framebuffer=i}e._shadowMapTexture=n,e._depthAttachment=n}function Pct(e,t){let n=new ed({context:t,width:e._textureSize.x,height:e._textureSize.y,format:Wc.DEPTH_COMPONENT16}),i=new Ma({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:st.RGBA,pixelDatatype:Je.UNSIGNED_BYTE,sampler:un.NEAREST}),o=[i.negativeX,i.negativeY,i.negativeZ,i.positiveX,i.positiveY,i.positiveZ];for(let r=0;r<6;++r){let s=new Os({context:t,depthRenderbuffer:n,colorTextures:[o[r]],destroyAttachments:!1}),a=e._passes[r];a.framebuffer=s,a.passState.framebuffer=s}e._shadowMapTexture=i,e._depthAttachment=n,e._colorAttachment=i}function eye(e,t){e._isPointLight?Pct(e,t):e._usesDepthTexture?Wct(e,t):Ict(e,t)}function vct(e,t){e._usesDepthTexture&&e._passes[0].framebuffer.status!==ne.FRAMEBUFFER_COMPLETE&&(e._usesDepthTexture=!1,u4(e),m4(e),eye(e,t))}function wct(e,t){(!d(e._passes[0].framebuffer)||e._shadowMapTexture.width!==e._textureSize.x)&&(m4(e),eye(e,t),vct(e,t),tye(e,t))}function tye(e,t,n){n=g(n,0),(e._isPointLight||n===0)&&(e._clearCommand.framebuffer=e._passes[n].framebuffer,e._clearCommand.execute(t,e._clearPassState))}function Fct(e,t){e._size=t;let n=e._passes,i=n.length,o=e._textureSize;if(e._isPointLight){t=kt.maximumCubeMapSize>=t?t:kt.maximumCubeMapSize,o.x=t,o.y=t;let r=new He(0,0,t,t);n[0].passState.viewport=r,n[1].passState.viewport=r,n[2].passState.viewport=r,n[3].passState.viewport=r,n[4].passState.viewport=r,n[5].passState.viewport=r}else i===1?(t=kt.maximumTextureSize>=t?t:kt.maximumTextureSize,o.x=t,o.y=t,n[0].passState.viewport=new He(0,0,t,t)):i===4&&(t=kt.maximumTextureSize>=t*2?t:kt.maximumTextureSize/2,o.x=t*2,o.y=t*2,n[0].passState.viewport=new He(0,0,t,t),n[1].passState.viewport=new He(t,0,t,t),n[2].passState.viewport=new He(0,t,t,t),n[3].passState.viewport=new He(t,t,t,t));e._clearPassState.viewport=new He(0,0,o.x,o.y);for(let r=0;r<i;++r){let s=n[r],a=s.passState.viewport,c=a.x/o.x,l=a.y/o.y,u=a.width/o.x,m=a.height/o.y;s.textureOffsets=new A(u,0,0,c,0,m,0,l,0,0,1,0,0,0,0,1)}}var Act=new He;function Mct(e,t){let n;e._isPointLight?n=`uniform samplerCube shadowMap_textureCube;
  10306. in vec2 v_textureCoordinates;
  10307. void main()
  10308. {
  10309. vec2 uv = v_textureCoordinates;
  10310. vec3 dir;
  10311. if (uv.y < 0.5)
  10312. {
  10313. if (uv.x < 0.333)
  10314. {
  10315. dir.x = -1.0;
  10316. dir.y = uv.x * 6.0 - 1.0;
  10317. dir.z = uv.y * 4.0 - 1.0;
  10318. }
  10319. else if (uv.x < 0.666)
  10320. {
  10321. dir.y = -1.0;
  10322. dir.x = uv.x * 6.0 - 3.0;
  10323. dir.z = uv.y * 4.0 - 1.0;
  10324. }
  10325. else
  10326. {
  10327. dir.z = -1.0;
  10328. dir.x = uv.x * 6.0 - 5.0;
  10329. dir.y = uv.y * 4.0 - 1.0;
  10330. }
  10331. }
  10332. else
  10333. {
  10334. if (uv.x < 0.333)
  10335. {
  10336. dir.x = 1.0;
  10337. dir.y = uv.x * 6.0 - 1.0;
  10338. dir.z = uv.y * 4.0 - 3.0;
  10339. }
  10340. else if (uv.x < 0.666)
  10341. {
  10342. dir.y = 1.0;
  10343. dir.x = uv.x * 6.0 - 3.0;
  10344. dir.z = uv.y * 4.0 - 3.0;
  10345. }
  10346. else
  10347. {
  10348. dir.z = 1.0;
  10349. dir.x = uv.x * 6.0 - 5.0;
  10350. dir.y = uv.y * 4.0 - 3.0;
  10351. }
  10352. }
  10353. float shadow = czm_unpackDepth(czm_textureCube(shadowMap_textureCube, dir));
  10354. out_FragColor = vec4(vec3(shadow), 1.0);
  10355. }
  10356. `:n=`uniform sampler2D shadowMap_texture;
  10357. in vec2 v_textureCoordinates;
  10358. void main()
  10359. {
  10360. ${e._usesDepthTexture?` float shadow = texture(shadowMap_texture, v_textureCoordinates).r;
  10361. `:` float shadow = czm_unpackDepth(texture(shadowMap_texture, v_textureCoordinates));
  10362. `} out_FragColor = vec4(vec3(shadow), 1.0);
  10363. }
  10364. `;let i=t.createViewportQuadCommand(n,{uniformMap:{shadowMap_texture:function(){return e._shadowMapTexture},shadowMap_textureCube:function(){return e._shadowMapTexture}}});return i.pass=Re.OVERLAY,i}function Nct(e,t){let n=t.context,i=t.context.drawingBufferWidth,o=t.context.drawingBufferHeight,r=Math.min(i,o)*.3,s=Act;s.x=i-r,s.y=0,s.width=r,s.height=r;let a=e._debugShadowViewCommand;d(a)||(a=Mct(e,n),e._debugShadowViewCommand=a),(!d(a.renderState)||!He.equals(a.renderState.viewport,s))&&(a.renderState=De.fromCache({viewport:He.clone(s)})),t.commandList.push(e._debugShadowViewCommand)}var vf=new Array(8);vf[0]=new se(-1,-1,-1,1);vf[1]=new se(1,-1,-1,1);vf[2]=new se(1,1,-1,1);vf[3]=new se(-1,1,-1,1);vf[4]=new se(-1,-1,1,1);vf[5]=new se(1,-1,1,1);vf[6]=new se(1,1,1,1);vf[7]=new se(-1,1,1,1);var ng=new A,h4=new Array(8);for(let e=0;e<8;++e)h4[e]=new se;function Uct(e,t){let n=new _t({geometry:new im({minimum:new h(-.5,-.5,-.5),maximum:new h(.5,.5,.5)}),attributes:{color:Ut.fromColor(t)}}),i=new _t({geometry:new $p({radius:.5}),attributes:{color:Ut.fromColor(t)}});return new Zn({geometryInstances:[n,i],appearance:new rn({translucent:!1,flat:!0}),asynchronous:!1,modelMatrix:e})}var kct=[Y.RED,Y.GREEN,Y.BLUE,Y.MAGENTA],Dct=new h;function Bct(e,t){Nct(e,t);let n=e.debugFreezeFrame&&!e._debugFreezeFrame;if(e._debugFreezeFrame=e.debugFreezeFrame,e.debugFreezeFrame&&(n&&(e._debugCameraFrustum=e._debugCameraFrustum&&e._debugCameraFrustum.destroy(),e._debugCameraFrustum=new Gf({camera:e._sceneCamera,color:Y.CYAN,updateOnChange:!1})),e._debugCameraFrustum.update(t)),e._cascadesEnabled){if(e.debugFreezeFrame){n&&(e._debugLightFrustum=e._debugLightFrustum&&e._debugLightFrustum.destroy(),e._debugLightFrustum=new Gf({camera:e._shadowMapCamera,color:Y.YELLOW,updateOnChange:!1})),e._debugLightFrustum.update(t);for(let i=0;i<e._numberOfCascades;++i)n&&(e._debugCascadeFrustums[i]=e._debugCascadeFrustums[i]&&e._debugCascadeFrustums[i].destroy(),e._debugCascadeFrustums[i]=new Gf({camera:e._passes[i].camera,color:kct[i],updateOnChange:!1})),e._debugCascadeFrustums[i].update(t)}}else if(e._isPointLight){if(!d(e._debugLightFrustum)||e._needsUpdate){let i=e._shadowMapCamera.positionWC,o=Ae.IDENTITY,r=e._pointLightRadius*2,s=h.fromElements(r,r,r,Dct),a=A.fromTranslationQuaternionRotationScale(i,o,s,ng);e._debugLightFrustum=e._debugLightFrustum&&e._debugLightFrustum.destroy(),e._debugLightFrustum=Uct(a,Y.YELLOW)}e._debugLightFrustum.update(t)}else(!d(e._debugLightFrustum)||e._needsUpdate)&&(e._debugLightFrustum=new Gf({camera:e._shadowMapCamera,color:Y.YELLOW,updateOnChange:!1})),e._debugLightFrustum.update(t)}function vk(){this.viewMatrix=new A,this.inverseViewMatrix=new A,this.frustum=void 0,this.positionCartographic=new he,this.positionWC=new h,this.directionWC=h.clone(h.UNIT_Z),this.upWC=h.clone(h.UNIT_Y),this.rightWC=h.clone(h.UNIT_X),this.viewProjectionMatrix=new A}vk.prototype.clone=function(e){A.clone(e.viewMatrix,this.viewMatrix),A.clone(e.inverseViewMatrix,this.inverseViewMatrix),this.frustum=e.frustum.clone(this.frustum),he.clone(e.positionCartographic,this.positionCartographic),h.clone(e.positionWC,this.positionWC),h.clone(e.directionWC,this.directionWC),h.clone(e.upWC,this.upWC),h.clone(e.rightWC,this.rightWC)};var Yct=new A(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1);vk.prototype.getViewProjection=function(){let e=this.viewMatrix,t=this.frustum.projectionMatrix;return A.multiply(t,e,this.viewProjectionMatrix),A.multiply(Yct,this.viewProjectionMatrix,this.viewProjectionMatrix),this.viewProjectionMatrix};var Oct=new Array(5),Kct=new Ri,Hct=new Array(4),nye=new h,iye=new h;function zct(e,t){let n=e._shadowMapCamera,i=e._sceneCamera,o=i.frustum.near,r=i.frustum.far,s=e._numberOfCascades,a,c=r-o,l=r/o,u=.9,m=!1;t.shadowState.closestObjectSize<200&&(m=!0,u=.9);let p=Hct,y=Oct;for(y[0]=o,y[s]=r,a=0;a<s;++a){let M=(a+1)/s,b=o*Math.pow(l,M),R=o+c*M,E=W.lerp(R,b,u);y[a+1]=E,p[a]=E-y[a]}if(m){for(a=0;a<s;++a)p[a]=Math.min(p[a],e._maximumCascadeDistances[a]);let M=y[0];for(a=0;a<s-1;++a)M+=p[a],y[a+1]=M}se.unpack(y,0,e._cascadeSplits[0]),se.unpack(y,1,e._cascadeSplits[1]),se.unpack(p,0,e._cascadeDistances);let f=n.frustum,x=f.left,_=f.right,C=f.bottom,V=f.top,L=f.near,Z=f.far,G=n.positionWC,X=n.directionWC,P=n.upWC,v=i.frustum.clone(Kct),F=n.getViewProjection();for(a=0;a<s;++a){v.near=y[a],v.far=y[a+1];let M=A.multiply(v.projectionMatrix,i.viewMatrix,ng),b=A.inverse(M,ng),R=A.multiply(F,b,ng),E=h.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,nye),I=h.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,iye);for(let O=0;O<8;++O){let U=se.clone(vf[O],h4[O]);A.multiplyByVector(R,U,U),h.divideByScalar(U,U.w,U),h.minimumByComponent(U,E,E),h.maximumByComponent(U,I,I)}E.x=Math.max(E.x,0),E.y=Math.max(E.y,0),E.z=0,I.x=Math.min(I.x,1),I.y=Math.min(I.y,1),I.z=Math.min(I.z,1);let w=e._passes[a],N=w.camera;N.clone(n);let B=N.frustum;B.left=x+E.x*(_-x),B.right=x+I.x*(_-x),B.bottom=C+E.y*(V-C),B.top=C+I.y*(V-C),B.near=L+E.z*(Z-L),B.far=L+I.z*(Z-L),w.cullingVolume=N.frustum.computeCullingVolume(G,X,P);let k=e._cascadeMatrices[a];A.multiply(N.getViewProjection(),i.inverseViewMatrix,k),A.multiply(w.textureOffsets,k,k)}}var Jct=new A,Qct=new h,jct=new h,qbe=new h;function qct(e,t){let n=e._shadowMapCamera,i=e._sceneCamera,o=A.multiply(i.frustum.projectionMatrix,i.viewMatrix,ng),r=A.inverse(o,ng),s=n.directionWC,a=i.directionWC;h.equalsEpsilon(s,a,W.EPSILON10)&&(a=i.upWC);let c=h.cross(s,a,Qct);a=h.cross(c,s,jct),h.normalize(a,a),h.normalize(c,c);let l=h.fromElements(0,0,0,qbe),u=A.computeView(l,s,a,c,Jct),m=A.multiply(u,r,ng),p=h.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,nye),y=h.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,iye);for(let Z=0;Z<8;++Z){let G=se.clone(vf[Z],h4[Z]);A.multiplyByVector(m,G,G),h.divideByScalar(G,G.w,G),h.minimumByComponent(G,p,p),h.maximumByComponent(G,y,y)}y.z+=1e3,p.z-=10;let f=qbe;f.x=-(.5*(p.x+y.x)),f.y=-(.5*(p.y+y.y)),f.z=-y.z;let x=A.fromTranslation(f,ng);u=A.multiply(x,u,u);let _=.5*(y.x-p.x),C=.5*(y.y-p.y),V=y.z-p.z,L=n.frustum;L.left=-_,L.right=_,L.bottom=-C,L.top=C,L.near=.01,L.far=V,A.clone(u,n.viewMatrix),A.inverse(u,n.inverseViewMatrix),A.getTranslation(n.inverseViewMatrix,n.positionWC),t.mapProjection.ellipsoid.cartesianToCartographic(n.positionWC,n.positionCartographic),h.clone(s,n.directionWC),h.clone(a,n.upWC),h.clone(c,n.rightWC)}var $ct=[new h(-1,0,0),new h(0,-1,0),new h(0,0,-1),new h(1,0,0),new h(0,1,0),new h(0,0,1)],elt=[new h(0,-1,0),new h(0,0,-1),new h(0,-1,0),new h(0,-1,0),new h(0,0,1),new h(0,-1,0)],tlt=[new h(0,0,1),new h(1,0,0),new h(-1,0,0),new h(0,0,-1),new h(1,0,0),new h(1,0,0)];function nlt(e,t){let n=new Ri;n.fov=W.PI_OVER_TWO,n.near=1,n.far=e._pointLightRadius,n.aspectRatio=1;for(let i=0;i<6;++i){let o=e._passes[i].camera;o.positionWC=e._shadowMapCamera.positionWC,o.positionCartographic=t.mapProjection.ellipsoid.cartesianToCartographic(o.positionWC,o.positionCartographic),o.directionWC=$ct[i],o.upWC=elt[i],o.rightWC=tlt[i],A.computeView(o.positionWC,o.directionWC,o.upWC,o.rightWC,o.viewMatrix),A.inverse(o.viewMatrix,o.inverseViewMatrix),o.frustum=n}}var ilt=new h,olt=new h,oye=new ce,$be=oye.center;function rlt(e,t){let n=e._sceneCamera,i=e._shadowMapCamera,o=oye;if(e._cascadesEnabled){if(n.frustum.near>=e.maximumDistance){e._outOfView=!0,e._needsUpdate=!1;return}let r=t.mapProjection.ellipsoid.geodeticSurfaceNormal(n.positionWC,ilt),s=h.negate(i.directionWC,olt),a=h.dot(r,s);if(e.fadingEnabled){let c=W.clamp(a/.1,0,1);e._darkness=W.lerp(1,e.darkness,c)}else e._darkness=e.darkness;if(a<0){e._outOfView=!0,e._needsUpdate=!1;return}e._needsUpdate=!0,e._outOfView=!1}else if(e._isPointLight)o.center=i.positionWC,o.radius=e._pointLightRadius,e._outOfView=t.cullingVolume.computeVisibility(o)===qt.OUTSIDE,e._needsUpdate=!e._outOfView&&!e._boundingSphere.equals(o),ce.clone(o,e._boundingSphere);else{let r=i.frustum.far/2,s=h.add(i.positionWC,h.multiplyByScalar(i.directionWC,r,$be),$be);o.center=s,o.radius=r,e._outOfView=t.cullingVolume.computeVisibility(o)===qt.OUTSIDE,e._needsUpdate=!e._outOfView&&!e._boundingSphere.equals(o),ce.clone(o,e._boundingSphere)}}function slt(e,t){let n=t.camera,i=e._lightCamera,o=e._sceneCamera,r=e._shadowMapCamera;e._cascadesEnabled?h.clone(i.directionWC,r.directionWC):e._isPointLight?h.clone(i.positionWC,r.positionWC):r.clone(i);let s=e._lightDirectionEC;A.multiplyByPointAsVector(n.viewMatrix,r.directionWC,s),h.normalize(s,s),h.negate(s,s),A.multiplyByPoint(n.viewMatrix,r.positionWC,e._lightPositionEC),e._lightPositionEC.w=e._pointLightRadius;let a,c;e._fitNearFar?(a=Math.min(t.shadowState.nearPlane,e.maximumDistance),c=Math.min(t.shadowState.farPlane,e.maximumDistance),c=Math.max(c,a+1)):(a=n.frustum.near,c=e.maximumDistance),e._sceneCamera=co.clone(n,o),n.frustum.clone(e._sceneCamera.frustum),e._sceneCamera.frustum.near=a,e._sceneCamera.frustum.far=c,e._distance=c-a,rlt(e,t),!e._outOfViewPrevious&&e._outOfView&&(e._needsUpdate=!0),e._outOfViewPrevious=e._outOfView}Pf.prototype.update=function(e){if(slt(this,e),this._needsUpdate)if(wct(this,e.context),this._isPointLight&&nlt(this,e),this._cascadesEnabled&&(qct(this,e),this._numberOfCascades>1&&zct(this,e)),this._isPointLight)this._shadowMapCullingVolume=jr.fromBoundingSphere(this._boundingSphere);else{let t=this._shadowMapCamera,n=t.positionWC,i=t.directionWC,o=t.upWC;this._shadowMapCullingVolume=t.frustum.computeCullingVolume(n,i,o),this._passes.length===1&&this._passes[0].camera.clone(t)}if(this._passes.length===1){let t=this._sceneCamera.inverseViewMatrix;A.multiply(this._shadowMapCamera.getViewProjection(),t,this._shadowMapMatrix)}this.debugShow&&Bct(this,e)};Pf.prototype.updatePass=function(e,t){tye(this,e,t)};var alt=new D;function rye(e,t,n){let i=e._isPointLight?e._pointBias:n?e._terrainBias:e._primitiveBias,o={shadowMap_texture:function(){return e._shadowMapTexture},shadowMap_textureCube:function(){return e._shadowMapTexture},shadowMap_matrix:function(){return e._shadowMapMatrix},shadowMap_cascadeSplits:function(){return e._cascadeSplits},shadowMap_cascadeMatrices:function(){return e._cascadeMatrices},shadowMap_lightDirectionEC:function(){return e._lightDirectionEC},shadowMap_lightPositionEC:function(){return e._lightPositionEC},shadowMap_cascadeDistances:function(){return e._cascadeDistances},shadowMap_texelSizeDepthBiasAndNormalShadingSmooth:function(){let r=alt;return r.x=1/e._textureSize.x,r.y=1/e._textureSize.y,se.fromElements(r.x,r.y,i.depthBias,i.normalShadingSmooth,this.combinedUniforms1)},shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness:function(){return se.fromElements(i.normalOffsetScale,e._distance,e.maximumDistance,e._darkness,this.combinedUniforms2)},combinedUniforms1:new se,combinedUniforms2:new se};return xt(t,o,!1)}function clt(e,t,n,i,o,r){let s,a,c;if(d(r)&&(s=r.shaderProgram,a=r.renderState,c=r.uniformMap),r=nt.shallowClone(n,r),r.castShadows=!0,r.receiveShadows=!1,!d(s)||o!==n.shaderProgram.id||t){let l=n.shaderProgram,u=n.pass===Re.GLOBE,m=n.pass!==Re.TRANSLUCENT,p=e._isPointLight,y=e._usesDepthTexture,f=Wf.getShadowCastShaderKeyword(p,u,y,m);if(s=i.shaderCache.getDerivedShaderProgram(l,f),!d(s)){let _=l.vertexShaderSource,C=l.fragmentShaderSource,V=Wf.createShadowCastVertexShader(_,p,u),L=Wf.createShadowCastFragmentShader(C,p,y,m);s=i.shaderCache.createDerivedShaderProgram(l,f,{vertexShaderSource:V,fragmentShaderSource:L,attributeLocations:l._attributeLocations})}a=e._primitiveRenderState,p?a=e._pointRenderState:u&&(a=e._terrainRenderState),n.renderState.cull.enabled||(a=Ke(a,!1),a.cull=Ke(a.cull,!1),a.cull.enabled=!1,a=De.fromCache(a)),c=rye(e,n.uniformMap,u)}return r.shaderProgram=s,r.renderState=a,r.uniformMap=c,r}Pf.createReceiveDerivedCommand=function(e,t,n,i,o){d(o)||(o={});let r=e.length>0,s=t.shaderProgram,a=s.vertexShaderSource,c=s.fragmentShaderSource,l=t.pass===Re.GLOBE,u=!1;if(l&&(u=t.owner.data.renderedMesh.encoding.hasVertexNormals),t.receiveShadows&&r){let m,p;d(o.receiveCommand)&&(m=o.receiveCommand.shaderProgram,p=o.receiveCommand.uniformMap),o.receiveCommand=nt.shallowClone(t,o.receiveCommand),o.castShadows=!1,o.receiveShadows=!0;let y=o.receiveShaderCastShadows!==t.castShadows,f=o.receiveShaderProgramId!==t.shaderProgram.id;if(!d(m)||f||n||y){let x=Wf.getShadowReceiveShaderKeyword(e[0],t.castShadows,l,u);if(m=i.shaderCache.getDerivedShaderProgram(s,x),!d(m)){let _=Wf.createShadowReceiveVertexShader(a,l,u),C=Wf.createShadowReceiveFragmentShader(c,e[0],t.castShadows,l,u);m=i.shaderCache.createDerivedShaderProgram(s,x,{vertexShaderSource:_,fragmentShaderSource:C,attributeLocations:s._attributeLocations})}p=rye(e[0],t.uniformMap,l)}o.receiveCommand.shaderProgram=m,o.receiveCommand.uniformMap=p,o.receiveShaderProgramId=t.shaderProgram.id,o.receiveShaderCastShadows=t.castShadows}return o};Pf.createCastDerivedCommand=function(e,t,n,i,o){if(d(o)||(o={}),t.castShadows){let r=o.castCommands;d(r)||(r=o.castCommands=[]);let s=o.castShaderProgramId,a=e.length;r.length=a;for(let c=0;c<a;++c)r[c]=clt(e[c],n,t,i,s,r[c]);o.castShaderProgramId=t.shaderProgram.id}return o};Pf.prototype.isDestroyed=function(){return!1};Pf.prototype.destroy=function(){m4(this),this._debugLightFrustum=this._debugLightFrustum&&this._debugLightFrustum.destroy(),this._debugCameraFrustum=this._debugCameraFrustum&&this._debugCameraFrustum.destroy(),this._debugShadowViewCommand=this._debugShadowViewCommand&&this._debugShadowViewCommand.shaderProgram&&this._debugShadowViewCommand.shaderProgram.destroy();for(let e=0;e<this._numberOfCascades;++e)this._debugCascadeFrustums[e]=this._debugCascadeFrustums[e]&&this._debugCascadeFrustums[e].destroy();return ue(this)};var B0=Pf;var GWi=T(S(),1);var aWi=T(S(),1),uT=`uniform sampler2D colorTexture;
  10365. #ifdef DEBUG_SHOW_DEPTH
  10366. uniform sampler2D u_packedTranslucentDepth;
  10367. #endif
  10368. in vec2 v_textureCoordinates;
  10369. void main()
  10370. {
  10371. #ifdef DEBUG_SHOW_DEPTH
  10372. if (v_textureCoordinates.x < 0.5)
  10373. {
  10374. out_FragColor.rgb = vec3(czm_unpackDepth(texture(u_packedTranslucentDepth, v_textureCoordinates)));
  10375. out_FragColor.a = 1.0;
  10376. }
  10377. #else
  10378. vec4 color = texture(colorTexture, v_textureCoordinates);
  10379. #ifdef PICK
  10380. if (color == vec4(0.0))
  10381. {
  10382. discard;
  10383. }
  10384. #else
  10385. // Reverse premultiplication process to get the correct composited result of the classification primitives
  10386. color.rgb /= color.a;
  10387. #endif
  10388. out_FragColor = color;
  10389. #endif
  10390. }
  10391. `;var llt=!1;function ig(e){this._drawClassificationFBO=new mi({createDepthAttachments:!1}),this._accumulationFBO=new mi({createDepthAttachments:!1}),this._packFBO=new mi,this._opaqueDepthStencilTexture=void 0,this._textureToComposite=void 0,this._translucentDepthStencilTexture=void 0,this._packDepthCommand=void 0,this._accumulateCommand=void 0,this._compositeCommand=void 0,this._copyCommand=void 0,this._clearColorCommand=new oi({color:new Y(0,0,0,0),owner:this}),this._clearDepthStencilCommand=new oi({depth:1,stencil:0,owner:this}),this._supported=e.depthTexture,this._viewport=new He,this._rsDepth=void 0,this._rsAccumulate=void 0,this._rsComp=void 0,this._useScissorTest=void 0,this._scissorRectangle=void 0,this._hasTranslucentDepth=!1,this._frustumsDrawn=0}Object.defineProperties(ig.prototype,{hasTranslucentDepth:{get:function(){return this._hasTranslucentDepth}}});function sye(e){e._textureToComposite=void 0,e._translucentDepthStencilTexture=e._translucentDepthStencilTexture&&!e._translucentDepthStencilTexture.isDestroyed()&&e._translucentDepthStencilTexture.destroy()}function aye(e){e._drawClassificationFBO.destroy(),e._accumulationFBO.destroy(),e._packFBO.destroy()}function dlt(e,t,n,i){sye(e),e._translucentDepthStencilTexture=new Wt({context:t,width:n,height:i,pixelFormat:st.DEPTH_STENCIL,pixelDatatype:Je.UNSIGNED_INT_24_8,sampler:un.NEAREST})}function ult(e,t,n,i){aye(e),e._drawClassificationFBO.setDepthStencilTexture(e._translucentDepthStencilTexture),e._drawClassificationFBO.update(t,n,i),e._accumulationFBO.setDepthStencilTexture(e._translucentDepthStencilTexture),e._accumulationFBO.update(t,n,i),e._packFBO.update(t,n,i)}function mlt(e,t,n,i){if(!e.isSupported())return;e._opaqueDepthStencilTexture=i;let o=e._opaqueDepthStencilTexture.width,r=e._opaqueDepthStencilTexture.height;e._drawClassificationFBO.isDirty(o,r)&&(dlt(e,t,o,r),ult(e,t,o,r));let s,a;if(d(e._packDepthCommand)||(s=new Ye({sources:[cv]}),a={u_opaqueDepthTexture:function(){return e._opaqueDepthStencilTexture},u_translucentDepthTexture:function(){return e._translucentDepthStencilTexture}},e._packDepthCommand=t.createViewportQuadCommand(s,{uniformMap:a,owner:e})),!d(e._compositeCommand)){s=new Ye({sources:[uT]}),a={colorTexture:function(){return e._textureToComposite}},llt&&(s.defines=["DEBUG_SHOW_DEPTH"],a.u_packedTranslucentDepth=function(){return e._packFBO.getColorTexture()}),e._compositeCommand=t.createViewportQuadCommand(s,{uniformMap:a,owner:e});let u=e._compositeCommand,m=u.shaderProgram,p=t.shaderCache.createDerivedShaderProgram(m,"pick",{vertexShaderSource:m.vertexShaderSource,fragmentShaderSource:new Ye({sources:s.sources,defines:["PICK"]}),attributeLocations:m._attributeLocations}),y=nt.shallowClone(u);y.shaderProgram=p,u.derivedCommands.pick=y}d(e._copyCommand)||(s=new Ye({sources:[uT]}),a={colorTexture:function(){return e._drawClassificationFBO.getColorTexture()}},e._copyCommand=t.createViewportQuadCommand(s,{uniformMap:a,owner:e})),d(e._accumulateCommand)||(s=new Ye({sources:[uT]}),a={colorTexture:function(){return e._drawClassificationFBO.getColorTexture()}},e._accumulateCommand=t.createViewportQuadCommand(s,{uniformMap:a,owner:e})),e._viewport.width=o,e._viewport.height=r;let c=!He.equals(e._viewport,n.viewport),l=c!==e._useScissorTest;e._useScissorTest=c,He.equals(e._scissorRectangle,n.viewport)||(e._scissorRectangle=He.clone(n.viewport,e._scissorRectangle),l=!0),(!d(e._rsDepth)||!He.equals(e._viewport,e._rsDepth.viewport)||l)&&(e._rsDepth=De.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}})),d(e._packDepthCommand)&&(e._packDepthCommand.renderState=e._rsDepth),(!d(e._rsAccumulate)||!He.equals(e._viewport,e._rsAccumulate.viewport)||l)&&(e._rsAccumulate=De.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},stencilTest:{enabled:!0,frontFunction:Dn.EQUAL,reference:Ft.CESIUM_3D_TILE_MASK}})),d(e._accumulateCommand)&&(e._accumulateCommand.renderState=e._rsAccumulate),(!d(e._rsComp)||!He.equals(e._viewport,e._rsComp.viewport)||l)&&(e._rsComp=De.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},blending:dn.ALPHA_BLEND})),d(e._compositeCommand)&&(e._compositeCommand.renderState=e._rsComp,e._compositeCommand.derivedCommands.pick.renderState=e._rsComp)}ig.prototype.executeTranslucentCommands=function(e,t,n,i,o){let r=i.length,s,a,c=e.frameState.useLogDepth,l=e.context,u=n.framebuffer;for(a=0;a<r;++a)if(s=i[a],s=c?s.derivedCommands.logDepth.command:s,s.depthForTranslucentClassification){this._hasTranslucentDepth=!0;break}if(this._hasTranslucentDepth){for(mlt(this,l,n,o),n.framebuffer=this._drawClassificationFBO.framebuffer,this._clearDepthStencilCommand.execute(l,n),a=0;a<r;++a){if(s=i[a],s=c?s.derivedCommands.logDepth.command:s,!s.depthForTranslucentClassification)continue;let m=s.derivedCommands.depth.depthOnlyCommand;t(m,e,l,n)}this._frustumsDrawn+=this._hasTranslucentDepth?1:0,this._hasTranslucentDepth&&(n.framebuffer=this._packFBO.framebuffer,this._packDepthCommand.execute(l,n)),n.framebuffer=u}};ig.prototype.executeClassificationCommands=function(e,t,n,i){if(!this._hasTranslucentDepth)return;let o=e.context,r=o.uniformState,s=n.framebuffer;this._frustumsDrawn===2&&(n.framebuffer=this._accumulationFBO.framebuffer,this._copyCommand.execute(o,n)),n.framebuffer=this._drawClassificationFBO.framebuffer,this._frustumsDrawn>1&&this._clearColorCommand.execute(o,n),r.updatePass(Re.CESIUM_3D_TILE_CLASSIFICATION);let a=r.globeDepthTexture;r.globeDepthTexture=this._packFBO.getColorTexture();let c=i.commands[Re.CESIUM_3D_TILE_CLASSIFICATION],l=i.indices[Re.CESIUM_3D_TILE_CLASSIFICATION];for(let u=0;u<l;++u)t(c[u],e,o,n);r.globeDepthTexture=a,n.framebuffer=s,this._frustumsDrawn!==1&&(n.framebuffer=this._accumulationFBO.framebuffer,this._accumulateCommand.execute(o,n),n.framebuffer=s)};ig.prototype.execute=function(e,t){if(!this._hasTranslucentDepth)return;this._frustumsDrawn===1?this._textureToComposite=this._drawClassificationFBO.getColorTexture():this._textureToComposite=this._accumulationFBO.getColorTexture(),(e.frameState.passes.pick?this._compositeCommand.derivedCommands.pick:this._compositeCommand).execute(e.context,t),hlt(this,e,t)};function hlt(e,t,n){if(!e._hasTranslucentDepth)return;let i=n.framebuffer;n.framebuffer=e._drawClassificationFBO.framebuffer,e._clearColorCommand.execute(t._context,n),n.framebuffer=i,e._frustumsDrawn>1&&(n.framebuffer=e._accumulationFBO.framebuffer,e._clearColorCommand.execute(t._context,n)),e._hasTranslucentDepth=!1,e._frustumsDrawn=0}ig.prototype.isSupported=function(){return this._supported};ig.prototype.isDestroyed=function(){return!1};ig.prototype.destroy=function(){return sye(this),aye(this),d(this._compositeCommand)&&(this._compositeCommand.shaderProgram=this._compositeCommand.shaderProgram&&this._compositeCommand.shaderProgram.destroy()),d(this._packDepthCommand)&&(this._packDepthCommand.shaderProgram=this._packDepthCommand.shaderProgram&&this._packDepthCommand.shaderProgram.destroy()),ue(this)};var Rw=ig;function flt(){this.command=void 0,this.near=void 0,this.far=void 0}function wk(e,t,n){let i=e.context,o;i.depthTexture&&(o=new gw);let r;e._useOIT&&i.depthTexture&&(r=new _w(i));let s=new oc(i);s.viewport=He.clone(n),this.camera=t,this._cameraClone=co.clone(t),this._cameraStartFired=!1,this._cameraMovedTime=void 0,this.viewport=n,this.passState=s,this.pickFramebuffer=new Lw(i),this.pickDepthFramebuffer=new Sw,this.sceneFramebuffer=new lT,this.globeDepth=o,this.globeTranslucencyFramebuffer=new xw,this.oit=r,this.translucentTileClassification=new Rw(i),this.pickDepths=[],this.frustumCommandsList=[],this.debugFrustumStatistics=void 0,this._commandExtents=[]}var cye=new h,lye=new h;function plt(e,t){let n=Math.max(Math.abs(e.x),Math.abs(t.x)),i=Math.max(Math.abs(e.y),Math.abs(t.y)),o=Math.max(Math.abs(e.z),Math.abs(t.z));return Math.max(Math.max(n,i),o)}function blt(e,t,n){let i=1/Math.max(1,plt(e.position,t.position));return h.multiplyByScalar(e.position,i,cye),h.multiplyByScalar(t.position,i,lye),h.equalsEpsilon(cye,lye,n)&&h.equalsEpsilon(e.direction,t.direction,n)&&h.equalsEpsilon(e.up,t.up,n)&&h.equalsEpsilon(e.right,t.right,n)&&A.equalsEpsilon(e.transform,t.transform,n)&&e.frustum.equalsEpsilon(t.frustum,n)}wk.prototype.checkForCameraUpdates=function(e){let t=this.camera,n=this._cameraClone;return blt(t,n,W.EPSILON15)?(this._cameraStartFired&&gi()-this._cameraMovedTime>e.cameraEventWaitTime&&(t.moveEnd.raiseEvent(),this._cameraStartFired=!1),!1):(this._cameraStartFired||(t.moveStart.raiseEvent(),this._cameraStartFired=!0),this._cameraMovedTime=gi(),co.clone(t,n),!0)};function ylt(e,t,n,i){let o=t.frameState,r=o.camera,s=o.useLogDepth?t.logarithmicDepthFarToNearRatio:t.farToNearRatio,a=t.mode===ie.SCENE2D,c=t.nearToFarDistance2D;i*=1+W.EPSILON2,n=Math.min(Math.max(n,r.frustum.near),r.frustum.far),i=Math.max(Math.min(i,r.frustum.far),n);let l;a?(i=Math.min(i,r.position.z+t.nearToFarDistance2D),n=Math.min(n,i),l=Math.ceil(Math.max(1,i-n)/t.nearToFarDistance2D)):l=Math.ceil(Math.log(i/n)/Math.log(s));let u=e.frustumCommandsList;u.length=l;for(let m=0;m<l;++m){let p,y;a?(p=Math.min(i-c,n+m*c),y=Math.min(i,p+c)):(p=Math.max(n,Math.pow(s,m)*n),y=Math.min(i,s*p));let f=u[m];d(f)?(f.near=p,f.far=y):f=u[m]=new yw(p,y)}}function glt(e,t,n,i,o){t.debugShowFrustums&&(n.debugOverlappingFrustums=0);let r=e.frustumCommandsList,s=r.length;for(let a=0;a<s;++a){let c=r[a],l=c.near,u=c.far;if(i>u)continue;if(o<l)break;let m=n.pass,p=c.indices[m]++;if(c.commands[m][p]=n,t.debugShowFrustums&&(n.debugOverlappingFrustums|=1<<a),n.executeInClosestFrustum)break}if(t.debugShowFrustums){let a=e.debugFrustumStatistics.commandsInFrustums;a[n.debugOverlappingFrustums]=d(a[n.debugOverlappingFrustums])?a[n.debugOverlappingFrustums]+1:1,++e.debugFrustumStatistics.totalCommands}t.updateDerivedCommands(n)}var dye=new jr,xlt=new xc;wk.prototype.createPotentiallyVisibleSet=function(e){let t=e.frameState,n=t.camera,i=n.directionWC,o=n.positionWC,r=e._computeCommandList,s=e._overlayCommandList,a=t.commandList;e.debugShowFrustums&&(this.debugFrustumStatistics={totalCommands:0,commandsInFrustums:{}});let c=this.frustumCommandsList,l=c.length,u=Re.NUMBER_OF_PASSES;for(let R=0;R<l;++R)for(let E=0;E<u;++E)c[R].indices[E]=0;r.length=0,s.length=0;let m=this._commandExtents,p=m.length,y=0,f=+Number.MAX_VALUE,x=-Number.MAX_VALUE,_=t.shadowState.shadowsEnabled,C=+Number.MAX_VALUE,V=-Number.MAX_VALUE,L=Number.MAX_VALUE,Z=t.mode===ie.SCENE3D?t.occluder:void 0,G=t.cullingVolume,X=dye.planes;for(let R=0;R<5;++R)X[R]=G.planes[R];G=dye;let P=a.length;for(let R=0;R<P;++R){let E=a[R],I=E.pass;if(I===Re.COMPUTE)r.push(E);else if(I===Re.OVERLAY)s.push(E);else{let w,N,B=E.boundingVolume;if(d(B)){if(!e.isVisible(E,G,Z))continue;let O=B.computePlaneDistances(o,i,xlt);if(w=O.start,N=O.stop,f=Math.min(f,w),x=Math.max(x,N),_&&E.receiveShadows&&w<B0.MAXIMUM_DISTANCE&&!(I===Re.GLOBE&&w<-100&&N>100)){let U=N-w;I!==Re.GLOBE&&w<100&&(L=Math.min(L,U)),C=Math.min(C,w),V=Math.max(V,N)}}else E instanceof oi?(w=n.frustum.near,N=n.frustum.far):(w=n.frustum.near,N=n.frustum.far,f=Math.min(f,w),x=Math.max(x,N));let k=m[y];d(k)||(k=m[y]=new flt),k.command=E,k.near=w,k.far=N,y++}}_&&(C=Math.min(Math.max(C,n.frustum.near),n.frustum.far),V=Math.max(Math.min(V,n.frustum.far),C)),_&&(t.shadowState.nearPlane=C,t.shadowState.farPlane=V,t.shadowState.closestObjectSize=L),ylt(this,e,f,x);let v,F;for(v=0;v<y;v++)F=m[v],glt(this,e,F.command,F.near,F.far);if(y<p)for(v=y;v<p&&(F=m[v],!!d(F.command));v++)F.command=void 0;let M=c.length,b=t.frustumSplits;b.length=M+1;for(let R=0;R<M;++R)b[R]=c[R].near,R===M-1&&(b[R+1]=c[R].far)};wk.prototype.destroy=function(){this.pickFramebuffer=this.pickFramebuffer&&this.pickFramebuffer.destroy(),this.pickDepthFramebuffer=this.pickDepthFramebuffer&&this.pickDepthFramebuffer.destroy(),this.sceneFramebuffer=this.sceneFramebuffer&&this.sceneFramebuffer.destroy(),this.globeDepth=this.globeDepth&&this.globeDepth.destroy(),this.oit=this.oit&&this.oit.destroy(),this.translucentTileClassification=this.translucentTileClassification&&this.translucentTileClassification.destroy(),this.globeTranslucencyFramebuffer=this.globeTranslucencyFramebuffer&&this.globeTranslucencyFramebuffer.destroy();let e,t=this.pickDepths,n=t.length;for(e=0;e<n;++e)t[e].destroy()};var mT=wk;var mye=.1,_lt=new Bu({pass:Xo.MOST_DETAILED_PRELOAD}),Tlt=new Bu({pass:Xo.MOST_DETAILED_PICK}),f4=new Bu({pass:Xo.PICK});function La(e){this._mostDetailedRayPicks=[],this.pickRenderStateCache={},this._pickPositionCache={},this._pickPositionCacheDirty=!1;let t=new He(0,0,1,1),n=new co(e);n.frustum=new en({width:mye,aspectRatio:1,near:.1}),this._pickOffscreenView=new mT(e,n,t)}La.prototype.update=function(){this._pickPositionCacheDirty=!0};La.prototype.getPickDepth=function(e,t){let n=e.view.pickDepths,i=n[t];return d(i)||(i=new bw,n[t]=i),i};var Slt=new yr,Clt=new h,Fk=new h,Vlt=new D,Llt=new A;function Rlt(e,t,n,i,o){let r=e.camera,s=r.frustum,a=s.offCenterFrustum;d(a)&&(s=a);let c=2*(t.x-o.x)/o.width-1;c*=(s.right-s.left)*.5;let l=2*(o.height-t.y-o.y)/o.height-1;l*=(s.top-s.bottom)*.5;let u=A.clone(r.transform,Llt);r._setTransform(A.IDENTITY);let m=h.clone(r.position,Clt);h.multiplyByScalar(r.right,c,Fk),h.add(Fk,m,m),h.multiplyByScalar(r.up,l,Fk),h.add(Fk,m,m),r._setTransform(u),e.mode===ie.SCENE2D&&h.fromElements(m.z,m.x,m.y,m);let p=s.getPixelDimensions(o.width,o.height,1,1,Vlt),y=Slt;return y.right=p.x*.5,y.left=-y.right,y.top=p.y*.5,y.bottom=-y.top,y.near=s.near,y.far=s.far,y.computeCullingVolume(m,r.directionWC,r.upWC)}var Zlt=new Yc,Glt=new D;function Elt(e,t,n,i,o){let r=e.camera,s=r.frustum,a=s.near,c=Math.tan(s.fovy*.5),l=s.aspectRatio*c,u=2*(t.x-o.x)/o.width-1,m=2*(o.height-t.y-o.y)/o.height-1,p=u*a*l,y=m*a*c,f=s.getPixelDimensions(o.width,o.height,1,1,Glt),x=f.x*n*.5,_=f.y*i*.5,C=Zlt;return C.top=y+_,C.bottom=y-_,C.right=p+x,C.left=p-x,C.near=a,C.far=s.far,C.computeCullingVolume(r.positionWC,r.directionWC,r.upWC)}function hye(e,t,n,i,o){let r=e.camera.frustum;return r instanceof en||r instanceof yr?Rlt(e,t,n,i,o):Elt(e,t,n,i,o)}var _V=3,Zw=3,wf=new He(0,0,_V,Zw),fye=new D,p4=new Y(0,0,0,0);La.prototype.pick=function(e,t,n,i){_V=g(n,3),Zw=g(i,_V);let o=e.context,r=o.uniformState,s=e.frameState,a=e.defaultView;e.view=a;let c=a.viewport;c.x=0,c.y=0,c.width=o.drawingBufferWidth,c.height=o.drawingBufferHeight;let l=a.passState;l.viewport=He.clone(c,l.viewport);let u=Ji.transformWindowToDrawingBuffer(e,t,fye);e.jobScheduler.disableThisFrame(),e.updateFrameState(),s.cullingVolume=hye(e,u,_V,Zw,c),s.invertClassification=!1,s.passes.pick=!0,s.tilesetPassState=f4,r.update(s),e.updateEnvironment(),wf.x=u.x-(_V-1)*.5,wf.y=e.drawingBufferHeight-u.y-(Zw-1)*.5,wf.width=_V,wf.height=Zw,l=a.pickFramebuffer.begin(wf,a.viewport),e.updateAndExecuteCommands(l,p4),e.resolveFramebuffers(l);let m=a.pickFramebuffer.end(wf);return o.endFrame(),m};function Xlt(e,t){let n=e.context,i=e.frameState,o=e.environmentState,r=e.defaultView;e.view=r;let s=r.viewport;s.x=0,s.y=0,s.width=n.drawingBufferWidth,s.height=n.drawingBufferHeight;let a=r.passState;a.viewport=He.clone(s,a.viewport),e.clearPasses(i.passes),i.passes.pick=!0,i.passes.depth=!0,i.cullingVolume=hye(e,t,1,1,s),i.tilesetPassState=f4,e.updateEnvironment(),o.renderTranslucentDepthForPick=!0,a=r.pickDepthFramebuffer.update(n,t,s),e.updateAndExecuteCommands(a,p4),e.resolveFramebuffers(a),n.endFrame()}var Ilt=new Ri,Wlt=new Yc,Plt=new en,vlt=new yr;La.prototype.pickPositionWorldCoordinates=function(e,t,n){if(!e.useDepthPicking)return;let i=t.toString();if(this._pickPositionCacheDirty)this._pickPositionCache={},this._pickPositionCacheDirty=!1;else if(this._pickPositionCache.hasOwnProperty(i))return h.clone(this._pickPositionCache[i],n);let o=e.frameState,r=e.context,s=r.uniformState,a=e.defaultView;e.view=a;let c=Ji.transformWindowToDrawingBuffer(e,t,fye);e.pickTranslucentDepth?Xlt(e,c):(e.updateFrameState(),s.update(o),e.updateEnvironment()),c.y=e.drawingBufferHeight-c.y;let l=e.camera,u;d(l.frustum.fov)?u=l.frustum.clone(Ilt):d(l.frustum.infiniteProjectionMatrix)?u=l.frustum.clone(Wlt):d(l.frustum.width)?u=l.frustum.clone(Plt):u=l.frustum.clone(vlt);let m=a.frustumCommandsList,p=m.length;for(let y=0;y<p;++y){let x=this.getPickDepth(e,y).getDepth(r,c.x,c.y);if(d(x)&&x>0&&x<1){let _=m[y],C;return e.mode===ie.SCENE2D?(C=l.position.z,l.position.z=C-_.near+1,u.far=Math.max(1,_.far-_.near),u.near=1,s.update(o),s.updateFrustum(u)):(u.near=_.near*(y!==0?e.opaqueFrustumNearOffset:1),u.far=_.far,s.updateFrustum(u)),n=Ji.drawingBufferToWgs84Coordinates(e,c,x,n),e.mode===ie.SCENE2D&&(l.position.z=C,s.update(o)),this._pickPositionCache[i]=h.clone(n),n}}this._pickPositionCache[i]=void 0};var wlt=new he;La.prototype.pickPosition=function(e,t,n){if(n=this.pickPositionWorldCoordinates(e,t,n),d(n)&&e.mode!==ie.SCENE3D){h.fromElements(n.y,n.z,n.x,n);let i=e.mapProjection,o=i.ellipsoid,r=i.unproject(n,wlt);o.cartographicToCartesian(r,n)}return n};function pye(e,t){let n,i,o=[],r=[],s=[],a=[];d(e)||(e=Number.MAX_VALUE);let c=t();for(;d(c);){let l=c.object,u=c.position,m=c.exclude;if(d(u)&&!d(l)){o.push(c);break}if(!d(l)||!d(l.primitive)||!m&&(o.push(c),0>=--e))break;let p=l.primitive,y=!1;typeof p.getGeometryInstanceAttributes=="function"&&d(l.id)&&(i=p.getGeometryInstanceAttributes(l.id),d(i)&&d(i.show)&&(y=!0,i.show=gn.toValue(!1,i.show),s.push(i))),l instanceof Ts&&(y=!0,l.show=!1,a.push(l)),y||(p.show=!1,r.push(p)),c=t()}for(n=0;n<r.length;++n)r[n].show=!0;for(n=0;n<s.length;++n)i=s[n],i.show=gn.toValue(!0,i.show);for(n=0;n<a.length;++n)a[n].show=!0;return o}La.prototype.drillPick=function(e,t,n,i,o){let r=this;return pye(n,function(){let c=r.pick(e,t,i,o);if(d(c))return{object:c,position:void 0,exclude:!1}}).map(function(c){return c.object})};var uye=new h,Flt=new h;function Alt(e,t,n){this.ray=e,this.width=t,this.tilesets=n,this.ready=!1;let i=this;this.promise=new Promise(o=>{i._completePick=()=>{o()}})}function bye(e,t,n,i){let o=t.direction,r=h.mostOrthogonalAxis(o,uye),s=h.cross(o,r,uye),a=h.cross(o,s,Flt);return i.position=t.origin,i.direction=o,i.up=a,i.right=s,i.frustum.width=g(n,mye),i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC)}function Mlt(e,t,n){let i=t.frameState,o=n.ray,r=n.width,s=n.tilesets,a=e._pickOffscreenView.camera,c=bye(e,o,r,a),l=_lt;l.camera=a,l.cullingVolume=c;let u=!0,m=s.length;for(let p=0;p<m;++p){let y=s[p];y.show&&t.primitives.contains(y)&&(y.updateForPass(i,l),u=u&&l.ready)}return u&&n._completePick(),u}La.prototype.updateMostDetailedRayPicks=function(e){let t=this._mostDetailedRayPicks;for(let n=0;n<t.length;++n)Mlt(this,e,t[n])&&t.splice(n--,1)};function yye(e,t,n){let i=e.length;for(let o=0;o<i;++o){let r=e.get(o);r.show&&(d(r.isCesium3DTileset)?(!d(t)||t.indexOf(r)===-1)&&n.push(r):r instanceof Zl&&yye(r,t,n))}}function Ak(e,t,n,i,o,r){let s=[];if(yye(t.primitives,i,s),s.length===0)return Promise.resolve(r());let a=new Alt(n,o,s);return e._mostDetailedRayPicks.push(a),a.promise.then(function(){return r()})}function Nlt(e,t){return!d(e)||!d(t)||t.length===0?!1:t.indexOf(e)>-1||t.indexOf(e.primitive)>-1||t.indexOf(e.id)>-1}function Ult(e,t,n,i,o,r,s){let a=t.context,c=a.uniformState,l=t.frameState,u=e._pickOffscreenView;t.view=u,bye(e,n,o,u.camera),wf=He.clone(u.viewport,wf);let m=u.pickFramebuffer.begin(wf,u.viewport);t.jobScheduler.disableThisFrame(),t.updateFrameState(),l.invertClassification=!1,l.passes.pick=!0,l.passes.offscreen=!0,s?l.tilesetPassState=Tlt:l.tilesetPassState=f4,c.update(l),t.updateEnvironment(),t.updateAndExecuteCommands(m,p4),t.resolveFramebuffers(m);let p,y=u.pickFramebuffer.end(wf);if(t.context.depthTexture){let f=u.frustumCommandsList.length;for(let x=0;x<f;++x){let C=e.getPickDepth(t,x).getDepth(a,0,0);if(d(C)&&C>0&&C<1){let V=u.frustumCommandsList[x],L=V.near*(x!==0?t.opaqueFrustumNearOffset:1),Z=V.far,G=L+C*(Z-L);p=Sn.getPoint(n,G);break}}}if(t.view=t.defaultView,a.endFrame(),d(y)||d(p))return{object:y,position:p,exclude:!d(p)&&r||Nlt(y,i)}}function gye(e,t,n,i,o,r,s,a){return pye(i,function(){return Ult(e,t,n,o,r,s,a)})}function TV(e,t,n,i,o,r,s){let a=gye(e,t,n,1,i,o,r,s);if(a.length>0)return a[0]}function xye(e,t,n,i,o,r,s,a){return gye(e,t,n,i,o,r,s,a)}function Mk(e,t){return new Promise((n,i)=>{t.then(function(o){let r=e.postRender.addEventListener(function(){r(),n(o)});e.requestRender()}).catch(function(o){i(o)})})}La.prototype.pickFromRay=function(e,t,n,i){return TV(this,e,t,n,i,!1,!1)};La.prototype.drillPickFromRay=function(e,t,n,i,o){return xye(this,e,t,n,i,o,!1,!1)};La.prototype.pickFromRayMostDetailed=function(e,t,n,i){let o=this;return t=Sn.clone(t),n=d(n)?n.slice():n,Mk(e,Ak(o,e,t,n,i,function(){return TV(o,e,t,n,i,!1,!0)}))};La.prototype.drillPickFromRayMostDetailed=function(e,t,n,i,o){let r=this;return t=Sn.clone(t),i=d(i)?i.slice():i,Mk(e,Ak(r,e,t,i,o,function(){return xye(r,e,t,n,i,o,!1,!0)}))};var klt=new h,Dlt=new h,Blt=new Sn,_ye=new he;function b4(e,t){let n=e.globe,i=d(n)?n.ellipsoid:e.mapProjection.ellipsoid,o=li._defaultMaxTerrainHeight,r=i.geodeticSurfaceNormalCartographic(t,Dlt),s=he.toCartesian(t,i,klt),a=Blt;a.origin=s,a.direction=r;let c=new Sn;return Sn.getPoint(a,o,c.origin),h.negate(r,c.direction),c}function Tye(e,t){let n=e.globe,i=d(n)?n.ellipsoid:e.mapProjection.ellipsoid,o=he.fromCartesian(t,i,_ye);return b4(e,o)}function Sye(e,t){let n=e.globe,i=d(n)?n.ellipsoid:e.mapProjection.ellipsoid;return he.fromCartesian(t,i,_ye).height}function Ylt(e,t,n,i,o){let r=b4(t,n);return Ak(e,t,r,i,o,function(){let s=TV(e,t,r,i,o,!0,!0);if(d(s))return Sye(t,s.position)})}function Olt(e,t,n,i,o,r){let s=Tye(t,n);return Ak(e,t,s,i,o,function(){let a=TV(e,t,s,i,o,!0,!0);if(d(a))return h.clone(a.position,r)})}La.prototype.sampleHeight=function(e,t,n,i){let o=b4(e,t),r=TV(this,e,o,n,i,!0,!1);if(d(r))return Sye(e,r.position)};La.prototype.clampToHeight=function(e,t,n,i,o){let r=Tye(e,t),s=TV(this,e,r,n,i,!0,!1);if(d(s))return h.clone(s.position,o)};La.prototype.sampleHeightMostDetailed=function(e,t,n,i){n=d(n)?n.slice():n;let o=t.length,r=new Array(o);for(let s=0;s<o;++s)r[s]=Ylt(this,e,t[s],n,i);return Mk(e,Promise.all(r).then(function(s){let a=s.length;for(let c=0;c<a;++c)t[c].height=s[c];return t}))};La.prototype.clampToHeightMostDetailed=function(e,t,n,i){n=d(n)?n.slice():n;let o=t.length,r=new Array(o);for(let s=0;s<o;++s)r[s]=Olt(this,e,t[s],n,i,t[s]);return Mk(e,Promise.all(r).then(function(s){let a=s.length;for(let c=0;c<a;++c)t[c]=s[c];return t}))};La.prototype.destroy=function(){this._pickOffscreenView=this._pickOffscreenView&&this._pickOffscreenView.destroy()};var Gw=La;var Ovi=T(S(),1);var _vi=T(S(),1);var R2i=T(S(),1),Ew=`uniform sampler2D colorTexture;
  10392. in vec2 v_textureCoordinates;
  10393. #ifdef AUTO_EXPOSURE
  10394. uniform sampler2D autoExposure;
  10395. #endif
  10396. void main()
  10397. {
  10398. vec4 fragmentColor = texture(colorTexture, v_textureCoordinates);
  10399. vec3 color = fragmentColor.rgb;
  10400. #ifdef AUTO_EXPOSURE
  10401. color /= texture(autoExposure, vec2(0.5)).r;
  10402. #endif
  10403. color = czm_acesTonemapping(color);
  10404. color = czm_inverseGamma(color);
  10405. out_FragColor = vec4(color, fragmentColor.a);
  10406. }
  10407. `;var G2i=T(S(),1),Xw=`uniform sampler2D randomTexture;
  10408. uniform sampler2D depthTexture;
  10409. uniform float intensity;
  10410. uniform float bias;
  10411. uniform float lengthCap;
  10412. uniform float stepSize;
  10413. uniform float frustumLength;
  10414. in vec2 v_textureCoordinates;
  10415. vec4 clipToEye(vec2 uv, float depth)
  10416. {
  10417. vec2 xy = vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y) * 2.0 - 1.0));
  10418. vec4 posEC = czm_inverseProjection * vec4(xy, depth, 1.0);
  10419. posEC = posEC / posEC.w;
  10420. return posEC;
  10421. }
  10422. //Reconstruct Normal Without Edge Removation
  10423. vec3 getNormalXEdge(vec3 posInCamera, float depthU, float depthD, float depthL, float depthR, vec2 pixelSize)
  10424. {
  10425. vec4 posInCameraUp = clipToEye(v_textureCoordinates - vec2(0.0, pixelSize.y), depthU);
  10426. vec4 posInCameraDown = clipToEye(v_textureCoordinates + vec2(0.0, pixelSize.y), depthD);
  10427. vec4 posInCameraLeft = clipToEye(v_textureCoordinates - vec2(pixelSize.x, 0.0), depthL);
  10428. vec4 posInCameraRight = clipToEye(v_textureCoordinates + vec2(pixelSize.x, 0.0), depthR);
  10429. vec3 up = posInCamera.xyz - posInCameraUp.xyz;
  10430. vec3 down = posInCameraDown.xyz - posInCamera.xyz;
  10431. vec3 left = posInCamera.xyz - posInCameraLeft.xyz;
  10432. vec3 right = posInCameraRight.xyz - posInCamera.xyz;
  10433. vec3 DX = length(left) < length(right) ? left : right;
  10434. vec3 DY = length(up) < length(down) ? up : down;
  10435. return normalize(cross(DY, DX));
  10436. }
  10437. void main(void)
  10438. {
  10439. float depth = czm_readDepth(depthTexture, v_textureCoordinates);
  10440. vec4 posInCamera = clipToEye(v_textureCoordinates, depth);
  10441. if (posInCamera.z > frustumLength)
  10442. {
  10443. out_FragColor = vec4(1.0);
  10444. return;
  10445. }
  10446. vec2 pixelSize = czm_pixelRatio / czm_viewport.zw;
  10447. float depthU = czm_readDepth(depthTexture, v_textureCoordinates - vec2(0.0, pixelSize.y));
  10448. float depthD = czm_readDepth(depthTexture, v_textureCoordinates + vec2(0.0, pixelSize.y));
  10449. float depthL = czm_readDepth(depthTexture, v_textureCoordinates - vec2(pixelSize.x, 0.0));
  10450. float depthR = czm_readDepth(depthTexture, v_textureCoordinates + vec2(pixelSize.x, 0.0));
  10451. vec3 normalInCamera = getNormalXEdge(posInCamera.xyz, depthU, depthD, depthL, depthR, pixelSize);
  10452. float ao = 0.0;
  10453. vec2 sampleDirection = vec2(1.0, 0.0);
  10454. float gapAngle = 90.0 * czm_radiansPerDegree;
  10455. // RandomNoise
  10456. float randomVal = texture(randomTexture, v_textureCoordinates / pixelSize / 255.0).x;
  10457. //Loop for each direction
  10458. for (int i = 0; i < 4; i++)
  10459. {
  10460. float newGapAngle = gapAngle * (float(i) + randomVal);
  10461. float cosVal = cos(newGapAngle);
  10462. float sinVal = sin(newGapAngle);
  10463. //Rotate Sampling Direction
  10464. vec2 rotatedSampleDirection = vec2(cosVal * sampleDirection.x - sinVal * sampleDirection.y, sinVal * sampleDirection.x + cosVal * sampleDirection.y);
  10465. float localAO = 0.0;
  10466. float localStepSize = stepSize;
  10467. //Loop for each step
  10468. for (int j = 0; j < 6; j++)
  10469. {
  10470. vec2 newCoords = v_textureCoordinates + rotatedSampleDirection * localStepSize * pixelSize;
  10471. //Exception Handling
  10472. if(newCoords.x > 1.0 || newCoords.y > 1.0 || newCoords.x < 0.0 || newCoords.y < 0.0)
  10473. {
  10474. break;
  10475. }
  10476. float stepDepthInfo = czm_readDepth(depthTexture, newCoords);
  10477. vec4 stepPosInCamera = clipToEye(newCoords, stepDepthInfo);
  10478. vec3 diffVec = stepPosInCamera.xyz - posInCamera.xyz;
  10479. float len = length(diffVec);
  10480. if (len > lengthCap)
  10481. {
  10482. break;
  10483. }
  10484. float dotVal = clamp(dot(normalInCamera, normalize(diffVec)), 0.0, 1.0 );
  10485. float weight = len / lengthCap;
  10486. weight = 1.0 - weight * weight;
  10487. if (dotVal < bias)
  10488. {
  10489. dotVal = 0.0;
  10490. }
  10491. localAO = max(localAO, dotVal * weight);
  10492. localStepSize += stepSize;
  10493. }
  10494. ao += localAO;
  10495. }
  10496. ao /= 4.0;
  10497. ao = 1.0 - clamp(ao, 0.0, 1.0);
  10498. ao = pow(ao, intensity);
  10499. out_FragColor = vec4(vec3(ao), 1.0);
  10500. }
  10501. `;var X2i=T(S(),1),Iw=`uniform sampler2D colorTexture;
  10502. uniform sampler2D ambientOcclusionTexture;
  10503. uniform bool ambientOcclusionOnly;
  10504. in vec2 v_textureCoordinates;
  10505. void main(void)
  10506. {
  10507. vec4 color = texture(colorTexture, v_textureCoordinates);
  10508. vec4 ao = texture(ambientOcclusionTexture, v_textureCoordinates);
  10509. out_FragColor = ambientOcclusionOnly ? ao : ao * color;
  10510. }
  10511. `;var W2i=T(S(),1),Ww=`uniform sampler2D colorTexture;
  10512. uniform float gradations;
  10513. in vec2 v_textureCoordinates;
  10514. void main(void)
  10515. {
  10516. vec3 rgb = texture(colorTexture, v_textureCoordinates).rgb;
  10517. #ifdef CZM_SELECTED_FEATURE
  10518. if (czm_selected()) {
  10519. out_FragColor = vec4(rgb, 1.0);
  10520. return;
  10521. }
  10522. #endif
  10523. float luminance = czm_luminance(rgb);
  10524. float darkness = luminance * gradations;
  10525. darkness = (darkness - fract(darkness)) / gradations;
  10526. out_FragColor = vec4(vec3(darkness), 1.0);
  10527. }
  10528. `;var v2i=T(S(),1),Pw=`uniform sampler2D colorTexture;
  10529. uniform sampler2D bloomTexture;
  10530. uniform bool glowOnly;
  10531. in vec2 v_textureCoordinates;
  10532. void main(void)
  10533. {
  10534. vec4 color = texture(colorTexture, v_textureCoordinates);
  10535. #ifdef CZM_SELECTED_FEATURE
  10536. if (czm_selected()) {
  10537. out_FragColor = color;
  10538. return;
  10539. }
  10540. #endif
  10541. vec4 bloom = texture(bloomTexture, v_textureCoordinates);
  10542. out_FragColor = glowOnly ? bloom : bloom + color;
  10543. }
  10544. `;var F2i=T(S(),1),vw=`uniform sampler2D colorTexture;
  10545. uniform float brightness;
  10546. in vec2 v_textureCoordinates;
  10547. void main(void)
  10548. {
  10549. vec3 rgb = texture(colorTexture, v_textureCoordinates).rgb;
  10550. vec3 target = vec3(0.0);
  10551. out_FragColor = vec4(mix(target, rgb, brightness), 1.0);
  10552. }
  10553. `;var M2i=T(S(),1),ww=`uniform sampler2D colorTexture;
  10554. uniform float contrast;
  10555. uniform float brightness;
  10556. in vec2 v_textureCoordinates;
  10557. void main(void)
  10558. {
  10559. vec3 sceneColor = texture(colorTexture, v_textureCoordinates).xyz;
  10560. sceneColor = czm_RGBToHSB(sceneColor);
  10561. sceneColor.z += brightness;
  10562. sceneColor = czm_HSBToRGB(sceneColor);
  10563. float factor = (259.0 * (contrast + 255.0)) / (255.0 * (259.0 - contrast));
  10564. sceneColor = factor * (sceneColor - vec3(0.5)) + vec3(0.5);
  10565. out_FragColor = vec4(sceneColor, 1.0);
  10566. }
  10567. `;var U2i=T(S(),1),Fw=`uniform sampler2D colorTexture;
  10568. uniform sampler2D blurTexture;
  10569. uniform sampler2D depthTexture;
  10570. uniform float focalDistance;
  10571. in vec2 v_textureCoordinates;
  10572. vec4 toEye(vec2 uv, float depth)
  10573. {
  10574. vec2 xy = vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y) * 2.0 - 1.0));
  10575. vec4 posInCamera = czm_inverseProjection * vec4(xy, depth, 1.0);
  10576. posInCamera = posInCamera / posInCamera.w;
  10577. return posInCamera;
  10578. }
  10579. float computeDepthBlur(float depth)
  10580. {
  10581. float f;
  10582. if (depth < focalDistance)
  10583. {
  10584. f = (focalDistance - depth) / (focalDistance - czm_currentFrustum.x);
  10585. }
  10586. else
  10587. {
  10588. f = (depth - focalDistance) / (czm_currentFrustum.y - focalDistance);
  10589. f = pow(f, 0.1);
  10590. }
  10591. f *= f;
  10592. f = clamp(f, 0.0, 1.0);
  10593. return pow(f, 0.5);
  10594. }
  10595. void main(void)
  10596. {
  10597. float depth = czm_readDepth(depthTexture, v_textureCoordinates);
  10598. vec4 posInCamera = toEye(v_textureCoordinates, depth);
  10599. float d = computeDepthBlur(-posInCamera.z);
  10600. out_FragColor = mix(texture(colorTexture, v_textureCoordinates), texture(blurTexture, v_textureCoordinates), d);
  10601. }
  10602. `;var D2i=T(S(),1),Aw=`uniform sampler2D depthTexture;
  10603. in vec2 v_textureCoordinates;
  10604. void main(void)
  10605. {
  10606. float depth = czm_readDepth(depthTexture, v_textureCoordinates);
  10607. out_FragColor = vec4(vec3(depth), 1.0);
  10608. }
  10609. `;var Y2i=T(S(),1),Mw=`uniform sampler2D depthTexture;
  10610. uniform float length;
  10611. uniform vec4 color;
  10612. in vec2 v_textureCoordinates;
  10613. void main(void)
  10614. {
  10615. float directions[3];
  10616. directions[0] = -1.0;
  10617. directions[1] = 0.0;
  10618. directions[2] = 1.0;
  10619. float scalars[3];
  10620. scalars[0] = 3.0;
  10621. scalars[1] = 10.0;
  10622. scalars[2] = 3.0;
  10623. float padx = czm_pixelRatio / czm_viewport.z;
  10624. float pady = czm_pixelRatio / czm_viewport.w;
  10625. #ifdef CZM_SELECTED_FEATURE
  10626. bool selected = false;
  10627. for (int i = 0; i < 3; ++i)
  10628. {
  10629. float dir = directions[i];
  10630. selected = selected || czm_selected(vec2(-padx, dir * pady));
  10631. selected = selected || czm_selected(vec2(padx, dir * pady));
  10632. selected = selected || czm_selected(vec2(dir * padx, -pady));
  10633. selected = selected || czm_selected(vec2(dir * padx, pady));
  10634. if (selected)
  10635. {
  10636. break;
  10637. }
  10638. }
  10639. if (!selected)
  10640. {
  10641. out_FragColor = vec4(color.rgb, 0.0);
  10642. return;
  10643. }
  10644. #endif
  10645. float horizEdge = 0.0;
  10646. float vertEdge = 0.0;
  10647. for (int i = 0; i < 3; ++i)
  10648. {
  10649. float dir = directions[i];
  10650. float scale = scalars[i];
  10651. horizEdge -= texture(depthTexture, v_textureCoordinates + vec2(-padx, dir * pady)).x * scale;
  10652. horizEdge += texture(depthTexture, v_textureCoordinates + vec2(padx, dir * pady)).x * scale;
  10653. vertEdge -= texture(depthTexture, v_textureCoordinates + vec2(dir * padx, -pady)).x * scale;
  10654. vertEdge += texture(depthTexture, v_textureCoordinates + vec2(dir * padx, pady)).x * scale;
  10655. }
  10656. float len = sqrt(horizEdge * horizEdge + vertEdge * vertEdge);
  10657. out_FragColor = vec4(color.rgb, len > length ? color.a : 0.0);
  10658. }
  10659. `;var K2i=T(S(),1),Nw=`uniform sampler2D colorTexture;
  10660. in vec2 v_textureCoordinates;
  10661. #ifdef AUTO_EXPOSURE
  10662. uniform sampler2D autoExposure;
  10663. #endif
  10664. // See slides 142 and 143:
  10665. // http://www.gdcvault.com/play/1012459/Uncharted_2__HDR_Lighting
  10666. void main()
  10667. {
  10668. vec4 fragmentColor = texture(colorTexture, v_textureCoordinates);
  10669. vec3 color = fragmentColor.rgb;
  10670. #ifdef AUTO_EXPOSURE
  10671. float exposure = texture(autoExposure, vec2(0.5)).r;
  10672. color /= exposure;
  10673. #endif
  10674. const float A = 0.22; // shoulder strength
  10675. const float B = 0.30; // linear strength
  10676. const float C = 0.10; // linear angle
  10677. const float D = 0.20; // toe strength
  10678. const float E = 0.01; // toe numerator
  10679. const float F = 0.30; // toe denominator
  10680. const float white = 11.2; // linear white point value
  10681. vec3 c = ((color * (A * color + C * B) + D * E) / (color * ( A * color + B) + D * F)) - E / F;
  10682. float w = ((white * (A * white + C * B) + D * E) / (white * ( A * white + B) + D * F)) - E / F;
  10683. c = czm_inverseGamma(c / w);
  10684. out_FragColor = vec4(c, fragmentColor.a);
  10685. }
  10686. `;var z2i=T(S(),1),Uw=`in vec2 v_textureCoordinates;
  10687. uniform sampler2D colorTexture;
  10688. const float fxaaQualitySubpix = 0.5;
  10689. const float fxaaQualityEdgeThreshold = 0.125;
  10690. const float fxaaQualityEdgeThresholdMin = 0.0833;
  10691. void main()
  10692. {
  10693. vec2 fxaaQualityRcpFrame = vec2(1.0) / czm_viewport.zw;
  10694. vec4 color = FxaaPixelShader(
  10695. v_textureCoordinates,
  10696. colorTexture,
  10697. fxaaQualityRcpFrame,
  10698. fxaaQualitySubpix,
  10699. fxaaQualityEdgeThreshold,
  10700. fxaaQualityEdgeThresholdMin);
  10701. float alpha = texture(colorTexture, v_textureCoordinates).a;
  10702. out_FragColor = vec4(color.rgb, alpha);
  10703. }
  10704. `;var Q2i=T(S(),1),og=`#define SAMPLES 8
  10705. uniform float delta;
  10706. uniform float sigma;
  10707. uniform float direction; // 0.0 for x direction, 1.0 for y direction
  10708. uniform sampler2D colorTexture;
  10709. #ifdef USE_STEP_SIZE
  10710. uniform float stepSize;
  10711. #else
  10712. uniform vec2 step;
  10713. #endif
  10714. in vec2 v_textureCoordinates;
  10715. // Incremental Computation of the Gaussian:
  10716. // https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch40.html
  10717. void main()
  10718. {
  10719. vec2 st = v_textureCoordinates;
  10720. vec2 dir = vec2(1.0 - direction, direction);
  10721. #ifdef USE_STEP_SIZE
  10722. vec2 step = vec2(stepSize * (czm_pixelRatio / czm_viewport.zw));
  10723. #else
  10724. vec2 step = step;
  10725. #endif
  10726. vec3 g;
  10727. g.x = 1.0 / (sqrt(czm_twoPi) * sigma);
  10728. g.y = exp((-0.5 * delta * delta) / (sigma * sigma));
  10729. g.z = g.y * g.y;
  10730. vec4 result = texture(colorTexture, st) * g.x;
  10731. for (int i = 1; i < SAMPLES; ++i)
  10732. {
  10733. g.xy *= g.yz;
  10734. vec2 offset = float(i) * dir * step;
  10735. result += texture(colorTexture, st - offset) * g.x;
  10736. result += texture(colorTexture, st + offset) * g.x;
  10737. }
  10738. out_FragColor = result;
  10739. }
  10740. `;var q2i=T(S(),1),kw=`uniform sampler2D colorTexture;
  10741. uniform sampler2D dirtTexture;
  10742. uniform sampler2D starTexture;
  10743. uniform vec2 dirtTextureDimensions;
  10744. uniform float distortion;
  10745. uniform float ghostDispersal;
  10746. uniform float haloWidth;
  10747. uniform float dirtAmount;
  10748. uniform float earthRadius;
  10749. uniform float intensity;
  10750. in vec2 v_textureCoordinates;
  10751. // whether it is in space or not
  10752. // 6500000.0 is empirical value
  10753. #define DISTANCE_TO_SPACE 6500000.0
  10754. // return ndc from world coordinate biased earthRadius
  10755. vec4 getNDCFromWC(vec3 WC, float earthRadius)
  10756. {
  10757. vec4 positionEC = czm_view * vec4(WC, 1.0);
  10758. positionEC = vec4(positionEC.x + earthRadius, positionEC.y, positionEC.z, 1.0);
  10759. vec4 positionWC = czm_eyeToWindowCoordinates(positionEC);
  10760. return czm_viewportOrthographic * vec4(positionWC.xy, -positionWC.z, 1.0);
  10761. }
  10762. // Check if current pixel is included Earth
  10763. // if then mask it gradually
  10764. float isInEarth(vec2 texcoord, vec2 sceneSize)
  10765. {
  10766. vec2 NDC = texcoord * 2.0 - 1.0;
  10767. vec4 earthPosSC = getNDCFromWC(vec3(0.0), 0.0);
  10768. vec4 earthPosSCEdge = getNDCFromWC(vec3(0.0), earthRadius * 1.5);
  10769. NDC.xy -= earthPosSC.xy;
  10770. float X = abs(NDC.x) * sceneSize.x;
  10771. float Y = abs(NDC.y) * sceneSize.y;
  10772. return clamp(0.0, 1.0, max(sqrt(X * X + Y * Y) / max(abs(earthPosSCEdge.x * sceneSize.x), 1.0) - 0.8 , 0.0));
  10773. }
  10774. // For Chromatic effect
  10775. vec4 textureDistorted(sampler2D tex, vec2 texcoord, vec2 direction, vec3 distortion, bool isSpace)
  10776. {
  10777. vec2 sceneSize = czm_viewport.zw;
  10778. vec3 color;
  10779. if(isSpace)
  10780. {
  10781. color.r = isInEarth(texcoord + direction * distortion.r, sceneSize) * texture(tex, texcoord + direction * distortion.r).r;
  10782. color.g = isInEarth(texcoord + direction * distortion.g, sceneSize) * texture(tex, texcoord + direction * distortion.g).g;
  10783. color.b = isInEarth(texcoord + direction * distortion.b, sceneSize) * texture(tex, texcoord + direction * distortion.b).b;
  10784. }
  10785. else
  10786. {
  10787. color.r = texture(tex, texcoord + direction * distortion.r).r;
  10788. color.g = texture(tex, texcoord + direction * distortion.g).g;
  10789. color.b = texture(tex, texcoord + direction * distortion.b).b;
  10790. }
  10791. return vec4(clamp(color, 0.0, 1.0), 0.0);
  10792. }
  10793. void main(void)
  10794. {
  10795. vec4 originalColor = texture(colorTexture, v_textureCoordinates);
  10796. vec3 rgb = originalColor.rgb;
  10797. bool isSpace = length(czm_viewerPositionWC.xyz) > DISTANCE_TO_SPACE;
  10798. // Sun position
  10799. vec4 sunPos = czm_morphTime == 1.0 ? vec4(czm_sunPositionWC, 1.0) : vec4(czm_sunPositionColumbusView.zxy, 1.0);
  10800. vec4 sunPositionEC = czm_view * sunPos;
  10801. vec4 sunPositionWC = czm_eyeToWindowCoordinates(sunPositionEC);
  10802. sunPos = czm_viewportOrthographic * vec4(sunPositionWC.xy, -sunPositionWC.z, 1.0);
  10803. // If sun is not in the screen space, use original color.
  10804. if(!isSpace || !((sunPos.x >= -1.1 && sunPos.x <= 1.1) && (sunPos.y >= -1.1 && sunPos.y <= 1.1)))
  10805. {
  10806. // Lens flare is disabled when not in space until #5932 is fixed.
  10807. // https://github.com/CesiumGS/cesium/issues/5932
  10808. out_FragColor = originalColor;
  10809. return;
  10810. }
  10811. vec2 texcoord = vec2(1.0) - v_textureCoordinates;
  10812. vec2 pixelSize = czm_pixelRatio / czm_viewport.zw;
  10813. vec2 invPixelSize = 1.0 / pixelSize;
  10814. vec3 distortionVec = pixelSize.x * vec3(-distortion, 0.0, distortion);
  10815. // ghost vector to image centre:
  10816. vec2 ghostVec = (vec2(0.5) - texcoord) * ghostDispersal;
  10817. vec3 direction = normalize(vec3(ghostVec, 0.0));
  10818. // sample ghosts:
  10819. vec4 result = vec4(0.0);
  10820. vec4 ghost = vec4(0.0);
  10821. for (int i = 0; i < 4; ++i)
  10822. {
  10823. vec2 offset = fract(texcoord + ghostVec * float(i));
  10824. // Only bright spots from the centre of the source image
  10825. ghost += textureDistorted(colorTexture, offset, direction.xy, distortionVec, isSpace);
  10826. }
  10827. result += ghost;
  10828. // sample halo
  10829. vec2 haloVec = normalize(ghostVec) * haloWidth;
  10830. float weightForHalo = length(vec2(0.5) - fract(texcoord + haloVec)) / length(vec2(0.5));
  10831. weightForHalo = pow(1.0 - weightForHalo, 5.0);
  10832. result += textureDistorted(colorTexture, texcoord + haloVec, direction.xy, distortionVec, isSpace) * weightForHalo * 1.5;
  10833. // dirt on lens
  10834. vec2 dirtTexCoords = (v_textureCoordinates * invPixelSize) / dirtTextureDimensions;
  10835. if (dirtTexCoords.x > 1.0)
  10836. {
  10837. dirtTexCoords.x = mod(floor(dirtTexCoords.x), 2.0) == 1.0 ? 1.0 - fract(dirtTexCoords.x) : fract(dirtTexCoords.x);
  10838. }
  10839. if (dirtTexCoords.y > 1.0)
  10840. {
  10841. dirtTexCoords.y = mod(floor(dirtTexCoords.y), 2.0) == 1.0 ? 1.0 - fract(dirtTexCoords.y) : fract(dirtTexCoords.y);
  10842. }
  10843. result += dirtAmount * texture(dirtTexture, dirtTexCoords);
  10844. // Rotating starburst texture's coordinate
  10845. // dot(czm_view[0].xyz, vec3(0.0, 0.0, 1.0)) + dot(czm_view[1].xyz, vec3(0.0, 1.0, 0.0))
  10846. float camrot = czm_view[0].z + czm_view[1].y;
  10847. float cosValue = cos(camrot);
  10848. float sinValue = sin(camrot);
  10849. mat3 rotation = mat3(
  10850. cosValue, -sinValue, 0.0,
  10851. sinValue, cosValue, 0.0,
  10852. 0.0, 0.0, 1.0
  10853. );
  10854. vec3 st1 = vec3(v_textureCoordinates * 2.0 - vec2(1.0), 1.0);
  10855. vec3 st2 = vec3((rotation * st1).xy, 1.0);
  10856. vec3 st3 = st2 * 0.5 + vec3(0.5);
  10857. vec2 lensStarTexcoord = st3.xy;
  10858. float weightForLensFlare = length(vec3(sunPos.xy, 0.0));
  10859. float oneMinusWeightForLensFlare = max(1.0 - weightForLensFlare, 0.0);
  10860. if (!isSpace)
  10861. {
  10862. result *= oneMinusWeightForLensFlare * intensity * 0.2;
  10863. }
  10864. else
  10865. {
  10866. result *= oneMinusWeightForLensFlare * intensity;
  10867. result *= texture(starTexture, lensStarTexcoord) * pow(weightForLensFlare, 1.0) * max((1.0 - length(vec3(st1.xy, 0.0))), 0.0) * 2.0;
  10868. }
  10869. result += texture(colorTexture, v_textureCoordinates);
  10870. out_FragColor = result;
  10871. }
  10872. `;var ePi=T(S(),1),Dw=`uniform sampler2D colorTexture;
  10873. uniform vec3 white;
  10874. in vec2 v_textureCoordinates;
  10875. #ifdef AUTO_EXPOSURE
  10876. uniform sampler2D autoExposure;
  10877. #endif
  10878. // See equation 4:
  10879. // http://www.cs.utah.edu/~reinhard/cdrom/tonemap.pdf
  10880. void main()
  10881. {
  10882. vec4 fragmentColor = texture(colorTexture, v_textureCoordinates);
  10883. vec3 color = fragmentColor.rgb;
  10884. #ifdef AUTO_EXPOSURE
  10885. float exposure = texture(autoExposure, vec2(0.5)).r;
  10886. color /= exposure;
  10887. #endif
  10888. color = (color * (1.0 + color / white)) / (1.0 + color);
  10889. color = czm_inverseGamma(color);
  10890. out_FragColor = vec4(color, fragmentColor.a);
  10891. }
  10892. `;var nPi=T(S(),1),Bw=`uniform sampler2D colorTexture;
  10893. in vec2 v_textureCoordinates;
  10894. float rand(vec2 co)
  10895. {
  10896. return fract(sin(dot(co.xy ,vec2(12.9898, 78.233))) * 43758.5453);
  10897. }
  10898. void main(void)
  10899. {
  10900. float noiseValue = rand(v_textureCoordinates + sin(czm_frameNumber)) * 0.1;
  10901. vec3 rgb = texture(colorTexture, v_textureCoordinates).rgb;
  10902. vec3 green = vec3(0.0, 1.0, 0.0);
  10903. out_FragColor = vec4((noiseValue + rgb) * green, 1.0);
  10904. }
  10905. `;var oPi=T(S(),1),Yw=`uniform sampler2D colorTexture;
  10906. in vec2 v_textureCoordinates;
  10907. #ifdef AUTO_EXPOSURE
  10908. uniform sampler2D autoExposure;
  10909. #endif
  10910. // See equation 3:
  10911. // http://www.cs.utah.edu/~reinhard/cdrom/tonemap.pdf
  10912. void main()
  10913. {
  10914. vec4 fragmentColor = texture(colorTexture, v_textureCoordinates);
  10915. vec3 color = fragmentColor.rgb;
  10916. #ifdef AUTO_EXPOSURE
  10917. float exposure = texture(autoExposure, vec2(0.5)).r;
  10918. color /= exposure;
  10919. #endif
  10920. color = color / (1.0 + color);
  10921. color = czm_inverseGamma(color);
  10922. out_FragColor = vec4(color, fragmentColor.a);
  10923. }
  10924. `;var sPi=T(S(),1),Ow=`uniform sampler2D colorTexture;
  10925. uniform sampler2D silhouetteTexture;
  10926. in vec2 v_textureCoordinates;
  10927. void main(void)
  10928. {
  10929. vec4 silhouetteColor = texture(silhouetteTexture, v_textureCoordinates);
  10930. vec4 color = texture(colorTexture, v_textureCoordinates);
  10931. out_FragColor = mix(color, silhouetteColor, silhouetteColor.a);
  10932. }
  10933. `;var pPi=T(S(),1);function hT(){this._uniformMap=void 0,this._command=void 0,this._colorTexture=void 0,this._depthTexture=void 0,this._ready=!1,this._name="czm_autoexposure",this._logDepthChanged=void 0,this._useLogDepth=void 0,this._framebuffers=void 0,this._previousLuminance=new mi,this._commands=void 0,this._clearCommand=void 0,this._minMaxLuminance=new D,this.enabled=!0,this._enabled=!0,this.minimumLuminance=.1,this.maximumLuminance=10}Object.defineProperties(hT.prototype,{ready:{get:function(){return this._ready}},name:{get:function(){return this._name}},outputTexture:{get:function(){let e=this._framebuffers;if(d(e))return e[e.length-1].getColorTexture(0)}}});function Cye(e){let t=e._framebuffers;if(!d(t))return;let n=t.length;for(let i=0;i<n;++i)t[i].destroy();e._framebuffers=void 0,e._previousLuminance.destroy(),e._previousLuminance=void 0}function Klt(e,t){Cye(e);let n=e._width,i=e._height,o=t.halfFloatingPointTexture?Je.HALF_FLOAT:Je.FLOAT,r=Math.ceil(Math.log(Math.max(n,i))/Math.log(3)),s=new Array(r);for(let c=0;c<r;++c)n=Math.max(Math.ceil(n/3),1),i=Math.max(Math.ceil(i/3),1),s[c]=new mi,s[c].update(t,n,i,1,o);let a=s[r-1].getColorTexture(0);e._previousLuminance.update(t,a.width,a.height,1,o),e._framebuffers=s}function Vye(e){let t=e._commands;if(!d(t))return;let n=t.length;for(let i=0;i<n;++i)t[i].shaderProgram.destroy();e._commands=void 0}function Hlt(e,t){let n;if(t===0)n={colorTexture:function(){return e._colorTexture},colorTextureDimensions:function(){return e._colorTexture.dimensions}};else{let i=e._framebuffers[t-1].getColorTexture(0);n={colorTexture:function(){return i},colorTextureDimensions:function(){return i.dimensions}}}return n.minMaxLuminance=function(){return e._minMaxLuminance},n.previousLuminance=function(){return e._previousLuminance.getColorTexture(0)},n}function zlt(e,t){let n=`uniform sampler2D colorTexture;
  10934. in vec2 v_textureCoordinates;
  10935. float sampleTexture(vec2 offset) {
  10936. `;return e===0?n+=` vec4 color = texture(colorTexture, v_textureCoordinates + offset);
  10937. return czm_luminance(color.rgb);
  10938. `:n+=` return texture(colorTexture, v_textureCoordinates + offset).r;
  10939. `,n+=`}
  10940. `,n+=`uniform vec2 colorTextureDimensions;
  10941. uniform vec2 minMaxLuminance;
  10942. uniform sampler2D previousLuminance;
  10943. void main() {
  10944. float color = 0.0;
  10945. float xStep = 1.0 / colorTextureDimensions.x;
  10946. float yStep = 1.0 / colorTextureDimensions.y;
  10947. int count = 0;
  10948. for (int i = 0; i < 3; ++i) {
  10949. for (int j = 0; j < 3; ++j) {
  10950. vec2 offset;
  10951. offset.x = -xStep + float(i) * xStep;
  10952. offset.y = -yStep + float(j) * yStep;
  10953. if (offset.x < 0.0 || offset.x > 1.0 || offset.y < 0.0 || offset.y > 1.0) {
  10954. continue;
  10955. }
  10956. color += sampleTexture(offset);
  10957. ++count;
  10958. }
  10959. }
  10960. if (count > 0) {
  10961. color /= float(count);
  10962. }
  10963. `,e===t-1&&(n+=` float previous = texture(previousLuminance, vec2(0.5)).r;
  10964. color = clamp(color, minMaxLuminance.x, minMaxLuminance.y);
  10965. color = previous + (color - previous) / (60.0 * 1.5);
  10966. color = clamp(color, minMaxLuminance.x, minMaxLuminance.y);
  10967. `),n+=` out_FragColor = vec4(color);
  10968. }
  10969. `,n}function Jlt(e,t){Vye(e);let n=e._framebuffers,i=n.length,o=new Array(i);for(let r=0;r<i;++r)o[r]=t.createViewportQuadCommand(zlt(r,i),{framebuffer:n[r].framebuffer,uniformMap:Hlt(e,r)});e._commands=o}hT.prototype.clear=function(e){let t=this._framebuffers;if(!d(t))return;let n=this._clearCommand;d(n)||(n=this._clearCommand=new oi({color:new Y(0,0,0,0),framebuffer:void 0}));let i=t.length;for(let o=0;o<i;++o)t[o].clear(e,n)};hT.prototype.update=function(e){let t=e.drawingBufferWidth,n=e.drawingBufferHeight;(t!==this._width||n!==this._height)&&(this._width=t,this._height=n,Klt(this,e),Jlt(this,e),this._ready||(this._ready=!0)),this._minMaxLuminance.x=this.minimumLuminance,this._minMaxLuminance.y=this.maximumLuminance;let i=this._framebuffers,o=i[i.length-1];i[i.length-1]=this._previousLuminance,this._commands[this._commands.length-1].framebuffer=this._previousLuminance.framebuffer,this._previousLuminance=o};hT.prototype.execute=function(e,t){this._colorTexture=t;let n=this._commands;if(!d(n))return;let i=n.length;for(let o=0;o<i;++o)n[o].execute(e)};hT.prototype.isDestroyed=function(){return!1};hT.prototype.destroy=function(){return Cye(this),Vye(this),ue(this)};var Kw=hT;var MPi=T(S(),1);var yPi=T(S(),1),Qlt={NEAREST:0,LINEAR:1},Pd=Qlt;function fT(e){e=g(e,g.EMPTY_OBJECT);let t=e.fragmentShader,n=g(e.textureScale,1),i=g(e.pixelFormat,st.RGBA);this._fragmentShader=t,this._uniforms=e.uniforms,this._textureScale=n,this._forcePowerOfTwo=g(e.forcePowerOfTwo,!1),this._sampleMode=g(e.sampleMode,Pd.NEAREST),this._pixelFormat=i,this._pixelDatatype=g(e.pixelDatatype,Je.UNSIGNED_BYTE),this._clearColor=g(e.clearColor,Y.BLACK),this._uniformMap=void 0,this._command=void 0,this._colorTexture=void 0,this._depthTexture=void 0,this._idTexture=void 0,this._actualUniforms={},this._dirtyUniforms=[],this._texturesToRelease=[],this._texturesToCreate=[],this._texturePromise=void 0;let o=new oc;o.scissorTest={enabled:!0,rectangle:d(e.scissorRectangle)?He.clone(e.scissorRectangle):new He},this._passState=o,this._ready=!1;let r=e.name;d(r)||(r=Yn()),this._name=r,this._logDepthChanged=void 0,this._useLogDepth=void 0,this._selectedIdTexture=void 0,this._selected=void 0,this._selectedShadow=void 0,this._parentSelected=void 0,this._parentSelectedShadow=void 0,this._combinedSelected=void 0,this._combinedSelectedShadow=void 0,this._selectedLength=0,this._parentSelectedLength=0,this._selectedDirty=!0,this._textureCache=void 0,this._index=void 0,this.enabled=!0,this._enabled=!0}Object.defineProperties(fT.prototype,{ready:{get:function(){return this._ready}},name:{get:function(){return this._name}},fragmentShader:{get:function(){return this._fragmentShader}},uniforms:{get:function(){return this._uniforms}},textureScale:{get:function(){return this._textureScale}},forcePowerOfTwo:{get:function(){return this._forcePowerOfTwo}},sampleMode:{get:function(){return this._sampleMode}},pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},clearColor:{get:function(){return this._clearColor}},scissorRectangle:{get:function(){return this._passState.scissorTest.rectangle}},outputTexture:{get:function(){if(d(this._textureCache)){let e=this._textureCache.getFramebuffer(this._name);if(d(e))return e.getColorTexture(0)}}},selected:{get:function(){return this._selected},set:function(e){this._selected=e}},parentSelected:{get:function(){return this._parentSelected},set:function(e){this._parentSelected=e}}});var jlt=/uniform\s+sampler2D\s+depthTexture/g;fT.prototype._isSupported=function(e){return!jlt.test(this._fragmentShader)||e.depthTexture};function qlt(e,t,n){let i=t[n];return(typeof i=="string"||i instanceof HTMLCanvasElement||i instanceof HTMLImageElement||i instanceof HTMLVideoElement||i instanceof ImageData)&&e._dirtyUniforms.push(n),{get:function(){return t[n]},set:function(o){let r=t[n];t[n]=o;let s=e._actualUniforms,a=s[n];d(a)&&a!==r&&a instanceof Wt&&!d(e._textureCache.getStageByName(n))&&(e._texturesToRelease.push(a),delete s[n],delete s[`${n}Dimensions`]),r instanceof Wt&&e._texturesToRelease.push(r),typeof o=="string"||o instanceof HTMLCanvasElement||o instanceof HTMLImageElement||o instanceof HTMLVideoElement||o instanceof ImageData?e._dirtyUniforms.push(n):s[n]=o}}}function $lt(e,t){return function(){let n=e._actualUniforms[t];return typeof n=="function"?n():n}}function edt(e,t){return function(){let n=e[t]();if(d(n))return n.dimensions}}function tdt(e){if(d(e._uniformMap))return;let t={},n={},i=e._uniforms,o=e._actualUniforms;for(let r in i)if(i.hasOwnProperty(r)){typeof i[r]!="function"?(t[r]=$lt(e,r),n[r]=qlt(e,i,r)):(t[r]=i[r],n[r]=i[r]),o[r]=i[r];let s=t[r]();(typeof s=="string"||s instanceof Wt||s instanceof HTMLImageElement||s instanceof HTMLCanvasElement||s instanceof HTMLVideoElement)&&(t[`${r}Dimensions`]=edt(t,r))}e._uniforms={},Object.defineProperties(e._uniforms,n),e._uniformMap=xt(t,{colorTexture:function(){return e._colorTexture},colorTextureDimensions:function(){return e._colorTexture.dimensions},depthTexture:function(){return e._depthTexture},depthTextureDimensions:function(){return e._depthTexture.dimensions},czm_idTexture:function(){return e._idTexture},czm_selectedIdTexture:function(){return e._selectedIdTexture},czm_selectedIdTextureStep:function(){return 1/e._selectedIdTexture.width}})}function ndt(e,t){if(d(e._command)&&!e._logDepthChanged&&!e._selectedDirty)return;let n=e._fragmentShader;if(d(e._selectedIdTexture)){let o=e._selectedIdTexture.width;n=n.replace(/in\s+vec2\s+v_textureCoordinates;/g,""),n=`#define CZM_SELECTED_FEATURE
  10970. uniform sampler2D czm_idTexture;
  10971. uniform sampler2D czm_selectedIdTexture;
  10972. uniform float czm_selectedIdTextureStep;
  10973. in vec2 v_textureCoordinates;
  10974. bool czm_selected(vec2 offset)
  10975. {
  10976. bool selected = false;
  10977. vec4 id = texture(czm_idTexture, v_textureCoordinates + offset);
  10978. for (int i = 0; i < ${o}; ++i)
  10979. {
  10980. vec4 selectedId = texture(czm_selectedIdTexture, vec2((float(i) + 0.5) * czm_selectedIdTextureStep, 0.5));
  10981. if (all(equal(id, selectedId)))
  10982. {
  10983. return true;
  10984. }
  10985. }
  10986. return false;
  10987. }
  10988. bool czm_selected()
  10989. {
  10990. return czm_selected(vec2(0.0));
  10991. }
  10992. ${n}`}let i=new Ye({defines:[e._useLogDepth?"LOG_DEPTH":""],sources:[n]});e._command=t.createViewportQuadCommand(i,{uniformMap:e._uniformMap,owner:e})}function idt(e){let t=e._sampleMode,n,i;t===Pd.LINEAR?(n=cn.LINEAR,i=Ti.LINEAR):(n=cn.NEAREST,i=Ti.NEAREST);let o=e._sampler;(!d(o)||o.minificationFilter!==n||o.magnificationFilter!==i)&&(e._sampler=new un({wrapS:Gn.CLAMP_TO_EDGE,wrapT:Gn.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i}))}function odt(e,t){return function(n){e._texturesToCreate.push({name:t,source:n})}}function rdt(e,t){return function(){return e._textureCache.getOutputTexture(t)}}function sdt(e,t){let n,i,o,r=e._texturesToRelease,s=r.length;for(n=0;n<s;++n)i=r[n],i=i&&i.destroy();r.length=0;let a=e._texturesToCreate;for(s=a.length,n=0;n<s;++n){let m=a[n];o=m.name;let p=m.source;e._actualUniforms[o]=new Wt({context:t,source:p})}a.length=0;let c=e._dirtyUniforms;if(c.length===0&&!d(e._texturePromise)){e._ready=!0;return}if(c.length===0||d(e._texturePromise))return;s=c.length;let l=e._uniforms,u=[];for(n=0;n<s;++n){o=c[n];let m=l[o],p=e._textureCache.getStageByName(m);if(d(p))e._actualUniforms[o]=rdt(e,m);else if(typeof m=="string"){let y=new Ee({url:m});u.push(y.fetchImage().then(odt(e,o)))}else e._texturesToCreate.push({name:o,source:m})}c.length=0,u.length>0?(e._ready=!1,e._texturePromise=Promise.all(u).then(function(){e._ready=!0,e._texturePromise=void 0})):e._ready=!0}function Lye(e){d(e._command)&&(e._command.shaderProgram=e._command.shaderProgram&&e._command.shaderProgram.destroy(),e._command=void 0),e._selectedIdTexture=e._selectedIdTexture&&e._selectedIdTexture.destroy();let t=e._textureCache;if(!d(t))return;let n=e._uniforms,i=e._actualUniforms;for(let o in i)i.hasOwnProperty(o)&&i[o]instanceof Wt&&(d(t.getStageByName(n[o]))||i[o].destroy(),e._dirtyUniforms.push(o))}function adt(e){let t=d(e._selected)?e._selected.length:0,n=d(e._parentSelected)?e._parentSelected:0,i=e._selected!==e._selectedShadow||t!==e._selectedLength;if(i=i||e._parentSelected!==e._parentSelectedShadow||n!==e._parentSelectedLength,d(e._selected)&&d(e._parentSelected)?e._combinedSelected=e._selected.concat(e._parentSelected):d(e._parentSelected)?e._combinedSelected=e._parentSelected:e._combinedSelected=e._selected,!i&&d(e._combinedSelected)){if(!d(e._combinedSelectedShadow))return!0;t=e._combinedSelected.length;for(let o=0;o<t;++o)if(e._combinedSelected[o]!==e._combinedSelectedShadow[o])return!0}return i}function cdt(e,t){if(!e._selectedDirty)return;e._selectedIdTexture=e._selectedIdTexture&&e._selectedIdTexture.destroy(),e._selectedIdTexture=void 0;let n=e._combinedSelected;if(!d(n))return;let i,o,r=0,s=n.length;for(i=0;i<s;++i)o=n[i],d(o.pickIds)?r+=o.pickIds.length:d(o.pickId)&&++r;if(s===0||r===0){let u=new Uint8Array(4);u[0]=255,u[1]=255,u[2]=255,u[3]=255,e._selectedIdTexture=new Wt({context:t,pixelFormat:st.RGBA,pixelDatatype:Je.UNSIGNED_BYTE,source:{arrayBufferView:u,width:1,height:1},sampler:un.NEAREST});return}let a,c=0,l=new Uint8Array(r*4);for(i=0;i<s;++i)if(o=n[i],d(o.pickIds)){let u=o.pickIds,m=u.length;for(let p=0;p<m;++p)a=u[p].color,l[c]=Y.floatToByte(a.red),l[c+1]=Y.floatToByte(a.green),l[c+2]=Y.floatToByte(a.blue),l[c+3]=Y.floatToByte(a.alpha),c+=4}else d(o.pickId)&&(a=o.pickId.color,l[c]=Y.floatToByte(a.red),l[c+1]=Y.floatToByte(a.green),l[c+2]=Y.floatToByte(a.blue),l[c+3]=Y.floatToByte(a.alpha),c+=4);e._selectedIdTexture=new Wt({context:t,pixelFormat:st.RGBA,pixelDatatype:Je.UNSIGNED_BYTE,source:{arrayBufferView:l,width:r,height:1},sampler:un.NEAREST})}fT.prototype.update=function(e,t){if(this.enabled!==this._enabled&&!this.enabled&&Lye(this),this._enabled=this.enabled,!this._enabled||(this._logDepthChanged=t!==this._useLogDepth,this._useLogDepth=t,this._selectedDirty=adt(this),this._selectedShadow=this._selected,this._parentSelectedShadow=this._parentSelected,this._combinedSelectedShadow=this._combinedSelected,this._selectedLength=d(this._selected)?this._selected.length:0,this._parentSelectedLength=d(this._parentSelected)?this._parentSelected.length:0,cdt(this,e),tdt(this),sdt(this,e),ndt(this,e),idt(this),this._selectedDirty=!1,!this._ready))return;let n=this._textureCache.getFramebuffer(this._name);if(this._command.framebuffer=n,!d(n))return;let i=n.getColorTexture(0),o;(i.width!==e.drawingBufferWidth||i.height!==e.drawingBufferHeight)&&(o=this._renderState,(!d(o)||i.width!==o.viewport.width||i.height!==o.viewport.height)&&(this._renderState=De.fromCache({viewport:new He(0,0,i.width,i.height)}))),this._command.renderState=o};fT.prototype.execute=function(e,t,n,i){if(!d(this._command)||!d(this._command.framebuffer)||!this._ready||!this._enabled)return;this._colorTexture=t,this._depthTexture=n,this._idTexture=i,un.equals(this._colorTexture.sampler,this._sampler)||(this._colorTexture.sampler=this._sampler);let o=this.scissorRectangle.width>0&&this.scissorRectangle.height>0?this._passState:void 0;d(o)&&(o.context=e),this._command.execute(e,o)};fT.prototype.isDestroyed=function(){return!1};fT.prototype.destroy=function(){return Lye(this),ue(this)};var po=fT;var YPi=T(S(),1);function pT(e){e=g(e,g.EMPTY_OBJECT),this._stages=e.stages,this._inputPreviousStageTexture=g(e.inputPreviousStageTexture,!0);let t=e.name;d(t)||(t=Yn()),this._name=t,this._uniforms=e.uniforms,this._textureCache=void 0,this._index=void 0,this._selected=void 0,this._selectedShadow=void 0,this._parentSelected=void 0,this._parentSelectedShadow=void 0,this._combinedSelected=void 0,this._combinedSelectedShadow=void 0,this._selectedLength=0,this._parentSelectedLength=0,this._selectedDirty=!0}Object.defineProperties(pT.prototype,{ready:{get:function(){let e=this._stages,t=e.length;for(let n=0;n<t;++n)if(!e[n].ready)return!1;return!0}},name:{get:function(){return this._name}},enabled:{get:function(){return this._stages[0].enabled},set:function(e){let t=this._stages,n=t.length;for(let i=0;i<n;++i)t[i].enabled=e}},uniforms:{get:function(){return this._uniforms}},inputPreviousStageTexture:{get:function(){return this._inputPreviousStageTexture}},length:{get:function(){return this._stages.length}},selected:{get:function(){return this._selected},set:function(e){this._selected=e}},parentSelected:{get:function(){return this._parentSelected},set:function(e){this._parentSelected=e}}});pT.prototype._isSupported=function(e){let t=this._stages,n=t.length;for(let i=0;i<n;++i)if(!t[i]._isSupported(e))return!1;return!0};pT.prototype.get=function(e){return this._stages[e]};function ldt(e){let t=d(e._selected)?e._selected.length:0,n=d(e._parentSelected)?e._parentSelected:0,i=e._selected!==e._selectedShadow||t!==e._selectedLength;if(i=i||e._parentSelected!==e._parentSelectedShadow||n!==e._parentSelectedLength,d(e._selected)&&d(e._parentSelected)?e._combinedSelected=e._selected.concat(e._parentSelected):d(e._parentSelected)?e._combinedSelected=e._parentSelected:e._combinedSelected=e._selected,!i&&d(e._combinedSelected)){if(!d(e._combinedSelectedShadow))return!0;t=e._combinedSelected.length;for(let o=0;o<t;++o)if(e._combinedSelected[o]!==e._combinedSelectedShadow[o])return!0}return i}pT.prototype.update=function(e,t){this._selectedDirty=ldt(this),this._selectedShadow=this._selected,this._parentSelectedShadow=this._parentSelected,this._combinedSelectedShadow=this._combinedSelected,this._selectedLength=d(this._selected)?this._selected.length:0,this._parentSelectedLength=d(this._parentSelected)?this._parentSelected.length:0;let n=this._stages,i=n.length;for(let o=0;o<i;++o){let r=n[o];this._selectedDirty&&(r.parentSelected=this._combinedSelected),r.update(e,t)}};pT.prototype.isDestroyed=function(){return!1};pT.prototype.destroy=function(){let e=this._stages,t=e.length;for(let n=0;n<t;++n)e[n].destroy();return ue(this)};var Hc=pT;var Wr={};function Nk(e){let o=`#define USE_STEP_SIZE
  10993. ${og}`,r=new po({name:`${e}_x_direction`,fragmentShader:o,uniforms:{delta:1,sigma:2,stepSize:1,direction:0},sampleMode:Pd.LINEAR}),s=new po({name:`${e}_y_direction`,fragmentShader:o,uniforms:{delta:1,sigma:2,stepSize:1,direction:1},sampleMode:Pd.LINEAR}),a={};return Object.defineProperties(a,{delta:{get:function(){return r.uniforms.delta},set:function(c){let l=r.uniforms,u=s.uniforms;l.delta=u.delta=c}},sigma:{get:function(){return r.uniforms.sigma},set:function(c){let l=r.uniforms,u=s.uniforms;l.sigma=u.sigma=c}},stepSize:{get:function(){return r.uniforms.stepSize},set:function(c){let l=r.uniforms,u=s.uniforms;l.stepSize=u.stepSize=c}}}),new Hc({name:e,stages:[r,s],uniforms:a})}Wr.createBlurStage=function(){return Nk("czm_blur")};Wr.createDepthOfFieldStage=function(){let e=Nk("czm_depth_of_field_blur"),t=new po({name:"czm_depth_of_field_composite",fragmentShader:Fw,uniforms:{focalDistance:5,blurTexture:e.name}}),n={};return Object.defineProperties(n,{focalDistance:{get:function(){return t.uniforms.focalDistance},set:function(i){t.uniforms.focalDistance=i}},delta:{get:function(){return e.uniforms.delta},set:function(i){e.uniforms.delta=i}},sigma:{get:function(){return e.uniforms.sigma},set:function(i){e.uniforms.sigma=i}},stepSize:{get:function(){return e.uniforms.stepSize},set:function(i){e.uniforms.stepSize=i}}}),new Hc({name:"czm_depth_of_field",stages:[e,t],inputPreviousStageTexture:!1,uniforms:n})};Wr.isDepthOfFieldSupported=function(e){return e.context.depthTexture};Wr.createEdgeDetectionStage=function(){let e=Yn();return new po({name:`czm_edge_detection_${e}`,fragmentShader:Mw,uniforms:{length:.25,color:Y.clone(Y.BLACK)}})};Wr.isEdgeDetectionSupported=function(e){return e.context.depthTexture};function ddt(e){if(!d(e))return Wr.createEdgeDetectionStage();let t=new Hc({name:"czm_edge_detection_multiple",stages:e,inputPreviousStageTexture:!1}),n={},i="",o="";for(let a=0;a<e.length;++a)i+=`uniform sampler2D edgeTexture${a};
  10994. `,o+=` vec4 edge${a} = texture(edgeTexture${a}, v_textureCoordinates);
  10995. if (edge${a}.a > 0.0)
  10996. {
  10997. color = edge${a};
  10998. break;
  10999. }
  11000. `,n[`edgeTexture${a}`]=e[a].name;let r=`${i}in vec2 v_textureCoordinates;
  11001. void main() {
  11002. vec4 color = vec4(0.0);
  11003. for (int i = 0; i < ${e.length}; i++)
  11004. {
  11005. ${o} }
  11006. out_FragColor = color;
  11007. }
  11008. `,s=new po({name:"czm_edge_detection_combine",fragmentShader:r,uniforms:n});return new Hc({name:"czm_edge_detection_composite",stages:[t,s]})}Wr.createSilhouetteStage=function(e){let t=ddt(e),n=new po({name:"czm_silhouette_color_edges",fragmentShader:Ow,uniforms:{silhouetteTexture:t.name}});return new Hc({name:"czm_silhouette",stages:[t,n],inputPreviousStageTexture:!1,uniforms:t.uniforms})};Wr.isSilhouetteSupported=function(e){return e.context.depthTexture};Wr.createBloomStage=function(){let e=new po({name:"czm_bloom_contrast_bias",fragmentShader:ww,uniforms:{contrast:128,brightness:-.3}}),t=Nk("czm_bloom_blur"),n=new Hc({name:"czm_bloom_contrast_bias_blur",stages:[e,t]}),i=new po({name:"czm_bloom_generate_composite",fragmentShader:Pw,uniforms:{glowOnly:!1,bloomTexture:n.name}}),o={};return Object.defineProperties(o,{glowOnly:{get:function(){return i.uniforms.glowOnly},set:function(r){i.uniforms.glowOnly=r}},contrast:{get:function(){return e.uniforms.contrast},set:function(r){e.uniforms.contrast=r}},brightness:{get:function(){return e.uniforms.brightness},set:function(r){e.uniforms.brightness=r}},delta:{get:function(){return t.uniforms.delta},set:function(r){t.uniforms.delta=r}},sigma:{get:function(){return t.uniforms.sigma},set:function(r){t.uniforms.sigma=r}},stepSize:{get:function(){return t.uniforms.stepSize},set:function(r){t.uniforms.stepSize=r}}}),new Hc({name:"czm_bloom",stages:[n,i],inputPreviousStageTexture:!1,uniforms:o})};Wr.createAmbientOcclusionStage=function(){let e=new po({name:"czm_ambient_occlusion_generate",fragmentShader:Xw,uniforms:{intensity:3,bias:.1,lengthCap:.26,stepSize:1.95,frustumLength:1e3,randomTexture:void 0}}),t=Nk("czm_ambient_occlusion_blur");t.uniforms.stepSize=.86;let n=new Hc({name:"czm_ambient_occlusion_generate_blur",stages:[e,t]}),i=new po({name:"czm_ambient_occlusion_composite",fragmentShader:Iw,uniforms:{ambientOcclusionOnly:!1,ambientOcclusionTexture:n.name}}),o={};return Object.defineProperties(o,{intensity:{get:function(){return e.uniforms.intensity},set:function(r){e.uniforms.intensity=r}},bias:{get:function(){return e.uniforms.bias},set:function(r){e.uniforms.bias=r}},lengthCap:{get:function(){return e.uniforms.lengthCap},set:function(r){e.uniforms.lengthCap=r}},stepSize:{get:function(){return e.uniforms.stepSize},set:function(r){e.uniforms.stepSize=r}},frustumLength:{get:function(){return e.uniforms.frustumLength},set:function(r){e.uniforms.frustumLength=r}},randomTexture:{get:function(){return e.uniforms.randomTexture},set:function(r){e.uniforms.randomTexture=r}},delta:{get:function(){return t.uniforms.delta},set:function(r){t.uniforms.delta=r}},sigma:{get:function(){return t.uniforms.sigma},set:function(r){t.uniforms.sigma=r}},blurStepSize:{get:function(){return t.uniforms.stepSize},set:function(r){t.uniforms.stepSize=r}},ambientOcclusionOnly:{get:function(){return i.uniforms.ambientOcclusionOnly},set:function(r){i.uniforms.ambientOcclusionOnly=r}}}),new Hc({name:"czm_ambient_occlusion",stages:[n,i],inputPreviousStageTexture:!1,uniforms:o})};Wr.isAmbientOcclusionSupported=function(e){return e.context.depthTexture};var udt=`#define FXAA_QUALITY_PRESET 39
  11009. ${mv}
  11010. ${Uw}`;Wr.createFXAAStage=function(){return new po({name:"czm_FXAA",fragmentShader:udt,sampleMode:Pd.LINEAR})};Wr.createAcesTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE
  11011. `:"";return t+=Ew,new po({name:"czm_aces",fragmentShader:t,uniforms:{autoExposure:void 0}})};Wr.createFilmicTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE
  11012. `:"";return t+=Nw,new po({name:"czm_filmic",fragmentShader:t,uniforms:{autoExposure:void 0}})};Wr.createReinhardTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE
  11013. `:"";return t+=Yw,new po({name:"czm_reinhard",fragmentShader:t,uniforms:{autoExposure:void 0}})};Wr.createModifiedReinhardTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE
  11014. `:"";return t+=Dw,new po({name:"czm_modified_reinhard",fragmentShader:t,uniforms:{white:Y.WHITE,autoExposure:void 0}})};Wr.createAutoExposureStage=function(){return new Kw};Wr.createBlackAndWhiteStage=function(){return new po({name:"czm_black_and_white",fragmentShader:Ww,uniforms:{gradations:5}})};Wr.createBrightnessStage=function(){return new po({name:"czm_brightness",fragmentShader:vw,uniforms:{brightness:.5}})};Wr.createNightVisionStage=function(){return new po({name:"czm_night_vision",fragmentShader:Bw})};Wr.createDepthViewStage=function(){return new po({name:"czm_depth_view",fragmentShader:Aw})};Wr.createLensFlareStage=function(){return new po({name:"czm_lens_flare",fragmentShader:kw,uniforms:{dirtTexture:$t("Assets/Textures/LensFlare/DirtMask.jpg"),starTexture:$t("Assets/Textures/LensFlare/StarBurst.jpg"),intensity:2,distortion:10,ghostDispersal:.4,haloWidth:.4,dirtAmount:.4,earthRadius:re.WGS84.maximumRadius}})};var Ou=Wr;var Gvi=T(S(),1);function Y0(e){this._collection=e,this._framebuffers=[],this._stageNameToFramebuffer={},this._width=void 0,this._height=void 0,this._updateDependencies=!1}function zw(e){for(;d(e.length);)e=e.get(e.length-1);return e.name}function y4(e,t,n,i,o){if(!i.enabled||!i._isSupported(t))return o;let r=n[i.name]={};if(d(o)){let a=e.getStageByName(o);r[zw(a)]=!0}let s=i.uniforms;if(d(s)){let a=Object.getOwnPropertyNames(s),c=a.length;for(let l=0;l<c;++l){let u=s[a[l]];if(typeof u=="string"){let m=e.getStageByName(u);d(m)&&(r[zw(m)]=!0)}}}return i.name}function Hw(e,t,n,i,o){if(d(i.enabled)&&!i.enabled||d(i._isSupported)&&!i._isSupported(t))return o;let r=o,s=!d(i.inputPreviousStageTexture)||i.inputPreviousStageTexture,a=o,c=i.length;for(let m=0;m<c;++m){let p=i.get(m);d(p.length)?a=Hw(e,t,n,p,o):a=y4(e,t,n,p,o),s&&(o=a)}let l,u;if(s)for(l=1;l<c;++l)u=zw(i.get(l)),d(n[u])||(n[u]={}),n[u][r]=!0;else for(l=1;l<c;++l){u=zw(i.get(l));let m=n[u];for(let p=0;p<l;++p)m[zw(i.get(p))]=!0}return a}function mdt(e,t){let n={};if(d(e.ambientOcclusion)){let i=e.ambientOcclusion,o=e.bloom,r=e._tonemapping,s=e.fxaa,a=Hw(e,t,n,i,void 0);a=Hw(e,t,n,o,a),a=y4(e,t,n,r,a),a=Hw(e,t,n,e,a),y4(e,t,n,s,a)}else Hw(e,t,n,e,void 0);return n}function hdt(e,t,n){let o=e._collection.getStageByName(t),r=o._textureScale,s=o._forcePowerOfTwo,a=o._pixelFormat,c=o._pixelDatatype,l=o._clearColor,u,m,p=e._framebuffers,y=p.length;for(u=0;u<y;++u){if(m=p[u],r!==m.textureScale||s!==m.forcePowerOfTwo||a!==m.pixelFormat||c!==m.pixelDatatype||!Y.equals(l,m.clearColor))continue;let f=m.stages,x=f.length,_=!1;for(let C=0;C<x;++C)if(n[f[C]]){_=!0;break}if(!_)break}return d(m)&&u<y?(m.stages.push(t),m):(m={textureScale:r,forcePowerOfTwo:s,pixelFormat:a,pixelDatatype:c,clearColor:l,stages:[t],buffer:new mi({pixelFormat:a,pixelDatatype:c}),clear:void 0},p.push(m),m)}function fdt(e,t){let n=mdt(e._collection,t);for(let i in n)n.hasOwnProperty(i)&&(e._stageNameToFramebuffer[i]=hdt(e,i,n[i]))}function g4(e){let t=e._framebuffers,n=t.length;for(let i=0;i<n;++i)t[i].buffer.destroy()}function pdt(e,t){let n=e._width,i=e._height,o=e._framebuffers,r=o.length;for(let s=0;s<r;++s){let a=o[s],c=a.textureScale,l=Math.ceil(n*c),u=Math.ceil(i*c),m=Math.min(l,u);a.forcePowerOfTwo&&(W.isPowerOfTwo(m)||(m=W.nextPowerOfTwo(m)),l=m,u=m),a.buffer.update(t,l,u),a.clear=new oi({color:a.clearColor,framebuffer:a.buffer.framebuffer})}}Y0.prototype.updateDependencies=function(){this._updateDependencies=!0};Y0.prototype.update=function(e){let t=this._collection,n=this._updateDependencies,i=d(t.ambientOcclusion)&&t.ambientOcclusion.enabled&&t.ambientOcclusion._isSupported(e),o=d(t.bloom)&&t.bloom.enabled&&t.bloom._isSupported(e),r=d(t._tonemapping)&&t._tonemapping.enabled&&t._tonemapping._isSupported(e),s=d(t.fxaa)&&t.fxaa.enabled&&t.fxaa._isSupported(e),a=!d(t._activeStages)||t._activeStages.length>0||i||o||r||s;if((n||!a&&this._framebuffers.length>0)&&(g4(this),this._framebuffers.length=0,this._stageNameToFramebuffer={},this._width=void 0,this._height=void 0),!n&&!a)return;this._framebuffers.length===0&&fdt(this,e);let c=e.drawingBufferWidth,l=e.drawingBufferHeight,u=this._width!==c||this._height!==l;!n&&!u||(this._width=c,this._height=l,this._updateDependencies=!1,g4(this),pdt(this,e))};Y0.prototype.clear=function(e){let t=this._framebuffers;for(let n=0;n<t.length;++n)t[n].clear.execute(e)};Y0.prototype.getStageByName=function(e){return this._collection.getStageByName(e)};Y0.prototype.getOutputTexture=function(e){return this._collection.getOutputTexture(e)};Y0.prototype.getFramebuffer=function(e){let t=this._stageNameToFramebuffer[e];if(d(t))return t.buffer.framebuffer};Y0.prototype.isDestroyed=function(){return!1};Y0.prototype.destroy=function(){return g4(this),ue(this)};var bT=Y0;var Xvi=T(S(),1),Jw={REINHARD:0,MODIFIED_REINHARD:1,FILMIC:2,ACES:3,validate:function(e){return e===Jw.REINHARD||e===Jw.MODIFIED_REINHARD||e===Jw.FILMIC||e===Jw.ACES}},rg=Object.freeze(Jw);var x4=[];function zc(){let e=Ou.createFXAAStage(),t=Ou.createAmbientOcclusionStage(),n=Ou.createBloomStage();this._autoExposureEnabled=!1,this._autoExposure=Ou.createAutoExposureStage(),this._tonemapping=void 0,this._tonemapper=void 0,this.tonemapper=rg.ACES;let i=this._tonemapping;e.enabled=!1,t.enabled=!1,n.enabled=!1,i.enabled=!1;let o=new bT(this),r={},s=x4;for(s.push(e,t,n,i);s.length>0;){let c=s.pop();r[c.name]=c,c._textureCache=o;let l=c.length;if(d(l))for(let u=0;u<l;++u)s.push(c.get(u))}this._stages=[],this._activeStages=[],this._previousActiveStages=[],this._randomTexture=void 0;let a=this;t.uniforms.randomTexture=function(){return a._randomTexture},this._ao=t,this._bloom=n,this._fxaa=e,this._aoEnabled=void 0,this._bloomEnabled=void 0,this._tonemappingEnabled=void 0,this._fxaaEnabled=void 0,this._activeStagesChanged=!1,this._stagesRemoved=!1,this._textureCacheDirty=!1,this._stageNames=r,this._textureCache=o}Object.defineProperties(zc.prototype,{ready:{get:function(){let e=!1,t=this._stages,n=t.length;for(let a=n-1;a>=0;--a){let c=t[a];e=e||c.ready&&c.enabled}let i=this._fxaa,o=this._ao,r=this._bloom,s=this._tonemapping;return e=e||i.ready&&i.enabled,e=e||o.ready&&o.enabled,e=e||r.ready&&r.enabled,e=e||s.ready&&s.enabled,e}},fxaa:{get:function(){return this._fxaa}},ambientOcclusion:{get:function(){return this._ao}},bloom:{get:function(){return this._bloom}},length:{get:function(){return _4(this),this._stages.length}},outputTexture:{get:function(){let e=this._fxaa;if(e.enabled&&e.ready)return this.getOutputTexture(e.name);let t=this._stages,n=t.length;for(let s=n-1;s>=0;--s){let a=t[s];if(d(a)&&a.ready&&a.enabled)return this.getOutputTexture(a.name)}let i=this._tonemapping;if(i.enabled&&i.ready)return this.getOutputTexture(i.name);let o=this._bloom;if(o.enabled&&o.ready)return this.getOutputTexture(o.name);let r=this._ao;if(r.enabled&&r.ready)return this.getOutputTexture(r.name)}},hasSelected:{get:function(){let e=this._stages.slice();for(;e.length>0;){let t=e.pop();if(!d(t))continue;if(d(t.selected))return!0;let n=t.length;if(d(n))for(let i=0;i<n;++i)e.push(t.get(i))}return!1}},tonemapper:{get:function(){return this._tonemapper},set:function(e){if(this._tonemapper===e)return;d(this._tonemapping)&&(delete this._stageNames[this._tonemapping.name],this._tonemapping.destroy());let t=this._autoExposureEnabled,n;switch(e){case rg.REINHARD:n=Ou.createReinhardTonemappingStage(t);break;case rg.MODIFIED_REINHARD:n=Ou.createModifiedReinhardTonemappingStage(t);break;case rg.FILMIC:n=Ou.createFilmicTonemappingStage(t);break;default:n=Ou.createAcesTonemappingStage(t);break}if(t){let i=this._autoExposure;n.uniforms.autoExposure=function(){return i.outputTexture}}this._tonemapper=e,this._tonemapping=n,d(this._stageNames)&&(this._stageNames[n.name]=n,n._textureCache=this._textureCache),this._textureCacheDirty=!0}}});function _4(e){if(!e._stagesRemoved)return;e._stagesRemoved=!1;let t=[],n=e._stages,i=n.length;for(let o=0,r=0;o<i;++o){let s=n[o];s&&(s._index=r++,t.push(s))}e._stages=t}zc.prototype.add=function(e){let t=this._stageNames,n=x4;for(n.push(e);n.length>0;){let o=n.pop();t[o.name]=o,o._textureCache=this._textureCache;let r=o.length;if(d(r))for(let s=0;s<r;++s)n.push(o.get(s))}let i=this._stages;return e._index=i.length,i.push(e),this._textureCacheDirty=!0,e};zc.prototype.remove=function(e){if(!this.contains(e))return!1;let t=this._stageNames,n=x4;for(n.push(e);n.length>0;){let i=n.pop();delete t[i.name];let o=i.length;if(d(o))for(let r=0;r<o;++r)n.push(i.get(r))}return this._stages[e._index]=void 0,this._stagesRemoved=!0,this._textureCacheDirty=!0,e._index=void 0,e._textureCache=void 0,e.destroy(),!0};zc.prototype.contains=function(e){return d(e)&&d(e._index)&&e._textureCache===this._textureCache};zc.prototype.get=function(e){return _4(this),this._stages[e]};zc.prototype.removeAll=function(){let e=this._stages,t=e.length;for(let n=0;n<t;++n)this.remove(e[n]);e.length=0};zc.prototype.getStageByName=function(e){return this._stageNames[e]};zc.prototype.update=function(e,t,n){_4(this);let i=this._activeStages,o=this._activeStages=this._previousActiveStages;this._previousActiveStages=i;let r=this._stages,s=o.length=r.length,a,c,l=0;for(a=0;a<s;++a)c=r[a],c.ready&&c.enabled&&c._isSupported(e)&&(o[l++]=c);o.length=l;let u=l!==i.length;if(!u){for(a=0;a<l;++a)if(o[a]!==i[a]){u=!0;break}}let m=this._ao,p=this._bloom,y=this._autoExposure,f=this._tonemapping,x=this._fxaa;f.enabled=n;let _=m.enabled&&m._isSupported(e),C=p.enabled&&p._isSupported(e),V=f.enabled&&f._isSupported(e),L=x.enabled&&x._isSupported(e);if((u||this._textureCacheDirty||_!==this._aoEnabled||C!==this._bloomEnabled||V!==this._tonemappingEnabled||L!==this._fxaaEnabled)&&(this._textureCache.updateDependencies(),this._aoEnabled=_,this._bloomEnabled=C,this._tonemappingEnabled=V,this._fxaaEnabled=L,this._textureCacheDirty=!1),d(this._randomTexture)&&!_&&(this._randomTexture.destroy(),this._randomTexture=void 0),!d(this._randomTexture)&&_){s=256*256*3;let Z=new Uint8Array(s);for(a=0;a<s;a+=3)Z[a]=Math.floor(Math.random()*255);this._randomTexture=new Wt({context:e,pixelFormat:st.RGB,pixelDatatype:Je.UNSIGNED_BYTE,source:{arrayBufferView:Z,width:256,height:256},sampler:new un({wrapS:Gn.REPEAT,wrapT:Gn.REPEAT,minificationFilter:cn.NEAREST,magnificationFilter:Ti.NEAREST})})}for(this._textureCache.update(e),x.update(e,t),m.update(e,t),p.update(e,t),f.update(e,t),this._autoExposureEnabled&&y.update(e,t),s=r.length,a=0;a<s;++a)r[a].update(e,t);for(l=0,a=0;a<s;++a)c=r[a],c.ready&&c.enabled&&c._isSupported(e)&&l++;u=l!==o.length,u&&this.update(e,t,n)};zc.prototype.clear=function(e){this._textureCache.clear(e),this._autoExposureEnabled&&this._autoExposure.clear(e)};function yT(e){for(;d(e.length);)e=e.get(e.length-1);return e.outputTexture}zc.prototype.getOutputTexture=function(e){let t=this.getStageByName(e);if(d(t))return yT(t)};function Ff(e,t,n,i,o){if(d(e.execute)){e.execute(t,n,i,o);return}let r=e.length,s;if(e.inputPreviousStageTexture)for(Ff(e.get(0),t,n,i,o),s=1;s<r;++s)Ff(e.get(s),t,yT(e.get(s-1)),i,o);else for(s=0;s<r;++s)Ff(e.get(s),t,n,i,o)}zc.prototype.execute=function(e,t,n,i){let o=this._activeStages,r=o.length,s=this._fxaa,a=this._ao,c=this._bloom,l=this._autoExposure,u=this._tonemapping,m=a.enabled&&a._isSupported(e),p=c.enabled&&c._isSupported(e),y=this._autoExposureEnabled,f=u.enabled&&u._isSupported(e),x=s.enabled&&s._isSupported(e);if(!x&&!m&&!p&&!f&&r===0)return;let _=t;m&&a.ready&&(Ff(a,e,_,n,i),_=yT(a)),p&&c.ready&&(Ff(c,e,_,n,i),_=yT(c)),y&&l.ready&&Ff(l,e,_,n,i),f&&u.ready&&(Ff(u,e,_,n,i),_=yT(u));let C=_;if(r>0){Ff(o[0],e,_,n,i);for(let V=1;V<r;++V)Ff(o[V],e,yT(o[V-1]),n,i);C=yT(o[r-1])}x&&s.ready&&Ff(s,e,C,n,i)};zc.prototype.copy=function(e,t){if(!d(this._copyColorCommand)){let n=this;this._copyColorCommand=e.createViewportQuadCommand(Al,{uniformMap:{colorTexture:function(){return n.outputTexture}},owner:this})}this._copyColorCommand.framebuffer=t,this._copyColorCommand.execute(e)};zc.prototype.isDestroyed=function(){return!1};zc.prototype.destroy=function(){return this._fxaa.destroy(),this._ao.destroy(),this._bloom.destroy(),this._autoExposure.destroy(),this._tonemapping.destroy(),this.removeAll(),this._textureCache=this._textureCache&&this._textureCache.destroy(),ue(this)};var Qw=zc;var lwi=T(S(),1);function gT(e){this._scene=e,this._currentTweens=[],this._morphHandler=void 0,this._morphCancelled=!1,this._completeMorph=void 0,this._morphToOrthographic=!1}gT.prototype.completeMorph=function(){d(this._completeMorph)&&this._completeMorph()};gT.prototype.morphTo2D=function(e,t){d(this._completeMorph)&&this._completeMorph();let n=this._scene;this._previousMode=n.mode,this._morphToOrthographic=n.camera.frustum instanceof en,!(this._previousMode===ie.SCENE2D||this._previousMode===ie.MORPHING)&&(this._scene.morphStart.raiseEvent(this,this._previousMode,ie.SCENE2D,!0),n._mode=ie.MORPHING,n.camera._setTransform(A.IDENTITY),this._previousMode===ie.COLUMBUS_VIEW?zdt(this,e):tut(this,e,t),e===0&&d(this._completeMorph)&&this._completeMorph())};var bdt=new h,ydt=new h,gdt=new h,xdt=new h,_dt=new h,Tdt=new h,Sdt=new h,Cdt=new he,Vdt=new A,Ldt=new Ri,Rdt=new en,Zdt={position:void 0,direction:void 0,up:void 0,position2D:void 0,direction2D:void 0,up2D:void 0,frustum:void 0};gT.prototype.morphToColumbusView=function(e,t){d(this._completeMorph)&&this._completeMorph();let n=this._scene;if(this._previousMode=n.mode,this._previousMode===ie.COLUMBUS_VIEW||this._previousMode===ie.MORPHING)return;this._scene.morphStart.raiseEvent(this,this._previousMode,ie.COLUMBUS_VIEW,!0),n.camera._setTransform(A.IDENTITY);let i=bdt,o=ydt,r=gdt;if(e>0)i.x=0,i.y=-1,i.z=1,i=h.multiplyByScalar(h.normalize(i,i),5*t.maximumRadius,i),h.negate(h.normalize(i,o),o),h.cross(h.UNIT_X,o,r);else{let l=n.camera;if(this._previousMode===ie.SCENE2D)h.clone(l.position,i),i.z=l.frustum.right-l.frustum.left,h.negate(h.UNIT_Z,o),h.clone(h.UNIT_Y,r);else{h.clone(l.positionWC,i),h.clone(l.directionWC,o),h.clone(l.upWC,r);let u=t.scaleToGeodeticSurface(i,Sdt),m=vt.eastNorthUpToFixedFrame(u,t,Vdt);A.inverseTransformation(m,m),n.mapProjection.project(t.cartesianToCartographic(i,Cdt),i),A.multiplyByPointAsVector(m,o,o),A.multiplyByPointAsVector(m,r,r)}}let s;this._morphToOrthographic?(s=Rdt,s.width=n.camera.frustum.right-n.camera.frustum.left,s.aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight):(s=Ldt,s.aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight,s.fov=W.toRadians(60));let a=Zdt;a.position=i,a.direction=o,a.up=r,a.frustum=s;let c=iut(a);jw(this,c),this._previousMode===ie.SCENE2D?nut(this,e,a,c):(a.position2D=A.multiplyByPoint(co.TRANSFORM_2D,i,xdt),a.direction2D=A.multiplyByPointAsVector(co.TRANSFORM_2D,o,_dt),a.up2D=A.multiplyByPointAsVector(co.TRANSFORM_2D,r,Tdt),n._mode=ie.MORPHING,Fye(this,e,a,c)),e===0&&d(this._completeMorph)&&this._completeMorph()};var C4={position:new h,direction:new h,up:new h,frustum:void 0},Zye=new Ri;gT.prototype.morphTo3D=function(e,t){d(this._completeMorph)&&this._completeMorph();let n=this._scene;if(this._previousMode=n.mode,!(this._previousMode===ie.SCENE3D||this._previousMode===ie.MORPHING)){if(this._scene.morphStart.raiseEvent(this,this._previousMode,ie.SCENE3D,!0),n._mode=ie.MORPHING,n.camera._setTransform(A.IDENTITY),this._previousMode===ie.SCENE2D)Mdt(this,e,t);else{let i;e>0?(i=C4,h.fromDegrees(0,0,5*t.maximumRadius,t,i.position),h.negate(i.position,i.direction),h.normalize(i.direction,i.direction),h.clone(h.UNIT_Z,i.up)):i=Gye(this,t);let o,r=n.camera;r.frustum instanceof en?o=r.frustum.clone():(o=Zye,o.aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight,o.fov=W.toRadians(60)),i.frustum=o;let s=Mye(i);jw(this,s),S4(this,e,i,s)}e===0&&d(this._completeMorph)&&this._completeMorph()}};gT.prototype.isDestroyed=function(){return!1};gT.prototype.destroy=function(){return Uk(this),ue(this)};function jw(e,t){if(e._scene.completeMorphOnUserInput){e._morphHandler=new Ed(e._scene.canvas);let n=function(){e._morphCancelled=!0,e._scene.camera.cancelFlight(),t(e)};e._completeMorph=n,e._morphHandler.setInputAction(n,_n.LEFT_DOWN),e._morphHandler.setInputAction(n,_n.MIDDLE_DOWN),e._morphHandler.setInputAction(n,_n.RIGHT_DOWN),e._morphHandler.setInputAction(n,_n.WHEEL)}}function Uk(e){let t=e._currentTweens;for(let n=0;n<t.length;++n)t[n].cancelTween();e._currentTweens.length=0,e._morphHandler=e._morphHandler&&e._morphHandler.destroy()}var Gdt=new he,Edt=new h,Xdt=new A;function Gye(e,t){let n=e._scene,i=n.camera,o=C4,r=o.position,s=o.direction,a=o.up,c=n.mapProjection.unproject(i.position,Gdt);t.cartographicToCartesian(c,r);let l=t.scaleToGeodeticSurface(r,Edt),u=vt.eastNorthUpToFixedFrame(l,t,Xdt);return A.multiplyByPointAsVector(u,i.direction,s),A.multiplyByPointAsVector(u,i.up,a),o}var Idt=new h,Wdt=new h,Pdt=new h,vdt=new h,wdt=new h,Fdt=new h;function S4(e,t,n,i){t*=.5;let o=e._scene,r=o.camera,s=h.clone(r.position,Idt),a=h.clone(r.direction,Wdt),c=h.clone(r.up,Pdt),l=A.multiplyByPoint(co.TRANSFORM_2D_INVERSE,n.position,vdt),u=A.multiplyByPointAsVector(co.TRANSFORM_2D_INVERSE,n.direction,wdt),m=A.multiplyByPointAsVector(co.TRANSFORM_2D_INVERSE,n.up,Fdt);function p(f){Ku(s,l,f.time,r.position),Ku(a,u,f.time,r.direction),Ku(c,m,f.time,r.up),h.cross(r.direction,r.up,r.right),h.normalize(r.right,r.right)}let y=o.tweens.add({duration:t,easingFunction:Xr.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:p,complete:function(){Aye(e,o,0,1,t,i)}});e._currentTweens.push(y)}var Adt=new en,Eye=new h,Xye=new h,Iye=new h,V4=new h,Wye=new h,Pye=new h;function Mdt(e,t,n){t/=3;let i=e._scene,o=i.camera,r;t>0?(r=C4,h.fromDegrees(0,0,5*n.maximumRadius,n,r.position),h.negate(r.position,r.direction),h.normalize(r.direction,r.direction),h.clone(h.UNIT_Z,r.up)):(o.position.z=o.frustum.right-o.frustum.left,r=Gye(e,n));let s;e._morphToOrthographic?(s=Adt,s.aspectRatio=i.drawingBufferWidth/i.drawingBufferHeight,s.width=o.frustum.right-o.frustum.left):(s=Zye,s.aspectRatio=i.drawingBufferWidth/i.drawingBufferHeight,s.fov=W.toRadians(60)),r.frustum=s;let a=Mye(r);jw(e,a);let c;e._morphToOrthographic?c=function(){S4(e,t,r,a)}:c=function(){wye(e,t,r,function(){S4(e,t,r,a)})},t>0?(i._mode=ie.SCENE2D,o.flyTo({duration:t,destination:h.fromDegrees(0,0,5*n.maximumRadius,n,V4),complete:function(){i._mode=ie.MORPHING,c()}})):c()}function Ku(e,t,n,i){return h.lerp(e,t,n,i)}function vye(e,t,n,i,o){let r=e._scene,s=r.camera;if(s.frustum instanceof en)return;let a=s.frustum.fov,c=W.RADIANS_PER_DEGREE*.5,l=n.position.z*Math.tan(a*.5);s.frustum.far=l/Math.tan(c*.5)+1e7;function u(p){s.frustum.fov=W.lerp(a,c,p.time);let y=l/Math.tan(s.frustum.fov*.5);i(s,y)}let m=r.tweens.add({duration:t,easingFunction:Xr.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:u,complete:function(){s.frustum=n.frustum.clone(),o(e)}});e._currentTweens.push(m)}var Ndt=new h,Udt=new h,kdt=new h,T4=new h,Ddt=new h,Bdt=new h,Ydt=new yr,Odt=new Sn,Kdt=new h,Hdt={position:void 0,direction:void 0,up:void 0,frustum:void 0};function zdt(e,t){t*=.5;let n=e._scene,i=n.camera,o=h.clone(i.position,Ndt),r=h.clone(i.direction,Udt),s=h.clone(i.up,kdt),a=h.negate(h.UNIT_Z,Ddt),c=h.clone(h.UNIT_Y,Bdt),l=T4;if(t>0)h.clone(h.ZERO,T4),l.z=5*n.mapProjection.ellipsoid.maximumRadius;else{h.clone(o,T4);let _=Odt;A.multiplyByPoint(co.TRANSFORM_2D,o,_.origin),A.multiplyByPointAsVector(co.TRANSFORM_2D,r,_.direction);let C=n.globe;if(d(C)){let V=C.pickWorldCoordinates(_,n,!0,Kdt);d(V)&&(A.multiplyByPoint(co.TRANSFORM_2D_INVERSE,V,l),l.z+=h.distance(o,l))}}let u=Ydt;u.right=l.z*.5,u.left=-u.right,u.top=u.right*(n.drawingBufferHeight/n.drawingBufferWidth),u.bottom=-u.top;let m=Hdt;m.position=l,m.direction=a,m.up=c,m.frustum=u;let p=Nye(m);jw(e,p);function y(_){Ku(o,l,_.time,i.position),Ku(r,a,_.time,i.direction),Ku(s,c,_.time,i.up),h.cross(i.direction,i.up,i.right),h.normalize(i.right,i.right),i._adjustOrthographicFrustum(!0)}function f(_,C){_.position.z=C}let x=n.tweens.add({duration:t,easingFunction:Xr.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:y,complete:function(){vye(e,t,m,f,p)}});e._currentTweens.push(x)}var Rye=new he,Jdt={position:new h,direction:new h,up:new h,position2D:new h,direction2D:new h,up2D:new h,frustum:new yr},Qdt={position:new h,direction:new h,up:new h,frustum:void 0},jdt=new h,qdt=new Sn,$dt=new A,eut=new h;function tut(e,t,n){t*=.5;let i=e._scene,o=i.camera,r=Jdt;if(t>0)h.clone(h.ZERO,r.position),r.position.z=5*n.maximumRadius,h.negate(h.UNIT_Z,r.direction),h.clone(h.UNIT_Y,r.up);else{n.cartesianToCartographic(o.positionWC,Rye),i.mapProjection.project(Rye,r.position),h.negate(h.UNIT_Z,r.direction),h.clone(h.UNIT_Y,r.up);let m=qdt;h.clone(r.position2D,m.origin);let p=h.clone(o.directionWC,m.direction),y=n.scaleToGeodeticSurface(o.positionWC,eut),f=vt.eastNorthUpToFixedFrame(y,n,$dt);A.inverseTransformation(f,f),A.multiplyByPointAsVector(f,p,p),A.multiplyByPointAsVector(co.TRANSFORM_2D,p,p);let x=i.globe;if(d(x)){let _=x.pickWorldCoordinates(m,i,!0,jdt);if(d(_)){let C=h.distance(r.position2D,_);_.x+=C,h.clone(_,r.position2D)}}}function s(m,p){m.position.x=p}A.multiplyByPoint(co.TRANSFORM_2D,r.position,r.position2D),A.multiplyByPointAsVector(co.TRANSFORM_2D,r.direction,r.direction2D),A.multiplyByPointAsVector(co.TRANSFORM_2D,r.up,r.up2D);let a=r.frustum;a.right=r.position.z*.5,a.left=-a.right,a.top=a.right*(i.drawingBufferHeight/i.drawingBufferWidth),a.bottom=-a.top;let c=Qdt;A.multiplyByPoint(co.TRANSFORM_2D_INVERSE,r.position2D,c.position),h.clone(r.direction,c.direction),h.clone(r.up,c.up),c.frustum=a;let l=Nye(c);jw(e,l);function u(){vye(e,t,r,s,l)}Fye(e,t,r,u)}function wye(e,t,n,i){let o=e._scene,r=o.camera,s=r.frustum.right-r.frustum.left;r.frustum=n.frustum.clone();let a=r.frustum.fov,c=W.RADIANS_PER_DEGREE*.5,l=s*Math.tan(a*.5);r.frustum.far=l/Math.tan(c*.5)+1e7,r.frustum.fov=c;function u(p){r.frustum.fov=W.lerp(c,a,p.time),r.position.z=l/Math.tan(r.frustum.fov*.5)}let m=o.tweens.add({duration:t,easingFunction:Xr.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:u,complete:function(){i(e)}});e._currentTweens.push(m)}function nut(e,t,n,i){t*=.5;let o=e._scene,r=o.camera,s=h.clone(n.position,V4),a=h.clone(n.direction,Wye),c=h.clone(n.up,Pye);o._mode=ie.MORPHING;function l(){r.frustum=n.frustum.clone();let u=h.clone(r.position,Eye),m=h.clone(r.direction,Xye),p=h.clone(r.up,Iye);u.z=s.z;function y(x){Ku(u,s,x.time,r.position),Ku(m,a,x.time,r.direction),Ku(p,c,x.time,r.up),h.cross(r.direction,r.up,r.right),h.normalize(r.right,r.right)}let f=o.tweens.add({duration:t,easingFunction:Xr.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:y,complete:function(){i(e)}});e._currentTweens.push(f)}e._morphToOrthographic?l():wye(e,0,n,l)}function Fye(e,t,n,i){let o=e._scene,r=o.camera,s=h.clone(r.position,Eye),a=h.clone(r.direction,Xye),c=h.clone(r.up,Iye),l=h.clone(n.position2D,V4),u=h.clone(n.direction2D,Wye),m=h.clone(n.up2D,Pye);function p(f){Ku(s,l,f.time,r.position),Ku(a,u,f.time,r.direction),Ku(c,m,f.time,r.up),h.cross(r.direction,r.up,r.right),h.normalize(r.right,r.right),r._adjustOrthographicFrustum(!0)}let y=o.tweens.add({duration:t,easingFunction:Xr.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:p,complete:function(){Aye(e,o,1,0,t,i)}});e._currentTweens.push(y)}function Aye(e,t,n,i,o,r){let s={object:t,property:"morphTime",startValue:n,stopValue:i,duration:o,easingFunction:Xr.QUARTIC_OUT};d(r)&&(s.complete=function(){r(e)});let a=t.tweens.addProperty(s);e._currentTweens.push(a)}function Mye(e){return function(t){let n=t._scene;n._mode=ie.SCENE3D,n.morphTime=ie.getMorphTime(ie.SCENE3D),Uk(t);let i=n.camera;(t._previousMode!==ie.MORPHING||t._morphCancelled)&&(t._morphCancelled=!1,h.clone(e.position,i.position),h.clone(e.direction,i.direction),h.clone(e.up,i.up),h.cross(i.direction,i.up,i.right),h.normalize(i.right,i.right),i.frustum=e.frustum.clone());let o=i.frustum;n.frameState.useLogDepth&&(o.near=.1,o.far=1e10);let r=d(t._completeMorph);t._completeMorph=void 0,n.camera.update(n.mode),t._scene.morphComplete.raiseEvent(t,t._previousMode,ie.SCENE3D,r)}}function Nye(e){return function(t){let n=t._scene;n._mode=ie.SCENE2D,n.morphTime=ie.getMorphTime(ie.SCENE2D),Uk(t);let i=n.camera;h.clone(e.position,i.position),i.position.z=n.mapProjection.ellipsoid.maximumRadius*2,h.clone(e.direction,i.direction),h.clone(e.up,i.up),h.cross(i.direction,i.up,i.right),h.normalize(i.right,i.right),i.frustum=e.frustum.clone();let o=d(t._completeMorph);t._completeMorph=void 0,n.camera.update(n.mode),t._scene.morphComplete.raiseEvent(t,t._previousMode,ie.SCENE2D,o)}}function iut(e){return function(t){let n=t._scene;n._mode=ie.COLUMBUS_VIEW,n.morphTime=ie.getMorphTime(ie.COLUMBUS_VIEW),Uk(t);let i=n.camera;(t._previousModeMode!==ie.MORPHING||t._morphCancelled)&&(t._morphCancelled=!1,h.clone(e.position,i.position),h.clone(e.direction,i.direction),h.clone(e.up,i.up),h.cross(i.direction,i.up,i.right),h.normalize(i.right,i.right));let o=i.frustum;n.frameState.useLogDepth&&(o.near=.1,o.far=1e10);let r=d(t._completeMorph);t._completeMorph=void 0,n.camera.update(n.mode),t._scene.morphComplete.raiseEvent(t,t._previousMode,ie.COLUMBUS_VIEW,r)}}var qw=gT;var oFi=T(S(),1);var Twi=T(S(),1);var uwi=T(S(),1),out={LEFT_DRAG:0,RIGHT_DRAG:1,MIDDLE_DRAG:2,WHEEL:3,PINCH:4},vi=Object.freeze(out);function hc(e,t){let n=e;return d(t)&&(n+=`+${t}`),n}function rut(e,t){D.clone(e.distance.startPosition,t.distance.startPosition),D.clone(e.distance.endPosition,t.distance.endPosition),D.clone(e.angleAndHeight.startPosition,t.angleAndHeight.startPosition),D.clone(e.angleAndHeight.endPosition,t.angleAndHeight.endPosition)}function Uye(e,t,n){let i=hc(vi.PINCH,t),o=e._update,r=e._isDown,s=e._eventStartPosition,a=e._pressTime,c=e._releaseTime;o[i]=!0,r[i]=!1,s[i]=new D;let l=e._movement[i];d(l)||(l=e._movement[i]={}),l.distance={startPosition:new D,endPosition:new D},l.angleAndHeight={startPosition:new D,endPosition:new D},l.prevAngle=0,e._eventHandler.setInputAction(function(u){e._buttonsDown++,r[i]=!0,a[i]=new Date,D.lerp(u.position1,u.position2,.5,s[i])},_n.PINCH_START,t),e._eventHandler.setInputAction(function(){e._buttonsDown=Math.max(e._buttonsDown-1,0),r[i]=!1,c[i]=new Date},_n.PINCH_END,t),e._eventHandler.setInputAction(function(u){if(r[i]){o[i]?(rut(u,l),o[i]=!1,l.prevAngle=l.angleAndHeight.startPosition.x):(D.clone(u.distance.endPosition,l.distance.endPosition),D.clone(u.angleAndHeight.endPosition,l.angleAndHeight.endPosition));let m=l.angleAndHeight.endPosition.x,p=l.prevAngle,y=Math.PI*2;for(;m>=p+Math.PI;)m-=y;for(;m<p-Math.PI;)m+=y;l.angleAndHeight.endPosition.x=-m*n.clientWidth/12,l.angleAndHeight.startPosition.x=-p*n.clientWidth/12}},_n.PINCH_MOVE,t)}function kye(e,t){let n=hc(vi.WHEEL,t),i=e._pressTime,o=e._releaseTime,r=e._update;r[n]=!0;let s=e._movement[n];d(s)||(s=e._movement[n]={});let a=e._lastMovement[n];d(a)||(a=e._lastMovement[n]={startPosition:new D,endPosition:new D,valid:!1}),s.startPosition=new D,D.clone(D.ZERO,s.startPosition),s.endPosition=new D,e._eventHandler.setInputAction(function(c){let l=7.5*W.toRadians(c);i[n]=o[n]=new Date,s.endPosition.x=0,s.endPosition.y=l,D.clone(s.endPosition,a.endPosition),a.valid=!0,r[n]=!1},_n.WHEEL,t)}function SV(e,t,n){let i=hc(n,t),o=e._isDown,r=e._eventStartPosition,s=e._pressTime,a=e._releaseTime;o[i]=!1,r[i]=new D;let c=e._lastMovement[i];d(c)||(c=e._lastMovement[i]={startPosition:new D,endPosition:new D,valid:!1});let l,u;n===vi.LEFT_DRAG?(l=_n.LEFT_DOWN,u=_n.LEFT_UP):n===vi.RIGHT_DRAG?(l=_n.RIGHT_DOWN,u=_n.RIGHT_UP):n===vi.MIDDLE_DRAG&&(l=_n.MIDDLE_DOWN,u=_n.MIDDLE_UP),e._eventHandler.setInputAction(function(m){e._buttonsDown++,c.valid=!1,o[i]=!0,s[i]=new Date,D.clone(m.position,r[i])},l,t),e._eventHandler.setInputAction(function(){e._buttonsDown=Math.max(e._buttonsDown-1,0),o[i]=!1,a[i]=new Date},u,t)}function Dye(e,t){D.clone(e.startPosition,t.startPosition),D.clone(e.endPosition,t.endPosition)}function Bye(e,t){let n=e._update,i=e._movement,o=e._lastMovement,r=e._isDown;for(let s in vi)if(vi.hasOwnProperty(s)){let a=vi[s];if(d(a)){let c=hc(a,t);n[c]=!0,d(e._lastMovement[c])||(e._lastMovement[c]={startPosition:new D,endPosition:new D,valid:!1}),d(e._movement[c])||(e._movement[c]={startPosition:new D,endPosition:new D})}}e._eventHandler.setInputAction(function(s){for(let a in vi)if(vi.hasOwnProperty(a)){let c=vi[a];if(d(c)){let l=hc(c,t);r[l]&&(n[l]?(Dye(i[l],o[l]),o[l].valid=!0,Dye(s,i[l]),n[l]=!1):D.clone(s.endPosition,i[l].endPosition))}}D.clone(s.endPosition,e._currentMousePosition)},_n.MOUSE_MOVE,t)}function Hu(e){this._eventHandler=new Ed(e),this._update={},this._movement={},this._lastMovement={},this._isDown={},this._eventStartPosition={},this._pressTime={},this._releaseTime={},this._buttonsDown=0,this._currentMousePosition=new D,kye(this,void 0),Uye(this,void 0,e),SV(this,void 0,vi.LEFT_DRAG),SV(this,void 0,vi.RIGHT_DRAG),SV(this,void 0,vi.MIDDLE_DRAG),Bye(this,void 0);for(let t in na)if(na.hasOwnProperty(t)){let n=na[t];d(n)&&(kye(this,n),Uye(this,n,e),SV(this,n,vi.LEFT_DRAG),SV(this,n,vi.RIGHT_DRAG),SV(this,n,vi.MIDDLE_DRAG),Bye(this,n))}}Object.defineProperties(Hu.prototype,{currentMousePosition:{get:function(){return this._currentMousePosition}},anyButtonDown:{get:function(){let e=!this._update[hc(vi.WHEEL)]||!this._update[hc(vi.WHEEL,na.SHIFT)]||!this._update[hc(vi.WHEEL,na.CTRL)]||!this._update[hc(vi.WHEEL,na.ALT)];return this._buttonsDown>0||e}}});Hu.prototype.isMoving=function(e,t){let n=hc(e,t);return!this._update[n]};Hu.prototype.getMovement=function(e,t){let n=hc(e,t);return this._movement[n]};Hu.prototype.getLastMovement=function(e,t){let n=hc(e,t),i=this._lastMovement[n];if(i.valid)return i};Hu.prototype.isButtonDown=function(e,t){let n=hc(e,t);return this._isDown[n]};Hu.prototype.getStartMousePosition=function(e,t){if(e===vi.WHEEL)return this._currentMousePosition;let n=hc(e,t);return this._eventStartPosition[n]};Hu.prototype.getButtonPressTime=function(e,t){let n=hc(e,t);return this._pressTime[n]};Hu.prototype.getButtonReleaseTime=function(e,t){let n=hc(e,t);return this._releaseTime[n]};Hu.prototype.reset=function(){for(let e in this._update)this._update.hasOwnProperty(e)&&(this._update[e]=!0)};Hu.prototype.isDestroyed=function(){return!1};Hu.prototype.destroy=function(){return this._eventHandler=this._eventHandler&&this._eventHandler.destroy(),ue(this)};var $w=Hu;var Xwi=T(S(),1);function kk(e,t,n,i,o,r,s,a,c,l){this._tweens=e,this._tweenjs=t,this._startObject=Ke(n),this._stopObject=Ke(i),this._duration=o,this._delay=r,this._easingFunction=s,this._update=a,this._complete=c,this.cancel=l,this.needsStart=!0}Object.defineProperties(kk.prototype,{startObject:{get:function(){return this._startObject}},stopObject:{get:function(){return this._stopObject}},duration:{get:function(){return this._duration}},delay:{get:function(){return this._delay}},easingFunction:{get:function(){return this._easingFunction}},update:{get:function(){return this._update}},complete:{get:function(){return this._complete}},tweenjs:{get:function(){return this._tweenjs}}});kk.prototype.cancelTween=function(){this._tweens.remove(this)};function yh(){this._tweens=[]}Object.defineProperties(yh.prototype,{length:{get:function(){return this._tweens.length}}});yh.prototype.add=function(e){if(e=g(e,g.EMPTY_OBJECT),e.duration===0)return d(e.complete)&&e.complete(),new kk(this);let t=e.duration/Qn.SECONDS_PER_MILLISECOND,n=g(e.delay,0),i=n/Qn.SECONDS_PER_MILLISECOND,o=g(e.easingFunction,Xr.LINEAR_NONE),r=e.startObject,s=new Ehe(r);s.to(Ke(e.stopObject),t),s.delay(i),s.easing(o),d(e.update)&&s.onUpdate(function(){e.update(r)}),s.onComplete(g(e.complete,null)),s.repeat(g(e._repeat,0));let a=new kk(this,s,e.startObject,e.stopObject,e.duration,n,o,e.update,e.complete,e.cancel);return this._tweens.push(a),a};yh.prototype.addProperty=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.object,n=e.property,i=e.startValue,o=e.stopValue;function r(s){t[n]=s.value}return this.add({startObject:{value:i},stopObject:{value:o},duration:g(e.duration,3),delay:e.delay,easingFunction:e.easingFunction,update:r,complete:e.complete,cancel:e.cancel,_repeat:e._repeat})};yh.prototype.addAlpha=function(e){e=g(e,g.EMPTY_OBJECT);let t=e.material,n=[];for(let o in t.uniforms)t.uniforms.hasOwnProperty(o)&&d(t.uniforms[o])&&d(t.uniforms[o].alpha)&&n.push(o);function i(o){let r=n.length;for(let s=0;s<r;++s)t.uniforms[n[s]].alpha=o.alpha}return this.add({startObject:{alpha:g(e.startValue,0)},stopObject:{alpha:g(e.stopValue,1)},duration:g(e.duration,3),delay:e.delay,easingFunction:e.easingFunction,update:i,complete:e.complete,cancel:e.cancel})};yh.prototype.addOffsetIncrement=function(e){e=g(e,g.EMPTY_OBJECT);let n=e.material.uniforms;return this.addProperty({object:n,property:"offset",startValue:n.offset,stopValue:n.offset+1,duration:e.duration,delay:e.delay,easingFunction:e.easingFunction,update:e.update,cancel:e.cancel,_repeat:1/0})};yh.prototype.remove=function(e){if(!d(e))return!1;let t=this._tweens.indexOf(e);return t!==-1?(e.tweenjs.stop(),d(e.cancel)&&e.cancel(),this._tweens.splice(t,1),!0):!1};yh.prototype.removeAll=function(){let e=this._tweens;for(let t=0;t<e.length;++t){let n=e[t];n.tweenjs.stop(),d(n.cancel)&&n.cancel()}e.length=0};yh.prototype.contains=function(e){return d(e)&&this._tweens.indexOf(e)!==-1};yh.prototype.get=function(e){return this._tweens[e]};yh.prototype.update=function(e){let t=this._tweens,n=0;for(e=d(e)?e/Qn.SECONDS_PER_MILLISECOND:gi();n<t.length;){let i=t[n],o=i.tweenjs;i.needsStart?(i.needsStart=!1,o.start(e)):o.update(e)?n++:(o.stop(),t.splice(n,1))}};var xT=yh;function tF(e){this.enableInputs=!0,this.enableTranslate=!0,this.enableZoom=!0,this.enableRotate=!0,this.enableTilt=!0,this.enableLook=!0,this.inertiaSpin=.9,this.inertiaTranslate=.9,this.inertiaZoom=.8,this.maximumMovementRatio=.1,this.bounceAnimationTime=3,this.minimumZoomDistance=1,this.maximumZoomDistance=Number.POSITIVE_INFINITY,this.translateEventTypes=vi.LEFT_DRAG,this.zoomEventTypes=[vi.RIGHT_DRAG,vi.WHEEL,vi.PINCH],this.rotateEventTypes=vi.LEFT_DRAG,this.tiltEventTypes=[vi.MIDDLE_DRAG,vi.PINCH,{eventType:vi.LEFT_DRAG,modifier:na.CTRL},{eventType:vi.RIGHT_DRAG,modifier:na.CTRL}],this.lookEventTypes={eventType:vi.LEFT_DRAG,modifier:na.SHIFT},this.minimumPickingTerrainHeight=15e4,this._minimumPickingTerrainHeight=this.minimumPickingTerrainHeight,this.minimumPickingTerrainDistanceWithInertia=4e3,this.minimumCollisionTerrainHeight=15e3,this._minimumCollisionTerrainHeight=this.minimumCollisionTerrainHeight,this.minimumTrackBallHeight=75e5,this._minimumTrackBallHeight=this.minimumTrackBallHeight,this.enableCollisionDetection=!0,this._scene=e,this._globe=void 0,this._ellipsoid=void 0,this._aggregator=new $w(e.canvas),this._lastInertiaSpinMovement=void 0,this._lastInertiaZoomMovement=void 0,this._lastInertiaTranslateMovement=void 0,this._lastInertiaTiltMovement=void 0,this._inertiaDisablers={_lastInertiaZoomMovement:["_lastInertiaSpinMovement","_lastInertiaTranslateMovement","_lastInertiaTiltMovement"],_lastInertiaTiltMovement:["_lastInertiaSpinMovement","_lastInertiaTranslateMovement"]},this._tweens=new xT,this._tween=void 0,this._horizontalRotationAxis=void 0,this._tiltCenterMousePosition=new D(-1,-1),this._tiltCenter=new h,this._rotateMousePosition=new D(-1,-1),this._rotateStartPosition=new h,this._strafeStartPosition=new h,this._strafeMousePosition=new D,this._strafeEndMousePosition=new D,this._zoomMouseStart=new D(-1,-1),this._zoomWorldPosition=new h,this._useZoomWorldPosition=!1,this._panLastMousePosition=new D,this._panLastWorldPosition=new h,this._tiltCVOffMap=!1,this._looking=!1,this._rotating=!1,this._strafing=!1,this._zoomingOnVector=!1,this._zoomingUnderground=!1,this._rotatingZoom=!1,this._adjustedHeightForTerrain=!1,this._cameraUnderground=!1;let t=e.mapProjection;this._maxCoord=t.project(new he(Math.PI,W.PI_OVER_TWO)),this._zoomFactor=5,this._rotateFactor=void 0,this._rotateRateRangeAdjustment=void 0,this._maximumRotateRate=1.77,this._minimumRotateRate=1/5e3,this._minimumZoomRate=20,this._maximumZoomRate=5906376272e3,this._minimumUndergroundPickDistance=2e3,this._maximumUndergroundPickDistance=1e4}function sut(e,t){if(e<0)return 0;let n=(1-t)*25;return Math.exp(-n*e)}function aut(e){return D.equalsEpsilon(e.startPosition,e.endPosition,W.EPSILON14)}var cut=.4;function lut(e,t,n,i,o,r,s){let a=r[s];d(a)||(a=r[s]={startPosition:new D,endPosition:new D,motion:new D,inertiaEnabled:!0});let c=e.getButtonPressTime(t,n),l=e.getButtonReleaseTime(t,n),u=c&&l&&(l.getTime()-c.getTime())/1e3,p=l&&(new Date().getTime()-l.getTime())/1e3;if(c&&l&&u<cut){let y=sut(p,i),f=e.getLastMovement(t,n);if(!d(f)||aut(f)||!a.inertiaEnabled||(a.motion.x=(f.endPosition.x-f.startPosition.x)*.5,a.motion.y=(f.endPosition.y-f.startPosition.y)*.5,a.startPosition=D.clone(f.startPosition,a.startPosition),a.endPosition=D.multiplyByScalar(a.motion,y,a.endPosition),a.endPosition=D.add(a.startPosition,a.endPosition,a.endPosition),isNaN(a.endPosition.x)||isNaN(a.endPosition.y)||D.distance(a.startPosition,a.endPosition)<.5))return;if(!e.isButtonDown(t,n)){let x=e.getStartMousePosition(t,n);o(r,x,a)}}}function dut(e,t){if(d(t)){let n=e[t];d(n)&&(n.inertiaEnabled=!0);let i=e._inertiaDisablers[t];if(d(i)){let o=i.length;for(let r=0;r<o;++r)n=e[i[r]],d(n)&&(n.inertiaEnabled=!1)}}}var Yye=[];function Jc(e,t,n,i,o,r){if(!d(n))return;let s=e._aggregator;Array.isArray(n)||(Yye[0]=n,n=Yye);let a=n.length;for(let c=0;c<a;++c){let l=n[c],u=d(l.eventType)?l.eventType:l,m=l.modifier,p=s.isMoving(u,m)&&s.getMovement(u,m),y=s.getStartMousePosition(u,m);e.enableInputs&&t&&(p?(i(e,y,p),dut(e,r)):o<1&&lut(s,u,m,o,i,e,r))}}var Dk=new Sn,uut=new h,mut=new D,hut=new h,fut=new D,put=new h,but=new h,yut=new h,gut=new h,nge=new h,xut=new h,_ut=new h,Tut=new h,Sut=new h,Cut=new h,Vut=new h,Lut=new h,Rut=new h,Zut=new h,Gut=new h,_T=new h,Oye=new h,Kye=new h,L4={orientation:new Aa};function P4(e,t,n,i,o,r){let s=1;d(r)&&(s=W.clamp(Math.abs(r),.25,1));let a=n.endPosition.y-n.startPosition.y,l=a>0?e.minimumZoomDistance*s:0,u=e.maximumZoomDistance,m=o-l,p=i*m;p=W.clamp(p,e._minimumZoomRate,e._maximumZoomRate);let y=a/e._scene.canvas.clientHeight;y=Math.min(y,e.maximumMovementRatio);let f=p*y;if(e.enableCollisionDetection||e.minimumZoomDistance===0||!d(e._globe)){if(f>0&&Math.abs(o-l)<1||f<0&&Math.abs(o-u)<1)return;o-f<l?f=o-l-1:o-f>u&&(f=o-u)}let x=e._scene,_=x.camera,C=x.mode,V=L4.orientation;if(V.heading=_.heading,V.pitch=_.pitch,V.roll=_.roll,_.frustum instanceof en){Math.abs(f)>0&&(_.zoomIn(f),_._adjustOrthographicFrustum(!0));return}let L=g(n.inertiaEnabled,D.equals(t,e._zoomMouseStart)),Z=e._zoomingOnVector,G=e._rotatingZoom,X;if(L||(e._zoomMouseStart=D.clone(t,e._zoomMouseStart),d(e._globe)&&C===ie.SCENE2D?(X=_.getPickRay(t,Dk).origin,X=h.fromElements(X.y,X.z,X.x)):d(e._globe)&&(X=O0(e,t,uut)),d(X)?(e._useZoomWorldPosition=!0,e._zoomWorldPosition=h.clone(X,e._zoomWorldPosition)):e._useZoomWorldPosition=!1,Z=e._zoomingOnVector=!1,G=e._rotatingZoom=!1,e._zoomingUnderground=e._cameraUnderground),!e._useZoomWorldPosition){_.zoomIn(f);return}let P=C===ie.COLUMBUS_VIEW;if(_.positionCartographic.height<2e6&&(G=!0),!L||G){if(C===ie.SCENE2D){let v=e._zoomWorldPosition,F=_.position;if(!h.equals(v,F)&&_.positionCartographic.height<e._maxCoord.x*2){let M=_.position.x,b=h.subtract(v,F,hut);h.normalize(b,b);let R=h.distance(v,F)*f/(_.getMagnitude()*.5);_.move(b,R*.5),(_.position.x<0&&M>0||_.position.x>0&&M<0)&&(X=_.getPickRay(t,Dk).origin,X=h.fromElements(X.y,X.z,X.x),e._zoomWorldPosition=h.clone(X,e._zoomWorldPosition))}}else if(C===ie.SCENE3D){let v=h.normalize(_.position,nge);if(e._cameraUnderground||e._zoomingUnderground||_.positionCartographic.height<3e3&&Math.abs(h.dot(_.direction,v))<.6)P=!0;else{let F=x.canvas,M=fut;M.x=F.clientWidth/2,M.y=F.clientHeight/2;let b=O0(e,M,put);if(!d(b))P=!0;else if(_.positionCartographic.height<1e6)if(h.dot(_.direction,v)>=-.5)P=!0;else{let R=_ut;h.clone(_.position,R);let E=e._zoomWorldPosition,I=xut;if(I=h.normalize(E,I),h.dot(I,v)<0)return;let w=Gut,N=Cut;h.clone(_.direction,N),h.add(R,h.multiplyByScalar(N,1e3,_T),w);let B=Vut,k=Lut;h.subtract(E,R,B),h.normalize(B,k);let O=h.dot(v,k);if(O>=0){e._zoomMouseStart.x=-1;return}let U=Math.acos(-O),J=h.magnitude(R),z=h.magnitude(E),ee=J-f,K=h.magnitude(B),j=Math.asin(W.clamp(K/z*Math.sin(U),-1,1)),q=Math.asin(W.clamp(ee/z*Math.sin(U),-1,1)),be=j-q+U,Te=Tut;h.normalize(R,Te);let ae=Sut;ae=h.cross(k,Te,ae),ae=h.normalize(ae,ae),h.normalize(h.cross(Te,ae,_T),N),h.multiplyByScalar(h.normalize(w,_T),h.magnitude(w)-f,w),h.normalize(R,R),h.multiplyByScalar(R,ee,R);let xe=Rut;h.multiplyByScalar(h.add(h.multiplyByScalar(Te,Math.cos(be)-1,Oye),h.multiplyByScalar(N,Math.sin(be),Kye),_T),ee,xe),h.add(R,xe,R),h.normalize(w,Te),h.normalize(h.cross(Te,ae,_T),N);let _e=Zut;h.multiplyByScalar(h.add(h.multiplyByScalar(Te,Math.cos(be)-1,Oye),h.multiplyByScalar(N,Math.sin(be),Kye),_T),h.magnitude(w),_e),h.add(w,_e,w),h.clone(R,_.position),h.normalize(h.subtract(w,R,_T),_.direction),h.clone(_.direction,_.direction),h.cross(_.direction,_.up,_.right),h.cross(_.right,_.direction,_.up),_.setView(L4);return}else{let R=h.normalize(b,but),E=h.normalize(e._zoomWorldPosition,yut),I=h.dot(E,R);if(I>0&&I<1){let w=W.acosClamped(I),N=h.cross(E,R,gut),B=Math.abs(w)>W.toRadians(20)?_.positionCartographic.height*.75:_.positionCartographic.height-f,k=f/B;_.rotate(N,w*k)}}}}e._rotatingZoom=!P}if(!L&&P||Z){let v,F=Ji.wgs84ToWindowCoordinates(x,e._zoomWorldPosition,mut);C!==ie.COLUMBUS_VIEW&&D.equals(t,e._zoomMouseStart)&&d(F)?v=_.getPickRay(F,Dk):v=_.getPickRay(t,Dk);let M=v.direction;(C===ie.COLUMBUS_VIEW||C===ie.SCENE2D)&&h.fromElements(M.y,M.z,M.x,M),_.move(M,f),e._zoomingOnVector=!0}else _.zoomIn(f);e._cameraUnderground||_.setView(L4)}var Eut=new Sn,Xut=new Sn,Iut=new h;function Wut(e,t,n){let o=e._scene.camera,r=o.getPickRay(n.startPosition,Eut).origin,s=o.getPickRay(n.endPosition,Xut).origin;r=h.fromElements(r.y,r.z,r.x,r),s=h.fromElements(s.y,s.z,s.x,s);let a=h.subtract(r,s,Iut),c=h.magnitude(a);c>0&&(h.normalize(a,a),o.move(a,c))}function Hye(e,t,n){d(n.distance)&&(n=n.distance);let o=e._scene.camera;P4(e,t,n,e._zoomFactor,o.getMagnitude())}var Put=new D,vut=new D;function zye(e,t,n){if(d(n.angleAndHeight)){wut(e,t,n.angleAndHeight);return}let i=e._scene,o=i.camera,r=i.canvas,s=r.clientWidth,a=r.clientHeight,c=Put;c.x=2/s*n.startPosition.x-1,c.y=2/a*(a-n.startPosition.y)-1,c=D.normalize(c,c);let l=vut;l.x=2/s*n.endPosition.x-1,l.y=2/a*(a-n.endPosition.y)-1,l=D.normalize(l,l);let u=W.acosClamped(c.x);c.y<0&&(u=W.TWO_PI-u);let m=W.acosClamped(l.x);l.y<0&&(m=W.TWO_PI-m);let p=m-u;o.twistRight(p)}function wut(e,t,n){let i=e._rotateFactor*e._rotateRateRangeAdjustment;i>e._maximumRotateRate&&(i=e._maximumRotateRate),i<e._minimumRotateRate&&(i=e._minimumRotateRate);let o=e._scene,r=o.camera,s=o.canvas,a=(n.endPosition.x-n.startPosition.x)/s.clientWidth;a=Math.min(a,e.maximumMovementRatio);let c=i*a*Math.PI*4;r.twistRight(c)}function Fut(e){let t=e._scene.mapMode2D===Fl.ROTATE;A.equals(A.IDENTITY,e._scene.camera.transform)?(Jc(e,e.enableTranslate,e.translateEventTypes,Wut,e.inertiaTranslate,"_lastInertiaTranslateMovement"),Jc(e,e.enableZoom,e.zoomEventTypes,Hye,e.inertiaZoom,"_lastInertiaZoomMovement"),t&&Jc(e,e.enableRotate,e.tiltEventTypes,zye,e.inertiaSpin,"_lastInertiaTiltMovement")):(Jc(e,e.enableZoom,e.zoomEventTypes,Hye,e.inertiaZoom,"_lastInertiaZoomMovement"),t&&Jc(e,e.enableRotate,e.translateEventTypes,zye,e.inertiaSpin,"_lastInertiaSpinMovement"))}var ige=new Sn,Aut=new h,Mut=new h;function O0(e,t,n){let i=e._scene,o=e._globe,r=i.camera,s;if(i.pickPositionSupported&&(s=i.pickPositionWorldCoordinates(t,Aut)),!d(o))return h.clone(s,n);let a=!e._cameraUnderground,c=r.getPickRay(t,ige),l=o.pickWorldCoordinates(c,i,a,Mut),u=d(s)?h.distance(s,r.positionWC):Number.POSITIVE_INFINITY,m=d(l)?h.distance(l,r.positionWC):Number.POSITIVE_INFINITY;return u<m?h.clone(s,n):h.clone(l,n)}var Nut=new he;function Jk(e){let t=e._ellipsoid,n=e._scene,i=n.camera,o=n.mode,r=0;if(o===ie.SCENE3D){let c=t.cartesianToCartographic(i.position,Nut);d(c)&&(r=c.height)}else r=i.position.z;let s=g(e._scene.globeHeight,0);return Math.abs(s-r)}var Uut=new h;function oge(e,t){let n=t.origin,i=t.direction,o=Jk(e),r=h.normalize(n,Uut),s=Math.abs(h.dot(r,i));return s=Math.max(s,.5)*2,o*s}function rge(e,t,n,i){let o=h.distance(t.origin,n),r=Jk(e),s=W.clamp(r*5,e._minimumUndergroundPickDistance,e._maximumUndergroundPickDistance);return o>s&&(o=Math.min(o,r/5),o=Math.max(o,100)),Sn.getPoint(t,o,i)}function sge(e,t,n,i){let o;return d(n)?(o=h.distance(t.origin,n),o>e._maximumUndergroundPickDistance&&(o=Jk(e))):o=Jk(e),Sn.getPoint(t,o,i)}var kut=new D;function age(e,t){let n=t.endPosition,i=D.subtract(t.endPosition,t.startPosition,kut),o=e._strafeEndMousePosition;D.add(o,i,o),t.endPosition=o,v4(e,t,e._strafeStartPosition),t.endPosition=n}var Jye=new Sn,Dut=new Sn,R4=new h,But=new h,Yut=new h,Out=new h,Kut=new sn(h.UNIT_X,0),Hut=new D,zut=new D;function Jut(e,t,n){if(h.equals(t,e._translateMousePosition)||(e._looking=!1),h.equals(t,e._strafeMousePosition)||(e._strafing=!1),e._looking){wd(e,t,n);return}if(e._strafing){age(e,n);return}let o=e._scene.camera,r=e._cameraUnderground,s=D.clone(n.startPosition,Hut),a=D.clone(n.endPosition,zut),c=o.getPickRay(s,Jye),l=h.clone(h.ZERO,Out),u=h.UNIT_X,m;if(o.position.z<e._minimumPickingTerrainHeight&&(m=O0(e,s,R4),d(m)&&(l.x=m.x)),r||l.x>o.position.z&&d(m)){let L=m;r&&(L=sge(e,c,m,R4)),D.clone(t,e._strafeMousePosition),D.clone(t,e._strafeEndMousePosition),h.clone(L,e._strafeStartPosition),e._strafing=!0,v4(e,n,e._strafeStartPosition);return}let p=sn.fromPointNormal(l,u,Kut);c=o.getPickRay(s,Jye);let y=Si.rayPlane(c,p,R4),f=o.getPickRay(a,Dut),x=Si.rayPlane(f,p,But);if(!d(y)||!d(x)){e._looking=!0,wd(e,t,n),D.clone(t,e._translateMousePosition);return}let _=h.subtract(y,x,Yut),C=_.x;_.x=_.y,_.y=_.z,_.z=C;let V=h.magnitude(_);V>W.EPSILON6&&(h.normalize(_,_),o.move(_,V))}var cge=new D,Ok=new Sn,Kk=new h,Qut=new h,lge=new A,jut=new A,qut=new h,$ut=new sn(h.UNIT_X,0),Z4=new h,X4=new he,dge=new A,emt=new Ae,tmt=new $,Hk=new h;function nmt(e,t,n){if(d(n.angleAndHeight)&&(n=n.angleAndHeight),D.equals(t,e._tiltCenterMousePosition)||(e._tiltCVOffMap=!1,e._looking=!1),e._looking){wd(e,t,n);return}let o=e._scene.camera;e._tiltCVOffMap||!e.onMap()||Math.abs(o.position.z)>e._minimumPickingTerrainHeight?(e._tiltCVOffMap=!0,imt(e,t,n)):omt(e,t,n)}function imt(e,t,n){let i=e._scene,o=i.camera,r=i.canvas,s=cge;s.x=r.clientWidth/2,s.y=r.clientHeight/2;let a=o.getPickRay(s,Ok),c=h.UNIT_X,l=a.origin,u=a.direction,m,p=h.dot(c,u);if(Math.abs(p)>W.EPSILON6&&(m=-h.dot(c,l)/p),!d(m)||m<=0){e._looking=!0,wd(e,t,n),D.clone(t,e._tiltCenterMousePosition);return}let y=h.multiplyByScalar(u,m,Kk);h.add(l,y,y);let f=i.mapProjection,x=f.ellipsoid;h.fromElements(y.y,y.z,y.x,y);let _=f.unproject(y,X4);x.cartographicToCartesian(_,y);let C=vt.eastNorthUpToFixedFrame(y,x,lge),V=e._globe,L=e._ellipsoid;e._globe=void 0,e._ellipsoid=re.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let Z=A.clone(o.transform,dge);o._setTransform(C),vd(e,t,n,h.UNIT_Z),o._setTransform(Z),e._globe=V,e._ellipsoid=L;let G=L.maximumRadius;e._rotateFactor=1/G,e._rotateRateRangeAdjustment=G}function omt(e,t,n){let i=e._scene,o=i.camera,r=e._cameraUnderground,s,a,c=h.UNIT_X;if(D.equals(t,e._tiltCenterMousePosition))s=h.clone(e._tiltCenter,Kk);else{if(o.position.z<e._minimumPickingTerrainHeight&&(s=O0(e,t,Kk)),!d(s)){a=o.getPickRay(t,Ok);let b=a.origin,R=a.direction,E,I=h.dot(c,R);if(Math.abs(I)>W.EPSILON6&&(E=-h.dot(c,b)/I),!d(E)||E<=0){e._looking=!0,wd(e,t,n),D.clone(t,e._tiltCenterMousePosition);return}s=h.multiplyByScalar(R,E,Kk),h.add(b,s,s)}r&&(d(a)||(a=o.getPickRay(t,Ok)),rge(e,a,s,s)),D.clone(t,e._tiltCenterMousePosition),h.clone(s,e._tiltCenter)}let l=i.canvas,u=cge;u.x=l.clientWidth/2,u.y=e._tiltCenterMousePosition.y,a=o.getPickRay(u,Ok);let m=h.clone(h.ZERO,qut);m.x=s.x;let p=sn.fromPointNormal(m,c,$ut),y=Si.rayPlane(a,p,Qut),f=o._projection,x=f.ellipsoid;h.fromElements(s.y,s.z,s.x,s);let _=f.unproject(s,X4);x.cartographicToCartesian(_,s);let C=vt.eastNorthUpToFixedFrame(s,x,lge),V;d(y)?(h.fromElements(y.y,y.z,y.x,y),_=f.unproject(y,X4),x.cartographicToCartesian(_,y),V=vt.eastNorthUpToFixedFrame(y,x,jut)):V=C;let L=e._globe,Z=e._ellipsoid;e._globe=void 0,e._ellipsoid=re.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let G=h.UNIT_Z,X=A.clone(o.transform,dge);o._setTransform(C);let P=h.cross(h.UNIT_Z,h.normalize(o.position,Z4),Z4),v=h.dot(o.right,P);if(vd(e,t,n,G,!1,!0),o._setTransform(V),v<0){let b=n.startPosition.y-n.endPosition.y;(r&&b<0||!r&&b>0)&&(G=void 0);let R=o.constrainedAxis;o.constrainedAxis=void 0,vd(e,t,n,G,!0,!1),o.constrainedAxis=R}else vd(e,t,n,G,!0,!1);if(d(o.constrainedAxis)){let b=h.cross(o.direction,o.constrainedAxis,Hk);h.equalsEpsilon(b,h.ZERO,W.EPSILON6)||(h.dot(b,o.right)<0&&h.negate(b,b),h.cross(b,o.direction,o.up),h.cross(o.direction,o.up,o.right),h.normalize(o.up,o.up),h.normalize(o.right,o.right))}o._setTransform(X),e._globe=L,e._ellipsoid=Z;let F=Z.maximumRadius;e._rotateFactor=1/F,e._rotateRateRangeAdjustment=F;let M=h.clone(o.positionWC,Z4);if(e.enableCollisionDetection&&A4(e),!h.equals(o.positionWC,M)){o._setTransform(V),o.worldToCameraCoordinatesPoint(M,M);let b=h.magnitudeSquared(M);h.magnitudeSquared(o.position)>b&&(h.normalize(o.position,o.position),h.multiplyByScalar(o.position,Math.sqrt(b),o.position));let R=h.angleBetween(M,o.position),E=h.cross(M,o.position,M);h.normalize(E,E);let I=Ae.fromAxisAngle(E,R,emt),w=$.fromQuaternion(I,tmt);$.multiplyByVector(w,o.direction,o.direction),$.multiplyByVector(w,o.up,o.up),h.cross(o.direction,o.up,o.right),h.cross(o.right,o.direction,o.up),o._setTransform(X)}}var uge=new D,mge=new Sn,hge=new h;function rmt(e,t,n){d(n.distance)&&(n=n.distance);let i=e._scene,o=i.camera,r=i.canvas,s=e._cameraUnderground,a;s?a=t:(a=uge,a.x=r.clientWidth/2,a.y=r.clientHeight/2);let c=o.getPickRay(a,mge),l=c.origin,u=c.direction,m=o.position.z,p;m<e._minimumPickingTerrainHeight&&(p=O0(e,a,hge));let y;if(d(p)&&(y=h.distance(l,p)),s){let f=oge(e,c,m);d(y)?y=Math.min(y,f):y=f}if(!d(y)){let f=h.UNIT_X;y=-h.dot(f,l)/h.dot(f,u)}P4(e,t,n,e._zoomFactor,y)}function smt(e){let n=e._scene.camera;if(!A.equals(A.IDENTITY,n.transform))Jc(e,e.enableRotate,e.rotateEventTypes,vd,e.inertiaSpin,"_lastInertiaSpinMovement"),Jc(e,e.enableZoom,e.zoomEventTypes,pge,e.inertiaZoom,"_lastInertiaZoomMovement");else{let i=e._tweens;if(e._aggregator.anyButtonDown&&i.removeAll(),Jc(e,e.enableTilt,e.tiltEventTypes,nmt,e.inertiaSpin,"_lastInertiaTiltMovement"),Jc(e,e.enableTranslate,e.translateEventTypes,Jut,e.inertiaTranslate,"_lastInertiaTranslateMovement"),Jc(e,e.enableZoom,e.zoomEventTypes,rmt,e.inertiaZoom,"_lastInertiaZoomMovement"),Jc(e,e.enableLook,e.lookEventTypes,wd),!e._aggregator.anyButtonDown&&!i.contains(e._tween)){let o=n.createCorrectPositionTween(e.bounceAnimationTime);d(o)&&(e._tween=i.add(o))}i.update()}}var amt=new Sn,cmt=new sn(h.UNIT_X,0),lmt=new h,dmt=new h;function v4(e,t,n){let i=e._scene,o=i.camera,r=o.getPickRay(t.endPosition,amt),s=h.clone(o.direction,dmt);i.mode===ie.COLUMBUS_VIEW&&h.fromElements(s.z,s.x,s.y,s);let a=sn.fromPointNormal(n,s,cmt),c=Si.rayPlane(r,a,lmt);d(c)&&(s=h.subtract(n,c,s),i.mode===ie.COLUMBUS_VIEW&&h.fromElements(s.y,s.z,s.x,s),h.add(o.position,s,o.position))}var Qye=new h,fge=new he,I4=new h,W4=new re,umt=new h,mmt=new h,hmt=new h;function fmt(e,t,n){let o=e._scene.camera,r=e._cameraUnderground,s=e._ellipsoid;if(!A.equals(o.transform,A.IDENTITY)){vd(e,t,n);return}let a,c,l=s.geodeticSurfaceNormal(o.position,umt);if(D.equals(t,e._rotateMousePosition)){if(e._looking)wd(e,t,n,l);else if(e._rotating)vd(e,t,n);else if(e._strafing)age(e,n);else{if(h.magnitude(o.position)<h.magnitude(e._rotateStartPosition))return;a=h.magnitude(e._rotateStartPosition),c=I4,c.x=c.y=c.z=a,s=re.fromCartesian3(c,W4),E4(e,t,n,s)}return}e._looking=!1,e._rotating=!1,e._strafing=!1;let u=s.cartesianToCartographic(o.positionWC,fge).height,m=e._globe;if(d(m)&&u<e._minimumPickingTerrainHeight){let p=O0(e,n.startPosition,hmt);if(d(p)){let y=!1,f=o.getPickRay(n.startPosition,ige);if(r)y=!0,sge(e,f,p,p);else{let x=s.geodeticSurfaceNormal(p,mmt);Math.abs(h.dot(f.direction,x))<.05?y=!0:y=h.magnitude(o.position)<h.magnitude(p)}y?(D.clone(t,e._strafeEndMousePosition),h.clone(p,e._strafeStartPosition),e._strafing=!0,v4(e,n,e._strafeStartPosition)):(a=h.magnitude(p),c=I4,c.x=c.y=c.z=a,s=re.fromCartesian3(c,W4),E4(e,t,n,s),h.clone(p,e._rotateStartPosition))}else e._looking=!0,wd(e,t,n,l)}else d(o.pickEllipsoid(n.startPosition,e._ellipsoid,Qye))?(E4(e,t,n,e._ellipsoid),h.clone(Qye,e._rotateStartPosition)):u>e._minimumTrackBallHeight?(e._rotating=!0,vd(e,t,n)):(e._looking=!0,wd(e,t,n,l));D.clone(t,e._rotateMousePosition)}function vd(e,t,n,i,o,r){o=g(o,!1),r=g(r,!1);let s=e._scene,a=s.camera,c=s.canvas,l=a.constrainedAxis;d(i)&&(a.constrainedAxis=i);let u=h.magnitude(a.position),m=e._rotateFactor*(u-e._rotateRateRangeAdjustment);m>e._maximumRotateRate&&(m=e._maximumRotateRate),m<e._minimumRotateRate&&(m=e._minimumRotateRate);let p=(n.startPosition.x-n.endPosition.x)/c.clientWidth,y=(n.startPosition.y-n.endPosition.y)/c.clientHeight;p=Math.min(p,e.maximumMovementRatio),y=Math.min(y,e.maximumMovementRatio);let f=m*p*Math.PI*2,x=m*y*Math.PI;o||a.rotateRight(f),r||a.rotateUp(x),a.constrainedAxis=l}var G4=se.clone(se.UNIT_W),jye=se.clone(se.UNIT_W),Bk=new h,CV=new h,Yk=new h,qye=new h,pmt=new D,bmt=new D,ymt=new D,gmt=new D,xmt=new Sn;function E4(e,t,n,i){let o=e._scene,r=o.camera,s=D.clone(n.startPosition,pmt),a=D.clone(n.endPosition,bmt),c=i.cartesianToCartographic(r.positionWC,fge).height,l,u;if(!n.inertiaEnabled&&c<e._minimumPickingTerrainHeight&&(l=h.clone(e._panLastWorldPosition,G4),!d(e._globe)&&!D.equalsEpsilon(s,e._panLastMousePosition)&&(l=O0(e,s,G4)),!d(e._globe)&&d(l))){let m=h.subtract(l,r.positionWC,CV),p=h.multiplyByScalar(r.directionWC,h.dot(r.directionWC,m),CV),y=h.magnitude(p),f=r.frustum.getPixelDimensions(o.drawingBufferWidth,o.drawingBufferHeight,y,o.pixelRatio,gmt),x=D.subtract(a,s,ymt),_=h.multiplyByScalar(r.rightWC,x.x*f.x,CV),C=h.normalize(r.positionWC,nge),V=r.getPickRay(a,xmt).direction,L=h.subtract(V,h.projectVector(V,r.rightWC,Yk),Yk),Z=h.angleBetween(L,r.directionWC),G=1;d(r.frustum.fov)&&(G=Math.max(Math.tan(Z),.1));let X=Math.abs(h.dot(r.directionWC,C)),P=-x.y*f.y*2/Math.sqrt(G)*(1-X),v=h.multiplyByScalar(V,P,Yk);X=Math.abs(h.dot(r.upWC,C));let F=h.multiplyByScalar(r.upWC,-x.y*(1-X)*f.y,qye);u=h.add(l,_,jye),u=h.add(u,v,u),u=h.add(u,F,u),h.clone(u,e._panLastWorldPosition),D.clone(a,e._panLastMousePosition)}if((!d(l)||!d(u))&&(l=r.pickEllipsoid(s,i,G4),u=r.pickEllipsoid(a,i,jye)),!d(l)||!d(u)){e._rotating=!0,vd(e,t,n);return}if(l=r.worldToCameraCoordinates(l,l),u=r.worldToCameraCoordinates(u,u),d(r.constrainedAxis)){let m=r.constrainedAxis,p=h.mostOrthogonalAxis(m,Bk);h.cross(p,m,p),h.normalize(p,p);let y=h.cross(m,p,CV),f=h.magnitude(l),x=h.dot(m,l),_=Math.acos(x/f),C=h.multiplyByScalar(m,x,Yk);h.subtract(l,C,C),h.normalize(C,C);let V=h.magnitude(u),L=h.dot(m,u),Z=Math.acos(L/V),G=h.multiplyByScalar(m,L,qye);h.subtract(u,G,G),h.normalize(G,G);let X=Math.acos(h.dot(C,p));h.dot(C,y)<0&&(X=W.TWO_PI-X);let P=Math.acos(h.dot(G,p));h.dot(G,y)<0&&(P=W.TWO_PI-P);let v=X-P,F;h.equalsEpsilon(m,r.position,W.EPSILON2)?F=r.right:F=h.cross(m,r.position,Bk);let M=h.cross(m,F,Bk),b=h.dot(M,h.subtract(l,m,CV)),R=h.dot(M,h.subtract(u,m,CV)),E;b>0&&R>0?E=Z-_:b>0&&R<=0?h.dot(r.position,m)>0?E=-_-Z:E=_+Z:E=_-Z,r.rotateRight(v),r.rotateUp(E)}else{h.normalize(l,l),h.normalize(u,u);let m=h.dot(l,u),p=h.cross(l,u,Bk);if(m<1&&!h.equalsEpsilon(p,h.ZERO,W.EPSILON14)){let y=Math.acos(m);r.rotate(p,y)}}}var _mt=new h,Tmt=new he,$ye=0;function pge(e,t,n){d(n.distance)&&(n=n.distance);let i=n.inertiaEnabled,o=e._ellipsoid,r=e._scene,s=r.camera,a=r.canvas,c=e._cameraUnderground,l;c?l=t:(l=uge,l.x=a.clientWidth/2,l.y=a.clientHeight/2);let u=s.getPickRay(l,mge),m,p=o.cartesianToCartographic(s.position,Tmt).height,y=Math.abs($ye)<e.minimumPickingTerrainDistanceWithInertia;(i?y:p<e._minimumPickingTerrainHeight)&&(m=O0(e,l,hge));let x;if(d(m)&&(x=h.distance(u.origin,m),$ye=x),c){let C=oge(e,u,p);d(x)?x=Math.min(x,C):x=C}d(x)||(x=p);let _=h.normalize(s.position,_mt);P4(e,t,n,e._zoomFactor,x,h.dot(_,s.direction))}var bge=new D,zk=new Sn,eF=new h,Smt=new h,yge=new A,Cmt=new A,gge=new A,Vmt=new Ae,Lmt=new $,w4=new he,F4=new h;function Rmt(e,t,n){let o=e._scene.camera;if(!A.equals(o.transform,A.IDENTITY))return;if(d(n.angleAndHeight)&&(n=n.angleAndHeight),D.equals(t,e._tiltCenterMousePosition)||(e._tiltOnEllipsoid=!1,e._looking=!1),e._looking){let a=e._ellipsoid.geodeticSurfaceNormal(o.position,F4);wd(e,t,n,a);return}let s=e._ellipsoid.cartesianToCartographic(o.position,w4);e._tiltOnEllipsoid||s.height>e._minimumCollisionTerrainHeight?(e._tiltOnEllipsoid=!0,Gmt(e,t,n)):Emt(e,t,n)}var Zmt=new he;function Gmt(e,t,n){let i=e._ellipsoid,o=e._scene,r=o.camera,s=e.minimumZoomDistance*.25,a=i.cartesianToCartographic(r.positionWC,Zmt).height;if(a-s-1<W.EPSILON3&&n.endPosition.y-n.startPosition.y<0)return;let c=o.canvas,l=bge;l.x=c.clientWidth/2,l.y=c.clientHeight/2;let u=r.getPickRay(l,zk),m,p=Si.rayEllipsoid(u,i);if(d(p))m=Sn.getPoint(u,p.start,eF);else if(a>e._minimumTrackBallHeight){let V=Si.grazingAltitudeLocation(u,i);if(!d(V))return;let L=i.cartesianToCartographic(V,w4);L.height=0,m=i.cartographicToCartesian(L,eF)}else{e._looking=!0;let V=e._ellipsoid.geodeticSurfaceNormal(r.position,F4);wd(e,t,n,V),D.clone(t,e._tiltCenterMousePosition);return}let y=vt.eastNorthUpToFixedFrame(m,i,yge),f=e._globe,x=e._ellipsoid;e._globe=void 0,e._ellipsoid=re.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let _=A.clone(r.transform,gge);r._setTransform(y),vd(e,t,n,h.UNIT_Z),r._setTransform(_),e._globe=f,e._ellipsoid=x;let C=x.maximumRadius;e._rotateFactor=1/C,e._rotateRateRangeAdjustment=C}function Emt(e,t,n){let i=e._ellipsoid,o=e._scene,r=o.camera,s=e._cameraUnderground,a,c,l;if(D.equals(t,e._tiltCenterMousePosition))a=h.clone(e._tiltCenter,eF);else{if(a=O0(e,t,eF),!d(a)){if(c=r.getPickRay(t,zk),l=Si.rayEllipsoid(c,i),!d(l)){if(i.cartesianToCartographic(r.position,w4).height<=e._minimumTrackBallHeight){e._looking=!0;let R=e._ellipsoid.geodeticSurfaceNormal(r.position,F4);wd(e,t,n,R),D.clone(t,e._tiltCenterMousePosition)}return}a=Sn.getPoint(c,l.start,eF)}s&&(d(c)||(c=r.getPickRay(t,zk)),rge(e,c,a,a)),D.clone(t,e._tiltCenterMousePosition),h.clone(a,e._tiltCenter)}let u=o.canvas,m=bge;m.x=u.clientWidth/2,m.y=e._tiltCenterMousePosition.y,c=r.getPickRay(m,zk);let p=h.magnitude(a),y=h.fromElements(p,p,p,I4),f=re.fromCartesian3(y,W4);if(l=Si.rayEllipsoid(c,f),!d(l))return;let x=h.magnitude(c.origin)>p?l.start:l.stop,_=Sn.getPoint(c,x,Smt),C=vt.eastNorthUpToFixedFrame(a,i,yge),V=vt.eastNorthUpToFixedFrame(_,f,Cmt),L=e._globe,Z=e._ellipsoid;e._globe=void 0,e._ellipsoid=re.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let G=h.UNIT_Z,X=A.clone(r.transform,gge);r._setTransform(V);let P=h.cross(_,r.positionWC,Hk);if(h.dot(r.rightWC,P)<0){let b=n.startPosition.y-n.endPosition.y;(s&&b<0||!s&&b>0)&&(G=void 0);let R=r.constrainedAxis;r.constrainedAxis=void 0,vd(e,t,n,G,!0,!1),r.constrainedAxis=R}else vd(e,t,n,G,!0,!1);if(r._setTransform(C),vd(e,t,n,G,!1,!0),d(r.constrainedAxis)){let b=h.cross(r.direction,r.constrainedAxis,Hk);h.equalsEpsilon(b,h.ZERO,W.EPSILON6)||(h.dot(b,r.right)<0&&h.negate(b,b),h.cross(b,r.direction,r.up),h.cross(r.direction,r.up,r.right),h.normalize(r.up,r.up),h.normalize(r.right,r.right))}r._setTransform(X),e._globe=L,e._ellipsoid=Z;let F=Z.maximumRadius;e._rotateFactor=1/F,e._rotateRateRangeAdjustment=F;let M=h.clone(r.positionWC,Hk);if(e.enableCollisionDetection&&A4(e),!h.equals(r.positionWC,M)){r._setTransform(V),r.worldToCameraCoordinatesPoint(M,M);let b=h.magnitudeSquared(M);h.magnitudeSquared(r.position)>b&&(h.normalize(r.position,r.position),h.multiplyByScalar(r.position,Math.sqrt(b),r.position));let R=h.angleBetween(M,r.position),E=h.cross(M,r.position,M);h.normalize(E,E);let I=Ae.fromAxisAngle(E,R,Vmt),w=$.fromQuaternion(I,Lmt);$.multiplyByVector(w,r.direction,r.direction),$.multiplyByVector(w,r.up,r.up),h.cross(r.direction,r.up,r.right),h.cross(r.right,r.direction,r.up),r._setTransform(X)}}var Xmt=new D,Imt=new D,ege=new Sn,tge=new Sn,Wmt=new h,Pmt=new h;function wd(e,t,n,i){let r=e._scene.camera,s=Xmt;s.x=n.startPosition.x,s.y=0;let a=Imt;a.x=n.endPosition.x,a.y=0;let c=r.getPickRay(s,ege),l=r.getPickRay(a,tge),u=0,m,p;r.frustum instanceof en?(m=c.origin,p=l.origin,h.add(r.direction,m,m),h.add(r.direction,p,p),h.subtract(m,r.position,m),h.subtract(p,r.position,p),h.normalize(m,m),h.normalize(p,p)):(m=c.direction,p=l.direction);let y=h.dot(m,p);y<1&&(u=Math.acos(y)),u=n.startPosition.x>n.endPosition.x?-u:u;let f=e._horizontalRotationAxis;if(d(i)?r.look(i,-u):d(f)?r.look(f,-u):r.lookLeft(u),s.x=0,s.y=n.startPosition.y,a.x=0,a.y=n.endPosition.y,c=r.getPickRay(s,ege),l=r.getPickRay(a,tge),u=0,r.frustum instanceof en?(m=c.origin,p=l.origin,h.add(r.direction,m,m),h.add(r.direction,p,p),h.subtract(m,r.position,m),h.subtract(p,r.position,p),h.normalize(m,m),h.normalize(p,p)):(m=c.direction,p=l.direction),y=h.dot(m,p),y<1&&(u=Math.acos(y)),u=n.startPosition.y>n.endPosition.y?-u:u,i=g(i,f),d(i)){let x=r.direction,_=h.negate(i,Wmt),C=h.equalsEpsilon(x,i,W.EPSILON2),V=h.equalsEpsilon(x,_,W.EPSILON2);if(!C&&!V){y=h.dot(x,i);let L=W.acosClamped(y);u>0&&u>L&&(u=L-W.EPSILON4),y=h.dot(x,_),L=W.acosClamped(y),u<0&&-u>L&&(u=-L+W.EPSILON4);let Z=h.cross(i,x,Pmt);r.look(Z,u)}else(C&&u<0||V&&u>0)&&r.look(r.right,-u)}else r.lookUp(u)}function vmt(e){Jc(e,e.enableRotate,e.rotateEventTypes,fmt,e.inertiaSpin,"_lastInertiaSpinMovement"),Jc(e,e.enableZoom,e.zoomEventTypes,pge,e.inertiaZoom,"_lastInertiaZoomMovement"),Jc(e,e.enableTilt,e.tiltEventTypes,Rmt,e.inertiaSpin,"_lastInertiaTiltMovement"),Jc(e,e.enableLook,e.lookEventTypes,wd)}var wmt=new A,Fmt=new he;function A4(e){e._adjustedHeightForTerrain=!0;let t=e._scene,n=t.mode,i=t.globe;if(!d(i)||n===ie.SCENE2D||n===ie.MORPHING)return;let o=t.camera,r=i.ellipsoid,s=t.mapProjection,a,c;A.equals(o.transform,A.IDENTITY)||(a=A.clone(o.transform,wmt),c=h.magnitude(o.position),o._setTransform(A.IDENTITY));let l=Fmt;n===ie.SCENE3D?r.cartesianToCartographic(o.position,l):s.unproject(o.position,l);let u=!1;if(l.height<e._minimumCollisionTerrainHeight){let m=e._scene.globeHeight;if(d(m)){let p=m+e.minimumZoomDistance;l.height<p&&(l.height=p,n===ie.SCENE3D?r.cartographicToCartesian(l,o.position):s.project(l,o.position),u=!0)}}d(a)&&(o._setTransform(a),u&&(h.normalize(o.position,o.position),h.negate(o.position,o.direction),h.multiplyByScalar(o.position,Math.max(c,e.minimumZoomDistance),o.position),h.normalize(o.direction,o.direction),h.cross(o.direction,o.up,o.right),h.cross(o.right,o.direction,o.up)))}tF.prototype.onMap=function(){let e=this._scene,t=e.mode,n=e.camera;return t===ie.COLUMBUS_VIEW?Math.abs(n.position.x)-this._maxCoord.x<0&&Math.abs(n.position.y)-this._maxCoord.y<0:!0};var Amt=new h,Mmt=new h;tF.prototype.update=function(){let e=this._scene,t=e.camera,n=e.globe,i=e.mode;A.equals(t.transform,A.IDENTITY)?(this._globe=n,this._ellipsoid=d(this._globe)?this._globe.ellipsoid:e.mapProjection.ellipsoid):(this._globe=void 0,this._ellipsoid=re.UNIT_SPHERE);let o=d(this._globe)?this._globe.terrainExaggeration:1,r=d(this._globe)?this._globe.terrainExaggerationRelativeHeight:0;this._minimumCollisionTerrainHeight=Sc.getHeight(this.minimumCollisionTerrainHeight,o,r),this._minimumPickingTerrainHeight=Sc.getHeight(this.minimumPickingTerrainHeight,o,r),this._minimumTrackBallHeight=Sc.getHeight(this.minimumTrackBallHeight,o,r),this._cameraUnderground=e.cameraUnderground&&d(this._globe);let s=this._ellipsoid.maximumRadius;this._rotateFactor=1/s,this._rotateRateRangeAdjustment=s,this._adjustedHeightForTerrain=!1;let a=h.clone(t.positionWC,Amt),c=h.clone(t.directionWC,Mmt);i===ie.SCENE2D?Fut(this):i===ie.COLUMBUS_VIEW?(this._horizontalRotationAxis=h.UNIT_Z,smt(this)):i===ie.SCENE3D&&(this._horizontalRotationAxis=void 0,vmt(this)),this.enableCollisionDetection&&!this._adjustedHeightForTerrain&&(!h.equals(a,t.positionWC)||!h.equals(c,t.directionWC))&&A4(this),this._aggregator.reset()};tF.prototype.isDestroyed=function(){return!1};tF.prototype.destroy=function(){return this._tweens.removeAll(),this._aggregator=this._aggregator&&this._aggregator.destroy(),ue(this)};var nF=tF;var ZFi=T(S(),1);var sFi=T(S(),1),iF=`uniform sampler2D colorTexture;
  11015. uniform sampler2D colorTexture2;
  11016. uniform vec2 center;
  11017. uniform float radius;
  11018. in vec2 v_textureCoordinates;
  11019. void main()
  11020. {
  11021. vec4 color0 = texture(colorTexture, v_textureCoordinates);
  11022. vec4 color1 = texture(colorTexture2, v_textureCoordinates);
  11023. float x = length(gl_FragCoord.xy - center) / radius;
  11024. float t = smoothstep(0.5, 0.8, x);
  11025. out_FragColor = mix(color0 + color1, color1, t);
  11026. }
  11027. `;var cFi=T(S(),1),oF=`uniform sampler2D colorTexture;
  11028. uniform float avgLuminance;
  11029. uniform float threshold;
  11030. uniform float offset;
  11031. in vec2 v_textureCoordinates;
  11032. float key(float avg)
  11033. {
  11034. float guess = 1.5 - (1.5 / (avg * 0.1 + 1.0));
  11035. return max(0.0, guess) + 0.1;
  11036. }
  11037. // See section 9. "The bright-pass filter" of Realtime HDR Rendering
  11038. // http://www.cg.tuwien.ac.at/research/publications/2007/Luksch_2007_RHR/Luksch_2007_RHR-RealtimeHDR%20.pdf
  11039. void main()
  11040. {
  11041. vec4 color = texture(colorTexture, v_textureCoordinates);
  11042. vec3 xyz = czm_RGBToXYZ(color.rgb);
  11043. float luminance = xyz.r;
  11044. float scaledLum = key(avgLuminance) * luminance / avgLuminance;
  11045. float brightLum = max(scaledLum - threshold, 0.0);
  11046. float brightness = brightLum / (offset + brightLum);
  11047. xyz.r = brightness;
  11048. out_FragColor = vec4(czm_XYZToRGB(xyz), 1.0);
  11049. }
  11050. `;function K0(){this._sceneFramebuffer=new lT;let e=.125,t=new Array(6);t[0]=new po({fragmentShader:Al,textureScale:e,forcePowerOfTwo:!0,sampleMode:Pd.LINEAR});let n=t[1]=new po({fragmentShader:oF,uniforms:{avgLuminance:.5,threshold:.25,offset:.1},textureScale:e,forcePowerOfTwo:!0}),i=this;this._delta=1,this._sigma=2,this._blurStep=new D,t[2]=new po({fragmentShader:og,uniforms:{step:function(){return i._blurStep.x=i._blurStep.y=1/n.outputTexture.width,i._blurStep},delta:function(){return i._delta},sigma:function(){return i._sigma},direction:0},textureScale:e,forcePowerOfTwo:!0}),t[3]=new po({fragmentShader:og,uniforms:{step:function(){return i._blurStep.x=i._blurStep.y=1/n.outputTexture.width,i._blurStep},delta:function(){return i._delta},sigma:function(){return i._sigma},direction:1},textureScale:e,forcePowerOfTwo:!0}),t[4]=new po({fragmentShader:Al,sampleMode:Pd.LINEAR}),this._uCenter=new D,this._uRadius=void 0,t[5]=new po({fragmentShader:iF,uniforms:{center:function(){return i._uCenter},radius:function(){return i._uRadius},colorTexture2:function(){return i._sceneFramebuffer.framebuffer.getColorTexture(0)}}}),this._stages=new Hc({stages:t});let o=new bT(this),r=t.length;for(let s=0;s<r;++s)t[s]._textureCache=o;this._textureCache=o,this.length=t.length}K0.prototype.get=function(e){return this._stages.get(e)};K0.prototype.getStageByName=function(e){let t=this._stages.length;for(let n=0;n<t;++n){let i=this._stages.get(n);if(i.name===e)return i}};var Nmt=new se,xge=new D,Umt=new D,_ge=new A;function kmt(e,t,n){let i=t.uniformState,o=i.sunPositionWC,r=i.view,s=i.viewProjection,a=i.projection,c=A.computeViewportTransformation(n,0,1,_ge),l=A.multiplyByPoint(r,o,Nmt),u=vt.pointToGLWindowCoordinates(s,c,o,xge);l.x+=W.SOLAR_RADIUS;let m=vt.pointToGLWindowCoordinates(a,c,l,l),p=D.magnitude(D.subtract(m,u,m))*30*2,y=Umt;y.x=p,y.y=p,e._uCenter=D.clone(u,e._uCenter),e._uRadius=Math.max(y.x,y.y)*.15;let f=t.drawingBufferWidth,x=t.drawingBufferHeight,_=e._stages,C=_.get(0),V=C.outputTexture.width,L=C.outputTexture.height,Z=new He;Z.width=V,Z.height=L,c=A.computeViewportTransformation(Z,0,1,_ge),u=vt.pointToGLWindowCoordinates(s,c,o,xge),y.x*=V/f,y.y*=L/x;let G=C.scissorRectangle;G.x=Math.max(u.x-y.x*.5,0),G.y=Math.max(u.y-y.y*.5,0),G.width=Math.min(y.x,f),G.height=Math.min(y.y,x);for(let X=1;X<4;++X)He.clone(G,_.get(X).scissorRectangle)}K0.prototype.clear=function(e,t,n){this._sceneFramebuffer.clear(e,t,n),this._textureCache.clear(e)};K0.prototype.update=function(e){let t=e.context,n=e.viewport,i=this._sceneFramebuffer;i.update(t,n);let o=i.framebuffer;return this._textureCache.update(t),this._stages.update(t,!1),kmt(this,t,n),o};K0.prototype.execute=function(e){let t=this._sceneFramebuffer.framebuffer.getColorTexture(0),n=this._stages,i=n.length;n.get(0).execute(e,t);for(let o=1;o<i;++o)n.get(o).execute(e,n.get(o-1).outputTexture)};K0.prototype.copy=function(e,t){if(!d(this._copyColorCommand)){let n=this;this._copyColorCommand=e.createViewportQuadCommand(Al,{uniformMap:{colorTexture:function(){return n._stages.get(n._stages.length-1).outputTexture}},owner:this})}this._copyColorCommand.framebuffer=t,this._copyColorCommand.execute(e)};K0.prototype.isDestroyed=function(){return!1};K0.prototype.destroy=function(){return this._textureCache.destroy(),this._stages.destroy(),ue(this)};var rF=K0;var vFi=T(S(),1);function Tge(){this._cachedShowFrustumsShaders={}}function Dmt(e){let t={},n=e.vertexAttributes;for(let i in n)n.hasOwnProperty(i)&&(t[i]=n[i].index);return t}function Bmt(e,t){let n=e.context,i=t,o=i.fragmentShaderSource.clone(),r=[];o.sources=o.sources.map(function(u){u=Ye.replaceMain(u,"czm_Debug_main");let m=/out_FragData_(\d+)/g,p;for(;(p=m.exec(u))!==null;)r.indexOf(p[1])===-1&&r.push(p[1]);return u});let s=r.length,a="";a+=`uniform vec3 debugShowCommandsColor;
  11051. `,a+=`uniform vec3 debugShowFrustumsColor;
  11052. `,a+=`void main()
  11053. {
  11054. czm_Debug_main();
  11055. `;let c;if(s>0)for(c=0;c<s;++c)a+=` out_FragData_${r[c]}.rgb *= debugShowCommandsColor;
  11056. `,a+=` out_FragData_${r[c]}.rgb *= debugShowFrustumsColor;
  11057. `;else a+=` out_FragColor.rgb *= debugShowCommandsColor;
  11058. `,a+=` out_FragColor.rgb *= debugShowFrustumsColor;
  11059. `;a+="}",o.sources.push(a);let l=Dmt(i);return Qt.fromCache({context:n,vertexShaderSource:i.vertexShaderSource,fragmentShaderSource:o,attributeLocations:l})}var sF=new Y;function Ymt(e,t){let n;return d(t.uniformMap)?n=t.uniformMap:n={},d(n.debugShowCommandsColor)||d(n.debugShowFrustumsColor)||(n.debugShowCommandsColor=function(){return e.debugShowCommands?(d(t._debugColor)||(t._debugColor=Y.fromRandom()),t._debugColor):Y.WHITE},n.debugShowFrustumsColor=function(){return e.debugShowFrustums?(sF.red=t.debugOverlappingFrustums&1?1:0,sF.green=t.debugOverlappingFrustums&2?1:0,sF.blue=t.debugOverlappingFrustums&4?1:0,sF.alpha=1,sF):Y.WHITE}),n}var Omt=new nt;Tge.prototype.executeDebugShowFrustumsCommand=function(e,t,n){let i=t.shaderProgram.id,o=this._cachedShowFrustumsShaders[i];d(o)||(o=Bmt(e,t.shaderProgram),this._cachedShowFrustumsShaders[i]=o);let r=nt.shallowClone(t,Omt);r.shaderProgram=o,r.uniformMap=Ymt(e,t),r.execute(e.context,n)};var aF=Tge;var jk=function(e){return function(){e.frameState.afterRender.push(function(){e.requestRender()})}};function Yi(e){e=g(e,g.EMPTY_OBJECT);let t=e.canvas,n=e.creditContainer,i=e.creditViewport,o=Ke(e.contextOptions),r=d(n),s=new wP(t,o);r||(n=document.createElement("div"),n.style.position="absolute",n.style.bottom="0",n.style["text-shadow"]="0 0 2px #000000",n.style.color="#ffffff",n.style["font-size"]="10px",n.style["padding-right"]="5px",t.parentNode.appendChild(n)),d(i)||(i=t.parentNode),this._id=Yn(),this._jobScheduler=new pw,this._frameState=new hw(s,new sw(n," \u2022 ",i),this._jobScheduler),this._frameState.scene3DOnly=g(e.scene3DOnly,!1),this._removeCreditContainer=!r,this._creditContainer=n,this._canvas=t,this._context=s,this._computeEngine=new EP(s),this._globe=void 0,this._globeTranslucencyState=new fw,this._primitives=new Zl,this._groundPrimitives=new Zl,this._globeHeight=void 0,this._cameraUnderground=!1,this._logDepthBuffer=s.fragmentDepth,this._logDepthBufferDirty=!0,this._tweens=new xT,this._shaderFrameCount=0,this._sunPostProcess=void 0,this._computeCommandList=[],this._overlayCommandList=[],this._useOIT=g(e.orderIndependentTranslucency,!0),this._executeOITFunction=void 0,this._depthPlane=new lw(e.depthPlaneEllipsoidOffset),this._clearColorCommand=new oi({color:new Y,stencil:0,owner:this}),this._depthClearCommand=new oi({depth:1,owner:this}),this._stencilClearCommand=new oi({stencil:0}),this._classificationStencilClearCommand=new oi({stencil:0,renderState:De.fromCache({stencilMask:Ft.CLASSIFICATION_MASK})}),this._depthOnlyRenderStateCache={},this._transitioner=new qw(this),this._preUpdate=new ye,this._postUpdate=new ye,this._renderError=new ye,this._preRender=new ye,this._postRender=new ye,this._minimumDisableDepthTestDistance=0,this._debugInspector=new aF,this._msaaSamples=g(e.msaaSamples,1),this.rethrowRenderErrors=!1,this.completeMorphOnUserInput=!0,this.morphStart=new ye,this.morphComplete=new ye,this.skyBox=void 0,this.skyAtmosphere=void 0,this.sun=void 0,this.sunBloom=!0,this._sunBloom=void 0,this.moon=void 0,this.backgroundColor=Y.clone(Y.BLACK),this._mode=ie.SCENE3D,this._mapProjection=d(e.mapProjection)?e.mapProjection:new Zi,this.morphTime=1,this.farToNearRatio=1e3,this.logarithmicDepthFarToNearRatio=1e9,this.nearToFarDistance2D=175e4,this.debugCommandFilter=void 0,this.debugShowCommands=!1,this.debugShowFrustums=!1,this.debugShowFramesPerSecond=!1,this.debugShowDepthFrustum=1,this.debugShowFrustumPlanes=!1,this._debugShowFrustumPlanes=!1,this._debugFrustumPlanes=void 0,this.useDepthPicking=!0,this.pickTranslucentDepth=!1,this.cameraEventWaitTime=500,this.fog=new mw,this._shadowMapCamera=new co(this),this.shadowMap=new B0({context:s,lightCamera:this._shadowMapCamera,enabled:g(e.shadows,!1)}),this.invertClassification=!1,this.invertClassificationColor=Y.clone(Y.WHITE),this._actualInvertClassificationColor=Y.clone(this._invertClassificationColor),this._invertClassification=new xV,this.focalLength=void 0,this.eyeSeparation=void 0,this.postProcessStages=new Qw,this._brdfLutGenerator=new ew,this._performanceDisplay=void 0,this._debugVolume=void 0,this._screenSpaceCameraController=new nF(this),this._cameraUnderground=!1,this._mapMode2D=g(e.mapMode2D,Fl.INFINITE_SCROLL),this._environmentState={skyBoxCommand:void 0,skyAtmosphereCommand:void 0,sunDrawCommand:void 0,sunComputeCommand:void 0,moonCommand:void 0,isSunVisible:!1,isMoonVisible:!1,isReadyForAtmosphere:!1,isSkyAtmosphereVisible:!1,clearGlobeDepth:!1,useDepthPlane:!1,renderTranslucentDepthForPick:!1,originalFramebuffer:void 0,useGlobeDepthFramebuffer:!1,useOIT:!1,useInvertClassification:!1,usePostProcess:!1,usePostProcessSelected:!1,useWebVR:!1},this._useWebVR=!1,this._cameraVR=void 0,this._aspectRatioVR=void 0,this.requestRenderMode=g(e.requestRenderMode,!1),this._renderRequested=!0,this.maximumRenderTimeChange=g(e.maximumRenderTimeChange,0),this._lastRenderTime=void 0,this._frameRateMonitor=void 0,this._removeRequestListenerCallback=wa.requestCompletedEvent.addEventListener(jk(this)),this._removeTaskProcessorListenerCallback=yi.taskCompletedEvent.addEventListener(jk(this)),this._removeGlobeCallbacks=[],this._removeTerrainProviderReadyListener=void 0;let a=new He(0,0,s.drawingBufferWidth,s.drawingBufferHeight),c=new co(this);this._logDepthBuffer&&(c.frustum.near=.1,c.frustum.far=1e10),this.preloadFlightCamera=new co(this),this.preloadFlightCullingVolume=void 0,this._picking=new Gw(this),this._defaultView=new mT(this,c,a),this._view=this._defaultView,this._hdr=void 0,this._hdrDirty=void 0,this.highDynamicRange=!1,this.gamma=2.2,this.sphericalHarmonicCoefficients=void 0,this.specularEnvironmentMaps=void 0,this._specularEnvironmentMapAtlas=void 0,this.light=new R0,Lge(this,0,te.now()),this.updateFrameState(),this.initializeFrame()}function Kmt(e,t){for(let i=0;i<e._removeGlobeCallbacks.length;++i)e._removeGlobeCallbacks[i]();e._removeGlobeCallbacks.length=0;let n=[];d(t)&&(n.push(t.imageryLayersUpdatedEvent.addEventListener(jk(e))),n.push(t.terrainProviderChanged.addEventListener(jk(e)))),e._removeGlobeCallbacks=n}Object.defineProperties(Yi.prototype,{canvas:{get:function(){return this._canvas}},drawingBufferHeight:{get:function(){return this._context.drawingBufferHeight}},drawingBufferWidth:{get:function(){return this._context.drawingBufferWidth}},maximumAliasedLineWidth:{get:function(){return kt.maximumAliasedLineWidth}},maximumCubeMapSize:{get:function(){return kt.maximumCubeMapSize}},pickPositionSupported:{get:function(){return this._context.depthTexture}},sampleHeightSupported:{get:function(){return this._context.depthTexture}},clampToHeightSupported:{get:function(){return this._context.depthTexture}},invertClassificationSupported:{get:function(){return this._context.depthTexture}},specularEnvironmentMapsSupported:{get:function(){return hm.isSupported(this._context)}},globe:{get:function(){return this._globe},set:function(e){this._globe=this._globe&&this._globe.destroy(),this._globe=e,Kmt(this,e)}},primitives:{get:function(){return this._primitives}},groundPrimitives:{get:function(){return this._groundPrimitives}},camera:{get:function(){return this._view.camera},set:function(e){this._view.camera=e}},view:{get:function(){return this._view},set:function(e){this._view=e}},defaultView:{get:function(){return this._defaultView}},picking:{get:function(){return this._picking}},screenSpaceCameraController:{get:function(){return this._screenSpaceCameraController}},mapProjection:{get:function(){return this._mapProjection}},jobScheduler:{get:function(){return this._jobScheduler}},frameState:{get:function(){return this._frameState}},environmentState:{get:function(){return this._environmentState}},tweens:{get:function(){return this._tweens}},imageryLayers:{get:function(){if(d(this.globe))return this.globe.imageryLayers}},terrainProvider:{get:function(){if(d(this.globe))return this.globe.terrainProvider},set:function(e){this._removeTerrainProviderReadyListener=this._removeTerrainProviderReadyListener&&this._removeTerrainProviderReadyListener(),d(this.globe)&&(this.globe.terrainProvider=e)}},terrainProviderChanged:{get:function(){if(d(this.globe))return this.globe.terrainProviderChanged}},preUpdate:{get:function(){return this._preUpdate}},postUpdate:{get:function(){return this._postUpdate}},renderError:{get:function(){return this._renderError}},preRender:{get:function(){return this._preRender}},postRender:{get:function(){return this._postRender}},lastRenderTime:{get:function(){return this._lastRenderTime}},context:{get:function(){return this._context}},debugFrustumStatistics:{get:function(){return this._view.debugFrustumStatistics}},scene3DOnly:{get:function(){return this._frameState.scene3DOnly}},orderIndependentTranslucency:{get:function(){return this._useOIT}},id:{get:function(){return this._id}},mode:{get:function(){return this._mode},set:function(e){e===ie.SCENE2D?this.morphTo2D(0):e===ie.SCENE3D?this.morphTo3D(0):e===ie.COLUMBUS_VIEW&&this.morphToColumbusView(0),this._mode=e}},frustumCommandsList:{get:function(){return this._view.frustumCommandsList}},numberOfFrustums:{get:function(){return this._view.frustumCommandsList.length}},useWebVR:{get:function(){return this._useWebVR},set:function(e){this._useWebVR=e,this._useWebVR?(this._frameState.creditDisplay.container.style.visibility="hidden",this._cameraVR=new co(this),d(this._deviceOrientationCameraController)||(this._deviceOrientationCameraController=new uw(this)),this._aspectRatioVR=this.camera.frustum.aspectRatio):(this._frameState.creditDisplay.container.style.visibility="visible",this._cameraVR=void 0,this._deviceOrientationCameraController=this._deviceOrientationCameraController&&!this._deviceOrientationCameraController.isDestroyed()&&this._deviceOrientationCameraController.destroy(),this.camera.frustum.aspectRatio=this._aspectRatioVR,this.camera.frustum.xOffset=0)}},mapMode2D:{get:function(){return this._mapMode2D}},splitPosition:{get:function(){return this._frameState.splitPosition},set:function(e){this._frameState.splitPosition=e}},minimumDisableDepthTestDistance:{get:function(){return this._minimumDisableDepthTestDistance},set:function(e){this._minimumDisableDepthTestDistance=e}},logarithmicDepthBuffer:{get:function(){return this._logDepthBuffer},set:function(e){e=this._context.fragmentDepth&&e,this._logDepthBuffer!==e&&(this._logDepthBuffer=e,this._logDepthBufferDirty=!0)}},gamma:{get:function(){return this._context.uniformState.gamma},set:function(e){this._context.uniformState.gamma=e}},highDynamicRange:{get:function(){return this._hdr},set:function(e){let t=this._context,n=e&&t.depthTexture&&(t.colorBufferFloat||t.colorBufferHalfFloat);this._hdrDirty=n!==this._hdr,this._hdr=n}},highDynamicRangeSupported:{get:function(){let e=this._context;return e.depthTexture&&(e.colorBufferFloat||e.colorBufferHalfFloat)}},cameraUnderground:{get:function(){return this._cameraUnderground}},msaaSamples:{get:function(){return this._msaaSamples},set:function(e){e=Math.min(e,kt.maximumSamples),this._msaaSamples=e}},msaaSupported:{get:function(){return this._context.msaa}},pixelRatio:{get:function(){return this._frameState.pixelRatio},set:function(e){this._frameState.pixelRatio=e}},opaqueFrustumNearOffset:{get:function(){return .9999}},globeHeight:{get:function(){return this._globeHeight}}});Yi.prototype.getCompressedTextureFormatSupported=function(e){let t=this.context;return(e==="WEBGL_compressed_texture_s3tc"||e==="s3tc")&&t.s3tc||(e==="WEBGL_compressed_texture_pvrtc"||e==="pvrtc")&&t.pvrtc||(e==="WEBGL_compressed_texture_etc"||e==="etc")&&t.etc||(e==="WEBGL_compressed_texture_etc1"||e==="etc1")&&t.etc1||(e==="WEBGL_compressed_texture_astc"||e==="astc")&&t.astc||(e==="EXT_texture_compression_bptc"||e==="bc7")&&t.bc7};function Sge(e,t,n){let i=e._frameState,o=e._context,r=e._view.oit,s=i.shadowState.lightShadowMaps,a=i.shadowState.lightShadowsEnabled,c=t.derivedCommands;d(t.pickId)&&(c.picking=N0.createPickDerivedCommand(e,t,o,c.picking)),t.pickOnly||(c.depth=N0.createDepthOnlyDerivedCommand(e,t,o,c.depth)),c.originalCommand=t,e._hdr&&(c.hdr=N0.createHdrCommand(t,o,c.hdr),t=c.hdr.command,c=t.derivedCommands),a&&t.receiveShadows&&(c.shadows=B0.createReceiveDerivedCommand(s,t,n,o,c.shadows)),t.pass===Re.TRANSLUCENT&&d(r)&&r.isSupported()&&(a&&t.receiveShadows?(c.oit=d(c.oit)?c.oit:{},c.oit.shadows=r.createDerivedCommands(c.shadows.receiveCommand,o,c.oit.shadows)):c.oit=r.createDerivedCommands(t,o,c.oit))}Yi.prototype.updateDerivedCommands=function(e){if(!d(e.derivedCommands))return;let t=this._frameState,n=this._context,i=!1,o=t.shadowState.lastDirtyTime;e.lastDirtyTime!==o&&(e.lastDirtyTime=o,e.dirty=!0,i=!0);let r=t.useLogDepth,s=this._hdr,a=e.derivedCommands,c=d(a.logDepth),l=d(a.hdr),u=d(a.originalCommand),m=r&&!c,p=s&&!l,y=(!r||!s)&&!u;if(e.dirty=e.dirty||m||p||y,e.dirty){e.dirty=!1;let f=t.shadowState.shadowMaps;t.shadowState.shadowsEnabled&&e.castShadows&&(a.shadows=B0.createCastDerivedCommand(f,e,i,n,a.shadows)),(c||m)&&(a.logDepth=N0.createLogDepthCommand(e,n,a.logDepth),Sge(this,a.logDepth.command,i)),(u||y)&&Sge(this,e,i)}};var Hmt=new Bu({pass:Xo.RENDER}),M4=new Bu({pass:Xo.PRELOAD}),N4=new Bu({pass:Xo.PRELOAD_FLIGHT}),zmt=new Bu({pass:Xo.REQUEST_RENDER_MODE_DEFER_CHECK}),Cge=new ce,U4;function Jmt(e){let t=e.globe;if(e._mode===ie.SCENE3D&&d(t)&&t.show&&!e._cameraUnderground&&!e._globeTranslucencyState.translucent){let n=t.ellipsoid,i=e.frameState.minimumTerrainHeight;return Cge.radius=n.minimumRadius+i,U4=jP.fromBoundingSphere(Cge,e.camera.positionWC,U4),U4}}Yi.prototype.clearPasses=function(e){e.render=!1,e.pick=!1,e.depth=!1,e.postProcess=!1,e.offscreen=!1};function Lge(e,t,n){let i=e._frameState;i.frameNumber=t,i.time=te.clone(n,i.time)}Yi.prototype.updateFrameState=function(){let e=this.camera,t=this._frameState;t.commandList.length=0,t.shadowMaps.length=0,t.brdfLutGenerator=this._brdfLutGenerator,t.environmentMap=this.skyBox&&this.skyBox._cubeMap,t.mode=this._mode,t.morphTime=this.morphTime,t.mapProjection=this.mapProjection,t.camera=e,t.cullingVolume=e.frustum.computeCullingVolume(e.positionWC,e.directionWC,e.upWC),t.occluder=Jmt(this),t.minimumTerrainHeight=0,t.minimumDisableDepthTestDistance=this._minimumDisableDepthTestDistance,t.invertClassification=this.invertClassification,t.useLogDepth=this._logDepthBuffer&&!(this.camera.frustum instanceof en||this.camera.frustum instanceof yr),t.light=this.light,t.cameraUnderground=this._cameraUnderground,t.globeTranslucencyState=this._globeTranslucencyState,d(this.globe)&&(t.terrainExaggeration=this.globe.terrainExaggeration,t.terrainExaggerationRelativeHeight=this.globe.terrainExaggerationRelativeHeight),d(this._specularEnvironmentMapAtlas)&&this._specularEnvironmentMapAtlas.ready?(t.specularEnvironmentMaps=this._specularEnvironmentMapAtlas.texture,t.specularEnvironmentMapsMaximumLOD=this._specularEnvironmentMapAtlas.maximumMipmapLevel):(t.specularEnvironmentMaps=void 0,t.specularEnvironmentMapsMaximumLOD=void 0),t.sphericalHarmonicCoefficients=this.sphericalHarmonicCoefficients,this._actualInvertClassificationColor=Y.clone(this.invertClassificationColor,this._actualInvertClassificationColor),xV.isTranslucencySupported(this._context)||(this._actualInvertClassificationColor.alpha=1),t.invertClassificationColor=this._actualInvertClassificationColor,d(this.globe)?t.maximumScreenSpaceError=this.globe.maximumScreenSpaceError:t.maximumScreenSpaceError=2,this.clearPasses(t.passes),t.tilesetPassState=void 0};Yi.prototype.isVisible=function(e,t,n){return d(e)&&(!d(e.boundingVolume)||!e.cull||t.computeVisibility(e.boundingVolume)!==qt.OUTSIDE&&(!d(n)||!e.occlude||!e.boundingVolume.isOccluded(n)))};var Qk=new A(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1);Qk=A.inverseTransformation(Qk,Qk);function Qmt(e,t,n,i){let o=t._frameState,r=o.context,s=e.boundingVolume;d(t._debugVolume)&&t._debugVolume.destroy();let a,c=h.clone(s.center);if(o.mode!==ie.SCENE3D){c=A.multiplyByPoint(Qk,c,c);let p=o.mapProjection,y=p.unproject(c);c=p.ellipsoid.cartographicToCartesian(y)}if(d(s.radius)){let p=s.radius;a=An.toWireframe(Is.createGeometry(new Is({radii:new h(p,p,p),vertexFormat:rn.FLAT_VERTEX_FORMAT}))),t._debugVolume=new Zn({geometryInstances:new _t({geometry:a,modelMatrix:A.fromTranslation(c),attributes:{color:new Ut(1,0,0,1)}}),appearance:new rn({flat:!0,translucent:!1}),asynchronous:!1})}else{let p=s.halfAxes;a=An.toWireframe(rl.createGeometry(rl.fromDimensions({dimensions:new h(2,2,2),vertexFormat:rn.FLAT_VERTEX_FORMAT}))),t._debugVolume=new Zn({geometryInstances:new _t({geometry:a,modelMatrix:A.fromRotationTranslation(p,c,new A),attributes:{color:new Ut(1,0,0,1)}}),appearance:new rn({flat:!0,translucent:!1}),asynchronous:!1})}let l=o.commandList,u=o.commandList=[];t._debugVolume.update(o),e=u[0],o.useLogDepth&&(e=N0.createLogDepthCommand(e,r).command);let m;d(i)&&(m=n.framebuffer,n.framebuffer=i),e.execute(r,n),d(m)&&(n.framebuffer=m),o.commandList=l}function Ra(e,t,n,i,o){let r=t._frameState;if(d(t.debugCommandFilter)&&!t.debugCommandFilter(e))return;if(e instanceof oi){e.execute(n,i);return}e.debugShowBoundingVolume&&d(e.boundingVolume)&&Qmt(e,t,i,o),r.useLogDepth&&d(e.derivedCommands.logDepth)&&(e=e.derivedCommands.logDepth.command);let s=r.passes;if(!s.pick&&!s.depth&&t._hdr&&d(e.derivedCommands)&&d(e.derivedCommands.hdr)&&(e=e.derivedCommands.hdr.command),s.pick||s.depth){if(s.pick&&!s.depth&&d(e.derivedCommands.picking)){e=e.derivedCommands.picking.pickCommand,e.execute(n,i);return}else if(d(e.derivedCommands.depth)){e=e.derivedCommands.depth.depthOnlyCommand,e.execute(n,i);return}}if(t.debugShowCommands||t.debugShowFrustums){t._debugInspector.executeDebugShowFrustumsCommand(t,e,i);return}r.shadowState.lightShadowsEnabled&&e.receiveShadows&&d(e.derivedCommands.shadows)?e.derivedCommands.shadows.receiveCommand.execute(n,i):e.execute(n,i)}function cF(e,t,n,i){let o=t._frameState,r=e.derivedCommands;d(r)&&(o.useLogDepth&&d(r.logDepth)&&(e=r.logDepth.command),r=e.derivedCommands,d(r.picking)?(e=r.picking.pickCommand,e.execute(n,i)):d(r.depth)&&(e=r.depth.depthOnlyCommand,e.execute(n,i)))}function Rge(e,t,n){return t.boundingVolume.distanceSquaredTo(n)-e.boundingVolume.distanceSquaredTo(n)}function jmt(e,t,n){return e.boundingVolume.distanceSquaredTo(n)-t.boundingVolume.distanceSquaredTo(n)+W.EPSILON12}function qmt(e,t,n,i,o){let r=e.context;I0(i,Rge,e.camera.positionWC),d(o)&&t(o.unclassifiedCommand,e,r,n);let s=i.length;for(let a=0;a<s;++a)t(i[a],e,r,n)}function $mt(e,t,n,i,o){let r=e.context;I0(i,jmt,e.camera.positionWC),d(o)&&t(o.unclassifiedCommand,e,r,n);let s=i.length;for(let a=0;a<s;++a)t(i[a],e,r,n)}function eht(e,t,n,i){let o=e.context;I0(i,Rge,e.camera.positionWC);let r=i.length;for(let s=0;s<r;++s)t(i[s],e,o,n)}var tht=new Ri,nht=new Yc,iht=new en,oht=new yr;function k4(e,t){let n=e.camera,i=e.context,o=e.frameState,r=i.uniformState;r.updateCamera(n);let s;d(n.frustum.fov)?s=n.frustum.clone(tht):d(n.frustum.infiniteProjectionMatrix)?s=n.frustum.clone(nht):d(n.frustum.width)?s=n.frustum.clone(iht):s=n.frustum.clone(oht),s.near=n.frustum.near,s.far=n.frustum.far,r.updateFrustum(s),r.updatePass(Re.ENVIRONMENT);let a=o.passes,c=a.pick,l=e._environmentState,u=e._view,m=l.renderTranslucentDepthForPick,p=l.useWebVR;if(!c){let R=l.skyBoxCommand;if(d(R)&&Ra(R,e,i,t),l.isSkyAtmosphereVisible&&Ra(l.skyAtmosphereCommand,e,i,t),l.isSunVisible&&(l.sunDrawCommand.execute(i,t),e.sunBloom&&!p)){let E;l.useGlobeDepthFramebuffer?E=u.globeDepth.framebuffer:l.usePostProcess?E=u.sceneFramebuffer.framebuffer:E=l.originalFramebuffer,e._sunPostProcess.execute(i),e._sunPostProcess.copy(i,E),t.framebuffer=E}l.isMoonVisible&&l.moonCommand.execute(i,t)}let y;l.useOIT?(d(e._executeOITFunction)||(e._executeOITFunction=function(R,E,I,w,N){u.globeDepth.prepareColorTextures(i),u.oit.executeCommands(R,E,I,w,N)}),y=e._executeOITFunction):a.render?y=qmt:y=$mt;let f=u.frustumCommandsList,x=f.length,_=l.clearGlobeDepth,C=l.useDepthPlane,V=e._globeTranslucencyState,L=V.translucent,Z=e._view.globeTranslucencyFramebuffer,G=e._depthClearCommand,X=e._stencilClearCommand,P=e._classificationStencilClearCommand,v=e._depthPlane,F=l.usePostProcessSelected,M=n.position.z,b;for(let R=0;R<x;++R){let E=x-R-1,I=f[E];e.mode===ie.SCENE2D?(n.position.z=M-I.near+1,s.far=Math.max(1,I.far-I.near),s.near=1,r.update(o),r.updateFrustum(s)):(s.near=E!==0?I.near*e.opaqueFrustumNearOffset:I.near,s.far=I.far,r.updateFrustum(s)),G.execute(i,t),i.stencilBuffer&&X.execute(i,t),r.updatePass(Re.GLOBE);let w=I.commands[Re.GLOBE],N=I.indices[Re.GLOBE];if(L)V.executeGlobeCommands(I,Ra,Z,e,t);else for(b=0;b<N;++b)Ra(w[b],e,i,t);let B=u.globeDepth;if(d(B)&&l.useGlobeDepthFramebuffer&&B.executeCopyDepth(i,t),!l.renderTranslucentDepthForPick)if(r.updatePass(Re.TERRAIN_CLASSIFICATION),w=I.commands[Re.TERRAIN_CLASSIFICATION],N=I.indices[Re.TERRAIN_CLASSIFICATION],L)V.executeGlobeClassificationCommands(I,Ra,Z,e,t);else for(b=0;b<N;++b)Ra(w[b],e,i,t);if(_&&(G.execute(i,t),C&&v.execute(i,t)),!l.useInvertClassification||c||l.renderTranslucentDepthForPick){for(r.updatePass(Re.CESIUM_3D_TILE),w=I.commands[Re.CESIUM_3D_TILE],N=I.indices[Re.CESIUM_3D_TILE],b=0;b<N;++b)Ra(w[b],e,i,t);if(N>0&&(d(B)&&l.useGlobeDepthFramebuffer&&(B.prepareColorTextures(i,_),B.executeUpdateDepth(i,t,_,B.depthStencilTexture)),!l.renderTranslucentDepthForPick))for(r.updatePass(Re.CESIUM_3D_TILE_CLASSIFICATION),w=I.commands[Re.CESIUM_3D_TILE_CLASSIFICATION],N=I.indices[Re.CESIUM_3D_TILE_CLASSIFICATION],b=0;b<N;++b)Ra(w[b],e,i,t)}else{e._invertClassification.clear(i,t);let J=t.framebuffer;for(t.framebuffer=e._invertClassification._fbo.framebuffer,r.updatePass(Re.CESIUM_3D_TILE),w=I.commands[Re.CESIUM_3D_TILE],N=I.indices[Re.CESIUM_3D_TILE],b=0;b<N;++b)Ra(w[b],e,i,t);for(d(B)&&l.useGlobeDepthFramebuffer&&(e._invertClassification.prepareTextures(i),B.executeUpdateDepth(i,t,_,e._invertClassification._fbo.getDepthStencilTexture())),r.updatePass(Re.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW),w=I.commands[Re.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW],N=I.indices[Re.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW],b=0;b<N;++b)Ra(w[b],e,i,t);for(t.framebuffer=J,e._invertClassification.executeClassified(i,t),o.invertClassificationColor.alpha===1&&e._invertClassification.executeUnclassified(i,t),N>0&&i.stencilBuffer&&P.execute(i,t),r.updatePass(Re.CESIUM_3D_TILE_CLASSIFICATION),w=I.commands[Re.CESIUM_3D_TILE_CLASSIFICATION],N=I.indices[Re.CESIUM_3D_TILE_CLASSIFICATION],b=0;b<N;++b)Ra(w[b],e,i,t)}for(N>0&&i.stencilBuffer&&X.execute(i,t),r.updatePass(Re.VOXELS),w=I.commands[Re.VOXELS],N=I.indices[Re.VOXELS],w.length=N,eht(e,Ra,t,w),r.updatePass(Re.OPAQUE),w=I.commands[Re.OPAQUE],N=I.indices[Re.OPAQUE],b=0;b<N;++b)Ra(w[b],e,i,t);E!==0&&e.mode!==ie.SCENE2D&&(s.near=I.near,r.updateFrustum(s));let k;if(!c&&l.useInvertClassification&&o.invertClassificationColor.alpha<1&&(k=e._invertClassification),r.updatePass(Re.TRANSLUCENT),w=I.commands[Re.TRANSLUCENT],w.length=I.indices[Re.TRANSLUCENT],y(e,Ra,t,w,k),I.indices[Re.CESIUM_3D_TILE_CLASSIFICATION]>0&&u.translucentTileClassification.isSupported()&&(u.translucentTileClassification.executeTranslucentCommands(e,Ra,t,w,B.depthStencilTexture),u.translucentTileClassification.executeClassificationCommands(e,Ra,t,I)),i.depthTexture&&e.useDepthPicking&&(l.useGlobeDepthFramebuffer||m)){let J=B.depthStencilTexture,z=e._picking.getPickDepth(e,E);z.update(i,J),z.executeCopyDepth(i,t)}if(c||!F)continue;let U=t.framebuffer;if(t.framebuffer=u.sceneFramebuffer.getIdFramebuffer(),s.near=E!==0?I.near*e.opaqueFrustumNearOffset:I.near,s.far=I.far,r.updateFrustum(s),r.updatePass(Re.GLOBE),w=I.commands[Re.GLOBE],N=I.indices[Re.GLOBE],L)V.executeGlobeCommands(I,cF,Z,e,t);else for(b=0;b<N;++b)cF(w[b],e,i,t);for(_&&(G.framebuffer=t.framebuffer,G.execute(i,t),G.framebuffer=void 0),_&&C&&v.execute(i,t),r.updatePass(Re.CESIUM_3D_TILE),w=I.commands[Re.CESIUM_3D_TILE],N=I.indices[Re.CESIUM_3D_TILE],b=0;b<N;++b)cF(w[b],e,i,t);for(r.updatePass(Re.OPAQUE),w=I.commands[Re.OPAQUE],N=I.indices[Re.OPAQUE],b=0;b<N;++b)cF(w[b],e,i,t);for(r.updatePass(Re.TRANSLUCENT),w=I.commands[Re.TRANSLUCENT],N=I.indices[Re.TRANSLUCENT],b=0;b<N;++b)cF(w[b],e,i,t);t.framebuffer=U}}function Zge(e){e.context.uniformState.updatePass(Re.COMPUTE);let n=e._environmentState.sunComputeCommand;d(n)&&n.execute(e._computeEngine);let i=e._computeCommandList,o=i.length;for(let r=0;r<o;++r)i[r].execute(e._computeEngine)}function rht(e,t){e.context.uniformState.updatePass(Re.OVERLAY);let i=e.context,o=e._overlayCommandList,r=o.length;for(let s=0;s<r;++s)o[s].execute(i,t)}function sht(e,t,n){let i=n.shadowMapCullingVolume,o=n.isPointLight,r=n.passes,s=r.length,a=t.length;for(let c=0;c<a;++c){let l=t[c];if(e.updateDerivedCommands(l),l.castShadows&&(l.pass===Re.GLOBE||l.pass===Re.CESIUM_3D_TILE||l.pass===Re.OPAQUE||l.pass===Re.TRANSLUCENT)&&e.isVisible(l,i))if(o)for(let u=0;u<s;++u)r[u].commandList.push(l);else if(s===1)r[0].commandList.push(l);else{let u=!1;for(let m=s-1;m>=0;--m){let p=r[m].cullingVolume;if(e.isVisible(l,p))r[m].commandList.push(l),u=!0;else if(u)break}}}}function Gge(e){let t=e.frameState,n=t.shadowState.shadowMaps,i=n.length;if(!t.shadowState.shadowsEnabled)return;let o=e.context,r=o.uniformState;for(let s=0;s<i;++s){let a=n[s];if(a.outOfView)continue;let c=a.passes,l=c.length;for(let m=0;m<l;++m)c[m].commandList.length=0;let u=e.frameState.commandList;sht(e,u,a);for(let m=0;m<l;++m){let p=a.passes[m];r.updateCamera(p.camera),a.updatePass(o,m);let y=p.commandList.length;for(let f=0;f<y;++f){let x=p.commandList[f];r.updatePass(x.pass),Ra(x.derivedCommands.shadows.castCommands[s],e,o,p.passState)}}}}var aht=new h;Yi.prototype.updateAndExecuteCommands=function(e,t){let i=this._frameState.mode;this._environmentState.useWebVR?cht(this,e,t):i!==ie.SCENE2D||this._mapMode2D===Fl.ROTATE?sg(!0,this,e,t):(D4(this,e,t),yht(this,e))};function cht(e,t,n){let i=e._view,o=i.camera,s=e._environmentState.renderTranslucentDepthForPick;D4(e,t,n),Ege(e),i.createPotentiallyVisibleSet(e),Zge(e),s||Gge(e);let a=t.viewport;a.x=0,a.y=0,a.width=a.width*.5;let c=co.clone(o,e._cameraVR);c.frustum=o.frustum;let l=o.frustum.near,u=l*g(e.focalLength,5),m=g(e.eyeSeparation,u/30),p=h.multiplyByScalar(c.right,m*.5,aht);o.frustum.aspectRatio=a.width/a.height;let y=.5*m*l/u;h.add(c.position,p,o.position),o.frustum.xOffset=y,k4(e,t),a.x=a.width,h.subtract(c.position,p,o.position),o.frustum.xOffset=-y,k4(e,t),co.clone(c,o)}var lht=new he(Math.PI,W.PI_OVER_TWO),dht=new h,uht=new h,mht=new A,hht=new A,fht=new h,pht=new h,bht=new He;function yht(e,t){let n=e.context,i=e.frameState,o=e.camera,r=t.viewport,s=He.clone(r,bht);t.viewport=s;let a=lht,c=dht;e.mapProjection.project(a,c);let u=h.clone(o.position,uht),m=A.clone(o.transform,hht),p=o.frustum.clone();o._setTransform(A.IDENTITY);let y=A.computeViewportTransformation(s,0,1,mht),f=o.frustum.projectionMatrix,x=o.positionWC.y,_=h.fromElements(W.sign(x)*c.x-x,0,-o.positionWC.x,fht),C=vt.pointToGLWindowCoordinates(f,y,_,pht);C.x=Math.floor(C.x);let V=s.x,L=s.width;if(x===0||C.x<=V||C.x>=V+L)sg(!0,e,t);else if(Math.abs(V+L*.5-C.x)<1)s.width=C.x-s.x,o.position.x*=W.sign(o.position.x),o.frustum.right=0,i.cullingVolume=o.frustum.computeCullingVolume(o.positionWC,o.directionWC,o.upWC),n.uniformState.update(i),sg(!0,e,t),s.x=C.x,o.position.x=-o.position.x,o.frustum.right=-o.frustum.left,o.frustum.left=0,i.cullingVolume=o.frustum.computeCullingVolume(o.positionWC,o.directionWC,o.upWC),n.uniformState.update(i),sg(!1,e,t);else if(C.x>V+L*.5){s.width=C.x-V;let Z=o.frustum.right;o.frustum.right=c.x-x,i.cullingVolume=o.frustum.computeCullingVolume(o.positionWC,o.directionWC,o.upWC),n.uniformState.update(i),sg(!0,e,t),s.x=C.x,s.width=V+L-C.x,o.position.x=-o.position.x,o.frustum.left=-o.frustum.right,o.frustum.right=Z-o.frustum.right*2,i.cullingVolume=o.frustum.computeCullingVolume(o.positionWC,o.directionWC,o.upWC),n.uniformState.update(i),sg(!1,e,t)}else{s.x=C.x,s.width=V+L-C.x;let Z=o.frustum.left;o.frustum.left=-c.x-x,i.cullingVolume=o.frustum.computeCullingVolume(o.positionWC,o.directionWC,o.upWC),n.uniformState.update(i),sg(!0,e,t),s.x=V,s.width=C.x-V,o.position.x=-o.position.x,o.frustum.right=-o.frustum.left,o.frustum.left=Z-o.frustum.left*2,i.cullingVolume=o.frustum.computeCullingVolume(o.positionWC,o.directionWC,o.upWC),n.uniformState.update(i),sg(!1,e,t)}o._setTransform(m),h.clone(u,o.position),o.frustum=p.clone(),t.viewport=r}function sg(e,t,n,i){let o=t._environmentState,r=t._view,s=o.renderTranslucentDepthForPick;e||(t.frameState.commandList.length=0),Ege(t),r.createPotentiallyVisibleSet(t),e&&(d(i)&&D4(t,n,i),Zge(t),s||Gge(t)),k4(t,n)}var Vge=new jr;Yi.prototype.updateEnvironment=function(){let e=this._frameState,t=this._view,n=this._environmentState,i=e.passes.render,o=e.passes.offscreen,r=this.skyAtmosphere,s=this.globe,a=this._globeTranslucencyState;if(!i||this._mode!==ie.SCENE2D&&t.camera.frustum instanceof en||!a.environmentVisible)n.skyAtmosphereCommand=void 0,n.skyBoxCommand=void 0,n.sunDrawCommand=void 0,n.sunComputeCommand=void 0,n.moonCommand=void 0;else{d(r)?(d(s)?(r.setDynamicAtmosphereColor(s.enableLighting&&s.dynamicAtmosphereLighting,s.dynamicAtmosphereLightingFromSun),n.isReadyForAtmosphere=n.isReadyForAtmosphere||!s.show||s._surface._tilesToRender.length>0):n.isReadyForAtmosphere=!0,n.skyAtmosphereCommand=r.update(e,s),d(n.skyAtmosphereCommand)&&this.updateDerivedCommands(n.skyAtmosphereCommand)):n.skyAtmosphereCommand=void 0,n.skyBoxCommand=d(this.skyBox)?this.skyBox.update(e,this._hdr):void 0;let x=d(this.sun)?this.sun.update(e,t.passState,this._hdr):void 0;n.sunDrawCommand=d(x)?x.drawCommand:void 0,n.sunComputeCommand=d(x)?x.computeCommand:void 0,n.moonCommand=d(this.moon)?this.moon.update(e):void 0}let c=n.clearGlobeDepth=d(s)&&s.show&&(!s.depthTestAgainstTerrain||this.mode===ie.SCENE2D);(n.useDepthPlane=c&&this.mode===ie.SCENE3D&&a.useDepthPlane)&&this._depthPlane.update(e),n.renderTranslucentDepthForPick=!1,n.useWebVR=this._useWebVR&&this.mode!==ie.SCENE2D&&!o;let u=e.mode===ie.SCENE3D&&!a.sunVisibleThroughGlobe?e.occluder:void 0,m=e.cullingVolume,p=Vge.planes;for(let x=0;x<5;++x)p[x]=m.planes[x];m=Vge,n.isSkyAtmosphereVisible=d(n.skyAtmosphereCommand)&&n.isReadyForAtmosphere,n.isSunVisible=this.isVisible(n.sunDrawCommand,m,u),n.isMoonVisible=this.isVisible(n.moonCommand,m,u);let y=this.specularEnvironmentMaps,f=this._specularEnvironmentMapAtlas;d(y)&&(!d(f)||f.url!==y)?(f=f&&f.destroy(),this._specularEnvironmentMapAtlas=new hm(y)):!d(y)&&d(f)&&(f.destroy(),this._specularEnvironmentMapAtlas=void 0),d(this._specularEnvironmentMapAtlas)&&this._specularEnvironmentMapAtlas.update(e)};function ght(e){let t=e._frameState;e.debugShowFrustumPlanes!==e._debugShowFrustumPlanes&&(e.debugShowFrustumPlanes?e._debugFrustumPlanes=new Gf({camera:e.camera,updateOnChange:!1,frustumSplits:t.frustumSplits}):e._debugFrustumPlanes=e._debugFrustumPlanes&&e._debugFrustumPlanes.destroy(),e._debugShowFrustumPlanes=e.debugShowFrustumPlanes),d(e._debugFrustumPlanes)&&e._debugFrustumPlanes.update(t)}function xht(e){let t=e._frameState,n=t.shadowMaps,i=n.length,o=i>0&&!t.passes.pick&&e.mode===ie.SCENE3D;if(o!==t.shadowState.shadowsEnabled&&(++t.shadowState.lastDirtyTime,t.shadowState.shadowsEnabled=o),t.shadowState.lightShadowsEnabled=!1,!!o){for(let r=0;r<i;++r)if(n[r]!==t.shadowState.shadowMaps[r]){++t.shadowState.lastDirtyTime;break}t.shadowState.shadowMaps.length=0,t.shadowState.lightShadowMaps.length=0;for(let r=0;r<i;++r){let s=n[r];s.update(t),t.shadowState.shadowMaps.push(s),s.fromLightSource&&(t.shadowState.lightShadowMaps.push(s),t.shadowState.lightShadowsEnabled=!0),s.dirty&&(++t.shadowState.lastDirtyTime,s.dirty=!1)}}}function Ege(e){let t=e._frameState;e._groundPrimitives.update(t),e._primitives.update(t),ght(e),xht(e),e._globe&&e._globe.render(t)}function D4(e,t,n){let i=e._context,o=e._frameState,r=e._environmentState,s=e._view,c=e._frameState.passes.pick;d(s.globeDepth)&&(s.globeDepth.picking=c);let l=r.useWebVR;r.originalFramebuffer=t.framebuffer,d(e.sun)&&e.sunBloom!==e._sunBloom?(e.sunBloom&&!l?e._sunPostProcess=new rF:d(e._sunPostProcess)&&(e._sunPostProcess=e._sunPostProcess.destroy()),e._sunBloom=e.sunBloom):!d(e.sun)&&d(e._sunPostProcess)&&(e._sunPostProcess=e._sunPostProcess.destroy(),e._sunBloom=!1);let u=e._clearColorCommand;Y.clone(n,u.color),u.execute(i,t);let m=r.useGlobeDepthFramebuffer=d(s.globeDepth);m&&(s.globeDepth.update(i,t,s.viewport,e.msaaSamples,e._hdr,r.clearGlobeDepth),s.globeDepth.clear(i,t,n));let p=s.oit,y=r.useOIT=!c&&d(p)&&p.isSupported();y&&(p.update(i,t,s.globeDepth.colorFramebufferManager,e._hdr,e.msaaSamples),p.clear(i,t,n),r.useOIT=p.isSupported());let f=e.postProcessStages,x=r.usePostProcess=!c&&(e._hdr||f.length>0||f.ambientOcclusion.enabled||f.fxaa.enabled||f.bloom.enabled);if(r.usePostProcessSelected=!1,x&&(s.sceneFramebuffer.update(i,s.viewport,e._hdr,e.msaaSamples),s.sceneFramebuffer.clear(i,t,n),f.update(i,o.useLogDepth,e._hdr),f.clear(i),x=r.usePostProcess=f.ready,r.usePostProcessSelected=x&&f.hasSelected),r.isSunVisible&&e.sunBloom&&!l?(t.framebuffer=e._sunPostProcess.update(t),e._sunPostProcess.clear(i,t,n)):m?t.framebuffer=s.globeDepth.framebuffer:x&&(t.framebuffer=s.sceneFramebuffer.framebuffer),d(t.framebuffer)&&u.execute(i,t),r.useInvertClassification=!c&&d(t.framebuffer)&&e.invertClassification){let C;if(e.frameState.invertClassificationColor.alpha===1&&r.useGlobeDepthFramebuffer&&(C=s.globeDepth.framebuffer),d(C)||i.depthTexture){if(e._invertClassification.previousFramebuffer=C,e._invertClassification.update(i,e.msaaSamples,s.globeDepth.colorFramebufferManager),e._invertClassification.clear(i,t),e.frameState.invertClassificationColor.alpha<1&&y){let V=e._invertClassification.unclassifiedCommand,L=V.derivedCommands;L.oit=p.createDerivedCommands(V,i,L.oit)}}else r.useInvertClassification=!1}e._globeTranslucencyState.translucent&&s.globeTranslucencyFramebuffer.updateAndClear(e._hdr,s.viewport,i,t)}Yi.prototype.resolveFramebuffers=function(e){let t=this._context,n=this._environmentState,i=this._view,o=i.globeDepth;d(o)&&o.prepareColorTextures(t);let r=n.useOIT,s=n.useGlobeDepthFramebuffer,a=n.usePostProcess,c=n.originalFramebuffer,l=s?o.colorFramebufferManager:void 0,u=i.sceneFramebuffer._colorFramebuffer,m=i.sceneFramebuffer.idFramebuffer;r&&(e.framebuffer=a?u.framebuffer:c,i.oit.execute(t,e));let p=i.translucentTileClassification;if(p.hasTranslucentDepth&&p.isSupported()&&p.execute(this,e),a){i.sceneFramebuffer.prepareColorTextures(t);let y=u;s&&!r&&(y=l);let f=this.postProcessStages,x=y.getColorTexture(0),_=m.getColorTexture(0),C=g(l,u).getDepthStencilTexture();f.execute(t,x,C,_),f.copy(t,c)}!r&&!a&&s&&(e.framebuffer=c,o.executeCopyColor(t,e))};function _ht(e){let t=e._frameState.afterRender;for(let n=0,i=t.length;n<i;++n)t[n]()&&e.requestRender();t.length=0}function Tht(e){let t=e._globe,i=e.camera.positionCartographic;if(d(t)&&t.show&&d(i))return t.getHeight(i)}function Sht(e){let t=e.camera,n=e._mode,i=e.globe,o=e._screenSpaceCameraController,r=t.positionCartographic;if(!d(r))return!1;if(!o.onMap()&&r.height<0)return!0;if(!d(i)||!i.show||n===ie.SCENE2D||n===ie.MORPHING)return!1;let s=e._globeHeight;return d(s)&&r.height<s}Yi.prototype.initializeFrame=function(){this._shaderFrameCount++===120&&(this._shaderFrameCount=0,this._context.shaderCache.destroyReleasedShaderPrograms(),this._context.textureCache.destroyReleasedTextures()),this._tweens.update(),this._globeHeight=Tht(this),this._cameraUnderground=Sht(this),this._globeTranslucencyState.update(this),this._screenSpaceCameraController.update(),d(this._deviceOrientationCameraController)&&this._deviceOrientationCameraController.update(),this.camera.update(this._mode),this.camera._updateCameraChanged()};function Cht(e,t){if(e.debugShowFramesPerSecond){if(!d(e._performanceDisplay)){let n=document.createElement("div");n.className="cesium-performanceDisplay-defaultContainer",e._canvas.parentNode.appendChild(n);let o=new U0({container:n});e._performanceDisplay=o,e._performanceContainer=n}e._performanceDisplay.throttled=e.requestRenderMode,e._performanceDisplay.update(t)}else d(e._performanceDisplay)&&(e._performanceDisplay=e._performanceDisplay&&e._performanceDisplay.destroy(),e._performanceContainer.parentNode.removeChild(e._performanceContainer))}function Vht(e){e._jobScheduler.resetBudgets();let t=e._frameState;e.primitives.prePassesUpdate(t),d(e.globe)&&e.globe.update(t),e._picking.update(),t.creditDisplay.update()}function Lht(e){let t=e._frameState;e.primitives.postPassesUpdate(t),wa.update()}var Rht=new Y;function Zht(e){let t=e._frameState,n=e.context,i=n.uniformState,o=e._defaultView;e._view=o,e.updateFrameState(),t.passes.render=!0,t.passes.postProcess=e.postProcessStages.hasSelected,t.tilesetPassState=Hmt;let r=g(e.backgroundColor,Y.BLACK);e._hdr&&(r=Y.clone(r,Rht),r.red=Math.pow(r.red,e.gamma),r.green=Math.pow(r.green,e.gamma),r.blue=Math.pow(r.blue,e.gamma)),t.backgroundColor=r,e.fog.update(t),i.update(t);let s=e.shadowMap;d(s)&&s.enabled&&(!d(e.light)||e.light instanceof R0?h.negate(i.sunDirectionWC,e._shadowMapCamera.direction):h.clone(e.light.direction,e._shadowMapCamera.direction),t.shadowMaps.push(s)),e._computeCommandList.length=0,e._overlayCommandList.length=0;let a=o.viewport;a.x=0,a.y=0,a.width=n.drawingBufferWidth,a.height=n.drawingBufferHeight;let c=o.passState;c.framebuffer=void 0,c.blendingEnabled=void 0,c.scissorTest=void 0,c.viewport=He.clone(a,c.viewport),d(e.globe)&&e.globe.beginFrame(t),e.updateEnvironment(),e.updateAndExecuteCommands(c,r),e.resolveFramebuffers(c),c.framebuffer=void 0,rht(e,c),d(e.globe)&&(e.globe.endFrame(t),e.globe.tilesLoaded||(e._renderRequested=!0)),n.endFrame()}function TT(e,t){try{t(e)}catch(n){if(e._renderError.raiseEvent(e,n),e.rethrowRenderErrors)throw n}}function Ght(e){return e._picking.updateMostDetailedRayPicks(e)}Yi.prototype.render=function(e){this._preUpdate.raiseEvent(this,e);let t=this._frameState;t.newFrame=!1,d(e)||(e=te.now());let n=this._view.checkForCameraUpdates(this),i=!this.requestRenderMode||this._renderRequested||n||this._logDepthBufferDirty||this._hdrDirty||this.mode===ie.MORPHING;if(!i&&d(this.maximumRenderTimeChange)&&d(this._lastRenderTime)){let o=Math.abs(te.secondsDifference(this._lastRenderTime,e));i=i||o>this.maximumRenderTimeChange}if(i){this._lastRenderTime=te.clone(e,this._lastRenderTime),this._renderRequested=!1,this._logDepthBufferDirty=!1,this._hdrDirty=!1;let o=W.incrementWrap(t.frameNumber,15e6,1);Lge(this,o,e),t.newFrame=!0}TT(this,Vht),this.primitives.show&&(TT(this,Ght),TT(this,Eht),TT(this,Xht),i||TT(this,Iht)),this._postUpdate.raiseEvent(this,e),i&&(this._preRender.raiseEvent(this,e),t.creditDisplay.beginFrame(),TT(this,Zht)),Cht(this,i),TT(this,Lht),_ht(this),i&&(this._postRender.raiseEvent(this,e),t.creditDisplay.endFrame())};Yi.prototype.forceRender=function(e){this._renderRequested=!0,this.render(e)};Yi.prototype.requestRender=function(){this._renderRequested=!0};Yi.prototype.clampLineWidth=function(e){return Math.max(kt.minimumAliasedLineWidth,Math.min(e,kt.maximumAliasedLineWidth))};Yi.prototype.pick=function(e,t,n){return this._picking.pick(this,e,t,n)};Yi.prototype.pickPositionWorldCoordinates=function(e,t){return this._picking.pickPositionWorldCoordinates(this,e,t)};Yi.prototype.pickPosition=function(e,t){return this._picking.pickPosition(this,e,t)};Yi.prototype.drillPick=function(e,t,n,i){return this._picking.drillPick(this,e,t,n,i)};function Eht(e){let t=e._frameState;M4.camera=t.camera,M4.cullingVolume=t.cullingVolume,e.primitives.updateForPass(t,M4)}function Xht(e){let t=e._frameState;if(!t.camera.canPreloadFlight())return;N4.camera=e.preloadFlightCamera,N4.cullingVolume=e.preloadFlightCullingVolume,e.primitives.updateForPass(t,N4)}function Iht(e){e.primitives.updateForPass(e._frameState,zmt)}Yi.prototype.pickFromRay=function(e,t,n){return this._picking.pickFromRay(this,e,t,n)};Yi.prototype.drillPickFromRay=function(e,t,n,i){return this._picking.drillPickFromRay(this,e,t,n,i)};Yi.prototype.pickFromRayMostDetailed=function(e,t,n){return this._picking.pickFromRayMostDetailed(this,e,t,n)};Yi.prototype.drillPickFromRayMostDetailed=function(e,t,n,i){return this._picking.drillPickFromRayMostDetailed(this,e,t,n,i)};Yi.prototype.sampleHeight=function(e,t,n){return this._picking.sampleHeight(this,e,t,n)};Yi.prototype.clampToHeight=function(e,t,n,i){return this._picking.clampToHeight(this,e,t,n,i)};Yi.prototype.sampleHeightMostDetailed=function(e,t,n){return this._picking.sampleHeightMostDetailed(this,e,t,n)};Yi.prototype.clampToHeightMostDetailed=function(e,t,n){return this._picking.clampToHeightMostDetailed(this,e,t,n)};Yi.prototype.cartesianToCanvasCoordinates=function(e,t){return Ji.wgs84ToWindowCoordinates(this,e,t)};Yi.prototype.completeMorph=function(){this._transitioner.completeMorph()};Yi.prototype.morphTo2D=function(e){let t,n=this.globe;d(n)?t=n.ellipsoid:t=this.mapProjection.ellipsoid,e=g(e,2),this._transitioner.morphTo2D(e,t)};Yi.prototype.morphToColumbusView=function(e){let t,n=this.globe;d(n)?t=n.ellipsoid:t=this.mapProjection.ellipsoid,e=g(e,2),this._transitioner.morphToColumbusView(e,t)};Yi.prototype.morphTo3D=function(e){let t,n=this.globe;d(n)?t=n.ellipsoid:t=this.mapProjection.ellipsoid,e=g(e,2),this._transitioner.morphTo3D(e,t)};function Wht(e,t){if(e._removeTerrainProviderReadyListener=e._removeTerrainProviderReadyListener&&e._removeTerrainProviderReadyListener(),t.ready){d(e.globe)&&(e.globe.terrainProvider=t.provider);return}e.globe.terrainProvider=void 0,e._removeTerrainProviderReadyListener=t.readyEvent.addEventListener(n=>{d(e)&&d(e.globe)&&(e.globe.terrainProvider=n),e._removeTerrainProviderReadyListener()})}Yi.prototype.setTerrain=function(e){return Wht(this,e),e};Yi.prototype.isDestroyed=function(){return!1};Yi.prototype.destroy=function(){this._tweens.removeAll(),this._computeEngine=this._computeEngine&&this._computeEngine.destroy(),this._screenSpaceCameraController=this._screenSpaceCameraController&&this._screenSpaceCameraController.destroy(),this._deviceOrientationCameraController=this._deviceOrientationCameraController&&!this._deviceOrientationCameraController.isDestroyed()&&this._deviceOrientationCameraController.destroy(),this._primitives=this._primitives&&this._primitives.destroy(),this._groundPrimitives=this._groundPrimitives&&this._groundPrimitives.destroy(),this._globe=this._globe&&this._globe.destroy(),this._removeTerrainProviderReadyListener=this._removeTerrainProviderReadyListener&&this._removeTerrainProviderReadyListener(),this.skyBox=this.skyBox&&this.skyBox.destroy(),this.skyAtmosphere=this.skyAtmosphere&&this.skyAtmosphere.destroy(),this._debugSphere=this._debugSphere&&this._debugSphere.destroy(),this.sun=this.sun&&this.sun.destroy(),this._sunPostProcess=this._sunPostProcess&&this._sunPostProcess.destroy(),this._depthPlane=this._depthPlane&&this._depthPlane.destroy(),this._transitioner=this._transitioner&&this._transitioner.destroy(),this._debugFrustumPlanes=this._debugFrustumPlanes&&this._debugFrustumPlanes.destroy(),this._brdfLutGenerator=this._brdfLutGenerator&&this._brdfLutGenerator.destroy(),this._picking=this._picking&&this._picking.destroy(),this._defaultView=this._defaultView&&this._defaultView.destroy(),this._view=void 0,this._removeCreditContainer&&this._canvas.parentNode.removeChild(this._creditContainer),this.postProcessStages=this.postProcessStages&&this.postProcessStages.destroy(),this._context=this._context&&this._context.destroy(),this._frameState.creditDisplay=this._frameState.creditDisplay&&this._frameState.creditDisplay.destroy(),d(this._performanceDisplay)&&(this._performanceDisplay=this._performanceDisplay&&this._performanceDisplay.destroy(),this._performanceContainer.parentNode.removeChild(this._performanceContainer)),this._removeRequestListenerCallback(),this._removeTaskProcessorListenerCallback();for(let e=0;e<this._removeGlobeCallbacks.length;++e)this._removeGlobeCallbacks[e]();return this._removeGlobeCallbacks.length=0,ue(this)};var lF=Yi;var VAi=T(S(),1);function VV(e){e=g(e,re.WGS84),this.show=!0,this.perFragmentAtmosphere=!1,this._ellipsoid=e;let t=1.025,n=h.multiplyByScalar(e.radii,t,new h);this._scaleMatrix=A.fromScale(n),this._modelMatrix=new A,this._command=new nt({owner:this,modelMatrix:this._modelMatrix}),this._spSkyFromSpace=void 0,this._spSkyFromAtmosphere=void 0,this._flags=void 0,this.atmosphereLightIntensity=50,this.atmosphereRayleighCoefficient=new h(55e-7,13e-6,284e-7),this.atmosphereMieCoefficient=new h(21e-6,21e-6,21e-6),this.atmosphereRayleighScaleHeight=1e4,this.atmosphereMieScaleHeight=3200,this.atmosphereMieAnisotropy=.9,this.hueShift=0,this.saturationShift=0,this.brightnessShift=0,this._hueSaturationBrightness=new h;let i=new h;i.x=e.maximumRadius*t,i.y=e.maximumRadius,i.z=0,this._radiiAndDynamicAtmosphereColor=i;let o=this;this._command.uniformMap={u_radiiAndDynamicAtmosphereColor:function(){return o._radiiAndDynamicAtmosphereColor},u_hsbShift:function(){return o._hueSaturationBrightness.x=o.hueShift,o._hueSaturationBrightness.y=o.saturationShift,o._hueSaturationBrightness.z=o.brightnessShift,o._hueSaturationBrightness},u_atmosphereLightIntensity:function(){return o.atmosphereLightIntensity},u_atmosphereRayleighCoefficient:function(){return o.atmosphereRayleighCoefficient},u_atmosphereMieCoefficient:function(){return o.atmosphereMieCoefficient},u_atmosphereRayleighScaleHeight:function(){return o.atmosphereRayleighScaleHeight},u_atmosphereMieScaleHeight:function(){return o.atmosphereMieScaleHeight},u_atmosphereMieAnisotropy:function(){return o.atmosphereMieAnisotropy}}}Object.defineProperties(VV.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});VV.prototype.setDynamicAtmosphereColor=function(e,t){let n=e?t?2:1:0;this._radiiAndDynamicAtmosphereColor.z=n};var B4=new A;VV.prototype.update=function(e,t){if(!this.show)return;let n=e.mode;if(n!==ie.SCENE3D&&n!==ie.MORPHING||!e.passes.render)return;let i=A.fromRotationTranslation(e.context.uniformState.inverseViewRotation,h.ZERO,B4),o=A.multiplyTransformation(i,Zo.Y_UP_TO_Z_UP,B4),r=A.multiply(this._scaleMatrix,o,B4);A.clone(r,this._modelMatrix);let s=e.context,a=Pht(this),c=e.globeTranslucencyState.translucent,l=this.perFragmentAtmosphere||c||!d(t)||!t.show,u=this._command;if(!d(u.vertexArray)){let p=Is.createGeometry(new Is({radii:new h(1,1,1),slicePartitions:256,stackPartitions:256,vertexFormat:We.POSITION_ONLY}));u.vertexArray=ti.fromGeometry({context:s,geometry:p,attributeLocations:An.createAttributeLocations(p),bufferUsage:Ne.STATIC_DRAW}),u.renderState=De.fromCache({cull:{enabled:!0,face:bi.FRONT},blending:dn.ALPHA_BLEND,depthMask:!1})}let m=a|l<<2|c<<3;if(m!==this._flags){this._flags=m;let p=[];a&&p.push("COLOR_CORRECT"),l&&p.push("PER_FRAGMENT_ATMOSPHERE"),c&&p.push("GLOBE_TRANSLUCENT");let y=new Ye({defines:p,sources:[W0,tV,gv]}),f=new Ye({defines:p,sources:[W0,tV,yv]});this._spSkyAtmosphere=Qt.fromCache({context:s,vertexShaderSource:y,fragmentShaderSource:f}),u.shaderProgram=this._spSkyAtmosphere}return u};function Pht(e){return!(W.equalsEpsilon(e.hueShift,0,W.EPSILON7)&&W.equalsEpsilon(e.saturationShift,0,W.EPSILON7)&&W.equalsEpsilon(e.brightnessShift,0,W.EPSILON7))}VV.prototype.isDestroyed=function(){return!1};VV.prototype.destroy=function(){let e=this._command;return e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),this._spSkyAtmosphere=this._spSkyAtmosphere&&this._spSkyAtmosphere.destroy(),ue(this)};var dF=VV;var KAi=T(S(),1);function qk(e){this.sources=e.sources,this._sources=void 0,this.show=g(e.show,!0),this._command=new nt({modelMatrix:A.clone(A.IDENTITY),owner:this}),this._cubeMap=void 0,this._attributeLocations=void 0,this._useHdr=void 0}qk.prototype.update=function(e,t){let n=this;if(!this.show||e.mode!==ie.SCENE3D&&e.mode!==ie.MORPHING||!e.passes.render)return;let i=e.context;if(this._sources!==this.sources){this._sources=this.sources;let r=this.sources;typeof r.positiveX=="string"?FP(i,this._sources).then(function(s){n._cubeMap=n._cubeMap&&n._cubeMap.destroy(),n._cubeMap=s}):(this._cubeMap=this._cubeMap&&this._cubeMap.destroy(),this._cubeMap=new Ma({context:i,source:r}))}let o=this._command;if(!d(o.vertexArray)){o.uniformMap={u_cubeMap:function(){return n._cubeMap}};let r=rl.createGeometry(rl.fromDimensions({dimensions:new h(2,2,2),vertexFormat:We.POSITION_ONLY})),s=this._attributeLocations=An.createAttributeLocations(r);o.vertexArray=ti.fromGeometry({context:i,geometry:r,attributeLocations:s,bufferUsage:Ne.STATIC_DRAW}),o.renderState=De.fromCache({blending:dn.ALPHA_BLEND})}if(!d(o.shaderProgram)||this._useHdr!==t){let r=new Ye({defines:[t?"HDR":""],sources:[xv]});o.shaderProgram=Qt.fromCache({context:i,vertexShaderSource:_v,fragmentShaderSource:r,attributeLocations:this._attributeLocations}),this._useHdr=t}if(d(this._cubeMap))return o};qk.prototype.isDestroyed=function(){return!1};qk.prototype.destroy=function(){let e=this._command;return e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy(),this._cubeMap=this._cubeMap&&this._cubeMap.destroy(),ue(this)};var uF=qk;var TMi=T(S(),1);function hF(){this.show=!0,this._drawCommand=new nt({primitiveType:Fe.TRIANGLES,boundingVolume:new ce,owner:this}),this._commands={drawCommand:this._drawCommand,computeCommand:void 0},this._boundingVolume=new ce,this._boundingVolume2D=new ce,this._texture=void 0,this._drawingBufferWidth=void 0,this._drawingBufferHeight=void 0,this._radiusTS=void 0,this._size=void 0,this.glowFactor=1,this._glowFactorDirty=!1,this._useHdr=void 0;let e=this;this._uniformMap={u_texture:function(){return e._texture},u_size:function(){return e._size}}}Object.defineProperties(hF.prototype,{glowFactor:{get:function(){return this._glowFactor},set:function(e){e=Math.max(e,0),this._glowFactor=e,this._glowFactorDirty=!0}}});var vht=new D,wht=new D,Fht=new se,mF=new se;hF.prototype.update=function(e,t,n){if(!this.show)return;let i=e.mode;if(i===ie.SCENE2D||i===ie.MORPHING||!e.passes.render)return;let o=e.context,r=t.viewport.width,s=t.viewport.height;if(!d(this._texture)||r!==this._drawingBufferWidth||s!==this._drawingBufferHeight||this._glowFactorDirty||n!==this._useHdr){this._texture=this._texture&&this._texture.destroy(),this._drawingBufferWidth=r,this._drawingBufferHeight=s,this._glowFactorDirty=!1,this._useHdr=n;let Z=Math.max(r,s);Z=Math.pow(2,Math.ceil(Math.log(Z)/Math.log(2))-2),Z=Math.max(1,Z);let G=n?o.halfFloatingPointTexture?Je.HALF_FLOAT:Je.FLOAT:Je.UNSIGNED_BYTE;this._texture=new Wt({context:o,width:Z,height:Z,pixelFormat:st.RGBA,pixelDatatype:G}),this._glowLengthTS=this._glowFactor*5,this._radiusTS=1/(1+2*this._glowLengthTS)*.5;let X=this,P={u_radiusTS:function(){return X._radiusTS}};this._commands.computeCommand=new qd({fragmentShaderSource:Sv,outputTexture:this._texture,uniformMap:P,persists:!1,owner:this,postExecute:function(){X._commands.computeCommand=void 0}})}let a=this._drawCommand;if(!d(a.vertexArray)){let Z={direction:0},G=new Uint8Array(4*2);G[0]=0,G[1]=0,G[2]=255,G[3]=0,G[4]=255,G[5]=255,G[6]=0,G[7]=255;let X=mt.createVertexBuffer({context:o,typedArray:G,usage:Ne.STATIC_DRAW}),P=[{index:Z.direction,vertexBuffer:X,componentsPerAttribute:2,normalize:!0,componentDatatype:Q.UNSIGNED_BYTE}],v=mt.createIndexBuffer({context:o,typedArray:new Uint16Array([0,1,2,0,2,3]),usage:Ne.STATIC_DRAW,indexDatatype:Ue.UNSIGNED_SHORT});a.vertexArray=new ti({context:o,attributes:P,indexBuffer:v}),a.shaderProgram=Qt.fromCache({context:o,vertexShaderSource:Cv,fragmentShaderSource:Tv,attributeLocations:Z}),a.renderState=De.fromCache({blending:dn.ALPHA_BLEND}),a.uniformMap=this._uniformMap}let c=o.uniformState.sunPositionWC,l=o.uniformState.sunPositionColumbusView,u=this._boundingVolume,m=this._boundingVolume2D;h.clone(c,u.center),m.center.x=l.z,m.center.y=l.x,m.center.z=l.y,u.radius=W.SOLAR_RADIUS+W.SOLAR_RADIUS*this._glowLengthTS,m.radius=u.radius,i===ie.SCENE3D?ce.clone(u,a.boundingVolume):i===ie.COLUMBUS_VIEW&&ce.clone(m,a.boundingVolume);let p=Ji.computeActualWgs84Position(e,c,mF),y=h.magnitude(h.subtract(p,e.camera.position,mF)),f=o.uniformState.projection,x=Fht;x.x=0,x.y=0,x.z=-y,x.w=1;let _=A.multiplyByVector(f,x,mF),C=Ji.clipToGLWindowCoordinates(t.viewport,_,vht);x.x=W.SOLAR_RADIUS;let V=A.multiplyByVector(f,x,mF),L=Ji.clipToGLWindowCoordinates(t.viewport,V,wht);return this._size=D.magnitude(D.subtract(L,C,mF)),this._size=2*this._size*(1+2*this._glowLengthTS),this._size=Math.ceil(this._size),this._commands};hF.prototype.isDestroyed=function(){return!1};hF.prototype.destroy=function(){let e=this._drawCommand;return e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy(),this._texture=this._texture&&this._texture.destroy(),ue(this)};var fF=hF;function LV(e){return $t(`Assets/Textures/SkyBox/tycho2t3_80_${e}.jpg`)}function Aht(e){e._renderLoopRunning=!0;let t=0;function n(i){if(!e.isDestroyed())if(e._useDefaultRenderLoop)try{let o=e._targetFrameRate;if(!d(o))e.resize(),e.render(),requestAnimationFrame(n);else{let r=1e3/o,s=i-t;s>r&&(e.resize(),e.render(),t=i-s%r),requestAnimationFrame(n)}}catch(o){if(e._useDefaultRenderLoop=!1,e._renderLoopRunning=!1,e._showRenderLoopErrors){let r="An error occurred while rendering. Rendering has stopped.";e.showErrorPanel(r,void 0,o)}}else e._renderLoopRunning=!1}requestAnimationFrame(n)}function Xge(e){let t=e._useBrowserRecommendedResolution?1:window.devicePixelRatio;return t*=e._resolutionScale,d(e._scene)&&(e._scene.pixelRatio=t),t}function Ige(e){let t=e._canvas,n=t.clientWidth,i=t.clientHeight,o=Xge(e);e._canvasClientWidth=n,e._canvasClientHeight=i,n*=o,i*=o,t.width=n,t.height=i,e._canRender=n!==0&&i!==0,e._lastDevicePixelRatio=window.devicePixelRatio}function Wge(e){let t=e._canvas,n=t.width,i=t.height;if(n!==0&&i!==0){let o=e._scene.camera.frustum;d(o.aspectRatio)?o.aspectRatio=n/i:(o.top=o.right*(i/n),o.bottom=-o.top)}}function ST(e,t){e=En(e),t=g(t,g.EMPTY_OBJECT);let n=document.createElement("div");n.className="cesium-widget",e.appendChild(n);let i=document.createElement("canvas"),o=Mt.supportsImageRenderingPixelated();this._supportsImageRenderingPixelated=o,o&&(i.style.imageRendering=Mt.imageRenderingValue()),i.oncontextmenu=function(){return!1},i.onselectstart=function(){return!1};function r(){i!==i.ownerDocument.activeElement&&i.ownerDocument.activeElement.blur()}g(t.blurActiveElementOnCanvasFocus,!0)&&(i.addEventListener("mousedown",r),i.addEventListener("pointerdown",r)),n.appendChild(i);let a=document.createElement("div");a.className="cesium-widget-credits";let c=d(t.creditContainer)?En(t.creditContainer):n;c.appendChild(a);let l=d(t.creditViewport)?En(t.creditViewport):n,u=g(t.showRenderLoopErrors,!0),m=g(t.useBrowserRecommendedResolution,!0);this._element=n,this._container=e,this._canvas=i,this._canvasClientWidth=0,this._canvasClientHeight=0,this._lastDevicePixelRatio=0,this._creditViewport=l,this._creditContainer=c,this._innerCreditContainer=a,this._canRender=!1,this._renderLoopRunning=!1,this._showRenderLoopErrors=u,this._resolutionScale=1,this._useBrowserRecommendedResolution=m,this._forceResize=!1,this._clock=d(t.clock)?t.clock:new km,Ige(this);try{let p=new lF({canvas:i,contextOptions:t.contextOptions,creditContainer:a,creditViewport:l,mapProjection:t.mapProjection,orderIndependentTranslucency:t.orderIndependentTranslucency,scene3DOnly:g(t.scene3DOnly,!1),shadows:t.shadows,mapMode2D:t.mapMode2D,requestRenderMode:t.requestRenderMode,maximumRenderTimeChange:t.maximumRenderTimeChange,depthPlaneEllipsoidOffset:t.depthPlaneEllipsoidOffset,msaaSamples:t.msaaSamples});this._scene=p,p.camera.constrainedAxis=h.UNIT_Z,Xge(this),Wge(this);let y=g(p.mapProjection.ellipsoid,re.WGS84),f=t.globe;d(f)||(f=new Jv(y)),f!==!1&&(p.globe=f,p.globe.shadows=g(t.terrainShadows,xn.RECEIVE_ONLY));let x=t.skyBox;d(x)||(x=new uF({sources:{positiveX:LV("px"),negativeX:LV("mx"),positiveY:LV("py"),negativeY:LV("my"),positiveZ:LV("pz"),negativeZ:LV("mz")}})),x!==!1&&(p.skyBox=x,p.sun=new fF,p.moon=new qv);let _=t.skyAtmosphere;d(_)||(_=new dF(y),_.show=t.globe!==!1&&f.show),_!==!1&&(p.skyAtmosphere=_);let C=t.baseLayer;t.globe!==!1&&C!==!1&&(d(C)||(C=ia.fromWorldImagery()),p.imageryLayers.add(C)),d(t.terrainProvider)&&t.globe!==!1&&(p.terrainProvider=t.terrainProvider),d(t.terrain)&&t.globe!==!1&&p.setTerrain(t.terrain),this._screenSpaceEventHandler=new Ed(i),d(t.sceneMode)&&(t.sceneMode===ie.SCENE2D&&this._scene.morphTo2D(0),t.sceneMode===ie.COLUMBUS_VIEW&&this._scene.morphToColumbusView(0)),this._useDefaultRenderLoop=void 0,this.useDefaultRenderLoop=g(t.useDefaultRenderLoop,!0),this._targetFrameRate=void 0,this.targetFrameRate=t.targetFrameRate;let V=this;this._onRenderError=function(L,Z){if(V._useDefaultRenderLoop=!1,V._renderLoopRunning=!1,V._showRenderLoopErrors){let G="An error occurred while rendering. Rendering has stopped.";V.showErrorPanel(G,void 0,Z)}},p.renderError.addEventListener(this._onRenderError)}catch(p){if(u){let y="Error constructing CesiumWidget.",f='Visit <a href="http://get.webgl.org">http://get.webgl.org</a> to verify that your web browser and hardware support WebGL. Consider trying a different web browser or updating your video drivers. Detailed error information is below:';this.showErrorPanel(y,f,p)}throw p}}Object.defineProperties(ST.prototype,{container:{get:function(){return this._container}},canvas:{get:function(){return this._canvas}},creditContainer:{get:function(){return this._creditContainer}},creditViewport:{get:function(){return this._creditViewport}},scene:{get:function(){return this._scene}},imageryLayers:{get:function(){return this._scene.imageryLayers}},terrainProvider:{get:function(){return this._scene.terrainProvider},set:function(e){this._scene.terrainProvider=e}},creditDisplay:{get:function(){return this._scene.frameState.creditDisplay}},camera:{get:function(){return this._scene.camera}},clock:{get:function(){return this._clock}},screenSpaceEventHandler:{get:function(){return this._screenSpaceEventHandler}},targetFrameRate:{get:function(){return this._targetFrameRate},set:function(e){this._targetFrameRate=e}},useDefaultRenderLoop:{get:function(){return this._useDefaultRenderLoop},set:function(e){this._useDefaultRenderLoop!==e&&(this._useDefaultRenderLoop=e,e&&!this._renderLoopRunning&&Aht(this))}},resolutionScale:{get:function(){return this._resolutionScale},set:function(e){this._resolutionScale!==e&&(this._resolutionScale=e,this._forceResize=!0)}},useBrowserRecommendedResolution:{get:function(){return this._useBrowserRecommendedResolution},set:function(e){this._useBrowserRecommendedResolution!==e&&(this._useBrowserRecommendedResolution=e,this._forceResize=!0)}}});ST.prototype.showErrorPanel=function(e,t,n){let i=this._element,o=document.createElement("div");o.className="cesium-widget-errorPanel";let r=document.createElement("div");r.className="cesium-widget-errorPanel-content",o.appendChild(r);let s=document.createElement("div");s.className="cesium-widget-errorPanel-header",s.appendChild(document.createTextNode(e)),r.appendChild(s);let a=document.createElement("div");a.className="cesium-widget-errorPanel-scroll",r.appendChild(a);function c(){a.style.maxHeight=`${Math.max(Math.round(i.clientHeight*.9-100),30)}px`}c(),d(window.addEventListener)&&window.addEventListener("resize",c,!1);let l=d(t),u=d(n);if(l||u){let y=document.createElement("div");if(y.className="cesium-widget-errorPanel-message",a.appendChild(y),u){let f=Sf(n);l||(typeof n=="string"&&(n=new Error(n)),t=Sf({name:n.name,message:n.message}),f=n.stack),typeof console<"u"&&console.error(`${e}
  11060. ${t}
  11061. ${f}`);let x=document.createElement("div");x.className="cesium-widget-errorPanel-message-details collapsed";let _=document.createElement("span");_.className="cesium-widget-errorPanel-more-details",_.appendChild(document.createTextNode("See more...")),x.appendChild(_),x.onclick=function(C){x.removeChild(_),x.appendChild(document.createTextNode(f)),x.className="cesium-widget-errorPanel-message-details",r.className="cesium-widget-errorPanel-content expanded",x.onclick=void 0},a.appendChild(x)}y.innerHTML=`<p>${t}</p>`}let m=document.createElement("div");m.className="cesium-widget-errorPanel-buttonPanel",r.appendChild(m);let p=document.createElement("button");p.setAttribute("type","button"),p.className="cesium-button",p.appendChild(document.createTextNode("OK")),p.onclick=function(){d(c)&&d(window.removeEventListener)&&window.removeEventListener("resize",c,!1),i.removeChild(o)},m.appendChild(p),i.appendChild(o)};ST.prototype.isDestroyed=function(){return!1};ST.prototype.destroy=function(){d(this._scene)&&(this._scene.renderError.removeEventListener(this._onRenderError),this._scene=this._scene.destroy()),this._container.removeChild(this._element),this._creditContainer.removeChild(this._innerCreditContainer),ue(this)};ST.prototype.resize=function(){let e=this._canvas;!this._forceResize&&this._canvasClientWidth===e.clientWidth&&this._canvasClientHeight===e.clientHeight&&this._lastDevicePixelRatio===window.devicePixelRatio||(this._forceResize=!1,Ige(this),Wge(this),this._scene.requestRender())};ST.prototype.render=function(){if(this._canRender){this._scene.initializeFrame();let e=this._clock.tick();this._scene.render(e)}else this._clock.tick()};var pF=ST;var zMi=T(S(),1);var Mht=new h(1,1,1);function Y4(e){e=g(e,Mht),this._dimensions=h.clone(e)}Object.defineProperties(Y4.prototype,{dimensions:{get:function(){return this._dimensions},set:function(e){h.clone(e,this._dimensions)}}});var Nht=new h;Y4.prototype.emit=function(e){let t=this._dimensions,n=h.multiplyByScalar(t,.5,Nht),i=W.randomBetween(-n.x,n.x),o=W.randomBetween(-n.y,n.y),r=W.randomBetween(-n.z,n.z);e.position=h.fromElements(i,o,r,e.position),e.velocity=h.normalize(e.position,e.velocity)};var O4=Y4;var jMi=T(S(),1);function H0(){this.featurePropertiesDirty=!1}Object.defineProperties(H0.prototype,{featuresLength:{get:function(){fe.throwInstantiationError()}},pointsLength:{get:function(){fe.throwInstantiationError()}},trianglesLength:{get:function(){fe.throwInstantiationError()}},geometryByteLength:{get:function(){fe.throwInstantiationError()}},texturesByteLength:{get:function(){fe.throwInstantiationError()}},batchTableByteLength:{get:function(){fe.throwInstantiationError()}},innerContents:{get:function(){fe.throwInstantiationError()}},ready:{get:function(){fe.throwInstantiationError()}},tileset:{get:function(){fe.throwInstantiationError()}},tile:{get:function(){fe.throwInstantiationError()}},url:{get:function(){fe.throwInstantiationError()}},batchTable:{get:function(){fe.throwInstantiationError()}},metadata:{get:function(){fe.throwInstantiationError()},set:function(e){fe.throwInstantiationError()}},group:{get:function(){fe.throwInstantiationError()},set:function(e){fe.throwInstantiationError()}}});H0.prototype.hasProperty=function(e,t){fe.throwInstantiationError()};H0.prototype.getFeature=function(e){fe.throwInstantiationError()};H0.prototype.applyDebugSettings=function(e,t){fe.throwInstantiationError()};H0.prototype.applyStyle=function(e){fe.throwInstantiationError()};H0.prototype.update=function(e,t){fe.throwInstantiationError()};H0.prototype.isDestroyed=function(){fe.throwInstantiationError()};H0.prototype.destroy=function(){fe.throwInstantiationError()};var K4=H0;var dNi=T(S(),1);var nNi=T(S(),1);function RV(e,t){this._conditionsExpression=Ke(e,!0),this._conditions=e.conditions,this._runtimeConditions=void 0,kht(this,t)}Object.defineProperties(RV.prototype,{conditionsExpression:{get:function(){return this._conditionsExpression}}});function Uht(e,t){this.condition=e,this.expression=t}function kht(e,t){let n=[],i=e._conditions;if(!d(i))return;let o=i.length;for(let r=0;r<o;++r){let s=i[r],a=String(s[0]),c=String(s[1]);n.push(new Uht(new tu(a,t),new tu(c,t)))}e._runtimeConditions=n}RV.prototype.evaluate=function(e,t){let n=this._runtimeConditions;if(!d(n))return;let i=n.length;for(let o=0;o<i;++o){let r=n[o];if(r.condition.evaluate(e))return r.expression.evaluate(e,t)}};RV.prototype.evaluateColor=function(e,t){let n=this._runtimeConditions;if(!d(n))return;let i=n.length;for(let o=0;o<i;++o){let r=n[o];if(r.condition.evaluate(e))return r.expression.evaluateColor(e,t)}};RV.prototype.getShaderFunction=function(e,t,n,i){let o=this._runtimeConditions;if(!d(o)||o.length===0)return;let r="",s=o.length;for(let a=0;a<s;++a){let c=o[a],l=c.condition.getShaderExpression(t,n),u=c.expression.getShaderExpression(t,n);r+=` ${a===0?"if":"else if"} (${l})
  11062. {
  11063. return ${u};
  11064. }
  11065. `}return r=`${i} ${e}
  11066. {
  11067. ${r} return ${i}(1.0);
  11068. }
  11069. `,r};RV.prototype.getVariables=function(){let e=[],t=this._runtimeConditions;if(!d(t)||t.length===0)return e;let n=t.length;for(let i=0;i<n;++i){let o=t[i];e.push.apply(e,o.condition.getVariables()),e.push.apply(e,o.expression.getVariables())}return e=e.filter(function(i,o,r){return r.indexOf(i)===o}),e};var bF=RV;function ag(e){this._style={},this._ready=!1,this._show=void 0,this._color=void 0,this._pointSize=void 0,this._pointOutlineColor=void 0,this._pointOutlineWidth=void 0,this._labelColor=void 0,this._labelOutlineColor=void 0,this._labelOutlineWidth=void 0,this._font=void 0,this._labelStyle=void 0,this._labelText=void 0,this._backgroundColor=void 0,this._backgroundPadding=void 0,this._backgroundEnabled=void 0,this._scaleByDistance=void 0,this._translucencyByDistance=void 0,this._distanceDisplayCondition=void 0,this._heightOffset=void 0,this._anchorLineEnabled=void 0,this._anchorLineColor=void 0,this._image=void 0,this._disableDepthTestDistance=void 0,this._horizontalOrigin=void 0,this._verticalOrigin=void 0,this._labelHorizontalOrigin=void 0,this._labelVerticalOrigin=void 0,this._meta=void 0,this._colorShaderFunction=void 0,this._showShaderFunction=void 0,this._pointSizeShaderFunction=void 0,this._colorShaderFunctionReady=!1,this._showShaderFunctionReady=!1,this._pointSizeShaderFunctionReady=!1,this._colorShaderTranslucent=!1,Dht(this,e)}function Dht(e,t){t=g(Ke(t,!0),e._style),e._style=t,e.show=t.show,e.color=t.color,e.pointSize=t.pointSize,e.pointOutlineColor=t.pointOutlineColor,e.pointOutlineWidth=t.pointOutlineWidth,e.labelColor=t.labelColor,e.labelOutlineColor=t.labelOutlineColor,e.labelOutlineWidth=t.labelOutlineWidth,e.labelStyle=t.labelStyle,e.font=t.font,e.labelText=t.labelText,e.backgroundColor=t.backgroundColor,e.backgroundPadding=t.backgroundPadding,e.backgroundEnabled=t.backgroundEnabled,e.scaleByDistance=t.scaleByDistance,e.translucencyByDistance=t.translucencyByDistance,e.distanceDisplayCondition=t.distanceDisplayCondition,e.heightOffset=t.heightOffset,e.anchorLineEnabled=t.anchorLineEnabled,e.anchorLineColor=t.anchorLineColor,e.image=t.image,e.disableDepthTestDistance=t.disableDepthTestDistance,e.horizontalOrigin=t.horizontalOrigin,e.verticalOrigin=t.verticalOrigin,e.labelHorizontalOrigin=t.labelHorizontalOrigin,e.labelVerticalOrigin=t.labelVerticalOrigin;let n={};if(d(t.meta)){let i=t.defines,o=g(t.meta,g.EMPTY_OBJECT);for(let r in o)o.hasOwnProperty(r)&&(n[r]=new tu(o[r],i))}e._meta=n,e._ready=!0}function qo(e,t){let n=g(e._style,g.EMPTY_OBJECT).defines;if(d(t)){if(typeof t=="boolean"||typeof t=="number")return new tu(String(t));if(typeof t=="string")return new tu(t,n);if(d(t.conditions))return new bF(t,n)}else return;return t}function $o(e){if(d(e)){if(d(e.expression))return e.expression;if(d(e.conditionsExpression))return Ke(e.conditionsExpression,!0)}else return;return e}Object.defineProperties(ag.prototype,{style:{get:function(){return this._style}},show:{get:function(){return this._show},set:function(e){this._show=qo(this,e),this._style.show=$o(this._show),this._showShaderFunctionReady=!1}},color:{get:function(){return this._color},set:function(e){this._color=qo(this,e),this._style.color=$o(this._color),this._colorShaderFunctionReady=!1}},pointSize:{get:function(){return this._pointSize},set:function(e){this._pointSize=qo(this,e),this._style.pointSize=$o(this._pointSize),this._pointSizeShaderFunctionReady=!1}},pointOutlineColor:{get:function(){return this._pointOutlineColor},set:function(e){this._pointOutlineColor=qo(this,e),this._style.pointOutlineColor=$o(this._pointOutlineColor)}},pointOutlineWidth:{get:function(){return this._pointOutlineWidth},set:function(e){this._pointOutlineWidth=qo(this,e),this._style.pointOutlineWidth=$o(this._pointOutlineWidth)}},labelColor:{get:function(){return this._labelColor},set:function(e){this._labelColor=qo(this,e),this._style.labelColor=$o(this._labelColor)}},labelOutlineColor:{get:function(){return this._labelOutlineColor},set:function(e){this._labelOutlineColor=qo(this,e),this._style.labelOutlineColor=$o(this._labelOutlineColor)}},labelOutlineWidth:{get:function(){return this._labelOutlineWidth},set:function(e){this._labelOutlineWidth=qo(this,e),this._style.labelOutlineWidth=$o(this._labelOutlineWidth)}},font:{get:function(){return this._font},set:function(e){this._font=qo(this,e),this._style.font=$o(this._font)}},labelStyle:{get:function(){return this._labelStyle},set:function(e){this._labelStyle=qo(this,e),this._style.labelStyle=$o(this._labelStyle)}},labelText:{get:function(){return this._labelText},set:function(e){this._labelText=qo(this,e),this._style.labelText=$o(this._labelText)}},backgroundColor:{get:function(){return this._backgroundColor},set:function(e){this._backgroundColor=qo(this,e),this._style.backgroundColor=$o(this._backgroundColor)}},backgroundPadding:{get:function(){return this._backgroundPadding},set:function(e){this._backgroundPadding=qo(this,e),this._style.backgroundPadding=$o(this._backgroundPadding)}},backgroundEnabled:{get:function(){return this._backgroundEnabled},set:function(e){this._backgroundEnabled=qo(this,e),this._style.backgroundEnabled=$o(this._backgroundEnabled)}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){this._scaleByDistance=qo(this,e),this._style.scaleByDistance=$o(this._scaleByDistance)}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){this._translucencyByDistance=qo(this,e),this._style.translucencyByDistance=$o(this._translucencyByDistance)}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){this._distanceDisplayCondition=qo(this,e),this._style.distanceDisplayCondition=$o(this._distanceDisplayCondition)}},heightOffset:{get:function(){return this._heightOffset},set:function(e){this._heightOffset=qo(this,e),this._style.heightOffset=$o(this._heightOffset)}},anchorLineEnabled:{get:function(){return this._anchorLineEnabled},set:function(e){this._anchorLineEnabled=qo(this,e),this._style.anchorLineEnabled=$o(this._anchorLineEnabled)}},anchorLineColor:{get:function(){return this._anchorLineColor},set:function(e){this._anchorLineColor=qo(this,e),this._style.anchorLineColor=$o(this._anchorLineColor)}},image:{get:function(){return this._image},set:function(e){this._image=qo(this,e),this._style.image=$o(this._image)}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){this._disableDepthTestDistance=qo(this,e),this._style.disableDepthTestDistance=$o(this._disableDepthTestDistance)}},horizontalOrigin:{get:function(){return this._horizontalOrigin},set:function(e){this._horizontalOrigin=qo(this,e),this._style.horizontalOrigin=$o(this._horizontalOrigin)}},verticalOrigin:{get:function(){return this._verticalOrigin},set:function(e){this._verticalOrigin=qo(this,e),this._style.verticalOrigin=$o(this._verticalOrigin)}},labelHorizontalOrigin:{get:function(){return this._labelHorizontalOrigin},set:function(e){this._labelHorizontalOrigin=qo(this,e),this._style.labelHorizontalOrigin=$o(this._labelHorizontalOrigin)}},labelVerticalOrigin:{get:function(){return this._labelVerticalOrigin},set:function(e){this._labelVerticalOrigin=qo(this,e),this._style.labelVerticalOrigin=$o(this._labelVerticalOrigin)}},meta:{get:function(){return this._meta},set:function(e){this._meta=e}}});ag.fromUrl=function(e){return Ee.createIfNeeded(e).fetchJson(e).then(function(n){return new ag(n)})};ag.prototype.getColorShaderFunction=function(e,t,n){return this._colorShaderFunctionReady?(n.translucent=this._colorShaderTranslucent,this._colorShaderFunction):(this._colorShaderFunctionReady=!0,d(this.color)&&d(this.color.getShaderFunction)?this._colorShaderFunction=this.color.getShaderFunction(e,t,n,"vec4"):this._colorShaderFunction=void 0,this._colorShaderTranslucent=n.translucent,this._colorShaderFunction)};ag.prototype.getShowShaderFunction=function(e,t,n){return this._showShaderFunctionReady?this._showShaderFunction:(this._showShaderFunctionReady=!0,d(this.show)&&d(this.show.getShaderFunction)?this._showShaderFunction=this.show.getShaderFunction(e,t,n,"bool"):this._showShaderFunction=void 0,this._showShaderFunction)};ag.prototype.getPointSizeShaderFunction=function(e,t,n){return this._pointSizeShaderFunctionReady?this._pointSizeShaderFunction:(this._pointSizeShaderFunctionReady=!0,d(this.pointSize)&&d(this.pointSize.getShaderFunction)?this._pointSizeShaderFunction=this.pointSize.getShaderFunction(e,t,n,"float"):this._pointSizeShaderFunction=void 0,this._pointSizeShaderFunction)};ag.prototype.getVariables=function(){let e=[];return d(this.color)&&d(this.color.getVariables)&&e.push.apply(e,this.color.getVariables()),d(this.show)&&d(this.show.getVariables)&&e.push.apply(e,this.show.getVariables()),d(this.pointSize)&&d(this.pointSize.getVariables)&&e.push.apply(e,this.pointSize.getVariables()),e=e.filter(function(t,n,i){return i.indexOf(t)===n}),e};var CT=ag;var R5i=T(S(),1);var fNi=T(S(),1);function yF(e){e=g(e,g.EMPTY_OBJECT),this._maximumSubtreeCount=g(e.maximumSubtreeCount,0),this._subtreeRequestCounter=0,this._queue=new H_({comparator:yF.comparator})}yF.prototype.addSubtree=function(e){let t=new Bht(e,this._subtreeRequestCounter);this._subtreeRequestCounter++,this._queue.insert(t);let n=e.implicitCoordinates;if(n.level>0){let i=n.getParentSubtreeCoordinates(),o=this.find(i)}if(this._maximumSubtreeCount>0)for(;this._queue.length>this._maximumSubtreeCount&&this._queue.getMinimum()!==t;)this._queue.removeMinimum()};yF.prototype.find=function(e){let t=this._queue,n=t.internalArray,i=t.length;for(let o=0;o<i;o++){let r=n[o],a=r.subtree.implicitCoordinates;if(e.isEqual(a))return r.subtree}};yF.comparator=function(e,t){let n=e.subtree.implicitCoordinates,i=t.subtree.implicitCoordinates;return n.isAncestor(i)?1:i.isAncestor(n)?-1:e.stamp-t.stamp};function Bht(e,t){this.subtree=e,this.stamp=t}var gF=yF;var CNi=T(S(),1);function Ml(){this.orientedBoundingBox=new Wn,this.boundingSphere=new ce,this.boundTransform=new A,this.shapeTransform=new A,this._minBounds=h.clone(Ml.DefaultMinBounds,new h),this._maxBounds=h.clone(Ml.DefaultMaxBounds,new h),this.shaderUniforms={renderMinBounds:new h,renderMaxBounds:new h,boxUvToShapeUvScale:new h,boxUvToShapeUvTranslate:new h},this.shaderDefines={BOX_INTERSECTION_INDEX:void 0,BOX_HAS_SHAPE_BOUNDS:void 0},this.shaderMaximumIntersectionsLength=0}var Yht=new h,H4=new h,Oht=new $,Kht=new h,Hht=new h,zht=new h,Jht=new h,Pge=A.fromRotationTranslation($.fromUniformScale(.5,new $),new h(.5,.5,.5),new A);Ml.prototype.update=function(e,t,n,i,o){i=g(i,Ml.DefaultMinBounds),o=g(o,Ml.DefaultMaxBounds);let r=Ml.DefaultMinBounds,s=Ml.DefaultMaxBounds;t=this._minBounds=h.clamp(t,r,s,this._minBounds),n=this._maxBounds=h.clamp(n,r,s,this._maxBounds),i=h.clamp(i,r,s,Kht),o=h.clamp(o,r,s,Hht);let a=h.clamp(t,i,o,zht),c=h.clamp(n,i,o,Jht),l=A.getScale(e,H4);if(a.x>c.x||a.y>c.y||a.z>c.z||(a.x===c.x)+(a.y===c.y)+(a.z===c.z)>=2||i.x>o.x||i.y>o.y||i.z>o.z||l.x===0||l.y===0||l.z===0)return!1;this.shapeTransform=A.clone(e,this.shapeTransform),this.orientedBoundingBox=vge(a,c,this.shapeTransform,this.orientedBoundingBox),this.boundTransform=A.fromRotationTranslation(this.orientedBoundingBox.halfAxes,this.orientedBoundingBox.center,this.boundTransform),this.boundingSphere=ce.fromOrientedBoundingBox(this.orientedBoundingBox,this.boundingSphere);let{shaderUniforms:u,shaderDefines:m}=this;for(let f in m)m.hasOwnProperty(f)&&(m[f]=void 0);let p=!h.equals(t,r)||!h.equals(n,s),y=0;if(m.BOX_INTERSECTION_INDEX=y,y+=1,u.renderMinBounds=A.multiplyByPoint(Pge,a,u.renderMinBounds),u.renderMaxBounds=A.multiplyByPoint(Pge,c,u.renderMaxBounds),p){m.BOX_HAS_SHAPE_BOUNDS=!0;let f=t,x=n;u.boxUvToShapeUvScale=h.fromElements(2/(f.x===x.x?1:x.x-f.x),2/(f.y===x.y?1:x.y-f.y),2/(f.z===x.z?1:x.z-f.z),u.boxUvToShapeUvScale),u.boxUvToShapeUvTranslate=h.fromElements(-u.boxUvToShapeUvScale.x*(f.x*.5+.5),-u.boxUvToShapeUvScale.y*(f.y*.5+.5),-u.boxUvToShapeUvScale.z*(f.z*.5+.5),u.boxUvToShapeUvTranslate)}return this.shaderMaximumIntersectionsLength=y,!0};var Qht=new h,jht=new h;Ml.prototype.computeOrientedBoundingBoxForTile=function(e,t,n,i,o){let r=this._minBounds,s=this._maxBounds,a=1/Math.pow(2,e),c=h.fromElements(W.lerp(r.x,s.x,a*t),W.lerp(r.y,s.y,a*n),W.lerp(r.z,s.z,a*i),Qht),l=h.fromElements(W.lerp(r.x,s.x,a*(t+1)),W.lerp(r.y,s.y,a*(n+1)),W.lerp(r.z,s.z,a*(i+1)),jht);return vge(c,l,this.shapeTransform,o)};Ml.prototype.computeApproximateStepSize=function(e){return 1/h.maximumComponent(e)};Ml.DefaultMinBounds=Object.freeze(new h(-1,-1,-1));Ml.DefaultMaxBounds=Object.freeze(new h(1,1,1));function vge(e,t,n,i){let o=Ml.DefaultMinBounds,r=Ml.DefaultMaxBounds;if(h.equals(e,o)&&h.equals(t,r))i.center=A.getTranslation(n,i.center),i.halfAxes=A.getMatrix3(n,i.halfAxes);else{let a=A.getScale(n,H4),c=h.midpoint(e,t,Yht);i.center=A.multiplyByPoint(n,c,i.center),a=h.fromElements(a.x*.5*(t.x-e.x),a.y*.5*(t.y-e.y),a.z*.5*(t.z-e.z),H4);let l=A.getRotation(n,Oht);i.halfAxes=$.setScale(l,a,i.halfAxes)}return i}var Af=Ml;var GNi=T(S(),1);function $k(e){this._resource=e,this._metadataTable=void 0}Object.defineProperties($k.prototype,{metadataTable:{get:function(){return this._metadataTable}}});$k.fromJson=async function(e,t,n,i){let o;d(t)?o={json:t,binary:void 0}:o=$ht(n);let r=await qht(e,o.json,o.binary),s={},a=o.json.bufferViews.length;for(let m=0;m<a;++m){let p=o.json.bufferViews[m],y=p.byteOffset,f=y+p.byteLength,_=r[p.buffer].subarray(y,f);s[m]=_}let c=o.json.voxelTable,l=o.json.propertyTables[c],u=new $k(e);return u._metadataTable=new pl({count:l.count,properties:l.properties,class:i.classes[l.class],bufferViews:s}),u};function qht(e,t,n){let i=t.buffers.length,o=new Array(i);for(let r=0;r<i;r++){let s=t.buffers[r];if(d(s.uri)){let c=e.getDerivedResource({url:s.uri});o[r]=c.fetchArrayBuffer().then(function(l){return new Uint8Array(l)})}else o[r]=Promise.resolve(n)}return Promise.all(o)}function $ht(e){let n=new DataView(e.buffer,e.byteOffset),i=8,o=n.getUint32(i,!0);i+=8;let r=n.getUint32(i,!0);i+=8;let s=Go(e,i,o);i+=o;let a=e.subarray(i,i+r);return{json:s,binary:a}}var xF=$k;var NNi=T(S(),1);function Dr(){this.orientedBoundingBox=new Wn,this.boundingSphere=new ce,this.boundTransform=new A,this.shapeTransform=new A,this._minimumRadius=Dr.DefaultMinBounds.x,this._maximumRadius=Dr.DefaultMaxBounds.x,this._minimumHeight=Dr.DefaultMinBounds.y,this._maximumHeight=Dr.DefaultMaxBounds.y,this._minimumAngle=Dr.DefaultMinBounds.z,this._maximumAngle=Dr.DefaultMaxBounds.z,this.shaderUniforms={cylinderUvToRenderBoundsScale:new h,cylinderUvToRenderBoundsTranslate:new h,cylinderUvToRenderRadiusMin:0,cylinderRenderAngleMinMax:new D,cylinderUvToShapeUvRadius:new D,cylinderUvToShapeUvHeight:new D,cylinderUvToShapeUvAngle:new D,cylinderShapeUvAngleMinMax:new D,cylinderShapeUvAngleRangeZeroMid:0},this.shaderDefines={CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN:void 0,CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MAX:void 0,CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT:void 0,CYLINDER_HAS_RENDER_BOUNDS_HEIGHT:void 0,CYLINDER_HAS_RENDER_BOUNDS_HEIGHT_FLAT:void 0,CYLINDER_HAS_RENDER_BOUNDS_ANGLE:void 0,CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO:void 0,CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF:void 0,CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_HALF:void 0,CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF:void 0,CYLINDER_HAS_SHAPE_BOUNDS_RADIUS:void 0,CYLINDER_HAS_SHAPE_BOUNDS_RADIUS_FLAT:void 0,CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT:void 0,CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT_FLAT:void 0,CYLINDER_HAS_SHAPE_BOUNDS_ANGLE:void 0,CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_RANGE_EQUAL_ZERO:void 0,CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY:void 0,CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY:void 0,CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED:void 0,CYLINDER_INTERSECTION_INDEX_RADIUS_MAX:void 0,CYLINDER_INTERSECTION_INDEX_RADIUS_MIN:void 0,CYLINDER_INTERSECTION_INDEX_ANGLE:void 0},this.shaderMaximumIntersectionsLength=0}var Fge=new h,eft=new h,tft=new h,nft=new $,ift=new A,oft=new A,rft=A.fromRotationTranslation($.fromUniformScale(2,new $),new h(-1,-1,-1),new A);Dr.prototype.update=function(e,t,n,i,o){i=g(i,Dr.DefaultMinBounds),o=g(o,Dr.DefaultMaxBounds);let r=Dr.DefaultMinBounds.x,s=Dr.DefaultMaxBounds.x,a=Dr.DefaultMinBounds.y,c=Dr.DefaultMaxBounds.y,l=Dr.DefaultMinBounds.z,u=Dr.DefaultMaxBounds.z,m=u-l,p=.5*m,y=W.EPSILON10,f=W.EPSILON3,x=W.EPSILON10,_=W.clamp(t.x,r,s),C=W.clamp(n.x,r,s),V=W.clamp(i.x,r,s),L=W.clamp(o.x,r,s),Z=Math.max(_,V),G=Math.min(C,L),X=W.clamp(t.y,a,c),P=W.clamp(n.y,a,c),v=W.clamp(i.y,a,c),F=W.clamp(o.y,a,c),M=Math.max(X,v),b=Math.min(P,F),R=W.negativePiToPi(t.z),E=W.negativePiToPi(n.z),I=W.negativePiToPi(i.z),w=W.negativePiToPi(o.z),N=Math.max(R,I),B=Math.min(E,w),k=A.getScale(e,Fge);if(G===0||Z>G||M>b||W.equalsEpsilon(k.x,0,void 0,y)||W.equalsEpsilon(k.y,0,void 0,y)||W.equalsEpsilon(k.z,0,void 0,y))return!1;this._minimumRadius=_,this._maximumRadius=C,this._minimumHeight=X,this._maximumHeight=P,this._minimumAngle=R,this._maximumAngle=E,this.shapeTransform=A.clone(e,this.shapeTransform),this.orientedBoundingBox=J4(Z,G,M,b,N,B,this.shapeTransform,this.orientedBoundingBox),this.boundTransform=A.fromRotationTranslation(this.orientedBoundingBox.halfAxes,this.orientedBoundingBox.center,this.boundTransform),this.boundingSphere=ce.fromOrientedBoundingBox(this.orientedBoundingBox,this.boundingSphere);let J=_===r&&C===s,z=X===a&&P===c,ee=E<R,K=E-R+ee*m,j=K>p+x&&K<m-x,q=K>x&&K<p-x,be=K>=p-x&&K<=p+x,Te=K<=x,ae=j||q||be||Te,xe=W.equalsEpsilon(R,l,void 0,f),_e=W.equalsEpsilon(E,u,void 0,f),Ve=G===s,Ie=Z===r,Me=M===a&&b===c,ve=B<N,ke=B-N+ve*m,ct=ke>p+x&&ke<m-x,yt=ke>x&&ke<p-x,ot=ke>=p-x&&ke<=p+x,ln=ke<=x,vn=ct||yt||ot||ln,Dt=this.shaderUniforms,Nt=this.shaderDefines;for(let Ce in Nt)Nt.hasOwnProperty(Ce)&&(Nt[Ce]=void 0);let pe=0;if(Nt.CYLINDER_INTERSECTION_INDEX_RADIUS_MAX=pe,pe+=1,Ie||(Nt.CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN=!0,Nt.CYLINDER_INTERSECTION_INDEX_RADIUS_MIN=pe,pe+=1,Dt.cylinderUvToRenderRadiusMin=G/Z),Ve||(Nt.CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MAX=!0),Z===G&&(Nt.CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT=!0),Me||(Nt.CYLINDER_HAS_RENDER_BOUNDS_HEIGHT=!0),M===b&&(Nt.CYLINDER_HAS_RENDER_BOUNDS_HEIGHT_FLAT=!0),X===P&&(Nt.CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT_FLAT=!0),_===C&&(Nt.CYLINDER_HAS_SHAPE_BOUNDS_RADIUS_FLAT=!0),!J){Nt.CYLINDER_HAS_SHAPE_BOUNDS_RADIUS=!0;let Ce=1/(C-_),Ht=_/(_-C);Dt.cylinderUvToShapeUvRadius=D.fromElements(Ce,Ht,Dt.cylinderUvToShapeUvRadius)}if(!z){Nt.CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT=!0;let Ce=2/(P-X),Ht=(X+1)/(X-P);Dt.cylinderUvToShapeUvHeight=D.fromElements(Ce,Ht,Dt.cylinderUvToShapeUvHeight)}if(!Ve||!Me){let Ce=.5*(b-M),Ht=h.fromElements(1/G,1/G,1/(Ce===0?1:Ce),tft),ut=h.fromElements(0,0,-Ht.z*.5*(M+b),eft),hi=A.fromRotationTranslation($.fromScale(Ht,nft),ut,ift),ji=A.multiplyTransformation(hi,rft,oft);Dt.cylinderUvToRenderBoundsScale=A.getScale(ji,Dt.cylinderUvToRenderBoundsScale),Dt.cylinderUvToRenderBoundsTranslate=A.getTranslation(ji,Dt.cylinderUvToRenderBoundsTranslate)}if(ee&&(Nt.CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED=!0),vn&&(Nt.CYLINDER_HAS_RENDER_BOUNDS_ANGLE=!0,Nt.CYLINDER_INTERSECTION_INDEX_ANGLE=pe,ct?(Nt.CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF=!0,pe+=1):yt?(Nt.CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF=!0,pe+=2):ot?(Nt.CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_HALF=!0,pe+=1):ln&&(Nt.CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO=!0,pe+=2),Dt.cylinderRenderAngleMinMax=D.fromElements(N,B,Dt.cylinderAngleMinMax)),ae){Nt.CYLINDER_HAS_SHAPE_BOUNDS_ANGLE=!0,Te&&(Nt.CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_RANGE_EQUAL_ZERO=!0),xe&&(Nt.CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY=!0),_e&&(Nt.CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY=!0);let Ce=(R-l)/m,Ht=(E-l)/m,ut=1-K/m;Dt.cylinderShapeUvAngleMinMax=D.fromElements(Ce,Ht,Dt.cylinderShapeUvAngleMinMax),Dt.cylinderShapeUvAngleRangeZeroMid=(Ht+.5*ut)%1;let hi=m/K,ji=-(R-l)/K;Dt.cylinderUvToShapeUvAngle=D.fromElements(hi,ji,Dt.cylinderUvToShapeUvAngle)}return this.shaderMaximumIntersectionsLength=pe,!0};Dr.prototype.computeOrientedBoundingBoxForTile=function(e,t,n,i,o){let r=this._minimumRadius,s=this._maximumRadius,a=this._minimumHeight,c=this._maximumHeight,l=this._minimumAngle,u=this._maximumAngle,m=1/Math.pow(2,e),p=W.lerp(r,s,t*m),y=W.lerp(r,s,(t+1)*m),f=W.lerp(a,c,n*m),x=W.lerp(a,c,(n+1)*m),_=W.lerp(l,u,i*m),C=W.lerp(l,u,(i+1)*m);return J4(p,y,f,x,_,C,this.shapeTransform,o)};var sft=new Wn,aft=new h,cft=new h,lft=new h;Dr.prototype.computeApproximateStepSize=function(e){let t=this.shapeTransform,n=this._minimumRadius,i=this._maximumRadius,o=this._minimumHeight,r=this._maximumHeight,s=this._minimumAngle,a=this._maximumAngle,c=1-1/e.x,l=1-1/e.y,u=1-1/e.z,m=W.lerp(n,i,c),p=W.lerp(o,r,l),y=W.lerp(s,a,u),C=J4(m,i,p,r,y,a,t,sft),V=$.getScale(C.halfAxes,aft),L=A.getScale(t,cft),Z=h.divideComponents(V,L,lft);return h.minimumComponent(Z)};Dr.DefaultMinBounds=Object.freeze(new h(0,-1,-W.PI));Dr.DefaultMaxBounds=Object.freeze(new h(1,1,+W.PI));var dft=5,uft=new Array(dft),mft=new h,hft=new $,fft=new A,pft=new A,bft=new A,z4=new A,yft=new h,gft=new h,xft=new h,Age=new Array(8);for(let e=0;e<8;e++)Age[e]=new h;function wge(e,t,n){return Math.abs(se.dot(e,t))<n}function _ft(e){let t=A.getColumn(e,0,yft),n=A.getColumn(e,1,gft),i=A.getColumn(e,2,xft),o=W.EPSILON4;return wge(t,n,o)&&wge(n,i,o)}function Tft(e,t){let n=Age;h.fromElements(-.5,-.5,-.5,n[0]),h.fromElements(-.5,-.5,.5,n[1]),h.fromElements(-.5,.5,-.5,n[2]),h.fromElements(-.5,.5,.5,n[3]),h.fromElements(.5,-.5,-.5,n[4]),h.fromElements(.5,-.5,.5,n[5]),h.fromElements(.5,.5,-.5,n[6]),h.fromElements(.5,.5,.5,n[7]);for(let i=0;i<8;++i)A.multiplyByPoint(e,n[i],n[i]);return Wn.fromPoints(n,t)}function J4(e,t,n,i,o,r,s,a){let c=Dr.DefaultMinBounds,l=Dr.DefaultMaxBounds,u=c.x,m=l.x,p=c.y,y=l.y,f=c.z,x=l.z;if(e===u&&t===m&&n===p&&i===y&&o===f&&r===x)return a.center=A.getTranslation(s,a.center),a.halfAxes=A.getMatrix3(s,a.halfAxes),a;r<o&&(r+=W.TWO_PI);let C=r-o,V=o+C*.5,L=uft,Z=0;L[Z++]=o,L[Z++]=r,L[Z++]=V,C>W.PI&&(L[Z++]=V-W.PI_OVER_TWO,L[Z++]=V+W.PI_OVER_TWO);let G=1,X=1,P=-1,v=-1;for(let ee=0;ee<Z;++ee){let K=L[ee]-V,j=Math.cos(K),q=Math.sin(K),be=j*e,Te=q*e,ae=j*t,xe=q*t;G=Math.min(G,be),X=Math.min(X,Te),G=Math.min(G,ae),X=Math.min(X,xe),P=Math.max(P,be),v=Math.max(v,Te),P=Math.max(P,ae),v=Math.max(v,xe)}let F=P-G,M=v-X,b=i-n,R=(G+P)*.5,E=(X+v)*.5,I=(n+i)*.5,w=h.fromElements(R,E,I,mft),N=$.fromRotationZ(V,hft),B=h.fromElements(F,M,b,Fge),k=A.fromScale(B,bft),O=A.fromRotation(N,pft),U=A.fromTranslation(w,fft),J=A.multiplyTransformation(O,A.multiplyTransformation(U,k,z4),z4),z=A.multiplyTransformation(s,J,z4);return _ft(z)?Wn.fromTransformation(z,a):Tft(z,a)}var Mf=Dr;var n5i=T(S(),1);var jNi=T(S(),1);function Nl(){this.orientedBoundingBox=new Wn,this.boundingSphere=new ce,this.boundTransform=new A,this.shapeTransform=new A,this._rectangle=new de,this._minimumHeight=Nl.DefaultMinBounds.z,this._maximumHeight=Nl.DefaultMaxBounds.z,this._ellipsoid=new re,this._translation=new h,this._rotation=new $,this.shaderUniforms={ellipsoidRadiiUv:new h,ellipsoidInverseRadiiSquaredUv:new h,ellipsoidRenderLongitudeMinMax:new D,ellipsoidShapeUvLongitudeMinMaxMid:new h,ellipsoidUvToShapeUvLongitude:new D,ellipsoidUvToShapeUvLatitude:new D,ellipsoidRenderLatitudeCosSqrHalfMinMax:new D,ellipsoidInverseHeightDifferenceUv:0,ellipseInnerRadiiUv:new D,ellipsoidInverseInnerScaleUv:0,ellipsoidInverseOuterScaleUv:0},this.shaderDefines={ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY:void 0,ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE:void 0,ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO:void 0,ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_RANGE_EQUAL_ZERO:void 0,ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE:void 0,ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE_RANGE_EQUAL_ZERO:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_MAX:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_MIN:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_FLAT:void 0,ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_MIN:void 0,ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_FLAT:void 0,ELLIPSOID_IS_SPHERE:void 0,ELLIPSOID_INTERSECTION_INDEX_LONGITUDE:void 0,ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX:void 0,ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN:void 0,ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX:void 0,ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN:void 0},this.shaderMaximumIntersectionsLength=0}var Sft=new h,Cft=new $,Mge=new h,Nge=new h,Uge=new h,kge=new h,Vft=new de;Nl.prototype.update=function(e,t,n,i,o){i=g(i,Nl.DefaultMinBounds),o=g(o,Nl.DefaultMaxBounds);let r=Nl.DefaultMinBounds.x,s=Nl.DefaultMaxBounds.x,a=s-r,c=.5*a,l=Nl.DefaultMinBounds.y,u=Nl.DefaultMaxBounds.y,m=u-l,p=W.EPSILON10,y=W.EPSILON3,f=W.EPSILON10,x=W.EPSILON10,_=W.EPSILON3,C=W.clamp(t.x,r,s),V=W.clamp(n.x,r,s),L=W.clamp(i.x,r,s),Z=W.clamp(o.x,r,s),G=Math.max(C,L),X=Math.min(V,Z),P=W.clamp(t.y,l,u),v=W.clamp(n.y,l,u),F=W.clamp(i.y,l,u),M=W.clamp(o.y,l,u),b=Math.max(P,F),R=Math.min(v,M),E=A.getScale(e,Sft),I=E.x===E.y&&E.y===E.z,w=h.minimumComponent(E),N=Math.max(t.z,-w),B=Math.max(n.z,-w),k=Math.max(i.z,-w),O=Math.max(o.z,-w),U=Math.max(N,k),J=Math.min(B,O),z=h.add(E,h.fromElements(N,N,N,Nge),Nge),ee=h.add(E,h.fromElements(B,B,B,Mge),Mge),K=h.maximumComponent(ee),j=h.add(E,h.fromElements(U,U,U,kge),kge),q=h.add(E,h.fromElements(J,J,J,Uge),Uge);if(b>R||b===u||R===l||U>J||W.equalsEpsilon(q,h.ZERO,void 0,p))return!1;this._rectangle=de.fromRadians(C,P,V,v),this._translation=A.getTranslation(e,this._translation),this._rotation=A.getRotation(e,this._rotation),this._ellipsoid=re.fromCartesian3(E,this._ellipsoid),this._minimumHeight=N,this._maximumHeight=B;let be=de.fromRadians(G,b,X,R,Vft);this.orientedBoundingBox=Dge(be,U,J,this._ellipsoid,this._translation,this._rotation,this.orientedBoundingBox),this.shapeTransform=A.fromRotationTranslation($.setScale(this._rotation,ee,Cft),this._translation,this.shapeTransform),this.boundTransform=A.fromRotationTranslation(this.orientedBoundingBox.halfAxes,this.orientedBoundingBox.center,this.boundTransform),this.boundingSphere=ce.fromOrientedBoundingBox(this.orientedBoundingBox,this.boundingSphere);let Te=X<G,ae=X-G+Te*a,xe=ae<=f,_e=ae>c+f&&ae<a-f,Ve=ae>=c-f&&ae<=c+f,Ie=ae>f&&ae<c-f,Me=xe||_e||Ve||Ie,ve=V<C,ke=V-C+ve*a,ct=ke<=f,yt=ke>c+f&&ke<a-f,ot=ke>=c-f&&ke<=c+f,ln=ke>f&&ke<c-f,vn=ct||yt||ot||ln,Dt=R<-_,Nt=R>=-_&&R<=+_,pe=R>+_&&R<u-x,Ce=Dt||Nt||pe,Ht=b>l+x&&b<-_,ut=b>=-_&&b<=+_,hi=b>+_,ji=Ht||ut||hi,pc=Ce||ji,bs=v-P,ys=v<-_,$r=v>=-_&&v<=+_,we=v>+_&&v<u-x,je=ys||$r||we,qe=P>l+x&&P<-_,Qe=P>=-_&&P<=+_,pt=P>+_,Vn=je||(qe||Qe||pt),di=!h.equals(j,h.ZERO),bo=!h.equals(q,h.ZERO),es=di||bo,ts=J-U,Mo=!h.equals(z,h.ZERO),Ki=!h.equals(ee,h.ZERO),ns=Mo||Ki,zn=this.shaderUniforms,wn=this.shaderDefines;for(let _i in wn)wn.hasOwnProperty(_i)&&(wn[_i]=void 0);zn.ellipsoidRadiiUv=h.divideByScalar(ee,K,zn.ellipsoidRadiiUv),zn.ellipsoidInverseRadiiSquaredUv=h.divideComponents(h.ONE,h.multiplyComponents(zn.ellipsoidRadiiUv,zn.ellipsoidRadiiUv,zn.ellipsoidInverseRadiiSquaredUv),zn.ellipsoidInverseRadiiSquaredUv);let mn=0;if(wn.ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX=mn,mn+=1,es&&(ts===0&&(wn.ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_FLAT=!0),di&&(wn.ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_MIN=!0,wn.ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN=mn,mn+=1,zn.ellipsoidInverseInnerScaleUv=K/(K-(B-U))),bo&&(wn.ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_MAX=!0,zn.ellipsoidInverseOuterScaleUv=K/(K-(B-J)))),ns){if(Mo){wn.ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_MIN=!0;let _i=(B-N)/K;zn.ellipsoidInverseHeightDifferenceUv=1/_i,zn.ellipseInnerRadiiUv=D.fromElements(zn.ellipsoidRadiiUv.x*(1-_i),zn.ellipsoidRadiiUv.z*(1-_i),zn.ellipseInnerRadiiUv)}N===B&&(wn.ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_FLAT=!0)}if(Me&&(wn.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE=!0,wn.ELLIPSOID_INTERSECTION_INDEX_LONGITUDE=mn,_e?(wn.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF=!0,mn+=1):Ie?(wn.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF=!0,mn+=2):Ve?(wn.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_HALF=!0,mn+=1):xe&&(wn.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO=!0,mn+=2),zn.ellipsoidRenderLongitudeMinMax=D.fromElements(G,X,zn.ellipsoidRenderLongitudeMinMax)),vn){wn.ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE=!0,V<C&&(wn.ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED=!0);let ui=a/ke,As=-(C-r)/ke;zn.ellipsoidUvToShapeUvLongitude=D.fromElements(ui,As,zn.ellipsoidUvToShapeUvLongitude)}if(Me){let _i=W.equalsEpsilon(G,r,void 0,y),ui=W.equalsEpsilon(X,s,void 0,y);_i&&(wn.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY=!0),ui&&(wn.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY=!0);let As=(C-r)/a,fi=(V-r)/a,Pr=(X-r)/a,Sh=1-ae/a,cr=(Pr+.5*Sh)%1;zn.ellipsoidShapeUvLongitudeMinMaxMid=h.fromElements(As,fi,cr,zn.ellipsoidShapeUvLongitudeMinMaxMid)}if(pc){wn.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE=!0,ji&&(wn.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN=!0,wn.ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN=mn,Ht?(wn.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF=!0,mn+=1):ut?(wn.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF=!0,mn+=1):hi&&(wn.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF=!0,mn+=2)),Ce&&(wn.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX=!0,wn.ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX=mn,Dt?(wn.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF=!0,mn+=2):Nt?(wn.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF=!0,mn+=1):pe&&(wn.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF=!0,mn+=1)),b===R&&(wn.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_RANGE_EQUAL_ZERO=!0);let _i=Math.pow(Math.cos(W.PI_OVER_TWO-Math.abs(b)),2),ui=Math.pow(Math.cos(W.PI_OVER_TWO-Math.abs(R)),2);zn.ellipsoidRenderLatitudeCosSqrHalfMinMax=D.fromElements(_i,ui,zn.ellipsoidRenderLatitudeCosSqrHalfMinMax)}if(Vn){wn.ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE=!0,P===v&&(wn.ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE_RANGE_EQUAL_ZERO=!0);let _i=m/bs,ui=(l-P)/bs;zn.ellipsoidUvToShapeUvLatitude=D.fromElements(_i,ui,zn.ellipsoidUvToShapeUvLatitude)}return I&&(wn.ELLIPSOID_IS_SPHERE=!0),this.shaderMaximumIntersectionsLength=mn,!0};var Lft=new de;Nl.prototype.computeOrientedBoundingBoxForTile=function(e,t,n,i,o){let r=1/Math.pow(2,e),s=t*r,a=(t+1)*r,c=n*r,l=(n+1)*r,u=i*r,m=(i+1)*r,p=de.subsection(this._rectangle,s,c,a,l,Lft),y=W.lerp(this._minimumHeight,this._maximumHeight,u),f=W.lerp(this._minimumHeight,this._maximumHeight,m);return Dge(p,y,f,this._ellipsoid,this._translation,this._rotation,o)};Nl.prototype.computeApproximateStepSize=function(e){let n=this._ellipsoid.maximumRadius,i=this._minimumHeight,o=this._maximumHeight;return .5*((o-i)/(n+o))/e.z};function Dge(e,t,n,i,o,r,s){return s=Wn.fromRectangle(e,t,n,i,s),s.center=h.add(s.center,o,s.center),s.halfAxes=$.multiply(s.halfAxes,r,s.halfAxes),s}Nl.DefaultMinBounds=Object.freeze(new h(-W.PI,-W.PI_OVER_TWO,-Number.MAX_VALUE));Nl.DefaultMaxBounds=Object.freeze(new h(+W.PI,+W.PI_OVER_TWO,+Number.MAX_VALUE));var VT=Nl;var Fd={BOX:"BOX",ELLIPSOID:"ELLIPSOID",CYLINDER:"CYLINDER"};Fd.getMinBounds=function(e){switch(e){case Fd.BOX:return Af.DefaultMinBounds;case Fd.ELLIPSOID:return VT.DefaultMinBounds;case Fd.CYLINDER:return Mf.DefaultMinBounds}};Fd.getMaxBounds=function(e){switch(e){case Fd.BOX:return Af.DefaultMaxBounds;case Fd.ELLIPSOID:return VT.DefaultMaxBounds;case Fd.CYLINDER:return Mf.DefaultMaxBounds}};Fd.getShapeConstructor=function(e){switch(e){case Fd.BOX:return Af;case Fd.ELLIPSOID:return VT;case Fd.CYLINDER:return Mf}};var Oi=Object.freeze(Fd);function eD(e){e=g(e,g.EMPTY_OBJECT),this.shapeTransform=void 0,this.globalTransform=void 0,this.shape=void 0,this.minBounds=void 0,this.maxBounds=void 0,this.dimensions=void 0,this.paddingBefore=void 0,this.paddingAfter=void 0,this.names=void 0,this.types=void 0,this.componentTypes=void 0,this.minimumValues=void 0,this.maximumValues=void 0,this.maximumTileCount=void 0,this._implicitTileset=void 0,this._subtreeCache=new gF}eD.fromUrl=async function(e){let t=Ee.createIfNeeded(e),n=await t.fetchJson();Zft(n);let i=Wft(n,t);await i.load();let o=n.root,r=o.content.extensions["3DTILES_content_voxels"],s=r.class,a=ri(n,"3DTILES_metadata")?n.extensions["3DTILES_metadata"]:n,c=i.schema,l=new s_({metadataJson:a,schema:c}),u=new eD;Pft(u,l,s);let m=new c_(t,o,c),{shape:p,minBounds:y,maxBounds:f,shapeTransform:x,globalTransform:_}=Gft(o);u.shape=p,u.minBounds=y,u.maxBounds=f,u.dimensions=h.unpack(r.dimensions),u.shapeTransform=x,u.globalTransform=_,u.maximumTileCount=Rft(l);let C,V;return d(r.padding)&&(C=h.unpack(r.padding.before),V=h.unpack(r.padding.after)),u.paddingBefore=C,u.paddingAfter=V,u._implicitTileset=m,Bi.unload(i),u};function Rft(e){if(d(e.tileset))return e.tileset.getPropertyBySemantic(Gx.TILESET_TILE_COUNT)}function Zft(e){let t=e.root;if(!d(t.content))throw new me("Root must have content");if(!ri(t.content,"3DTILES_content_voxels"))throw new me("Root tile content must have 3DTILES_content_voxels extension");if(!ri(t,"3DTILES_implicit_tiling")&&!d(t.implicitTiling))throw new me("Root tile must have implicit tiling");if(!d(e.schema)&&!d(e.schemaUri)&&!ri(e,"3DTILES_metadata"))throw new me("Tileset must have a metadata schema")}function Gft(e){let t=e.boundingVolume,n;if(d(e.transform)?n=A.unpack(e.transform):n=A.clone(A.IDENTITY),d(t.box))return Xft(t.box,n);if(d(t.region))return Eft(t.region);if(ri(t,"3DTILES_bounding_volume_cylinder"))return Ift(t.extensions["3DTILES_bounding_volume_cylinder"].cylinder,n);throw new me("Only box, region and 3DTILES_bounding_volume_cylinder are supported in Cesium3DTilesVoxelProvider")}function Eft(e){let t=e[0],n=e[1],i=e[2],o=e[3],r=e[4],s=e[5],a=A.fromScale(re.WGS84.radii),c=t,l=i,u=n,m=o,p=r,y=s,f=new h(c,u,p),x=new h(l,m,y);return{shape:Oi.ELLIPSOID,minBounds:f,maxBounds:x,shapeTransform:a,globalTransform:A.clone(A.IDENTITY)}}function Xft(e,t){let n=Wn.unpack(e),i=A.fromRotationTranslation(n.halfAxes,n.center);return{shape:Oi.BOX,minBounds:h.clone(Af.DefaultMinBounds),maxBounds:h.clone(Af.DefaultMaxBounds),shapeTransform:i,globalTransform:t}}function Ift(e,t){let n=Wn.unpack(e),i=A.fromRotationTranslation(n.halfAxes,n.center);return{shape:Oi.CYLINDER,minBounds:h.clone(Mf.DefaultMinBounds),maxBounds:h.clone(Mf.DefaultMaxBounds),shapeTransform:i,globalTransform:t}}function Wft(e,t){let{schemaUri:n,schema:i}=e;return d(n)?Bi.getSchemaLoader({resource:t.getDerivedResource({url:n})}):Bi.getSchemaLoader({schema:i})}function Pft(e,t,n){let{schema:i,statistics:o}=t,r=o?.classes[n],s=i.classes[n].properties,a=Object.entries(s).map(([m,p])=>{let{type:y,componentType:f}=p,x=r?.properties[m].min,_=r?.properties[m].max,C=Ot.getComponentCount(y),V=Bge(x,C),L=Bge(_,C);return{id:m,type:y,componentType:f,minValue:V,maxValue:L}});e.names=a.map(m=>m.id),e.types=a.map(m=>m.type),e.componentTypes=a.map(m=>m.componentType);let c=a.map(m=>m.minValue),l=a.map(m=>m.maxValue),u=c.some(d);e.minimumValues=u?c:void 0,e.maximumValues=u?l:void 0}function Bge(e,t){if(!d(e))return;let n=Array.isArray(e)?e:[e];return Array.from({length:t},(i,o)=>n[o])}async function vft(e,t){let n=e.contentUriTemplates[0].getDerivedResource({templateValues:t.getTemplateValues()}),i=e.baseResource.getDerivedResource({url:n.url}),o=await i.fetchArrayBuffer(),r=tf(o);return await xF.fromJson(i,r.jsonPayload,r.binaryPayload,e.metadataSchema)}async function wft(e,t){let n=e._implicitTileset,i=e._subtreeCache,o=i.find(t);if(d(o))return o;let r=n.subtreeUriTemplate.getDerivedResource({templateValues:t.getTemplateValues()}),s=n.baseResource.getDerivedResource({url:r.url}),a=await s.fetchArrayBuffer();if(o=i.find(t),d(o))return o;let c=tf(a);return o=await Zx.fromSubtreeJson(s,c.jsonPayload,c.binaryPayload,n,t),i.addSubtree(o),o}eD.prototype.requestData=function(e){e=g(e,g.EMPTY_OBJECT);let t=g(e.tileLevel,0),n=g(e.tileX,0),i=g(e.tileY,0),o=g(e.tileZ,0);if(g(e.keyframe,0)!==0)return;let s=this._implicitTileset,a=this.names,c=new l_({subdivisionScheme:s.subdivisionScheme,subtreeLevels:s.subtreeLevels,level:t,x:n,y:i,z:o}),l=c.isSubtreeRoot()&&c.level>0,u=l?c.getParentSubtreeCoordinates():c.getSubtreeCoordinates();return wft(this,u).then(function(p){return(l?p.childSubtreeIsAvailableAtCoordinates(c):p.tileIsAvailableAtCoordinates(c))?vft(s,c):Promise.reject("Tile is not available")}).then(function(p){return a.map(function(y){return p.metadataTable.getPropertyTypedArray(y)})})};var Q4=eD;var I5i=T(S(),1);function j4(e){e=g(e,1),this._radius=g(e,1)}Object.defineProperties(j4.prototype,{radius:{get:function(){return this._radius},set:function(e){this._radius=e}}});j4.prototype.emit=function(e){let t=W.randomBetween(0,W.TWO_PI),n=W.randomBetween(0,this._radius),i=n*Math.cos(t),o=n*Math.sin(t),r=0;e.position=h.fromElements(i,o,r,e.position),e.velocity=h.clone(h.UNIT_Z,e.velocity)};var _F=j4;var TUi=T(S(),1);var P5i=T(S(),1),q4={CUMULUS:0};q4.validate=function(e){return e===q4.CUMULUS};var ZV=Object.freeze(q4);var U5i=T(S(),1);function gh(e,t){if(e=g(e,g.EMPTY_OBJECT),this._show=g(e.show,!0),this._position=h.clone(g(e.position,h.ZERO)),!d(e.scale)&&d(e.maximumSize))this._maximumSize=h.clone(e.maximumSize),this._scale=new D(this._maximumSize.x,this._maximumSize.y);else{this._scale=D.clone(g(e.scale,new D(20,12)));let n=new h(this._scale.x,this._scale.y,Math.min(this._scale.x,this._scale.y)/1.5);this._maximumSize=h.clone(g(e.maximumSize,n))}this._slice=g(e.slice,-1),this._color=Y.clone(g(e.color,Y.WHITE)),this._brightness=g(e.brightness,1),this._cloudCollection=t,this._index=-1}var Fft=gh.SHOW_INDEX=0,Aft=gh.POSITION_INDEX=1,Mft=gh.SCALE_INDEX=2,Nft=gh.MAXIMUM_SIZE_INDEX=3,Uft=gh.SLICE_INDEX=4,kft=gh.BRIGHTNESS_INDEX=5,Dft=gh.COLOR_INDEX=6;gh.NUMBER_OF_PROPERTIES=7;function LT(e,t){let n=e._cloudCollection;d(n)&&(n._updateCloud(e,t),e._dirty=!0)}Object.defineProperties(gh.prototype,{show:{get:function(){return this._show},set:function(e){this._show!==e&&(this._show=e,LT(this,Fft))}},position:{get:function(){return this._position},set:function(e){let t=this._position;h.equals(t,e)||(h.clone(e,t),LT(this,Aft))}},scale:{get:function(){return this._scale},set:function(e){let t=this._scale;D.equals(t,e)||(D.clone(e,t),LT(this,Mft))}},maximumSize:{get:function(){return this._maximumSize},set:function(e){let t=this._maximumSize;h.equals(t,e)||(h.clone(e,t),LT(this,Nft))}},color:{get:function(){return this._color},set:function(e){let t=this._color;Y.equals(t,e)||(Y.clone(e,t),LT(this,Dft))}},slice:{get:function(){return this._slice},set:function(e){this._slice!==e&&(this._slice=e,LT(this,Uft))}},brightness:{get:function(){return this._brightness},set:function(e){this._brightness!==e&&(this._brightness=e,LT(this,kft))}}});gh.prototype._destroy=function(){this._cloudCollection=void 0};var Ad=gh;var Md,tD=new h,Bft={positionHighAndScaleX:0,positionLowAndScaleY:1,packedAttribute0:2,packedAttribute1:3,color:4},Yft={direction:0,positionHighAndScaleX:1,positionLowAndScaleY:2,packedAttribute0:3,packedAttribute1:4,color:5},Oft=Ad.SHOW_INDEX,Kft=Ad.POSITION_INDEX,Hft=Ad.SCALE_INDEX,zft=Ad.MAXIMUM_SIZE_INDEX,Jft=Ad.SLICE_INDEX,Qft=Ad.BRIGHTNESS_INDEX,jft=Ad.NUMBER_OF_PROPERTIES,qft=Ad.COLOR_INDEX;function xh(e){e=g(e,g.EMPTY_OBJECT),this._clouds=[],this._cloudsToUpdate=[],this._cloudsToUpdateIndex=0,this._cloudsRemoved=!1,this._createVertexArray=!1,this._propertiesChanged=new Uint32Array(jft),this._noiseTexture=void 0,this._textureSliceWidth=128,this._noiseTextureRows=4,this.noiseDetail=g(e.noiseDetail,16),this.noiseOffset=h.clone(g(e.noiseOffset,h.ZERO)),this._loading=!1,this._ready=!1;let t=this;this._uniforms={u_noiseTexture:function(){return t._noiseTexture},u_noiseTextureDimensions:Yge(t),u_noiseDetail:function(){return t.noiseDetail}},this._vaNoise=void 0,this._spNoise=void 0,this._spCreated=!1,this._sp=void 0,this._rs=void 0,this.show=g(e.show,!0),this._colorCommands=[],this.debugBillboards=g(e.debugBillboards,!1),this._compiledDebugBillboards=!1,this.debugEllipsoids=g(e.debugEllipsoids,!1),this._compiledDebugEllipsoids=!1}function Yge(e){return function(){return tD.x=e._textureSliceWidth,tD.y=e._noiseTextureRows,tD.z=1/e._noiseTextureRows,tD}}Object.defineProperties(xh.prototype,{length:{get:function(){return ej(this),this._clouds.length}}});function Oge(e){let t=e.length;for(let n=0;n<t;++n)e[n]&&e[n]._destroy()}xh.prototype.add=function(e){e=g(e,g.EMPTY_OBJECT);let t=g(e.cloudType,ZV.CUMULUS),n;return t===ZV.CUMULUS&&(n=new Ad(e,this),n._index=this._clouds.length,this._clouds.push(n),this._createVertexArray=!0),n};xh.prototype.remove=function(e){return this.contains(e)?(this._clouds[e._index]=void 0,this._cloudsRemoved=!0,this._createVertexArray=!0,e._destroy(),!0):!1};xh.prototype.removeAll=function(){Oge(this._clouds),this._clouds=[],this._cloudsToUpdate=[],this._cloudsToUpdateIndex=0,this._cloudsRemoved=!1,this._createVertexArray=!0};function ej(e){if(e._cloudsRemoved){e._cloudsRemoved=!1;let t=[],n=e._clouds,i=n.length;for(let o=0,r=0;o<i;++o){let s=n[o];d(s)&&(n._index=r++,t.push(s))}e._clouds=t}}xh.prototype._updateCloud=function(e,t){e._dirty||(this._cloudsToUpdate[this._cloudsToUpdateIndex++]=e),++this._propertiesChanged[t]};xh.prototype.contains=function(e){return d(e)&&e._cloudCollection===this};xh.prototype.get=function(e){return ej(this),this._clouds[e]};var $ft=new Float32Array([-1,-1,1,-1,1,1,-1,1]),ept=new Uint16Array([0,1,2,0,2,3]);function tpt(e){let t=mt.createVertexBuffer({context:e,typedArray:$ft,usage:Ne.STATIC_DRAW}),n=mt.createIndexBuffer({context:e,typedArray:ept,usage:Ne.STATIC_DRAW,indexDatatype:Ue.UNSIGNED_SHORT}),i=[{index:0,vertexBuffer:t,componentsPerAttribute:2,componentDatatype:Q.FLOAT}];return new ti({context:e,attributes:i,indexBuffer:n})}var tj;function npt(e){let n=e.cache.cloudCollection_indexBufferBatched;if(d(n))return n;let i=16384*6-6,o=new Uint16Array(i);for(let r=0,s=0;r<i;r+=6,s+=4)o[r]=s,o[r+1]=s+1,o[r+2]=s+2,o[r+3]=s,o[r+4]=s+2,o[r+5]=s+3;return n=mt.createIndexBuffer({context:e,typedArray:o,usage:Ne.STATIC_DRAW,indexDatatype:Ue.UNSIGNED_SHORT}),n.vertexArrayDestroyable=!1,e.cache.cloudCollection_indexBufferBatched=n,n}function ipt(e){let t=e.cache.cloudCollection_indexBufferInstanced;return d(t)||(t=mt.createIndexBuffer({context:e,typedArray:new Uint16Array([0,1,2,0,2,3]),usage:Ne.STATIC_DRAW,indexDatatype:Ue.UNSIGNED_SHORT}),t.vertexArrayDestroyable=!1,e.cache.cloudCollection_indexBufferInstanced=t),t}function opt(e){let t=e.cache.cloudCollection_vertexBufferInstanced;return d(t)||(t=mt.createVertexBuffer({context:e,typedArray:new Float32Array([0,0,1,0,1,1,0,1]),usage:Ne.STATIC_DRAW}),t.vertexArrayDestroyable=!1,e.cache.cloudCollection_vertexBufferInstanced=t),t}function rpt(e,t,n){let i=[{index:Md.positionHighAndScaleX,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:Ne.STATIC_DRAW},{index:Md.positionLowAndScaleY,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:Ne.STATIC_DRAW},{index:Md.packedAttribute0,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:Ne.STATIC_DRAW},{index:Md.packedAttribute1,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:Ne.STATIC_DRAW},{index:Md.color,componentsPerAttribute:4,componentDatatype:Q.UNSIGNED_BYTE,normalize:!0,usage:Ne.STATIC_DRAW}];n&&i.push({index:Md.direction,componentsPerAttribute:2,componentDatatype:Q.FLOAT,vertexBuffer:opt(e)});let o=n?t:4*t;return new Np(e,i,o,n)}var $4=new On;function Kge(e,t,n,i){let o,r=n[Md.positionHighAndScaleX],s=n[Md.positionLowAndScaleY],a=i.position;On.fromCartesian(a,$4);let c=i.scale,l=$4.high,u=$4.low;e._instanced?(o=i._index,r(o,l.x,l.y,l.z,c.x),s(o,u.x,u.y,u.z,c.y)):(o=i._index*4,r(o+0,l.x,l.y,l.z,c.x),r(o+1,l.x,l.y,l.z,c.x),r(o+2,l.x,l.y,l.z,c.x),r(o+3,l.x,l.y,l.z,c.x),s(o+0,u.x,u.y,u.z,c.y),s(o+1,u.x,u.y,u.z,c.y),s(o+2,u.x,u.y,u.z,c.y),s(o+3,u.x,u.y,u.z,c.y))}function Hge(e,t,n,i){let o,r=n[Md.packedAttribute0],s=i.show,a=i.brightness;e._instanced?(o=i._index,r(o,s,a,0,0)):(o=i._index*4,r(o+0,s,a,0,0),r(o+1,s,a,1,0),r(o+2,s,a,1,1),r(o+3,s,a,0,1))}function zge(e,t,n,i){let o,r=n[Md.packedAttribute1],s=i.maximumSize,a=i.slice;e._instanced?(o=i._index,r(o,s.x,s.y,s.z,a)):(o=i._index*4,r(o+0,s.x,s.y,s.z,a),r(o+1,s.x,s.y,s.z,a),r(o+2,s.x,s.y,s.z,a),r(o+3,s.x,s.y,s.z,a))}function Jge(e,t,n,i){let o,r=n[Md.color],s=i.color,a=Y.floatToByte(s.red),c=Y.floatToByte(s.green),l=Y.floatToByte(s.blue),u=Y.floatToByte(s.alpha);e._instanced?(o=i._index,r(o,a,c,l,u)):(o=i._index*4,r(o+0,a,c,l,u),r(o+1,a,c,l,u),r(o+2,a,c,l,u),r(o+3,a,c,l,u))}function spt(e,t,n,i){Kge(e,t,n,i),Hge(e,t,n,i),zge(e,t,n,i),Jge(e,t,n,i)}function apt(e,t,n,i){let o=e,r=o._textureSliceWidth,s=o._noiseTextureRows,a=t.context;o._vaNoise=tpt(a),o._spNoise=Qt.fromCache({context:a,vertexShaderSource:n,fragmentShaderSource:i,attributeLocations:{position:0}});let c=o.noiseDetail,l=o.noiseOffset;o._noiseTexture=new Wt({context:a,width:r*r/s,height:r*s,pixelDatatype:Je.UNSIGNED_BYTE,pixelFormat:st.RGBA,sampler:new un({wrapS:Gn.REPEAT,wrapT:Gn.REPEAT,minificationFilter:cn.NEAREST,magnificationFilter:Ti.NEAREST})});let u=new qd({vertexArray:o._vaNoise,shaderProgram:o._spNoise,outputTexture:o._noiseTexture,uniformMap:{u_noiseTextureDimensions:Yge(o),u_noiseDetail:function(){return c},u_noiseOffset:function(){return l}},persists:!1,owner:e,postExecute:function(m){o._ready=!0,o._loading=!1}});t.commandList.push(u),o._loading=!0}function cpt(e,t){let n=e,i=t.context;n._createVertexArray=!1,n._vaf=n._vaf&&n._vaf.destroy();let o=e._clouds,r=o.length;if(r>0){n._vaf=rpt(i,r,n._instanced);let s=n._vaf.writers,a;for(a=0;a<r;++a){let c=o[a];spt(e,t,s,c)}n._vaf.commit(tj(i))}}var lpt=[];function dpt(e,t){let n=t.context,i=e,r=i._clouds.length,s=i._cloudsToUpdate,a=i._cloudsToUpdateIndex,c=i._propertiesChanged,l=lpt;l.length=0,(c[Kft]||c[Hft])&&l.push(Kge),(c[Oft]||c[Qft])&&l.push(Hge),(c[zft]||c[Jft])&&l.push(zge),c[qft]&&l.push(Jge);let u=l.length,m=i._vaf.writers,p,y,f;if(a/r>.1){for(p=0;p<a;++p)for(y=s[p],y._dirty=!1,f=0;f<u;++f)l[f](e,t,m,y);i._vaf.commit(tj(n))}else{for(p=0;p<a;++p){for(y=s[p],y._dirty=!1,f=0;f<u;++f)l[f](e,t,m,y);i._instanced?i._vaf.subCommit(y._index,1):i._vaf.subCommit(y._index*4,4)}i._vaf.endSubCommits()}i._cloudsToUpdateIndex=0}function upt(e,t,n,i){let o=t.context,r=e,s=new Ye({defines:[],sources:[n]});r._instanced&&s.defines.push("INSTANCED");let a=new Ye({defines:[],sources:[i]});r.debugBillboards&&a.defines.push("DEBUG_BILLBOARDS"),r.debugEllipsoids&&a.defines.push("DEBUG_ELLIPSOIDS"),r._sp=Qt.replaceCache({context:o,shaderProgram:r._sp,vertexShaderSource:s,fragmentShaderSource:a,attributeLocations:Md}),r._rs=De.fromCache({depthTest:{enabled:!0,func:ne.LESS},depthMask:!1,blending:dn.ALPHA_BLEND}),r._spCreated=!0,r._compiledDebugBillboards=r.debugBillboards,r._compiledDebugEllipsoids=r.debugEllipsoids}function mpt(e,t){let n=e,i=t.passes,o=n._uniforms,r=t.commandList;if(i.render){let s=n._colorCommands,a=n._vaf.va,c=a.length;s.length=c;for(let l=0;l<c;l++){let u=s[l];d(u)||(u=s[l]=new nt),u.pass=Re.TRANSLUCENT,u.owner=e,u.uniformMap=o,u.count=a[l].indicesCount,u.vertexArray=a[l].va,u.shaderProgram=n._sp,u.renderState=n._rs,n._instanced&&(u.count=6,u.instanceCount=n._clouds.length),r.push(u)}}}xh.prototype.update=function(e){if(ej(this),!this.show)return;let t=this.debugBillboards||this.debugEllipsoids;this._ready=t?!0:d(this._noiseTexture),!this._ready&&!this._loading&&!t&&apt(this,e,av,sv),this._instanced=e.context.instancedArrays,Md=this._instanced?Yft:Bft,tj=this._instanced?ipt:npt;let i=this._clouds.length,o=this._cloudsToUpdate,r=this._cloudsToUpdateIndex;this._createVertexArray?cpt(this,e):r>0&&dpt(this,e),r>i*1.5&&(o.length=i),!(!d(this._vaf)||!d(this._vaf.va)||!this._ready&!t)&&((!this._spCreated||this.debugBillboards!==this._compiledDebugBillboards||this.debugEllipsoids!==this._compiledDebugEllipsoids)&&upt(this,e,rv,ov),mpt(this,e))};xh.prototype.isDestroyed=function(){return!1};xh.prototype.destroy=function(){return this._noiseTexture=this._noiseTexture&&this._noiseTexture.destroy(),this._sp=this._sp&&this._sp.destroy(),this._vaf=this._vaf&&this._vaf.destroy(),Oge(this._clouds),ue(this)};var nj=xh;var RUi=T(S(),1);var hpt=W.toRadians(30);function ij(e){this._angle=g(e,hpt)}Object.defineProperties(ij.prototype,{angle:{get:function(){return this._angle},set:function(e){this._angle=e}}});ij.prototype.emit=function(e){let t=Math.tan(this._angle),n=W.randomBetween(0,W.TWO_PI),i=W.randomBetween(0,t),o=i*Math.cos(n),r=i*Math.sin(n),s=1;e.velocity=h.fromElements(o,r,s,e.velocity),h.normalize(e.velocity,e.velocity),e.position=h.clone(h.ZERO,e.position)};var oj=ij;var IUi=T(S(),1);function TF(e){e=g(e,g.EMPTY_OBJECT);let t=e.attributeName,n=e.perInstanceAttribute;d(n)||(n=!1);let i=g(e.glslDatatype,"vec3"),o=`v_${t}`,r;if(t==="normal"||t==="tangent"||t==="bitangent")r=`vec4 getColor() { return vec4((${o} + vec3(1.0)) * 0.5, 1.0); }
  11070. `;else switch(t==="st"&&(i="vec2"),i){case"float":r=`vec4 getColor() { return vec4(vec3(${o}), 1.0); }
  11071. `;break;case"vec2":r=`vec4 getColor() { return vec4(${o}, 0.0, 1.0); }
  11072. `;break;case"vec3":r=`vec4 getColor() { return vec4(${o}, 1.0); }
  11073. `;break;case"vec4":r=`vec4 getColor() { return ${o}; }
  11074. `;break}let s=`in vec3 position3DHigh;
  11075. in vec3 position3DLow;
  11076. in float batchId;
  11077. ${n?"":`in ${i} ${t};
  11078. `}out ${i} ${o};
  11079. void main()
  11080. {
  11081. vec4 p = czm_translateRelativeToEye(position3DHigh, position3DLow);
  11082. ${n?`${o} = czm_batchTable_${t}(batchId);
  11083. `:`${o} = ${t};
  11084. `}gl_Position = czm_modelViewProjectionRelativeToEye * p;
  11085. }`,a=`in ${i} ${o};
  11086. ${r}
  11087. void main()
  11088. {
  11089. out_FragColor = getColor();
  11090. }`;this.material=void 0,this.translucent=g(e.translucent,!1),this._vertexShaderSource=g(e.vertexShaderSource,s),this._fragmentShaderSource=g(e.fragmentShaderSource,a),this._renderState=to.getDefaultRenderState(!1,!1,e.renderState),this._closed=g(e.closed,!1),this._attributeName=t,this._glslDatatype=i}Object.defineProperties(TF.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},attributeName:{get:function(){return this._attributeName}},glslDatatype:{get:function(){return this._glslDatatype}}});TF.prototype.getFragmentShaderSource=to.prototype.getFragmentShaderSource;TF.prototype.isTranslucent=to.prototype.isTranslucent;TF.prototype.getRenderState=to.prototype.getRenderState;var rj=TF;var YUi=T(S(),1);function nD(e){e=g(e,g.EMPTY_OBJECT),this.length=g(e.length,1e7),this._length=void 0,this.width=g(e.width,2),this._width=void 0,this.show=g(e.show,!0),this.modelMatrix=A.clone(g(e.modelMatrix,A.IDENTITY)),this._modelMatrix=new A,this.id=e.id,this._id=void 0,this._primitive=void 0}nD.prototype.update=function(e){if(this.show){if(!d(this._primitive)||!A.equals(this._modelMatrix,this.modelMatrix)||this._length!==this.length||this._width!==this.width||this._id!==this.id){this._modelMatrix=A.clone(this.modelMatrix,this._modelMatrix),this._length=this.length,this._width=this.width,this._id=this.id,d(this._primitive)&&this._primitive.destroy(),this.modelMatrix[12]===0&&this.modelMatrix[13]===0&&this.modelMatrix[14]===0&&(this.modelMatrix[14]=.01);let t=new _t({geometry:new S0({positions:[h.ZERO,h.UNIT_X],width:this.width,vertexFormat:Fr.VERTEX_FORMAT,colors:[Y.RED,Y.RED],arcType:Jt.NONE}),modelMatrix:A.multiplyByUniformScale(this.modelMatrix,this.length,new A),id:this.id,pickPrimitive:this}),n=new _t({geometry:new S0({positions:[h.ZERO,h.UNIT_Y],width:this.width,vertexFormat:Fr.VERTEX_FORMAT,colors:[Y.GREEN,Y.GREEN],arcType:Jt.NONE}),modelMatrix:A.multiplyByUniformScale(this.modelMatrix,this.length,new A),id:this.id,pickPrimitive:this}),i=new _t({geometry:new S0({positions:[h.ZERO,h.UNIT_Z],width:this.width,vertexFormat:Fr.VERTEX_FORMAT,colors:[Y.BLUE,Y.BLUE],arcType:Jt.NONE}),modelMatrix:A.multiplyByUniformScale(this.modelMatrix,this.length,new A),id:this.id,pickPrimitive:this});this._primitive=new Zn({geometryInstances:[t,n,i],appearance:new Fr,asynchronous:!1})}this._primitive.update(e)}};nD.prototype.isDestroyed=function(){return!1};nD.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),ue(this)};var SF=nD;var JUi=T(S(),1);function fpt(e){this.direction=h.clone(e.direction),this.color=Y.clone(g(e.color,Y.WHITE)),this.intensity=g(e.intensity,1)}var sj=fpt;var cki=T(S(),1);var jUi=T(S(),1),CF=`in vec3 v_positionMC;
  11091. in vec3 v_positionEC;
  11092. in vec2 v_st;
  11093. void main()
  11094. {
  11095. czm_materialInput materialInput;
  11096. vec3 normalEC = normalize(czm_normal3D * czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), vec3(1.0)));
  11097. #ifdef FACE_FORWARD
  11098. normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC);
  11099. #endif
  11100. materialInput.s = v_st.s;
  11101. materialInput.st = v_st;
  11102. materialInput.str = vec3(v_st, 0.0);
  11103. // Convert tangent space material normal to eye space
  11104. materialInput.normalEC = normalEC;
  11105. materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(v_positionMC, materialInput.normalEC);
  11106. // Convert view vector to world space
  11107. vec3 positionToEyeEC = -v_positionEC;
  11108. materialInput.positionToEyeEC = positionToEyeEC;
  11109. czm_material material = czm_getMaterial(materialInput);
  11110. #ifdef FLAT
  11111. out_FragColor = vec4(material.diffuse + material.emission, material.alpha);
  11112. #else
  11113. out_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC);
  11114. #endif
  11115. }
  11116. `;var $Ui=T(S(),1),VF=`in vec3 position3DHigh;
  11117. in vec3 position3DLow;
  11118. in vec2 st;
  11119. in float batchId;
  11120. out vec3 v_positionMC;
  11121. out vec3 v_positionEC;
  11122. out vec2 v_st;
  11123. void main()
  11124. {
  11125. vec4 p = czm_computePosition();
  11126. v_positionMC = position3DHigh + position3DLow; // position in model coordinates
  11127. v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates
  11128. v_st = st;
  11129. gl_Position = czm_modelViewProjectionRelativeToEye * p;
  11130. }
  11131. `;function RT(e){e=g(e,g.EMPTY_OBJECT);let t=g(e.translucent,!0),n=g(e.aboveGround,!1);this.material=d(e.material)?e.material:ki.fromType(ki.ColorType),this.translucent=g(e.translucent,!0),this._vertexShaderSource=g(e.vertexShaderSource,VF),this._fragmentShaderSource=g(e.fragmentShaderSource,CF),this._renderState=to.getDefaultRenderState(t,!n,e.renderState),this._closed=!1,this._flat=g(e.flat,!1),this._faceForward=g(e.faceForward,n),this._aboveGround=n}Object.defineProperties(RT.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},vertexFormat:{get:function(){return RT.VERTEX_FORMAT}},flat:{get:function(){return this._flat}},faceForward:{get:function(){return this._faceForward}},aboveGround:{get:function(){return this._aboveGround}}});RT.VERTEX_FORMAT=We.POSITION_AND_ST;RT.prototype.getFragmentShaderSource=to.prototype.getFragmentShaderSource;RT.prototype.isTranslucent=to.prototype.isTranslucent;RT.prototype.getRenderState=to.prototype.getRenderState;var aj=RT;var bki=T(S(),1);function Ul(e){this._scene=e.scene,this.samplingWindow=g(e.samplingWindow,Ul.defaultSettings.samplingWindow),this.quietPeriod=g(e.quietPeriod,Ul.defaultSettings.quietPeriod),this.warmupPeriod=g(e.warmupPeriod,Ul.defaultSettings.warmupPeriod),this.minimumFrameRateDuringWarmup=g(e.minimumFrameRateDuringWarmup,Ul.defaultSettings.minimumFrameRateDuringWarmup),this.minimumFrameRateAfterWarmup=g(e.minimumFrameRateAfterWarmup,Ul.defaultSettings.minimumFrameRateAfterWarmup),this._lowFrameRate=new ye,this._nominalFrameRate=new ye,this._frameTimes=[],this._needsQuietPeriod=!0,this._quietPeriodEndTime=0,this._warmupPeriodEndTime=0,this._frameRateIsLow=!1,this._lastFramesPerSecond=void 0,this._pauseCount=0;let t=this;this._preUpdateRemoveListener=this._scene.preUpdate.addEventListener(function(o,r){ppt(t,r)}),this._hiddenPropertyName=document.hidden!==void 0?"hidden":document.mozHidden!==void 0?"mozHidden":document.msHidden!==void 0?"msHidden":document.webkitHidden!==void 0?"webkitHidden":void 0;let n=document.hidden!==void 0?"visibilitychange":document.mozHidden!==void 0?"mozvisibilitychange":document.msHidden!==void 0?"msvisibilitychange":document.webkitHidden!==void 0?"webkitvisibilitychange":void 0;function i(){bpt(t)}this._visibilityChangeRemoveListener=void 0,d(n)&&(document.addEventListener(n,i,!1),this._visibilityChangeRemoveListener=function(){document.removeEventListener(n,i,!1)})}Ul.defaultSettings={samplingWindow:5,quietPeriod:2,warmupPeriod:5,minimumFrameRateDuringWarmup:4,minimumFrameRateAfterWarmup:8};Ul.fromScene=function(e){return(!d(e._frameRateMonitor)||e._frameRateMonitor.isDestroyed())&&(e._frameRateMonitor=new Ul({scene:e})),e._frameRateMonitor};Object.defineProperties(Ul.prototype,{scene:{get:function(){return this._scene}},lowFrameRate:{get:function(){return this._lowFrameRate}},nominalFrameRate:{get:function(){return this._nominalFrameRate}},lastFramesPerSecond:{get:function(){return this._lastFramesPerSecond}}});Ul.prototype.pause=function(){++this._pauseCount,this._pauseCount===1&&(this._frameTimes.length=0,this._lastFramesPerSecond=void 0)};Ul.prototype.unpause=function(){--this._pauseCount,this._pauseCount<=0&&(this._pauseCount=0,this._needsQuietPeriod=!0)};Ul.prototype.isDestroyed=function(){return!1};Ul.prototype.destroy=function(){return this._preUpdateRemoveListener(),d(this._visibilityChangeRemoveListener)&&this._visibilityChangeRemoveListener(),ue(this)};function ppt(e,t){if(e._pauseCount>0)return;let n=gi();if(e._needsQuietPeriod)e._needsQuietPeriod=!1,e._frameTimes.length=0,e._quietPeriodEndTime=n+e.quietPeriod/Qn.SECONDS_PER_MILLISECOND,e._warmupPeriodEndTime=e._quietPeriodEndTime+(e.warmupPeriod+e.samplingWindow)/Qn.SECONDS_PER_MILLISECOND;else if(n>=e._quietPeriodEndTime){e._frameTimes.push(n);let i=n-e.samplingWindow/Qn.SECONDS_PER_MILLISECOND;if(e._frameTimes.length>=2&&e._frameTimes[0]<=i){for(;e._frameTimes.length>=2&&e._frameTimes[1]<i;)e._frameTimes.shift();let o=(n-e._frameTimes[0])/(e._frameTimes.length-1);e._lastFramesPerSecond=1e3/o;let r=1e3/(n>e._warmupPeriodEndTime?e.minimumFrameRateAfterWarmup:e.minimumFrameRateDuringWarmup);o>r?e._frameRateIsLow||(e._frameRateIsLow=!0,e._needsQuietPeriod=!0,e.lowFrameRate.raiseEvent(e.scene,e._lastFramesPerSecond)):e._frameRateIsLow&&(e._frameRateIsLow=!1,e._needsQuietPeriod=!0,e.nominalFrameRate.raiseEvent(e.scene,e._lastFramesPerSecond))}}}function bpt(e){document[e._hiddenPropertyName]?e.pause():e.unpause()}var LF=Ul;var Xki=T(S(),1);var Qge=T(wJ(),1);function cj(){this._image=new Image}cj.prototype.isReady=function(){return!0};cj.prototype.shouldDiscardImage=function(e){return e===this._image};function ZT(e){e=g(e,g.EMPTY_OBJECT),this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._tileDiscardPolicy=e.tileDiscardPolicy,this._tilingScheme=new Di({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,rectangle:new de(-W.PI,-W.PI,W.PI,W.PI),ellipsoid:e.ellipsoid});let t=e.credit;typeof t=="string"&&(t=new St(t)),this._credit=t,this._tileWidth=256,this._tileHeight=256,this._maximumLevel=23,d(this._tileDiscardPolicy)||(this._tileDiscardPolicy=new cj),this._errorEvent=new ye}Object.defineProperties(ZT.prototype,{url:{get:function(){return this._metadata.url}},proxy:{get:function(){return this._metadata.proxy}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return 0}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return!1}}});ZT.fromMetadata=function(e,t){if(!e.imageryPresent)throw new me(`The server ${e.url} doesn't have imagery`);let n=new ZT(t);return n._metadata=e,n};ZT.prototype.getTileCredits=function(e,t,n){let i=this._metadata,o=i.getTileInformation(e,t,n);if(d(o)){let r=i.providers[o.imageryProvider];if(d(r))return[r]}};ZT.prototype.requestImage=function(e,t,n,i){let o=this._tileDiscardPolicy._image,r=this._metadata,s=X0.tileXYToQuadKey(e,t,n),a=r.getTileInformation(e,t,n);if(!d(a)){if(r.isValid(s)){let l=new Uo({throttle:i.throttle,throttleByServer:i.throttleByServer,type:i.type,priorityFunction:i.priorityFunction});r.populateSubtree(e,t,n,l);return}return Promise.resolve(o)}if(!a.hasImagery())return Promise.resolve(o);let c=ypt(this,a,e,t,n,i).fetchArrayBuffer();if(d(c))return c.then(function(l){ev(r.key,l);let u=new Uint8Array(l),m,p=r.protoImagery;if((!d(p)||!p)&&(m=gpt(u)),!d(m)&&(!d(p)||p)){let y=xpt(u);m=y.imageType,u=y.imageData}return!d(m)||!d(u)?o:_x({uint8Array:u,format:m,flipY:!0})})};ZT.prototype.pickFeatures=function(e,t,n,i,o){};function ypt(e,t,n,i,o,r){let s=X0.tileXYToQuadKey(n,i,o),a=t.imageryVersion;return a=d(a)&&a>0?a:1,e._metadata.resource.getDerivedResource({url:`flatfile?f1-0${s}-i.${a.toString()}`,request:r})}function gpt(e){let t="JFIF";if(e[6]===t.charCodeAt(0)&&e[7]===t.charCodeAt(1)&&e[8]===t.charCodeAt(2)&&e[9]===t.charCodeAt(3))return"image/jpeg";let n="PNG";if(e[1]===n.charCodeAt(0)&&e[2]===n.charCodeAt(1)&&e[3]===n.charCodeAt(2))return"image/png"}function xpt(e){let t=Qge.Reader.create(e),n=t.len,i={};for(;t.pos<n;){let s=t.uint32(),a;switch(s>>>3){case 1:i.imageType=t.uint32();break;case 2:i.imageData=t.bytes();break;case 3:i.alphaType=t.uint32();break;case 4:i.imageAlpha=t.bytes();break;case 5:if(a=i.copyrightIds,d(a)||(a=i.copyrightIds=[]),(s&7)===2){let c=t.uint32()+t.pos;for(;t.pos<c;)a.push(t.uint32())}else a.push(t.uint32());break;default:t.skipType(s&7);break}}let o=i.imageType;if(d(o))switch(o){case 0:i.imageType="image/jpeg";break;case 4:i.imageType="image/png";break;default:throw new me("GoogleEarthEnterpriseImageryProvider: Unsupported image type.")}let r=i.alphaType;return d(r)&&r!==0&&(console.log("GoogleEarthEnterpriseImageryProvider: External alpha not supported."),delete i.alphaType,delete i.imageAlpha),i}var lj=ZT;var Aki=T(S(),1);var _pt=new Y(1,1,1,.4),Tpt=new Y(0,1,0,.05),Spt=new Y(0,.5,0,.2);function GT(e){e=g(e,g.EMPTY_OBJECT),this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._tilingScheme=d(e.tilingScheme)?e.tilingScheme:new Di({ellipsoid:e.ellipsoid}),this._cells=g(e.cells,8),this._color=g(e.color,_pt),this._glowColor=g(e.glowColor,Tpt),this._glowWidth=g(e.glowWidth,6),this._backgroundColor=g(e.backgroundColor,Spt),this._errorEvent=new ye,this._tileWidth=g(e.tileWidth,256),this._tileHeight=g(e.tileHeight,256),this._canvasSize=g(e.canvasSize,256),this._canvas=this._createGridCanvas()}Object.defineProperties(GT.prototype,{proxy:{get:function(){}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){}},minimumLevel:{get:function(){}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){}},hasAlphaChannel:{get:function(){return!0}}});GT.prototype._drawGrid=function(e){let n=this._canvasSize;for(let i=0;i<=this._cells;++i){let r=1+i/this._cells*(n-1);e.moveTo(r,0),e.lineTo(r,n),e.moveTo(0,r),e.lineTo(n,r)}e.stroke()};GT.prototype._createGridCanvas=function(){let e=document.createElement("canvas");e.width=this._canvasSize,e.height=this._canvasSize;let t=0,n=this._canvasSize,i=e.getContext("2d"),o=this._backgroundColor.toCssColorString();i.fillStyle=o,i.fillRect(t,t,n,n);let r=this._glowColor.toCssColorString();i.strokeStyle=r,i.lineWidth=this._glowWidth,i.strokeRect(t,t,n,n),this._drawGrid(i),i.lineWidth=this._glowWidth*.5,i.strokeRect(t,t,n,n),this._drawGrid(i);let s=this._color.toCssColorString();return i.strokeStyle=s,i.lineWidth=2,i.strokeRect(t,t,n,n),i.lineWidth=1,this._drawGrid(i),e};GT.prototype.getTileCredits=function(e,t,n){};GT.prototype.requestImage=function(e,t,n,i){return Promise.resolve(this._canvas)};GT.prototype.pickFeatures=function(e,t,n,i,o){};var dj=GT;var KDi=T(S(),1);var IDi=T(S(),1);var CDi=T(S(),1);var Hki=T(S(),1);function _h(){}_h._maxDecodingConcurrency=Math.max(Mt.hardwareConcurrency-1,1);_h._decodeTaskProcessor=new yi("decodeI3S",_h._maxDecodingConcurrency);_h._promise=void 0;async function Cpt(){if(await _h._decodeTaskProcessor.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/draco_decoder.wasm"}))return _h._decodeTaskProcessor;throw new me("I3S decoder could not be initialized.")}_h.decode=async function(e,t,n,i){return d(_h._promise)||(_h._promise=Cpt()),_h._promise.then(function(o){let r=n._parent._data,s=n._parent._inverseRotationMatrix,a=0,c=0,l=0;d(r.obb)?(a=r.obb.center[0],c=r.obb.center[1],l=r.obb.center[2]):d(r.mbs)&&(a=r.mbs[0],c=r.mbs[1],l=r.mbs[2]);let u=$.fromRotationX(-W.PI_OVER_TWO),m=new $;$.multiply(u,s,m);let p=he.fromDegrees(a,c,l),y=re.WGS84.cartographicToCartesian(p),f={binaryData:n._data,featureData:d(i)&&d(i[0])?i[0].data:void 0,schema:t,bufferInfo:n._geometryBufferInfo,ellipsoidRadiiSquare:re.WGS84.radiiSquared,url:e,geoidDataList:n._dataProvider._geoidDataList,cartographicCenter:p,cartesianCenter:y,parentRotation:m};return o.scheduleTask(f)})};var RF=_h;var jki=T(S(),1);function uj(e,t){this._parent=e,this._dataProvider=e._dataProvider,this._layer=e._layer,d(this._parent._nodeIndex)?this._resource=this._parent._layer.resource.getDerivedResource({url:`nodes/${this._parent._data.mesh.attribute.resource}/${t}`}):this._resource=this._parent.resource.getDerivedResource({url:t})}Object.defineProperties(uj.prototype,{resource:{get:function(){return this._resource}},data:{get:function(){return this._data}}});uj.prototype.load=async function(){return this._data=await ET.loadJson(this._resource,this._dataProvider._traceFetches),this._data};var ZF=uj;var eDi=T(S(),1);function GV(e,t){this._storageInfo=t,this._parent=e,this._dataProvider=e._dataProvider;let n=`attributes/${t.key}/0`;d(this._parent._nodeIndex)?this._resource=this._parent._layer.resource.getDerivedResource({url:`nodes/${this._parent._data.mesh.attribute.resource}/${n}`}):this._resource=this._parent.resource.getDerivedResource({url:n})}Object.defineProperties(GV.prototype,{resource:{get:function(){return this._resource}},header:{get:function(){return this._header}},values:{get:function(){return d(this._values)&&d(this._values.attributeValues)?this._values.attributeValues:[]}},name:{get:function(){return this._storageInfo.name}}});function Vpt(e){return e==="UInt8"||e==="Int8"?1:e==="UInt16"||e==="Int16"?2:e==="UInt32"||e==="Int32"||e==="Oid32"||e==="Float32"?4:e==="UInt64"||e==="Int64"||e==="Float64"?8:0}GV.prototype.load=function(){let e=this;return this._dataProvider._loadBinary(this._resource).then(function(t){let n=new DataView(t),i=!0;if(n.getUint8(0)===123&&new TextDecoder().decode(t).includes("404")&&(i=!1,console.error(`Failed to load: ${e.resource.url}`)),i){e._data=t;let o=e._parseHeader(n),r=Vpt(e._storageInfo.attributeValues.valueType);r>0&&(o=Math.ceil(o/r)*r),e._parseBody(n,o)}})};GV.prototype._parseValue=function(e,t,n){let i;if(t==="UInt8")i=e.getUint8(n),n+=1;else if(t==="Int8")i=e.getInt8(n),n+=1;else if(t==="UInt16")i=e.getUint16(n,!0),n+=2;else if(t==="Int16")i=e.getInt16(n,!0),n+=2;else if(t==="UInt32")i=e.getUint32(n,!0),n+=4;else if(t==="Oid32")i=e.getUint32(n,!0),n+=4;else if(t==="Int32")i=e.getInt32(n,!0),n+=4;else if(t==="UInt64"){let o=e.getUint32(n,!0),r=e.getUint32(n+4,!0);i=o+Math.pow(2,32)*r,n+=8}else if(t==="Int64"){let o=e.getUint32(n,!0),r=e.getUint32(n+4,!0);r<Math.pow(2,31)?i=o+Math.pow(2,32)*r:i=o+Math.pow(2,32)*(r-Math.pow(2,32)),n+=8}else t==="Float32"?(i=e.getFloat32(n,!0),n+=4):t==="Float64"?(i=e.getFloat64(n,!0),n+=8):t==="String"&&(i=String.fromCharCode(e.getUint8(n)),n+=1);return{value:i,offset:n}};GV.prototype._parseHeader=function(e){let t=0;this._header={};for(let n=0;n<this._storageInfo.header.length;n++){let i=this._storageInfo.header[n],o=this._parseValue(e,i.valueType,t);this._header[i.property]=o.value,t=o.offset}return t};GV.prototype._parseBody=function(e,t){this._values={};for(let n=0;n<this._storageInfo.ordering.length;n++){let i=this._storageInfo.ordering[n],o=this._storageInfo[i];if(d(o)){this._values[i]=[];for(let r=0;r<this._header.count;++r)if(o.valueType!=="String"){let s=this._parseValue(e,o.valueType,t);this._values[i].push(s.value),t=s.offset}else{let s=this._values.attributeByteCounts[r],a="";for(let c=0;c<s;++c){let l=this._parseValue(e,o.valueType,t);l.value.charCodeAt(0)!==0&&(a+=l.value),t=l.offset}this._values[i].push(a)}}}};var GF=GV;var rDi=T(S(),1);function EF(e,t){let n=e._dataProvider,i=e._layer,o;d(e._nodeIndex)?o=i.resource.getDerivedResource({url:`nodes/${e._data.mesh.geometry.resource}/${t}`}):o=e.resource.getDerivedResource({url:t}),this._parent=e,this._dataProvider=n,this._layer=i,this._resource=o,this._customAttributes=void 0}Object.defineProperties(EF.prototype,{resource:{get:function(){return this._resource}},data:{get:function(){return this._data}},customAttributes:{get:function(){return this._customAttributes}}});EF.prototype.load=function(){let e=this;return this._dataProvider._loadBinary(this._resource).then(function(t){return e._data=t,t})};var Lpt=new h,Rpt=new h,Zpt=new h,Gpt=new h,Ept=new h;function mj(e,t,n,i){let o=h.subtract(i,n,Lpt),r=h.cross(o,h.subtract(e,n,Rpt),Gpt),s=h.cross(o,h.subtract(t,n,Zpt),Ept);return h.dot(r,s)>=0}var Xpt=new h,Ipt=new h,Wpt=new h,Ppt=new h,vpt=new h,wpt=new h,Fpt=new h,Apt=new h,Mpt=new h,Npt=new h;EF.prototype.getClosestPointIndexOnTriangle=function(e,t,n){if(d(this._customAttributes)&&d(this._customAttributes.positions)){let i=new h(e,t,n);i.x-=this._customAttributes.cartesianCenter.x,i.y-=this._customAttributes.cartesianCenter.y,i.z-=this._customAttributes.cartesianCenter.z,$.multiplyByVector(this._customAttributes.parentRotation,i,i);let o=Number.MAX_VALUE,r,s,a,c,l=this._customAttributes.positions,u=this._customAttributes.indices,m;d(u)?m=u.length:m=l.length/3;for(let p=0;p<m;p++){let y,f,x;d(u)?(y=u[p],f=u[p+1],x=u[p+2]):(y=p*3,f=p*3+1,x=p*3+2);let _=h.fromElements(l[y*3],l[y*3+1],l[y*3+2],Xpt),C=h.fromElements(l[f*3],l[f*3+1],l[f*3+2],Ipt),V=new h(l[x*3],l[x*3+1],l[x*3+2],Wpt);if(!mj(i,_,C,V)||!mj(i,C,_,V)||!mj(i,V,_,C))continue;let L=h.subtract(C,_,Ppt),Z=h.subtract(V,_,vpt),G=h.cross(L,Z,wpt);if(h.magnitude(G)===0)continue;let X=h.normalize(G,Fpt),P=h.subtract(i,_,Apt),v=Math.abs(h.dot(P,X));if(v<o){o=v,r=p;let F=h.magnitudeSquared(h.subtract(i,_,P)),M=h.magnitudeSquared(h.subtract(i,C,Mpt)),b=h.magnitudeSquared(h.subtract(i,V,Npt));F<M&&F<b?(a=y,c=_,s=F):M<b?(a=f,c=C,s=M):(a=x,c=V,s=b)}}if(d(r))return{index:a,distanceSquared:s,distance:Math.sqrt(s),queriedPosition:i,closestPosition:h.clone(c)}}return{index:-1,distanceSquared:Number.Infinity,distance:Number.Infinity}};EF.prototype._generateGltf=function(e,t,n,i,o,r){let s={pbrMetallicRoughness:{metallicFactor:0},doubleSided:!0,name:"Material"},a=!1,c,l="";if(d(this._parent._data.mesh)&&d(this._layer._data.materialDefinitions)){let x=this._parent._data.mesh.material.definition;if(x>=0&&x<this._layer._data.materialDefinitions.length&&(c=this._layer._data.materialDefinitions[x],s=c,d(s.pbrMetallicRoughness)&&d(s.pbrMetallicRoughness.baseColorTexture))){a=!0,s.pbrMetallicRoughness.baseColorTexture.index=0;let _="0";if(d(this._layer._data.textureSetDefinitions))for(let C=0;C<this._layer._data.textureSetDefinitions.length;C++){let V=this._layer._data.textureSetDefinitions[C];for(let L=0;L<V.formats.length;L++){let Z=V.formats[L];if(Z.format==="jpg"){_=Z.name;break}}}d(this._parent._data.mesh)&&this._parent._data.mesh.material.resource>=0&&(l=this._layer.resource.getDerivedResource({url:`nodes/${this._parent._data.mesh.material.resource}/textures/${_}`}).url)}}else d(this._parent._data.textureData)&&(a=!0,l=this._parent.resource.getDerivedResource({url:`${this._parent._data.textureData[0].href}`}).url,s.pbrMetallicRoughness.baseColorTexture={index:0});let u=[],m=[],p=[];return a&&(u=[{sampler:0,source:0}],m=[{uri:l}],p=[{magFilter:9729,minFilter:9986,wrapS:10497,wrapT:10497}]),{scene:0,scenes:[{nodes:e}],nodes:t,meshes:n,buffers:i,bufferViews:o,accessors:r,materials:[s],textures:u,images:m,samplers:p,asset:{version:"2.0"}}};var EV=EF;function Nd(e,t,n){let i,o,r,s;n?(i=0,o=e):(i=e._level+1,o=e._layer),typeof t=="number"?r=t:s=e.resource.getDerivedResource({url:`${t}/`}),this._parent=e,this._dataProvider=e._dataProvider,this._isRoot=n,this._level=i,this._layer=o,this._nodeIndex=r,this._resource=s,this._isLoading=!1,this._tile=void 0,this._data=void 0,this._geometryData=[],this._featureData=[],this._fields={},this._children=[],this._childrenReadyPromise=void 0,this._globalTransform=void 0,this._inverseGlobalTransform=void 0,this._inverseRotationMatrix=void 0}Object.defineProperties(Nd.prototype,{resource:{get:function(){return this._resource}},layer:{get:function(){return this._layer}},parent:{get:function(){return this._parent}},children:{get:function(){return this._children}},geometryData:{get:function(){return this._geometryData}},featureData:{get:function(){return this._featureData}},fields:{get:function(){return this._fields}},tile:{get:function(){return this._tile}},data:{get:function(){return this._data}}});Nd.prototype.load=async function(){let e=this;function t(){if(!e._isRoot){let o=e._create3DTileDefinition();e._tile=new gu(e._layer._tileset,e._dataProvider.resource,o,e._parent._tile),e._tile._i3sNode=e}}if(!d(this._nodeIndex)){let o=await ET.loadJson(this._resource,this._dataProvider._traceFetches);e._data=o,t();return}let n=await this._layer._getNodeInNodePages(this._nodeIndex);e._data=n;let i;e._isRoot?i="nodes/root/":d(n.mesh)&&(i=`../${n.mesh.geometry.resource}/`),d(i)&&(e._resource=e._parent.resource.getDerivedResource({url:i})),t()};Nd.prototype.loadFields=function(){let e=this._layer._data.attributeStorageInfo,t=this;function n(o,r){let s=new GF(t,o[r]);return t._fields[s._storageInfo.name]=s,s.load()}let i=[];if(d(e))for(let o=0;o<e.length;o++)i.push(n(e,o));return Promise.all(i)};Nd.prototype.getFieldsForPickedPosition=function(e){let t=this.geometryData[0];if(!d(t.customAttributes.featureIndex))return{};let n=t.getClosestPointIndexOnTriangle(e.x,e.y,e.z);if(n.index===-1||n.index>t.customAttributes.featureIndex.length)return{};let i=t.customAttributes.featureIndex[n.index];return this.getFieldsForFeature(i)};Nd.prototype.getFieldsForFeature=function(e){let t={};for(let n in this.fields)if(this.fields.hasOwnProperty(n)){let i=this.fields[n];e>=0&&e<i.values.length&&(t[i.name]=i.values[e])}return t};Nd.prototype._loadChildren=function(){let e=this;if(d(this._childrenReadyPromise))return this._childrenReadyPromise;let t=[];if(d(e._data.children))for(let n=0;n<e._data.children.length;n++){let i=e._data.children[n],o=new Nd(e,g(i.href,i),!1);e._children.push(o),t.push(o.load())}return this._childrenReadyPromise=Promise.all(t).then(function(){for(let n=0;n<e._children.length;n++)e._tile.children.push(e._children[n]._tile)}),this._childrenReadyPromise};Nd.prototype._loadGeometryData=function(){let e=[];if(d(this._data.geometryData))for(let t=0;t<this._data.geometryData.length;t++){let n=new EV(this,this._data.geometryData[t].href);this._geometryData.push(n),e.push(n.load())}else if(d(this._data.mesh)){let t=this._layer._findBestGeometryBuffers(this._data.mesh.geometry.definition,["position","uv0"]),n=`./geometries/${t.bufferIndex}/`,i=new EV(this,n);i._geometryDefinitions=t.definition,i._geometryBufferInfo=t.geometryBufferInfo,this._geometryData.push(i),e.push(i.load())}return Promise.all(e)};Nd.prototype._loadFeatureData=function(){let e=[];if(d(this._data.featureData))for(let t=0;t<this._data.featureData.length;t++){let n=new ZF(this,this._data.featureData[t].href);this._featureData.push(n),e.push(n.load())}return Promise.all(e)};Nd.prototype._clearGeometryData=function(){this._geometryData=[]};Nd.prototype._create3DTileDefinition=function(){let e=this._data.obb,t=this._data.mbs;if(!d(e)&&!d(t)){console.error("Failed to load I3S node. Bounding volume is required.");return}let n;if(d(e)?n=he.fromDegrees(e.center[0],e.center[1],e.center[2]):n=he.fromDegrees(t[0],t[1],t[2]),d(this._dataProvider._geoidDataList)&&d(n))for(let C=0;C<this._dataProvider._geoidDataList.length;C++){let V=this._dataProvider._geoidDataList[C],L=V.projection.project(n);if(L.x>V.nativeExtent.west&&L.x<V.nativeExtent.east&&L.y>V.nativeExtent.south&&L.y<V.nativeExtent.north){n.height+=kpt(L.x,L.y,V);break}}let i={},o,r=0;d(e)?(i={box:[0,0,0,e.halfSize[0],0,0,0,e.halfSize[1],0,0,0,e.halfSize[2]]},r=Math.max(Math.max(this._data.obb.halfSize[0],this._data.obb.halfSize[1]),this._data.obb.halfSize[2]),o=re.WGS84.cartographicToCartesian(n)):(i={sphere:[0,0,0,t[3]]},o=re.WGS84.cartographicToCartesian(n),r=this._data.mbs[3]),r*=2;let s=1/0;if(d(this._data.lodThreshold))if(this._layer._data.nodePages.lodSelectionMetricType==="maxScreenThresholdSQ"){let C=Math.sqrt(this._data.lodThreshold/(Math.PI*.25));s=r/C}else if(this._layer._data.nodePages.lodSelectionMetricType==="maxScreenThreshold"){let C=this._data.lodThreshold;s=r/C}else console.error("Invalid lodSelectionMetricType in Layer");else if(d(this._data.lodSelection))for(let C=0;C<this._data.lodSelection.length;C++)this._data.lodSelection[C].metricType==="maxScreenThreshold"&&(s=r/this._data.lodSelection[C].maxError);s===1/0&&(s=1e5);let a=s*16,c=new Aa(0,0,0),l=vt.headingPitchRollQuaternion(o,c);d(this._data.obb)&&(l=new Ae(this._data.obb.quaternion[0],this._data.obb.quaternion[1],this._data.obb.quaternion[2],this._data.obb.quaternion[3]));let u=$.fromQuaternion(l),m=$.inverse(u,new $),p=new A(u[0],u[1],u[2],0,u[3],u[4],u[5],0,u[6],u[7],u[8],0,o.x,o.y,o.z,1),y=A.inverse(p,new A),f=A.clone(p);d(this._parent._globalTransform)&&A.multiply(p,this._parent._inverseGlobalTransform,f),this._globalTransform=p,this._inverseGlobalTransform=y,this._inverseRotationMatrix=m;let x=[];for(let C=0;C<this._children.length;C++)x.push(this._children[C]._create3DTileDefinition());return{children:x,refine:"REPLACE",boundingVolume:i,transform:[f[0],f[4],f[8],f[12],f[1],f[5],f[9],f[13],f[2],f[6],f[10],f[14],f[3],f[7],f[11],f[15]],content:{uri:d(this._resource)?this._resource.url:void 0},geometricError:a}};Nd.prototype._createContentURL=async function(){let e={scene:0,scenes:[{nodes:[0]}],nodes:[{name:"singleNode"}],meshes:[],buffers:[],bufferViews:[],accessors:[],materials:[],textures:[],images:[],samplers:[],asset:{version:"2.0"}},t=[this._loadGeometryData()];if(this._dataProvider.legacyVersion16&&t.push(this._loadFeatureData()),await Promise.all(t),d(this._geometryData)&&this._geometryData.length>0){let o=this._geometryData[0].resource.url,r=this._layer._data.store.defaultGeometrySchema,s=this._geometryData[0],a=await RF.decode(o,r,s,this._featureData[0]);if(!d(a))return;e=s._generateGltf(a.meshData.nodesInScene,a.meshData.nodes,a.meshData.meshes,a.meshData.buffers,a.meshData.bufferViews,a.meshData.accessors),this._geometryData[0]._customAttributes=a.meshData._customAttributes}let n=this._dataProvider._binarizeGltf(e),i=new Blob([n],{type:"application/binary"});return URL.createObjectURL(i)};gu.prototype._hookedRequestContent=gu.prototype.requestContent;gu.prototype.requestContent=function(){if(!this.tileset._isI3STileSet)return this._hookedRequestContent();if(!this._isLoading)return this._isLoading=!0,this._i3sNode._createContentURL().then(e=>{if(!d(e)){this._isLoading=!1;return}return this._contentResource=new Ee({url:e}),this._hookedRequestContent()}).then(e=>(this._isLoading=!1,e))};function Upt(e,t,n,i,o,r){let s=n*(1-e)+i*e,a=o*(1-e)+r*e;return s*(1-t)+a*t}function iD(e,t,n,i){let o=e+t*n;return i[o]}function kpt(e,t,n){let i=n.nativeExtent,o=(e-i.west)/(i.east-i.west)*(n.width-1),r=(t-i.south)/(i.north-i.south)*(n.height-1),s=Math.floor(o),a=Math.floor(r);o-=s,r-=a;let c=s<n.width?s+1:s,l=a<n.height?a+1:a;a=n.height-1-a,l=n.height-1-l;let u=iD(s,a,n.width,n.buffer),m=iD(c,a,n.width,n.buffer),p=iD(s,l,n.width,n.buffer),y=iD(c,l,n.width,n.buffer),f=Upt(o,r,u,m,p,y);return f=f*n.scale+n.offset,f}Object.defineProperties(gu.prototype,{i3sNode:{get:function(){return this._i3sNode}}});var XV=Nd;function zu(e,t,n){this._dataProvider=e,!d(t.href)&&d(n)&&(t.href=`layers/${n}`);let i=this._dataProvider.resource.getUrlComponent(),o="";i.match(/layers\/\d/)?o=`${i}`.replace(/\/+$/,""):o=`${i}`.replace(/\/?$/,"/").concat(`${t.href}`),this._version=t.store.version;let r=this._version.split(".");this._majorVersion=parseInt(r[0]),this._minorVersion=r.length>1?parseInt(r[1]):0,this._resource=new Ee({url:o}),this._resource.setQueryParameters(this._dataProvider.resource.queryParameters),this._resource.appendForwardSlash(),this._data=t,this._rootNode=void 0,this._nodePages={},this._nodePageFetches={},this._extent=void 0,this._tileset=void 0,this._geometryDefinitions=void 0,this._computeGeometryDefinitions(!0),this._computeExtent()}Object.defineProperties(zu.prototype,{resource:{get:function(){return this._resource}},rootNode:{get:function(){return this._rootNode}},tileset:{get:function(){return this._tileset}},data:{get:function(){return this._data}},version:{get:function(){return this._version}},majorVersion:{get:function(){return this._majorVersion}},minorVersion:{get:function(){return this._minorVersion}},legacyVersion16:{get:function(){if(d(this.version))return this.majorVersion<1||this.majorVersion===1&&this.minorVersion<=6}}});zu.prototype.load=async function(e){if(this._data.spatialReference.wkid!==4326)throw new me(`Unsupported spatial reference: ${this._data.spatialReference.wkid}`);if(await this._dataProvider.loadGeoidData(),await this._loadRootNode(e),await this._create3DTileset(e),this._rootNode._tile=this._tileset._root,this._tileset._root._i3sNode=this._rootNode,this.legacyVersion16)return this._rootNode._loadChildren()};zu.prototype._computeGeometryDefinitions=function(e){if(this._geometryDefinitions=[],d(this._data.geometryDefinitions))for(let t=0;t<this._data.geometryDefinitions.length;t++){let n=[],i=this._data.geometryDefinitions[t].geometryBuffers;for(let o=0;o<i.length;o++){let r=i[o],s=[],a=!1;if(d(r.compressedAttributes)&&e){a=!0;let c=r.compressedAttributes.attributes;for(let l=0;l<c.length;l++)s.push(c[l])}else for(let c in r)c!=="offset"&&s.push(c);n.push({compressed:a,attributes:s,index:i.indexOf(r)})}n.sort(function(o,r){return o.compressed&&!r.compressed?-1:!o.compressed&&r.compressed?1:o.attributes.length-r.attributes.length}),this._geometryDefinitions.push(n)}};zu.prototype._findBestGeometryBuffers=function(e,t){let n=this._geometryDefinitions[e];if(d(n))for(let i=0;i<n.length;++i){let o=n[i],r=!1,s=o.attributes;for(let a=0;a<t.length;a++)if(!s.includes(t[a])){r=!0;break}if(!r)return{bufferIndex:o.index,definition:n,geometryBufferInfo:o}}return 0};zu.prototype._loadRootNode=function(e){if(d(this._data.nodePages)){let t=0;d(this._data.nodePages.rootIndex)&&(t=this._data.nodePages.rootIndex),this._rootNode=new XV(this,t,!0)}else this._rootNode=new XV(this,this._data.store.rootNode,!0);return this._rootNode.load(e)};zu.prototype._getNodeInNodePages=function(e){let t=Math.floor(e/this._data.nodePages.nodesPerPage),n=e%this._data.nodePages.nodesPerPage;return this._loadNodePage(t).then(function(i){return i.nodes[n]})};zu._fetchJson=function(e){return e.fetchJson()};zu.prototype._loadNodePage=function(e){let t=this;if(!d(this._nodePageFetches[e])){let n=this.resource.getDerivedResource({url:`nodepages/${e}/`}),i=zu._fetchJson(n).then(function(o){return d(o.error)&&o.error.code!==200?Promise.reject(o.error):(t._nodePages[e]=o.nodes,o)});this._nodePageFetches[e]=i}return this._nodePageFetches[e]};zu.prototype._computeExtent=function(){d(this._data.fullExtent)?this._extent=de.fromDegrees(this._data.fullExtent.xmin,this._data.fullExtent.ymin,this._data.fullExtent.xmax,this._data.fullExtent.ymax):d(this._data.store.extent)&&(this._extent=de.fromDegrees(this._data.store.extent[0],this._data.store.extent[1],this._data.store.extent[2],this._data.store.extent[3]))};zu.prototype._create3DTileset=async function(e){let t={asset:{version:"1.0"},geometricError:Number.MAX_VALUE,root:this._rootNode._create3DTileDefinition()},n=new Blob([JSON.stringify(t)],{type:"application/json"}),i=URL.createObjectURL(n);this._tileset=await zs.fromUrl(i,e),this._tileset.show=this._dataProvider.show,this._tileset._isI3STileSet=!0,this._tileset.tileUnload.addEventListener(function(o){o._i3sNode._clearGeometryData(),URL.revokeObjectURL(o._contentResource._url),o._contentResource=o._i3sNode.resource}),this._tileset.tileVisible.addEventListener(function(o){d(o._i3sNode)&&o._i3sNode._loadChildren()})};var IV=zu;var qge=T(jge(),1);function sa(e){e=g(e,g.EMPTY_OBJECT),this._name=e.name,this._show=g(e.show,!0),this._geoidTiledTerrainProvider=e.geoidTiledTerrainProvider,this._traceFetches=g(e.traceFetches,!1),this._cesium3dTilesetOptions=g(e.cesium3dTilesetOptions,g.EMPTY_OBJECT),this._layers=[],this._data=void 0,this._extent=void 0,this._geoidDataPromise=void 0,this._geoidDataList=void 0,this._decoderTaskProcessor=void 0,this._taskProcessorReadyPromise=void 0}Object.defineProperties(sa.prototype,{name:{get:function(){return this._name}},show:{get:function(){return this._show},set:function(e){this._show=e;for(let t=0;t<this._layers.length;t++)d(this._layers[t]._tileset)&&(this._layers[t]._tileset.show=this._show)}},traceFetches:{get:function(){return this._traceFetches},set:function(e){this._traceFetches=e}},geoidTiledTerrainProvider:{get:function(){return this._geoidTiledTerrainProvider}},layers:{get:function(){return this._layers}},data:{get:function(){return this._data}},extent:{get:function(){return this._extent}},resource:{get:function(){return this._resource}}});sa.prototype.destroy=function(){for(let e=0;e<this._layers.length;e++)d(this._layers[e]._tileset)&&this._layers[e]._tileset.destroy();return ue(this)};sa.prototype.isDestroyed=function(){return!1};sa.prototype.update=function(e){for(let t=0;t<this._layers.length;t++)d(this._layers[t]._tileset)&&this._layers[t]._tileset.update(e)};sa.prototype.prePassesUpdate=function(e){for(let t=0;t<this._layers.length;t++)d(this._layers[t]._tileset)&&this._layers[t]._tileset.prePassesUpdate(e)};sa.prototype.postPassesUpdate=function(e){for(let t=0;t<this._layers.length;t++)d(this._layers[t]._tileset)&&this._layers[t]._tileset.postPassesUpdate(e)};sa.prototype.updateForPass=function(e,t){for(let n=0;n<this._layers.length;n++)d(this._layers[n]._tileset)&&this._layers[n]._tileset.updateForPass(e,t)};sa.fromUrl=async function(e,t){t=g(t,g.EMPTY_OBJECT);let n=Ee.createIfNeeded(e),i=await sa.loadJson(n),o=new sa(t);if(o._resource=n,o._data=i,d(i.layers))for(let s=0;s<i.layers.length;s++){let a=new IV(o,i.layers[s],s);o._layers.push(a)}else{let s=new IV(o,i,i.id);o._layers.push(s)}o._computeExtent();let r=[];for(let s=0;s<o._layers.length;s++)r.push(o._layers[s].load(t.cesium3dTilesetOptions));return await Promise.all(r),o};sa._fetchJson=function(e){return e.fetchJson()};sa.loadJson=async function(e,t){t&&console.log("I3S FETCH:",e.url);let n=await sa._fetchJson(e);if(d(n.error)){if(console.error("Failed to fetch I3S ",e.url),d(n.error.message)&&console.error(n.error.message),d(n.error.details))for(let i=0;i<n.error.details.length;i++)console.log(n.error.details[i]);throw new me(n.error)}return n};sa.prototype._loadBinary=function(e){return this._traceFetches&&console.log("I3S FETCH:",e.url),e.fetchArrayBuffer()};sa.prototype._binarizeGltf=function(e){let n=new TextEncoder().encode(JSON.stringify(e)),i=new Uint8Array(n.byteLength+20),o={magic:new Uint8Array(i.buffer,0,4),version:new Uint32Array(i.buffer,4,1),length:new Uint32Array(i.buffer,8,1),chunkLength:new Uint32Array(i.buffer,12,1),chunkType:new Uint32Array(i.buffer,16,1),chunkData:new Uint8Array(i.buffer,20,n.byteLength)};return o.magic[0]=103,o.magic[1]=108,o.magic[2]=84,o.magic[3]=70,o.version[0]=2,o.length[0]=i.byteLength,o.chunkLength[0]=n.byteLength,o.chunkType[0]=1313821514,o.chunkData.set(n),i};var Dpt=new D;function Bpt(e,t){let n=e.tilingScheme,i=[],o={},r=e._lodCount,s=he.fromRadians(t.west,t.north),a=he.fromRadians(t.east,t.south),c=n.positionToTileXY(s,r),l=n.positionToTileXY(a,r);for(let m=c.x;m<=l.x;m++)for(let p=c.y;p<=l.y;p++){let y=D.fromElements(m,p,Dpt),f=y.toString();if(!o.hasOwnProperty(f)){let x={x:y.x,y:y.y,level:r,tilingScheme:n,terrainProvider:e,positions:[]};o[f]=x,i.push(x)}}let u=[];for(let m=0;m<i.length;++m){let p=i[m],y=p.terrainProvider.requestTileGeometry(p.x,p.y,p.level);u.push(y)}return Promise.all(u).then(function(m){let p=[];for(let y=0;y<m.length;y++){let f={tilingScheme:n,x:i[y].x,y:i[y].y,level:i[y].level},x=m[y],_="Geographic";n._projection instanceof Ei&&(_="WebMercator");let C={projectionType:_,projection:n._projection,nativeExtent:n.tileXYToNativeRectangle(f.x,f.y,f.level),height:x._height,width:x._width,scale:x._structure.heightScale,offset:x._structure.heightOffset};if(x._encoding===Fu.LERC){let V=qge.default.decode(x._buffer);C.buffer=V.pixels[0]}else C.buffer=x._buffer;p.push(C)}return p})}async function Ypt(e){let t=e._geoidTiledTerrainProvider;if(!d(t)){console.log("No Geoid Terrain service provided - no geoid conversion will be performed.");return}try{let n=await Bpt(t,e._extent);e._geoidDataList=n}catch{console.log("Error retrieving Geoid Terrain tiles - no geoid conversion will be performed.")}}sa.prototype.loadGeoidData=async function(){return d(this._geoidDataPromise)?this._geoidDataPromise:(this._geoidDataPromise=Ypt(this),this._geoidDataPromise)};sa.prototype._computeExtent=function(){let e;for(let t=0;t<this._layers.length;t++)if(d(this._layers[t]._extent)){let n=this._layers[t]._extent;d(e)?de.union(e,n,e):e=de.clone(n)}this._extent=e};var ET=sa;var zDi=T(S(),1),$ge=Object.freeze({UNLOADED:0,RECEIVING:1,RECEIVED:2,LOADED:3,FAILED:4,UNAVAILABLE:5});function rD(e,t){this.spatialNode=e,this.keyframe=t,this.state=$ge.UNLOADED,this.metadatas=[],this.megatextureIndex=-1,this.priority=-Number.MAX_VALUE,this.highPriorityFrameNumber=-1}rD.priorityComparator=function(e,t){return e.priority-t.priority};rD.searchComparator=function(e,t){return e.keyframe-t.keyframe};rD.LoadState=$ge;var Qi=rD;var jDi=T(S(),1);function exe(){}Object.defineProperties(exe.prototype,{color:{get:fe.throwInstantiationError},intensity:{get:fe.throwInstantiationError}});var hj=exe;var oBi=T(S(),1);var Opt=/\/$/,txe=new St('&copy; <a href="https://www.mapbox.com/about/maps/">Mapbox</a> &copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> <strong><a href="https://www.mapbox.com/map-feedback/">Improve this map</a></strong>');function WV(e){e=g(e,g.EMPTY_OBJECT);let t=e.styleId,n=e.accessToken;this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0;let i=Ee.createIfNeeded(g(e.url,"https://api.mapbox.com/styles/v1/"));this._styleId=t,this._accessToken=n;let o=g(e.tilesize,512);this._tilesize=o;let r=g(e.username,"mapbox");this._username=r;let s=d(e.scaleFactor)?"@2x":"",a=i.getUrlComponent();Opt.test(a)||(a+="/"),a+=`${this._username}/${t}/tiles/${this._tilesize}/{z}/{x}/{y}${s}`,i.url=a,i.setQueryParameters({access_token:n});let c;d(e.credit)?(c=e.credit,typeof c=="string"&&(c=new St(c))):c=txe,this._resource=i,this._imageryProvider=new Ca({url:i,credit:c,ellipsoid:e.ellipsoid,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,rectangle:e.rectangle})}Object.defineProperties(WV.prototype,{url:{get:function(){return this._imageryProvider.url}},rectangle:{get:function(){return this._imageryProvider.rectangle}},tileWidth:{get:function(){return this._imageryProvider.tileWidth}},tileHeight:{get:function(){return this._imageryProvider.tileHeight}},maximumLevel:{get:function(){return this._imageryProvider.maximumLevel}},minimumLevel:{get:function(){return this._imageryProvider.minimumLevel}},tilingScheme:{get:function(){return this._imageryProvider.tilingScheme}},tileDiscardPolicy:{get:function(){return this._imageryProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._imageryProvider.errorEvent}},credit:{get:function(){return this._imageryProvider.credit}},proxy:{get:function(){return this._imageryProvider.proxy}},hasAlphaChannel:{get:function(){return this._imageryProvider.hasAlphaChannel}}});WV.prototype.getTileCredits=function(e,t,n){};WV.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)};WV.prototype.pickFeatures=function(e,t,n,i,o){return this._imageryProvider.pickFeatures(e,t,n,i,o)};WV._defaultCredit=txe;var fj=WV;var VBi=T(S(),1);function cg(e,t,n,i,o){i===tn.UNSIGNED_SHORT&&(i=tn.FLOAT32);let r=e.floatingPointTexture;if(i===tn.FLOAT32&&!r)throw new me("Floating point texture not supported");let s;i===tn.FLOAT32||i===tn.FLOAT64?s=Je.FLOAT:i===tn.UINT8&&(s=Je.UNSIGNED_BYTE);let a;n===1?a=e.webgl2?st.RED:st.LUMINANCE:n===2?a=e.webgl2?st.RG:st.LUMINANCE_ALPHA:n===3?a=st.RGB:n===4&&(a=st.RGBA);let c=512*1024*1024,l=128*1024*1024;o=Math.min(g(o,l),c);let u=kt.maximumTextureSize,m=tn.getSizeInBytes(i),p=Math.floor(o/(n*m)),y=Math.min(u,W.previousPowerOfTwo(Math.floor(Math.sqrt(p)))),f=Math.ceil(Math.sqrt(t.x)),x=Math.ceil(t.z/f),_=f*t.x,C=x*t.y,V=Math.floor(y/_),L=Math.floor(y/C);if(V===0||L===0)throw new me("Tileset is too large to fit into megatexture");this.channelCount=n,this.componentType=i,this.voxelCountPerTile=h.clone(t,new h),this.maximumTileCount=V*L,this.regionCountPerMegatexture=new D(V,L),this.voxelCountPerRegion=new D(_,C),this.sliceCountPerRegion=new D(f,x),this.voxelSizeUv=new D(1/y,1/y),this.sliceSizeUv=new D(t.x/y,t.y/y),this.regionSizeUv=new D(_/y,C/y),this.texture=new Wt({context:e,pixelFormat:a,pixelDatatype:s,flipY:!1,width:y,height:y,sampler:new un({wrapS:Gn.CLAMP_TO_EDGE,wrapT:Gn.CLAMP_TO_EDGE,minificationFilter:cn.LINEAR,magnificationFilter:Ti.LINEAR})});let Z=tn.toComponentDatatype(i);this.tileVoxelDataTemp=Q.createTypedArray(Z,_*C*n),this.nodes=new Array(this.maximumTileCount);for(let G=0;G<this.maximumTileCount;G++)this.nodes[G]=new Kpt(G);for(let G=0;G<this.maximumTileCount;G++){let X=this.nodes[G];X.previousNode=G>0?this.nodes[G-1]:void 0,X.nextNode=G<this.maximumTileCount-1?this.nodes[G+1]:void 0}this.occupiedList=void 0,this.emptyList=this.nodes[0],this.occupiedCount=0}function Kpt(e){this.index=e,this.nextNode=void 0,this.previousNode=void 0}cg.prototype.add=function(e){if(this.isFull())throw new fe("Trying to add when there are no empty spots");let t=this.emptyList;this.emptyList=this.emptyList.nextNode,d(this.emptyList)&&(this.emptyList.previousNode=void 0),t.nextNode=this.occupiedList,d(t.nextNode)&&(t.nextNode.previousNode=t),this.occupiedList=t;let n=t.index;return this.writeDataToTexture(n,e),this.occupiedCount++,n};cg.prototype.remove=function(e){if(e<0||e>=this.maximumTileCount)throw new fe("Megatexture index out of bounds");let t=this.nodes[e];d(t.previousNode)&&(t.previousNode.nextNode=t.nextNode),d(t.nextNode)&&(t.nextNode.previousNode=t.previousNode),t.nextNode=this.emptyList,d(t.nextNode)&&(t.nextNode.previousNode=t),t.previousNode=void 0,this.emptyList=t,this.occupiedCount--};cg.prototype.isFull=function(){return this.emptyList===void 0};cg.getApproximateTextureMemoryByteLength=function(e,t,n,i){i===tn.UNSIGNED_SHORT&&(i=tn.FLOAT32);let o=tn.getSizeInBytes(i),r=e*t.x*t.y*t.z,s=Math.ceil(Math.sqrt(t.z)),a=Math.ceil(t.z/s),c=s*t.x,l=a*t.y,u=W.previousPowerOfTwo(Math.floor(Math.sqrt(r)));for(;;){let p=Math.floor(u/c),y=Math.floor(u/l);if(p*y>=e)break;u*=2}return u*u*n*o};cg.prototype.writeDataToTexture=function(e,t){let n=t.constructor===Uint16Array?new Float32Array(t):t,i=this.voxelCountPerTile,o=this.sliceCountPerRegion,r=this.voxelCountPerRegion,s=this.channelCount,a=this.tileVoxelDataTemp;for(let x=0;x<i.z;x++){let _=x%o.x*i.x,C=Math.floor(x/o.x)*i.y;for(let V=0;V<i.y;V++)for(let L=0;L<i.x;L++){let Z=x*i.y*i.x+V*i.x+L,G=(C+V)*r.x+(_+L);for(let X=0;X<s;X++)a[G*s+X]=n[Z*s+X]}}let c=this.regionCountPerMegatexture,l=r.x,u=r.y,m=e%c.x*r.x,p=Math.floor(e/c.x)*r.y,f={source:{arrayBufferView:a,width:l,height:u},xOffset:m,yOffset:p};this.texture.copyFrom(f)};cg.prototype.isDestroyed=function(){return!1};cg.prototype.destroy=function(){return this.texture=this.texture&&this.texture.destroy(),ue(this)};var PV=cg;var RBi=T(S(),1);function pj(e){}pj.prototype.isReady=function(){return!0};pj.prototype.shouldDiscardImage=function(e){return!1};var bj=pj;var wBi=T(S(),1);var Hpt=new St("MapQuest, Open Street Map and contributors, CC-BY-SA");function sD(e){e=g(e,g.EMPTY_OBJECT);let t=Ee.createIfNeeded(g(e.url,"https://tile.openstreetmap.org/"));t.appendForwardSlash(),t.url+=`{z}/{x}/{y}${e.retinaTiles?"@2x":""}.${g(e.fileExtension,"png")}`;let n=new kr({ellipsoid:e.ellipsoid}),i=256,o=256,r=g(e.minimumLevel,0),s=e.maximumLevel,a=g(e.rectangle,n.rectangle),c=n.positionToTileXY(de.southwest(a),r),l=n.positionToTileXY(de.northeast(a),r),u=(Math.abs(l.x-c.x)+1)*(Math.abs(l.y-c.y)+1),m=g(e.credit,Hpt);typeof m=="string"&&(m=new St(m)),Ca.call(this,{url:t,credit:m,tilingScheme:n,tileWidth:i,tileHeight:o,minimumLevel:r,maximumLevel:s,rectangle:a})}d(Object.create)&&(sD.prototype=Object.create(Ca.prototype),sD.prototype.constructor=sD);var z0=sD;var DBi=T(S(),1);var zpt=new D(1,1);function yj(e){e=g(e,g.EMPTY_OBJECT),this.mass=g(e.mass,1),this.position=h.clone(g(e.position,h.ZERO)),this.velocity=h.clone(g(e.velocity,h.ZERO)),this.life=g(e.life,Number.MAX_VALUE),this.image=e.image,this.startColor=Y.clone(g(e.startColor,Y.WHITE)),this.endColor=Y.clone(g(e.endColor,Y.WHITE)),this.startScale=g(e.startScale,1),this.endScale=g(e.endScale,1),this.imageSize=D.clone(g(e.imageSize,zpt)),this._age=0,this._normalizedAge=0,this._billboard=void 0}Object.defineProperties(yj.prototype,{age:{get:function(){return this._age}},normalizedAge:{get:function(){return this._normalizedAge}}});var nxe=new h;yj.prototype.update=function(e,t){return h.multiplyByScalar(this.velocity,e,nxe),h.add(this.position,nxe,this.position),d(t)&&t(this,e),this._age+=e,this.life===Number.MAX_VALUE?this._normalizedAge=0:this._normalizedAge=this._age/this.life,this._age<=this.life};var vV=yj;var OBi=T(S(),1);function ixe(e){e=g(e,g.EMPTY_OBJECT),this.time=g(e.time,0),this.minimum=g(e.minimum,0),this.maximum=g(e.maximum,50),this._complete=!1}Object.defineProperties(ixe.prototype,{complete:{get:function(){return this._complete}}});var gj=ixe;var zBi=T(S(),1);function oxe(e){}oxe.prototype.emit=function(e){fe.throwInstantiationError()};var xj=oxe;var l3i=T(S(),1);var rxe=new D(1,1);function XF(e){e=g(e,g.EMPTY_OBJECT),this.show=g(e.show,!0),this.updateCallback=e.updateCallback,this.loop=g(e.loop,!0),this.image=g(e.image,void 0);let t=e.emitter;d(t)||(t=new _F(.5)),this._emitter=t,this._bursts=e.bursts,this._modelMatrix=A.clone(g(e.modelMatrix,A.IDENTITY)),this._emitterModelMatrix=A.clone(g(e.emitterModelMatrix,A.IDENTITY)),this._matrixDirty=!0,this._combinedMatrix=new A,this._startColor=Y.clone(g(e.color,g(e.startColor,Y.WHITE))),this._endColor=Y.clone(g(e.color,g(e.endColor,Y.WHITE))),this._startScale=g(e.scale,g(e.startScale,1)),this._endScale=g(e.scale,g(e.endScale,1)),this._emissionRate=g(e.emissionRate,5),this._minimumSpeed=g(e.speed,g(e.minimumSpeed,1)),this._maximumSpeed=g(e.speed,g(e.maximumSpeed,1)),this._minimumParticleLife=g(e.particleLife,g(e.minimumParticleLife,5)),this._maximumParticleLife=g(e.particleLife,g(e.maximumParticleLife,5)),this._minimumMass=g(e.mass,g(e.minimumMass,1)),this._maximumMass=g(e.mass,g(e.maximumMass,1)),this._minimumImageSize=D.clone(g(e.imageSize,g(e.minimumImageSize,rxe))),this._maximumImageSize=D.clone(g(e.imageSize,g(e.maximumImageSize,rxe))),this._sizeInMeters=g(e.sizeInMeters,!1),this._lifetime=g(e.lifetime,Number.MAX_VALUE),this._billboardCollection=void 0,this._particles=[],this._particlePool=[],this._previousTime=void 0,this._currentTime=0,this._carryOver=0,this._complete=new ye,this._isComplete=!1,this._updateParticlePool=!0,this._particleEstimate=0}Object.defineProperties(XF.prototype,{emitter:{get:function(){return this._emitter},set:function(e){this._emitter=e}},bursts:{get:function(){return this._bursts},set:function(e){this._bursts=e,this._updateParticlePool=!0}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._matrixDirty=this._matrixDirty||!A.equals(this._modelMatrix,e),A.clone(e,this._modelMatrix)}},emitterModelMatrix:{get:function(){return this._emitterModelMatrix},set:function(e){this._matrixDirty=this._matrixDirty||!A.equals(this._emitterModelMatrix,e),A.clone(e,this._emitterModelMatrix)}},startColor:{get:function(){return this._startColor},set:function(e){Y.clone(e,this._startColor)}},endColor:{get:function(){return this._endColor},set:function(e){Y.clone(e,this._endColor)}},startScale:{get:function(){return this._startScale},set:function(e){this._startScale=e}},endScale:{get:function(){return this._endScale},set:function(e){this._endScale=e}},emissionRate:{get:function(){return this._emissionRate},set:function(e){this._emissionRate=e,this._updateParticlePool=!0}},minimumSpeed:{get:function(){return this._minimumSpeed},set:function(e){this._minimumSpeed=e}},maximumSpeed:{get:function(){return this._maximumSpeed},set:function(e){this._maximumSpeed=e}},minimumParticleLife:{get:function(){return this._minimumParticleLife},set:function(e){this._minimumParticleLife=e}},maximumParticleLife:{get:function(){return this._maximumParticleLife},set:function(e){this._maximumParticleLife=e,this._updateParticlePool=!0}},minimumMass:{get:function(){return this._minimumMass},set:function(e){this._minimumMass=e}},maximumMass:{get:function(){return this._maximumMass},set:function(e){this._maximumMass=e}},minimumImageSize:{get:function(){return this._minimumImageSize},set:function(e){this._minimumImageSize=e}},maximumImageSize:{get:function(){return this._maximumImageSize},set:function(e){this._maximumImageSize=e}},sizeInMeters:{get:function(){return this._sizeInMeters},set:function(e){this._sizeInMeters=e}},lifetime:{get:function(){return this._lifetime},set:function(e){this._lifetime=e}},complete:{get:function(){return this._complete}},isComplete:{get:function(){return this._isComplete}}});function Jpt(e){let t=e._emissionRate,n=e._maximumParticleLife,i=0,o=e._bursts;if(d(o)){let m=o.length;for(let p=0;p<m;++p)i+=o[p].maximum}let r=e._billboardCollection,s=e.image,a=Math.ceil(t*n+i),c=e._particles,l=e._particlePool,u=Math.max(a-c.length-l.length,0);for(let m=0;m<u;++m){let p=new vV;p._billboard=r.add({image:s,show:!1}),l.push(p)}e._particleEstimate=a}function Qpt(e){let t=e._particlePool.pop();return d(t)||(t=new vV),t}function jpt(e,t){e._particlePool.push(t)}function qpt(e){let t=e._particles,n=e._particlePool,i=e._billboardCollection,o=t.length,r=n.length,s=e._particleEstimate,a=r-Math.max(s-o-r,0);for(let c=a;c<r;++c){let l=n[c];i.remove(l._billboard)}n.length=a}function $pt(e){d(e._billboard)&&(e._billboard.show=!1)}function sxe(e,t){let n=t._billboard;d(n)||(n=t._billboard=e._billboardCollection.add({image:t.image})),n.width=t.imageSize.x,n.height=t.imageSize.y,n.position=t.position,n.sizeInMeters=e.sizeInMeters,n.show=!0;let i=W.lerp(t.startColor.red,t.endColor.red,t.normalizedAge),o=W.lerp(t.startColor.green,t.endColor.green,t.normalizedAge),r=W.lerp(t.startColor.blue,t.endColor.blue,t.normalizedAge),s=W.lerp(t.startColor.alpha,t.endColor.alpha,t.normalizedAge);n.color=new Y(i,o,r,s),n.scale=W.lerp(t.startScale,t.endScale,t.normalizedAge)}function e0t(e,t){t.startColor=Y.clone(e._startColor,t.startColor),t.endColor=Y.clone(e._endColor,t.endColor),t.startScale=e._startScale,t.endScale=e._endScale,t.image=e.image,t.life=W.randomBetween(e._minimumParticleLife,e._maximumParticleLife),t.mass=W.randomBetween(e._minimumMass,e._maximumMass),t.imageSize.x=W.randomBetween(e._minimumImageSize.x,e._maximumImageSize.x),t.imageSize.y=W.randomBetween(e._minimumImageSize.y,e._maximumImageSize.y),t._normalizedAge=0,t._age=0;let n=W.randomBetween(e._minimumSpeed,e._maximumSpeed);h.multiplyByScalar(t.velocity,n,t.velocity),e._particles.push(t)}function t0t(e,t){if(e._isComplete)return 0;t=W.mod(t,e._lifetime);let n=t*e._emissionRate,i=Math.floor(n);if(e._carryOver+=n-i,e._carryOver>1&&(i++,e._carryOver-=1),d(e.bursts)){let o=e.bursts.length;for(let r=0;r<o;r++){let s=e.bursts[r],a=e._currentTime;d(s)&&!s._complete&&a>s.time&&(i+=W.randomBetween(s.minimum,s.maximum),s._complete=!0)}}return i}var aD=new h;XF.prototype.update=function(e){if(!this.show)return;d(this._billboardCollection)||(this._billboardCollection=new nd),this._updateParticlePool&&(Jpt(this),this._updateParticlePool=!1);let t=0;this._previousTime&&(t=te.secondsDifference(e.time,this._previousTime)),t<0&&(t=0);let n=this._particles,i=this._emitter,o=this.updateCallback,r,s,a=n.length;for(r=0;r<a;++r)s=n[r],s.update(t,o)?sxe(this,s):($pt(s),jpt(this,s),n[r]=n[a-1],--r,--a);n.length=a;let c=t0t(this,t);if(c>0&&d(i)){this._matrixDirty&&(this._combinedMatrix=A.multiply(this.modelMatrix,this.emitterModelMatrix,this._combinedMatrix),this._matrixDirty=!1);let l=this._combinedMatrix;for(r=0;r<c;r++)s=Qpt(this),this._emitter.emit(s),h.add(s.position,s.velocity,aD),A.multiplyByPoint(l,aD,aD),s.position=A.multiplyByPoint(l,s.position,s.position),h.subtract(aD,s.position,s.velocity),h.normalize(s.velocity,s.velocity),e0t(this,s),sxe(this,s)}if(this._billboardCollection.update(e),this._previousTime=te.clone(e.time,this._previousTime),this._currentTime+=t,this._lifetime!==Number.MAX_VALUE&&this._currentTime>this._lifetime)if(this.loop){if(this._currentTime=W.mod(this._currentTime,this._lifetime),this.bursts){let l=this.bursts.length;for(r=0;r<l;r++)this.bursts[r]._complete=!1}}else this._isComplete=!0,this._complete.raiseEvent(this);e.frameNumber%120===0&&qpt(this)};XF.prototype.isDestroyed=function(){return!1};XF.prototype.destroy=function(){return this._billboardCollection=this._billboardCollection&&this._billboardCollection.destroy(),ue(this)};var _j=XF;var j3i=T(S(),1);var lxe=T(oA(),1);var u3i=T(S(),1);function n0t(e,t,n){return` float clipDistance = clip(gl_FragCoord, ${e}, ${t});
  11132. vec4 clippingPlanesEdgeColor = vec4(1.0);
  11133. clippingPlanesEdgeColor.rgb = ${n}.rgb;
  11134. float clippingPlanesEdgeWidth = ${n}.a;
  11135. if (clipDistance > 0.0 && clipDistance < clippingPlanesEdgeWidth)
  11136. {
  11137. out_FragColor = clippingPlanesEdgeColor;
  11138. }
  11139. `}var IF=n0t;var f3i=T(S(),1);var i0t={modifyFragmentShader:function(t){return t=Ye.replaceMain(t,"czm_splitter_main"),t+=`uniform float czm_splitDirection;
  11140. void main()
  11141. {
  11142. #ifndef SHADOW_MAP
  11143. if (czm_splitDirection < 0.0 && gl_FragCoord.x > czm_splitPosition) discard;
  11144. if (czm_splitDirection > 0.0 && gl_FragCoord.x < czm_splitPosition) discard;
  11145. #endif
  11146. czm_splitter_main();
  11147. }
  11148. `,t},addUniforms:function(t,n){n.czm_splitDirection=function(){return t.splitDirection}}},wV=i0t;var XT={NEEDS_DECODE:0,DECODING:1,READY:2,FAILED:3};function WF(e){this._parsedContent=void 0,this._drawCommand=void 0,this._isTranslucent=!1,this._styleTranslucent=!1,this._constantColor=Y.clone(Y.DARKGRAY),this._highlightColor=Y.clone(Y.WHITE),this._pointSize=1,this._rtcCenter=void 0,this._quantizedVolumeScale=void 0,this._quantizedVolumeOffset=void 0,this._styleableShaderAttributes=void 0,this._isQuantized=!1,this._isOctEncoded16P=!1,this._isRGB565=!1,this._hasColors=!1,this._hasNormals=!1,this._hasBatchIds=!1,this._decodingState=XT.READY,this._dequantizeInShader=!0,this._isQuantizedDraco=!1,this._isOctEncodedDraco=!1,this._quantizedRange=0,this._octEncodedRange=0,this.backFaceCulling=!1,this._backFaceCulling=!1,this.normalShading=!0,this._normalShading=!0,this._opaqueRenderState=void 0,this._translucentRenderState=void 0,this._mode=void 0,this._ready=!1,this._pointsLength=0,this._geometryByteLength=0,this._vertexShaderLoaded=e.vertexShaderLoaded,this._fragmentShaderLoaded=e.fragmentShaderLoaded,this._uniformMapLoaded=e.uniformMapLoaded,this._batchTableLoaded=e.batchTableLoaded,this._pickIdLoaded=e.pickIdLoaded,this._opaquePass=g(e.opaquePass,Re.OPAQUE),this._cull=g(e.cull,!0),this.style=void 0,this._style=void 0,this.styleDirty=!1,this.modelMatrix=A.clone(A.IDENTITY),this._modelMatrix=A.clone(A.IDENTITY),this.time=0,this.shadows=xn.ENABLED,this._boundingSphere=void 0,this.clippingPlanes=void 0,this.isClipped=!1,this.clippingPlanesDirty=!1,this.clippingPlanesOriginMatrix=void 0,this.attenuation=!1,this._attenuation=!1,this.geometricError=0,this.geometricErrorScale=1,this.maximumAttenuation=this._pointSize,this.splitDirection=g(e.splitDirection,Pc.NONE),this._splittingEnabled=!1,this._error=void 0,o0t(this,e)}Object.defineProperties(WF.prototype,{pointsLength:{get:function(){return this._pointsLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},ready:{get:function(){return this._ready}},color:{get:function(){return Y.clone(this._highlightColor)},set:function(e){this._highlightColor=Y.clone(e,this._highlightColor)}},boundingSphere:{get:function(){if(d(this._drawCommand))return this._drawCommand.boundingVolume},set:function(e){this._boundingSphere=ce.clone(e,this._boundingSphere)}}});function o0t(e,t){let n=Dx.parse(t.arrayBuffer,t.byteOffset);if(e._parsedContent=n,e._rtcCenter=n.rtcCenter,e._hasNormals=n.hasNormals,e._hasColors=n.hasColors,e._hasBatchIds=n.hasBatchIds,e._isTranslucent=n.isTranslucent,!n.hasBatchIds&&d(n.batchTableBinary)&&(n.styleableProperties=bp.getBinaryProperties(n.pointsLength,n.batchTableJson,n.batchTableBinary)),d(n.draco)){let a=n.draco;e._decodingState=XT.NEEDS_DECODE,a.dequantizeInShader=e._dequantizeInShader}let i=n.positions;d(i)&&(e._isQuantized=i.isQuantized,e._quantizedVolumeScale=i.quantizedVolumeScale,e._quantizedVolumeOffset=i.quantizedVolumeOffset,e._quantizedRange=i.quantizedRange);let o=n.normals;d(o)&&(e._isOctEncoded16P=o.octEncoded);let r=n.colors;d(r)&&(d(r.constantColor)&&(e._constantColor=Y.clone(r.constantColor,e._constantColor),e._hasColors=!1),e._isRGB565=r.isRGB565);let s=n.batchIds;d(n.batchIds)&&(s.name="BATCH_ID",s.semantic="BATCH_ID",s.setIndex=void 0),n.hasBatchIds&&e._batchTableLoaded(n.batchLength,n.batchTableJson,n.batchTableBinary),e._pointsLength=n.pointsLength}var r0t=new h,s0t=new h,a0t=new h,axe,cD;function c0t(e){if(!d(cD)){axe=new lxe.default(0),cD=new Array(e);for(let t=0;t<e;++t)cD[t]=axe.random()}return cD}function l0t(e){let n=e.length/3,i=Math.min(n,20),o=c0t(20),r=Number.MAX_VALUE,s=-Number.MAX_VALUE,a=h.fromElements(r,r,r,r0t),c=h.fromElements(s,s,s,s0t);for(let u=0;u<i;++u){let m=Math.floor(o[u]*n),p=h.unpack(e,m*3,a0t);h.minimumByComponent(a,p,a),h.maximumByComponent(c,p,c)}let l=ce.fromCornerPoints(a,c);return l.radius+=W.EPSILON2,l}function cxe(e,t){let n=Q.fromTypedArray(e);return n===Q.INT||n===Q.UNSIGNED_INT||n===Q.DOUBLE?(Pt("Cast pnts property to floats",`Point cloud property "${t}" will be cast to a float array because INT, UNSIGNED_INT, and DOUBLE are not valid WebGL vertex attribute types. Some precision may be lost.`),new Float32Array(e)):e}var d0t=new se,u0t=new se,m0t=new Y,dxe=0,lD=1,Lj=2,uxe=3,h0t=4,Tj=new A,f0t=new A;function p0t(e,t){let n=t.context,i=e._parsedContent,o=e._pointsLength,r=i.positions,s=i.colors,a=i.normals,c=i.batchIds,l=i.styleableProperties,u=d(l),m=e._isQuantized,p=e._isQuantizedDraco,y=e._isOctEncoded16P,f=e._isOctEncodedDraco,x=e._quantizedRange,_=e._octEncodedRange,C=e._isRGB565,V=e._isTranslucent,L=e._hasColors,Z=e._hasNormals,G=e._hasBatchIds,X,P,v=[],F={};if(e._styleableShaderAttributes=F,u){let k=h0t;for(let O in l)if(l.hasOwnProperty(O)){let U=l[O],J=cxe(U.typedArray,O);X=U.componentCount,P=Q.fromTypedArray(J);let z=mt.createVertexBuffer({context:n,typedArray:J,usage:Ne.STATIC_DRAW});e._geometryByteLength+=z.sizeInBytes;let ee={index:k,vertexBuffer:z,componentsPerAttribute:X,componentDatatype:P,normalize:!1,offsetInBytes:0,strideInBytes:0};v.push(ee),F[O]={location:k,componentCount:X},++k}}let M=mt.createVertexBuffer({context:n,typedArray:r.typedArray,usage:Ne.STATIC_DRAW});e._geometryByteLength+=M.sizeInBytes;let b;L&&(b=mt.createVertexBuffer({context:n,typedArray:s.typedArray,usage:Ne.STATIC_DRAW}),e._geometryByteLength+=b.sizeInBytes);let R;Z&&(R=mt.createVertexBuffer({context:n,typedArray:a.typedArray,usage:Ne.STATIC_DRAW}),e._geometryByteLength+=R.sizeInBytes);let E;G&&(c.typedArray=cxe(c.typedArray,"batchIds"),E=mt.createVertexBuffer({context:n,typedArray:c.typedArray,usage:Ne.STATIC_DRAW}),e._geometryByteLength+=E.sizeInBytes);let I=[];if(m?P=Q.UNSIGNED_SHORT:p?P=x<=255?Q.UNSIGNED_BYTE:Q.UNSIGNED_SHORT:P=Q.FLOAT,I.push({index:dxe,vertexBuffer:M,componentsPerAttribute:3,componentDatatype:P,normalize:!1,offsetInBytes:0,strideInBytes:0}),e._cull&&(m||p?e._boundingSphere=ce.fromCornerPoints(h.ZERO,e._quantizedVolumeScale):e._boundingSphere=l0t(r.typedArray)),L)if(C)I.push({index:lD,vertexBuffer:b,componentsPerAttribute:1,componentDatatype:Q.UNSIGNED_SHORT,normalize:!1,offsetInBytes:0,strideInBytes:0});else{let k=V?4:3;I.push({index:lD,vertexBuffer:b,componentsPerAttribute:k,componentDatatype:Q.UNSIGNED_BYTE,normalize:!0,offsetInBytes:0,strideInBytes:0})}Z&&(y?(X=2,P=Q.UNSIGNED_BYTE):f?(X=2,P=_<=255?Q.UNSIGNED_BYTE:Q.UNSIGNED_SHORT):(X=3,P=Q.FLOAT),I.push({index:Lj,vertexBuffer:R,componentsPerAttribute:X,componentDatatype:P,normalize:!1,offsetInBytes:0,strideInBytes:0})),G&&I.push({index:uxe,vertexBuffer:E,componentsPerAttribute:1,componentDatatype:Q.fromTypedArray(c.typedArray),normalize:!1,offsetInBytes:0,strideInBytes:0}),u&&(I=I.concat(v));let w=new ti({context:n,attributes:I}),N={depthTest:{enabled:!0}},B={depthTest:{enabled:!0},depthMask:!1,blending:dn.ALPHA_BLEND};e._opaquePass===Re.CESIUM_3D_TILE&&(N.stencilTest=Ft.setCesium3DTileBit(),N.stencilMask=Ft.CESIUM_3D_TILE_MASK,B.stencilTest=Ft.setCesium3DTileBit(),B.stencilMask=Ft.CESIUM_3D_TILE_MASK),e._opaqueRenderState=De.fromCache(N),e._translucentRenderState=De.fromCache(B),e._drawCommand=new nt({boundingVolume:new ce,cull:e._cull,modelMatrix:new A,primitiveType:Fe.POINTS,vertexArray:w,count:o,shaderProgram:void 0,uniformMap:void 0,renderState:V?e._translucentRenderState:e._opaqueRenderState,pass:V?Re.TRANSLUCENT:e._opaquePass,owner:e,castShadows:!1,receiveShadows:!1,pickId:e._pickIdLoaded()})}function b0t(e,t){let n=t.context,i=e._isQuantized,o=e._isQuantizedDraco,r=e._isOctEncodedDraco,s={u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier:function(){let a=d0t;if(a.x=e._attenuation?e.maximumAttenuation:e._pointSize,a.x*=t.pixelRatio,a.y=e.time,e._attenuation){let c=t.camera.frustum,l;t.mode===ie.SCENE2D||c instanceof en?l=Number.POSITIVE_INFINITY:l=n.drawingBufferHeight/t.camera.frustum.sseDenominator,a.z=e.geometricError*e.geometricErrorScale,a.w=l}return a},u_highlightColor:function(){return e._highlightColor},u_constantColor:function(){return e._constantColor},u_clippingPlanes:function(){let a=e.clippingPlanes;return e.isClipped?a.texture:n.defaultTexture},u_clippingPlanesEdgeStyle:function(){let a=e.clippingPlanes;if(!d(a))return Y.TRANSPARENT;let c=Y.clone(a.edgeColor,m0t);return c.alpha=a.edgeWidth,c},u_clippingPlanesMatrix:function(){let a=e.clippingPlanes;if(!d(a))return A.IDENTITY;let c=g(e.clippingPlanesOriginMatrix,e._modelMatrix);A.multiply(n.uniformState.view3D,c,Tj);let l=A.multiply(Tj,a.modelMatrix,Tj);return A.inverseTranspose(l,f0t)}};wV.addUniforms(e,s),(i||o||r)&&(s=xt(s,{u_quantizedVolumeScaleAndOctEncodedRange:function(){let a=u0t;if(d(e._quantizedVolumeScale)){let c=h.clone(e._quantizedVolumeScale,a);h.divideByScalar(c,e._quantizedRange,a)}return a.w=e._octEncodedRange,a}})),d(e._uniformMapLoaded)&&(s=e._uniformMapLoaded(s)),e._drawCommand.uniformMap=s}function Sj(e,t){let n=/czm_3dtiles_property_(\d+)/g,i=n.exec(e);for(;i!==null;){let o=parseInt(i[1]);t.indexOf(o)===-1&&t.push(o),i=n.exec(e)}}function Cj(e,t){e=e.slice(e.indexOf(`
  11149. `));let n=/czm_3dtiles_builtin_property_(\w+)/g,i=n.exec(e);for(;i!==null;){let o=i[1];t.indexOf(o)===-1&&t.push(o),i=n.exec(e)}}function Vj(e,t){let n=e.numberOfAttributes;for(let i=0;i<n;++i){let o=e.getAttribute(i);if(o.index===t)return o}}var y0t={POSITION:"czm_3dtiles_builtin_property_POSITION",POSITION_ABSOLUTE:"czm_3dtiles_builtin_property_POSITION_ABSOLUTE",COLOR:"czm_3dtiles_builtin_property_COLOR",NORMAL:"czm_3dtiles_builtin_property_NORMAL"};function g0t(e,t,n){let i,o,r,s=t.context,a=d(n),c=e._isQuantized,l=e._isQuantizedDraco,u=e._isOctEncoded16P,m=e._isOctEncodedDraco,p=e._isRGB565,y=e._isTranslucent,f=e._hasColors,x=e._hasNormals,_=e._hasBatchIds,C=e._backFaceCulling,V=e._normalShading,L=e._drawCommand.vertexArray,Z=e.clippingPlanes,G=e._attenuation,X,P,v,F=y,M=Ke(y0t),b={},R=e._styleableShaderAttributes;for(o in R)R.hasOwnProperty(o)&&(r=R[o],M[o]=`czm_3dtiles_property_${r.location}`,b[r.location]=r);if(a){let ae={translucent:!1},xe="(vec3 czm_3dtiles_builtin_property_POSITION, vec3 czm_3dtiles_builtin_property_POSITION_ABSOLUTE, vec4 czm_3dtiles_builtin_property_COLOR, vec3 czm_3dtiles_builtin_property_NORMAL)";X=n.getColorShaderFunction(`getColorFromStyle${xe}`,M,ae),P=n.getShowShaderFunction(`getShowFromStyle${xe}`,M,ae),v=n.getPointSizeShaderFunction(`getPointSizeFromStyle${xe}`,M,ae),d(X)&&ae.translucent&&(F=!0)}e._styleTranslucent=F;let E=d(X),I=d(P),w=d(v),N=e.isClipped,B=[],k=[];E&&(Sj(X,B),Cj(X,k)),I&&(Sj(P,B),Cj(P,k)),w&&(Sj(v,B),Cj(v,k));let O=k.indexOf("COLOR")>=0,U=k.indexOf("NORMAL")>=0;if(U&&!x)throw new me("Style references the NORMAL semantic but the point cloud does not have normals");for(o in R)if(R.hasOwnProperty(o)){r=R[o];let ae=B.indexOf(r.location)>=0,xe=Vj(L,r.location);xe.enabled=ae}let J=f&&(!E||O);if(f){let ae=Vj(L,lD);ae.enabled=J}let z=x&&(V||C||U);if(x){let ae=Vj(L,Lj);ae.enabled=z}let ee={a_position:dxe};J&&(ee.a_color=lD),z&&(ee.a_normal=Lj),_&&(ee.a_batchId=uxe);let K="",j=B.length;for(i=0;i<j;++i){let ae=B[i];r=b[ae];let xe=r.componentCount,_e=`czm_3dtiles_property_${ae}`,Ve;xe===1?Ve="float":Ve=`vec${xe}`,K+=`in ${Ve} ${_e};
  11150. `,ee[_e]=r.location}b0t(e,t);let q=`in vec3 a_position;
  11151. out vec4 v_color;
  11152. uniform vec4 u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier;
  11153. uniform vec4 u_constantColor;
  11154. uniform vec4 u_highlightColor;
  11155. `;q+=`float u_pointSize;
  11156. float tiles3d_tileset_time;
  11157. `,G&&(q+=`float u_geometricError;
  11158. float u_depthMultiplier;
  11159. `),q+=K,J&&(y?q+=`in vec4 a_color;
  11160. `:p?q+=`in float a_color;
  11161. const float SHIFT_RIGHT_11 = 1.0 / 2048.0;
  11162. const float SHIFT_RIGHT_5 = 1.0 / 32.0;
  11163. const float SHIFT_LEFT_11 = 2048.0;
  11164. const float SHIFT_LEFT_5 = 32.0;
  11165. const float NORMALIZE_6 = 1.0 / 64.0;
  11166. const float NORMALIZE_5 = 1.0 / 32.0;
  11167. `:q+=`in vec3 a_color;
  11168. `),z&&(u||m?q+=`in vec2 a_normal;
  11169. `:q+=`in vec3 a_normal;
  11170. `),_&&(q+=`in float a_batchId;
  11171. `),(c||l||m)&&(q+=`uniform vec4 u_quantizedVolumeScaleAndOctEncodedRange;
  11172. `),E&&(q+=X),I&&(q+=P),w&&(q+=v),q+=`void main()
  11173. {
  11174. u_pointSize = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.x;
  11175. tiles3d_tileset_time = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.y;
  11176. `,G&&(q+=` u_geometricError = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.z;
  11177. u_depthMultiplier = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.w;
  11178. `),J?y?q+=` vec4 color = a_color;
  11179. `:p?q+=` float compressed = a_color;
  11180. float r = floor(compressed * SHIFT_RIGHT_11);
  11181. compressed -= r * SHIFT_LEFT_11;
  11182. float g = floor(compressed * SHIFT_RIGHT_5);
  11183. compressed -= g * SHIFT_LEFT_5;
  11184. float b = compressed;
  11185. vec3 rgb = vec3(r * NORMALIZE_5, g * NORMALIZE_6, b * NORMALIZE_5);
  11186. vec4 color = vec4(rgb, 1.0);
  11187. `:q+=` vec4 color = vec4(a_color, 1.0);
  11188. `:q+=` vec4 color = u_constantColor;
  11189. `,c||l?q+=` vec3 position = a_position * u_quantizedVolumeScaleAndOctEncodedRange.xyz;
  11190. `:q+=` vec3 position = a_position;
  11191. `,q+=` vec3 position_absolute = vec3(czm_model * vec4(position, 1.0));
  11192. `,z?(u?q+=` vec3 normal = czm_octDecode(a_normal);
  11193. `:m?q+=` vec3 normal = czm_octDecode(a_normal, u_quantizedVolumeScaleAndOctEncodedRange.w).zxy;
  11194. `:q+=` vec3 normal = a_normal;
  11195. `,q+=` vec3 normalEC = czm_normal * normal;
  11196. `):q+=` vec3 normal = vec3(1.0);
  11197. `,E&&(q+=` color = getColorFromStyle(position, position_absolute, color, normal);
  11198. `),I&&(q+=` float show = float(getShowFromStyle(position, position_absolute, color, normal));
  11199. `),w?q+=` gl_PointSize = getPointSizeFromStyle(position, position_absolute, color, normal) * czm_pixelRatio;
  11200. `:G?q+=` vec4 positionEC = czm_modelView * vec4(position, 1.0);
  11201. float depth = -positionEC.z;
  11202. gl_PointSize = min((u_geometricError / depth) * u_depthMultiplier, u_pointSize);
  11203. `:q+=` gl_PointSize = u_pointSize;
  11204. `,q+=` color = color * u_highlightColor;
  11205. `,z&&V&&(q+=` float diffuseStrength = czm_getLambertDiffuse(czm_lightDirectionEC, normalEC);
  11206. diffuseStrength = max(diffuseStrength, 0.4);
  11207. color.xyz *= diffuseStrength * czm_lightColor;
  11208. `),q+=` v_color = color;
  11209. gl_Position = czm_modelViewProjection * vec4(position, 1.0);
  11210. `,z&&C&&(q+=` float visible = step(-normalEC.z, 0.0);
  11211. gl_Position *= visible;
  11212. gl_PointSize *= visible;
  11213. `),I&&(q+=` gl_Position.w *= float(show);
  11214. gl_PointSize *= float(show);
  11215. `),q+=`}
  11216. `;let be=`in vec4 v_color;
  11217. `;N&&(be+=`uniform highp sampler2D u_clippingPlanes;
  11218. uniform mat4 u_clippingPlanesMatrix;
  11219. uniform vec4 u_clippingPlanesEdgeStyle;
  11220. `,be+=`
  11221. `,be+=P0(Z,s),be+=`
  11222. `),be+=`void main()
  11223. {
  11224. out_FragColor = czm_gammaCorrect(v_color);
  11225. `,N&&(be+=IF("u_clippingPlanes","u_clippingPlanesMatrix","u_clippingPlanesEdgeStyle")),be+=`}
  11226. `,e.splitDirection!==Pc.NONE&&(be=wV.modifyFragmentShader(be)),d(e._vertexShaderLoaded)&&(q=e._vertexShaderLoaded(q)),d(e._fragmentShaderLoaded)&&(be=e._fragmentShaderLoaded(be));let Te=e._drawCommand;d(Te.shaderProgram)&&Te.shaderProgram.destroy(),Te.shaderProgram=Qt.fromCache({context:s,vertexShaderSource:q,fragmentShaderSource:be,attributeLocations:ee});try{Te.shaderProgram._bind()}catch{throw new me("Error generating style shader: this may be caused by a type mismatch, index out-of-bounds, or other syntax error.")}}function x0t(e,t){if(e._decodingState===XT.READY)return!1;if(e._decodingState===XT.NEEDS_DECODE){let n=e._parsedContent,i=n.draco,o=Vp.decodePointCloud(i,t);d(o)&&(e._decodingState=XT.DECODING,o.then(function(r){e._decodingState=XT.READY;let s=d(r.POSITION)?r.POSITION.array:void 0,a=d(r.RGB)?r.RGB.array:void 0,c=d(r.RGBA)?r.RGBA.array:void 0,l=d(r.NORMAL)?r.NORMAL.array:void 0,u=d(r.BATCH_ID)?r.BATCH_ID.array:void 0,m=d(s)&&d(r.POSITION.data.quantization),p=d(l)&&d(r.NORMAL.data.quantization);if(m){let _=r.POSITION.data.quantization,C=_.range;e._quantizedVolumeScale=h.fromElements(C,C,C),e._quantizedVolumeOffset=h.unpack(_.minValues),e._quantizedRange=(1<<_.quantizationBits)-1,e._isQuantizedDraco=!0}p&&(e._octEncodedRange=(1<<r.NORMAL.data.quantization.quantizationBits)-1,e._isOctEncodedDraco=!0);let y=n.styleableProperties,f=i.batchTableProperties;for(let _ in f)if(f.hasOwnProperty(_)){let C=r[_];d(y)||(y={}),y[_]={typedArray:C.array,componentCount:C.data.componentsPerAttribute}}d(s)&&(n.positions={typedArray:s});let x=g(c,a);d(x)&&(n.colors={typedArray:x}),d(l)&&(n.normals={typedArray:l}),d(u)&&(n.batchIds={typedArray:u}),n.styleableProperties=y}).catch(function(r){e._decodingState=XT.FAILED,e._error=r}))}return!0}var _0t=new se,T0t=new h;WF.prototype.update=function(e){let t=e.context;if(d(this._error)){let l=this._error;throw this._error=void 0,l}if(x0t(this,t))return;let i=!1,o=!A.equals(this._modelMatrix,this.modelMatrix);if(this._mode!==e.mode&&(this._mode=e.mode,o=!0),d(this._drawCommand)||(p0t(this,e),o=!0,i=!0,this._ready=!0,this._parsedContent=void 0),o){A.clone(this.modelMatrix,this._modelMatrix);let l=this._drawCommand.modelMatrix;if(A.clone(this._modelMatrix,l),d(this._rtcCenter)&&A.multiplyByTranslation(l,this._rtcCenter,l),d(this._quantizedVolumeOffset)&&A.multiplyByTranslation(l,this._quantizedVolumeOffset,l),e.mode!==ie.SCENE3D){let m=e.mapProjection,p=A.getColumn(l,3,_0t);se.equals(p,se.UNIT_W)||vt.basisTo2D(m,l,l)}let u=this._drawCommand.boundingVolume;if(ce.clone(this._boundingSphere,u),this._cull){let m=u.center;A.multiplyByPoint(l,m,m);let p=A.getScale(l,T0t);u.radius*=h.maximumComponent(p)}}this.clippingPlanesDirty&&(this.clippingPlanesDirty=!1,i=!0),this._attenuation!==this.attenuation&&(this._attenuation=this.attenuation,i=!0),this.backFaceCulling!==this._backFaceCulling&&(this._backFaceCulling=this.backFaceCulling,i=!0),this.normalShading!==this._normalShading&&(this._normalShading=this.normalShading,i=!0),(this._style!==this.style||this.styleDirty)&&(this._style=this.style,this.styleDirty=!1,i=!0);let r=this.splitDirection!==Pc.NONE;this._splittingEnabled!==r&&(this._splittingEnabled=r,i=!0),i&&g0t(this,e,this._style),this._drawCommand.castShadows=xn.castShadows(this.shadows),this._drawCommand.receiveShadows=xn.receiveShadows(this.shadows);let s=this._highlightColor.alpha<1||this._constantColor.alpha<1||this._styleTranslucent;this._drawCommand.renderState=s?this._translucentRenderState:this._opaqueRenderState,this._drawCommand.pass=s?Re.TRANSLUCENT:this._opaquePass;let a=e.commandList,c=e.passes;(c.render||c.pick)&&a.push(this._drawCommand)};WF.prototype.isDestroyed=function(){return!1};WF.prototype.destroy=function(){let e=this._drawCommand;return d(e)&&(e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy()),ue(this)};var PF=WF;var eYi=T(S(),1);function Ud(){fe.throwInstantiationError()}Ud.computeDefaultLevelZeroMaximumGeometricError=function(e){return e.ellipsoid.maximumRadius*2*Math.PI*.25/(65*e.getNumberOfXTilesAtLevel(0))};Object.defineProperties(Ud.prototype,{quadtree:{get:fe.throwInstantiationError,set:fe.throwInstantiationError},tilingScheme:{get:fe.throwInstantiationError},errorEvent:{get:fe.throwInstantiationError}});Ud.prototype.update=fe.throwInstantiationError;Ud.prototype.beginUpdate=fe.throwInstantiationError;Ud.prototype.endUpdate=fe.throwInstantiationError;Ud.prototype.getLevelMaximumGeometricError=fe.throwInstantiationError;Ud.prototype.loadTile=fe.throwInstantiationError;Ud.prototype.computeTileVisibility=fe.throwInstantiationError;Ud.prototype.showTileThisFrame=fe.throwInstantiationError;Ud.prototype.computeDistanceToTile=fe.throwInstantiationError;Ud.prototype.isDestroyed=fe.throwInstantiationError;Ud.prototype.destroy=fe.throwInstantiationError;var Rj=Ud;var dYi=T(S(),1);function Ju(e,t,n,i,o,r,s){this.children=void 0,this.parent=o,this.level=e,this.x=t,this.y=n,this.z=i,this.keyframeNodes=[],this.renderableKeyframeNodes=[],this.renderableKeyframeNodeLerp=0,this.renderableKeyframeNodePrevious=void 0,this.renderableKeyframeNodeNext=void 0,this.orientedBoundingBox=new Wn,this.approximateVoxelSize=0,this.screenSpaceError=0,this.visitedFrameNumber=-1,this.computeBoundingVolumes(r,s)}var S0t=new h;Ju.prototype.computeBoundingVolumes=function(e,t){this.orientedBoundingBox=e.computeOrientedBoundingBoxForTile(this.level,this.x,this.y,this.z,this.orientedBoundingBox);let n=$.getScale(this.orientedBoundingBox.halfAxes,S0t),i=2*h.maximumComponent(n);this.approximateVoxelSize=i/h.minimumComponent(t)};Ju.prototype.constructChildNodes=function(e,t){let{level:n,x:i,y:o,z:r}=this,s=i*2,a=o*2,c=r*2,l=a+1,u=s+1,m=c+1,p=n+1,y=[[p,s,a,c],[p,u,a,c],[p,s,l,c],[p,u,l,c],[p,s,a,m],[p,u,a,m],[p,s,l,m],[p,u,l,m]];this.children=y.map(([f,x,_,C])=>new Ju(f,x,_,C,this,e,t))};Ju.prototype.visibility=function(e,t){let n=this.orientedBoundingBox;return e.cullingVolume.computeVisibilityWithPlaneMask(n,t)};Ju.prototype.computeScreenSpaceError=function(e,t){let n=this.orientedBoundingBox,i=Math.sqrt(n.distanceSquaredTo(e));i=Math.max(i,W.EPSILON7);let o=this.approximateVoxelSize,r=t*(o/i);this.screenSpaceError=r};var mxe={keyframe:0};function vF(e,t){return mxe.keyframe=e,Lo(t,mxe,Qi.searchComparator)}Ju.prototype.computeSurroundingRenderableKeyframeNodes=function(e){let t=this,n=t.level,i=Math.floor(e),o=Math.ceil(e),r,s,a=+Number.MAX_VALUE,c=+Number.MAX_VALUE;for(;d(t);){let{renderableKeyframeNodes:m}=t;if(m.length>=1){let p=C0t(i,m),y=m[p],f=o===i||i<y.keyframe?p:Math.min(p+1,m.length-1),x=m[f],_=i-y.keyframe,C=hxe(n-t.level,_);C<a&&(a=C,r=y);let V=x.keyframe-o,L=hxe(n-t.level,V);if(L<c&&(c=L,s=x),_===0&&V===0)break}t=t.parent}if(this.renderableKeyframeNodePrevious=r,this.renderableKeyframeNodeNext=s,!d(r)||!d(s))return;let l=r.keyframe,u=s.keyframe;this.renderableKeyframeNodeLerp=l===u?0:W.clamp((e-l)/(u-l),0,1)};function C0t(e,t){let n=vF(e,t);return n<0?W.clamp(~n-1,0,t.length-1):n}function hxe(e,t){let n=Math.exp(e*4),i=t>=0?1:-200;return e*n+t*i}Ju.prototype.isVisited=function(e){return this.visitedFrameNumber===e};Ju.prototype.createKeyframeNode=function(e){let t=vF(e,this.keyframeNodes);if(t<0){t=~t;let n=new Qi(this,e);this.keyframeNodes.splice(t,0,n)}};Ju.prototype.destroyKeyframeNode=function(e,t){let n=e.keyframe,i=vF(n,this.keyframeNodes);if(i<0)throw new fe("Keyframe node does not exist.");if(this.keyframeNodes.splice(i,1),e.megatextureIndex!==-1){for(let r=0;r<t.length;r++)t[r].remove(e.megatextureIndex);let o=vF(n,this.renderableKeyframeNodes);if(o<0)throw new fe("Renderable keyframe node does not exist.");this.renderableKeyframeNodes.splice(o,1)}e.spatialNode=void 0,e.state=Qi.LoadState.UNLOADED,e.metadatas={},e.megatextureIndex=-1,e.priority=-Number.MAX_VALUE,e.highPriorityFrameNumber=-1};Ju.prototype.addKeyframeNodeToMegatextures=function(e,t){if(e.state!==Qi.LoadState.RECEIVED||e.megatextureIndex!==-1||e.metadatas.length!==t.length)throw new fe("Keyframe node cannot be added to megatexture");for(let o=0;o<t.length;o++){let r=t[o];e.megatextureIndex=r.add(e.metadatas[o]),e.metadatas[o]=void 0}e.state=Qi.LoadState.LOADED;let n=this.renderableKeyframeNodes,i=vF(e.keyframe,n);if(i>=0)throw new fe("Keyframe already renderable");i=~i,n.splice(i,0,e)};Ju.prototype.isRenderable=function(e){let t=this.renderableKeyframeNodePrevious,n=this.renderableKeyframeNodeNext,i=this.level;return d(t)&&d(n)&&(t.spatialNode.level===i||n.spatialNode.level===i)&&this.visitedFrameNumber===e};var wF=Ju;var pYi=T(S(),1);function Zj(e){e=g(e,1),this._radius=g(e,1)}Object.defineProperties(Zj.prototype,{radius:{get:function(){return this._radius},set:function(e){this._radius=e}}});Zj.prototype.emit=function(e){let t=W.randomBetween(0,W.TWO_PI),n=W.randomBetween(0,W.PI),i=W.randomBetween(0,this._radius),o=i*Math.cos(t)*Math.sin(n),r=i*Math.sin(t)*Math.sin(n),s=i*Math.cos(n);e.position=h.fromElements(o,r,s,e.position),e.velocity=h.normalize(e.position,e.velocity)};var Gj=Zj;var gYi=T(S(),1);function FF(){}FF.prototype.evaluate=function(e,t){fe.throwInstantiationError()};FF.prototype.evaluateColor=function(e,t){fe.throwInstantiationError()};FF.prototype.getShaderFunction=function(e,t,n,i){fe.throwInstantiationError()};FF.prototype.getVariables=function(){fe.throwInstantiationError()};var Ej=FF;var SYi=T(S(),1);function dD(e){this._ready=!1,this._provider=void 0,this._errorEvent=new ye,this._readyEvent=new ye,L0t(this,e)}Object.defineProperties(dD.prototype,{errorEvent:{get:function(){return this._errorEvent}},readyEvent:{get:function(){return this._readyEvent}},ready:{get:function(){return this._ready}},provider:{get:function(){return this._provider}}});dD.fromWorldTerrain=function(e){return new dD(eT(e))};function V0t(e,t){e.numberOfListeners>0?e.raiseEvent(t):console.error(t)}async function L0t(e,t){let n;try{n=await Promise.resolve(t),e._provider=n,e._ready=!0,e._readyEvent.raiseEvent(n)}catch(i){V0t(e._errorEvent,i)}}var AF=dD;var LYi=T(S(),1);function FV(){}FV.prototype.boundingVolume=void 0;FV.prototype.boundingSphere=void 0;FV.prototype.distanceToCamera=function(e){fe.throwInstantiationError()};FV.prototype.intersectPlane=function(e){fe.throwInstantiationError()};FV.prototype.createDebugVolume=function(e){fe.throwInstantiationError()};var Xj=FV;var WYi=T(S(),1);function MF(e){e=g(e,g.EMPTY_OBJECT),this._tilingScheme=d(e.tilingScheme)?e.tilingScheme:new Di({ellipsoid:e.ellipsoid}),this._color=g(e.color,Y.YELLOW),this._errorEvent=new ye,this._tileWidth=g(e.tileWidth,256),this._tileHeight=g(e.tileHeight,256),this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0}Object.defineProperties(MF.prototype,{proxy:{get:function(){}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){}},minimumLevel:{get:function(){}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){}},hasAlphaChannel:{get:function(){return!0}}});MF.prototype.getTileCredits=function(e,t,n){};MF.prototype.requestImage=function(e,t,n,i){let o=document.createElement("canvas");o.width=256,o.height=256;let r=o.getContext("2d"),s=this._color.toCssColorString();return r.strokeStyle=s,r.lineWidth=2,r.strokeRect(1,1,255,255),r.font="bold 25px Arial",r.textAlign="center",r.fillStyle=s,r.fillText(`L: ${n}`,124,86),r.fillText(`X: ${e}`,124,136),r.fillText(`Y: ${t}`,124,186),Promise.resolve(o)};MF.prototype.pickFeatures=function(e,t,n,i,o){};var NF=MF;var wYi=T(S(),1);function Ij(e){fe.throwInstantiationError()}Ij.prototype.isReady=fe.throwInstantiationError;Ij.prototype.shouldDiscardImage=fe.throwInstantiationError;var Wj=Ij;var AYi=T(S(),1),R0t={START:0,LOADING:1,READY:2,UPSAMPLED_ONLY:3},Pj=Object.freeze(R0t);var tOi=T(S(),1);function WT(e){e=g(e,g.EMPTY_OBJECT),this.show=g(e.show,!0),this.modelMatrix=A.clone(g(e.modelMatrix,A.IDENTITY)),this.shadows=g(e.shadows,xn.ENABLED),this.maximumMemoryUsage=g(e.maximumMemoryUsage,256),this.shading=new Kh(e.shading),this.style=e.style,this.frameFailed=new ye,this.frameChanged=new ye,this._clock=e.clock,this._intervals=e.intervals,this._clippingPlanes=void 0,this.clippingPlanes=e.clippingPlanes,this._pointCloudEyeDomeLighting=new Xp,this._loadTimestamp=void 0,this._clippingPlanesState=0,this._styleDirty=!1,this._pickId=void 0,this._totalMemoryUsageInBytes=0,this._frames=[],this._previousInterval=void 0,this._nextInterval=void 0,this._lastRenderedFrame=void 0,this._clockMultiplier=0,this._runningSum=0,this._runningLength=0,this._runningIndex=0,this._runningSamples=new Array(5).fill(0),this._runningAverage=0}Object.defineProperties(WT.prototype,{clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){rs.setOwner(e,this,"_clippingPlanes")}},totalMemoryUsageInBytes:{get:function(){return this._totalMemoryUsageInBytes}},boundingSphere:{get:function(){if(d(this._lastRenderedFrame))return this._lastRenderedFrame.pointCloud.boundingSphere}}});function Z0t(e){return`uniform vec4 czm_pickColor;
  11227. ${e}`}function G0t(e){return function(t){return xt(t,{czm_pickColor:function(){return e._pickId.color}})}}function E0t(){return"czm_pickColor"}WT.prototype.makeStyleDirty=function(){this._styleDirty=!0};WT.prototype._getAverageLoadTime=function(){return this._runningLength===0?.05:this._runningAverage};var X0t=new te;function wj(e){let t=e._clock,n=t.canAnimate&&t.shouldAnimate,i=t.multiplier;return n?i:0}function IT(e,t){return e._intervals.indexOf(t.start)}function I0t(e,t){let n=e._intervals,i=e._clock,o=wj(e);if(o===0)return;let r=e._getAverageLoadTime(),s=te.addSeconds(i.currentTime,r*o,X0t),a=n.indexOf(s),c=IT(e,t);return a===c&&(o>=0?++a:--a),n.get(a)}function W0t(e){let t=e._intervals,i=e._clock.currentTime,o=t.indexOf(i);return t.get(o)}function P0t(e,t,n){let i=wj(e),o=IT(e,t),r=IT(e,n);return i>=0?o>=r:o<=r}function pxe(e,t){return function(n){let i=d(n.message)?n.message:n.toString();e.frameFailed.numberOfListeners>0?e.frameFailed.raiseEvent({uri:t,message:i}):(console.log(`A frame failed to load: ${t}`),console.log(`Error: ${i}`))}}function v0t(e,t,n){let i=IT(e,t),o=e._frames,r=o[i];if(!d(r)){let s=t.data.transform,a=d(s)?A.fromArray(s):void 0,c=t.data.uri;r={pointCloud:void 0,transform:a,timestamp:gi(),sequential:!0,ready:!1,touchedFrameNumber:n.frameNumber,uri:c},o[i]=r,Ee.fetchArrayBuffer({url:c}).then(function(l){r.pointCloud=new PF({arrayBuffer:l,cull:!0,fragmentShaderLoaded:Z0t,uniformMapLoaded:G0t(e),pickIdLoaded:E0t})}).catch(pxe(e,c))}return r}function w0t(e,t){e._runningSum+=t,e._runningSum-=e._runningSamples[e._runningIndex],e._runningSamples[e._runningIndex]=t,e._runningLength=Math.min(e._runningLength+1,e._runningSamples.length),e._runningIndex=(e._runningIndex+1)%e._runningSamples.length,e._runningAverage=e._runningSum/e._runningLength}function F0t(e,t,n,i){t.touchedFrameNumber<i.frameNumber-1&&(t.sequential=!1);let o=t.pointCloud;if(d(o)&&!t.ready){let r=i.commandList,s=r.length;if(bxe(e,t,n,i),o.ready&&(t.ready=!0,e._totalMemoryUsageInBytes+=o.geometryByteLength,r.length=s,t.sequential)){let a=(gi()-t.timestamp)/1e3;w0t(e,a)}}t.touchedFrameNumber=i.frameNumber}var A0t=new A;function M0t(e,t){let n=e.shading;return d(n)&&d(n.baseResolution)?n.baseResolution:d(t.boundingSphere)?W.cbrt(t.boundingSphere.volume()/t.pointsLength):0}function N0t(e){let t=e.shading;return d(t)&&d(t.maximumAttenuation)?t.maximumAttenuation:10}var U0t=new Kh;function bxe(e,t,n,i){let o=g(e.shading,U0t),r=t.pointCloud,s=g(t.transform,A.IDENTITY);r.modelMatrix=A.multiplyTransformation(e.modelMatrix,s,A0t),r.style=e.style,r.time=n.timeSinceLoad,r.shadows=e.shadows,r.clippingPlanes=e._clippingPlanes,r.isClipped=n.isClipped,r.attenuation=o.attenuation,r.backFaceCulling=o.backFaceCulling,r.normalShading=o.normalShading,r.geometricError=M0t(e,r),r.geometricErrorScale=o.geometricErrorScale,r.maximumAttenuation=N0t(e);try{r.update(i)}catch(a){pxe(e,t.uri)(a)}t.touchedFrameNumber=i.frameNumber}function vj(e,t,n,i){let o=v0t(e,t,i);F0t(e,o,n,i)}function k0t(e){return function(t){return t.touchedFrameNumber<e.frameNumber}}function yxe(e,t){let n=e._frames,i=n.length;for(let o=0;o<i;++o){let r=n[o];if(d(r)&&(!d(t)||t(r))){let s=r.pointCloud;r.ready&&(e._totalMemoryUsageInBytes-=s.geometryByteLength),d(s)&&s.destroy(),r===e._lastRenderedFrame&&(e._lastRenderedFrame=void 0),n[o]=void 0}}}function D0t(e,t){let n=IT(e,t),i=e._frames[n];if(d(i)&&i.ready)return i}function fxe(e,t,n,i,o){return d(n)?n.ready?!0:(vj(e,t,i,o),n.ready):!1}function B0t(e,t,n,i,o){let r,s,a,c=e._intervals,l=e._frames,u=IT(e,n),m=IT(e,t);if(u>=m){for(r=u;r>=m;--r)if(s=c.get(r),a=l[r],fxe(e,s,a,i,o))return s}else for(r=u;r<=m;++r)if(s=c.get(r),a=l[r],fxe(e,s,a,i,o))return s;return t}function Y0t(e,t,n){let i=e._frames,o=i.length;for(let r=0;r<o;++r){let s=i[r];d(s)&&d(s.pointCloud)&&(s.pointCloud.clippingPlanesDirty=t,s.pointCloud.styleDirty=n)}}var AV={timeSinceLoad:0,isClipped:!1,clippingPlanesDirty:!1};WT.prototype.update=function(e){if(e.mode===ie.MORPHING||!this.show)return;d(this._pickId)||(this._pickId=e.context.createPickId({primitive:this})),d(this._loadTimestamp)||(this._loadTimestamp=te.clone(e.time));let t=Math.max(te.secondsDifference(e.time,this._loadTimestamp)*1e3,0),n=this._clippingPlanes,i=0,o=!1,r=d(n)&&n.enabled;r&&(n.update(e),i=n.clippingPlanesState),this._clippingPlanesState!==i&&(this._clippingPlanesState=i,o=!0);let s=this._styleDirty;this._styleDirty=!1,(o||s)&&Y0t(this,o,s),AV.timeSinceLoad=t,AV.isClipped=r;let a=this.shading,c=this._pointCloudEyeDomeLighting,l=e.commandList,u=l.length,m=this._previousInterval,p=this._nextInterval,y=W0t(this);if(!d(y))return;let f=!1,x=wj(this),_=x===0;x!==this._clockMultiplier&&(f=!0,this._clockMultiplier=x),(!d(m)||_)&&(m=y),(!d(p)||f||P0t(this,y,p))&&(p=I0t(this,y)),m=B0t(this,m,y,AV,e);let C=D0t(this,m);d(C)||(vj(this,m,AV,e),C=this._lastRenderedFrame),d(C)&&bxe(this,C,AV,e),d(p)&&vj(this,p,AV,e);let V=this;d(C)&&!d(this._lastRenderedFrame)&&e.afterRender.push(function(){return!0}),d(C)&&C!==this._lastRenderedFrame&&V.frameChanged.numberOfListeners>0&&e.afterRender.push(function(){return V.frameChanged.raiseEvent(V),!0}),this._previousInterval=m,this._nextInterval=p,this._lastRenderedFrame=C;let L=this._totalMemoryUsageInBytes,Z=this.maximumMemoryUsage*1024*1024;L>Z&&yxe(this,k0t(e));let X=l.length-u;d(a)&&a.attenuation&&a.eyeDomeLighting&&X>0&&c.update(e,u,a,this.boundingSphere)};WT.prototype.isDestroyed=function(){return!1};WT.prototype.destroy=function(){return yxe(this),this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),this._pickId=this._pickId&&this._pickId.destroy(),ue(this)};var MV=WT;var hOi=T(S(),1);function uD(e,t){this.show=!0,d(e)||(e=new He),this.rectangle=He.clone(e),d(t)||(t=ki.fromType(ki.ColorType,{color:new Y(1,1,1,1)})),this.material=t,this._material=void 0,this._overlayCommand=void 0,this._rs=void 0}uD.prototype.update=function(e){if(!this.show)return;let t=this._rs;if((!d(t)||!He.equals(t.viewport,this.rectangle))&&(this._rs=De.fromCache({blending:dn.ALPHA_BLEND,viewport:this.rectangle})),e.passes.render){let i=e.context;if(this._material!==this.material||!d(this._overlayCommand)){this._material=this.material,d(this._overlayCommand)&&this._overlayCommand.shaderProgram.destroy();let o=new Ye({sources:[this._material.shaderSource,Vv]});this._overlayCommand=i.createViewportQuadCommand(o,{renderState:this._rs,uniformMap:this._material._uniforms,owner:this}),this._overlayCommand.pass=Re.OVERLAY}this._material.update(i),this._overlayCommand.renderState=this._rs,this._overlayCommand.uniformMap=this._material._uniforms,e.commandList.push(this._overlayCommand)}};uD.prototype.isDestroyed=function(){return!1};uD.prototype.destroy=function(){return d(this._overlayCommand)&&(this._overlayCommand.shaderProgram=this._overlayCommand.shaderProgram&&this._overlayCommand.shaderProgram.destroy()),ue(this)};var Fj=uD;var MHi=T(S(),1);var RKi=T(S(),1);var cKi=T(S(),1);var pOi=T(S(),1),UF=`// See Intersection.glsl for the definition of intersectScene
  11228. // See IntersectionUtils.glsl for the definition of nextIntersection
  11229. // See convertUvToBox.glsl, convertUvToCylinder.glsl, or convertUvToEllipsoid.glsl
  11230. // for the definition of convertUvToShapeUvSpace. The appropriate function is
  11231. // selected based on the VoxelPrimitive shape type, and added to the shader in
  11232. // Scene/VoxelRenderResources.js.
  11233. // See Octree.glsl for the definitions of TraversalData, SampleData,
  11234. // traverseOctreeFromBeginning, and traverseOctreeFromExisting
  11235. // See Megatexture.glsl for the definition of accumulatePropertiesFromMegatexture
  11236. #define STEP_COUNT_MAX 1000 // Harcoded value because GLSL doesn't like variable length loops
  11237. #define ALPHA_ACCUM_MAX 0.98 // Must be > 0.0 and <= 1.0
  11238. uniform mat3 u_transformDirectionViewToLocal;
  11239. uniform vec3 u_cameraPositionUv;
  11240. uniform float u_stepSize;
  11241. #if defined(PICKING)
  11242. uniform vec4 u_pickColor;
  11243. #endif
  11244. #if defined(JITTER)
  11245. float hash(vec2 p)
  11246. {
  11247. vec3 p3 = fract(vec3(p.xyx) * 50.0); // magic number = hashscale
  11248. p3 += dot(p3, p3.yzx + 19.19);
  11249. return fract((p3.x + p3.y) * p3.z);
  11250. }
  11251. #endif
  11252. vec4 getStepSize(in SampleData sampleData, in Ray viewRay, in RayShapeIntersection shapeIntersection) {
  11253. #if defined(SHAPE_BOX)
  11254. Box voxelBox = constructVoxelBox(sampleData.tileCoords, sampleData.tileUv);
  11255. RayShapeIntersection voxelIntersection = intersectBox(viewRay, voxelBox);
  11256. vec4 entry = shapeIntersection.entry.w >= voxelIntersection.entry.w ? shapeIntersection.entry : voxelIntersection.entry;
  11257. float exit = min(voxelIntersection.exit.w, shapeIntersection.exit.w);
  11258. float dt = (exit - entry.w) * RAY_SCALE;
  11259. return vec4(normalize(entry.xyz), dt);
  11260. #else
  11261. float dimAtLevel = pow(2.0, float(sampleData.tileCoords.w));
  11262. return vec4(viewRay.dir, u_stepSize / dimAtLevel);
  11263. #endif
  11264. }
  11265. void main()
  11266. {
  11267. vec4 fragCoord = gl_FragCoord;
  11268. vec2 screenCoord = (fragCoord.xy - czm_viewport.xy) / czm_viewport.zw; // [0,1]
  11269. vec3 eyeDirection = normalize(czm_windowToEyeCoordinates(fragCoord).xyz);
  11270. vec3 viewDirWorld = normalize(czm_inverseViewRotation * eyeDirection); // normalize again just in case
  11271. vec3 viewDirUv = normalize(u_transformDirectionViewToLocal * eyeDirection); // normalize again just in case
  11272. vec3 viewPosUv = u_cameraPositionUv;
  11273. #if defined(SHAPE_BOX)
  11274. vec3 dInv = 1.0 / viewDirUv;
  11275. Ray viewRayUv = Ray(viewPosUv, viewDirUv, dInv);
  11276. #else
  11277. Ray viewRayUv = Ray(viewPosUv, viewDirUv);
  11278. #endif
  11279. Intersections ix;
  11280. RayShapeIntersection shapeIntersection = intersectScene(screenCoord, viewRayUv, ix);
  11281. // Exit early if the scene was completely missed.
  11282. if (shapeIntersection.entry.w == NO_HIT) {
  11283. discard;
  11284. }
  11285. float currT = shapeIntersection.entry.w * RAY_SCALE;
  11286. float endT = shapeIntersection.exit.w;
  11287. vec3 positionUv = viewPosUv + currT * viewDirUv;
  11288. vec3 positionUvShapeSpace = convertUvToShapeUvSpace(positionUv);
  11289. // Traverse the tree from the start position
  11290. TraversalData traversalData;
  11291. SampleData sampleDatas[SAMPLE_COUNT];
  11292. traverseOctreeFromBeginning(positionUvShapeSpace, traversalData, sampleDatas);
  11293. vec4 step = getStepSize(sampleDatas[0], viewRayUv, shapeIntersection);
  11294. #if defined(JITTER)
  11295. float noise = hash(screenCoord); // [0,1]
  11296. currT += noise * step.w;
  11297. positionUv += noise * step.w * viewDirUv;
  11298. #endif
  11299. FragmentInput fragmentInput;
  11300. #if defined(STATISTICS)
  11301. setStatistics(fragmentInput.metadata.statistics);
  11302. #endif
  11303. vec4 colorAccum =vec4(0.0);
  11304. for (int stepCount = 0; stepCount < STEP_COUNT_MAX; ++stepCount) {
  11305. // Read properties from the megatexture based on the traversal state
  11306. Properties properties = accumulatePropertiesFromMegatexture(sampleDatas);
  11307. // Prepare the custom shader inputs
  11308. copyPropertiesToMetadata(properties, fragmentInput.metadata);
  11309. fragmentInput.voxel.positionUv = positionUv;
  11310. fragmentInput.voxel.positionShapeUv = positionUvShapeSpace;
  11311. fragmentInput.voxel.positionUvLocal = sampleDatas[0].tileUv;
  11312. fragmentInput.voxel.viewDirUv = viewDirUv;
  11313. fragmentInput.voxel.viewDirWorld = viewDirWorld;
  11314. fragmentInput.voxel.surfaceNormal = step.xyz;
  11315. fragmentInput.voxel.travelDistance = step.w;
  11316. // Run the custom shader
  11317. czm_modelMaterial materialOutput;
  11318. fragmentMain(fragmentInput, materialOutput);
  11319. // Sanitize the custom shader output
  11320. vec4 color = vec4(materialOutput.diffuse, materialOutput.alpha);
  11321. color.rgb = max(color.rgb, vec3(0.0));
  11322. color.a = clamp(color.a, 0.0, 1.0);
  11323. // Pre-multiplied alpha blend
  11324. colorAccum += (1.0 - colorAccum.a) * vec4(color.rgb * color.a, color.a);
  11325. // Stop traversing if the alpha has been fully saturated
  11326. if (colorAccum.a > ALPHA_ACCUM_MAX) {
  11327. colorAccum.a = ALPHA_ACCUM_MAX;
  11328. break;
  11329. }
  11330. if (step.w == 0.0) {
  11331. // Shape is infinitely thin. The ray may have hit the edge of a
  11332. // foreground voxel. Step ahead slightly to check for more voxels
  11333. step.w == 0.00001;
  11334. }
  11335. // Keep raymarching
  11336. currT += step.w;
  11337. positionUv += step.w * viewDirUv;
  11338. // Check if there's more intersections.
  11339. if (currT > endT) {
  11340. #if (INTERSECTION_COUNT == 1)
  11341. break;
  11342. #else
  11343. shapeIntersection = nextIntersection(ix);
  11344. if (shapeIntersection.entry.w == NO_HIT) {
  11345. break;
  11346. } else {
  11347. // Found another intersection. Resume raymarching there
  11348. currT = shapeIntersection.entry.w * RAY_SCALE;
  11349. endT = shapeIntersection.exit.w;
  11350. positionUv = viewPosUv + currT * viewDirUv;
  11351. }
  11352. #endif
  11353. }
  11354. // Traverse the tree from the current ray position.
  11355. // This is similar to traverseOctreeFromBeginning but is faster when the ray is in the same tile as the previous step.
  11356. positionUvShapeSpace = convertUvToShapeUvSpace(positionUv);
  11357. traverseOctreeFromExisting(positionUvShapeSpace, traversalData, sampleDatas);
  11358. step = getStepSize(sampleDatas[0], viewRayUv, shapeIntersection);
  11359. }
  11360. // Convert the alpha from [0,ALPHA_ACCUM_MAX] to [0,1]
  11361. colorAccum.a /= ALPHA_ACCUM_MAX;
  11362. #if defined(PICKING)
  11363. // If alpha is 0.0 there is nothing to pick
  11364. if (colorAccum.a == 0.0) {
  11365. discard;
  11366. }
  11367. out_FragColor = u_pickColor;
  11368. #else
  11369. out_FragColor = colorAccum;
  11370. #endif
  11371. }
  11372. `;var yOi=T(S(),1),kF=`in vec2 position;
  11373. uniform vec4 u_ndcSpaceAxisAlignedBoundingBox;
  11374. void main() {
  11375. vec2 aabbMin = u_ndcSpaceAxisAlignedBoundingBox.xy;
  11376. vec2 aabbMax = u_ndcSpaceAxisAlignedBoundingBox.zw;
  11377. vec2 translation = 0.5 * (aabbMax + aabbMin);
  11378. vec2 scale = 0.5 * (aabbMax - aabbMin);
  11379. gl_Position = vec4(position * scale + translation, 0.0, 1.0);
  11380. }
  11381. `;var xOi=T(S(),1),DF=`/* Intersection defines
  11382. #define INTERSECTION_COUNT ###
  11383. */
  11384. #define NO_HIT (-czm_infinity)
  11385. #define INF_HIT (czm_infinity * 0.5)
  11386. #define RAY_SHIFT (0.000003163)
  11387. #define RAY_SCALE (1.003163)
  11388. struct Ray {
  11389. vec3 pos;
  11390. vec3 dir;
  11391. #if defined(SHAPE_BOX)
  11392. vec3 dInv;
  11393. #endif
  11394. };
  11395. struct RayShapeIntersection {
  11396. vec4 entry;
  11397. vec4 exit;
  11398. };
  11399. struct Intersections {
  11400. // Don't access these member variables directly - call the functions instead.
  11401. // Store an array of ray-surface intersections. Each intersection is composed of:
  11402. // .xyz for the surface normal at the intersection point
  11403. // .w for the T value
  11404. // The scale of the normal encodes the shape intersection type:
  11405. // length(intersection.xyz) = 1: positive shape entry
  11406. // length(intersection.xyz) = 2: positive shape exit
  11407. // length(intersection.xyz) = 3: negative shape entry
  11408. // length(intersection.xyz) = 4: negative shape exit
  11409. // INTERSECTION_COUNT is the number of ray-*shape* (volume) intersections,
  11410. // so we need twice as many to track ray-*surface* intersections
  11411. vec4 intersections[INTERSECTION_COUNT * 2];
  11412. #if (INTERSECTION_COUNT > 1)
  11413. // Maintain state for future nextIntersection calls
  11414. int index;
  11415. int surroundCount;
  11416. bool surroundIsPositive;
  11417. #endif
  11418. };
  11419. RayShapeIntersection getFirstIntersection(in Intersections ix)
  11420. {
  11421. return RayShapeIntersection(ix.intersections[0], ix.intersections[1]);
  11422. }
  11423. vec4 encodeIntersectionType(vec4 intersection, int index, bool entry)
  11424. {
  11425. float scale = float(index > 0) * 2.0 + float(!entry) + 1.0;
  11426. return vec4(intersection.xyz * scale, intersection.w);
  11427. }
  11428. // Use defines instead of real functions because WebGL1 cannot access array with non-constant index.
  11429. #define setIntersection(/*inout Intersections*/ ix, /*int*/ index, /*float*/ t, /*bool*/ positive, /*bool*/ enter) (ix).intersections[(index)] = vec4(0.0, float(!positive) * 2.0 + float(!enter) + 1.0, 0.0, (t))
  11430. #define setIntersectionPair(/*inout Intersections*/ ix, /*int*/ index, /*vec2*/ entryExit) (ix).intersections[(index) * 2 + 0] = vec4(0.0, float((index) > 0) * 2.0 + 1.0, 0.0, (entryExit).x); (ix).intersections[(index) * 2 + 1] = vec4(0.0, float((index) > 0) * 2.0 + 2.0, 0.0, (entryExit).y)
  11431. #define setSurfaceIntersection(/*inout Intersections*/ ix, /*int*/ index, /*vec4*/ intersection) (ix).intersections[(index)] = intersection;
  11432. #define setShapeIntersection(/*inout Intersections*/ ix, /*int*/ index, /*RayShapeIntersection*/ intersection) (ix).intersections[(index) * 2 + 0] = encodeIntersectionType((intersection).entry, (index), true); (ix).intersections[(index) * 2 + 1] = encodeIntersectionType((intersection).exit, (index), false)
  11433. #if (INTERSECTION_COUNT > 1)
  11434. void initializeIntersections(inout Intersections ix) {
  11435. // Sort the intersections from min T to max T with bubble sort.
  11436. // Note: If this sorting function changes, some of the intersection test may
  11437. // need to be updated. Search for "bubble sort" to find those areas.
  11438. const int sortPasses = INTERSECTION_COUNT * 2 - 1;
  11439. for (int n = sortPasses; n > 0; --n) {
  11440. for (int i = 0; i < sortPasses; ++i) {
  11441. // The loop should be: for (i = 0; i < n; ++i) {...} but WebGL1 cannot
  11442. // loop with non-constant condition, so it has to break early instead
  11443. if (i >= n) { break; }
  11444. vec4 intersect0 = ix.intersections[i + 0];
  11445. vec4 intersect1 = ix.intersections[i + 1];
  11446. bool inOrder = intersect0.w <= intersect1.w;
  11447. ix.intersections[i + 0] = inOrder ? intersect0 : intersect1;
  11448. ix.intersections[i + 1] = inOrder ? intersect1 : intersect0;
  11449. }
  11450. }
  11451. // Prepare initial state for nextIntersection
  11452. ix.index = 0;
  11453. ix.surroundCount = 0;
  11454. ix.surroundIsPositive = false;
  11455. }
  11456. #endif
  11457. #if (INTERSECTION_COUNT > 1)
  11458. RayShapeIntersection nextIntersection(inout Intersections ix) {
  11459. vec4 surfaceIntersection = vec4(0.0, 0.0, 0.0, NO_HIT);
  11460. RayShapeIntersection shapeIntersection = RayShapeIntersection(surfaceIntersection, surfaceIntersection);
  11461. const int passCount = INTERSECTION_COUNT * 2;
  11462. if (ix.index == passCount) {
  11463. return shapeIntersection;
  11464. }
  11465. for (int i = 0; i < passCount; ++i) {
  11466. // The loop should be: for (i = ix.index; i < passCount; ++i) {...} but WebGL1 cannot
  11467. // loop with non-constant condition, so it has to continue instead.
  11468. if (i < ix.index) {
  11469. continue;
  11470. }
  11471. ix.index = i + 1;
  11472. surfaceIntersection = ix.intersections[i];
  11473. int intersectionType = int(length(surfaceIntersection.xyz) - 0.5);
  11474. bool currShapeIsPositive = intersectionType < 2;
  11475. bool enter = intMod(intersectionType, 2) == 0;
  11476. ix.surroundCount += enter ? +1 : -1;
  11477. ix.surroundIsPositive = currShapeIsPositive ? enter : ix.surroundIsPositive;
  11478. // entering positive or exiting negative
  11479. if (ix.surroundCount == 1 && ix.surroundIsPositive && enter == currShapeIsPositive) {
  11480. shapeIntersection.entry = surfaceIntersection;
  11481. }
  11482. // exiting positive or entering negative after being inside positive
  11483. bool exitPositive = !enter && currShapeIsPositive && ix.surroundCount == 0;
  11484. bool enterNegativeFromPositive = enter && !currShapeIsPositive && ix.surroundCount == 2 && ix.surroundIsPositive;
  11485. if (exitPositive || enterNegativeFromPositive) {
  11486. shapeIntersection.exit = surfaceIntersection;
  11487. // entry and exit have been found, so the loop can stop
  11488. if (exitPositive) {
  11489. // After exiting positive shape there is nothing left to intersect, so jump to the end index.
  11490. ix.index = passCount;
  11491. }
  11492. break;
  11493. }
  11494. }
  11495. return shapeIntersection;
  11496. }
  11497. #endif
  11498. // NOTE: initializeIntersections, nextIntersection aren't even declared unless INTERSECTION_COUNT > 1
  11499. `;var TOi=T(S(),1),BF=`// See IntersectionUtils.glsl for the definitions of Ray, Intersections,
  11500. // setIntersectionPair, INF_HIT, NO_HIT
  11501. /* intersectDepth defines (set in Scene/VoxelRenderResources.js)
  11502. #define DEPTH_INTERSECTION_INDEX ###
  11503. */
  11504. uniform mat4 u_transformPositionViewToUv;
  11505. void intersectDepth(in vec2 screenCoord, in Ray ray, inout Intersections ix) {
  11506. float logDepthOrDepth = czm_unpackDepth(texture(czm_globeDepthTexture, screenCoord));
  11507. if (logDepthOrDepth != 0.0) {
  11508. // Calculate how far the ray must travel before it hits the depth buffer.
  11509. vec4 eyeCoordinateDepth = czm_screenToEyeCoordinates(screenCoord, logDepthOrDepth);
  11510. eyeCoordinateDepth /= eyeCoordinateDepth.w;
  11511. vec3 depthPositionUv = vec3(u_transformPositionViewToUv * eyeCoordinateDepth);
  11512. float t = dot(depthPositionUv - ray.pos, ray.dir);
  11513. setIntersectionPair(ix, DEPTH_INTERSECTION_INDEX, vec2(t, +INF_HIT));
  11514. } else {
  11515. // There's no depth at this location.
  11516. setIntersectionPair(ix, DEPTH_INTERSECTION_INDEX, vec2(NO_HIT));
  11517. }
  11518. }
  11519. `;var COi=T(S(),1),YF=`// See IntersectionUtils.glsl for the definitions of Ray, Intersections, INF_HIT,
  11520. // NO_HIT, setIntersectionPair
  11521. /* Clipping plane defines (set in Scene/VoxelRenderResources.js)
  11522. #define CLIPPING_PLANES_UNION
  11523. #define CLIPPING_PLANES_COUNT
  11524. #define CLIPPING_PLANES_INTERSECTION_INDEX
  11525. */
  11526. uniform sampler2D u_clippingPlanesTexture;
  11527. uniform mat4 u_clippingPlanesMatrix;
  11528. // Plane is in Hessian Normal Form
  11529. vec4 intersectPlane(in Ray ray, in vec4 plane) {
  11530. vec3 n = plane.xyz; // normal
  11531. float w = plane.w; // -dot(pointOnPlane, normal)
  11532. float a = dot(ray.pos, n);
  11533. float b = dot(ray.dir, n);
  11534. float t = -(w + a) / b;
  11535. return vec4(n, t);
  11536. }
  11537. void intersectClippingPlanes(in Ray ray, inout Intersections ix) {
  11538. vec4 backSide = vec4(-ray.dir, -INF_HIT);
  11539. vec4 farSide = vec4(ray.dir, +INF_HIT);
  11540. RayShapeIntersection clippingVolume;
  11541. #if (CLIPPING_PLANES_COUNT == 1)
  11542. // Union and intersection are the same when there's one clipping plane, and the code
  11543. // is more simplified.
  11544. vec4 planeUv = getClippingPlane(u_clippingPlanesTexture, 0, u_clippingPlanesMatrix);
  11545. vec4 intersection = intersectPlane(ray, planeUv);
  11546. bool reflects = dot(ray.dir, intersection.xyz) < 0.0;
  11547. clippingVolume.entry = reflects ? backSide : intersection;
  11548. clippingVolume.exit = reflects ? intersection : farSide;
  11549. setShapeIntersection(ix, CLIPPING_PLANES_INTERSECTION_INDEX, clippingVolume);
  11550. #elif defined(CLIPPING_PLANES_UNION)
  11551. vec4 firstTransmission = vec4(ray.dir, +INF_HIT);
  11552. vec4 lastReflection = vec4(-ray.dir, -INF_HIT);
  11553. for (int i = 0; i < CLIPPING_PLANES_COUNT; i++) {
  11554. vec4 planeUv = getClippingPlane(u_clippingPlanesTexture, i, u_clippingPlanesMatrix);
  11555. vec4 intersection = intersectPlane(ray, planeUv);
  11556. if (dot(ray.dir, planeUv.xyz) > 0.0) {
  11557. firstTransmission = intersection.w <= firstTransmission.w ? intersection : firstTransmission;
  11558. } else {
  11559. lastReflection = intersection.w >= lastReflection.w ? intersection : lastReflection;
  11560. }
  11561. }
  11562. clippingVolume.entry = backSide;
  11563. clippingVolume.exit = lastReflection;
  11564. setShapeIntersection(ix, CLIPPING_PLANES_INTERSECTION_INDEX + 0, clippingVolume);
  11565. clippingVolume.entry = firstTransmission;
  11566. clippingVolume.exit = farSide;
  11567. setShapeIntersection(ix, CLIPPING_PLANES_INTERSECTION_INDEX + 1, clippingVolume);
  11568. #else // intersection
  11569. vec4 lastTransmission = vec4(ray.dir, -INF_HIT);
  11570. vec4 firstReflection = vec4(-ray.dir, +INF_HIT);
  11571. for (int i = 0; i < CLIPPING_PLANES_COUNT; i++) {
  11572. vec4 planeUv = getClippingPlane(u_clippingPlanesTexture, i, u_clippingPlanesMatrix);
  11573. vec4 intersection = intersectPlane(ray, planeUv);
  11574. if (dot(ray.dir, planeUv.xyz) > 0.0) {
  11575. lastTransmission = intersection.w > lastTransmission.w ? intersection : lastTransmission;
  11576. } else {
  11577. firstReflection = intersection.w < firstReflection.w ? intersection: firstReflection;
  11578. }
  11579. }
  11580. if (lastTransmission.w < firstReflection.w) {
  11581. clippingVolume.entry = lastTransmission;
  11582. clippingVolume.exit = firstReflection;
  11583. } else {
  11584. clippingVolume.entry = vec4(-ray.dir, NO_HIT);
  11585. clippingVolume.exit = vec4(ray.dir, NO_HIT);
  11586. }
  11587. setShapeIntersection(ix, CLIPPING_PLANES_INTERSECTION_INDEX, clippingVolume);
  11588. #endif
  11589. }
  11590. `;var LOi=T(S(),1),OF=`// See IntersectionUtils.glsl for the definitions of Ray and NO_HIT
  11591. // See convertUvToBox.glsl for the definition of convertShapeUvToUvSpace
  11592. /* Box defines (set in Scene/VoxelBoxShape.js)
  11593. #define BOX_INTERSECTION_INDEX ### // always 0
  11594. */
  11595. uniform vec3 u_renderMinBounds;
  11596. uniform vec3 u_renderMaxBounds;
  11597. struct Box {
  11598. vec3 p0;
  11599. vec3 p1;
  11600. };
  11601. Box constructVoxelBox(in ivec4 octreeCoords, in vec3 tileUv)
  11602. {
  11603. // Find the min/max cornerpoints of the voxel in tile coordinates
  11604. vec3 tileOrigin = vec3(octreeCoords.xyz);
  11605. vec3 numSamples = vec3(u_dimensions);
  11606. vec3 voxelSize = 1.0 / numSamples;
  11607. vec3 coordP0 = floor(tileUv * numSamples) * voxelSize + tileOrigin;
  11608. vec3 coordP1 = coordP0 + voxelSize;
  11609. // Transform to the UV coordinates of the scaled tileset
  11610. float tileSize = 1.0 / pow(2.0, float(octreeCoords.w));
  11611. vec3 p0 = convertShapeUvToUvSpace(coordP0 * tileSize);
  11612. vec3 p1 = convertShapeUvToUvSpace(coordP1 * tileSize);
  11613. return Box(p0, p1);
  11614. }
  11615. vec3 getBoxNormal(in Box box, in Ray ray, in float t)
  11616. {
  11617. vec3 hitPoint = ray.pos + t * ray.dir;
  11618. vec3 lower = step(hitPoint, box.p0);
  11619. vec3 upper = step(box.p1, hitPoint);
  11620. return normalize(upper - lower);
  11621. }
  11622. // Find the distances along a ray at which the ray intersects an axis-aligned box
  11623. // See https://tavianator.com/2011/ray_box.html
  11624. RayShapeIntersection intersectBox(in Ray ray, in Box box)
  11625. {
  11626. // Consider the box as the intersection of the space between 3 pairs of parallel planes
  11627. // Compute the distance along the ray to each plane
  11628. vec3 t0 = (box.p0 - ray.pos) * ray.dInv;
  11629. vec3 t1 = (box.p1 - ray.pos) * ray.dInv;
  11630. // Identify candidate entries/exits based on distance from ray.pos
  11631. vec3 entries = min(t0, t1);
  11632. vec3 exits = max(t0, t1);
  11633. // The actual box intersection points are the furthest entry and the closest exit
  11634. float entryT = max(max(entries.x, entries.y), entries.z);
  11635. float exitT = min(min(exits.x, exits.y), exits.z);
  11636. vec3 entryNormal = getBoxNormal(box, ray, entryT - RAY_SHIFT);
  11637. vec3 exitNormal = getBoxNormal(box, ray, exitT + RAY_SHIFT);
  11638. if (entryT > exitT) {
  11639. entryT = NO_HIT;
  11640. exitT = NO_HIT;
  11641. }
  11642. return RayShapeIntersection(vec4(entryNormal, entryT), vec4(exitNormal, exitT));
  11643. }
  11644. void intersectShape(in Ray ray, inout Intersections ix)
  11645. {
  11646. RayShapeIntersection intersection = intersectBox(ray, Box(u_renderMinBounds, u_renderMaxBounds));
  11647. setShapeIntersection(ix, BOX_INTERSECTION_INDEX, intersection);
  11648. }
  11649. `;var ZOi=T(S(),1),KF=`// See IntersectionUtils.glsl for the definitions of Ray, setIntersection,
  11650. // setIntersectionPair
  11651. /* Cylinder defines (set in Scene/VoxelCylinderShape.js)
  11652. #define CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN
  11653. #define CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MAX
  11654. #define CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT
  11655. #define CYLINDER_HAS_RENDER_BOUNDS_HEIGHT
  11656. #define CYLINDER_HAS_RENDER_BOUNDS_HEIGHT_FLAT
  11657. #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE
  11658. #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF
  11659. #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF
  11660. #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_HALF
  11661. #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO
  11662. #define CYLINDER_HAS_SHAPE_BOUNDS_RADIUS
  11663. #define CYLINDER_HAS_SHAPE_BOUNDS_RADIUS_FLAT
  11664. #define CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT
  11665. #define CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT_FLAT
  11666. #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE
  11667. #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_RANGE_EQUAL_ZERO
  11668. #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY
  11669. #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY
  11670. #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED
  11671. #define CYLINDER_INTERSECTION_INDEX_RADIUS_MAX
  11672. #define CYLINDER_INTERSECTION_INDEX_RADIUS_MIN
  11673. #define CYLINDER_INTERSECTION_INDEX_ANGLE
  11674. */
  11675. // Cylinder uniforms
  11676. #if defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MAX) || defined(CYLINDER_HAS_RENDER_BOUNDS_HEIGHT)
  11677. uniform vec3 u_cylinderUvToRenderBoundsScale;
  11678. uniform vec3 u_cylinderUvToRenderBoundsTranslate;
  11679. #endif
  11680. #if defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN) && !defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT)
  11681. uniform float u_cylinderUvToRenderRadiusMin;
  11682. #endif
  11683. #if defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE)
  11684. uniform vec2 u_cylinderRenderAngleMinMax;
  11685. #endif
  11686. vec4 intersectHalfPlane(Ray ray, float angle) {
  11687. vec2 o = ray.pos.xy;
  11688. vec2 d = ray.dir.xy;
  11689. vec2 planeDirection = vec2(cos(angle), sin(angle));
  11690. vec2 planeNormal = vec2(planeDirection.y, -planeDirection.x);
  11691. float a = dot(o, planeNormal);
  11692. float b = dot(d, planeNormal);
  11693. float t = -a / b;
  11694. vec2 p = o + t * d;
  11695. bool outside = dot(p, planeDirection) < 0.0;
  11696. if (outside) return vec4(-INF_HIT, +INF_HIT, NO_HIT, NO_HIT);
  11697. return vec4(-INF_HIT, t, t, +INF_HIT);
  11698. }
  11699. #define POSITIVE_HIT vec2(t, +INF_HIT);
  11700. #define NEGATIVE_HIT vec2(-INF_HIT, t);
  11701. vec2 intersectHalfSpace(Ray ray, float angle)
  11702. {
  11703. vec2 o = ray.pos.xy;
  11704. vec2 d = ray.dir.xy;
  11705. vec2 n = vec2(sin(angle), -cos(angle));
  11706. float a = dot(o, n);
  11707. float b = dot(d, n);
  11708. float t = -a / b;
  11709. float s = sign(a);
  11710. // Half space cuts right through the camera, pick the side to intersect
  11711. if (a == 0.0) {
  11712. if (b >= 0.0) {
  11713. return POSITIVE_HIT;
  11714. } else {
  11715. return NEGATIVE_HIT;
  11716. }
  11717. }
  11718. if (t >= 0.0 != s >= 0.0) {
  11719. return POSITIVE_HIT;
  11720. } else {
  11721. return NEGATIVE_HIT;
  11722. }
  11723. }
  11724. vec2 intersectRegularWedge(Ray ray, float minAngle, float maxAngle)
  11725. {
  11726. vec2 o = ray.pos.xy;
  11727. vec2 d = ray.dir.xy;
  11728. vec2 n1 = vec2(sin(minAngle), -cos(minAngle));
  11729. vec2 n2 = vec2(-sin(maxAngle), cos(maxAngle));
  11730. float a1 = dot(o, n1);
  11731. float a2 = dot(o, n2);
  11732. float b1 = dot(d, n1);
  11733. float b2 = dot(d, n2);
  11734. float t1 = -a1 / b1;
  11735. float t2 = -a2 / b2;
  11736. float s1 = sign(a1);
  11737. float s2 = sign(a2);
  11738. float tmin = min(t1, t2);
  11739. float tmax = max(t1, t2);
  11740. float smin = tmin == t1 ? s1 : s2;
  11741. float smax = tmin == t1 ? s2 : s1;
  11742. bool e = tmin >= 0.0;
  11743. bool f = tmax >= 0.0;
  11744. bool g = smin >= 0.0;
  11745. bool h = smax >= 0.0;
  11746. if (e != g && f == h) return vec2(tmin, tmax);
  11747. else if (e == g && f == h) return vec2(-INF_HIT, tmin);
  11748. else if (e != g && f != h) return vec2(tmax, +INF_HIT);
  11749. else return vec2(NO_HIT);
  11750. }
  11751. vec4 intersectFlippedWedge(Ray ray, float minAngle, float maxAngle)
  11752. {
  11753. vec2 planeIntersectMin = intersectHalfSpace(ray, minAngle);
  11754. vec2 planeIntersectMax = intersectHalfSpace(ray, maxAngle + czm_pi);
  11755. return vec4(planeIntersectMin, planeIntersectMax);
  11756. }
  11757. vec2 intersectUnitCylinder(Ray ray)
  11758. {
  11759. vec3 o = ray.pos;
  11760. vec3 d = ray.dir;
  11761. float a = dot(d.xy, d.xy);
  11762. float b = dot(o.xy, d.xy);
  11763. float c = dot(o.xy, o.xy) - 1.0;
  11764. float det = b * b - a * c;
  11765. if (det < 0.0) {
  11766. return vec2(NO_HIT);
  11767. }
  11768. det = sqrt(det);
  11769. float ta = (-b - det) / a;
  11770. float tb = (-b + det) / a;
  11771. float t1 = min(ta, tb);
  11772. float t2 = max(ta, tb);
  11773. float z1 = o.z + t1 * d.z;
  11774. float z2 = o.z + t2 * d.z;
  11775. if (abs(z1) >= 1.0)
  11776. {
  11777. float tCap = (sign(z1) - o.z) / d.z;
  11778. t1 = abs(b + a * tCap) < det ? tCap : NO_HIT;
  11779. }
  11780. if (abs(z2) >= 1.0)
  11781. {
  11782. float tCap = (sign(z2) - o.z) / d.z;
  11783. t2 = abs(b + a * tCap) < det ? tCap : NO_HIT;
  11784. }
  11785. return vec2(t1, t2);
  11786. }
  11787. vec2 intersectUnitCircle(Ray ray) {
  11788. vec3 o = ray.pos;
  11789. vec3 d = ray.dir;
  11790. float t = -o.z / d.z;
  11791. vec2 zPlanePos = o.xy + d.xy * t;
  11792. float distSqr = dot(zPlanePos, zPlanePos);
  11793. if (distSqr > 1.0) {
  11794. return vec2(NO_HIT);
  11795. }
  11796. return vec2(t, t);
  11797. }
  11798. vec2 intersectInfiniteUnitCylinder(Ray ray)
  11799. {
  11800. vec3 o = ray.pos;
  11801. vec3 d = ray.dir;
  11802. float a = dot(d.xy, d.xy);
  11803. float b = dot(o.xy, d.xy);
  11804. float c = dot(o.xy, o.xy) - 1.0;
  11805. float det = b * b - a * c;
  11806. if (det < 0.0) {
  11807. return vec2(NO_HIT);
  11808. }
  11809. det = sqrt(det);
  11810. float t1 = (-b - det) / a;
  11811. float t2 = (-b + det) / a;
  11812. float tmin = min(t1, t2);
  11813. float tmax = max(t1, t2);
  11814. return vec2(tmin, tmax);
  11815. }
  11816. void intersectShape(Ray ray, inout Intersections ix)
  11817. {
  11818. #if defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MAX) || defined(CYLINDER_HAS_RENDER_BOUNDS_HEIGHT)
  11819. ray.pos = ray.pos * u_cylinderUvToRenderBoundsScale + u_cylinderUvToRenderBoundsTranslate;
  11820. ray.dir *= u_cylinderUvToRenderBoundsScale;
  11821. #else
  11822. // Position is converted from [0,1] to [-1,+1] because shape intersections assume unit space is [-1,+1].
  11823. // Direction is scaled as well to be in sync with position.
  11824. ray.pos = ray.pos * 2.0 - 1.0;
  11825. ray.dir *= 2.0;
  11826. #endif
  11827. #if defined(CYLINDER_HAS_RENDER_BOUNDS_HEIGHT_FLAT)
  11828. vec2 outerIntersect = intersectUnitCircle(ray);
  11829. #else
  11830. vec2 outerIntersect = intersectUnitCylinder(ray);
  11831. #endif
  11832. setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_RADIUS_MAX, outerIntersect);
  11833. if (outerIntersect.x == NO_HIT) {
  11834. return;
  11835. }
  11836. #if defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT)
  11837. // When the cylinder is perfectly thin it's necessary to sandwich the
  11838. // inner cylinder intersection inside the outer cylinder intersection.
  11839. // Without this special case,
  11840. // [outerMin, outerMax, innerMin, innerMax] will bubble sort to
  11841. // [outerMin, innerMin, outerMax, innerMax] which will cause the back
  11842. // side of the cylinder to be invisible because it will think the ray
  11843. // is still inside the inner (negative) cylinder after exiting the
  11844. // outer (positive) cylinder.
  11845. // With this special case,
  11846. // [outerMin, innerMin, innerMax, outerMax] will bubble sort to
  11847. // [outerMin, innerMin, innerMax, outerMax] which will work correctly.
  11848. // Note: If initializeIntersections() changes its sorting function
  11849. // from bubble sort to something else, this code may need to change.
  11850. vec2 innerIntersect = intersectInfiniteUnitCylinder(ray);
  11851. setIntersection(ix, 0, outerIntersect.x, true, true); // positive, enter
  11852. setIntersection(ix, 1, innerIntersect.x, false, true); // negative, enter
  11853. setIntersection(ix, 2, innerIntersect.y, false, false); // negative, exit
  11854. setIntersection(ix, 3, outerIntersect.y, true, false); // positive, exit
  11855. #elif defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN)
  11856. Ray innerRay = Ray(ray.pos * u_cylinderUvToRenderRadiusMin, ray.dir * u_cylinderUvToRenderRadiusMin);
  11857. vec2 innerIntersect = intersectInfiniteUnitCylinder(innerRay);
  11858. setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_RADIUS_MIN, innerIntersect);
  11859. #endif
  11860. #if defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF)
  11861. vec2 wedgeIntersect = intersectRegularWedge(ray, u_cylinderRenderAngleMinMax.x, u_cylinderRenderAngleMinMax.y);
  11862. setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_ANGLE, wedgeIntersect);
  11863. #elif defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF)
  11864. vec4 wedgeIntersect = intersectFlippedWedge(ray, u_cylinderRenderAngleMinMax.x, u_cylinderRenderAngleMinMax.y);
  11865. setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 0, wedgeIntersect.xy);
  11866. setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 1, wedgeIntersect.zw);
  11867. #elif defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_HALF)
  11868. vec2 wedgeIntersect = intersectHalfSpace(ray, u_cylinderRenderAngleMinMax.x);
  11869. setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_ANGLE, wedgeIntersect);
  11870. #elif defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO)
  11871. vec4 wedgeIntersect = intersectHalfPlane(ray, u_cylinderRenderAngleMinMax.x);
  11872. setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 0, wedgeIntersect.xy);
  11873. setIntersectionPair(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 1, wedgeIntersect.zw);
  11874. #endif
  11875. }
  11876. `;var EOi=T(S(),1),HF=`// See IntersectionUtils.glsl for the definitions of Ray, Intersections,
  11877. // setIntersection, setIntersectionPair, INF_HIT, NO_HIT
  11878. /* Ellipsoid defines (set in Scene/VoxelEllipsoidShape.js)
  11879. #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE
  11880. #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO
  11881. #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF
  11882. #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_HALF
  11883. #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF
  11884. #define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE
  11885. #define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF
  11886. #define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF
  11887. #define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF
  11888. #define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF
  11889. #define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF
  11890. #define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF
  11891. #define ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_MAX
  11892. #define ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_MIN
  11893. #define ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_FLAT
  11894. #define ELLIPSOID_INTERSECTION_INDEX_LONGITUDE
  11895. #define ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX
  11896. #define ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN
  11897. #define ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX
  11898. #define ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN
  11899. */
  11900. #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE)
  11901. uniform vec2 u_ellipsoidRenderLongitudeMinMax;
  11902. #endif
  11903. #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF) || defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF) || defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF) || defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF)
  11904. uniform vec2 u_ellipsoidRenderLatitudeCosSqrHalfMinMax;
  11905. #endif
  11906. #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_MAX)
  11907. uniform float u_ellipsoidInverseOuterScaleUv;
  11908. #endif
  11909. #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_MIN)
  11910. uniform float u_ellipsoidInverseInnerScaleUv;
  11911. #endif
  11912. vec2 intersectZPlane(Ray ray)
  11913. {
  11914. float o = ray.pos.z;
  11915. float d = ray.dir.z;
  11916. float t = -o / d;
  11917. float s = sign(o);
  11918. if (t >= 0.0 != s >= 0.0) return vec2(t, +INF_HIT);
  11919. else return vec2(-INF_HIT, t);
  11920. }
  11921. vec4 intersectHalfPlane(Ray ray, float angle) {
  11922. vec2 o = ray.pos.xy;
  11923. vec2 d = ray.dir.xy;
  11924. vec2 planeDirection = vec2(cos(angle), sin(angle));
  11925. vec2 planeNormal = vec2(planeDirection.y, -planeDirection.x);
  11926. float a = dot(o, planeNormal);
  11927. float b = dot(d, planeNormal);
  11928. float t = -a / b;
  11929. vec2 p = o + t * d;
  11930. bool outside = dot(p, planeDirection) < 0.0;
  11931. if (outside) return vec4(-INF_HIT, +INF_HIT, NO_HIT, NO_HIT);
  11932. return vec4(-INF_HIT, t, t, +INF_HIT);
  11933. }
  11934. vec2 intersectHalfSpace(Ray ray, float angle)
  11935. {
  11936. vec2 o = ray.pos.xy;
  11937. vec2 d = ray.dir.xy;
  11938. vec2 n = vec2(sin(angle), -cos(angle));
  11939. float a = dot(o, n);
  11940. float b = dot(d, n);
  11941. float t = -a / b;
  11942. float s = sign(a);
  11943. if (t >= 0.0 != s >= 0.0) return vec2(t, +INF_HIT);
  11944. else return vec2(-INF_HIT, t);
  11945. }
  11946. vec2 intersectRegularWedge(Ray ray, float minAngle, float maxAngle)
  11947. {
  11948. vec2 o = ray.pos.xy;
  11949. vec2 d = ray.dir.xy;
  11950. vec2 n1 = vec2(sin(minAngle), -cos(minAngle));
  11951. vec2 n2 = vec2(-sin(maxAngle), cos(maxAngle));
  11952. float a1 = dot(o, n1);
  11953. float a2 = dot(o, n2);
  11954. float b1 = dot(d, n1);
  11955. float b2 = dot(d, n2);
  11956. float t1 = -a1 / b1;
  11957. float t2 = -a2 / b2;
  11958. float s1 = sign(a1);
  11959. float s2 = sign(a2);
  11960. float tmin = min(t1, t2);
  11961. float tmax = max(t1, t2);
  11962. float smin = tmin == t1 ? s1 : s2;
  11963. float smax = tmin == t1 ? s2 : s1;
  11964. bool e = tmin >= 0.0;
  11965. bool f = tmax >= 0.0;
  11966. bool g = smin >= 0.0;
  11967. bool h = smax >= 0.0;
  11968. if (e != g && f == h) return vec2(tmin, tmax);
  11969. else if (e == g && f == h) return vec2(-INF_HIT, tmin);
  11970. else if (e != g && f != h) return vec2(tmax, +INF_HIT);
  11971. else return vec2(NO_HIT);
  11972. }
  11973. vec4 intersectFlippedWedge(Ray ray, float minAngle, float maxAngle)
  11974. {
  11975. vec2 planeIntersectMin = intersectHalfSpace(ray, minAngle);
  11976. vec2 planeIntersectMax = intersectHalfSpace(ray, maxAngle + czm_pi);
  11977. return vec4(planeIntersectMin, planeIntersectMax);
  11978. }
  11979. vec2 intersectUnitSphere(Ray ray)
  11980. {
  11981. vec3 o = ray.pos;
  11982. vec3 d = ray.dir;
  11983. float b = dot(d, o);
  11984. float c = dot(o, o) - 1.0;
  11985. float det = b * b - c;
  11986. if (det < 0.0) {
  11987. return vec2(NO_HIT);
  11988. }
  11989. det = sqrt(det);
  11990. float t1 = -b - det;
  11991. float t2 = -b + det;
  11992. float tmin = min(t1, t2);
  11993. float tmax = max(t1, t2);
  11994. return vec2(tmin, tmax);
  11995. }
  11996. vec2 intersectUnitSphereUnnormalizedDirection(Ray ray)
  11997. {
  11998. vec3 o = ray.pos;
  11999. vec3 d = ray.dir;
  12000. float a = dot(d, d);
  12001. float b = dot(d, o);
  12002. float c = dot(o, o) - 1.0;
  12003. float det = b * b - a * c;
  12004. if (det < 0.0) {
  12005. return vec2(NO_HIT);
  12006. }
  12007. det = sqrt(det);
  12008. float t1 = (-b - det) / a;
  12009. float t2 = (-b + det) / a;
  12010. float tmin = min(t1, t2);
  12011. float tmax = max(t1, t2);
  12012. return vec2(tmin, tmax);
  12013. }
  12014. vec2 intersectDoubleEndedCone(Ray ray, float cosSqrHalfAngle)
  12015. {
  12016. vec3 o = ray.pos;
  12017. vec3 d = ray.dir;
  12018. float a = d.z * d.z - dot(d, d) * cosSqrHalfAngle;
  12019. float b = d.z * o.z - dot(o, d) * cosSqrHalfAngle;
  12020. float c = o.z * o.z - dot(o, o) * cosSqrHalfAngle;
  12021. float det = b * b - a * c;
  12022. if (det < 0.0) {
  12023. return vec2(NO_HIT);
  12024. }
  12025. det = sqrt(det);
  12026. float t1 = (-b - det) / a;
  12027. float t2 = (-b + det) / a;
  12028. float tmin = min(t1, t2);
  12029. float tmax = max(t1, t2);
  12030. return vec2(tmin, tmax);
  12031. }
  12032. vec4 intersectFlippedCone(Ray ray, float cosSqrHalfAngle) {
  12033. vec2 intersect = intersectDoubleEndedCone(ray, cosSqrHalfAngle);
  12034. if (intersect.x == NO_HIT) {
  12035. return vec4(-INF_HIT, +INF_HIT, NO_HIT, NO_HIT);
  12036. }
  12037. vec3 o = ray.pos;
  12038. vec3 d = ray.dir;
  12039. float tmin = intersect.x;
  12040. float tmax = intersect.y;
  12041. float zmin = o.z + tmin * d.z;
  12042. float zmax = o.z + tmax * d.z;
  12043. // One interval
  12044. if (zmin < 0.0 && zmax < 0.0) return vec4(-INF_HIT, +INF_HIT, NO_HIT, NO_HIT);
  12045. else if (zmin < 0.0) return vec4(-INF_HIT, tmax, NO_HIT, NO_HIT);
  12046. else if (zmax < 0.0) return vec4(tmin, +INF_HIT, NO_HIT, NO_HIT);
  12047. // Two intervals
  12048. else return vec4(-INF_HIT, tmin, tmax, +INF_HIT);
  12049. }
  12050. vec2 intersectRegularCone(Ray ray, float cosSqrHalfAngle) {
  12051. vec2 intersect = intersectDoubleEndedCone(ray, cosSqrHalfAngle);
  12052. if (intersect.x == NO_HIT) {
  12053. return vec2(NO_HIT);
  12054. }
  12055. vec3 o = ray.pos;
  12056. vec3 d = ray.dir;
  12057. float tmin = intersect.x;
  12058. float tmax = intersect.y;
  12059. float zmin = o.z + tmin * d.z;
  12060. float zmax = o.z + tmax * d.z;
  12061. if (zmin < 0.0 && zmax < 0.0) return vec2(NO_HIT);
  12062. else if (zmin < 0.0) return vec2(tmax, +INF_HIT);
  12063. else if (zmax < 0.0) return vec2(-INF_HIT, tmin);
  12064. else return vec2(tmin, tmax);
  12065. }
  12066. void intersectShape(in Ray ray, inout Intersections ix) {
  12067. // Position is converted from [0,1] to [-1,+1] because shape intersections assume unit space is [-1,+1].
  12068. // Direction is scaled as well to be in sync with position.
  12069. ray.pos = ray.pos * 2.0 - 1.0;
  12070. ray.dir *= 2.0;
  12071. #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_MAX)
  12072. Ray outerRay = Ray(ray.pos * u_ellipsoidInverseOuterScaleUv, ray.dir * u_ellipsoidInverseOuterScaleUv);
  12073. #else
  12074. Ray outerRay = ray;
  12075. #endif
  12076. // Outer ellipsoid
  12077. vec2 outerIntersect = intersectUnitSphereUnnormalizedDirection(outerRay);
  12078. setIntersectionPair(ix, ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX, outerIntersect);
  12079. // Exit early if the outer ellipsoid was missed.
  12080. if (outerIntersect.x == NO_HIT) {
  12081. return;
  12082. }
  12083. // Inner ellipsoid
  12084. #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_FLAT)
  12085. // When the ellipsoid is perfectly thin it's necessary to sandwich the
  12086. // inner ellipsoid intersection inside the outer ellipsoid intersection.
  12087. // Without this special case,
  12088. // [outerMin, outerMax, innerMin, innerMax] will bubble sort to
  12089. // [outerMin, innerMin, outerMax, innerMax] which will cause the back
  12090. // side of the ellipsoid to be invisible because it will think the ray
  12091. // is still inside the inner (negative) ellipsoid after exiting the
  12092. // outer (positive) ellipsoid.
  12093. // With this special case,
  12094. // [outerMin, innerMin, innerMax, outerMax] will bubble sort to
  12095. // [outerMin, innerMin, innerMax, outerMax] which will work correctly.
  12096. // Note: If initializeIntersections() changes its sorting function
  12097. // from bubble sort to something else, this code may need to change.
  12098. setIntersection(ix, 0, outerIntersect.x, true, true); // positive, enter
  12099. setIntersection(ix, 1, outerIntersect.x, false, true); // negative, enter
  12100. setIntersection(ix, 2, outerIntersect.y, false, false); // negative, exit
  12101. setIntersection(ix, 3, outerIntersect.y, true, false); // positive, exit
  12102. #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_HEIGHT_MIN)
  12103. Ray innerRay = Ray(ray.pos * u_ellipsoidInverseInnerScaleUv, ray.dir * u_ellipsoidInverseInnerScaleUv);
  12104. vec2 innerIntersect = intersectUnitSphereUnnormalizedDirection(innerRay);
  12105. if (innerIntersect == vec2(NO_HIT)) {
  12106. setIntersectionPair(ix, ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN, innerIntersect);
  12107. } else {
  12108. // When the ellipsoid is very large and thin it's possible for floating
  12109. // point math to cause the ray to intersect the inner ellipsoid before
  12110. // the outer ellipsoid. To prevent this from happening, clamp innerIntersect
  12111. // to outerIntersect and sandwhich the intersections like described above.
  12112. //
  12113. // In theory a similar fix is needed for cylinders, however it's more
  12114. // complicated to implement because the inner shape is allowed to be
  12115. // intersected first.
  12116. innerIntersect.x = max(innerIntersect.x, outerIntersect.x);
  12117. innerIntersect.y = min(innerIntersect.y, outerIntersect.y);
  12118. setIntersection(ix, 0, outerIntersect.x, true, true); // positive, enter
  12119. setIntersection(ix, 1, innerIntersect.x, false, true); // negative, enter
  12120. setIntersection(ix, 2, innerIntersect.y, false, false); // negative, exit
  12121. setIntersection(ix, 3, outerIntersect.y, true, false); // positive, exit
  12122. }
  12123. #endif
  12124. // Flip the ray because the intersection function expects a cone growing towards +Z.
  12125. #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF) || defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF) || defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF)
  12126. Ray flippedRay = outerRay;
  12127. flippedRay.dir.z *= -1.0;
  12128. flippedRay.pos.z *= -1.0;
  12129. #endif
  12130. // Bottom cone
  12131. #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF)
  12132. vec2 bottomConeIntersection = intersectRegularCone(flippedRay, u_ellipsoidRenderLatitudeCosSqrHalfMinMax.x);
  12133. setIntersectionPair(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN, bottomConeIntersection);
  12134. #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF)
  12135. vec2 bottomConeIntersection = intersectZPlane(flippedRay);
  12136. setIntersectionPair(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN, bottomConeIntersection);
  12137. #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF)
  12138. vec4 bottomConeIntersection = intersectFlippedCone(ray, u_ellipsoidRenderLatitudeCosSqrHalfMinMax.x);
  12139. setIntersectionPair(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN + 0, bottomConeIntersection.xy);
  12140. setIntersectionPair(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN + 1, bottomConeIntersection.zw);
  12141. #endif
  12142. // Top cone
  12143. #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF)
  12144. vec4 topConeIntersection = intersectFlippedCone(flippedRay, u_ellipsoidRenderLatitudeCosSqrHalfMinMax.y);
  12145. setIntersectionPair(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX + 0, topConeIntersection.xy);
  12146. setIntersectionPair(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX + 1, topConeIntersection.zw);
  12147. #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF)
  12148. vec2 topConeIntersection = intersectZPlane(ray);
  12149. setIntersectionPair(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX, topConeIntersection);
  12150. #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF)
  12151. vec2 topConeIntersection = intersectRegularCone(ray, u_ellipsoidRenderLatitudeCosSqrHalfMinMax.y);
  12152. setIntersectionPair(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX, topConeIntersection);
  12153. #endif
  12154. // Wedge
  12155. #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO)
  12156. vec4 wedgeIntersect = intersectHalfPlane(ray, u_ellipsoidRenderLongitudeMinMax.x);
  12157. setIntersectionPair(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 0, wedgeIntersect.xy);
  12158. setIntersectionPair(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 1, wedgeIntersect.zw);
  12159. #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF)
  12160. vec2 wedgeIntersect = intersectRegularWedge(ray, u_ellipsoidRenderLongitudeMinMax.x, u_ellipsoidRenderLongitudeMinMax.y);
  12161. setIntersectionPair(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE, wedgeIntersect);
  12162. #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_HALF)
  12163. vec2 wedgeIntersect = intersectHalfSpace(ray, u_ellipsoidRenderLongitudeMinMax.x);
  12164. setIntersectionPair(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE, wedgeIntersect);
  12165. #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF)
  12166. vec4 wedgeIntersect = intersectFlippedWedge(ray, u_ellipsoidRenderLongitudeMinMax.x, u_ellipsoidRenderLongitudeMinMax.y);
  12167. setIntersectionPair(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 0, wedgeIntersect.xy);
  12168. setIntersectionPair(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 1, wedgeIntersect.zw);
  12169. #endif
  12170. }
  12171. `;var IOi=T(S(),1),PT=`// Main intersection function for Voxel scenes.
  12172. // See IntersectBox.glsl, IntersectCylinder.glsl, or IntersectEllipsoid.glsl
  12173. // for the definition of intersectShape. The appropriate function is selected
  12174. // based on the VoxelPrimitive shape type, and added to the shader in
  12175. // Scene/VoxelRenderResources.js.
  12176. // See also IntersectClippingPlane.glsl and IntersectDepth.glsl.
  12177. // See IntersectionUtils.glsl for the definitions of Ray, NO_HIT,
  12178. // getFirstIntersection, initializeIntersections, nextIntersection.
  12179. /* Intersection defines (set in Scene/VoxelRenderResources.js)
  12180. #define INTERSECTION_COUNT ###
  12181. */
  12182. RayShapeIntersection intersectScene(in vec2 screenCoord, in Ray ray, out Intersections ix) {
  12183. // Do a ray-shape intersection to find the exact starting and ending points.
  12184. intersectShape(ray, ix);
  12185. // Exit early if the positive shape was completely missed or behind the ray.
  12186. RayShapeIntersection intersection = getFirstIntersection(ix);
  12187. if (intersection.entry.w == NO_HIT) {
  12188. // Positive shape was completely missed - so exit early.
  12189. return intersection;
  12190. }
  12191. // Clipping planes
  12192. #if defined(CLIPPING_PLANES)
  12193. intersectClippingPlanes(ray, ix);
  12194. #endif
  12195. // Depth
  12196. #if defined(DEPTH_TEST)
  12197. intersectDepth(screenCoord, ray, ix);
  12198. #endif
  12199. // Find the first intersection that's in front of the ray
  12200. #if (INTERSECTION_COUNT > 1)
  12201. initializeIntersections(ix);
  12202. for (int i = 0; i < INTERSECTION_COUNT; ++i) {
  12203. intersection = nextIntersection(ix);
  12204. if (intersection.exit.w > 0.0) {
  12205. // Set start to 0.0 when ray is inside the shape.
  12206. intersection.entry.w = max(intersection.entry.w, 0.0);
  12207. break;
  12208. }
  12209. }
  12210. #else
  12211. // Set start to 0.0 when ray is inside the shape.
  12212. intersection.entry.w = max(intersection.entry.w, 0.0);
  12213. #endif
  12214. return intersection;
  12215. }
  12216. `;var POi=T(S(),1),zF=`/* Box defines (set in Scene/VoxelBoxShape.js)
  12217. #define BOX_HAS_SHAPE_BOUNDS
  12218. */
  12219. #if defined(BOX_HAS_SHAPE_BOUNDS)
  12220. uniform vec3 u_boxUvToShapeUvScale;
  12221. uniform vec3 u_boxUvToShapeUvTranslate;
  12222. #endif
  12223. vec3 convertUvToShapeUvSpace(in vec3 positionUv) {
  12224. #if defined(BOX_HAS_SHAPE_BOUNDS)
  12225. return positionUv * u_boxUvToShapeUvScale + u_boxUvToShapeUvTranslate;
  12226. #else
  12227. return positionUv;
  12228. #endif
  12229. }
  12230. vec3 convertShapeUvToUvSpace(in vec3 shapeUv) {
  12231. #if defined(BOX_HAS_SHAPE_BOUNDS)
  12232. return (shapeUv - u_boxUvToShapeUvTranslate) / u_boxUvToShapeUvScale;
  12233. #else
  12234. return shapeUv;
  12235. #endif
  12236. }
  12237. `;var wOi=T(S(),1),JF=`/* Cylinder defines (set in Scene/VoxelCylinderShape.js)
  12238. #define CYLINDER_HAS_SHAPE_BOUNDS_RADIUS
  12239. #define CYLINDER_HAS_SHAPE_BOUNDS_RADIUS_FLAT
  12240. #define CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT
  12241. #define CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT_FLAT
  12242. #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE
  12243. #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_RANGE_EQUAL_ZERO
  12244. #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY
  12245. #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY
  12246. #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED
  12247. */
  12248. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS)
  12249. uniform vec2 u_cylinderUvToShapeUvRadius; // x = scale, y = offset
  12250. #endif
  12251. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT)
  12252. uniform vec2 u_cylinderUvToShapeUvHeight; // x = scale, y = offset
  12253. #endif
  12254. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE)
  12255. uniform vec2 u_cylinderUvToShapeUvAngle; // x = scale, y = offset
  12256. #endif
  12257. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY) || defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY)
  12258. uniform vec2 u_cylinderShapeUvAngleMinMax;
  12259. #endif
  12260. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY) || defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY) || defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED)
  12261. uniform float u_cylinderShapeUvAngleRangeZeroMid;
  12262. #endif
  12263. vec3 convertUvToShapeUvSpace(in vec3 positionUv) {
  12264. vec3 positionLocal = positionUv * 2.0 - 1.0; // [-1,+1]
  12265. // Compute radius
  12266. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS_FLAT)
  12267. float radius = 1.0;
  12268. #else
  12269. float radius = length(positionLocal.xy); // [0,1]
  12270. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS)
  12271. radius = radius * u_cylinderUvToShapeUvRadius.x + u_cylinderUvToShapeUvRadius.y; // x = scale, y = offset
  12272. #endif
  12273. #endif
  12274. // Compute height
  12275. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT_FLAT)
  12276. float height = 1.0;
  12277. #else
  12278. float height = positionUv.z; // [0,1]
  12279. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT)
  12280. height = height * u_cylinderUvToShapeUvHeight.x + u_cylinderUvToShapeUvHeight.y; // x = scale, y = offset
  12281. #endif
  12282. #endif
  12283. // Compute angle
  12284. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_RANGE_EQUAL_ZERO)
  12285. float angle = 1.0;
  12286. #else
  12287. float angle = (atan(positionLocal.y, positionLocal.x) + czm_pi) / czm_twoPi; // [0,1]
  12288. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE)
  12289. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED)
  12290. // Comparing against u_cylinderShapeUvAngleMinMax has precision problems. u_cylinderShapeUvAngleRangeZeroMid is more conservative.
  12291. angle += float(angle < u_cylinderShapeUvAngleRangeZeroMid);
  12292. #endif
  12293. // Avoid flickering from reading voxels from both sides of the -pi/+pi discontinuity.
  12294. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY)
  12295. angle = angle > u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.x : angle;
  12296. #elif defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY)
  12297. angle = angle < u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.y : angle;
  12298. #endif
  12299. angle = angle * u_cylinderUvToShapeUvAngle.x + u_cylinderUvToShapeUvAngle.y; // x = scale, y = offset
  12300. #endif
  12301. #endif
  12302. return vec3(radius, height, angle);
  12303. }
  12304. `;var AOi=T(S(),1),QF=`/* Ellipsoid defines (set in Scene/VoxelEllipsoidShape.js)
  12305. #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY
  12306. #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY
  12307. #define ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE
  12308. #define ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO
  12309. #define ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED
  12310. #define ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE
  12311. #define ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE_RANGE_EQUAL_ZERO
  12312. #define ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_MIN
  12313. #define ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_FLAT
  12314. #define ELLIPSOID_IS_SPHERE
  12315. */
  12316. uniform vec3 u_ellipsoidRadiiUv; // [0,1]
  12317. #if !defined(ELLIPSOID_IS_SPHERE)
  12318. uniform vec3 u_ellipsoidInverseRadiiSquaredUv;
  12319. #endif
  12320. #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY) || defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY) || defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED)
  12321. uniform vec3 u_ellipsoidShapeUvLongitudeMinMaxMid;
  12322. #endif
  12323. #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE)
  12324. uniform vec2 u_ellipsoidUvToShapeUvLongitude; // x = scale, y = offset
  12325. #endif
  12326. #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE)
  12327. uniform vec2 u_ellipsoidUvToShapeUvLatitude; // x = scale, y = offset
  12328. #endif
  12329. #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_MIN) && !defined(ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_FLAT)
  12330. uniform float u_ellipsoidInverseHeightDifferenceUv;
  12331. uniform vec2 u_ellipseInnerRadiiUv; // [0,1]
  12332. #endif
  12333. // robust iterative solution without trig functions
  12334. // https://github.com/0xfaded/ellipse_demo/issues/1
  12335. // https://stackoverflow.com/questions/22959698/distance-from-given-point-to-given-ellipse
  12336. // Pro: Good when radii.x ~= radii.y
  12337. // Con: Breaks at pos.x ~= 0.0, especially inside the ellipse
  12338. // Con: Inaccurate with exterior points and thin ellipses
  12339. float ellipseDistanceIterative (vec2 pos, vec2 radii) {
  12340. vec2 p = abs(pos);
  12341. vec2 invRadii = 1.0 / radii;
  12342. vec2 a = vec2(1.0, -1.0) * (radii.x * radii.x - radii.y * radii.y) * invRadii;
  12343. vec2 t = vec2(0.70710678118); // sqrt(2) / 2
  12344. vec2 v = radii * t;
  12345. const int iterations = 3;
  12346. for (int i = 0; i < iterations; ++i) {
  12347. vec2 e = a * pow(t, vec2(3.0));
  12348. vec2 q = normalize(p - e) * length(v - e);
  12349. t = normalize((q + e) * invRadii);
  12350. v = radii * t;
  12351. }
  12352. return length(v * sign(pos) - pos) * sign(p.y - v.y);
  12353. }
  12354. vec3 convertUvToShapeUvSpace(in vec3 positionUv) {
  12355. // Compute position and normal.
  12356. // Convert positionUv [0,1] to local space [-1,+1] to "normalized" cartesian space [-a,+a] where a = (radii + height) / (max(radii) + height).
  12357. // A point on the largest ellipsoid axis would be [-1,+1] and everything else would be smaller.
  12358. vec3 positionLocal = positionUv * 2.0 - 1.0;
  12359. #if defined(ELLIPSOID_IS_SPHERE)
  12360. vec3 posEllipsoid = positionLocal * u_ellipsoidRadiiUv.x;
  12361. vec3 normal = normalize(posEllipsoid);
  12362. #else
  12363. vec3 posEllipsoid = positionLocal * u_ellipsoidRadiiUv;
  12364. vec3 normal = normalize(posEllipsoid * u_ellipsoidInverseRadiiSquaredUv); // geodetic surface normal
  12365. #endif
  12366. // Compute longitude
  12367. #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO)
  12368. float longitude = 1.0;
  12369. #else
  12370. float longitude = (atan(normal.y, normal.x) + czm_pi) / czm_twoPi;
  12371. // Correct the angle when max < min
  12372. // Technically this should compare against min longitude - but it has precision problems so compare against the middle of empty space.
  12373. #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED)
  12374. longitude += float(longitude < u_ellipsoidShapeUvLongitudeMinMaxMid.z);
  12375. #endif
  12376. // Avoid flickering from reading voxels from both sides of the -pi/+pi discontinuity.
  12377. #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY)
  12378. longitude = longitude > u_ellipsoidShapeUvLongitudeMinMaxMid.z ? u_ellipsoidShapeUvLongitudeMinMaxMid.x : longitude;
  12379. #endif
  12380. #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY)
  12381. longitude = longitude < u_ellipsoidShapeUvLongitudeMinMaxMid.z ? u_ellipsoidShapeUvLongitudeMinMaxMid.y : longitude;
  12382. #endif
  12383. #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE)
  12384. longitude = longitude * u_ellipsoidUvToShapeUvLongitude.x + u_ellipsoidUvToShapeUvLongitude.y;
  12385. #endif
  12386. #endif
  12387. // Compute latitude
  12388. #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE_RANGE_EQUAL_ZERO)
  12389. float latitude = 1.0;
  12390. #else
  12391. float latitude = (asin(normal.z) + czm_piOverTwo) / czm_pi;
  12392. #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE)
  12393. latitude = latitude * u_ellipsoidUvToShapeUvLatitude.x + u_ellipsoidUvToShapeUvLatitude.y;
  12394. #endif
  12395. #endif
  12396. // Compute height
  12397. #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_FLAT)
  12398. // TODO: This breaks down when minBounds == maxBounds. To fix it, this
  12399. // function would have to know if ray is intersecting the front or back of the shape
  12400. // and set the shape space position to 1 (front) or 0 (back) accordingly.
  12401. float height = 1.0;
  12402. #else
  12403. #if defined(ELLIPSOID_IS_SPHERE)
  12404. #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_MIN)
  12405. float height = (length(posEllipsoid) - u_ellipseInnerRadiiUv.x) * u_ellipsoidInverseHeightDifferenceUv;
  12406. #else
  12407. float height = length(posEllipsoid);
  12408. #endif
  12409. #else
  12410. #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_MIN)
  12411. // Convert the 3D position to a 2D position relative to the ellipse (radii.x, radii.z) (assuming radii.x == radii.y which is true for WGS84).
  12412. // This is an optimization so that math can be done with ellipses instead of ellipsoids.
  12413. vec2 posEllipse = vec2(length(posEllipsoid.xy), posEllipsoid.z);
  12414. float height = ellipseDistanceIterative(posEllipse, u_ellipseInnerRadiiUv) * u_ellipsoidInverseHeightDifferenceUv;
  12415. #else
  12416. // TODO: this is probably not correct
  12417. float height = length(posEllipsoid);
  12418. #endif
  12419. #endif
  12420. #endif
  12421. return vec3(longitude, latitude, height);
  12422. }
  12423. `;var NOi=T(S(),1),jF=`// These octree flags must be in sync with GpuOctreeFlag in VoxelTraversal.js
  12424. #define OCTREE_FLAG_INTERNAL 0
  12425. #define OCTREE_FLAG_LEAF 1
  12426. #define OCTREE_FLAG_PACKED_LEAF_FROM_PARENT 2
  12427. #define OCTREE_MAX_LEVELS 32 // Harcoded value because GLSL doesn't like variable length loops
  12428. uniform sampler2D u_octreeInternalNodeTexture;
  12429. uniform vec2 u_octreeInternalNodeTexelSizeUv;
  12430. uniform int u_octreeInternalNodeTilesPerRow;
  12431. #if (SAMPLE_COUNT > 1)
  12432. uniform sampler2D u_octreeLeafNodeTexture;
  12433. uniform vec2 u_octreeLeafNodeTexelSizeUv;
  12434. uniform int u_octreeLeafNodeTilesPerRow;
  12435. #endif
  12436. struct OctreeNodeData {
  12437. int data;
  12438. int flag;
  12439. };
  12440. struct TraversalData {
  12441. ivec4 octreeCoords;
  12442. int parentOctreeIndex;
  12443. };
  12444. struct SampleData {
  12445. int megatextureIndex;
  12446. ivec4 tileCoords;
  12447. vec3 tileUv;
  12448. #if (SAMPLE_COUNT > 1)
  12449. float weight;
  12450. #endif
  12451. };
  12452. // Integer mod: For WebGL1 only
  12453. int intMod(in int a, in int b) {
  12454. return a - (b * (a / b));
  12455. }
  12456. int normU8_toInt(in float value) {
  12457. return int(value * 255.0);
  12458. }
  12459. int normU8x2_toInt(in vec2 value) {
  12460. return int(value.x * 255.0) + 256 * int(value.y * 255.0);
  12461. }
  12462. float normU8x2_toFloat(in vec2 value) {
  12463. return float(normU8x2_toInt(value)) / 65535.0;
  12464. }
  12465. OctreeNodeData getOctreeNodeData(in vec2 octreeUv) {
  12466. vec4 texData = texture(u_octreeInternalNodeTexture, octreeUv);
  12467. OctreeNodeData data;
  12468. data.data = normU8x2_toInt(texData.xy);
  12469. data.flag = normU8x2_toInt(texData.zw);
  12470. return data;
  12471. }
  12472. OctreeNodeData getOctreeChildData(in int parentOctreeIndex, in ivec3 childCoord) {
  12473. int childIndex = childCoord.z * 4 + childCoord.y * 2 + childCoord.x;
  12474. int octreeCoordX = intMod(parentOctreeIndex, u_octreeInternalNodeTilesPerRow) * 9 + 1 + childIndex;
  12475. int octreeCoordY = parentOctreeIndex / u_octreeInternalNodeTilesPerRow;
  12476. vec2 octreeUv = u_octreeInternalNodeTexelSizeUv * vec2(float(octreeCoordX) + 0.5, float(octreeCoordY) + 0.5);
  12477. return getOctreeNodeData(octreeUv);
  12478. }
  12479. int getOctreeParentIndex(in int octreeIndex) {
  12480. int octreeCoordX = intMod(octreeIndex, u_octreeInternalNodeTilesPerRow) * 9;
  12481. int octreeCoordY = octreeIndex / u_octreeInternalNodeTilesPerRow;
  12482. vec2 octreeUv = u_octreeInternalNodeTexelSizeUv * vec2(float(octreeCoordX) + 0.5, float(octreeCoordY) + 0.5);
  12483. vec4 parentData = texture(u_octreeInternalNodeTexture, octreeUv);
  12484. int parentOctreeIndex = normU8x2_toInt(parentData.xy);
  12485. return parentOctreeIndex;
  12486. }
  12487. /**
  12488. * Convert a position in the uv-space of the tileset bounding shape
  12489. * into the uv-space of a tile within the tileset
  12490. */
  12491. vec3 getTileUv(in vec3 shapePosition, in ivec4 octreeCoords) {
  12492. // PERFORMANCE_IDEA: use bit-shifting (only in WebGL2)
  12493. float dimAtLevel = pow(2.0, float(octreeCoords.w));
  12494. return shapePosition * dimAtLevel - vec3(octreeCoords.xyz);
  12495. }
  12496. void getOctreeLeafSampleData(in OctreeNodeData data, in ivec4 octreeCoords, out SampleData sampleData) {
  12497. sampleData.megatextureIndex = data.data;
  12498. sampleData.tileCoords = (data.flag == OCTREE_FLAG_PACKED_LEAF_FROM_PARENT)
  12499. ? ivec4(octreeCoords.xyz / 2, octreeCoords.w - 1)
  12500. : octreeCoords;
  12501. }
  12502. #if (SAMPLE_COUNT > 1)
  12503. void getOctreeLeafSampleDatas(in OctreeNodeData data, in ivec4 octreeCoords, out SampleData sampleDatas[SAMPLE_COUNT]) {
  12504. int leafIndex = data.data;
  12505. int leafNodeTexelCount = 2;
  12506. // Adding 0.5 moves to the center of the texel
  12507. float leafCoordXStart = float(intMod(leafIndex, u_octreeLeafNodeTilesPerRow) * leafNodeTexelCount) + 0.5;
  12508. float leafCoordY = float(leafIndex / u_octreeLeafNodeTilesPerRow) + 0.5;
  12509. // Get an interpolation weight and a flag to determine whether to read the parent texture
  12510. vec2 leafUv0 = u_octreeLeafNodeTexelSizeUv * vec2(leafCoordXStart + 0.0, leafCoordY);
  12511. vec4 leafData0 = texture(u_octreeLeafNodeTexture, leafUv0);
  12512. float lerp = normU8x2_toFloat(leafData0.xy);
  12513. sampleDatas[0].weight = 1.0 - lerp;
  12514. sampleDatas[1].weight = lerp;
  12515. // TODO: this looks wrong? Should be comparing to OCTREE_FLAG_PACKED_LEAF_FROM_PARENT
  12516. sampleDatas[0].tileCoords = (normU8_toInt(leafData0.z) == 1)
  12517. ? ivec4(octreeCoords.xyz / 2, octreeCoords.w - 1)
  12518. : octreeCoords;
  12519. sampleDatas[1].tileCoords = (normU8_toInt(leafData0.w) == 1)
  12520. ? ivec4(octreeCoords.xyz / 2, octreeCoords.w - 1)
  12521. : octreeCoords;
  12522. // Get megatexture indices for both samples
  12523. vec2 leafUv1 = u_octreeLeafNodeTexelSizeUv * vec2(leafCoordXStart + 1.0, leafCoordY);
  12524. vec4 leafData1 = texture(u_octreeLeafNodeTexture, leafUv1);
  12525. sampleDatas[0].megatextureIndex = normU8x2_toInt(leafData1.xy);
  12526. sampleDatas[1].megatextureIndex = normU8x2_toInt(leafData1.zw);
  12527. }
  12528. #endif
  12529. OctreeNodeData traverseOctreeDownwards(in vec3 shapePosition, inout TraversalData traversalData) {
  12530. float sizeAtLevel = 1.0 / pow(2.0, float(traversalData.octreeCoords.w));
  12531. vec3 start = vec3(traversalData.octreeCoords.xyz) * sizeAtLevel;
  12532. vec3 end = start + vec3(sizeAtLevel);
  12533. OctreeNodeData childData;
  12534. for (int i = 0; i < OCTREE_MAX_LEVELS; ++i) {
  12535. // Find out which octree child contains the position
  12536. // 0 if before center, 1 if after
  12537. vec3 center = 0.5 * (start + end);
  12538. vec3 childCoord = step(center, shapePosition);
  12539. // Get octree coords for the next level down
  12540. ivec4 octreeCoords = traversalData.octreeCoords;
  12541. traversalData.octreeCoords = ivec4(octreeCoords.xyz * 2 + ivec3(childCoord), octreeCoords.w + 1);
  12542. childData = getOctreeChildData(traversalData.parentOctreeIndex, ivec3(childCoord));
  12543. if (childData.flag != OCTREE_FLAG_INTERNAL) {
  12544. // leaf tile - stop traversing
  12545. break;
  12546. }
  12547. // interior tile - keep going deeper
  12548. start = mix(start, center, childCoord);
  12549. end = mix(center, end, childCoord);
  12550. traversalData.parentOctreeIndex = childData.data;
  12551. }
  12552. return childData;
  12553. }
  12554. /**
  12555. * Transform a given position to an octree tile coordinate and a position within that tile,
  12556. * and find the corresponding megatexture index and texture coordinates
  12557. */
  12558. void traverseOctreeFromBeginning(in vec3 shapePosition, out TraversalData traversalData, out SampleData sampleDatas[SAMPLE_COUNT]) {
  12559. traversalData.octreeCoords = ivec4(0);
  12560. traversalData.parentOctreeIndex = 0;
  12561. OctreeNodeData nodeData = getOctreeNodeData(vec2(0.0));
  12562. if (nodeData.flag != OCTREE_FLAG_LEAF) {
  12563. nodeData = traverseOctreeDownwards(shapePosition, traversalData);
  12564. }
  12565. #if (SAMPLE_COUNT == 1)
  12566. getOctreeLeafSampleData(nodeData, traversalData.octreeCoords, sampleDatas[0]);
  12567. sampleDatas[0].tileUv = getTileUv(shapePosition, sampleDatas[0].tileCoords);
  12568. #else
  12569. getOctreeLeafSampleDatas(nodeData, traversalData.octreeCoords, sampleDatas);
  12570. sampleDatas[0].tileUv = getTileUv(shapePosition, sampleDatas[0].tileCoords);
  12571. sampleDatas[1].tileUv = getTileUv(shapePosition, sampleDatas[1].tileCoords);
  12572. #endif
  12573. }
  12574. bool inRange(in vec3 v, in vec3 minVal, in vec3 maxVal) {
  12575. return clamp(v, minVal, maxVal) == v;
  12576. }
  12577. bool insideTile(in vec3 shapePosition, in ivec4 octreeCoords) {
  12578. vec3 tileUv = getTileUv(shapePosition, octreeCoords);
  12579. bool inside = inRange(tileUv, vec3(0.0), vec3(1.0));
  12580. // Assume (!) the position is always inside the root tile.
  12581. return inside || octreeCoords.w == 0;
  12582. }
  12583. void traverseOctreeFromExisting(in vec3 shapePosition, inout TraversalData traversalData, inout SampleData sampleDatas[SAMPLE_COUNT]) {
  12584. if (insideTile(shapePosition, traversalData.octreeCoords)) {
  12585. for (int i = 0; i < SAMPLE_COUNT; i++) {
  12586. sampleDatas[0].tileUv = getTileUv(shapePosition, sampleDatas[0].tileCoords);
  12587. }
  12588. return;
  12589. }
  12590. // Go up tree until we find a parent tile containing shapePosition
  12591. for (int i = 0; i < OCTREE_MAX_LEVELS; ++i) {
  12592. traversalData.octreeCoords.xyz /= 2;
  12593. traversalData.octreeCoords.w -= 1;
  12594. if (insideTile(shapePosition, traversalData.octreeCoords)) {
  12595. break;
  12596. }
  12597. traversalData.parentOctreeIndex = getOctreeParentIndex(traversalData.parentOctreeIndex);
  12598. }
  12599. // Go down tree
  12600. OctreeNodeData nodeData = traverseOctreeDownwards(shapePosition, traversalData);
  12601. #if (SAMPLE_COUNT == 1)
  12602. getOctreeLeafSampleData(nodeData, traversalData.octreeCoords, sampleDatas[0]);
  12603. sampleDatas[0].tileUv = getTileUv(shapePosition, sampleDatas[0].tileCoords);
  12604. #else
  12605. getOctreeLeafSampleDatas(nodeData, traversalData.octreeCoords, sampleDatas);
  12606. sampleDatas[0].tileUv = getTileUv(shapePosition, sampleDatas[0].tileCoords);
  12607. sampleDatas[1].tileUv = getTileUv(shapePosition, sampleDatas[1].tileCoords);
  12608. #endif
  12609. }
  12610. `;var kOi=T(S(),1),qF=`// See Octree.glsl for the definitions of SampleData and intMod
  12611. /* Megatexture defines (set in Scene/VoxelRenderResources.js)
  12612. #define SAMPLE_COUNT ###
  12613. #define NEAREST_SAMPLING
  12614. #define PADDING
  12615. */
  12616. uniform ivec2 u_megatextureSliceDimensions; // number of slices per tile, in two dimensions
  12617. uniform ivec2 u_megatextureTileDimensions; // number of tiles per megatexture, in two dimensions
  12618. uniform vec2 u_megatextureVoxelSizeUv;
  12619. uniform vec2 u_megatextureSliceSizeUv;
  12620. uniform vec2 u_megatextureTileSizeUv;
  12621. uniform ivec3 u_dimensions; // does not include padding
  12622. #if defined(PADDING)
  12623. uniform ivec3 u_paddingBefore;
  12624. uniform ivec3 u_paddingAfter;
  12625. #endif
  12626. // Integer min, max, clamp: For WebGL1 only
  12627. int intMin(int a, int b) {
  12628. return a <= b ? a : b;
  12629. }
  12630. int intMax(int a, int b) {
  12631. return a >= b ? a : b;
  12632. }
  12633. int intClamp(int v, int minVal, int maxVal) {
  12634. return intMin(intMax(v, minVal), maxVal);
  12635. }
  12636. vec2 index1DTo2DTexcoord(int index, ivec2 dimensions, vec2 uvScale)
  12637. {
  12638. int indexX = intMod(index, dimensions.x);
  12639. int indexY = index / dimensions.x;
  12640. return vec2(indexX, indexY) * uvScale;
  12641. }
  12642. /*
  12643. How is 3D data stored in a 2D megatexture?
  12644. In this example there is only one loaded tile and it has 2x2x2 voxels (8 voxels total).
  12645. The data is sliced by Z. The data at Z = 0 is placed in texels (0,0), (0,1), (1,0), (1,1) and
  12646. the data at Z = 1 is placed in texels (2,0), (2,1), (3,0), (3,1).
  12647. Note that there could be empty space in the megatexture because it's a power of two.
  12648. 0 1 2 3
  12649. +---+---+---+---+
  12650. | | | | | 3
  12651. +---+---+---+---+
  12652. | | | | | 2
  12653. +-------+-------+
  12654. |010|110|011|111| 1
  12655. |--- ---|--- ---|
  12656. |000|100|001|101| 0
  12657. +-------+-------+
  12658. When doing linear interpolation the megatexture needs to be sampled twice: once for
  12659. the Z slice above the voxel coordinate and once for the slice below. The two slices
  12660. are interpolated with fract(coord.z - 0.5). For example, a Z coordinate of 1.0 is
  12661. halfway between two Z slices so the interpolation factor is 0.5. Below is a side view
  12662. of the 3D voxel grid with voxel coordinates on the left side.
  12663. 2 +---+
  12664. |001|
  12665. 1 +-z-+
  12666. |000|
  12667. 0 +---+
  12668. When doing nearest neighbor the megatexture only needs to be sampled once at the closest Z slice.
  12669. */
  12670. Properties getPropertiesFromMegatexture(in SampleData sampleData) {
  12671. vec3 tileUv = clamp(sampleData.tileUv, vec3(0.0), vec3(1.0)); // TODO is the clamp necessary?
  12672. int tileIndex = sampleData.megatextureIndex;
  12673. vec3 voxelCoord = tileUv * vec3(u_dimensions);
  12674. ivec3 voxelDimensions = u_dimensions;
  12675. #if defined(PADDING)
  12676. voxelDimensions += u_paddingBefore + u_paddingAfter;
  12677. voxelCoord += vec3(u_paddingBefore);
  12678. #endif
  12679. #if defined(NEAREST_SAMPLING)
  12680. // Round to the center of the nearest voxel
  12681. voxelCoord = floor(voxelCoord) + vec3(0.5);
  12682. #endif
  12683. // Tile location
  12684. vec2 tileUvOffset = index1DTo2DTexcoord(tileIndex, u_megatextureTileDimensions, u_megatextureTileSizeUv);
  12685. // Slice location
  12686. float slice = voxelCoord.z - 0.5;
  12687. int sliceIndex = int(floor(slice));
  12688. int sliceIndex0 = intClamp(sliceIndex, 0, voxelDimensions.z - 1);
  12689. vec2 sliceUvOffset0 = index1DTo2DTexcoord(sliceIndex0, u_megatextureSliceDimensions, u_megatextureSliceSizeUv);
  12690. // Voxel location
  12691. vec2 voxelUvOffset = clamp(voxelCoord.xy, vec2(0.5), vec2(voxelDimensions.xy) - vec2(0.5)) * u_megatextureVoxelSizeUv;
  12692. // Final location in the megatexture
  12693. vec2 uv0 = tileUvOffset + sliceUvOffset0 + voxelUvOffset;
  12694. #if defined(NEAREST_SAMPLING)
  12695. return getPropertiesFromMegatextureAtUv(uv0);
  12696. #else
  12697. float sliceLerp = fract(slice);
  12698. int sliceIndex1 = intMin(sliceIndex + 1, voxelDimensions.z - 1);
  12699. vec2 sliceUvOffset1 = index1DTo2DTexcoord(sliceIndex1, u_megatextureSliceDimensions, u_megatextureSliceSizeUv);
  12700. vec2 uv1 = tileUvOffset + sliceUvOffset1 + voxelUvOffset;
  12701. Properties properties0 = getPropertiesFromMegatextureAtUv(uv0);
  12702. Properties properties1 = getPropertiesFromMegatextureAtUv(uv1);
  12703. return mixProperties(properties0, properties1, sliceLerp);
  12704. #endif
  12705. }
  12706. // Convert an array of sample datas to a final weighted properties.
  12707. Properties accumulatePropertiesFromMegatexture(in SampleData sampleDatas[SAMPLE_COUNT]) {
  12708. #if (SAMPLE_COUNT == 1)
  12709. return getPropertiesFromMegatexture(sampleDatas[0]);
  12710. #else
  12711. // When more than one sample is taken the accumulator needs to start at 0
  12712. Properties properties = clearProperties();
  12713. for (int i = 0; i < SAMPLE_COUNT; ++i) {
  12714. float weight = sampleDatas[i].weight;
  12715. // Avoid reading the megatexture when the weight is 0 as it can be costly.
  12716. if (weight > 0.0) {
  12717. Properties tempProperties = getPropertiesFromMegatexture(sampleDatas[i]);
  12718. tempProperties = scaleProperties(tempProperties, weight);
  12719. properties = sumProperties(properties, tempProperties);
  12720. }
  12721. }
  12722. return properties;
  12723. #endif
  12724. }
  12725. `;function O0t(e){let t=new Ux;this.shaderBuilder=t;let n=e._customShader,i=xt(e._uniformMap,n.uniformMap);e._uniformMap=i;let o=n.uniforms;for(let p in o)if(o.hasOwnProperty(p)){let y=o[p];t.addUniform(y.type,p,Le.FRAGMENT)}t.addUniform("sampler2D","u_megatextureTextures[METADATA_COUNT]",Le.FRAGMENT),this.uniformMap=i;let r=e._clippingPlanes,s=d(r)&&r.enabled?r.length:0;this.clippingPlanes=r,this.clippingPlanesLength=s,t.addVertexLines([kF]),t.addFragmentLines([n.fragmentShaderText,"#line 0",jF,DF,qF]),s>0&&(t.addDefine("CLIPPING_PLANES",void 0,Le.FRAGMENT),t.addDefine("CLIPPING_PLANES_COUNT",s,Le.FRAGMENT),r.unionClippingRegions&&t.addDefine("CLIPPING_PLANES_UNION",void 0,Le.FRAGMENT),t.addFragmentLines([YF])),e._depthTest&&(t.addDefine("DEPTH_TEST",void 0,Le.FRAGMENT),t.addFragmentLines([BF]));let a=e._provider.shape;a==="BOX"?(t.addDefine("SHAPE_BOX",void 0,Le.FRAGMENT),t.addFragmentLines([zF,OF,PT])):a==="CYLINDER"?t.addFragmentLines([KF,PT,JF]):a==="ELLIPSOID"&&t.addFragmentLines([HF,PT,QF]),t.addFragmentLines([UF]);let c=e._shape,l=c.shaderDefines;for(let p in l)if(l.hasOwnProperty(p)){let y=l[p];d(y)&&(y=y===!0?void 0:y,t.addDefine(p,y,Le.FRAGMENT))}let u=c.shaderMaximumIntersectionsLength;s>0&&(t.addDefine("CLIPPING_PLANES_INTERSECTION_INDEX",u,Le.FRAGMENT),s===1?u+=1:r.unionClippingRegions?u+=2:u+=1),e._depthTest&&(t.addDefine("DEPTH_INTERSECTION_INDEX",u,Le.FRAGMENT),u+=1),t.addDefine("INTERSECTION_COUNT",u,Le.FRAGMENT),(!h.equals(e.paddingBefore,h.ZERO)||!h.equals(e.paddingAfter,h.ZERO))&&t.addDefine("PADDING",void 0,Le.FRAGMENT),e._useLogDepth&&t.addDefine("LOG_DEPTH_READ_ONLY",void 0,Le.FRAGMENT),e._jitter&&t.addDefine("JITTER",void 0,Le.FRAGMENT),e._nearestSampling&&t.addDefine("NEAREST_SAMPLING",void 0,Le.FRAGMENT);let m=e._traversal;t.addDefine("SAMPLE_COUNT",`${m._sampleCount}`,Le.FRAGMENT)}var $F=O0t;var hKi=T(S(),1);function K0t(e,t){let{shaderBuilder:n}=e,{names:i,types:o,componentTypes:r,minimumValues:s,maximumValues:a}=t._provider,c=o.length,l=d(s)&&d(a);n.addDefine("METADATA_COUNT",c,Le.FRAGMENT),l&&n.addDefine("STATISTICS",void 0,Le.FRAGMENT);for(let v=0;v<c;v++){let F=i[v],M=o[v],b=`PropertyStatistics_${F}`,R=`PropertyStatistics_${F}`;n.addStruct(b,R,Le.FRAGMENT);let E=mD(M);n.addStructField(b,E,"min"),n.addStructField(b,E,"max")}let u="Statistics",m="Statistics",p="statistics";n.addStruct(u,m,Le.FRAGMENT);for(let v=0;v<c;v++){let F=i[v],M=`PropertyStatistics_${F}`,b=F;n.addStructField(u,M,b)}let y="Metadata",f="Metadata",x="metadata";n.addStruct(y,f,Le.FRAGMENT),n.addStructField(y,m,p);for(let v=0;v<c;v++){let F=i[v],M=o[v],b=mD(M);n.addStructField(y,b,F)}for(let v=0;v<c;v++){let F=i[v],M=o[v],b=z0t(M),R=`VoxelProperty_${F}`,E=`VoxelProperty_${F}`;n.addStruct(R,E,Le.FRAGMENT),n.addStructField(R,b,"partialDerivativeLocal"),n.addStructField(R,b,"partialDerivativeWorld"),n.addStructField(R,b,"partialDerivativeView"),n.addStructField(R,b,"partialDerivativeValid")}let _="Voxel",C="Voxel",V="voxel";n.addStruct(_,C,Le.FRAGMENT);for(let v=0;v<c;v++){let F=i[v],M=`VoxelProperty_${F}`;n.addStructField(_,M,F)}n.addStructField(_,"vec3","positionEC"),n.addStructField(_,"vec3","positionUv"),n.addStructField(_,"vec3","positionShapeUv"),n.addStructField(_,"vec3","positionUvLocal"),n.addStructField(_,"vec3","viewDirUv"),n.addStructField(_,"vec3","viewDirWorld"),n.addStructField(_,"vec3","surfaceNormal"),n.addStructField(_,"float","travelDistance");let L="FragmentInput",Z="FragmentInput";n.addStruct(L,Z,Le.FRAGMENT),n.addStructField(L,f,x),n.addStructField(L,C,V);let G="Properties",X="Properties",P="properties";n.addStruct(G,X,Le.FRAGMENT);for(let v=0;v<c;v++){let F=i[v],M=o[v],b=mD(M);n.addStructField(G,b,F)}{let v="clearProperties";n.addFunction(v,`${X} clearProperties()`,Le.FRAGMENT),n.addFunctionLines(v,[`${X} ${P};`]);for(let F=0;F<c;F++){let M=i[F],b=o[F],R=r[F],E=mD(b,R);n.addFunctionLines(v,[`${P}.${M} = ${E}(0.0);`])}n.addFunctionLines(v,[`return ${P};`])}{let v="sumProperties";n.addFunction(v,`${X} sumProperties(${X} propertiesA, ${X} propertiesB)`,Le.FRAGMENT),n.addFunctionLines(v,[`${X} ${P};`]);for(let F=0;F<c;F++){let M=i[F];n.addFunctionLines(v,[`${P}.${M} = propertiesA.${M} + propertiesB.${M};`])}n.addFunctionLines(v,[`return ${P};`])}{let v="scaleProperties";n.addFunction(v,`${X} scaleProperties(${X} ${P}, float scale)`,Le.FRAGMENT),n.addFunctionLines(v,[`${X} scaledProperties = ${P};`]);for(let F=0;F<c;F++){let M=i[F];n.addFunctionLines(v,[`scaledProperties.${M} *= scale;`])}n.addFunctionLines(v,["return scaledProperties;"])}{let v="mixProperties";n.addFunction(v,`${X} mixProperties(${X} propertiesA, ${X} propertiesB, float mixFactor)`,Le.FRAGMENT),n.addFunctionLines(v,[`${X} ${P};`]);for(let F=0;F<c;F++){let M=i[F];n.addFunctionLines(v,[`${P}.${M} = mix(propertiesA.${M}, propertiesB.${M}, mixFactor);`])}n.addFunctionLines(v,[`return ${P};`])}{let v="copyPropertiesToMetadata";n.addFunction(v,`void copyPropertiesToMetadata(in ${X} ${P}, inout ${f} ${x})`,Le.FRAGMENT);for(let F=0;F<c;F++){let M=i[F];n.addFunctionLines(v,[`${x}.${M} = ${P}.${M};`])}}if(l){let v="setStatistics";n.addFunction(v,`void setStatistics(inout ${m} ${p})`,Le.FRAGMENT);for(let F=0;F<c;F++){let M=i[F],b=o[F],R=Ot.getComponentCount(b);for(let E=0;E<R;E++){let I=J0t(b,E),w=s[F][E],N=a[F][E];n.addFunctionLines(v,[`${p}.${M}.min${I} = ${gxe(w)};`,`${p}.${M}.max${I} = ${gxe(N)};`])}}}{let v="getPropertiesFromMegatextureAtUv";n.addFunction(v,`${X} getPropertiesFromMegatextureAtUv(vec2 texcoord)`,Le.FRAGMENT),n.addFunctionLines(v,[`${X} ${P};`]);for(let F=0;F<c;F++){let M=i[F],b=o[F],R=r[F],E=H0t(b,R);n.addFunctionLines(v,[`properties.${M} = texture(u_megatextureTextures[${F}], texcoord)${E};`])}n.addFunctionLines(v,[`return ${P};`])}}function mD(e){if(e===Ot.SCALAR)return"float";if(e===Ot.VEC2)return"vec2";if(e===Ot.VEC3)return"vec3";if(e===Ot.VEC4)return"vec4"}function H0t(e){if(e===Ot.SCALAR)return".r";if(e===Ot.VEC2)return".ra";if(e===Ot.VEC3)return".rgb";if(e===Ot.VEC4)return""}function z0t(e){if(e===Ot.SCALAR)return"vec3";if(e===Ot.VEC2)return"mat2";if(e===Ot.VEC3)return"mat3";if(e===Ot.VEC4)return"mat4"}function gxe(e){let t=e.toString();return t.indexOf(".")===-1&&(t=`${e}.0`),t}function J0t(e,t){return e===Ot.SCALAR?"":`[${t}]`}var e9=K0t;function Q0t(e,t){let n=new $F(e);e9(n,e);let{shaderBuilder:i,clippingPlanes:o,clippingPlanesLength:r}=n;if(r>0){let f="getClippingPlane",x=P0(o,t),_=0,C=x.indexOf(")")+1,V=x.indexOf("{",C)+1,L=x.indexOf("}",V),Z=x.slice(_,C),G=x.slice(V,L);i.addFunction(f,Z,Le.FRAGMENT),i.addFunctionLines(f,[G])}let s=i.clone();s.addDefine("PICKING",void 0,Le.FRAGMENT);let a=i.buildShaderProgram(t),c=s.buildShaderProgram(t),l=De.fromCache({cull:{enabled:!0,face:bi.BACK},depthTest:{enabled:!1},depthMask:!1,blending:dn.PRE_MULTIPLIED_ALPHA_BLEND}),u=t.getViewportQuadVertexArray(),m=e._depthTest,p=new nt({vertexArray:u,primitiveType:Fe.TRIANGLES,renderState:l,shaderProgram:a,uniformMap:n.uniformMap,modelMatrix:e._compoundModelMatrix,pass:Re.VOXELS,executeInClosestFrustum:!0,owner:this,cull:m,occlude:m}),y=nt.shallowClone(p,new nt);if(y.shaderProgram=c,y.pickOnly=!0,d(e._drawCommand)){let f=e._drawCommand;f.shaderProgram=f.shaderProgram&&f.shaderProgram.destroy()}if(d(e._drawCommandPick)){let f=e._drawCommandPick;f.shaderProgram=f.shaderProgram&&f.shaderProgram.destroy()}e._drawCommand=p,e._drawCommandPick=y}var t9=Q0t;var OKi=T(S(),1);function lg(e,t,n,i,o,r,s){this._primitive=e;let a=i.length;this.megatextures=new Array(a);for(let x=0;x<a;x++){let _=i[x],C=Ot.getComponentCount(_),V=o[x];this.megatextures[x]=new PV(t,n,C,V,s)}let c=this.megatextures[0].maximumTileCount;this._simultaneousRequestCount=0,this._debugPrint=!1,this._frameNumber=0;let l=e._shape;this.rootNode=new wF(0,0,0,0,void 0,l,n),this._priorityQueue=new H_({maximumLength:c,comparator:Qi.priorityComparator}),this._highPriorityKeyframeNodes=new Array(c),this._keyframeNodesInMegatexture=new Array(c),this._keyframeCount=r,this._sampleCount=void 0,this._keyframeLocation=0,this._binaryTreeKeyframeWeighting=new Array(r);let u=this._binaryTreeKeyframeWeighting;u[0]=0,u[r-1]=0,Aj(u,1,r-2,0);let m=9,p=2048,y=Math.floor(p/m),f=Math.ceil(c/y);this.internalNodeTexture=new Wt({context:t,pixelFormat:st.RGBA,pixelDatatype:Je.UNSIGNED_BYTE,flipY:!1,width:p,height:f,sampler:new un({minificationFilter:cn.NEAREST,magnificationFilter:Ti.NEAREST})}),this.internalNodeTilesPerRow=y,this.internalNodeTexelSizeUv=new D(1/p,1/f),this.leafNodeTexture=void 0,this.leafNodeTilesPerRow=void 0,this.leafNodeTexelSizeUv=new D}function Aj(e,t,n,i){if(t>n)return;let o=Math.floor((t+n)/2);e[o]=i,Aj(e,t,o-1,i+1),Aj(e,o+1,n,i+1)}lg.simultaneousRequestCountMaximum=50;lg.prototype.update=function(e,t,n,i){let o=this._primitive,r=e.context,s=this.megatextures[0].maximumTileCount,a=this._keyframeCount,c=o._levelBlendFactor,l=c>0,u=a>1,m=(l?2:1)*(u?2:1);this._sampleCount=m;let p=m>=2;if(p&&!d(this.leafNodeTexture)){let V=Math.floor(512),L=Math.ceil(s/V);this.leafNodeTexture=new Wt({context:r,pixelFormat:st.RGBA,pixelDatatype:Je.UNSIGNED_BYTE,flipY:!1,width:1024,height:L,sampler:new un({minificationFilter:cn.NEAREST,magnificationFilter:Ti.NEAREST})}),this.leafNodeTexelSizeUv=D.fromElements(1/1024,1/L,this.leafNodeTexelSizeUv),this.leafNodeTilesPerRow=V}else!p&&d(this.leafNodeTexture)&&(this.leafNodeTexture=this.leafNodeTexture.destroy());if(this._keyframeLocation=W.clamp(t,0,a-1),n&&xxe(this,this.rootNode),i)return;this._frameNumber=e.frameNumber;let y=gi();$0t(this,e);let f=gi();tbt(this,m,c);let x=gi();if(this._debugPrint){let _=f-y,C=x-f,V=x-y;ebt(this,_,C,V)}};lg.prototype.isRenderable=function(e){return e.isRenderable(this._frameNumber)};lg.prototype.isDestroyed=function(){return!1};lg.prototype.destroy=function(){let e=this.megatextures,t=e.length;for(let n=0;n<t;n++)e[n]=e[n]&&e[n].destroy();return this.internalNodeTexture=this.internalNodeTexture&&this.internalNodeTexture.destroy(),this.leafNodeTexture=this.leafNodeTexture&&this.leafNodeTexture.destroy(),ue(this)};function xxe(e,t){let n=e._primitive,i=n._shape,o=n._provider.dimensions;if(t.computeBoundingVolumes(i,o),d(t.children))for(let r=0;r<8;r++){let s=t.children[r];xxe(e,s)}}function j0t(e,t){if(e._simultaneousRequestCount>=lg.simultaneousRequestCountMaximum)return;let n=e._primitive,i=n._provider;function o(l){e._simultaneousRequestCount--;let u=n._provider.types.length;if(!d(l))t.state=Qi.LoadState.UNAVAILABLE;else if(l===Qi.LoadState.FAILED)t.state=Qi.LoadState.FAILED;else if(!Array.isArray(l)||l.length!==u)t.state=Qi.LoadState.FAILED;else{let m=e.megatextures;for(let p=0;p<u;p++){let{voxelCountPerTile:y,channelCount:f}=m[p],{x,y:_,z:C}=y,V=x*_*C,L=l[p],Z=V*f;if(L.length===Z)t.metadatas[p]=L,t.state=Qi.LoadState.RECEIVED;else{t.state=Qi.LoadState.FAILED;break}}}}function r(){e._simultaneousRequestCount--,t.state=Qi.LoadState.FAILED}let{keyframe:s,spatialNode:a}=t,c=i.requestData({tileLevel:a.level,tileX:a.x,tileY:a.y,tileZ:a.z,keyframe:s});d(c)?(e._simultaneousRequestCount++,t.state=Qi.LoadState.RECEIVING,c.then(o).catch(r)):t.state=Qi.LoadState.FAILED}function q0t(e){return e/(1+e)}function $0t(e,t){let n=e._frameNumber,i=e._primitive,o=i._shape,{dimensions:r}=i,s=i.screenSpaceError,a=e._priorityQueue,c=e._keyframeLocation,l=e._keyframeCount,u=e.rootNode,{camera:m,context:p,pixelRatio:y}=t,{positionWC:f,frustum:x}=m,C=p.drawingBufferHeight/y/x.sseDenominator;function V(R,E,I){let w=Math.min(Math.abs(E-R),Math.abs(E-I)),N=Math.max(R,l-I-1,1),B=Math.pow(1-w/N,4),k=Math.exp(-e._binaryTreeKeyframeWeighting[E]);return W.lerp(k,B,.15+.85*B)}function L(R,E){if(R.computeScreenSpaceError(f,C),E=R.visibility(t,E),E===jr.MASK_OUTSIDE)return;R.visitedFrameNumber=n;let I=W.clamp(Math.floor(c),0,l-2),w=I+1;if(l===1)R.createKeyframeNode(0);else if(R.keyframeNodes.length!==l)for(let U=0;U<l;U++)R.createKeyframeNode(U);let N=q0t(R.screenSpaceError),B=!1,k=R.keyframeNodes;for(let U=0;U<k.length;U++){let J=k[U];J.priority=10*N+V(I,J.keyframe,w),J.state!==Qi.LoadState.UNAVAILABLE&&J.state!==Qi.LoadState.FAILED&&J.priority!==-Number.MAX_VALUE&&a.insert(J),J.state===Qi.LoadState.LOADED&&(B=!0)}if(R.screenSpaceError<s||!B){R.children=void 0;return}d(R.children)||R.constructChildNodes(o,r);for(let U=0;U<8;U++){let J=R.children[U];L(J,E)}}a.reset(),L(u,jr.MASK_INDETERMINATE);let Z=e._highPriorityKeyframeNodes,G=0,X;for(;a.length>0;)X=a.removeMaximum(),X.highPriorityFrameNumber=n,Z[G]=X,G++;let P=e._keyframeNodesInMegatexture,v=e.megatextures[0],F=v.occupiedCount;P.length=F,P.sort(function(R,E){return R.highPriorityFrameNumber===E.highPriorityFrameNumber?E.priority-R.priority:E.highPriorityFrameNumber-R.highPriorityFrameNumber});let M=0,b=0;for(let R=0;R<G;R++)if(X=Z[R],!(X.state===Qi.LoadState.LOADED||X.spatialNode===void 0)&&(X.state===Qi.LoadState.UNLOADED&&j0t(e,X),X.state===Qi.LoadState.RECEIVED)){let E=0;if(v.isFull()){E=F-1-M,M++;let I=P[E];I.spatialNode.destroyKeyframeNode(I,e.megatextures)}else E=F+b,b++;X.spatialNode.addKeyframeNodeToMegatextures(X,e.megatextures),P[E]=X}}function ebt(e,t,n,i){let o=e._keyframeCount,r=e.rootNode,s=Object.keys(Qi.LoadState).length,a=new Array(s),c=new Array(s),l=0;for(let C=0;C<s;C++){let V=new Array(o);a[C]=V;for(let L=0;L<o;L++)V[L]=0;c[C]=0}function u(C){let V=C.keyframeNodes;for(let L=0;L<V.length;L++){let Z=V[L],G=Z.keyframe,X=Z.state;a[X][G]+=1,c[X]+=1,l++}if(d(C.children))for(let L=0;L<8;L++){let Z=C.children[L];u(Z)}}u(r);let m=`KEYFRAMES: ${a[Qi.LoadState.LOADED]}`,p=`UNLOADED: ${c[Qi.LoadState.UNLOADED]} | RECEIVING: ${c[Qi.LoadState.RECEIVING]} | RECEIVED: ${c[Qi.LoadState.RECEIVED]} | LOADED: ${c[Qi.LoadState.LOADED]} | FAILED: ${c[Qi.LoadState.FAILED]} | UNAVAILABLE: ${c[Qi.LoadState.UNAVAILABLE]} | TOTAL: ${l}`,y=Math.round(t*100)/100,f=Math.round(n*100)/100,x=Math.round(i*100)/100,_=`LOAD: ${y} | OCT: ${f} | ALL: ${x}`;console.log(`${m} || ${p} || ${_}`)}var hD={INTERNAL:0,LEAF:1,PACKED_LEAF_FROM_PARENT:2};function tbt(e,t,n){let i=e._primitive._screenSpaceError,o=e._keyframeLocation,r=e._frameNumber,s=t>=2,a=0,c=0,l=[],u=[];function m(y,f,x,_,C){let V=!1;if(d(y.children))for(let L=0;L<8;L++){let Z=y.children[L];Z.computeSurroundingRenderableKeyframeNodes(o),Z.isRenderable(r)&&(V=!0)}if(V){l[C]=hD.INTERNAL<<16|f,l[x]=_,a++,_=f,C=_*9+1;for(let L=0;L<8;L++){let Z=y.children[L];f=a,x=f*9+0,m(Z,f,x,_,C+L)}}else{if(s){let L=c*5,Z=y.renderableKeyframeNodePrevious,G=y.level-Z.spatialNode.level,X=Z.spatialNode.parent,P=d(X)?X.renderableKeyframeNodePrevious:Z,v=nbt(y,i,n),F=G,M=1,b=Z.megatextureIndex,R=P.megatextureIndex;u[L+0]=v,u[L+1]=F,u[L+2]=M,u[L+3]=b,u[L+4]=R,l[C]=hD.LEAF<<16|c}else{let L=y.renderableKeyframeNodePrevious,G=y.level-L.spatialNode.level===0?hD.LEAF:hD.PACKED_LEAF_FROM_PARENT;l[C]=G<<16|L.megatextureIndex}c++}}let p=e.rootNode;p.computeSurroundingRenderableKeyframeNodes(o),p.isRenderable(r)&&m(p,0,0,0,0),ibt(l,9,e.internalNodeTilesPerRow,e.internalNodeTexture),s&&obt(u,2,e.leafNodeTilesPerRow,e.leafNodeTexture)}function nbt(e,t,n){if(e.parent===void 0)return 0;let i=e.screenSpaceError,o=e.parent.screenSpaceError,s=((t-i)/(o-i)+n-1)/n;return W.clamp(s,0,1)}function ibt(e,t,n,i){let o=st.componentsLength(i.pixelFormat),r=Math.ceil(e.length/t),s=Math.max(1,t*Math.min(r,n)),a=Math.max(1,Math.ceil(r/n)),c=new Uint8Array(s*a*o);for(let m=0;m<e.length;m++){let p=e[m],y=m*o;for(let f=0;f<o;f++)c[y+f]=p>>>f*8&255}let u={source:{arrayBufferView:c,width:s,height:a},xOffset:0,yOffset:0};i.copyFrom(u)}function obt(e,t,n,i){let o=st.componentsLength(i.pixelFormat),r=5,s=Math.ceil(e.length/r),a=Math.max(1,t*Math.min(s,n)),c=Math.max(1,Math.ceil(s/n)),l=new Uint8Array(a*c*o);for(let p=0;p<s;p++){let y=e[p*r+0],f=e[p*r+1],x=e[p*r+2],_=e[p*r+3],C=e[p*r+4],V=W.clamp(Math.floor(65536*y),0,65535);l[p*8+0]=V>>>0&255,l[p*8+1]=V>>>8&255,l[p*8+2]=f&255,l[p*8+3]=x&255,l[p*8+4]=_>>>0&255,l[p*8+5]=_>>>8&255,l[p*8+6]=C>>>0&255,l[p*8+7]=C>>>8&255}let m={source:{arrayBufferView:l,width:a,height:c},xOffset:0,yOffset:0};i.copyFrom(m)}lg.getApproximateTextureMemoryByteLength=function(e,t,n,i){let o=0,r=n.length;for(let s=0;s<r;s++){let a=n[s],c=i[s],l=Ot.getComponentCount(a);o+=PV.getApproximateTextureMemoryByteLength(e,t,l,c)}return o};var NV=lg;var fHi=T(S(),1);var HKi=T(S(),1),rbt={FLOAT:"float",VEC2:"vec2",VEC3:"vec3",VEC4:"vec4",INT:"int",INT_VEC2:"ivec2",INT_VEC3:"ivec3",INT_VEC4:"ivec4",BOOL:"bool",BOOL_VEC2:"bvec2",BOOL_VEC3:"bvec3",BOOL_VEC4:"bvec4",MAT2:"mat2",MAT3:"mat3",MAT4:"mat4",SAMPLER_2D:"sampler2D",SAMPLER_CUBE:"samplerCube"},UV=Object.freeze(rbt);var oHi=T(S(),1);function kV(){this._defaultTexture=void 0,this._textures={},this._loadedImages=[],this._lastUpdatedFrame=-1}kV.prototype.getTexture=function(e){return this._textures[e]};function sbt(e,t,n){n.resource.fetchImage().then(function(i){e._loadedImages.push({id:t,image:i,textureUniform:n})}).catch(function(){let i=e._textures[t];d(i)&&i!==e._defaultTexture&&i.destroy(),e._textures[t]=e._defaultTexture})}kV.prototype.loadTexture2D=function(e,t){d(t.typedArray)?this._loadedImages.push({id:e,textureUniform:t}):sbt(this,e,t)};function abt(e,t,n){let{id:i,textureUniform:o,image:r}=t,s=n.webgl2?fD(o,r,n):cbt(o,r,n),a=e._textures[i];d(a)&&a!==n.defaultTexture&&a.destroy(),e._textures[i]=s}function fD(e,t,n){let{typedArray:i,sampler:o}=e,r=d(i)?Txe(e,n):new Wt({context:n,source:t,sampler:o});return _xe(o)&&r.generateMipmap(),r}function cbt(e,t,n){let{typedArray:i,sampler:o}=e,r=_xe(o),s=o.wrapS===Gn.REPEAT||o.wrapS===Gn.MIRRORED_REPEAT||o.wrapT===Gn.REPEAT||o.wrapT===Gn.MIRRORED_REPEAT,{width:a,height:c}=d(i)?e:t,l=[a,c].every(W.isPowerOfTwo);if((r||s)&&!l)if(d(i)){if(e.pixelDatatype===Je.UNSIGNED_BYTE){let m=tv(i,a,c),p=Ib(m);return fD({sampler:o},p,n)}}else{let m=Ib(t);return fD(e,m,n)}else return fD(e,t,n);return r?console.warn("Texture requires resizing for mipmaps but pixelDataType cannot be resized. The texture may be rendered incorrectly."):s&&console.warn("Texture requires resizing for wrapping but pixelDataType cannot be resized. The texture may be rendered incorrectly."),Txe(e,n)}function _xe(e){return[cn.NEAREST_MIPMAP_NEAREST,cn.NEAREST_MIPMAP_LINEAR,cn.LINEAR_MIPMAP_NEAREST,cn.LINEAR_MIPMAP_LINEAR].includes(e.minificationFilter)}function Txe(e,t){let{pixelFormat:n,pixelDatatype:i,width:o,height:r,typedArray:s,sampler:a}=e;return new Wt({context:t,pixelFormat:n,pixelDatatype:i,source:{arrayBufferView:s,width:o,height:r},sampler:a,flipY:!1})}kV.prototype.update=function(e){if(e.frameNumber===this._lastUpdatedFrame)return;this._lastUpdatedFrame=e.frameNumber;let t=e.context;this._defaultTexture=t.defaultTexture;let n=this._loadedImages;for(let i=0;i<n.length;i++){let o=n[i];abt(this,o,t)}n.length=0};kV.prototype.isDestroyed=function(){return!1};kV.prototype.destroy=function(){let e=this._textures;for(let t in e)if(e.hasOwnProperty(t)){let n=e[t];n!==this._defaultTexture&&n.destroy()}return ue(this)};var n9=kV;function i9(e){e=g(e,g.EMPTY_OBJECT),this.mode=g(e.mode,Mp.MODIFY_MATERIAL),this.lightingModel=e.lightingModel,this.uniforms=g(e.uniforms,g.EMPTY_OBJECT),this.varyings=g(e.varyings,g.EMPTY_OBJECT),this.vertexShaderText=e.vertexShaderText,this.fragmentShaderText=e.fragmentShaderText,this.translucencyMode=g(e.translucencyMode,Bb.INHERIT),this._textureManager=new n9,this._defaultTexture=void 0,this.uniformMap=lbt(this),this.usedVariablesVertex={attributeSet:{},featureIdSet:{},metadataSet:{}},this.usedVariablesFragment={attributeSet:{},featureIdSet:{},metadataSet:{},materialSet:{}},mbt(this),hbt(this)}function lbt(e){let t=e.uniforms,n={};for(let i in t)if(t.hasOwnProperty(i)){let o=t[i];o.type===UV.SAMPLER_2D?(e._textureManager.loadTexture2D(i,o.value),n[i]=dbt(e,i)):n[i]=ubt(e,i)}return n}function dbt(e,t){return function(){return g(e._textureManager.getTexture(t),e._defaultTexture)}}function ubt(e,t){return function(){return e.uniforms[t].value}}function vT(e,t,n){let i;for(;(i=t.exec(e))!==null;){let o=i[1];n[o]=!0}}function mbt(e){let t=/[vf]sInput\.attributes\.(\w+)/g,n=/[vf]sInput\.featureIds\.(\w+)/g,i=/[vf]sInput\.metadata.(\w+)/g,o,r=e.vertexShaderText;d(r)&&(o=e.usedVariablesVertex.attributeSet,vT(r,t,o),o=e.usedVariablesVertex.featureIdSet,vT(r,n,o),o=e.usedVariablesVertex.metadataSet,vT(r,i,o));let s=e.fragmentShaderText;if(d(s)){o=e.usedVariablesFragment.attributeSet,vT(s,t,o),o=e.usedVariablesFragment.featureIdSet,vT(s,n,o),o=e.usedVariablesFragment.metadataSet,vT(s,i,o);let a=/material\.(\w+)/g,c=e.usedVariablesFragment.materialSet;vT(s,a,c)}}function Sxe(e){let t=/^.*MC$/,n=/^.*WC$/,i=/^.*EC$/;return t.test(e)?`${e} (model coordinates)`:n.test(e)?`${e} (Cartesian world coordinates)`:i.test(e)?`${e} (eye coordinates)`:e}function fc(e,t,n,i){if(e.hasOwnProperty(t)){let o=`${Sxe(t)} is not available in the ${i} shader. Did you mean ${Sxe(n)} instead?`;throw new fe(o)}}function hbt(e){let t=e.usedVariablesVertex.attributeSet;fc(t,"position","positionMC","vertex"),fc(t,"normal","normalMC","vertex"),fc(t,"tangent","tangentMC","vertex"),fc(t,"bitangent","bitangentMC","vertex"),fc(t,"positionWC","positionMC","vertex"),fc(t,"positionEC","positionMC","vertex"),fc(t,"normalEC","normalMC","vertex"),fc(t,"tangentEC","tangentMC","vertex"),fc(t,"bitangentEC","bitangentMC","vertex");let n=e.usedVariablesFragment.attributeSet;fc(n,"position","positionEC","fragment"),fc(n,"normal","normalEC","fragment"),fc(n,"tangent","tangentEC","fragment"),fc(n,"bitangent","bitangentEC","fragment"),fc(n,"normalMC","normalEC","fragment"),fc(n,"tangentMC","tangentEC","fragment"),fc(n,"bitangentMC","bitangentEC","fragment")}i9.prototype.setUniform=function(e,t){let n=this.uniforms[e];n.type===UV.SAMPLER_2D?this._textureManager.loadTexture2D(e,t):d(t.clone)?n.value=t.clone(n.value):n.value=t};i9.prototype.update=function(e){this._defaultTexture=e.context.defaultTexture,this._textureManager.update(e)};i9.prototype.isDestroyed=function(){return!1};i9.prototype.destroy=function(){this._textureManager=this._textureManager&&this._textureManager.destroy(),ue(this)};var wT=i9;function Nf(e){e=g(e,g.EMPTY_OBJECT),this._ready=!1,this._provider=g(e.provider,Nf.DefaultProvider),this._traversal=void 0,this._shape=void 0,this._shapeVisible=!1,this._paddingBefore=new h,this._paddingAfter=new h,this._minBounds=new h,this._minBoundsOld=new h,this._maxBounds=new h,this._maxBoundsOld=new h,this._minClippingBounds=new h,this._minClippingBoundsOld=new h,this._maxClippingBounds=new h,this._maxClippingBoundsOld=new h,this._clippingPlanes=void 0,this._clippingPlanesState=0,this._clippingPlanesEnabled=!1,this._modelMatrix=A.clone(g(e.modelMatrix,A.IDENTITY)),this._compoundModelMatrix=new A,this._compoundModelMatrixOld=new A,this._customShader=g(e.customShader,Nf.DefaultCustomShader),this._customShaderCompilationEvent=new ye,this._shaderDirty=!0,this._drawCommand=void 0,this._drawCommandPick=void 0,this._pickId=void 0,this._clock=e.clock,this._transformPositionWorldToUv=new A,this._transformPositionUvToWorld=new A,this._transformDirectionWorldToLocal=new $,this._transformNormalLocalToWorld=new $,this._stepSizeUv=1,this._jitter=!0,this._nearestSampling=!1,this._levelBlendFactor=0,this._stepSizeMultiplier=1,this._depthTest=!0,this._useLogDepth=void 0,this._screenSpaceError=4,this._debugPolylines=new Wm,this._debugDraw=!1,this._disableRender=!1,this._disableUpdate=!1,this._uniforms={octreeInternalNodeTexture:void 0,octreeInternalNodeTilesPerRow:0,octreeInternalNodeTexelSizeUv:new D,octreeLeafNodeTexture:void 0,octreeLeafNodeTilesPerRow:0,octreeLeafNodeTexelSizeUv:new D,megatextureTextures:[],megatextureSliceDimensions:new D,megatextureTileDimensions:new D,megatextureVoxelSizeUv:new D,megatextureSliceSizeUv:new D,megatextureTileSizeUv:new D,dimensions:new h,paddingBefore:new h,paddingAfter:new h,transformPositionViewToUv:new A,transformPositionUvToView:new A,transformDirectionViewToLocal:new $,transformNormalLocalToWorld:new $,cameraPositionUv:new h,ndcSpaceAxisAlignedBoundingBox:new se,clippingPlanesTexture:void 0,clippingPlanesMatrix:new A,stepSize:0,pickColor:new Y},this._shapeDefinesOld={},this._uniformMap={};let t=this._uniforms,n=this._uniformMap;for(let o in t)if(t.hasOwnProperty(o)){let r=`u_${o}`;n[r]=function(){return t[o]}}let i=this._provider;fbt(this,i)}function fbt(e,t){let{shape:n,minBounds:i=Oi.getMinBounds(n),maxBounds:o=Oi.getMaxBounds(n)}=t;e.minBounds=i,e.maxBounds=o,e.minClippingBounds=Oi.getMinBounds(n),e.maxClippingBounds=Oi.getMaxBounds(n),Vxe(e,t);let r=Oi.getShapeConstructor(n);e._shape=new r,e._shapeVisible=Lxe(e,e._shape,t)}Object.defineProperties(Nf.prototype,{ready:{get:function(){return this._ready}},provider:{get:function(){return this._provider}},boundingSphere:{get:function(){return this._shape.boundingSphere}},orientedBoundingBox:{get:function(){return this.shape.orientedBoundingBox}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._modelMatrix=A.clone(e,this._modelMatrix)}},shape:{get:function(){return this._provider.shape}},dimensions:{get:function(){return this._provider.dimensions}},minimumValues:{get:function(){return this._provider.minimumValues}},maximumValues:{get:function(){return this._provider.maximumValues}},show:{get:function(){return!this._disableRender},set:function(e){this._disableRender=!e}},disableUpdate:{get:function(){return this._disableUpdate},set:function(e){this._disableUpdate=e}},debugDraw:{get:function(){return this._debugDraw},set:function(e){this._debugDraw=e}},depthTest:{get:function(){return this._depthTest},set:function(e){this._depthTest!==e&&(this._depthTest=e,this._shaderDirty=!0)}},jitter:{get:function(){return this._jitter},set:function(e){this._jitter!==e&&(this._jitter=e,this._shaderDirty=!0)}},nearestSampling:{get:function(){return this._nearestSampling},set:function(e){this._nearestSampling!==e&&(this._nearestSampling=e,this._shaderDirty=!0)}},levelBlendFactor:{get:function(){return this._levelBlendFactor},set:function(e){this._levelBlendFactor=W.clamp(e,0,1)}},screenSpaceError:{get:function(){return this._screenSpaceError},set:function(e){this._screenSpaceError=e}},stepSize:{get:function(){return this._stepSizeMultiplier},set:function(e){this._stepSizeMultiplier=e}},minBounds:{get:function(){return this._minBounds},set:function(e){this._minBounds=h.clone(e,this._minBounds)}},maxBounds:{get:function(){return this._maxBounds},set:function(e){this._maxBounds=h.clone(e,this._maxBounds)}},minClippingBounds:{get:function(){return this._minClippingBounds},set:function(e){this._minClippingBounds=h.clone(e,this._minClippingBounds)}},maxClippingBounds:{get:function(){return this._maxClippingBounds},set:function(e){this._maxClippingBounds=h.clone(e,this._maxClippingBounds)}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){rs.setOwner(e,this,"_clippingPlanes")}},customShader:{get:function(){return this._customShader},set:function(e){if(this._customShader!==e){let t=this._uniformMap,i=this._customShader.uniformMap;for(let o in i)i.hasOwnProperty(o)&&delete t[o];d(e)?this._customShader=e:this._customShader=Nf.DefaultCustomShader,this._shaderDirty=!0}}},customShaderCompilationEvent:{get:function(){return this._customShaderCompilationEvent}}});var pbt=new h,bbt=new se,ybt=new se,gbt=new h,xbt=new h,_bt=new $,Tbt=new $,Sbt=new A,Cbt=new A,Vbt=new A,Lbt=A.fromRotationTranslation($.fromUniformScale(.5,new $),new h(.5,.5,.5),new A),Rbt=A.fromRotationTranslation($.fromUniformScale(2,new $),new h(-1,-1,-1),new A);Nf.prototype.update=function(e){let t=this._provider;this._customShader.update(e);let n=e.context;if(!this._ready){Zbt(this,t,n),e.afterRender.push(()=>(this._ready=!0,!0));return}let i=Vxe(this,t),o=this._shape;if(i&&(this._shapeVisible=Lxe(this,o,t),Xbt(this,o)&&(this._shaderDirty=!0)),!this._shapeVisible)return;let r=Ibt(t.timeIntervalCollection,this._clock),s=this._traversal,a=s._sampleCount;if(s.update(e,r,i,this._disableUpdate),a!==s._sampleCount&&(this._shaderDirty=!0),!s.isRenderable(s.rootNode)||(this._debugDraw&&Nbt(this,e),this._disableRender))return;this._useLogDepth!==e.useLogDepth&&(this._useLogDepth=e.useLogDepth,this._shaderDirty=!0),Wbt(this,e)&&(this._shaderDirty=!0);let l=s.leafNodeTexture,u=this._uniforms;d(l)&&(u.octreeLeafNodeTexture=s.leafNodeTexture,u.octreeLeafNodeTexelSizeUv=D.clone(s.leafNodeTexelSizeUv,u.octreeLeafNodeTexelSizeUv),u.octreeLeafNodeTilesPerRow=s.leafNodeTilesPerRow),this._shaderDirty&&(t9(this,n),this._shaderDirty=!1);let m=n.uniformState.viewProjection,p=o.orientedBoundingBox,y=wbt(p,m,ybt);if(y.x===1||y.y===1||y.z===-1||y.w===-1)return;u.ndcSpaceAxisAlignedBoundingBox=se.clone(y,u.ndcSpaceAxisAlignedBoundingBox);let x=n.uniformState.inverseView;u.transformPositionViewToUv=A.multiplyTransformation(this._transformPositionWorldToUv,x,u.transformPositionViewToUv);let _=n.uniformState.view;u.transformPositionUvToView=A.multiplyTransformation(_,this._transformPositionUvToWorld,u.transformPositionUvToView);let C=n.uniformState.inverseViewRotation;u.transformDirectionViewToLocal=$.multiply(this._transformDirectionWorldToLocal,C,u.transformDirectionViewToLocal),u.transformNormalLocalToWorld=$.clone(this._transformNormalLocalToWorld,u.transformNormalLocalToWorld);let V=e.camera.positionWC;u.cameraPositionUv=A.multiplyByPoint(this._transformPositionWorldToUv,V,u.cameraPositionUv),u.stepSize=this._stepSizeUv*this._stepSizeMultiplier;let L=e.passes.pick?this._drawCommandPick:this._drawCommand;L.boundingVolume=o.boundingSphere,e.commandList.push(L)};function Zbt(e,t,n){let i=e._uniforms;e._pickId=n.createPickId({primitive:e}),i.pickColor=Y.clone(e._pickId.color,i.pickColor);let{shaderDefines:o,shaderUniforms:r}=e._shape;e._shapeDefinesOld=Ke(o,!0);let s=e._uniformMap;for(let a in r)if(r.hasOwnProperty(a)){let c=`u_${a}`;s[c]=function(){return r[a]}}i.dimensions=h.clone(t.dimensions,i.dimensions),e._paddingBefore=h.clone(g(t.paddingBefore,h.ZERO),e._paddingBefore),i.paddingBefore=h.clone(e._paddingBefore,i.paddingBefore),e._paddingAfter=h.clone(g(t.paddingAfter,h.ZERO),e._paddingBefore),i.paddingAfter=h.clone(e._paddingAfter,i.paddingAfter),e._traversal=Gbt(e,t,n),Ebt(e._traversal,i)}function Vxe(e,t){let n=g(t.shapeTransform,A.IDENTITY),i=g(t.globalTransform,A.IDENTITY);return A.multiplyTransformation(i,e._modelMatrix,e._compoundModelMatrix),A.multiplyTransformation(e._compoundModelMatrix,n,e._compoundModelMatrix),o9(e,"_compoundModelMatrix","_compoundModelMatrixOld")+o9(e,"_minBounds","_minBoundsOld")+o9(e,"_maxBounds","_maxBoundsOld")+o9(e,"_minClippingBounds","_minClippingBoundsOld")+o9(e,"_maxClippingBounds","_maxClippingBoundsOld")>0}function o9(e,t,n){let i=e[t],o=e[n],r=!i.equals(o);return r&&i.clone(o),r?1:0}function Lxe(e,t,n){if(!t.update(e._compoundModelMatrix,e.minBounds,e.maxBounds,e.minClippingBounds,e.maxClippingBounds))return!1;let o=t.shapeTransform,r=A.inverse(o,Sbt),s=A.getRotation(o,_bt),a=A.getScale(o,gbt),c=h.maximumComponent(a),l=h.divideByScalar(a,c,xbt),u=$.multiplyByScale(s,l,Tbt),m=n.dimensions;return e._stepSizeUv=t.computeApproximateStepSize(m),e._transformPositionWorldToUv=A.multiplyTransformation(Lbt,r,e._transformPositionWorldToUv),e._transformPositionUvToWorld=A.multiplyTransformation(o,Rbt,e._transformPositionUvToWorld),e._transformDirectionWorldToLocal=A.getMatrix3(r,e._transformDirectionWorldToLocal),e._transformNormalLocalToWorld=$.inverseTranspose(u,e._transformNormalLocalToWorld),!0}function Gbt(e,t,n){let i=h.clone(t.dimensions,pbt);h.add(i,e._paddingBefore,i),h.add(i,e._paddingAfter,i);let o=t.maximumTileCount,r=d(o)?NV.getApproximateTextureMemoryByteLength(o,i,t.types,t.componentTypes):void 0,s=g(t.keyframeCount,1);return new NV(e,n,i,t.types,t.componentTypes,s,r)}function Ebt(e,t){t.octreeInternalNodeTexture=e.internalNodeTexture,t.octreeInternalNodeTexelSizeUv=D.clone(e.internalNodeTexelSizeUv,t.octreeInternalNodeTexelSizeUv),t.octreeInternalNodeTilesPerRow=e.internalNodeTilesPerRow;let n=e.megatextures,i=n[0],o=n.length;t.megatextureTextures=new Array(o);for(let r=0;r<o;r++)t.megatextureTextures[r]=n[r].texture;t.megatextureSliceDimensions=D.clone(i.sliceCountPerRegion,t.megatextureSliceDimensions),t.megatextureTileDimensions=D.clone(i.regionCountPerMegatexture,t.megatextureTileDimensions),t.megatextureVoxelSizeUv=D.clone(i.voxelSizeUv,t.megatextureVoxelSizeUv),t.megatextureSliceSizeUv=D.clone(i.sliceSizeUv,t.megatextureSliceSizeUv),t.megatextureTileSizeUv=D.clone(i.regionSizeUv,t.megatextureTileSizeUv)}function Xbt(e,t){let n=t.shaderDefines,i=Object.keys(n).some(o=>n[o]!==e._shapeDefinesOld[o]);return i&&(e._shapeDefinesOld=Ke(n,!0)),i}function Ibt(e,t){if(!d(e)||!d(t))return 0;let n=t.currentTime,i,o=e.indexOf(n);o>=0?i=e.get(o):(o=~o,o===e.length?(o=e.length-1,i=e.get(o),n=i.stop):(i=e.get(o),n=i.start));let r=te.secondsDifference(i.stop,i.start),a=te.secondsDifference(n,i.start)/r;return o+a}function Wbt(e,t){let n=e.clippingPlanes;if(!d(n))return!1;n.update(t);let{clippingPlanesState:i,enabled:o}=n;if(o){let r=e._uniforms;r.clippingPlanesTexture=n.texture,r.clippingPlanesMatrix=A.transpose(A.multiplyTransformation(A.inverse(n.modelMatrix,r.clippingPlanesMatrix),e._transformPositionUvToWorld,r.clippingPlanesMatrix),r.clippingPlanesMatrix)}return e._clippingPlanesState===i&&e._clippingPlanesEnabled===o?!1:(e._clippingPlanesState=i,e._clippingPlanesEnabled=o,!0)}Nf.prototype.isDestroyed=function(){return!1};Nf.prototype.destroy=function(){let e=this._drawCommand;d(e)&&(e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy());let t=this._drawCommandPick;return d(t)&&(t.shaderProgram=t.shaderProgram&&t.shaderProgram.destroy()),this._pickId=this._pickId&&this._pickId.destroy(),this._traversal=this._traversal&&this._traversal.destroy(),this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),ue(this)};var Cxe=new Array(new se(-1,-1,-1,1),new se(1,-1,-1,1),new se(-1,1,-1,1),new se(1,1,-1,1),new se(-1,-1,1,1),new se(1,-1,1,1),new se(-1,1,1,1),new se(1,1,1,1)),Pbt=new Array(1,2,4,0,3,5,0,3,6,1,2,7,0,5,6,1,4,7,2,4,7,3,5,6),vbt=new Array(new se,new se,new se,new se,new se,new se,new se,new se);function wbt(e,t,n){let i=A.fromRotationTranslation(e.halfAxes,e.center,Cbt),o=A.multiply(t,i,Vbt),r=+Number.MAX_VALUE,s=-Number.MAX_VALUE,a=+Number.MAX_VALUE,c=-Number.MAX_VALUE,l,u=vbt,m=Cxe.length;for(l=0;l<m;l++)A.multiplyByVector(o,Cxe[l],u[l]);for(l=0;l<m;l++){let p=u[l];if(p.z>=-p.w){let y=p.x/p.w,f=p.y/p.w;r=Math.min(r,y),s=Math.max(s,y),a=Math.min(a,f),c=Math.max(c,f)}else for(let y=0;y<3;y++){let f=Pbt[l*3+y],x=u[f];if(x.z>=-x.w){let _=p.z+p.w,C=x.z+x.w,V=_/(_-C),L=se.lerp(p,x,V,bbt),Z=L.x/L.w,G=L.y/L.w;r=Math.min(r,Z),s=Math.max(s,Z),a=Math.min(a,G),c=Math.max(c,G)}}}return r=W.clamp(r,-1,1),a=W.clamp(a,-1,1),s=W.clamp(s,-1,1),c=W.clamp(c,-1,1),n=se.fromElements(r,a,s,c,n),n}var Mj=3e7,Fbt=new h(Mj,0,0),Abt=new h(0,Mj,0),Mbt=new h(0,0,Mj);function Nbt(e,t){let n=e._traversal,i=e._debugPolylines;i.removeAll();function o(c,l,u,m){i.add({positions:[c,l],width:m,material:ki.fromType("Color",{color:u})})}function r(c,l,u){let m=c.computeCorners();o(m[0],m[1],l,u),o(m[2],m[3],l,u),o(m[4],m[5],l,u),o(m[6],m[7],l,u),o(m[0],m[2],l,u),o(m[4],m[6],l,u),o(m[1],m[3],l,u),o(m[5],m[7],l,u),o(m[0],m[4],l,u),o(m[2],m[6],l,u),o(m[1],m[5],l,u),o(m[3],m[7],l,u)}function s(c){if(!n.isRenderable(c))return;let l=c.level,m=Math.max(1,5/Math.pow(2,l)),y=[Y.RED,Y.LIME,Y.BLUE][l%3];if(r(c.orientedBoundingBox,y,m),d(c.children))for(let f=0;f<8;f++)s(c.children[f])}r(e._shape.orientedBoundingBox,Y.WHITE,5),s(n.rootNode);let a=10;o(h.ZERO,Fbt,Y.RED,a),o(h.ZERO,Abt,Y.LIME,a),o(h.ZERO,Mbt,Y.BLUE,a),i.update(t)}Nf.DefaultCustomShader=new wT({fragmentShaderText:`void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material)
  12726. {
  12727. material.diffuse = vec3(1.0);
  12728. material.alpha = 1.0;
  12729. }`});function Rxe(){this.ready=!0,this.shape=Oi.BOX,this.dimensions=new h(1,1,1),this.names=["data"],this.types=[Ot.SCALAR],this.componentTypes=[tn.FLOAT32],this.maximumTileCount=1}Rxe.prototype.requestData=function(e){if(!((d(e)?g(e.tileLevel,0):0)>=1))return Promise.resolve([new Float32Array(1)])};Nf.DefaultProvider=new Rxe;var DV=Nf;var kHi=T(S(),1);function Nj(){fe.throwInstantiationError()}Object.defineProperties(Nj.prototype,{globalTransform:{get:fe.throwInstantiationError},shapeTransform:{get:fe.throwInstantiationError},shape:{get:fe.throwInstantiationError},minBounds:{get:fe.throwInstantiationError},maxBounds:{get:fe.throwInstantiationError},dimensions:{get:fe.throwInstantiationError},paddingBefore:{get:fe.throwInstantiationError},paddingAfter:{get:fe.throwInstantiationError},names:{get:fe.throwInstantiationError},types:{get:fe.throwInstantiationError},componentTypes:{get:fe.throwInstantiationError},minimumValues:{get:fe.throwInstantiationError},maximumValues:{get:fe.throwInstantiationError},maximumTileCount:{get:fe.throwInstantiationError},keyframeCount:{get:fe.throwInstantiationError},timeIntervalCollection:{get:fe.throwInstantiationError}});Nj.prototype.requestData=fe.throwInstantiationError;var Uj=Nj;var YHi=T(S(),1);function FT(){fe.throwInstantiationError()}Object.defineProperties(FT.prototype,{orientedBoundingBox:{get:fe.throwInstantiationError},boundingSphere:{get:fe.throwInstantiationError},boundTransform:{get:fe.throwInstantiationError},shapeTransform:{get:fe.throwInstantiationError},shaderUniforms:{get:fe.throwInstantiationError},shaderDefines:{get:fe.throwInstantiationError},shaderMaximumIntersectionsLength:{get:fe.throwInstantiationError}});FT.prototype.update=fe.throwInstantiationError;FT.prototype.computeOrientedBoundingBoxForTile=fe.throwInstantiationError;FT.prototype.computeApproximateStepSize=fe.throwInstantiationError;FT.DefaultMinBounds=fe.throwInstantiationError;FT.DefaultMaxBounds=fe.throwInstantiationError;var kj=FT;var QHi=T(S(),1);async function Dj(e,t){let n=t.terrainProvider,i=t.mapProjection,o=i.ellipsoid,r,s=t.camera.getRectangleCameraCoordinates(e);if(t.mode===ie.SCENE3D?r=o.cartesianToCartographic(s):r=i.unproject(s),!d(n))return r;let a=n.availability;if(!d(a)||t.mode===ie.SCENE2D)return r;let c=[de.center(e),de.southeast(e),de.southwest(e),de.northeast(e),de.northwest(e)],l=await Dj._sampleTerrainMostDetailed(n,c),u=!1,m=l.reduce(function(y,f){return d(f.height)?(u=!0,Math.max(f.height,y)):y},-Number.MAX_VALUE),p=r;return u&&(p.height+=m),p}Dj._sampleTerrainMostDetailed=T0;var AT=Dj;var mzi=T(S(),1);var Ubt=new Y,kbt=new Y,Dbt=new Y,Bbt=new Y,Zxe=new se,r9=new Uint8Array(4);function Gxe(e,t,n,i){let o=t.height===n.height?0:(e-t.height)/(n.height-t.height);return Y.lerp(t.color,n.color,o,i)}function pD(e,t){return{height:e,color:Y.clone(t)}}function Exe(e){return e=e.filter(function(t,n,i){let o=n>0,r=n<i.length-1,s=o?t.height===i[n-1].height:!0,a=r?t.height===i[n+1].height:!0;return!s||!a}),e=e.filter(function(t,n,i){let o=n>0,r=n<i.length-1,s=o?Y.equals(t.color,i[n-1].color):!1,a=r?Y.equals(t.color,i[n+1].color):!1;return!s||!a}),e=e.filter(function(t,n,i){let o=n>0,r=o?Y.equals(t.color,i[n-1].color):!1,s=o?t.height===i[n-1].height:!0;return!r||!s}),e}function Ybt(e){let t,n,i=[],o=e.length;for(t=0;t<o;t++){let r=e[t],s=r.entries,a=s.length,c=[];for(n=0;n<a;n++){let y=s[n],f=W.clamp(y.height,kl._minimumHeight,kl._maximumHeight),x=Y.clone(y.color,Ubt);x.red*=x.alpha,x.green*=x.alpha,x.blue*=x.alpha,c.push(pD(f,x))}let l=!0,u=!0;for(n=0;n<a-1;n++){let y=c[n+0],f=c[n+1];l=l&&y.height<=f.height,u=u&&y.height>=f.height}u?c=c.reverse():l||I0(c,function(y,f){return W.sign(y.height-f.height)});let m=g(r.extendDownwards,!1),p=g(r.extendUpwards,!1);c.length===1&&!m&&!p&&(m=!0,p=!0),m&&c.splice(0,0,pD(kl._minimumHeight,c[0].color)),p&&c.splice(c.length,0,pD(kl._maximumHeight,c[c.length-1].color)),c=Exe(c),i.push(c)}return i}function Obt(e){let t=Ybt(e),n=[],i=[],o;function r(l,u){n.push(pD(l,u))}function s(l,u,m){let p=Y.multiplyByScalar(m,1-u.alpha,Bbt);p=Y.add(p,u,p),r(l,p)}let a=t.length;for(o=0;o<a;o++){let l=t[o],u=0,m=0;i=n,n=[];let p=l.length,y=i.length;for(;u<p||m<y;){let f=u<p?l[u]:void 0,x=u>0?l[u-1]:void 0,_=u<p-1?l[u+1]:void 0,C=m<y?i[m]:void 0,V=m>0?i[m-1]:void 0,L=m<y-1?i[m+1]:void 0;if(d(f)&&d(C)&&f.height===C.height){let Z=d(L)&&C.height===L.height,G=!d(V),X=!d(L),P=d(_)&&f.height===_.height,v=!d(x),F=!d(_);Z?P?(s(f.height,f.color,C.color),s(f.height,_.color,L.color)):v?(r(f.height,C.color),s(f.height,f.color,L.color)):F?(s(f.height,f.color,C.color),r(f.height,L.color)):(s(f.height,f.color,C.color),s(f.height,f.color,L.color)):G?P?(r(f.height,f.color),s(f.height,_.color,C.color)):F?(r(f.height,f.color),r(f.height,C.color)):(v||r(f.height,f.color),s(f.height,f.color,C.color)):X?P?(s(f.height,f.color,C.color),r(f.height,_.color)):v?(r(f.height,C.color),r(f.height,f.color)):F?s(f.height,f.color,C.color):(s(f.height,f.color,C.color),r(f.height,f.color)):P?(s(f.height,f.color,C.color),s(f.height,_.color,C.color)):v?(r(f.height,C.color),s(f.height,f.color,C.color)):F?(s(f.height,f.color,C.color),r(f.height,C.color)):s(f.height,f.color,C.color),u+=P?2:1,m+=Z?2:1}else if(d(f)&&d(C)&&d(V)&&f.height<C.height){let Z=Gxe(f.height,V,C,Dbt);d(x)?d(_)?s(f.height,f.color,Z):(s(f.height,f.color,Z),r(f.height,Z)):(r(f.height,Z),s(f.height,f.color,Z)),u++}else if(d(C)&&d(f)&&d(x)&&C.height<f.height){let Z=Gxe(C.height,x,f,kbt);d(V)?d(L)?s(C.height,Z,C.color):(s(C.height,Z,C.color),r(C.height,Z)):(r(C.height,Z),s(C.height,Z,C.color)),m++}else d(f)&&(!d(C)||f.height<C.height)?(d(C)&&!d(V)&&!d(_)?(r(f.height,f.color),r(f.height,kl._emptyColor),r(C.height,kl._emptyColor)):(!d(C)&&d(V)&&!d(x)&&(r(V.height,kl._emptyColor),r(f.height,kl._emptyColor)),r(f.height,f.color)),u++):d(C)&&(!d(f)||C.height<f.height)&&(r(C.height,C.color),m++)}}return Exe(n)}function kl(e){let{scene:t,layers:n}=g(e,g.EMPTY_OBJECT),{context:i}=t,o=Obt(n),r=o.length,s,a,c;if(!kl._useFloatTexture(i)){a=Je.UNSIGNED_BYTE,c=st.RGBA,s=new Uint8Array(r*4);for(let y=0;y<r;y++)se.packFloat(o[y].height,Zxe),se.pack(Zxe,s,y*4)}else{a=Je.FLOAT,c=i.webgl2?st.RED:st.LUMINANCE,s=new Float32Array(r);for(let y=0;y<r;y++)s[y]=o[y].height}let u=Wt.create({context:i,pixelFormat:c,pixelDatatype:a,source:{arrayBufferView:s,width:r,height:1},sampler:new un({wrapS:Gn.CLAMP_TO_EDGE,wrapT:Gn.CLAMP_TO_EDGE,minificationFilter:cn.NEAREST,magnificationFilter:Ti.NEAREST})}),m=new Uint8Array(r*4);for(let y=0;y<r;y++)o[y].color.toBytes(r9),m[y*4+0]=r9[0],m[y*4+1]=r9[1],m[y*4+2]=r9[2],m[y*4+3]=r9[3];let p=Wt.create({context:i,pixelFormat:st.RGBA,pixelDatatype:Je.UNSIGNED_BYTE,source:{arrayBufferView:m,width:r,height:1},sampler:new un({wrapS:Gn.CLAMP_TO_EDGE,wrapT:Gn.CLAMP_TO_EDGE,minificationFilter:cn.LINEAR,magnificationFilter:Ti.LINEAR})});return ki.fromType("ElevationBand",{heights:u,colors:p})}kl._useFloatTexture=function(e){return e.floatingPointTexture};kl._maximumHeight=5906376425472;kl._minimumHeight=-5906376425472;kl._emptyColor=new Y(0,0,0,0);var Bj=kl;var _zi=T(S(),1);async function Kbt(e,t){if(t=g(t,{}),t.cacheBytes=g(t.cacheBytes,1536*1024*1024),t.maximumCacheOverflowBytes=g(t.maximumCacheOverflowBytes,1024*1024*1024),e=g(e,j_.defaultApiKey),!d(e))return Hbt(t);let n,i=j_.getDefaultCredit();d(i)&&(n=[i]);let o=new Ee({url:`${j_.mapTilesApiEndpoint}3dtiles/root.json`,queryParameters:{key:e},credits:n});return zs.fromUrl(o,t)}var Xxe={};async function Hbt(e){let i=Xxe[2275207];d(i)||(i=Ql.fromAssetId(2275207),Xxe[2275207]=i);let o=await i;return zs.fromUrl(o,e)}var Yj=Kbt;var Zzi=T(S(),1);async function zbt(e){let t=await zs.fromIonAssetId(96188,e);e=g(e,g.EMPTY_OBJECT);let n=e.style;if(!d(n)){let i=g(e.defaultColor,Y.WHITE).toCssColorString();n=new CT({color:`Boolean(\${feature['cesium#color']}) ? color(\${feature['cesium#color']}) : ${i}`})}return t.style=n,t}var Oj=zbt;var Azi=T(S(),1);function Jbt(e){e=g(e,g.EMPTY_OBJECT);let t=[],n=e.geometry;(!d(n.attributes)||!d(n.primitiveType))&&(n=n.constructor.createGeometry(n));let i=n.attributes,o=A.clone(g(e.modelMatrix,A.IDENTITY)),r=g(e.length,1e4);if(d(i.normal)&&t.push(new _t({geometry:An.createLineSegmentsForVectors(n,"normal",r),attributes:{color:new Ut(1,0,0,1)},modelMatrix:o})),d(i.tangent)&&t.push(new _t({geometry:An.createLineSegmentsForVectors(n,"tangent",r),attributes:{color:new Ut(0,1,0,1)},modelMatrix:o})),d(i.bitangent)&&t.push(new _t({geometry:An.createLineSegmentsForVectors(n,"bitangent",r),attributes:{color:new Ut(0,0,1,1)},modelMatrix:o})),t.length>0)return new Zn({asynchronous:!1,geometryInstances:t,appearance:new rn({flat:!0,translucent:!1})})}var Kj=Jbt;var Nzi=T(S(),1),Hj=`uniform sampler2D u_depthTexture;
  12730. in vec2 v_textureCoordinates;
  12731. void main()
  12732. {
  12733. float z_window = czm_unpackDepth(texture(u_depthTexture, v_textureCoordinates));
  12734. z_window = czm_reverseLogDepth(z_window);
  12735. float n_range = czm_depthRange.near;
  12736. float f_range = czm_depthRange.far;
  12737. float z_ndc = (2.0 * z_window - n_range - f_range) / (f_range - n_range);
  12738. float scale = pow(z_ndc * 0.5 + 0.5, 8.0);
  12739. out_FragColor = vec4(mix(vec3(0.0), vec3(1.0), scale), 1.0);
  12740. }
  12741. `;var Hzi=T(S(),1);function Qbt(e){e=g(e,g.EMPTY_OBJECT),this.typedArray=e.typedArray,this.width=e.width,this.height=e.height,this.pixelFormat=g(e.pixelFormat,st.RGBA),this.pixelDatatype=g(e.pixelDatatype,Je.UNSIGNED_BYTE);let t=e.url;typeof t=="string"&&(t=Ee.createIfNeeded(t)),this.resource=t;let i=g(e.repeat,!0)?Gn.REPEAT:Gn.CLAMP_TO_EDGE;this.sampler=new un({wrapS:i,wrapT:i,minificationFilter:e.minificationFilter,magnificationFilter:e.magnificationFilter,maximumAnisotropy:e.maximumAnisotropy})}var zj=Qbt;var Jzi=T(S(),1),jbt={FLOAT:"float",VEC2:"vec2",VEC3:"vec3",VEC4:"vec4",MAT2:"mat2",MAT3:"mat2",MAT4:"mat4"},Jj=Object.freeze(jbt);var qzi=T(S(),1);function qbt(e){async function t({data:i}){let o=[],r={id:i.id,result:void 0,error:void 0};self.CESIUM_BASE_URL=i.baseUrl;try{let s=await e(i.parameters,o);r.result=s}catch(s){s instanceof Error?r.error={name:s.name,message:s.message,stack:s.stack}:r.error=s}i.canTransferArrayBuffer||(o.length=0);try{postMessage(r,o)}catch(s){r.result=void 0,r.error=`postMessage failed with error: ${Sf(s)}
  12742. with responseMessage: ${JSON.stringify(r)}`,postMessage(r)}}function n(i){postMessage({id:i.data?.id,error:`postMessage failed with error: ${JSON.stringify(i)}`})}return self.onmessage=t,self.onmessageerror=n,self}var Qj=qbt;globalThis.CESIUM_VERSION="1.112";var _bo=T(S(),1);var smo=T(S(),1);var nmo=T(S(),1);var Huo=T(S(),1),s9;typeof ko<"u"&&(s9=ko);(function(){/*!
  12743. * Knockout JavaScript library v3.5.1
  12744. * (c) The Knockout.js team - http://knockoutjs.com/
  12745. * License: MIT (http://www.opensource.org/licenses/mit-license.php)
  12746. */(function(){(function(e){var t=this||(0,eval)("this"),n=t.document,i=t.navigator,o=t.jQuery,r=t.JSON;o||typeof jQuery>"u"||(o=jQuery),function(s){s(t.ko={})}(function(s,a){function c(b,R){return b===null||typeof b in x?b===R:!1}function l(b,R){var E;return function(){E||(E=f.a.setTimeout(function(){E=e,b()},R))}}function u(b,R){var E;return function(){clearTimeout(E),E=f.a.setTimeout(b,R)}}function m(b,R){R&&R!=="change"?R==="beforeChange"?this.pc(b):this.gb(b,R):this.qc(b)}function p(b,R){R!==null&&R.s&&R.s()}function y(b,R){var E=this.qd,I=E[Z];I.ra||(this.Qb&&this.mb[R]?(E.uc(R,b,this.mb[R]),this.mb[R]=null,--this.Qb):I.I[R]||E.uc(R,b,I.J?{da:b}:E.$c(b)),b.Ja&&b.gd())}var f=typeof s<"u"?s:{};f.b=function(b,R){for(var E=b.split("."),I=f,w=0;w<E.length-1;w++)I=I[E[w]];I[E[E.length-1]]=R},f.L=function(b,R,E){b[R]=E},f.version="3.5.1",f.b("version",f.version),f.options={deferUpdates:!1,useOnlyNativeEvents:!1,foreachHidesDestroyed:!1},f.a=function(){function b(K,j){for(var q in K)w.call(K,q)&&j(q,K[q])}function R(K,j){if(j)for(var q in j)w.call(j,q)&&(K[q]=j[q]);return K}function E(K,j){return K.__proto__=j,K}function I(K,j,q,be){var Te=K[j].match(z)||[];f.a.D(q.match(z),function(ae){f.a.Na(Te,ae,be)}),K[j]=Te.join(" ")}var w=Object.prototype.hasOwnProperty,N={__proto__:[]}instanceof Array,B=typeof Symbol=="function",k={},O={};k[i&&/Firefox\/2/i.test(i.userAgent)?"KeyboardEvent":"UIEvents"]=["keyup","keydown","keypress"],k.MouseEvents="click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave".split(" "),b(k,function(K,j){if(j.length)for(var q=0,be=j.length;q<be;q++)O[j[q]]=K});var U={propertychange:!0},J=n&&function(){for(var K=3,j=n.createElement("div"),q=j.getElementsByTagName("i");j.innerHTML="<!--[if gt IE "+ ++K+"]><i></i><![endif]-->",q[0];);return 4<K?K:e}(),z=/\S+/g,ee;return{Jc:["authenticity_token",/^__RequestVerificationToken(_.*)?$/],D:function(K,j,q){for(var be=0,Te=K.length;be<Te;be++)j.call(q,K[be],be,K)},A:typeof Array.prototype.indexOf=="function"?function(K,j){return Array.prototype.indexOf.call(K,j)}:function(K,j){for(var q=0,be=K.length;q<be;q++)if(K[q]===j)return q;return-1},Lb:function(K,j,q){for(var be=0,Te=K.length;be<Te;be++)if(j.call(q,K[be],be,K))return K[be];return e},Pa:function(K,j){var q=f.a.A(K,j);0<q?K.splice(q,1):q===0&&K.shift()},wc:function(K){var j=[];return K&&f.a.D(K,function(q){0>f.a.A(j,q)&&j.push(q)}),j},Mb:function(K,j,q){var be=[];if(K)for(var Te=0,ae=K.length;Te<ae;Te++)be.push(j.call(q,K[Te],Te));return be},jb:function(K,j,q){var be=[];if(K)for(var Te=0,ae=K.length;Te<ae;Te++)j.call(q,K[Te],Te)&&be.push(K[Te]);return be},Nb:function(K,j){if(j instanceof Array)K.push.apply(K,j);else for(var q=0,be=j.length;q<be;q++)K.push(j[q]);return K},Na:function(K,j,q){var be=f.a.A(f.a.bc(K),j);0>be?q&&K.push(j):q||K.splice(be,1)},Ba:N,extend:R,setPrototypeOf:E,Ab:N?E:R,P:b,Ga:function(K,j,q){if(!K)return K;var be={},Te;for(Te in K)w.call(K,Te)&&(be[Te]=j.call(q,K[Te],Te,K));return be},Tb:function(K){for(;K.firstChild;)f.removeNode(K.firstChild)},Yb:function(K){K=f.a.la(K);for(var j=(K[0]&&K[0].ownerDocument||n).createElement("div"),q=0,be=K.length;q<be;q++)j.appendChild(f.oa(K[q]));return j},Ca:function(K,j){for(var q=0,be=K.length,Te=[];q<be;q++){var ae=K[q].cloneNode(!0);Te.push(j?f.oa(ae):ae)}return Te},va:function(K,j){if(f.a.Tb(K),j)for(var q=0,be=j.length;q<be;q++)K.appendChild(j[q])},Xc:function(K,j){var q=K.nodeType?[K]:K;if(0<q.length){for(var be=q[0],Te=be.parentNode,ae=0,xe=j.length;ae<xe;ae++)Te.insertBefore(j[ae],be);for(ae=0,xe=q.length;ae<xe;ae++)f.removeNode(q[ae])}},Ua:function(K,j){if(K.length){for(j=j.nodeType===8&&j.parentNode||j;K.length&&K[0].parentNode!==j;)K.splice(0,1);for(;1<K.length&&K[K.length-1].parentNode!==j;)K.length--;if(1<K.length){var q=K[0],be=K[K.length-1];for(K.length=0;q!==be;)K.push(q),q=q.nextSibling;K.push(be)}}return K},Zc:function(K,j){7>J?K.setAttribute("selected",j):K.selected=j},Db:function(K){return K===null||K===e?"":K.trim?K.trim():K.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},Ud:function(K,j){return K=K||"",j.length>K.length?!1:K.substring(0,j.length)===j},vd:function(K,j){if(K===j)return!0;if(K.nodeType===11)return!1;if(j.contains)return j.contains(K.nodeType!==1?K.parentNode:K);if(j.compareDocumentPosition)return(j.compareDocumentPosition(K)&16)==16;for(;K&&K!=j;)K=K.parentNode;return!!K},Sb:function(K){return f.a.vd(K,K.ownerDocument.documentElement)},kd:function(K){return!!f.a.Lb(K,f.a.Sb)},R:function(K){return K&&K.tagName&&K.tagName.toLowerCase()},Ac:function(K){return f.onError?function(){try{return K.apply(this,arguments)}catch(j){throw f.onError&&f.onError(j),j}}:K},setTimeout:function(K,j){return setTimeout(f.a.Ac(K),j)},Gc:function(K){setTimeout(function(){throw f.onError&&f.onError(K),K},0)},B:function(K,j,q){var be=f.a.Ac(q);if(q=U[j],f.options.useOnlyNativeEvents||q||!o)if(q||typeof K.addEventListener!="function")if(typeof K.attachEvent<"u"){var Te=function(xe){be.call(K,xe)},ae="on"+j;K.attachEvent(ae,Te),f.a.K.za(K,function(){K.detachEvent(ae,Te)})}else throw Error("Browser doesn't support addEventListener or attachEvent");else K.addEventListener(j,be,!1);else ee||(ee=typeof o(K).on=="function"?"on":"bind"),o(K)[ee](j,be)},Fb:function(K,j){if(!K||!K.nodeType)throw Error("element must be a DOM node when calling triggerEvent");var q;if(f.a.R(K)==="input"&&K.type&&j.toLowerCase()=="click"?(q=K.type,q=q=="checkbox"||q=="radio"):q=!1,f.options.useOnlyNativeEvents||!o||q)if(typeof n.createEvent=="function")if(typeof K.dispatchEvent=="function")q=n.createEvent(O[j]||"HTMLEvents"),q.initEvent(j,!0,!0,t,0,0,0,0,0,!1,!1,!1,!1,0,K),K.dispatchEvent(q);else throw Error("The supplied element doesn't support dispatchEvent");else if(q&&K.click)K.click();else if(typeof K.fireEvent<"u")K.fireEvent("on"+j);else throw Error("Browser doesn't support triggering events");else o(K).trigger(j)},f:function(K){return f.O(K)?K():K},bc:function(K){return f.O(K)?K.v():K},Eb:function(K,j,q){var be;j&&(typeof K.classList=="object"?(be=K.classList[q?"add":"remove"],f.a.D(j.match(z),function(Te){be.call(K.classList,Te)})):typeof K.className.baseVal=="string"?I(K.className,"baseVal",j,q):I(K,"className",j,q))},Bb:function(K,j){var q=f.a.f(j);(q===null||q===e)&&(q="");var be=f.h.firstChild(K);!be||be.nodeType!=3||f.h.nextSibling(be)?f.h.va(K,[K.ownerDocument.createTextNode(q)]):be.data=q,f.a.Ad(K)},Yc:function(K,j){if(K.name=j,7>=J)try{var q=K.name.replace(/[&<>'"]/g,function(be){return"&#"+be.charCodeAt(0)+";"});K.mergeAttributes(n.createElement("<input name='"+q+"'/>"),!1)}catch{}},Ad:function(K){9<=J&&(K=K.nodeType==1?K:K.parentNode,K.style&&(K.style.zoom=K.style.zoom))},wd:function(K){if(J){var j=K.style.width;K.style.width=0,K.style.width=j}},Pd:function(K,j){K=f.a.f(K),j=f.a.f(j);for(var q=[],be=K;be<=j;be++)q.push(be);return q},la:function(K){for(var j=[],q=0,be=K.length;q<be;q++)j.push(K[q]);return j},Da:function(K){return B?Symbol(K):K},Zd:J===6,$d:J===7,W:J,Lc:function(K,j){for(var q=f.a.la(K.getElementsByTagName("input")).concat(f.a.la(K.getElementsByTagName("textarea"))),be=typeof j=="string"?function(xe){return xe.name===j}:function(xe){return j.test(xe.name)},Te=[],ae=q.length-1;0<=ae;ae--)be(q[ae])&&Te.push(q[ae]);return Te},Nd:function(K){return typeof K=="string"&&(K=f.a.Db(K))?r&&r.parse?r.parse(K):new Function("return "+K)():null},hc:function(K,j,q){if(!r||!r.stringify)throw Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js");return r.stringify(f.a.f(K),j,q)},Od:function(K,j,q){q=q||{};var be=q.params||{},Te=q.includeFields||this.Jc,ae=K;if(typeof K=="object"&&f.a.R(K)==="form")for(var ae=K.action,xe=Te.length-1;0<=xe;xe--)for(var _e=f.a.Lc(K,Te[xe]),Ve=_e.length-1;0<=Ve;Ve--)be[_e[Ve].name]=_e[Ve].value;j=f.a.f(j);var Ie=n.createElement("form");Ie.style.display="none",Ie.action=ae,Ie.method="post";for(var Me in j)K=n.createElement("input"),K.type="hidden",K.name=Me,K.value=f.a.hc(f.a.f(j[Me])),Ie.appendChild(K);b(be,function(ve,ke){var ct=n.createElement("input");ct.type="hidden",ct.name=ve,ct.value=ke,Ie.appendChild(ct)}),n.body.appendChild(Ie),q.submitter?q.submitter(Ie):Ie.submit(),setTimeout(function(){Ie.parentNode.removeChild(Ie)},0)}}}(),f.b("utils",f.a),f.b("utils.arrayForEach",f.a.D),f.b("utils.arrayFirst",f.a.Lb),f.b("utils.arrayFilter",f.a.jb),f.b("utils.arrayGetDistinctValues",f.a.wc),f.b("utils.arrayIndexOf",f.a.A),f.b("utils.arrayMap",f.a.Mb),f.b("utils.arrayPushAll",f.a.Nb),f.b("utils.arrayRemoveItem",f.a.Pa),f.b("utils.cloneNodes",f.a.Ca),f.b("utils.createSymbolOrString",f.a.Da),f.b("utils.extend",f.a.extend),f.b("utils.fieldsIncludedWithJsonPost",f.a.Jc),f.b("utils.getFormFields",f.a.Lc),f.b("utils.objectMap",f.a.Ga),f.b("utils.peekObservable",f.a.bc),f.b("utils.postJson",f.a.Od),f.b("utils.parseJson",f.a.Nd),f.b("utils.registerEventHandler",f.a.B),f.b("utils.stringifyJson",f.a.hc),f.b("utils.range",f.a.Pd),f.b("utils.toggleDomNodeCssClass",f.a.Eb),f.b("utils.triggerEvent",f.a.Fb),f.b("utils.unwrapObservable",f.a.f),f.b("utils.objectForEach",f.a.P),f.b("utils.addOrRemoveItem",f.a.Na),f.b("utils.setTextContent",f.a.Bb),f.b("unwrap",f.a.f),Function.prototype.bind||(Function.prototype.bind=function(b){var R=this;if(arguments.length===1)return function(){return R.apply(b,arguments)};var E=Array.prototype.slice.call(arguments,1);return function(){var I=E.slice(0);return I.push.apply(I,arguments),R.apply(b,I)}}),f.a.g=new function(){var b=0,R="__ko__"+new Date().getTime(),E={},I,w;return f.a.W?(I=function(N,B){var k=N[R];if(!k||k==="null"||!E[k]){if(!B)return e;k=N[R]="ko"+b++,E[k]={}}return E[k]},w=function(N){var B=N[R];return B?(delete E[B],N[R]=null,!0):!1}):(I=function(N,B){var k=N[R];return!k&&B&&(k=N[R]={}),k},w=function(N){return N[R]?(delete N[R],!0):!1}),{get:function(N,B){var k=I(N,!1);return k&&k[B]},set:function(N,B,k){(N=I(N,k!==e))&&(N[B]=k)},Ub:function(N,B,k){return N=I(N,!0),N[B]||(N[B]=k)},clear:w,Z:function(){return b+++R}}},f.b("utils.domData",f.a.g),f.b("utils.domData.clear",f.a.g.clear),f.a.K=new function(){function b(B,k){var O=f.a.g.get(B,I);return O===e&&k&&(O=[],f.a.g.set(B,I,O)),O}function R(B){var k=b(B,!1);if(k)for(var k=k.slice(0),O=0;O<k.length;O++)k[O](B);f.a.g.clear(B),f.a.K.cleanExternalData(B),N[B.nodeType]&&E(B.childNodes,!0)}function E(B,k){for(var O=[],U,J=0;J<B.length;J++)if((!k||B[J].nodeType===8)&&(R(O[O.length]=U=B[J]),B[J]!==U))for(;J--&&f.a.A(O,B[J])==-1;);}var I=f.a.g.Z(),w={1:!0,8:!0,9:!0},N={1:!0,9:!0};return{za:function(B,k){if(typeof k!="function")throw Error("Callback must be a function");b(B,!0).push(k)},yb:function(B,k){var O=b(B,!1);O&&(f.a.Pa(O,k),O.length==0&&f.a.g.set(B,I,e))},oa:function(B){return f.u.G(function(){w[B.nodeType]&&(R(B),N[B.nodeType]&&E(B.getElementsByTagName("*")))}),B},removeNode:function(B){f.oa(B),B.parentNode&&B.parentNode.removeChild(B)},cleanExternalData:function(B){o&&typeof o.cleanData=="function"&&o.cleanData([B])}}},f.oa=f.a.K.oa,f.removeNode=f.a.K.removeNode,f.b("cleanNode",f.oa),f.b("removeNode",f.removeNode),f.b("utils.domNodeDisposal",f.a.K),f.b("utils.domNodeDisposal.addDisposeCallback",f.a.K.za),f.b("utils.domNodeDisposal.removeDisposeCallback",f.a.K.yb),function(){var b=[0,"",""],R=[1,"<table>","</table>"],E=[3,"<table><tbody><tr>","</tr></tbody></table>"],I=[1,"<select multiple='multiple'>","</select>"],w={thead:R,tbody:R,tfoot:R,tr:[2,"<table><tbody>","</tbody></table>"],td:E,th:E,option:I,optgroup:I},N=8>=f.a.W;f.a.ua=function(B,k){var O;if(o){if(o.parseHTML)O=o.parseHTML(B,k)||[];else if((O=o.clean([B],k))&&O[0]){for(var U=O[0];U.parentNode&&U.parentNode.nodeType!==11;)U=U.parentNode;U.parentNode&&U.parentNode.removeChild(U)}}else{(O=k)||(O=n);var U=O.parentWindow||O.defaultView||t,J=f.a.Db(B).toLowerCase(),z=O.createElement("div"),ee;for(ee=(J=J.match(/^(?:\x3c!--.*?--\x3e\s*?)*?<([a-z]+)[\s>]/))&&w[J[1]]||b,J=ee[0],ee="ignored<div>"+ee[1]+B+ee[2]+"</div>",typeof U.innerShiv=="function"?z.appendChild(U.innerShiv(ee)):(N&&O.body.appendChild(z),z.innerHTML=ee,N&&z.parentNode.removeChild(z));J--;)z=z.lastChild;O=f.a.la(z.lastChild.childNodes)}return O},f.a.Md=function(B,k){var O=f.a.ua(B,k);return O.length&&O[0].parentElement||f.a.Yb(O)},f.a.fc=function(B,k){if(f.a.Tb(B),k=f.a.f(k),k!==null&&k!==e)if(typeof k!="string"&&(k=k.toString()),o)o(B).html(k);else for(var O=f.a.ua(k,B.ownerDocument),U=0;U<O.length;U++)B.appendChild(O[U])}}(),f.b("utils.parseHtmlFragment",f.a.ua),f.b("utils.setHtml",f.a.fc),f.aa=function(){function b(E,I){if(E){if(E.nodeType==8){var w=f.aa.Uc(E.nodeValue);w!=null&&I.push({ud:E,Kd:w})}else if(E.nodeType==1)for(var w=0,N=E.childNodes,B=N.length;w<B;w++)b(N[w],I)}}var R={};return{Xb:function(E){if(typeof E!="function")throw Error("You can only pass a function to ko.memoization.memoize()");var I=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);return R[I]=E,"<!--[ko_memo:"+I+"]-->"},bd:function(E,I){var w=R[E];if(w===e)throw Error("Couldn't find any memo with ID "+E+". Perhaps it's already been unmemoized.");try{return w.apply(null,I||[]),!0}finally{delete R[E]}},cd:function(E,I){var w=[];b(E,w);for(var N=0,B=w.length;N<B;N++){var k=w[N].ud,O=[k];I&&f.a.Nb(O,I),f.aa.bd(w[N].Kd,O),k.nodeValue="",k.parentNode&&k.parentNode.removeChild(k)}},Uc:function(E){return(E=E.match(/^\[ko_memo\:(.*?)\]$/))?E[1]:null}}}(),f.b("memoization",f.aa),f.b("memoization.memoize",f.aa.Xb),f.b("memoization.unmemoize",f.aa.bd),f.b("memoization.parseMemoText",f.aa.Uc),f.b("memoization.unmemoizeDomNodeAndDescendants",f.aa.cd),f.na=function(){function b(){if(w){for(var k=w,O=0,U;B<w;)if(U=I[B++]){if(B>k){if(5e3<=++O){B=w,f.a.Gc(Error("'Too much recursion' after processing "+O+" task groups."));break}k=w}try{U()}catch(J){f.a.Gc(J)}}}}function R(){b(),B=w=I.length=0}var E,I=[],w=0,N=1,B=0;return t.MutationObserver?E=function(k){var O=n.createElement("div");return new MutationObserver(k).observe(O,{attributes:!0}),function(){O.classList.toggle("foo")}}(R):E=n&&"onreadystatechange"in n.createElement("script")?function(k){var O=n.createElement("script");O.onreadystatechange=function(){O.onreadystatechange=null,n.documentElement.removeChild(O),O=null,k()},n.documentElement.appendChild(O)}:function(k){setTimeout(k,0)},{scheduler:E,zb:function(k){return w||f.na.scheduler(R),I[w++]=k,N++},cancel:function(k){k=k-(N-w),k>=B&&k<w&&(I[k]=null)},resetForTesting:function(){var k=w-B;return B=w=I.length=0,k},Sd:b}}(),f.b("tasks",f.na),f.b("tasks.schedule",f.na.zb),f.b("tasks.runEarly",f.na.Sd),f.Ta={throttle:function(b,R){b.throttleEvaluation=R;var E=null;return f.$({read:b,write:function(I){clearTimeout(E),E=f.a.setTimeout(function(){b(I)},R)}})},rateLimit:function(b,R){var E,I,w;typeof R=="number"?E=R:(E=R.timeout,I=R.method),b.Hb=!1,w=typeof I=="function"?I:I=="notifyWhenChangesStop"?u:l,b.ub(function(N){return w(N,E,R)})},deferred:function(b,R){if(R!==!0)throw Error("The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled.");b.Hb||(b.Hb=!0,b.ub(function(E){var I,w=!1;return function(){if(!w){f.na.cancel(I),I=f.na.zb(E);try{w=!0,b.notifySubscribers(e,"dirty")}finally{w=!1}}}}))},notify:function(b,R){b.equalityComparer=R=="always"?null:c}};var x={undefined:1,boolean:1,number:1,string:1};f.b("extenders",f.Ta),f.ic=function(b,R,E){this.da=b,this.lc=R,this.mc=E,this.Ib=!1,this.fb=this.Jb=null,f.L(this,"dispose",this.s),f.L(this,"disposeWhenNodeIsRemoved",this.l)},f.ic.prototype.s=function(){this.Ib||(this.fb&&f.a.K.yb(this.Jb,this.fb),this.Ib=!0,this.mc(),this.da=this.lc=this.mc=this.Jb=this.fb=null)},f.ic.prototype.l=function(b){this.Jb=b,f.a.K.za(b,this.fb=this.s.bind(this))},f.T=function(){f.a.Ab(this,_),_.qb(this)};var _={qb:function(b){b.U={change:[]},b.sc=1},subscribe:function(b,R,E){var I=this;E=E||"change";var w=new f.ic(I,R?b.bind(R):b,function(){f.a.Pa(I.U[E],w),I.hb&&I.hb(E)});return I.Qa&&I.Qa(E),I.U[E]||(I.U[E]=[]),I.U[E].push(w),w},notifySubscribers:function(b,R){if(R=R||"change",R==="change"&&this.Gb(),this.Wa(R)){var E=R==="change"&&this.ed||this.U[R].slice(0);try{f.u.xc();for(var I=0,w;w=E[I];++I)w.Ib||w.lc(b)}finally{f.u.end()}}},ob:function(){return this.sc},Dd:function(b){return this.ob()!==b},Gb:function(){++this.sc},ub:function(b){var R=this,E=f.O(R),I,w,N,B,k;R.gb||(R.gb=R.notifySubscribers,R.notifySubscribers=m);var O=b(function(){R.Ja=!1,E&&B===R&&(B=R.nc?R.nc():R());var U=w||k&&R.sb(N,B);k=w=I=!1,U&&R.gb(N=B)});R.qc=function(U,J){J&&R.Ja||(k=!J),R.ed=R.U.change.slice(0),R.Ja=I=!0,B=U,O()},R.pc=function(U){I||(N=U,R.gb(U,"beforeChange"))},R.rc=function(){k=!0},R.gd=function(){R.sb(N,R.v(!0))&&(w=!0)}},Wa:function(b){return this.U[b]&&this.U[b].length},Bd:function(b){if(b)return this.U[b]&&this.U[b].length||0;var R=0;return f.a.P(this.U,function(E,I){E!=="dirty"&&(R+=I.length)}),R},sb:function(b,R){return!this.equalityComparer||!this.equalityComparer(b,R)},toString:function(){return"[object Object]"},extend:function(b){var R=this;return b&&f.a.P(b,function(E,I){var w=f.Ta[E];typeof w=="function"&&(R=w(R,I)||R)}),R}};f.L(_,"init",_.qb),f.L(_,"subscribe",_.subscribe),f.L(_,"extend",_.extend),f.L(_,"getSubscriptionsCount",_.Bd),f.a.Ba&&f.a.setPrototypeOf(_,Function.prototype),f.T.fn=_,f.Qc=function(b){return b!=null&&typeof b.subscribe=="function"&&typeof b.notifySubscribers=="function"},f.b("subscribable",f.T),f.b("isSubscribable",f.Qc),f.S=f.u=function(){function b(N){E.push(I),I=N}function R(){I=E.pop()}var E=[],I,w=0;return{xc:b,end:R,cc:function(N){if(I){if(!f.Qc(N))throw Error("Only subscribable things can act as dependencies");I.od.call(I.pd,N,N.fd||(N.fd=++w))}},G:function(N,B,k){try{return b(),N.apply(B,k||[])}finally{R()}},qa:function(){if(I)return I.o.qa()},Va:function(){if(I)return I.o.Va()},Ya:function(){if(I)return I.Ya},o:function(){if(I)return I.o}}}(),f.b("computedContext",f.S),f.b("computedContext.getDependenciesCount",f.S.qa),f.b("computedContext.getDependencies",f.S.Va),f.b("computedContext.isInitial",f.S.Ya),f.b("computedContext.registerDependency",f.S.cc),f.b("ignoreDependencies",f.Yd=f.u.G);var C=f.a.Da("_latestValue");f.ta=function(b){function R(){return 0<arguments.length?(R.sb(R[C],arguments[0])&&(R.ya(),R[C]=arguments[0],R.xa()),this):(f.u.cc(R),R[C])}return R[C]=b,f.a.Ba||f.a.extend(R,f.T.fn),f.T.fn.qb(R),f.a.Ab(R,V),f.options.deferUpdates&&f.Ta.deferred(R,!0),R};var V={equalityComparer:c,v:function(){return this[C]},xa:function(){this.notifySubscribers(this[C],"spectate"),this.notifySubscribers(this[C])},ya:function(){this.notifySubscribers(this[C],"beforeChange")}};f.a.Ba&&f.a.setPrototypeOf(V,f.T.fn);var L=f.ta.Ma="__ko_proto__";V[L]=f.ta,f.O=function(b){if((b=typeof b=="function"&&b[L])&&b!==V[L]&&b!==f.o.fn[L])throw Error("Invalid object that looks like an observable; possibly from another Knockout instance");return!!b},f.Za=function(b){return typeof b=="function"&&(b[L]===V[L]||b[L]===f.o.fn[L]&&b.Nc)},f.b("observable",f.ta),f.b("isObservable",f.O),f.b("isWriteableObservable",f.Za),f.b("isWritableObservable",f.Za),f.b("observable.fn",V),f.L(V,"peek",V.v),f.L(V,"valueHasMutated",V.xa),f.L(V,"valueWillMutate",V.ya),f.Ha=function(b){if(b=b||[],typeof b!="object"||!("length"in b))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");return b=f.ta(b),f.a.Ab(b,f.Ha.fn),b.extend({trackArrayChanges:!0})},f.Ha.fn={remove:function(b){for(var R=this.v(),E=[],I=typeof b!="function"||f.O(b)?function(B){return B===b}:b,w=0;w<R.length;w++){var N=R[w];if(I(N)){if(E.length===0&&this.ya(),R[w]!==N)throw Error("Array modified during remove; cannot remove item");E.push(N),R.splice(w,1),w--}}return E.length&&this.xa(),E},removeAll:function(b){if(b===e){var R=this.v(),E=R.slice(0);return this.ya(),R.splice(0,R.length),this.xa(),E}return b?this.remove(function(I){return 0<=f.a.A(b,I)}):[]},destroy:function(b){var R=this.v(),E=typeof b!="function"||f.O(b)?function(N){return N===b}:b;this.ya();for(var I=R.length-1;0<=I;I--){var w=R[I];E(w)&&(w._destroy=!0)}this.xa()},destroyAll:function(b){return b===e?this.destroy(function(){return!0}):b?this.destroy(function(R){return 0<=f.a.A(b,R)}):[]},indexOf:function(b){var R=this();return f.a.A(R,b)},replace:function(b,R){var E=this.indexOf(b);0<=E&&(this.ya(),this.v()[E]=R,this.xa())},sorted:function(b){var R=this().slice(0);return b?R.sort(b):R.sort()},reversed:function(){return this().slice(0).reverse()}},f.a.Ba&&f.a.setPrototypeOf(f.Ha.fn,f.ta.fn),f.a.D("pop push reverse shift sort splice unshift".split(" "),function(b){f.Ha.fn[b]=function(){var R=this.v();this.ya(),this.zc(R,b,arguments);var E=R[b].apply(R,arguments);return this.xa(),E===R?this:E}}),f.a.D(["slice"],function(b){f.Ha.fn[b]=function(){var R=this();return R[b].apply(R,arguments)}}),f.Pc=function(b){return f.O(b)&&typeof b.remove=="function"&&typeof b.push=="function"},f.b("observableArray",f.Ha),f.b("isObservableArray",f.Pc),f.Ta.trackArrayChanges=function(b,R){function E(){function z(){if(k){var ee=[].concat(b.v()||[]),K;b.Wa("arrayChange")&&((!w||1<k)&&(w=f.a.Pb(O,ee,b.Ob)),K=w),O=ee,w=null,k=0,K&&K.length&&b.notifySubscribers(K,"arrayChange")}}I?z():(I=!0,B=b.subscribe(function(){++k},null,"spectate"),O=[].concat(b.v()||[]),w=null,N=b.subscribe(z))}if(b.Ob={},R&&typeof R=="object"&&f.a.extend(b.Ob,R),b.Ob.sparse=!0,!b.zc){var I=!1,w=null,N,B,k=0,O,U=b.Qa,J=b.hb;b.Qa=function(z){U&&U.call(b,z),z==="arrayChange"&&E()},b.hb=function(z){J&&J.call(b,z),z!=="arrayChange"||b.Wa("arrayChange")||(N&&N.s(),B&&B.s(),B=N=null,I=!1,O=e)},b.zc=function(z,ee,K){function j(Ie,Me,ve){return q[q.length]={status:Ie,value:Me,index:ve}}if(I&&!k){var q=[],be=z.length,Te=K.length,ae=0;switch(ee){case"push":ae=be;case"unshift":for(ee=0;ee<Te;ee++)j("added",K[ee],ae+ee);break;case"pop":ae=be-1;case"shift":be&&j("deleted",z[ae],ae);break;case"splice":ee=Math.min(Math.max(0,0>K[0]?be+K[0]:K[0]),be);for(var be=Te===1?be:Math.min(ee+(K[1]||0),be),Te=ee+Te-2,ae=Math.max(be,Te),xe=[],_e=[],Ve=2;ee<ae;++ee,++Ve)ee<be&&_e.push(j("deleted",z[ee],ee)),ee<Te&&xe.push(j("added",K[Ve],ee));f.a.Kc(_e,xe);break;default:return}w=q}}}};var Z=f.a.Da("_state");f.o=f.$=function(b,R,E){function I(){if(0<arguments.length){if(typeof w=="function")w.apply(N.nb,arguments);else throw Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.");return this}return N.ra||f.u.cc(I),(N.ka||N.J&&I.Xa())&&I.ha(),N.X}if(typeof b=="object"?E=b:(E=E||{},b&&(E.read=b)),typeof E.read!="function")throw Error("Pass a function that returns the value of the ko.computed");var w=E.write,N={X:e,sa:!0,ka:!0,rb:!1,jc:!1,ra:!1,wb:!1,J:!1,Wc:E.read,nb:R||E.owner,l:E.disposeWhenNodeIsRemoved||E.l||null,Sa:E.disposeWhen||E.Sa,Rb:null,I:{},V:0,Ic:null};return I[Z]=N,I.Nc=typeof w=="function",f.a.Ba||f.a.extend(I,f.T.fn),f.T.fn.qb(I),f.a.Ab(I,G),E.pure?(N.wb=!0,N.J=!0,f.a.extend(I,X)):E.deferEvaluation&&f.a.extend(I,P),f.options.deferUpdates&&f.Ta.deferred(I,!0),N.l&&(N.jc=!0,N.l.nodeType||(N.l=null)),N.J||E.deferEvaluation||I.ha(),N.l&&I.ja()&&f.a.K.za(N.l,N.Rb=function(){I.s()}),I};var G={equalityComparer:c,qa:function(){return this[Z].V},Va:function(){var b=[];return f.a.P(this[Z].I,function(R,E){b[E.Ka]=E.da}),b},Vb:function(b){if(!this[Z].V)return!1;var R=this.Va();return f.a.A(R,b)!==-1?!0:!!f.a.Lb(R,function(E){return E.Vb&&E.Vb(b)})},uc:function(b,R,E){if(this[Z].wb&&R===this)throw Error("A 'pure' computed must not be called recursively");this[Z].I[b]=E,E.Ka=this[Z].V++,E.La=R.ob()},Xa:function(){var b,R,E=this[Z].I;for(b in E)if(Object.prototype.hasOwnProperty.call(E,b)&&(R=E[b],this.Ia&&R.da.Ja||R.da.Dd(R.La)))return!0},Jd:function(){this.Ia&&!this[Z].rb&&this.Ia(!1)},ja:function(){var b=this[Z];return b.ka||0<b.V},Rd:function(){this.Ja?this[Z].ka&&(this[Z].sa=!0):this.Hc()},$c:function(b){if(b.Hb){var R=b.subscribe(this.Jd,this,"dirty"),E=b.subscribe(this.Rd,this);return{da:b,s:function(){R.s(),E.s()}}}return b.subscribe(this.Hc,this)},Hc:function(){var b=this,R=b.throttleEvaluation;R&&0<=R?(clearTimeout(this[Z].Ic),this[Z].Ic=f.a.setTimeout(function(){b.ha(!0)},R)):b.Ia?b.Ia(!0):b.ha(!0)},ha:function(b){var R=this[Z],E=R.Sa,I=!1;if(!R.rb&&!R.ra){if(R.l&&!f.a.Sb(R.l)||E&&E()){if(!R.jc){this.s();return}}else R.jc=!1;R.rb=!0;try{I=this.zd(b)}finally{R.rb=!1}return I}},zd:function(b){var R=this[Z],I=!1,E=R.wb?e:!R.V,I={qd:this,mb:R.I,Qb:R.V};f.u.xc({pd:I,od:y,o:this,Ya:E}),R.I={},R.V=0;var w=this.yd(R,I);return R.V?I=this.sb(R.X,w):(this.s(),I=!0),I&&(R.J?this.Gb():this.notifySubscribers(R.X,"beforeChange"),R.X=w,this.notifySubscribers(R.X,"spectate"),!R.J&&b&&this.notifySubscribers(R.X),this.rc&&this.rc()),E&&this.notifySubscribers(R.X,"awake"),I},yd:function(b,R){try{var E=b.Wc;return b.nb?E.call(b.nb):E()}finally{f.u.end(),R.Qb&&!b.J&&f.a.P(R.mb,p),b.sa=b.ka=!1}},v:function(b){var R=this[Z];return(R.ka&&(b||!R.V)||R.J&&this.Xa())&&this.ha(),R.X},ub:function(b){f.T.fn.ub.call(this,b),this.nc=function(){return this[Z].J||(this[Z].sa?this.ha():this[Z].ka=!1),this[Z].X},this.Ia=function(R){this.pc(this[Z].X),this[Z].ka=!0,R&&(this[Z].sa=!0),this.qc(this,!R)}},s:function(){var b=this[Z];!b.J&&b.I&&f.a.P(b.I,function(R,E){E.s&&E.s()}),b.l&&b.Rb&&f.a.K.yb(b.l,b.Rb),b.I=e,b.V=0,b.ra=!0,b.sa=!1,b.ka=!1,b.J=!1,b.l=e,b.Sa=e,b.Wc=e,this.Nc||(b.nb=e)}},X={Qa:function(b){var R=this,E=R[Z];if(!E.ra&&E.J&&b=="change"){if(E.J=!1,E.sa||R.Xa())E.I=null,E.V=0,R.ha()&&R.Gb();else{var I=[];f.a.P(E.I,function(w,N){I[N.Ka]=w}),f.a.D(I,function(w,N){var B=E.I[w],k=R.$c(B.da);k.Ka=N,k.La=B.La,E.I[w]=k}),R.Xa()&&R.ha()&&R.Gb()}E.ra||R.notifySubscribers(E.X,"awake")}},hb:function(b){var R=this[Z];R.ra||b!="change"||this.Wa("change")||(f.a.P(R.I,function(E,I){I.s&&(R.I[E]={da:I.da,Ka:I.Ka,La:I.La},I.s())}),R.J=!0,this.notifySubscribers(e,"asleep"))},ob:function(){var b=this[Z];return b.J&&(b.sa||this.Xa())&&this.ha(),f.T.fn.ob.call(this)}},P={Qa:function(b){b!="change"&&b!="beforeChange"||this.v()}};f.a.Ba&&f.a.setPrototypeOf(G,f.T.fn);var v=f.ta.Ma;G[v]=f.o,f.Oc=function(b){return typeof b=="function"&&b[v]===G[v]},f.Fd=function(b){return f.Oc(b)&&b[Z]&&b[Z].wb},f.b("computed",f.o),f.b("dependentObservable",f.o),f.b("isComputed",f.Oc),f.b("isPureComputed",f.Fd),f.b("computed.fn",G),f.L(G,"peek",G.v),f.L(G,"dispose",G.s),f.L(G,"isActive",G.ja),f.L(G,"getDependenciesCount",G.qa),f.L(G,"getDependencies",G.Va),f.xb=function(b,R){return typeof b=="function"?f.o(b,R,{pure:!0}):(b=f.a.extend({},b),b.pure=!0,f.o(b,R))},f.b("pureComputed",f.xb),function(){function b(I,w,N){if(N=N||new E,I=w(I),typeof I!="object"||I===null||I===e||I instanceof RegExp||I instanceof Date||I instanceof String||I instanceof Number||I instanceof Boolean)return I;var B=I instanceof Array?[]:{};return N.save(I,B),R(I,function(k){var O=w(I[k]);switch(typeof O){case"boolean":case"number":case"string":case"function":B[k]=O;break;case"object":case"undefined":var U=N.get(O);B[k]=U!==e?U:b(O,w,N)}}),B}function R(I,w){if(I instanceof Array){for(var N=0;N<I.length;N++)w(N);typeof I.toJSON=="function"&&w("toJSON")}else for(N in I)w(N)}function E(){this.keys=[],this.values=[]}f.ad=function(I){if(arguments.length==0)throw Error("When calling ko.toJS, pass the object you want to convert.");return b(I,function(w){for(var N=0;f.O(w)&&10>N;N++)w=w();return w})},f.toJSON=function(I,w,N){return I=f.ad(I),f.a.hc(I,w,N)},E.prototype={constructor:E,save:function(I,w){var N=f.a.A(this.keys,I);0<=N?this.values[N]=w:(this.keys.push(I),this.values.push(w))},get:function(I){return I=f.a.A(this.keys,I),0<=I?this.values[I]:e}}}(),f.b("toJS",f.ad),f.b("toJSON",f.toJSON),f.Wd=function(b,R,E){function I(w){var N=f.xb(b,E).extend({ma:"always"}),B=N.subscribe(function(k){k&&(B.s(),w(k))});return N.notifySubscribers(N.v()),B}return typeof Promise!="function"||R?I(R.bind(E)):new Promise(I)},f.b("when",f.Wd),function(){f.w={M:function(b){switch(f.a.R(b)){case"option":return b.__ko__hasDomDataOptionValue__===!0?f.a.g.get(b,f.c.options.$b):7>=f.a.W?b.getAttributeNode("value")&&b.getAttributeNode("value").specified?b.value:b.text:b.value;case"select":return 0<=b.selectedIndex?f.w.M(b.options[b.selectedIndex]):e;default:return b.value}},cb:function(b,R,E){switch(f.a.R(b)){case"option":typeof R=="string"?(f.a.g.set(b,f.c.options.$b,e),"__ko__hasDomDataOptionValue__"in b&&delete b.__ko__hasDomDataOptionValue__,b.value=R):(f.a.g.set(b,f.c.options.$b,R),b.__ko__hasDomDataOptionValue__=!0,b.value=typeof R=="number"?R:"");break;case"select":(R===""||R===null)&&(R=e);for(var I=-1,w=0,N=b.options.length,B;w<N;++w)if(B=f.w.M(b.options[w]),B==R||B===""&&R===e){I=w;break}(E||0<=I||R===e&&1<b.size)&&(b.selectedIndex=I,f.a.W===6&&f.a.setTimeout(function(){b.selectedIndex=I},0));break;default:(R===null||R===e)&&(R=""),b.value=R}}}}(),f.b("selectExtensions",f.w),f.b("selectExtensions.readValue",f.w.M),f.b("selectExtensions.writeValue",f.w.cb),f.m=function(){function b(k){k=f.a.Db(k),k.charCodeAt(0)===123&&(k=k.slice(1,-1)),k+=`
  12747. ,`;var O=[],U=k.match(I),J,z=[],ee=0;if(1<U.length){for(var K=0,j;j=U[K];++K){var q=j.charCodeAt(0);if(q===44){if(0>=ee){O.push(J&&z.length?{key:J,value:z.join("")}:{unknown:J||z.join("")}),J=ee=0,z=[];continue}}else if(q===58){if(!ee&&!J&&z.length===1){J=z.pop();continue}}else{if(q===47&&1<j.length&&(j.charCodeAt(1)===47||j.charCodeAt(1)===42))continue;q===47&&K&&1<j.length?(q=U[K-1].match(w))&&!N[q[0]]&&(k=k.substr(k.indexOf(j)+1),U=k.match(I),K=-1,j="/"):q===40||q===123||q===91?++ee:q===41||q===125||q===93?--ee:J||z.length||q!==34&&q!==39||(j=j.slice(1,-1))}z.push(j)}if(0<ee)throw Error("Unbalanced parentheses, braces, or brackets")}return O}var R=["true","false","null","undefined"],E=/^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,I=RegExp(`"(?:\\\\.|[^"])*"|'(?:\\\\.|[^'])*'|\`(?:\\\\.|[^\`])*\`|/\\*(?:[^*]|\\*+[^*/])*\\*+/|//.*
  12748. |/(?:\\\\.|[^/])+/w*|[^\\s:,/][^,"'\`{}()/:[\\]]*[^\\s,"'\`{}()/:[\\]]|[^\\s]`,"g"),w=/[\])"'A-Za-z0-9_$]+$/,N={in:1,return:1,typeof:1},B={};return{Ra:[],wa:B,ac:b,vb:function(k,O){function U(q,be){var Te;if(!K){var ae=f.getBindingHandler(q);if(ae&&ae.preprocess&&!(be=ae.preprocess(be,q,U)))return;(ae=B[q])&&(Te=be,0<=f.a.A(R,Te)?Te=!1:(ae=Te.match(E),Te=ae===null?!1:ae[1]?"Object("+ae[1]+")"+ae[2]:Te),ae=Te),ae&&z.push("'"+(typeof B[q]=="string"?B[q]:q)+"':function(_z){"+Te+"=_z}")}ee&&(be="function(){return "+be+" }"),J.push("'"+q+"':"+be)}O=O||{};var J=[],z=[],ee=O.valueAccessors,K=O.bindingParams,j=typeof k=="string"?b(k):k;return f.a.D(j,function(q){U(q.key||q.unknown,q.value)}),z.length&&U("_ko_property_writers","{"+z.join(",")+" }"),J.join(",")},Id:function(k,O){for(var U=0;U<k.length;U++)if(k[U].key==O)return!0;return!1},eb:function(k,O,U,J,z){k&&f.O(k)?!f.Za(k)||z&&k.v()===J||k(J):(k=O.get("_ko_property_writers"))&&k[U]&&k[U](J)}}}(),f.b("expressionRewriting",f.m),f.b("expressionRewriting.bindingRewriteValidators",f.m.Ra),f.b("expressionRewriting.parseObjectLiteral",f.m.ac),f.b("expressionRewriting.preProcessBindings",f.m.vb),f.b("expressionRewriting._twoWayBindings",f.m.wa),f.b("jsonExpressionRewriting",f.m),f.b("jsonExpressionRewriting.insertPropertyAccessorsIntoJson",f.m.vb),function(){function b(U){return U.nodeType==8&&N.test(w?U.text:U.nodeValue)}function R(U){return U.nodeType==8&&B.test(w?U.text:U.nodeValue)}function E(U,J){for(var z=U,ee=1,K=[];z=z.nextSibling;){if(R(z)&&(f.a.g.set(z,O,!0),ee--,ee===0))return K;K.push(z),b(z)&&ee++}if(!J)throw Error("Cannot find closing comment tag to match: "+U.nodeValue);return null}function I(U,J){var z=E(U,J);return z?0<z.length?z[z.length-1].nextSibling:U.nextSibling:null}var w=n&&n.createComment("test").text==="<!--test-->",N=w?/^\x3c!--\s*ko(?:\s+([\s\S]+))?\s*--\x3e$/:/^\s*ko(?:\s+([\s\S]+))?\s*$/,B=w?/^\x3c!--\s*\/ko\s*--\x3e$/:/^\s*\/ko\s*$/,k={ul:!0,ol:!0},O="__ko_matchedEndComment__";f.h={ea:{},childNodes:function(U){return b(U)?E(U):U.childNodes},Ea:function(U){if(b(U)){U=f.h.childNodes(U);for(var J=0,z=U.length;J<z;J++)f.removeNode(U[J])}else f.a.Tb(U)},va:function(U,J){if(b(U)){f.h.Ea(U);for(var z=U.nextSibling,ee=0,K=J.length;ee<K;ee++)z.parentNode.insertBefore(J[ee],z)}else f.a.va(U,J)},Vc:function(U,J){var z;b(U)?(z=U.nextSibling,U=U.parentNode):z=U.firstChild,z?J!==z&&U.insertBefore(J,z):U.appendChild(J)},Wb:function(U,J,z){z?(z=z.nextSibling,b(U)&&(U=U.parentNode),z?J!==z&&U.insertBefore(J,z):U.appendChild(J)):f.h.Vc(U,J)},firstChild:function(U){if(b(U))return!U.nextSibling||R(U.nextSibling)?null:U.nextSibling;if(U.firstChild&&R(U.firstChild))throw Error("Found invalid end comment, as the first child of "+U);return U.firstChild},nextSibling:function(U){if(b(U)&&(U=I(U)),U.nextSibling&&R(U.nextSibling)){var J=U.nextSibling;if(R(J)&&!f.a.g.get(J,O))throw Error("Found end comment without a matching opening comment, as child of "+U);return null}return U.nextSibling},Cd:b,Vd:function(U){return(U=(w?U.text:U.nodeValue).match(N))?U[1]:null},Sc:function(U){if(k[f.a.R(U)]){var J=U.firstChild;if(J)do if(J.nodeType===1){var z;z=J.firstChild;var ee=null;if(z)do if(ee)ee.push(z);else if(b(z)){var K=I(z,!0);K?z=K:ee=[z]}else R(z)&&(ee=[z]);while(z=z.nextSibling);if(z=ee)for(ee=J.nextSibling,K=0;K<z.length;K++)ee?U.insertBefore(z[K],ee):U.appendChild(z[K])}while(J=J.nextSibling)}}}}(),f.b("virtualElements",f.h),f.b("virtualElements.allowedBindings",f.h.ea),f.b("virtualElements.emptyNode",f.h.Ea),f.b("virtualElements.insertAfter",f.h.Wb),f.b("virtualElements.prepend",f.h.Vc),f.b("virtualElements.setDomNodeChildren",f.h.va),function(){f.ga=function(){this.nd={}},f.a.extend(f.ga.prototype,{nodeHasBindings:function(b){switch(b.nodeType){case 1:return b.getAttribute("data-bind")!=null||f.j.getComponentNameForNode(b);case 8:return f.h.Cd(b);default:return!1}},getBindings:function(b,R){var E=this.getBindingsString(b,R),E=E?this.parseBindingsString(E,R,b):null;return f.j.tc(E,b,R,!1)},getBindingAccessors:function(b,R){var E=this.getBindingsString(b,R),E=E?this.parseBindingsString(E,R,b,{valueAccessors:!0}):null;return f.j.tc(E,b,R,!0)},getBindingsString:function(b){switch(b.nodeType){case 1:return b.getAttribute("data-bind");case 8:return f.h.Vd(b);default:return null}},parseBindingsString:function(b,R,E,I){try{var w=this.nd,N=b+(I&&I.valueAccessors||""),B;if(!(B=w[N])){var k,O="with($context){with($data||{}){return{"+f.m.vb(b,I)+"}}}";k=new Function("$context","$element",O),B=w[N]=k}return B(R,E)}catch(U){throw U.message=`Unable to parse bindings.
  12749. Bindings value: `+b+`
  12750. Message: `+U.message,U}}}),f.ga.instance=new f.ga}(),f.b("bindingProvider",f.ga),function(){function b(ae){var xe=(ae=f.a.g.get(ae,Te))&&ae.N;xe&&(ae.N=null,xe.Tc())}function R(ae,xe,_e){this.node=ae,this.yc=xe,this.kb=[],this.H=!1,xe.N||f.a.K.za(ae,b),_e&&_e.N&&(_e.N.kb.push(ae),this.Kb=_e)}function E(ae){return function(){return ae}}function I(ae){return ae()}function w(ae){return f.a.Ga(f.u.G(ae),function(xe,_e){return function(){return ae()[_e]}})}function N(ae,xe,_e){return typeof ae=="function"?w(ae.bind(null,xe,_e)):f.a.Ga(ae,E)}function B(ae,xe){return w(this.getBindings.bind(this,ae,xe))}function k(ae,xe){var _e=f.h.firstChild(xe);if(_e){var Ve,Ie=f.ga.instance,Me=Ie.preprocessNode;if(Me){for(;Ve=_e;)_e=f.h.nextSibling(Ve),Me.call(Ie,Ve);_e=f.h.firstChild(xe)}for(;Ve=_e;)_e=f.h.nextSibling(Ve),O(ae,Ve)}f.i.ma(xe,f.i.H)}function O(ae,xe){var _e=ae,Ve=xe.nodeType===1;Ve&&f.h.Sc(xe),(Ve||f.ga.instance.nodeHasBindings(xe))&&(_e=J(xe,null,ae).bindingContextForDescendants),_e&&!q[f.a.R(xe)]&&k(_e,xe)}function U(ae){var xe=[],_e={},Ve=[];return f.a.P(ae,function Ie(Me){if(!_e[Me]){var ve=f.getBindingHandler(Me);ve&&(ve.after&&(Ve.push(Me),f.a.D(ve.after,function(ke){if(ae[ke]){if(f.a.A(Ve,ke)!==-1)throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+Ve.join(", "));Ie(ke)}}),Ve.length--),xe.push({key:Me,Mc:ve})),_e[Me]=!0}}),xe}function J(ae,xe,_e){var Ve=f.a.g.Ub(ae,Te,{}),Ie=Ve.hd;if(!xe){if(Ie)throw Error("You cannot apply bindings multiple times to the same element.");Ve.hd=!0}Ie||(Ve.context=_e),Ve.Zb||(Ve.Zb={});var Me;if(xe&&typeof xe!="function")Me=xe;else{var ve=f.ga.instance,ke=ve.getBindingAccessors||B,ct=f.$(function(){return(Me=xe?xe(_e,ae):ke.call(ve,ae,_e))&&(_e[ee]&&_e[ee](),_e[j]&&_e[j]()),Me},null,{l:ae});Me&&ct.ja()||(ct=null)}var yt=_e,ot;if(Me){var ln=function(){return f.a.Ga(ct?ct():Me,I)},vn=ct?function(Dt){return function(){return I(ct()[Dt])}}:function(Dt){return Me[Dt]};ln.get=function(Dt){return Me[Dt]&&I(vn(Dt))},ln.has=function(Dt){return Dt in Me},f.i.H in Me&&f.i.subscribe(ae,f.i.H,function(){var Dt=(0,Me[f.i.H])();if(Dt){var Nt=f.h.childNodes(ae);Nt.length&&Dt(Nt,f.Ec(Nt[0]))}}),f.i.pa in Me&&(yt=f.i.Cb(ae,_e),f.i.subscribe(ae,f.i.pa,function(){var Dt=(0,Me[f.i.pa])();Dt&&f.h.firstChild(ae)&&Dt(ae)})),Ve=U(Me),f.a.D(Ve,function(Dt){var Nt=Dt.Mc.init,pe=Dt.Mc.update,Ce=Dt.key;if(ae.nodeType===8&&!f.h.ea[Ce])throw Error("The binding '"+Ce+"' cannot be used with virtual elements");try{typeof Nt=="function"&&f.u.G(function(){var Ht=Nt(ae,vn(Ce),ln,yt.$data,yt);if(Ht&&Ht.controlsDescendantBindings){if(ot!==e)throw Error("Multiple bindings ("+ot+" and "+Ce+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");ot=Ce}}),typeof pe=="function"&&f.$(function(){pe(ae,vn(Ce),ln,yt.$data,yt)},null,{l:ae})}catch(Ht){throw Ht.message='Unable to process binding "'+Ce+": "+Me[Ce]+`"
  12751. Message: `+Ht.message,Ht}})}return Ve=ot===e,{shouldBindDescendants:Ve,bindingContextForDescendants:Ve&&yt}}function z(ae,xe){return ae&&ae instanceof f.fa?ae:new f.fa(ae,e,e,xe)}var ee=f.a.Da("_subscribable"),K=f.a.Da("_ancestorBindingInfo"),j=f.a.Da("_dataDependency");f.c={};var q={script:!0,textarea:!0,template:!0};f.getBindingHandler=function(ae){return f.c[ae]};var be={};f.fa=function(ae,xe,_e,Ve,Ie){function Me(){var vn=yt?ct():ct,Dt=f.a.f(vn);return xe?(f.a.extend(ve,xe),K in xe&&(ve[K]=xe[K])):(ve.$parents=[],ve.$root=Dt,ve.ko=f),ve[ee]=ot,ke?Dt=ve.$data:(ve.$rawData=vn,ve.$data=Dt),_e&&(ve[_e]=Dt),Ve&&Ve(ve,xe,Dt),xe&&xe[ee]&&!f.S.o().Vb(xe[ee])&&xe[ee](),ln&&(ve[j]=ln),ve.$data}var ve=this,ke=ae===be,ct=ke?e:ae,yt=typeof ct=="function"&&!f.O(ct),ot,ln=Ie&&Ie.dataDependency;Ie&&Ie.exportDependencies?Me():(ot=f.xb(Me),ot.v(),ot.ja()?ot.equalityComparer=null:ve[ee]=e)},f.fa.prototype.createChildContext=function(ae,xe,_e,Ve){if(!Ve&&xe&&typeof xe=="object"&&(Ve=xe,xe=Ve.as,_e=Ve.extend),xe&&Ve&&Ve.noChildContext){var Ie=typeof ae=="function"&&!f.O(ae);return new f.fa(be,this,null,function(Me){_e&&_e(Me),Me[xe]=Ie?ae():ae},Ve)}return new f.fa(ae,this,xe,function(Me,ve){Me.$parentContext=ve,Me.$parent=ve.$data,Me.$parents=(ve.$parents||[]).slice(0),Me.$parents.unshift(Me.$parent),_e&&_e(Me)},Ve)},f.fa.prototype.extend=function(ae,xe){return new f.fa(be,this,null,function(_e){f.a.extend(_e,typeof ae=="function"?ae(_e):ae)},xe)};var Te=f.a.g.Z();R.prototype.Tc=function(){this.Kb&&this.Kb.N&&this.Kb.N.sd(this.node)},R.prototype.sd=function(ae){f.a.Pa(this.kb,ae),!this.kb.length&&this.H&&this.Cc()},R.prototype.Cc=function(){this.H=!0,this.yc.N&&!this.kb.length&&(this.yc.N=null,f.a.K.yb(this.node,b),f.i.ma(this.node,f.i.pa),this.Tc())},f.i={H:"childrenComplete",pa:"descendantsComplete",subscribe:function(ae,xe,_e,Ve,Ie){var Me=f.a.g.Ub(ae,Te,{});return Me.Fa||(Me.Fa=new f.T),Ie&&Ie.notifyImmediately&&Me.Zb[xe]&&f.u.G(_e,Ve,[ae]),Me.Fa.subscribe(_e,Ve,xe)},ma:function(ae,xe){var _e=f.a.g.get(ae,Te);if(_e&&(_e.Zb[xe]=!0,_e.Fa&&_e.Fa.notifySubscribers(ae,xe),xe==f.i.H)){if(_e.N)_e.N.Cc();else if(_e.N===e&&_e.Fa&&_e.Fa.Wa(f.i.pa))throw Error("descendantsComplete event not supported for bindings on this node")}},Cb:function(ae,xe){var _e=f.a.g.Ub(ae,Te,{});return _e.N||(_e.N=new R(ae,_e,xe[K])),xe[K]==_e?xe:xe.extend(function(Ve){Ve[K]=_e})}},f.Td=function(ae){return(ae=f.a.g.get(ae,Te))&&ae.context},f.ib=function(ae,xe,_e){return ae.nodeType===1&&f.h.Sc(ae),J(ae,xe,z(_e))},f.ld=function(ae,xe,_e){return _e=z(_e),f.ib(ae,N(xe,_e,ae),_e)},f.Oa=function(ae,xe){xe.nodeType!==1&&xe.nodeType!==8||k(z(ae),xe)},f.vc=function(ae,xe,_e){if(!o&&t.jQuery&&(o=t.jQuery),2>arguments.length){if(xe=n.body,!xe)throw Error("ko.applyBindings: could not find document.body; has the document been loaded?")}else if(!xe||xe.nodeType!==1&&xe.nodeType!==8)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");O(z(ae,_e),xe)},f.Dc=function(ae){return!ae||ae.nodeType!==1&&ae.nodeType!==8?e:f.Td(ae)},f.Ec=function(ae){return(ae=f.Dc(ae))?ae.$data:e},f.b("bindingHandlers",f.c),f.b("bindingEvent",f.i),f.b("bindingEvent.subscribe",f.i.subscribe),f.b("bindingEvent.startPossiblyAsyncContentBinding",f.i.Cb),f.b("applyBindings",f.vc),f.b("applyBindingsToDescendants",f.Oa),f.b("applyBindingAccessorsToNode",f.ib),f.b("applyBindingsToNode",f.ld),f.b("contextFor",f.Dc),f.b("dataFor",f.Ec)}(),function(b){function R(B,k){var O=Object.prototype.hasOwnProperty.call(w,B)?w[B]:b,U;O?O.subscribe(k):(O=w[B]=new f.T,O.subscribe(k),E(B,function(J,z){var ee=!(!z||!z.synchronous);N[B]={definition:J,Gd:ee},delete w[B],U||ee?O.notifySubscribers(J):f.na.zb(function(){O.notifySubscribers(J)})}),U=!0)}function E(B,k){I("getConfig",[B],function(O){O?I("loadComponent",[B,O],function(U){k(U,O)}):k(null,null)})}function I(B,k,O,U){U||(U=f.j.loaders.slice(0));var J=U.shift();if(J){var z=J[B];if(z){var ee=!1;if(z.apply(J,k.concat(function(K){ee?O(null):K!==null?O(K):I(B,k,O,U)}))!==b&&(ee=!0,!J.suppressLoaderExceptions))throw Error("Component loaders must supply values by invoking the callback, not by returning values synchronously.")}else I(B,k,O,U)}else O(null)}var w={},N={};f.j={get:function(B,k){var O=Object.prototype.hasOwnProperty.call(N,B)?N[B]:b;O?O.Gd?f.u.G(function(){k(O.definition)}):f.na.zb(function(){k(O.definition)}):R(B,k)},Bc:function(B){delete N[B]},oc:I},f.j.loaders=[],f.b("components",f.j),f.b("components.get",f.j.get),f.b("components.clearCachedDefinition",f.j.Bc)}(),function(){function b(O,U,J,z){function ee(){--j===0&&z(K)}var K={},j=2,q=J.template;J=J.viewModel,q?w(U,q,function(be){f.j.oc("loadTemplate",[O,be],function(Te){K.template=Te,ee()})}):ee(),J?w(U,J,function(be){f.j.oc("loadViewModel",[O,be],function(Te){K[k]=Te,ee()})}):ee()}function R(O,U,J){if(typeof U=="function")J(function(ee){return new U(ee)});else if(typeof U[k]=="function")J(U[k]);else if("instance"in U){var z=U.instance;J(function(){return z})}else"viewModel"in U?R(O,U.viewModel,J):O("Unknown viewModel value: "+U)}function E(O){switch(f.a.R(O)){case"script":return f.a.ua(O.text);case"textarea":return f.a.ua(O.value);case"template":if(I(O.content))return f.a.Ca(O.content.childNodes)}return f.a.Ca(O.childNodes)}function I(O){return t.DocumentFragment?O instanceof DocumentFragment:O&&O.nodeType===11}function w(O,U,J){typeof U.require=="string"?a||t.require?(a||t.require)([U.require],function(z){z&&typeof z=="object"&&z.Xd&&z.default&&(z=z.default),J(z)}):O("Uses require, but no AMD loader is present"):J(U)}function N(O){return function(U){throw Error("Component '"+O+"': "+U)}}var B={};f.j.register=function(O,U){if(!U)throw Error("Invalid configuration for "+O);if(f.j.tb(O))throw Error("Component "+O+" is already registered");B[O]=U},f.j.tb=function(O){return Object.prototype.hasOwnProperty.call(B,O)},f.j.unregister=function(O){delete B[O],f.j.Bc(O)},f.j.Fc={getConfig:function(O,U){U(f.j.tb(O)?B[O]:null)},loadComponent:function(O,U,J){var z=N(O);w(z,U,function(ee){b(O,z,ee,J)})},loadTemplate:function(O,U,J){if(O=N(O),typeof U=="string")J(f.a.ua(U));else if(U instanceof Array)J(U);else if(I(U))J(f.a.la(U.childNodes));else if(U.element)if(U=U.element,t.HTMLElement?U instanceof HTMLElement:U&&U.tagName&&U.nodeType===1)J(E(U));else if(typeof U=="string"){var z=n.getElementById(U);z?J(E(z)):O("Cannot find element with ID "+U)}else O("Unknown element type: "+U);else O("Unknown template value: "+U)},loadViewModel:function(O,U,J){R(N(O),U,J)}};var k="createViewModel";f.b("components.register",f.j.register),f.b("components.isRegistered",f.j.tb),f.b("components.unregister",f.j.unregister),f.b("components.defaultLoader",f.j.Fc),f.j.loaders.push(f.j.Fc),f.j.dd=B}(),function(){function b(E,I){var w=E.getAttribute("params");if(w){var w=R.parseBindingsString(w,I,E,{valueAccessors:!0,bindingParams:!0}),w=f.a.Ga(w,function(k){return f.o(k,null,{l:E})}),N=f.a.Ga(w,function(k){var O=k.v();return k.ja()?f.o({read:function(){return f.a.f(k())},write:f.Za(O)&&function(U){k()(U)},l:E}):O});return Object.prototype.hasOwnProperty.call(N,"$raw")||(N.$raw=w),N}return{$raw:{}}}f.j.getComponentNameForNode=function(E){var I=f.a.R(E);if(f.j.tb(I)&&(I.indexOf("-")!=-1||""+E=="[object HTMLUnknownElement]"||8>=f.a.W&&E.tagName===I))return I},f.j.tc=function(E,I,w,N){if(I.nodeType===1){var B=f.j.getComponentNameForNode(I);if(B){if(E=E||{},E.component)throw Error('Cannot use the "component" binding on a custom element matching a component');var k={name:B,params:b(I,w)};E.component=N?function(){return k}:k}}return E};var R=new f.ga;9>f.a.W&&(f.j.register=function(E){return function(I){return E.apply(this,arguments)}}(f.j.register),n.createDocumentFragment=function(E){return function(){var I=E(),w=f.j.dd,N;for(N in w);return I}}(n.createDocumentFragment))}(),function(){function b(I,w,N){if(w=w.template,!w)throw Error("Component '"+I+"' has no template");I=f.a.Ca(w),f.h.va(N,I)}function R(I,w,N){var B=I.createViewModel;return B?B.call(I,w,N):w}var E=0;f.c.component={init:function(I,w,N,B,k){function O(){var K=U&&U.dispose;typeof K=="function"&&K.call(U),z&&z.s(),J=U=z=null}var U,J,z,ee=f.a.la(f.h.childNodes(I));return f.h.Ea(I),f.a.K.za(I,O),f.o(function(){var K=f.a.f(w()),j,q;if(typeof K=="string"?j=K:(j=f.a.f(K.name),q=f.a.f(K.params)),!j)throw Error("No component name specified");var be=f.i.Cb(I,k),Te=J=++E;f.j.get(j,function(ae){if(J===Te){if(O(),!ae)throw Error("Unknown component '"+j+"'");b(j,ae,I);var xe=R(ae,q,{element:I,templateNodes:ee});ae=be.createChildContext(xe,{extend:function(_e){_e.$component=xe,_e.$componentTemplateNodes=ee}}),xe&&xe.koDescendantsComplete&&(z=f.i.subscribe(I,f.i.pa,xe.koDescendantsComplete,xe)),U=xe,f.Oa(ae,I)}})},null,{l:I}),{controlsDescendantBindings:!0}}},f.h.ea.component=!0}();var F={class:"className",for:"htmlFor"};f.c.attr={update:function(b,R){var E=f.a.f(R())||{};f.a.P(E,function(I,w){w=f.a.f(w);var N=I.indexOf(":"),N="lookupNamespaceURI"in b&&0<N&&b.lookupNamespaceURI(I.substr(0,N)),B=w===!1||w===null||w===e;B?N?b.removeAttributeNS(N,I):b.removeAttribute(I):w=w.toString(),8>=f.a.W&&I in F?(I=F[I],B?b.removeAttribute(I):b[I]=w):B||(N?b.setAttributeNS(N,I,w):b.setAttribute(I,w)),I==="name"&&f.a.Yc(b,B?"":w)})}},function(){f.c.checked={after:["value","attr"],init:function(b,R,E){function I(){var K=b.checked,j=N();if(!f.S.Ya()&&(K||!k&&!f.S.qa())){var q=f.u.G(R);if(U){var be=J?q.v():q,Te=ee;ee=j,Te!==j?K&&(f.a.Na(be,j,!0),f.a.Na(be,Te,!1)):f.a.Na(be,j,K),J&&f.Za(q)&&q(be)}else B&&(j===e?j=K:K||(j=e)),f.m.eb(q,E,"checked",j,!0)}}function w(){var K=f.a.f(R()),j=N();U?(b.checked=0<=f.a.A(K,j),ee=j):b.checked=B&&j===e?!!K:N()===K}var N=f.xb(function(){if(E.has("checkedValue"))return f.a.f(E.get("checkedValue"));if(z)return E.has("value")?f.a.f(E.get("value")):b.value}),B=b.type=="checkbox",k=b.type=="radio";if(B||k){var O=R(),U=B&&f.a.f(O)instanceof Array,J=!(U&&O.push&&O.splice),z=k||U,ee=U?N():e;k&&!b.name&&f.c.uniqueName.init(b,function(){return!0}),f.o(I,null,{l:b}),f.a.B(b,"click",I),f.o(w,null,{l:b}),O=e}}},f.m.wa.checked=!0,f.c.checkedValue={update:function(b,R){b.value=f.a.f(R())}}}(),f.c.class={update:function(b,R){var E=f.a.Db(f.a.f(R()));f.a.Eb(b,b.__ko__cssValue,!1),b.__ko__cssValue=E,f.a.Eb(b,E,!0)}},f.c.css={update:function(b,R){var E=f.a.f(R());E!==null&&typeof E=="object"?f.a.P(E,function(I,w){w=f.a.f(w),f.a.Eb(b,I,w)}):f.c.class.update(b,R)}},f.c.enable={update:function(b,R){var E=f.a.f(R());E&&b.disabled?b.removeAttribute("disabled"):E||b.disabled||(b.disabled=!0)}},f.c.disable={update:function(b,R){f.c.enable.update(b,function(){return!f.a.f(R())})}},f.c.event={init:function(b,R,E,I,w){var N=R()||{};f.a.P(N,function(B){typeof B=="string"&&f.a.B(b,B,function(k){var O,U=R()[B];if(U){try{var J=f.a.la(arguments);I=w.$data,J.unshift(I),O=U.apply(I,J)}finally{O!==!0&&(k.preventDefault?k.preventDefault():k.returnValue=!1)}E.get(B+"Bubble")===!1&&(k.cancelBubble=!0,k.stopPropagation&&k.stopPropagation())}})})}},f.c.foreach={Rc:function(b){return function(){var R=b(),E=f.a.bc(R);return!E||typeof E.length=="number"?{foreach:R,templateEngine:f.ba.Ma}:(f.a.f(R),{foreach:E.data,as:E.as,noChildContext:E.noChildContext,includeDestroyed:E.includeDestroyed,afterAdd:E.afterAdd,beforeRemove:E.beforeRemove,afterRender:E.afterRender,beforeMove:E.beforeMove,afterMove:E.afterMove,templateEngine:f.ba.Ma})}},init:function(b,R){return f.c.template.init(b,f.c.foreach.Rc(R))},update:function(b,R,E,I,w){return f.c.template.update(b,f.c.foreach.Rc(R),E,I,w)}},f.m.Ra.foreach=!1,f.h.ea.foreach=!0,f.c.hasfocus={init:function(b,R,E){function I(B){b.__ko_hasfocusUpdating=!0;var k=b.ownerDocument;if("activeElement"in k){var O;try{O=k.activeElement}catch{O=k.body}B=O===b}k=R(),f.m.eb(k,E,"hasfocus",B,!0),b.__ko_hasfocusLastValue=B,b.__ko_hasfocusUpdating=!1}var w=I.bind(null,!0),N=I.bind(null,!1);f.a.B(b,"focus",w),f.a.B(b,"focusin",w),f.a.B(b,"blur",N),f.a.B(b,"focusout",N),b.__ko_hasfocusLastValue=!1},update:function(b,R){var E=!!f.a.f(R());b.__ko_hasfocusUpdating||b.__ko_hasfocusLastValue===E||(E?b.focus():b.blur(),!E&&b.__ko_hasfocusLastValue&&b.ownerDocument.body.focus(),f.u.G(f.a.Fb,null,[b,E?"focusin":"focusout"]))}},f.m.wa.hasfocus=!0,f.c.hasFocus=f.c.hasfocus,f.m.wa.hasFocus="hasfocus",f.c.html={init:function(){return{controlsDescendantBindings:!0}},update:function(b,R){f.a.fc(b,R())}},function(){function b(R,E,I){f.c[R]={init:function(w,N,B,k,O){var U,J,z={},ee,K,j;if(E){k=B.get("as");var q=B.get("noChildContext");j=!(k&&q),z={as:k,noChildContext:q,exportDependencies:j}}return K=(ee=B.get("completeOn")=="render")||B.has(f.i.pa),f.o(function(){var be=f.a.f(N()),Te=!I!=!be,ae=!J,xe;(j||Te!==U)&&(K&&(O=f.i.Cb(w,O)),Te&&((!E||j)&&(z.dataDependency=f.S.o()),xe=E?O.createChildContext(typeof be=="function"?be:N,z):f.S.qa()?O.extend(null,z):O),ae&&f.S.qa()&&(J=f.a.Ca(f.h.childNodes(w),!0)),Te?(ae||f.h.va(w,f.a.Ca(J)),f.Oa(xe,w)):(f.h.Ea(w),ee||f.i.ma(w,f.i.H)),U=Te)},null,{l:w}),{controlsDescendantBindings:!0}}},f.m.Ra[R]=!1,f.h.ea[R]=!0}b("if"),b("ifnot",!1,!0),b("with",!0)}(),f.c.let={init:function(b,R,E,I,w){return R=w.extend(R),f.Oa(R,b),{controlsDescendantBindings:!0}}},f.h.ea.let=!0;var M={};f.c.options={init:function(b){if(f.a.R(b)!=="select")throw Error("options binding applies only to SELECT elements");for(;0<b.length;)b.remove(0);return{controlsDescendantBindings:!0}},update:function(b,R,E){function I(){return f.a.jb(b.options,function(q){return q.selected})}function w(q,be,Te){var ae=typeof be;return ae=="function"?be(q):ae=="string"?q[be]:Te}function N(q,be){if(K&&U)f.i.ma(b,f.i.H);else if(ee.length){var Te=0<=f.a.A(ee,f.w.M(be[0]));f.a.Zc(be[0],Te),K&&!Te&&f.u.G(f.a.Fb,null,[b,"change"])}}var B=b.multiple,k=b.length!=0&&B?b.scrollTop:null,O=f.a.f(R()),U=E.get("valueAllowUnset")&&E.has("value"),J=E.get("optionsIncludeDestroyed");R={};var z,ee=[];U||(B?ee=f.a.Mb(I(),f.w.M):0<=b.selectedIndex&&ee.push(f.w.M(b.options[b.selectedIndex]))),O&&(typeof O.length>"u"&&(O=[O]),z=f.a.jb(O,function(q){return J||q===e||q===null||!f.a.f(q._destroy)}),E.has("optionsCaption")&&(O=f.a.f(E.get("optionsCaption")),O!==null&&O!==e&&z.unshift(M)));var K=!1;if(R.beforeRemove=function(q){b.removeChild(q)},O=N,E.has("optionsAfterRender")&&typeof E.get("optionsAfterRender")=="function"&&(O=function(q,be){N(0,be),f.u.G(E.get("optionsAfterRender"),null,[be[0],q!==M?q:e])}),f.a.ec(b,z,function(q,be,Te){return Te.length&&(ee=!U&&Te[0].selected?[f.w.M(Te[0])]:[],K=!0),be=b.ownerDocument.createElement("option"),q===M?(f.a.Bb(be,E.get("optionsCaption")),f.w.cb(be,e)):(Te=w(q,E.get("optionsValue"),q),f.w.cb(be,f.a.f(Te)),q=w(q,E.get("optionsText"),Te),f.a.Bb(be,q)),[be]},R,O),!U){var j;B?j=ee.length&&I().length<ee.length:j=ee.length&&0<=b.selectedIndex?f.w.M(b.options[b.selectedIndex])!==ee[0]:ee.length||0<=b.selectedIndex,j&&f.u.G(f.a.Fb,null,[b,"change"])}(U||f.S.Ya())&&f.i.ma(b,f.i.H),f.a.wd(b),k&&20<Math.abs(k-b.scrollTop)&&(b.scrollTop=k)}},f.c.options.$b=f.a.g.Z(),f.c.selectedOptions={init:function(b,R,E){function I(){var B=R(),k=[];f.a.D(b.getElementsByTagName("option"),function(O){O.selected&&k.push(f.w.M(O))}),f.m.eb(B,E,"selectedOptions",k)}function w(){var B=f.a.f(R()),k=b.scrollTop;B&&typeof B.length=="number"&&f.a.D(b.getElementsByTagName("option"),function(O){var U=0<=f.a.A(B,f.w.M(O));O.selected!=U&&f.a.Zc(O,U)}),b.scrollTop=k}if(f.a.R(b)!="select")throw Error("selectedOptions binding applies only to SELECT elements");var N;f.i.subscribe(b,f.i.H,function(){N?I():(f.a.B(b,"change",I),N=f.o(w,null,{l:b}))},null,{notifyImmediately:!0})},update:function(){}},f.m.wa.selectedOptions=!0,f.c.style={update:function(b,R){var E=f.a.f(R()||{});f.a.P(E,function(I,w){if(w=f.a.f(w),(w===null||w===e||w===!1)&&(w=""),o)o(b).css(I,w);else if(/^--/.test(I))b.style.setProperty(I,w);else{I=I.replace(/-(\w)/g,function(B,k){return k.toUpperCase()});var N=b.style[I];b.style[I]=w,w===N||b.style[I]!=N||isNaN(w)||(b.style[I]=w+"px")}})}},f.c.submit={init:function(b,R,E,I,w){if(typeof R()!="function")throw Error("The value for a submit binding must be a function");f.a.B(b,"submit",function(N){var B,k=R();try{B=k.call(w.$data,b)}finally{B!==!0&&(N.preventDefault?N.preventDefault():N.returnValue=!1)}})}},f.c.text={init:function(){return{controlsDescendantBindings:!0}},update:function(b,R){f.a.Bb(b,R())}},f.h.ea.text=!0,function(){if(t&&t.navigator){var b=function(z){if(z)return parseFloat(z[1])},R=t.navigator.userAgent,E,I,w,N,B;(E=t.opera&&t.opera.version&&parseInt(t.opera.version()))||(B=b(R.match(/Edge\/([^ ]+)$/)))||b(R.match(/Chrome\/([^ ]+)/))||(I=b(R.match(/Version\/([^ ]+) Safari/)))||(w=b(R.match(/Firefox\/([^ ]+)/)))||(N=f.a.W||b(R.match(/MSIE ([^ ]+)/)))||(N=b(R.match(/rv:([^ )]+)/)))}if(8<=N&&10>N)var k=f.a.g.Z(),O=f.a.g.Z(),U=function(z){var ee=this.activeElement;(ee=ee&&f.a.g.get(ee,O))&&ee(z)},J=function(z,ee){var K=z.ownerDocument;f.a.g.get(K,k)||(f.a.g.set(K,k,!0),f.a.B(K,"selectionchange",U)),f.a.g.set(z,O,ee)};f.c.textInput={init:function(z,ee,K){function j(Me,ve){f.a.B(z,Me,ve)}function q(){var Me=f.a.f(ee());(Me===null||Me===e)&&(Me=""),_e!==e&&Me===_e?f.a.setTimeout(q,4):z.value!==Me&&(Ie=!0,z.value=Me,Ie=!1,ae=z.value)}function be(){xe||(_e=z.value,xe=f.a.setTimeout(Te,4))}function Te(){clearTimeout(xe),_e=xe=e;var Me=z.value;ae!==Me&&(ae=Me,f.m.eb(ee(),K,"textInput",Me))}var ae=z.value,xe,_e,Ve=f.a.W==9?be:Te,Ie=!1;N&&j("keypress",Te),11>N&&j("propertychange",function(Me){Ie||Me.propertyName!=="value"||Ve(Me)}),N==8&&(j("keyup",Te),j("keydown",Te)),J&&(J(z,Ve),j("dragend",be)),(!N||9<=N)&&j("input",Ve),5>I&&f.a.R(z)==="textarea"?(j("keydown",be),j("paste",be),j("cut",be)):11>E?j("keydown",be):4>w?(j("DOMAutoComplete",Te),j("dragdrop",Te),j("drop",Te)):B&&z.type==="number"&&j("keydown",be),j("change",Te),j("blur",Te),f.o(q,null,{l:z})}},f.m.wa.textInput=!0,f.c.textinput={preprocess:function(z,ee,K){K("textInput",z)}}}(),f.c.uniqueName={init:function(b,R){if(R()){var E="ko_unique_"+ ++f.c.uniqueName.rd;f.a.Yc(b,E)}}},f.c.uniqueName.rd=0,f.c.using={init:function(b,R,E,I,w){var N;return E.has("as")&&(N={as:E.get("as"),noChildContext:E.get("noChildContext")}),R=w.createChildContext(R,N),f.Oa(R,b),{controlsDescendantBindings:!0}}},f.h.ea.using=!0,f.c.value={init:function(b,R,E){var I=f.a.R(b),w=I=="input";if(!w||b.type!="checkbox"&&b.type!="radio"){var N=[],B=E.get("valueUpdate"),k=!1,O=null;B&&(typeof B=="string"?N=[B]:N=f.a.wc(B),f.a.Pa(N,"change"));var U=function(){O=null,k=!1;var ee=R(),K=f.w.M(b);f.m.eb(ee,E,"value",K)};!f.a.W||!w||b.type!="text"||b.autocomplete=="off"||b.form&&b.form.autocomplete=="off"||f.a.A(N,"propertychange")!=-1||(f.a.B(b,"propertychange",function(){k=!0}),f.a.B(b,"focus",function(){k=!1}),f.a.B(b,"blur",function(){k&&U()})),f.a.D(N,function(ee){var K=U;f.a.Ud(ee,"after")&&(K=function(){O=f.w.M(b),f.a.setTimeout(U,0)},ee=ee.substring(5)),f.a.B(b,ee,K)});var J;if(J=w&&b.type=="file"?function(){var ee=f.a.f(R());ee===null||ee===e||ee===""?b.value="":f.u.G(U)}:function(){var ee=f.a.f(R()),K=f.w.M(b);O!==null&&ee===O?f.a.setTimeout(J,0):(ee!==K||K===e)&&(I==="select"?(K=E.get("valueAllowUnset"),f.w.cb(b,ee,K),K||ee===f.w.M(b)||f.u.G(U)):f.w.cb(b,ee))},I==="select"){var z;f.i.subscribe(b,f.i.H,function(){z?E.get("valueAllowUnset")?J():U():(f.a.B(b,"change",U),z=f.o(J,null,{l:b}))},null,{notifyImmediately:!0})}else f.a.B(b,"change",U),f.o(J,null,{l:b})}else f.ib(b,{checkedValue:R})},update:function(){}},f.m.wa.value=!0,f.c.visible={update:function(b,R){var E=f.a.f(R()),I=b.style.display!="none";E&&!I?b.style.display="":!E&&I&&(b.style.display="none")}},f.c.hidden={update:function(b,R){f.c.visible.update(b,function(){return!f.a.f(R())})}},function(b){f.c[b]={init:function(R,E,I,w,N){return f.c.event.init.call(this,R,function(){var B={};return B[b]=E(),B},I,w,N)}}}("click"),f.ca=function(){},f.ca.prototype.renderTemplateSource=function(){throw Error("Override renderTemplateSource")},f.ca.prototype.createJavaScriptEvaluatorBlock=function(){throw Error("Override createJavaScriptEvaluatorBlock")},f.ca.prototype.makeTemplateSource=function(b,R){if(typeof b=="string"){R=R||n;var E=R.getElementById(b);if(!E)throw Error("Cannot find template with ID "+b);return new f.C.F(E)}if(b.nodeType==1||b.nodeType==8)return new f.C.ia(b);throw Error("Unknown template type: "+b)},f.ca.prototype.renderTemplate=function(b,R,E,I){return b=this.makeTemplateSource(b,I),this.renderTemplateSource(b,R,E,I)},f.ca.prototype.isTemplateRewritten=function(b,R){return this.allowTemplateRewriting===!1?!0:this.makeTemplateSource(b,R).data("isRewritten")},f.ca.prototype.rewriteTemplate=function(b,R,E){b=this.makeTemplateSource(b,E),R=R(b.text()),b.text(R),b.data("isRewritten",!0)},f.b("templateEngine",f.ca),f.kc=function(){function b(I,w,N,B){I=f.m.ac(I);for(var k=f.m.Ra,O=0;O<I.length;O++){var U=I[O].key;if(Object.prototype.hasOwnProperty.call(k,U)){var J=k[U];if(typeof J=="function"){if(U=J(I[O].value))throw Error(U)}else if(!J)throw Error("This template engine does not support the '"+U+"' binding within its templates")}}return N="ko.__tr_ambtns(function($context,$element){return(function(){return{ "+f.m.vb(I,{valueAccessors:!0})+" } })()},'"+N.toLowerCase()+"')",B.createJavaScriptEvaluatorBlock(N)+w}var R=/(<([a-z]+\d*)(?:\s+(?!data-bind\s*=\s*)[a-z0-9\-]+(?:=(?:\"[^\"]*\"|\'[^\']*\'|[^>]*))?)*\s+)data-bind\s*=\s*(["'])([\s\S]*?)\3/gi,E=/\x3c!--\s*ko\b\s*([\s\S]*?)\s*--\x3e/g;return{xd:function(I,w,N){w.isTemplateRewritten(I,N)||w.rewriteTemplate(I,function(B){return f.kc.Ld(B,w)},N)},Ld:function(I,w){return I.replace(R,function(N,B,k,O,U){return b(U,B,k,w)}).replace(E,function(N,B){return b(B,"<!-- ko -->","#comment",w)})},md:function(I,w){return f.aa.Xb(function(N,B){var k=N.nextSibling;k&&k.nodeName.toLowerCase()===w&&f.ib(k,I,B)})}}}(),f.b("__tr_ambtns",f.kc.md),function(){f.C={},f.C.F=function(E){if(this.F=E){var I=f.a.R(E);this.ab=I==="script"?1:I==="textarea"?2:I=="template"&&E.content&&E.content.nodeType===11?3:4}},f.C.F.prototype.text=function(){var E=this.ab===1?"text":this.ab===2?"value":"innerHTML";if(arguments.length==0)return this.F[E];var I=arguments[0];E==="innerHTML"?f.a.fc(this.F,I):this.F[E]=I};var b=f.a.g.Z()+"_";f.C.F.prototype.data=function(E){if(arguments.length===1)return f.a.g.get(this.F,b+E);f.a.g.set(this.F,b+E,arguments[1])};var R=f.a.g.Z();f.C.F.prototype.nodes=function(){var E=this.F;if(arguments.length==0){var I=f.a.g.get(E,R)||{},w=I.lb||(this.ab===3?E.content:this.ab===4?E:e);if(!w||I.jd){var N=this.text();N&&N!==I.bb&&(w=f.a.Md(N,E.ownerDocument),f.a.g.set(E,R,{lb:w,bb:N,jd:!0}))}return w}I=arguments[0],this.ab!==e&&this.text(""),f.a.g.set(E,R,{lb:I})},f.C.ia=function(E){this.F=E},f.C.ia.prototype=new f.C.F,f.C.ia.prototype.constructor=f.C.ia,f.C.ia.prototype.text=function(){if(arguments.length==0){var E=f.a.g.get(this.F,R)||{};return E.bb===e&&E.lb&&(E.bb=E.lb.innerHTML),E.bb}f.a.g.set(this.F,R,{bb:arguments[0]})},f.b("templateSources",f.C),f.b("templateSources.domElement",f.C.F),f.b("templateSources.anonymousTemplate",f.C.ia)}(),function(){function b(O,U,J){var z;for(U=f.h.nextSibling(U);O&&(z=O)!==U;)O=f.h.nextSibling(z),J(z,O)}function R(O,U){if(O.length){var J=O[0],z=O[O.length-1],ee=J.parentNode,K=f.ga.instance,j=K.preprocessNode;if(j){if(b(J,z,function(q,be){var Te=q.previousSibling,ae=j.call(K,q);ae&&(q===J&&(J=ae[0]||be),q===z&&(z=ae[ae.length-1]||Te))}),O.length=0,!J)return;J===z?O.push(J):(O.push(J,z),f.a.Ua(O,ee))}b(J,z,function(q){q.nodeType!==1&&q.nodeType!==8||f.vc(U,q)}),b(J,z,function(q){q.nodeType!==1&&q.nodeType!==8||f.aa.cd(q,[U])}),f.a.Ua(O,ee)}}function E(O){return O.nodeType?O:0<O.length?O[0]:null}function I(O,U,J,z,ee){ee=ee||{};var K=(O&&E(O)||J||{}).ownerDocument,j=ee.templateEngine||N;if(f.kc.xd(J,j,K),J=j.renderTemplate(J,z,ee,K),typeof J.length!="number"||0<J.length&&typeof J[0].nodeType!="number")throw Error("Template engine must return an array of DOM nodes");switch(K=!1,U){case"replaceChildren":f.h.va(O,J),K=!0;break;case"replaceNode":f.a.Xc(O,J),K=!0;break;case"ignoreTargetNode":break;default:throw Error("Unknown renderMode: "+U)}return K&&(R(J,z),ee.afterRender&&f.u.G(ee.afterRender,null,[J,z[ee.as||"$data"]]),U=="replaceChildren"&&f.i.ma(O,f.i.H)),J}function w(O,U,J){return f.O(O)?O():typeof O=="function"?O(U,J):O}var N;f.gc=function(O){if(O!=e&&!(O instanceof f.ca))throw Error("templateEngine must inherit from ko.templateEngine");N=O},f.dc=function(O,U,J,z,ee){if(J=J||{},(J.templateEngine||N)==e)throw Error("Set a template engine before calling renderTemplate");if(ee=ee||"replaceChildren",z){var K=E(z);return f.$(function(){var q=U&&U instanceof f.fa?U:new f.fa(U,null,null,null,{exportDependencies:!0}),j=w(O,q.$data,q),q=I(z,ee,j,q,J);ee=="replaceNode"&&(z=q,K=E(z))},null,{Sa:function(){return!K||!f.a.Sb(K)},l:K&&ee=="replaceNode"?K.parentNode:K})}return f.aa.Xb(function(j){f.dc(O,U,J,j,"replaceNode")})},f.Qd=function(O,U,J,z,ee){function K(_e,Ve){f.u.G(f.a.ec,null,[z,_e,q,J,j,Ve]),f.i.ma(z,f.i.H)}function j(_e,Ve){R(Ve,be),J.afterRender&&J.afterRender(Ve,_e),be=null}function q(_e,Ve){be=ee.createChildContext(_e,{as:Te,noChildContext:J.noChildContext,extend:function(Me){Me.$index=Ve,Te&&(Me[Te+"Index"]=Ve)}});var Ie=w(O,_e,be);return I(z,"ignoreTargetNode",Ie,be,J)}var be,Te=J.as,ae=J.includeDestroyed===!1||f.options.foreachHidesDestroyed&&!J.includeDestroyed;if(ae||J.beforeRemove||!f.Pc(U))return f.$(function(){var _e=f.a.f(U)||[];typeof _e.length>"u"&&(_e=[_e]),ae&&(_e=f.a.jb(_e,function(Ve){return Ve===e||Ve===null||!f.a.f(Ve._destroy)})),K(_e)},null,{l:z});K(U.v());var xe=U.subscribe(function(_e){K(U(),_e)},null,"arrayChange");return xe.l(z),xe};var B=f.a.g.Z(),k=f.a.g.Z();f.c.template={init:function(O,U){var J=f.a.f(U());if(typeof J=="string"||"name"in J)f.h.Ea(O);else if("nodes"in J){if(J=J.nodes||[],f.O(J))throw Error('The "nodes" option must be a plain, non-observable array.');var z=J[0]&&J[0].parentNode;z&&f.a.g.get(z,k)||(z=f.a.Yb(J),f.a.g.set(z,k,!0)),new f.C.ia(O).nodes(z)}else if(J=f.h.childNodes(O),0<J.length)z=f.a.Yb(J),new f.C.ia(O).nodes(z);else throw Error("Anonymous template defined, but no template content was provided");return{controlsDescendantBindings:!0}},update:function(O,U,J,z,ee){var K=U();U=f.a.f(K),J=!0,z=null,typeof U=="string"?U={}:(K="name"in U?U.name:O,"if"in U&&(J=f.a.f(U.if)),J&&"ifnot"in U&&(J=!f.a.f(U.ifnot)),J&&!K&&(J=!1)),"foreach"in U?z=f.Qd(K,J&&U.foreach||[],U,O,ee):J?(J=ee,"data"in U&&(J=ee.createChildContext(U.data,{as:U.as,noChildContext:U.noChildContext,exportDependencies:!0})),z=f.dc(K,J,U,O)):f.h.Ea(O),ee=z,(U=f.a.g.get(O,B))&&typeof U.s=="function"&&U.s(),f.a.g.set(O,B,!ee||ee.ja&&!ee.ja()?e:ee)}},f.m.Ra.template=function(O){return O=f.m.ac(O),O.length==1&&O[0].unknown||f.m.Id(O,"name")?null:"This template engine does not support anonymous templates nested within its templates"},f.h.ea.template=!0}(),f.b("setTemplateEngine",f.gc),f.b("renderTemplate",f.dc),f.a.Kc=function(b,R,E){if(b.length&&R.length){var I,w,N,B,k;for(I=w=0;(!E||I<E)&&(B=b[w]);++w){for(N=0;k=R[N];++N)if(B.value===k.value){B.moved=k.index,k.moved=B.index,R.splice(N,1),I=N=0;break}I+=N}}},f.a.Pb=function(){function b(R,E,I,w,N){var B=Math.min,k=Math.max,O=[],U,J=R.length,z,ee=E.length,K=ee-J||1,j=J+ee+1,q,be,Te;for(U=0;U<=J;U++)for(be=q,O.push(q=[]),Te=B(ee,U+K),z=k(0,U-1);z<=Te;z++)q[z]=z?U?R[U-1]===E[z-1]?be[z-1]:B(be[z]||j,q[z-1]||j)+1:z+1:U+1;for(B=[],k=[],K=[],U=J,z=ee;U||z;)ee=O[U][z]-1,z&&ee===O[U][z-1]?k.push(B[B.length]={status:I,value:E[--z],index:z}):U&&ee===O[U-1][z]?K.push(B[B.length]={status:w,value:R[--U],index:U}):(--z,--U,N.sparse||B.push({status:"retained",value:E[z]}));return f.a.Kc(K,k,!N.dontLimitMoves&&10*J),B.reverse()}return function(R,E,I){return I=typeof I=="boolean"?{dontLimitMoves:I}:I||{},R=R||[],E=E||[],R.length<E.length?b(R,E,"added","deleted",I):b(E,R,"deleted","added",I)}}(),f.b("utils.compareArrays",f.a.Pb),function(){function b(I,w,N,B,k){var O=[],U=f.$(function(){var J=w(N,k,f.a.Ua(O,I))||[];0<O.length&&(f.a.Xc(O,J),B&&f.u.G(B,null,[N,J,k])),O.length=0,f.a.Nb(O,J)},null,{l:I,Sa:function(){return!f.a.kd(O)}});return{Y:O,$:U.ja()?U:e}}var R=f.a.g.Z(),E=f.a.g.Z();f.a.ec=function(I,w,N,B,k,O){function U(Dt){Ie={Aa:Dt,pb:f.ta(be++)},j.push(Ie),K||Ve.push(Ie)}function J(Dt){Ie=ee[Dt],be!==Ie.pb.v()&&_e.push(Ie),Ie.pb(be++),f.a.Ua(Ie.Y,I),j.push(Ie)}function z(Dt,Nt){if(Dt)for(var pe=0,Ce=Nt.length;pe<Ce;pe++)f.a.D(Nt[pe].Y,function(Ht){Dt(Ht,pe,Nt[pe].Aa)})}w=w||[],typeof w.length>"u"&&(w=[w]),B=B||{};var ee=f.a.g.get(I,R),K=!ee,j=[],q=0,be=0,Te=[],ae=[],xe=[],_e=[],Ve=[],Ie,Me=0;if(K)f.a.D(w,U);else{if(!O||ee&&ee._countWaitingForRemove){var ve=f.a.Mb(ee,function(Dt){return Dt.Aa});O=f.a.Pb(ve,w,{dontLimitMoves:B.dontLimitMoves,sparse:!0})}for(var ve=0,ke,ct,yt;ke=O[ve];ve++)switch(ct=ke.moved,yt=ke.index,ke.status){case"deleted":for(;q<yt;)J(q++);ct===e&&(Ie=ee[q],Ie.$&&(Ie.$.s(),Ie.$=e),f.a.Ua(Ie.Y,I).length&&(B.beforeRemove&&(j.push(Ie),Me++,Ie.Aa===E?Ie=null:xe.push(Ie)),Ie&&Te.push.apply(Te,Ie.Y))),q++;break;case"added":for(;be<yt;)J(q++);ct!==e?(ae.push(j.length),J(ct)):U(ke.value)}for(;be<w.length;)J(q++);j._countWaitingForRemove=Me}f.a.g.set(I,R,j),z(B.beforeMove,_e),f.a.D(Te,B.beforeRemove?f.oa:f.removeNode);var ot,ln,vn;try{vn=I.ownerDocument.activeElement}catch{}if(ae.length)for(;(ve=ae.shift())!=e;){for(Ie=j[ve],ot=e;ve;)if((ln=j[--ve].Y)&&ln.length){ot=ln[ln.length-1];break}for(w=0;q=Ie.Y[w];ot=q,w++)f.h.Wb(I,q,ot)}for(ve=0;Ie=j[ve];ve++){for(Ie.Y||f.a.extend(Ie,b(I,N,Ie.Aa,k,Ie.pb)),w=0;q=Ie.Y[w];ot=q,w++)f.h.Wb(I,q,ot);!Ie.Ed&&k&&(k(Ie.Aa,Ie.Y,Ie.pb),Ie.Ed=!0,ot=Ie.Y[Ie.Y.length-1])}for(vn&&I.ownerDocument.activeElement!=vn&&vn.focus(),z(B.beforeRemove,xe),ve=0;ve<xe.length;++ve)xe[ve].Aa=E;z(B.afterMove,_e),z(B.afterAdd,Ve)}}(),f.b("utils.setDomNodeChildrenFromArrayMapping",f.a.ec),f.ba=function(){this.allowTemplateRewriting=!1},f.ba.prototype=new f.ca,f.ba.prototype.constructor=f.ba,f.ba.prototype.renderTemplateSource=function(b,R,E,I){return(R=!(9>f.a.W)&&b.nodes?b.nodes():null)?f.a.la(R.cloneNode(!0).childNodes):(b=b.text(),f.a.ua(b,I))},f.ba.Ma=new f.ba,f.gc(f.ba.Ma),f.b("nativeTemplateEngine",f.ba),function(){f.$a=function(){var R=this.Hd=function(){if(!o||!o.tmpl)return 0;try{if(0<=o.tmpl.tag.tmpl.open.toString().indexOf("__"))return 2}catch{}return 1}();this.renderTemplateSource=function(E,I,w,N){if(N=N||n,w=w||{},2>R)throw Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.");var B=E.data("precompiled");return B||(B=E.text()||"",B=o.template(null,"{{ko_with $item.koBindingContext}}"+B+"{{/ko_with}}"),E.data("precompiled",B)),E=[I.$data],I=o.extend({koBindingContext:I},w.templateOptions),I=o.tmpl(B,E,I),I.appendTo(N.createElement("div")),o.fragments={},I},this.createJavaScriptEvaluatorBlock=function(E){return"{{ko_code ((function() { return "+E+" })()) }}"},this.addTemplate=function(E,I){n.write("<script type='text/html' id='"+E+"'>"+I+"<\/script>")},0<R&&(o.tmpl.tag.ko_code={open:"__.push($1 || '');"},o.tmpl.tag.ko_with={open:"with($1) {",close:"} "})},f.$a.prototype=new f.ca,f.$a.prototype.constructor=f.$a;var b=new f.$a;0<b.Hd&&f.gc(b),f.b("jqueryTmplTemplateEngine",f.$a)}()})})()})()})();var $bt=ko;typeof window<"u"?(ko=window.ko,typeof s9<"u"?window.ko=s9:delete window.ko):(ko=global.ko,typeof s9<"u"?global.ko=s9:delete global.ko);var MT=$bt;var Juo=T(S(),1);/**
  12752. * @license
  12753. * Knockout ES5 plugin - https://github.com/SteveSanderson/knockout-es5
  12754. * Copyright (c) Steve Sanderson
  12755. * MIT license
  12756. */var jj="__knockoutObservables",qj="__knockoutSubscribable";function Ixe(e,t){if(!e)throw new Error("When calling ko.track, you must pass an object as the first parameter.");var n=this,i=Wxe(e,!0);return t=t||Object.getOwnPropertyNames(e),t.forEach(function(o){if(!(o===jj||o===qj)&&!(o in i)){var r=e[o],s=r instanceof Array,a=n.isObservable(r)?r:s?n.observableArray(r):n.observable(r);Object.defineProperty(e,o,{configurable:!0,enumerable:!0,get:a,set:n.isWriteableObservable(a)?a:void 0}),i[o]=a,s&&tyt(n,a)}}),e}function Wxe(e,t){var n=e[jj];return!n&&t&&(n={},Object.defineProperty(e,jj,{value:n})),n}function eyt(e,t,n){var i=this,o={owner:e,deferEvaluation:!0};if(typeof n=="function")o.read=n;else{if("value"in n)throw new Error('For ko.defineProperty, you must not specify a "value" for the property. You must provide a "get" function.');if(typeof n.get!="function")throw new Error('For ko.defineProperty, the third parameter must be either an evaluator function, or an options object containing a function called "get".');o.read=n.get,o.write=n.set}return e[t]=i.computed(o),Ixe.call(i,e,[t]),e}function tyt(e,t){var n=null;e.computed(function(){n&&(n.dispose(),n=null);var i=t();i instanceof Array&&(n=nyt(e,t,i))})}function nyt(e,t,n){var i=iyt(e,n);return i.subscribe(t)}function iyt(e,t){var n=t[qj];if(!n){n=new e.subscribable,Object.defineProperty(t,qj,{value:n});var i={};oyt(t,n,i),ryt(e,t,n,i)}return n}function oyt(e,t,n){["pop","push","reverse","shift","sort","splice","unshift"].forEach(function(i){var o=e[i];e[i]=function(){var r=o.apply(this,arguments);return n.pause!==!0&&t.notifySubscribers(this),r}})}function ryt(e,t,n,i){["remove","removeAll","destroy","destroyAll","replace"].forEach(function(o){Object.defineProperty(t,o,{enumerable:!1,value:function(){var r;i.pause=!0;try{r=e.observableArray.fn[o].apply(e.observableArray(t),arguments)}finally{i.pause=!1}return n.notifySubscribers(t),r}})})}function Pxe(e,t){if(!e)return null;var n=Wxe(e,!1);return n&&n[t]||null}function syt(e,t){var n=Pxe(e,t);n&&n.valueHasMutated()}function ayt(e){e.track=Ixe,e.getObservable=Pxe,e.valueHasMutated=syt,e.defineProperty=eyt}var a9={attachToKo:ayt};var juo=T(S(),1),vxe="http://www.w3.org/2000/svg",wxe="cesium-svgPath-svg",cyt={register:function(e){e.bindingHandlers.cesiumSvgPath={init:function(t,n){let i=document.createElementNS(vxe,"svg:svg");i.setAttribute("class",wxe);let o=document.createElementNS(vxe,"path");return i.appendChild(o),e.virtualElements.setDomNodeChildren(t,[i]),e.computed({read:function(){let r=e.unwrap(n());o.setAttribute("d",e.unwrap(r.path));let s=e.unwrap(r.width),a=e.unwrap(r.height);i.setAttribute("width",s),i.setAttribute("height",a),i.setAttribute("viewBox",`0 0 ${s} ${a}`),r.css&&i.setAttribute("class",`${wxe} ${e.unwrap(r.css)}`)},disposeWhenNodeIsRemoved:t}),{controlsDescendantBindings:!0}}},e.virtualElements.allowedBindings.cesiumSvgPath=!0}},c9=cyt;a9.attachToKo(MT);c9.register(MT);var Se=MT;function l9(e){d(e)||(e=new km),this._clock=e,this._eventHelper=new Cr,this._eventHelper.add(e.onTick,this.synchronize,this),this.systemTime=Se.observable(te.now()),this.systemTime.equalityComparer=te.equals,this.startTime=Se.observable(e.startTime),this.startTime.equalityComparer=te.equals,this.startTime.subscribe(function(t){e.startTime=t,this.synchronize()},this),this.stopTime=Se.observable(e.stopTime),this.stopTime.equalityComparer=te.equals,this.stopTime.subscribe(function(t){e.stopTime=t,this.synchronize()},this),this.currentTime=Se.observable(e.currentTime),this.currentTime.equalityComparer=te.equals,this.currentTime.subscribe(function(t){e.currentTime=t,this.synchronize()},this),this.multiplier=Se.observable(e.multiplier),this.multiplier.subscribe(function(t){e.multiplier=t,this.synchronize()},this),this.clockStep=Se.observable(e.clockStep),this.clockStep.subscribe(function(t){e.clockStep=t,this.synchronize()},this),this.clockRange=Se.observable(e.clockRange),this.clockRange.subscribe(function(t){e.clockRange=t,this.synchronize()},this),this.canAnimate=Se.observable(e.canAnimate),this.canAnimate.subscribe(function(t){e.canAnimate=t,this.synchronize()},this),this.shouldAnimate=Se.observable(e.shouldAnimate),this.shouldAnimate.subscribe(function(t){e.shouldAnimate=t,this.synchronize()},this),Se.track(this,["systemTime","startTime","stopTime","currentTime","multiplier","clockStep","clockRange","canAnimate","shouldAnimate"])}Object.defineProperties(l9.prototype,{clock:{get:function(){return this._clock}}});l9.prototype.synchronize=function(){let e=this._clock;this.systemTime=te.now(),this.startTime=e.startTime,this.stopTime=e.stopTime,this.currentTime=e.currentTime,this.multiplier=e.multiplier,this.clockStep=e.clockStep,this.clockRange=e.clockRange,this.canAnimate=e.canAnimate,this.shouldAnimate=e.shouldAnimate};l9.prototype.isDestroyed=function(){return!1};l9.prototype.destroy=function(){this._eventHelper.removeAll(),ue(this)};var d9=l9;var lmo=T(S(),1);function lyt(){this.canExecute=void 0,this.beforeExecute=void 0,this.afterExecute=void 0,fe.throwInstantiationError()}var $j=lyt;var hmo=T(S(),1);var u9={};u9.createCheckbox=function(e,t,n){let i=document.createElement("div"),o=document.createElement("label"),r=document.createElement("input");r.type="checkbox";let s=`checked: ${t}`;return d(n)&&(s+=`, enable: ${n}`),r.setAttribute("data-bind",s),o.appendChild(r),o.appendChild(document.createTextNode(e)),i.appendChild(o),i};u9.createSection=function(e,t,n,i){let o=document.createElement("div");o.className="cesium-cesiumInspector-section",o.setAttribute("data-bind",`css: { "cesium-cesiumInspector-section-collapsed": !${n} }`),e.appendChild(o);let r=document.createElement("h3");r.className="cesium-cesiumInspector-sectionHeader",r.appendChild(document.createTextNode(t)),r.setAttribute("data-bind",`click: ${i}`),o.appendChild(r);let s=document.createElement("div");return s.className="cesium-cesiumInspector-sectionContent",o.appendChild(s),s};u9.createRangeInput=function(e,t,n,i,o,r){r=g(r,t);let s=document.createElement("input");s.setAttribute("data-bind",`value: ${r}`),s.type="number";let a=document.createElement("input");a.type="range",a.min=n,a.max=i,a.step=g(o,"any"),a.setAttribute("data-bind",`valueUpdate: "input", value: ${t}`);let c=document.createElement("div");c.appendChild(a);let l=document.createElement("div");return l.className="cesium-cesiumInspector-slider",l.appendChild(document.createTextNode(e)),l.appendChild(s),l.appendChild(c),l};u9.createButton=function(e,t,n){let i=document.createElement("button");i.type="button",i.textContent=e,i.className="cesium-cesiumInspector-pickButton";let o=`click: ${t}`;return d(n)&&(o+=`, css: {"cesium-cesiumInspector-pickButtonHighlight" : ${n}}`),i.setAttribute("data-bind",o),i};var Za=u9;var xmo=T(S(),1);function Fxe(e,t){this._command=e,t=g(t,g.EMPTY_OBJECT),this.toggled=g(t.toggled,!1),this.tooltip=g(t.tooltip,""),Se.track(this,["toggled","tooltip"])}Object.defineProperties(Fxe.prototype,{command:{get:function(){return this._command}}});var dg=Fxe;var Lmo=T(S(),1);function dyt(e,t){t=g(t,!0);let n=new ye,i=new ye;function o(){let r={args:arguments,cancel:!1},s;return n.raiseEvent(r),r.cancel||(s=e.apply(null,arguments),i.raiseEvent(s)),s}return o.canExecute=t,Se.track(o,["canExecute"]),Object.defineProperties(o,{beforeExecute:{value:n},afterExecute:{value:i}}),o}var Cn=dyt;var Gmo=T(S(),1);function uyt(e,t,n,i,o){return n.call(i,e[t]),Se.getObservable(e,t).subscribe(n,i,o)}var aa=uyt;var Pmo=T(S(),1);var NT="http://www.w3.org/2000/svg",Nxe="http://www.w3.org/1999/xlink",bD,m9=Y.fromCssColorString("rgba(247,250,255,0.384)"),yD=Y.fromCssColorString("rgba(143,191,255,0.216)"),e8=Y.fromCssColorString("rgba(153,197,255,0.098)"),gD=Y.fromCssColorString("rgba(255,255,255,0.086)"),myt=Y.fromCssColorString("rgba(255,255,255,0.267)"),hyt=Y.fromCssColorString("rgba(255,255,255,0)"),Axe=Y.fromCssColorString("rgba(66,67,68,0.3)"),Mxe=Y.fromCssColorString("rgba(0,0,0,0.5)");function ug(e){return Y.fromCssColorString(window.getComputedStyle(e).getPropertyValue("color"))}var h9={animation_pathReset:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M24.316,5.318,9.833,13.682,9.833,5.5,5.5,5.5,5.5,25.5,9.833,25.5,9.833,17.318,24.316,25.682z"},animation_pathPause:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M13,5.5,7.5,5.5,7.5,25.5,13,25.5zM24.5,5.5,19,5.5,19,25.5,24.5,25.5z"},animation_pathPlay:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M6.684,25.682L24.316,15.5L6.684,5.318V25.682z"},animation_pathPlayReverse:{tagName:"path",transform:"translate(16,16) scale(-0.85,0.85) translate(-16,-16)",d:"M6.684,25.682L24.316,15.5L6.684,5.318V25.682z"},animation_pathLoop:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M24.249,15.499c-0.009,4.832-3.918,8.741-8.75,8.75c-2.515,0-4.768-1.064-6.365-2.763l2.068-1.442l-7.901-3.703l0.744,8.694l2.193-1.529c2.244,2.594,5.562,4.242,9.26,4.242c6.767,0,12.249-5.482,12.249-12.249H24.249zM15.499,6.75c2.516,0,4.769,1.065,6.367,2.764l-2.068,1.443l7.901,3.701l-0.746-8.693l-2.192,1.529c-2.245-2.594-5.562-4.245-9.262-4.245C8.734,3.25,3.25,8.734,3.249,15.499H6.75C6.758,10.668,10.668,6.758,15.499,6.75z"},animation_pathClock:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-15.5)",d:"M15.5,2.374C8.251,2.375,2.376,8.251,2.374,15.5C2.376,22.748,8.251,28.623,15.5,28.627c7.249-0.004,13.124-5.879,13.125-13.127C28.624,8.251,22.749,2.375,15.5,2.374zM15.5,25.623C9.909,25.615,5.385,21.09,5.375,15.5C5.385,9.909,9.909,5.384,15.5,5.374c5.59,0.01,10.115,4.535,10.124,10.125C25.615,21.09,21.091,25.615,15.5,25.623zM8.625,15.5c-0.001-0.552-0.448-0.999-1.001-1c-0.553,0-1,0.448-1,1c0,0.553,0.449,1,1,1C8.176,16.5,8.624,16.053,8.625,15.5zM8.179,18.572c-0.478,0.277-0.642,0.889-0.365,1.367c0.275,0.479,0.889,0.641,1.365,0.365c0.479-0.275,0.643-0.887,0.367-1.367C9.27,18.461,8.658,18.297,8.179,18.572zM9.18,10.696c-0.479-0.276-1.09-0.112-1.366,0.366s-0.111,1.09,0.365,1.366c0.479,0.276,1.09,0.113,1.367-0.366C9.821,11.584,9.657,10.973,9.18,10.696zM22.822,12.428c0.478-0.275,0.643-0.888,0.366-1.366c-0.275-0.478-0.89-0.642-1.366-0.366c-0.479,0.278-0.642,0.89-0.366,1.367C21.732,12.54,22.344,12.705,22.822,12.428zM12.062,21.455c-0.478-0.275-1.089-0.111-1.366,0.367c-0.275,0.479-0.111,1.09,0.366,1.365c0.478,0.277,1.091,0.111,1.365-0.365C12.704,22.344,12.54,21.732,12.062,21.455zM12.062,9.545c0.479-0.276,0.642-0.888,0.366-1.366c-0.276-0.478-0.888-0.642-1.366-0.366s-0.642,0.888-0.366,1.366C10.973,9.658,11.584,9.822,12.062,9.545zM22.823,18.572c-0.48-0.275-1.092-0.111-1.367,0.365c-0.275,0.479-0.112,1.092,0.367,1.367c0.477,0.275,1.089,0.113,1.365-0.365C23.464,19.461,23.3,18.848,22.823,18.572zM19.938,7.813c-0.477-0.276-1.091-0.111-1.365,0.366c-0.275,0.48-0.111,1.091,0.366,1.367s1.089,0.112,1.366-0.366C20.581,8.702,20.418,8.089,19.938,7.813zM23.378,14.5c-0.554,0.002-1.001,0.45-1.001,1c0.001,0.552,0.448,1,1.001,1c0.551,0,1-0.447,1-1C24.378,14.949,23.929,14.5,23.378,14.5zM15.501,6.624c-0.552,0-1,0.448-1,1l-0.466,7.343l-3.004,1.96c-0.478,0.277-0.642,0.889-0.365,1.365c0.275,0.479,0.889,0.643,1.365,0.367l3.305-1.676C15.39,16.99,15.444,17,15.501,17c0.828,0,1.5-0.671,1.5-1.5l-0.5-7.876C16.501,7.072,16.053,6.624,15.501,6.624zM15.501,22.377c-0.552,0-1,0.447-1,1s0.448,1,1,1s1-0.447,1-1S16.053,22.377,15.501,22.377zM18.939,21.455c-0.479,0.277-0.643,0.889-0.366,1.367c0.275,0.477,0.888,0.643,1.366,0.365c0.478-0.275,0.642-0.889,0.366-1.365C20.028,21.344,19.417,21.18,18.939,21.455z"},animation_pathWingButton:{tagName:"path",d:"m 4.5,0.5 c -2.216,0 -4,1.784 -4,4 l 0,24 c 0,2.216 1.784,4 4,4 l 13.71875,0 C 22.478584,27.272785 27.273681,22.511272 32.5,18.25 l 0,-13.75 c 0,-2.216 -1.784,-4 -4,-4 l -24,0 z"},animation_pathPointer:{tagName:"path",d:"M-15,-65,-15,-55,15,-55,15,-65,0,-95z"},animation_pathSwooshFX:{tagName:"path",d:"m 85,0 c 0,16.617 -4.813944,35.356 -13.131081,48.4508 h 6.099803 c 8.317138,-13.0948 13.13322,-28.5955 13.13322,-45.2124 0,-46.94483 -38.402714,-85.00262 -85.7743869,-85.00262 -1.0218522,0 -2.0373001,0.0241 -3.0506131,0.0589 45.958443,1.59437 82.723058,35.77285 82.723058,81.70532 z"}};function Th(e){let t=document.createElementNS(NT,e.tagName);for(let n in e)if(e.hasOwnProperty(n)&&n!=="tagName")if(n==="children"){let i=e.children.length;for(let o=0;o<i;++o)t.appendChild(Th(e.children[o]))}else n.indexOf("xlink:")===0?t.setAttributeNS(Nxe,n.substring(6),e[n]):n==="textContent"?t.textContent=e[n]:t.setAttribute(n,e[n]);return t}function t8(e,t,n){let i=document.createElementNS(NT,"text");i.setAttribute("x",e),i.setAttribute("y",t),i.setAttribute("class","cesium-animation-svgText");let o=document.createElementNS(NT,"tspan");return o.textContent=n,i.appendChild(o),i}function fyt(e,t,n){e.setAttribute("transform",`translate(100,100) rotate(${n})`),t.setAttribute("transform",`rotate(${n})`)}var xD=new Y;function Br(e,t){let n=t.alpha,i=1-n;return xD.red=e.red*i+t.red*n,xD.green=e.green*i+t.green*n,xD.blue=e.blue*i+t.blue*n,xD.toCssColorString()}function n8(e,t,n){let i=h9[n],o={tagName:"g",class:"cesium-animation-rectButton",transform:`translate(${e},${t})`,children:[{tagName:"rect",class:"cesium-animation-buttonGlow",width:32,height:32,rx:2,ry:2},{tagName:"rect",class:"cesium-animation-buttonMain",width:32,height:32,rx:4,ry:4},{class:"cesium-animation-buttonPath",id:n,tagName:i.tagName,transform:i.transform,d:i.d},{tagName:"title",textContent:""}]};return Th(o)}function pyt(e,t,n){let i=h9[n],o=h9.animation_pathWingButton,r={tagName:"g",class:"cesium-animation-rectButton",transform:`translate(${e},${t})`,children:[{class:"cesium-animation-buttonGlow",id:"animation_pathWingButton",tagName:o.tagName,d:o.d},{class:"cesium-animation-buttonMain",id:"animation_pathWingButton",tagName:o.tagName,d:o.d},{class:"cesium-animation-buttonPath",id:n,tagName:i.tagName,transform:i.transform,d:i.d},{tagName:"title",textContent:""}]};return Th(r)}function byt(e,t){let n=e._viewModel,i=n.shuttleRingDragging;if(!(i&&bD!==e))if(t.type==="mousedown"||i&&t.type==="mousemove"||t.type==="touchstart"&&t.touches.length===1||i&&t.type==="touchmove"&&t.touches.length===1){let o=e._centerX,r=e._centerY,a=e._svgNode.getBoundingClientRect(),c,l;if(t.type==="touchstart"||t.type==="touchmove"?(c=t.touches[0].clientX,l=t.touches[0].clientY):(c=t.clientX,l=t.clientY),!i&&(c>a.right||c<a.left||l<a.top||l>a.bottom))return;let u=e._shuttleRingPointer.getBoundingClientRect(),m=c-o-a.left,p=l-r-a.top,y=Math.atan2(p,m)*180/Math.PI+90;y>180&&(y-=360);let f=n.shuttleRingAngle;i||c<u.right&&c>u.left&&l>u.top&&l<u.bottom?(bD=e,n.shuttleRingDragging=!0,n.shuttleRingAngle=y):y<f?n.slower():y>f&&n.faster(),t.preventDefault()}else e===bD&&(bD=void 0),n.shuttleRingDragging=!1}function J0(e,t){this._viewModel=t,this.svgElement=e,this._enabled=void 0,this._toggled=void 0;let n=this;this._clickFunction=function(){let i=n._viewModel.command;i.canExecute&&i()},e.addEventListener("click",this._clickFunction,!0),this._subscriptions=[aa(t,"toggled",this.setToggled,this),aa(t,"tooltip",this.setTooltip,this),aa(t.command,"canExecute",this.setEnabled,this)]}J0.prototype.destroy=function(){this.svgElement.removeEventListener("click",this._clickFunction,!0);let e=this._subscriptions;for(let t=0,n=e.length;t<n;t++)e[t].dispose();ue(this)};J0.prototype.isDestroyed=function(){return!1};J0.prototype.setEnabled=function(e){if(this._enabled!==e){if(this._enabled=e,!e){this.svgElement.setAttribute("class","cesium-animation-buttonDisabled");return}if(this._toggled){this.svgElement.setAttribute("class","cesium-animation-rectButton cesium-animation-buttonToggled");return}this.svgElement.setAttribute("class","cesium-animation-rectButton")}};J0.prototype.setToggled=function(e){this._toggled!==e&&(this._toggled=e,this._enabled&&(e?this.svgElement.setAttribute("class","cesium-animation-rectButton cesium-animation-buttonToggled"):this.svgElement.setAttribute("class","cesium-animation-rectButton")))};J0.prototype.setTooltip=function(e){this.svgElement.getElementsByTagName("title")[0].textContent=e};function BV(e,t){e=En(e),this._viewModel=t,this._container=e,this._centerX=0,this._centerY=0,this._defsElement=void 0,this._svgNode=void 0,this._topG=void 0,this._lastHeight=void 0,this._lastWidth=void 0;let n=e.ownerDocument,i=document.createElement("style");i.textContent=".cesium-animation-rectButton .cesium-animation-buttonGlow { filter: url(#animation_blurred); }.cesium-animation-rectButton .cesium-animation-buttonMain { fill: url(#animation_buttonNormal); }.cesium-animation-buttonToggled .cesium-animation-buttonMain { fill: url(#animation_buttonToggled); }.cesium-animation-rectButton:hover .cesium-animation-buttonMain { fill: url(#animation_buttonHovered); }.cesium-animation-buttonDisabled .cesium-animation-buttonMain { fill: url(#animation_buttonDisabled); }.cesium-animation-shuttleRingG .cesium-animation-shuttleRingSwoosh { fill: url(#animation_shuttleRingSwooshGradient); }.cesium-animation-shuttleRingG:hover .cesium-animation-shuttleRingSwoosh { fill: url(#animation_shuttleRingSwooshHovered); }.cesium-animation-shuttleRingPointer { fill: url(#animation_shuttleRingPointerGradient); }.cesium-animation-shuttleRingPausePointer { fill: url(#animation_shuttleRingPointerPaused); }.cesium-animation-knobOuter { fill: url(#animation_knobOuter); }.cesium-animation-knobInner { fill: url(#animation_knobInner); }",n.head.insertBefore(i,n.head.childNodes[0]);let o=document.createElement("div");o.className="cesium-animation-theme",o.innerHTML='<div class="cesium-animation-themeNormal"></div><div class="cesium-animation-themeHover"></div><div class="cesium-animation-themeSelect"></div><div class="cesium-animation-themeDisabled"></div><div class="cesium-animation-themeKnob"></div><div class="cesium-animation-themePointer"></div><div class="cesium-animation-themeSwoosh"></div><div class="cesium-animation-themeSwooshHover"></div>',this._theme=o,this._themeNormal=o.childNodes[0],this._themeHover=o.childNodes[1],this._themeSelect=o.childNodes[2],this._themeDisabled=o.childNodes[3],this._themeKnob=o.childNodes[4],this._themePointer=o.childNodes[5],this._themeSwoosh=o.childNodes[6],this._themeSwooshHover=o.childNodes[7];let r=document.createElementNS(NT,"svg:svg");this._svgNode=r,r.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink",Nxe);let s=document.createElementNS(NT,"g");this._topG=s,this._realtimeSVG=new J0(pyt(3,4,"animation_pathClock"),t.playRealtimeViewModel),this._playReverseSVG=new J0(n8(44,99,"animation_pathPlayReverse"),t.playReverseViewModel),this._playForwardSVG=new J0(n8(124,99,"animation_pathPlay"),t.playForwardViewModel),this._pauseSVG=new J0(n8(84,99,"animation_pathPause"),t.pauseViewModel);let a=document.createElementNS(NT,"g");a.appendChild(this._realtimeSVG.svgElement),a.appendChild(this._playReverseSVG.svgElement),a.appendChild(this._playForwardSVG.svgElement),a.appendChild(this._pauseSVG.svgElement);let c=Th({tagName:"circle",class:"cesium-animation-shuttleRingBack",cx:100,cy:100,r:99});this._shuttleRingBackPanel=c;let l=h9.animation_pathSwooshFX,u=h9.animation_pathPointer,m=Th({tagName:"g",class:"cesium-animation-shuttleRingSwoosh",children:[{tagName:l.tagName,transform:"translate(100,97) scale(-1,1)",id:"animation_pathSwooshFX",d:l.d},{tagName:l.tagName,transform:"translate(100,97)",id:"animation_pathSwooshFX",d:l.d},{tagName:"line",x1:100,y1:8,x2:100,y2:22}]});this._shuttleRingSwooshG=m,this._shuttleRingPointer=Th({class:"cesium-animation-shuttleRingPointer",id:"animation_pathPointer",tagName:u.tagName,d:u.d});let p=Th({tagName:"g",transform:"translate(100,100)"});this._knobOuter=Th({tagName:"circle",class:"cesium-animation-knobOuter",cx:0,cy:0,r:71});let y=61,f=Th({tagName:"circle",class:"cesium-animation-knobInner",cx:0,cy:0,r:y});this._knobDate=t8(0,-24,""),this._knobTime=t8(0,-7,""),this._knobStatus=t8(0,-41,"");let x=Th({tagName:"circle",class:"cesium-animation-blank",cx:0,cy:0,r:y}),_=document.createElementNS(NT,"g");_.setAttribute("class","cesium-animation-shuttleRingG"),e.appendChild(o),s.appendChild(_),s.appendChild(p),s.appendChild(a),_.appendChild(c),_.appendChild(m),_.appendChild(this._shuttleRingPointer),p.appendChild(this._knobOuter),p.appendChild(f),p.appendChild(this._knobDate),p.appendChild(this._knobTime),p.appendChild(this._knobStatus),p.appendChild(x),r.appendChild(s),e.appendChild(r);let C=this;function V(P){byt(C,P)}this._mouseCallback=V,c.addEventListener("mousedown",V,!0),c.addEventListener("touchstart",V,!0),m.addEventListener("mousedown",V,!0),m.addEventListener("touchstart",V,!0),n.addEventListener("mousemove",V,!0),n.addEventListener("touchmove",V,!0),n.addEventListener("mouseup",V,!0),n.addEventListener("touchend",V,!0),n.addEventListener("touchcancel",V,!0),this._shuttleRingPointer.addEventListener("mousedown",V,!0),this._shuttleRingPointer.addEventListener("touchstart",V,!0),this._knobOuter.addEventListener("mousedown",V,!0),this._knobOuter.addEventListener("touchstart",V,!0);let L=this._knobTime.childNodes[0],Z=this._knobDate.childNodes[0],G=this._knobStatus.childNodes[0],X;this._subscriptions=[aa(t.pauseViewModel,"toggled",function(P){X!==P&&(X=P,X?C._shuttleRingPointer.setAttribute("class","cesium-animation-shuttleRingPausePointer"):C._shuttleRingPointer.setAttribute("class","cesium-animation-shuttleRingPointer"))}),aa(t,"shuttleRingAngle",function(P){fyt(C._shuttleRingPointer,C._knobOuter,P)}),aa(t,"dateLabel",function(P){Z.textContent!==P&&(Z.textContent=P)}),aa(t,"timeLabel",function(P){L.textContent!==P&&(L.textContent=P)}),aa(t,"multiplierLabel",function(P){G.textContent!==P&&(G.textContent=P)})],this.applyThemeChanges(),this.resize()}Object.defineProperties(BV.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});BV.prototype.isDestroyed=function(){return!1};BV.prototype.destroy=function(){d(this._observer)&&(this._observer.disconnect(),this._observer=void 0);let e=this._container.ownerDocument,t=this._mouseCallback;this._shuttleRingBackPanel.removeEventListener("mousedown",t,!0),this._shuttleRingBackPanel.removeEventListener("touchstart",t,!0),this._shuttleRingSwooshG.removeEventListener("mousedown",t,!0),this._shuttleRingSwooshG.removeEventListener("touchstart",t,!0),e.removeEventListener("mousemove",t,!0),e.removeEventListener("touchmove",t,!0),e.removeEventListener("mouseup",t,!0),e.removeEventListener("touchend",t,!0),e.removeEventListener("touchcancel",t,!0),this._shuttleRingPointer.removeEventListener("mousedown",t,!0),this._shuttleRingPointer.removeEventListener("touchstart",t,!0),this._knobOuter.removeEventListener("mousedown",t,!0),this._knobOuter.removeEventListener("touchstart",t,!0),this._container.removeChild(this._svgNode),this._container.removeChild(this._theme),this._realtimeSVG.destroy(),this._playReverseSVG.destroy(),this._playForwardSVG.destroy(),this._pauseSVG.destroy();let n=this._subscriptions;for(let i=0,o=n.length;i<o;i++)n[i].dispose();return ue(this)};BV.prototype.resize=function(){let e=this._container.clientWidth,t=this._container.clientHeight;if(e===this._lastWidth&&t===this._lastHeight)return;let n=this._svgNode,i=200,o=132,r=e,s=t;e===0&&t===0?(r=i,s=o):e===0?(s=t,r=i*(t/o)):t===0&&(r=e,s=o*(e/i));let a=r/i,c=s/o;n.style.cssText=`width: ${r}px; height: ${s}px; position: absolute; bottom: 0; left: 0; overflow: hidden;`,n.setAttribute("width",r),n.setAttribute("height",s),n.setAttribute("viewBox",`0 0 ${r} ${s}`),this._topG.setAttribute("transform",`scale(${a},${c})`),this._centerX=Math.max(1,100*a),this._centerY=Math.max(1,100*c),this._lastHeight=e,this._lastWidth=t};BV.prototype.applyThemeChanges=function(){let e=this._container.ownerDocument;if(!e.body.contains(this._container)){if(d(this._observer))return;let u=this;u._observer=new MutationObserver(function(){e.body.contains(u._container)&&(u._observer.disconnect(),u._observer=void 0,u.applyThemeChanges())}),u._observer.observe(e,{childList:!0,subtree:!0});return}let t=ug(this._themeNormal),n=ug(this._themeHover),i=ug(this._themeSelect),o=ug(this._themeDisabled),r=ug(this._themeKnob),s=ug(this._themePointer),a=ug(this._themeSwoosh),c=ug(this._themeSwooshHover),l=Th({tagName:"defs",children:[{id:"animation_buttonNormal",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Br(t,m9)},{tagName:"stop",offset:"12%","stop-color":Br(t,yD)},{tagName:"stop",offset:"46%","stop-color":Br(t,e8)},{tagName:"stop",offset:"81%","stop-color":Br(t,gD)}]},{id:"animation_buttonHovered",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Br(n,m9)},{tagName:"stop",offset:"12%","stop-color":Br(n,yD)},{tagName:"stop",offset:"46%","stop-color":Br(n,e8)},{tagName:"stop",offset:"81%","stop-color":Br(n,gD)}]},{id:"animation_buttonToggled",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Br(i,m9)},{tagName:"stop",offset:"12%","stop-color":Br(i,yD)},{tagName:"stop",offset:"46%","stop-color":Br(i,e8)},{tagName:"stop",offset:"81%","stop-color":Br(i,gD)}]},{id:"animation_buttonDisabled",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":Br(o,myt)},{tagName:"stop",offset:"75%","stop-color":Br(o,hyt)}]},{id:"animation_blurred",tagName:"filter",width:"200%",height:"200%",x:"-50%",y:"-50%",children:[{tagName:"feGaussianBlur",stdDeviation:4,in:"SourceGraphic"}]},{id:"animation_shuttleRingSwooshGradient",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-opacity":.2,"stop-color":a.toCssColorString()},{tagName:"stop",offset:"85%","stop-opacity":.85,"stop-color":a.toCssColorString()},{tagName:"stop",offset:"95%","stop-opacity":.05,"stop-color":a.toCssColorString()}]},{id:"animation_shuttleRingSwooshHovered",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-opacity":.2,"stop-color":c.toCssColorString()},{tagName:"stop",offset:"85%","stop-opacity":.85,"stop-color":c.toCssColorString()},{tagName:"stop",offset:"95%","stop-opacity":.05,"stop-color":c.toCssColorString()}]},{id:"animation_shuttleRingPointerGradient",tagName:"linearGradient",x1:"0%",y1:"50%",x2:"100%",y2:"50%",children:[{tagName:"stop",offset:"0%","stop-color":s.toCssColorString()},{tagName:"stop",offset:"40%","stop-color":s.toCssColorString()},{tagName:"stop",offset:"60%","stop-color":Br(s,Mxe)},{tagName:"stop",offset:"100%","stop-color":Br(s,Mxe)}]},{id:"animation_shuttleRingPointerPaused",tagName:"linearGradient",x1:"0%",y1:"50%",x2:"100%",y2:"50%",children:[{tagName:"stop",offset:"0%","stop-color":"#CCC"},{tagName:"stop",offset:"40%","stop-color":"#CCC"},{tagName:"stop",offset:"60%","stop-color":"#555"},{tagName:"stop",offset:"100%","stop-color":"#555"}]},{id:"animation_knobOuter",tagName:"linearGradient",x1:"20%",y1:"0%",x2:"90%",y2:"100%",children:[{tagName:"stop",offset:"5%","stop-color":Br(r,m9)},{tagName:"stop",offset:"60%","stop-color":Br(r,Axe)},{tagName:"stop",offset:"85%","stop-color":Br(r,yD)}]},{id:"animation_knobInner",tagName:"linearGradient",x1:"20%",y1:"0%",x2:"90%",y2:"100%",children:[{tagName:"stop",offset:"5%","stop-color":Br(r,Axe)},{tagName:"stop",offset:"60%","stop-color":Br(r,m9)},{tagName:"stop",offset:"85%","stop-color":Br(r,gD)}]}]});d(this._defsElement)?this._svgNode.replaceChild(l,this._defsElement):this._svgNode.appendChild(l),this._defsElement=l};var f9=BV;var kmo=T(S(),1);var yyt=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],mg=15,YV=105;function Uxe(e,t){return e-t}function i8(e,t){let n=Lo(t,e,Uxe);return n<0?~n:n}function gyt(e,t){if(Math.abs(e)<=mg)return e/mg;let n=mg,i=YV,o,r=0,s;return e>0?(o=Math.log(t[t.length-1]),s=(o-r)/(i-n),Math.exp(r+s*(e-n))):(o=Math.log(-t[0]),s=(o-r)/(i-n),-Math.exp(r+s*(Math.abs(e)-n)))}function xyt(e,t,n){if(n.clockStep===mo.SYSTEM_CLOCK)return mg;if(Math.abs(e)<=1)return e*mg;let i=t[t.length-1];e>i?e=i:e<-i&&(e=-i);let o=mg,r=YV,s,a=0,c;return e>0?(s=Math.log(i),c=(s-a)/(r-o),(Math.log(e)-a)/c+o):(s=Math.log(-t[0]),c=(s-a)/(r-o),-((Math.log(Math.abs(e))-a)/c+o))}function Qu(e){let t=this;this._clockViewModel=e,this._allShuttleRingTicks=[],this._dateFormatter=Qu.defaultDateFormatter,this._timeFormatter=Qu.defaultTimeFormatter,this.shuttleRingDragging=!1,this.snapToTicks=!1,Se.track(this,["_allShuttleRingTicks","_dateFormatter","_timeFormatter","shuttleRingDragging","snapToTicks"]),this._sortedFilteredPositiveTicks=[],this.setShuttleRingTicks(Qu.defaultTicks),this.timeLabel=void 0,Se.defineProperty(this,"timeLabel",function(){return t._timeFormatter(t._clockViewModel.currentTime,t)}),this.dateLabel=void 0,Se.defineProperty(this,"dateLabel",function(){return t._dateFormatter(t._clockViewModel.currentTime,t)}),this.multiplierLabel=void 0,Se.defineProperty(this,"multiplierLabel",function(){let s=t._clockViewModel;if(s.clockStep===mo.SYSTEM_CLOCK)return"Today";let a=s.multiplier;return a%1===0?`${a.toFixed(0)}x`:`${a.toFixed(3).replace(/0{0,3}$/,"")}x`}),this.shuttleRingAngle=void 0,Se.defineProperty(this,"shuttleRingAngle",{get:function(){return xyt(e.multiplier,t._allShuttleRingTicks,e)},set:function(s){s=Math.max(Math.min(s,YV),-YV);let a=t._allShuttleRingTicks,c=t._clockViewModel;if(c.clockStep=mo.SYSTEM_CLOCK_MULTIPLIER,Math.abs(s)===YV){c.multiplier=s>0?a[a.length-1]:a[0];return}let l=gyt(s,a);if(t.snapToTicks)l=a[i8(l,a)];else if(l!==0){let u=Math.abs(l);if(u>100){let m=u.toFixed(0).length-2,p=Math.pow(10,m);l=Math.round(l/p)*p|0}else u>mg?l=Math.round(l):u>1?l=+l.toFixed(1):u>0&&(l=+l.toFixed(2))}c.multiplier=l}}),this._canAnimate=void 0,Se.defineProperty(this,"_canAnimate",function(){let s=t._clockViewModel,a=s.clockRange;if(t.shuttleRingDragging||a===Gr.UNBOUNDED)return!0;let c=s.multiplier,l=s.currentTime,u=s.startTime,m=!1;if(a===Gr.LOOP_STOP)m=te.greaterThan(l,u)||l.equals(u)&&c>0;else{let p=s.stopTime;m=te.greaterThan(l,u)&&te.lessThan(l,p)||l.equals(u)&&c>0||l.equals(p)&&c<0}return m||(s.shouldAnimate=!1),m}),this._isSystemTimeAvailable=void 0,Se.defineProperty(this,"_isSystemTimeAvailable",function(){let s=t._clockViewModel;if(s.clockRange===Gr.UNBOUNDED)return!0;let c=s.systemTime;return te.greaterThanOrEquals(c,s.startTime)&&te.lessThanOrEquals(c,s.stopTime)}),this._isAnimating=void 0,Se.defineProperty(this,"_isAnimating",function(){return t._clockViewModel.shouldAnimate&&(t._canAnimate||t.shuttleRingDragging)});let n=Cn(function(){let s=t._clockViewModel;s.shouldAnimate?s.shouldAnimate=!1:t._canAnimate&&(s.shouldAnimate=!0)});this._pauseViewModel=new dg(n,{toggled:Se.computed(function(){return!t._isAnimating}),tooltip:"Pause"});let i=Cn(function(){let s=t._clockViewModel,a=s.multiplier;a>0&&(s.multiplier=-a),s.shouldAnimate=!0});this._playReverseViewModel=new dg(i,{toggled:Se.computed(function(){return t._isAnimating&&e.multiplier<0}),tooltip:"Play Reverse"});let o=Cn(function(){let s=t._clockViewModel,a=s.multiplier;a<0&&(s.multiplier=-a),s.shouldAnimate=!0});this._playForwardViewModel=new dg(o,{toggled:Se.computed(function(){return t._isAnimating&&e.multiplier>0&&e.clockStep!==mo.SYSTEM_CLOCK}),tooltip:"Play Forward"});let r=Cn(function(){t._clockViewModel.clockStep=mo.SYSTEM_CLOCK},Se.getObservable(this,"_isSystemTimeAvailable"));this._playRealtimeViewModel=new dg(r,{toggled:Se.computed(function(){return e.clockStep===mo.SYSTEM_CLOCK}),tooltip:Se.computed(function(){return t._isSystemTimeAvailable?"Today (real-time)":"Current time not in range"})}),this._slower=Cn(function(){let s=t._clockViewModel,a=t._allShuttleRingTicks,c=s.multiplier,l=i8(c,a)-1;l>=0&&(s.multiplier=a[l])}),this._faster=Cn(function(){let s=t._clockViewModel,a=t._allShuttleRingTicks,c=s.multiplier,l=i8(c,a)+1;l<a.length&&(s.multiplier=a[l])})}Qu.defaultDateFormatter=function(e,t){let n=te.toGregorianDate(e);return`${yyt[n.month-1]} ${n.day} ${n.year}`};Qu.defaultTicks=[.001,.002,.005,.01,.02,.05,.1,.25,.5,1,2,5,10,15,30,60,120,300,600,900,1800,3600,7200,14400,21600,43200,86400,172800,345600,604800];Qu.defaultTimeFormatter=function(e,t){let n=te.toGregorianDate(e),i=Math.round(n.millisecond);return Math.abs(t._clockViewModel.multiplier)<1?`${n.hour.toString().padStart(2,"0")}:${n.minute.toString().padStart(2,"0")}:${n.second.toString().padStart(2,"0")}.${i.toString().padStart(3,"0")}`:`${n.hour.toString().padStart(2,"0")}:${n.minute.toString().padStart(2,"0")}:${n.second.toString().padStart(2,"0")} UTC`};Qu.prototype.getShuttleRingTicks=function(){return this._sortedFilteredPositiveTicks.slice(0)};Qu.prototype.setShuttleRingTicks=function(e){let t,n,i,o={},r=this._sortedFilteredPositiveTicks;for(r.length=0,t=0,n=e.length;t<n;++t)i=e[t],o.hasOwnProperty(i)||(o[i]=!0,r.push(i));r.sort(Uxe);let s=[];for(n=r.length,t=n-1;t>=0;--t)i=r[t],i!==0&&s.push(-i);Array.prototype.push.apply(s,r),this._allShuttleRingTicks=s};Object.defineProperties(Qu.prototype,{slower:{get:function(){return this._slower}},faster:{get:function(){return this._faster}},clockViewModel:{get:function(){return this._clockViewModel}},pauseViewModel:{get:function(){return this._pauseViewModel}},playReverseViewModel:{get:function(){return this._playReverseViewModel}},playForwardViewModel:{get:function(){return this._playForwardViewModel}},playRealtimeViewModel:{get:function(){return this._playRealtimeViewModel}},dateFormatter:{get:function(){return this._dateFormatter},set:function(e){this._dateFormatter=e}},timeFormatter:{get:function(){return this._timeFormatter},set:function(e){this._timeFormatter=e}}});Qu._maxShuttleRingAngle=YV;Qu._realtimeShuttleRingAngle=mg;var p9=Qu;var eho=T(S(),1);var Hmo=T(S(),1);function kxe(e){e=g(e,g.EMPTY_OBJECT);let t=e.globe,n=g(e.imageryProviderViewModels,[]),i=g(e.terrainProviderViewModels,[]);this._globe=t,this.imageryProviderViewModels=n.slice(0),this.terrainProviderViewModels=i.slice(0),this.dropDownVisible=!1,Se.track(this,["imageryProviderViewModels","terrainProviderViewModels","dropDownVisible"]);let o=Se.getObservable(this,"imageryProviderViewModels"),r=Se.pureComputed(function(){let m=o(),p={},y;for(y=0;y<m.length;y++){let _=m[y],C=_.category;d(p[C])?p[C].push(_):p[C]=[_]}let f=Object.keys(p),x=[];for(y=0;y<f.length;y++){let _=f[y];x.push({name:_,providers:p[_]})}return x});this._imageryProviders=r;let s=Se.getObservable(this,"terrainProviderViewModels"),a=Se.pureComputed(function(){let m=s(),p={},y;for(y=0;y<m.length;y++){let _=m[y],C=_.category;d(p[C])?p[C].push(_):p[C]=[_]}let f=Object.keys(p),x=[];for(y=0;y<f.length;y++){let _=f[y];x.push({name:_,providers:p[_]})}return x});this._terrainProviders=a,this.buttonTooltip=void 0,Se.defineProperty(this,"buttonTooltip",function(){let m=this.selectedImagery,p=this.selectedTerrain,y=d(m)?m.name:void 0,f=d(p)?p.name:void 0;return d(y)&&d(f)?`${y}
  12757. ${f}`:d(y)?y:f}),this.buttonImageUrl=void 0,Se.defineProperty(this,"buttonImageUrl",function(){let m=this.selectedImagery;if(d(m))return m.iconUrl}),this.selectedImagery=void 0;let c=Se.observable();this._currentImageryLayers=[],Se.defineProperty(this,"selectedImagery",{get:function(){return c()},set:function(m){if(c()===m){this.dropDownVisible=!1;return}let p,y=this._currentImageryLayers,f=y.length,x=this._globe.imageryLayers,_=!1;for(p=0;p<f;p++){let C=x.length;for(let V=0;V<C;V++){let L=x.get(V);if(L===y[p]){x.remove(L),_=!0;break}}}if(d(m)){let C=m.creationCommand();if(Array.isArray(C)){let V=C.length;for(this._currentImageryLayers=[],p=V-1;p>=0;p--){let L=ia.fromProviderAsync(C[p]);x.add(L,0),this._currentImageryLayers.push(L)}}else{this._currentImageryLayers=[];let V=ia.fromProviderAsync(C);if(V.name=m.name,_)x.add(V,0);else{let L=x.get(0);d(L)&&x.remove(L),x.add(V,0)}this._currentImageryLayers.push(V)}}c(m),this.dropDownVisible=!1}}),this.selectedTerrain=void 0;let l=Se.observable();Se.defineProperty(this,"selectedTerrain",{get:function(){return l()},set:function(m){if(l()===m){this.dropDownVisible=!1;return}let p;if(d(m)&&(p=m.creationCommand()),d(p)&&!d(p.then))this._globe.depthTestAgainstTerrain=!(p instanceof Cf),this._globe.terrainProvider=p;else if(d(p)){let y=!1,f=this._globe.terrainProviderChanged.addEventListener(()=>{y=!0,f()}),_=new AF(p).readyEvent.addEventListener(C=>{y||(this._globe.depthTestAgainstTerrain=!(C instanceof Cf),this._globe.terrainProvider=C,_())})}l(m),this.dropDownVisible=!1}});let u=this;this._toggleDropDown=Cn(function(){u.dropDownVisible=!u.dropDownVisible}),this.selectedImagery=g(e.selectedImageryProviderViewModel,n[0]),this.selectedTerrain=g(e.selectedTerrainProviderViewModel,i[0])}Object.defineProperties(kxe.prototype,{toggleDropDown:{get:function(){return this._toggleDropDown}},globe:{get:function(){return this._globe}}});var b9=kxe;function _D(e,t){e=En(e);let n=new b9(t),i=document.createElement("button");i.type="button",i.className="cesium-button cesium-toolbar-button",i.setAttribute("data-bind","attr: { title: buttonTooltip },click: toggleDropDown"),e.appendChild(i);let o=document.createElement("img");o.setAttribute("draggable","false"),o.className="cesium-baseLayerPicker-selected",o.setAttribute("data-bind","attr: { src: buttonImageUrl }, visible: !!buttonImageUrl"),i.appendChild(o);let r=document.createElement("div");r.className="cesium-baseLayerPicker-dropDown",r.setAttribute("data-bind",'css: { "cesium-baseLayerPicker-dropDown-visible" : dropDownVisible }'),e.appendChild(r);let s=document.createElement("div");s.className="cesium-baseLayerPicker-sectionTitle",s.setAttribute("data-bind","visible: imageryProviderViewModels.length > 0"),s.innerHTML="Imagery",r.appendChild(s);let a=document.createElement("div");a.className="cesium-baseLayerPicker-section",a.setAttribute("data-bind","foreach: _imageryProviders"),r.appendChild(a);let c=document.createElement("div");c.className="cesium-baseLayerPicker-category",a.appendChild(c);let l=document.createElement("div");l.className="cesium-baseLayerPicker-categoryTitle",l.setAttribute("data-bind","text: name"),c.appendChild(l);let u=document.createElement("div");u.className="cesium-baseLayerPicker-choices",u.setAttribute("data-bind","foreach: providers"),c.appendChild(u);let m=document.createElement("div");m.className="cesium-baseLayerPicker-item",m.setAttribute("data-bind",'css: { "cesium-baseLayerPicker-selectedItem" : $data === $parents[1].selectedImagery },attr: { title: tooltip },visible: creationCommand.canExecute,click: function($data) { $parents[1].selectedImagery = $data; }'),u.appendChild(m);let p=document.createElement("img");p.className="cesium-baseLayerPicker-itemIcon",p.setAttribute("data-bind","attr: { src: iconUrl }"),p.setAttribute("draggable","false"),m.appendChild(p);let y=document.createElement("div");y.className="cesium-baseLayerPicker-itemLabel",y.setAttribute("data-bind","text: name"),m.appendChild(y);let f=document.createElement("div");f.className="cesium-baseLayerPicker-sectionTitle",f.setAttribute("data-bind","visible: terrainProviderViewModels.length > 0"),f.innerHTML="Terrain",r.appendChild(f);let x=document.createElement("div");x.className="cesium-baseLayerPicker-section",x.setAttribute("data-bind","foreach: _terrainProviders"),r.appendChild(x);let _=document.createElement("div");_.className="cesium-baseLayerPicker-category",x.appendChild(_);let C=document.createElement("div");C.className="cesium-baseLayerPicker-categoryTitle",C.setAttribute("data-bind","text: name"),_.appendChild(C);let V=document.createElement("div");V.className="cesium-baseLayerPicker-choices",V.setAttribute("data-bind","foreach: providers"),_.appendChild(V);let L=document.createElement("div");L.className="cesium-baseLayerPicker-item",L.setAttribute("data-bind",'css: { "cesium-baseLayerPicker-selectedItem" : $data === $parents[1].selectedTerrain },attr: { title: tooltip },visible: creationCommand.canExecute,click: function($data) { $parents[1].selectedTerrain = $data; }'),V.appendChild(L);let Z=document.createElement("img");Z.className="cesium-baseLayerPicker-itemIcon",Z.setAttribute("data-bind","attr: { src: iconUrl }"),Z.setAttribute("draggable","false"),L.appendChild(Z);let G=document.createElement("div");G.className="cesium-baseLayerPicker-itemLabel",G.setAttribute("data-bind","text: name"),L.appendChild(G),Se.applyBindings(n,i),Se.applyBindings(n,r),this._viewModel=n,this._container=e,this._element=i,this._dropPanel=r,this._closeDropDown=function(X){i.contains(X.target)||r.contains(X.target)||(n.dropDownVisible=!1)},Mt.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(_D.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});_D.prototype.isDestroyed=function(){return!1};_D.prototype.destroy=function(){return Mt.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),Se.cleanNode(this._element),Se.cleanNode(this._dropPanel),this._container.removeChild(this._element),this._container.removeChild(this._dropPanel),ue(this)};var y9=_D;var sho=T(S(),1);function Dxe(e){let t=e.creationFunction;d(t.canExecute)||(t=Cn(t)),this._creationCommand=t,this.name=e.name,this.tooltip=e.tooltip,this.iconUrl=e.iconUrl,this._category=g(e.category,""),Se.track(this,["name","tooltip","iconUrl"])}Object.defineProperties(Dxe.prototype,{creationCommand:{get:function(){return this._creationCommand}},category:{get:function(){return this._category}}});var Yr=Dxe;var dho=T(S(),1);function _yt(){let e=[],t=devicePixelRatio>=2;return e.push(new Yr({name:"Bing Maps Aerial",iconUrl:$t("Widgets/Images/ImageryProviders/bingAerial.png"),tooltip:"Bing Maps aerial imagery, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return A0({style:F0.AERIAL})}})),e.push(new Yr({name:"Bing Maps Aerial with Labels",iconUrl:$t("Widgets/Images/ImageryProviders/bingAerialLabels.png"),tooltip:"Bing Maps aerial imagery with labels, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return A0({style:F0.AERIAL_WITH_LABELS})}})),e.push(new Yr({name:"Bing Maps Roads",iconUrl:$t("Widgets/Images/ImageryProviders/bingRoads.png"),tooltip:"Bing Maps standard road maps, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return A0({style:F0.ROAD})}})),e.push(new Yr({name:"ArcGIS World Imagery",iconUrl:$t("Widgets/Images/ImageryProviders/ArcGisMapServiceWorldImagery.png"),tooltip:`ArcGIS World Imagery provides one meter or better satellite and aerial imagery in many parts of the world and lower resolution satellite imagery worldwide. The map includes 15m TerraColor imagery at small and mid-scales (~1:591M down to ~1:288k) for the world. The map features Maxar imagery at 0.3m resolution for select metropolitan areas around the world, 0.5m resolution across the United States and parts of Western Europe, and 1m resolution imagery across the rest of the world. In addition to commercial sources, the World Imagery map features high-resolution aerial photography contributed by the GIS User Community. This imagery ranges from 0.3m to 0.03m resolution (down to ~1:280 nin select communities). For more information on this map, including the terms of use, visit us online at
  12758. https://www.arcgis.com/home/item.html?id=10df2279f9684e4a9f6a7f08febac2a9`,category:"Other",creationFunction:function(){return v0.fromBasemapType(hh.SATELLITE,{enablePickFeatures:!1})}})),e.push(new Yr({name:"ArcGIS World Hillshade",iconUrl:$t("Widgets/Images/ImageryProviders/ArcGisMapServiceWorldHillshade.png"),tooltip:`ArcGIS World Hillshade map portrays elevation as an artistic hillshade. This map is designed to be used as a backdrop for topographical, soil, hydro, landcover or other outdoor recreational maps. The map was compiled from a variety of sources from several data providers. The basemap has global coverage down to a scale of ~1:72k. In select areas of the United States and Europe, coverage is available down to ~1:9k. For more information on this map, including the terms of use, visit us online at
  12759. https://www.arcgis.com/home/item.html?id=1b243539f4514b6ba35e7d995890db1d`,category:"Other",creationFunction:function(){return v0.fromBasemapType(hh.HILLSHADE,{enablePickFeatures:!1})}})),e.push(new Yr({name:"Esri World Ocean",iconUrl:$t("Widgets/Images/ImageryProviders/ArcGisMapServiceWorldOcean.png"),tooltip:`ArcGIS World Ocean map is designed to be used as a base map by marine GIS professionals and as a reference map by anyone interested in ocean data. The base map features marine bathymetry. Land features include inland waters and roads overlaid on land cover and shaded relief imagery. The map was compiled from a variety of best available sources from several data providers, including General Bathymetric Chart of the Oceans GEBCO_08 Grid, National Oceanic and Atmospheric Administration (NOAA), and National Geographic, Garmin, HERE, Geonames.org, and Esri, and various other contributors. The base map currently provides coverage for the world down to a scale of ~1:577k, and coverage down to 1:72k in US coastal areas, and various other areas. Coverage down to ~ 1:9k is available limited areas based on regional hydrographic survey data. The base map was designed and developed by Esri. For more information on this map, including our terms of use, visit us online at
  12760. https://www.arcgis.com/home/item.html?id=1e126e7520f9466c9ca28b8f28b5e500`,category:"Other",creationFunction:function(){return v0.fromBasemapType(hh.OCEANS,{enablePickFeatures:!1})}})),e.push(new Yr({name:"Open\xADStreet\xADMap",iconUrl:$t("Widgets/Images/ImageryProviders/openStreetMap.png"),tooltip:`OpenStreetMap (OSM) is a collaborative project to create a free editable map of the world.
  12761. http://www.openstreetmap.org`,category:"Other",creationFunction:function(){return new z0({url:"https://tile.openstreetmap.org/"})}})),e.push(new Yr({name:"Stadia x Stamen Watercolor",iconUrl:$t("Widgets/Images/ImageryProviders/stamenWatercolor.png"),tooltip:`Based on the original basemaps created for the Knight Foundation and reminiscent of hand drawn maps, the watercolor maps from Stamen Design apply raster effect area washes and organic edges over a paper texture to add warm pop to any map.
  12762. https://docs.stadiamaps.com/map-styles/stamen-watercolor/`,category:"Other",creationFunction:function(){return new z0({url:"https://tiles.stadiamaps.com/tiles/stamen_watercolor/",fileExtension:"jpg",credit:`&copy; <a href="https://stamen.com/" target="_blank">Stamen Design</a>
  12763. &copy; <a href="https://www.stadiamaps.com/" target="_blank">Stadia Maps</a>
  12764. &copy; <a href="https://openmaptiles.org/" target="_blank">OpenMapTiles</a>
  12765. &copy; <a href="https://www.openstreetmap.org/about/" target="_blank">OpenStreetMap contributors</a>`})}})),e.push(new Yr({name:"Stadia x Stamen Toner",iconUrl:$t("Widgets/Images/ImageryProviders/stamenToner.png"),tooltip:`Based on the original basemaps created for the Knight Foundation and the most popular of the excellent styles from Stamen Design, these high-contrast B+W (black and white) maps are the perfect backdrop for your colorful and eye-catching overlays.
  12766. https://docs.stadiamaps.com/map-styles/stamen-toner/`,category:"Other",creationFunction:function(){return new z0({url:"https://tiles.stadiamaps.com/tiles/stamen_toner/",retinaTiles:t,credit:`&copy; <a href="https://stamen.com/" target="_blank">Stamen Design</a>
  12767. &copy; <a href="https://www.stadiamaps.com/" target="_blank">Stadia Maps</a>
  12768. &copy; <a href="https://openmaptiles.org/" target="_blank">OpenMapTiles</a>
  12769. &copy; <a href="https://www.openstreetmap.org/about/" target="_blank">OpenStreetMap contributors</a>`})}})),e.push(new Yr({name:"Stadia Alidade Smooth",iconUrl:$t("Widgets/Images/ImageryProviders/stadiaAlidadeSmooth.png"),tooltip:`Stadia's custom Alidade Smooth style is designed for maps that use a lot of markers or overlays. It features a muted color scheme and fewer points of interest to allow your added data to shine.
  12770. https://docs.stadiamaps.com/map-styles/alidade-smooth/`,category:"Other",creationFunction:function(){return new z0({url:"https://tiles.stadiamaps.com/tiles/alidade_smooth/",retinaTiles:t,credit:`&copy; <a href="https://www.stadiamaps.com/" target="_blank">Stadia Maps</a>
  12771. &copy; <a href="https://openmaptiles.org/" target="_blank">OpenMapTiles</a>
  12772. &copy; <a href="https://www.openstreetmap.org/about/" target="_blank">OpenStreetMap contributors</a>`})}})),e.push(new Yr({name:"Stadia Alidade Smooth Dark",iconUrl:$t("Widgets/Images/ImageryProviders/stadiaAlidadeSmoothDark.png"),tooltip:`Stadia Alidade Smooth Dark, like its lighter cousin, is also designed to stay out of the way. It just flips the dark mode switch on the color scheme. With the lights out, your data can now literally shine.
  12773. https://docs.stadiamaps.com/map-styles/alidade-smooth-dark/`,category:"Other",creationFunction:function(){return new z0({url:"https://tiles.stadiamaps.com/tiles/alidade_smooth_dark/",retinaTiles:t,credit:`&copy; <a href="https://www.stadiamaps.com/" target="_blank">Stadia Maps</a>
  12774. &copy; <a href="https://openmaptiles.org/" target="_blank">OpenMapTiles</a>
  12775. &copy; <a href="https://www.openstreetmap.org/about/" target="_blank">OpenStreetMap contributors</a>`})}})),e.push(new Yr({name:"Sentinel-2",iconUrl:$t("Widgets/Images/ImageryProviders/sentinel-2.png"),tooltip:"Sentinel-2 cloudless by EOX IT Services GmbH (Contains modified Copernicus Sentinel data 2016 and 2017).",category:"Cesium ion",creationFunction:function(){return w0.fromAssetId(3954)}})),e.push(new Yr({name:"Blue Marble",iconUrl:$t("Widgets/Images/ImageryProviders/blueMarble.png"),tooltip:"Blue Marble Next Generation July, 2004 imagery from NASA.",category:"Cesium ion",creationFunction:function(){return w0.fromAssetId(3845)}})),e.push(new Yr({name:"Earth at night",iconUrl:$t("Widgets/Images/ImageryProviders/earthAtNight.png"),tooltip:"The Earth at night, also known as The Black Marble, is a 500 meter resolution global composite imagery layer released by NASA.",category:"Cesium ion",creationFunction:function(){return w0.fromAssetId(3812)}})),e.push(new Yr({name:"Natural Earth\xA0II",iconUrl:$t("Widgets/Images/ImageryProviders/naturalEarthII.png"),tooltip:`Natural Earth II, darkened for contrast.
  12776. http://www.naturalearthdata.com/`,category:"Cesium ion",creationFunction:function(){return jy.fromUrl($t("Assets/Textures/NaturalEarthII"))}})),e}var g9=_yt;var fho=T(S(),1);function Tyt(){let e=[];return e.push(new Yr({name:"WGS84 Ellipsoid",iconUrl:$t("Widgets/Images/TerrainProviders/Ellipsoid.png"),tooltip:"WGS84 standard ellipsoid, also known as EPSG:4326",category:"Cesium ion",creationFunction:function(){return new Cf}})),e.push(new Yr({name:"Cesium World Terrain",iconUrl:$t("Widgets/Images/TerrainProviders/CesiumWorldTerrain.png"),tooltip:"High-resolution global terrain tileset curated from several datasources and hosted by Cesium ion",category:"Cesium ion",creationFunction:function(){return eT({requestWaterMask:!0,requestVertexNormals:!0})}})),e}var x9=Tyt;var Rho=T(S(),1);var xho=T(S(),1);function Syt(e){return function(t){let n=e._scene.pick(t.position);d(n)&&n.primitive instanceof zs&&(e.tileset=n.primitive),e.pickActive=!1}}function Yxe(e,t){t?e._eventHandler.setInputAction(function(n){let i=e._scene.pick(n.endPosition);d(i)&&i.primitive instanceof zs&&(e.tileset=i.primitive)},_n.MOUSE_MOVE):(e._eventHandler.removeInputAction(_n.MOUSE_MOVE),e.picking=e.picking)}var Cyt={maximumFractionDigits:3};function _9(e){let t=e/1048576;return t<1?t.toLocaleString(void 0,Cyt):Math.round(t).toLocaleString()}function T9(e,t){if(!d(e))return"";let n=t?e._statisticsPerPass[Xo.PICK]:e._statisticsPerPass[Xo.RENDER],i='<ul class="cesium-cesiumInspector-statistics">';return i+=`<li><strong>Visited: </strong>${n.visited.toLocaleString()}</li><li><strong>Selected: </strong>${n.selected.toLocaleString()}</li><li><strong>Commands: </strong>${n.numberOfCommands.toLocaleString()}</li>`,i+="</ul>",t||(i+='<ul class="cesium-cesiumInspector-statistics">',i+=`<li><strong>Requests: </strong>${n.numberOfPendingRequests.toLocaleString()}</li><li><strong>Attempted: </strong>${n.numberOfAttemptedRequests.toLocaleString()}</li><li><strong>Processing: </strong>${n.numberOfTilesProcessing.toLocaleString()}</li><li><strong>Content Ready: </strong>${n.numberOfTilesWithContentReady.toLocaleString()}</li><li><strong>Total: </strong>${n.numberOfTilesTotal.toLocaleString()}</li>`,i+="</ul>",i+='<ul class="cesium-cesiumInspector-statistics">',i+=`<li><strong>Features Selected: </strong>${n.numberOfFeaturesSelected.toLocaleString()}</li><li><strong>Features Loaded: </strong>${n.numberOfFeaturesLoaded.toLocaleString()}</li><li><strong>Points Selected: </strong>${n.numberOfPointsSelected.toLocaleString()}</li><li><strong>Points Loaded: </strong>${n.numberOfPointsLoaded.toLocaleString()}</li><li><strong>Triangles Selected: </strong>${n.numberOfTrianglesSelected.toLocaleString()}</li>`,i+="</ul>",i+='<ul class="cesium-cesiumInspector-statistics">',i+=`<li><strong>Tiles styled: </strong>${n.numberOfTilesStyled.toLocaleString()}</li><li><strong>Features styled: </strong>${n.numberOfFeaturesStyled.toLocaleString()}</li>`,i+="</ul>",i+='<ul class="cesium-cesiumInspector-statistics">',i+=`<li><strong>Children Union Culled: </strong>${n.numberOfTilesCulledWithChildrenUnion.toLocaleString()}</li>`,i+="</ul>",i+='<ul class="cesium-cesiumInspector-statistics">',i+=`<li><strong>Geometry Memory (MB): </strong>${_9(n.geometryByteLength)}</li><li><strong>Texture Memory (MB): </strong>${_9(n.texturesByteLength)}</li><li><strong>Batch Table Memory (MB): </strong>${_9(n.batchTableByteLength)}</li>`,i+="</ul>"),i}function Oxe(){let e=Bi.statistics;return`
  12777. <ul class="cesium-cesiumInspector-statistics">
  12778. <li><strong>Geometry Memory (MB): </strong>${_9(e.geometryByteLength)}</li>
  12779. <li><strong>Texture Memory (MB): </strong>${_9(e.texturesByteLength)}</li>
  12780. </ul>
  12781. `}var Vyt=[{text:"Highlight",value:hl.HIGHLIGHT},{text:"Replace",value:hl.REPLACE},{text:"Mix",value:hl.MIX}],Bxe=new Y(1,1,0,.4),Lyt=new Y,TD=new Y;function ca(e,t){let n=this,i=e.canvas;this._eventHandler=new Ed(i),this._scene=e,this._performanceContainer=t,this._canvas=i,this._performanceDisplay=new U0({container:t}),this._statisticsText="",this._pickStatisticsText="",this._resourceCacheStatisticsText="",this._editorError="",this.performance=!1,this.showStatistics=!0,this.showPickStatistics=!0,this.showResourceCacheStatistics=!1,this.inspectorVisible=!0,this.tilesetVisible=!1,this.displayVisible=!1,this.updateVisible=!1,this.loggingVisible=!1,this.styleVisible=!1,this.tileDebugLabelsVisible=!1,this.optimizationVisible=!1,this.styleString="{}",this.hasEnabledWireframe=!1,this._tileset=void 0,this._feature=void 0,this._tile=void 0,Se.track(this,["performance","inspectorVisible","_statisticsText","_pickStatisticsText","_resourceCacheStatisticsText","_editorError","showPickStatistics","showStatistics","showResourceCacheStatistics","tilesetVisible","displayVisible","updateVisible","loggingVisible","styleVisible","optimizationVisible","tileDebugLabelsVisible","styleString","_feature","_tile","_tileset","hasEnabledWireframe"]),this._properties=Se.observable({}),this.properties=[],Se.defineProperty(this,"properties",function(){let U=[],J=n._properties();for(let z in J)J.hasOwnProperty(z)&&U.push(z);return U});let o=Se.observable();Se.defineProperty(this,"dynamicScreenSpaceError",{get:function(){return o()},set:function(U){o(U),d(n._tileset)&&(n._tileset.dynamicScreenSpaceError=U)}}),this.dynamicScreenSpaceError=!1;let r=Se.observable();Se.defineProperty(this,"colorBlendMode",{get:function(){return r()},set:function(U){r(U),d(n._tileset)&&(n._tileset.colorBlendMode=U,n._scene.requestRender())}}),this.colorBlendMode=hl.HIGHLIGHT;let s=Se.observable(),a=Se.observable();Se.defineProperty(this,"picking",{get:function(){return a()},set:function(U){a(U),U?n._eventHandler.setInputAction(function(J){let z=e.pick(J.endPosition);if(z instanceof Ts?(n.feature=z,n.tile=z.content.tile):d(z)&&d(z.content)?(n.feature=void 0,n.tile=z.content.tile):(n.feature=void 0,n.tile=void 0),!!d(n._tileset)){if(s&&d(z)&&d(z.content)){let ee;e.pickPositionSupported&&(ee=e.pickPosition(J.endPosition),d(ee)&&(n._tileset.debugPickPosition=ee)),n._tileset.debugPickedTile=z.content.tile}else n._tileset.debugPickedTile=void 0;n._scene.requestRender()}},_n.MOUSE_MOVE):(n.feature=void 0,n.tile=void 0,n._eventHandler.removeInputAction(_n.MOUSE_MOVE))}}),this.picking=!0;let c=Se.observable();Se.defineProperty(this,"colorize",{get:function(){return c()},set:function(U){c(U),d(n._tileset)&&(n._tileset.debugColorizeTiles=U,n._scene.requestRender())}}),this.colorize=!1;let l=Se.observable();Se.defineProperty(this,"wireframe",{get:function(){return l()},set:function(U){l(U),d(n._tileset)&&(n._tileset.debugWireframe=U,n._scene.requestRender())}}),this.wireframe=!1;let u=Se.observable();Se.defineProperty(this,"showBoundingVolumes",{get:function(){return u()},set:function(U){u(U),d(n._tileset)&&(n._tileset.debugShowBoundingVolume=U,n._scene.requestRender())}}),this.showBoundingVolumes=!1;let m=Se.observable();Se.defineProperty(this,"showContentBoundingVolumes",{get:function(){return m()},set:function(U){m(U),d(n._tileset)&&(n._tileset.debugShowContentBoundingVolume=U,n._scene.requestRender())}}),this.showContentBoundingVolumes=!1;let p=Se.observable();Se.defineProperty(this,"showRequestVolumes",{get:function(){return p()},set:function(U){p(U),d(n._tileset)&&(n._tileset.debugShowViewerRequestVolume=U,n._scene.requestRender())}}),this.showRequestVolumes=!1;let y=Se.observable();Se.defineProperty(this,"freezeFrame",{get:function(){return y()},set:function(U){y(U),d(n._tileset)&&(n._tileset.debugFreezeFrame=U,n._scene.debugShowFrustumPlanes=U,n._scene.requestRender())}}),this.freezeFrame=!1,Se.defineProperty(this,"showOnlyPickedTileDebugLabel",{get:function(){return s()},set:function(U){s(U),d(n._tileset)&&(n._tileset.debugPickedTileLabelOnly=U,n._scene.requestRender())}}),this.showOnlyPickedTileDebugLabel=!1;let f=Se.observable();Se.defineProperty(this,"showGeometricError",{get:function(){return f()},set:function(U){f(U),d(n._tileset)&&(n._tileset.debugShowGeometricError=U,n._scene.requestRender())}}),this.showGeometricError=!1;let x=Se.observable();Se.defineProperty(this,"showRenderingStatistics",{get:function(){return x()},set:function(U){x(U),d(n._tileset)&&(n._tileset.debugShowRenderingStatistics=U,n._scene.requestRender())}}),this.showRenderingStatistics=!1;let _=Se.observable();Se.defineProperty(this,"showMemoryUsage",{get:function(){return _()},set:function(U){_(U),d(n._tileset)&&(n._tileset.debugShowMemoryUsage=U,n._scene.requestRender())}}),this.showMemoryUsage=!1;let C=Se.observable();Se.defineProperty(this,"showUrl",{get:function(){return C()},set:function(U){C(U),d(n._tileset)&&(n._tileset.debugShowUrl=U,n._scene.requestRender())}}),this.showUrl=!1;let V=Se.observable();Se.defineProperty(this,"maximumScreenSpaceError",{get:function(){return V()},set:function(U){U=Number(U),isNaN(U)||(V(U),d(n._tileset)&&(n._tileset.maximumScreenSpaceError=U))}}),this.maximumScreenSpaceError=16;let L=Se.observable();Se.defineProperty(this,"dynamicScreenSpaceErrorDensity",{get:function(){return L()},set:function(U){U=Number(U),isNaN(U)||(L(U),d(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorDensity=U))}}),this.dynamicScreenSpaceErrorDensity=.00278,this.dynamicScreenSpaceErrorDensitySliderValue=void 0,Se.defineProperty(this,"dynamicScreenSpaceErrorDensitySliderValue",{get:function(){return Math.pow(L(),1/6)},set:function(U){L(Math.pow(U,6))}});let Z=Se.observable();Se.defineProperty(this,"dynamicScreenSpaceErrorFactor",{get:function(){return Z()},set:function(U){U=Number(U),isNaN(U)||(Z(U),d(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorFactor=U))}}),this.dynamicScreenSpaceErrorFactor=4;let G=Syt(this),X=Se.observable();Se.defineProperty(this,"pickActive",{get:function(){return X()},set:function(U){X(U),U?n._eventHandler.setInputAction(G,_n.LEFT_CLICK):n._eventHandler.removeInputAction(_n.LEFT_CLICK)}});let P=Se.observable();Se.defineProperty(this,"pointCloudShading",{get:function(){return P()},set:function(U){P(U),d(n._tileset)&&(n._tileset.pointCloudShading.attenuation=U)}}),this.pointCloudShading=!1;let v=Se.observable();Se.defineProperty(this,"geometricErrorScale",{get:function(){return v()},set:function(U){U=Number(U),isNaN(U)||(v(U),d(n._tileset)&&(n._tileset.pointCloudShading.geometricErrorScale=U))}}),this.geometricErrorScale=1;let F=Se.observable();Se.defineProperty(this,"maximumAttenuation",{get:function(){return F()},set:function(U){U=Number(U),isNaN(U)||(F(U),d(n._tileset)&&(n._tileset.pointCloudShading.maximumAttenuation=U===0?void 0:U))}}),this.maximumAttenuation=0;let M=Se.observable();Se.defineProperty(this,"baseResolution",{get:function(){return M()},set:function(U){U=Number(U),isNaN(U)||(M(U),d(n._tileset)&&(n._tileset.pointCloudShading.baseResolution=U===0?void 0:U))}}),this.baseResolution=0;let b=Se.observable();Se.defineProperty(this,"eyeDomeLighting",{get:function(){return b()},set:function(U){b(U),d(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLighting=U)}}),this.eyeDomeLighting=!1;let R=Se.observable();Se.defineProperty(this,"eyeDomeLightingStrength",{get:function(){return R()},set:function(U){U=Number(U),isNaN(U)||(R(U),d(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLightingStrength=U))}}),this.eyeDomeLightingStrength=1;let E=Se.observable();Se.defineProperty(this,"eyeDomeLightingRadius",{get:function(){return E()},set:function(U){U=Number(U),isNaN(U)||(E(U),d(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLightingRadius=U))}}),this.eyeDomeLightingRadius=1,this.pickActive=!1;let I=Se.observable();Se.defineProperty(this,"skipLevelOfDetail",{get:function(){return I()},set:function(U){I(U),d(n._tileset)&&(n._tileset.skipLevelOfDetail=U)}}),this.skipLevelOfDetail=!0;let w=Se.observable();Se.defineProperty(this,"skipScreenSpaceErrorFactor",{get:function(){return w()},set:function(U){U=Number(U),isNaN(U)||(w(U),d(n._tileset)&&(n._tileset.skipScreenSpaceErrorFactor=U))}}),this.skipScreenSpaceErrorFactor=16;let N=Se.observable();Se.defineProperty(this,"baseScreenSpaceError",{get:function(){return N()},set:function(U){U=Number(U),isNaN(U)||(N(U),d(n._tileset)&&(n._tileset.baseScreenSpaceError=U))}}),this.baseScreenSpaceError=1024;let B=Se.observable();Se.defineProperty(this,"skipLevels",{get:function(){return B()},set:function(U){U=Number(U),isNaN(U)||(B(U),d(n._tileset)&&(n._tileset.skipLevels=U))}}),this.skipLevels=1;let k=Se.observable();Se.defineProperty(this,"immediatelyLoadDesiredLevelOfDetail",{get:function(){return k()},set:function(U){k(U),d(n._tileset)&&(n._tileset.immediatelyLoadDesiredLevelOfDetail=U)}}),this.immediatelyLoadDesiredLevelOfDetail=!1;let O=Se.observable();Se.defineProperty(this,"loadSiblings",{get:function(){return O()},set:function(U){O(U),d(n._tileset)&&(n._tileset.loadSiblings=U)}}),this.loadSiblings=!1,this._style=void 0,this._shouldStyle=!1,this._definedProperties=["properties","dynamicScreenSpaceError","colorBlendMode","picking","colorize","wireframe","showBoundingVolumes","showContentBoundingVolumes","showRequestVolumes","freezeFrame","maximumScreenSpaceError","dynamicScreenSpaceErrorDensity","baseScreenSpaceError","skipScreenSpaceErrorFactor","skipLevelOfDetail","skipLevels","immediatelyLoadDesiredLevelOfDetail","loadSiblings","dynamicScreenSpaceErrorDensitySliderValue","dynamicScreenSpaceErrorFactor","pickActive","showOnlyPickedTileDebugLabel","showGeometricError","showRenderingStatistics","showMemoryUsage","showUrl","pointCloudShading","geometricErrorScale","maximumAttenuation","baseResolution","eyeDomeLighting","eyeDomeLightingStrength","eyeDomeLightingRadius"],this._removePostRenderEvent=e.postRender.addEventListener(function(){n._update()}),d(this._tileset)||Yxe(this,!0)}Object.defineProperties(ca.prototype,{scene:{get:function(){return this._scene}},performanceContainer:{get:function(){return this._performanceContainer}},statisticsText:{get:function(){return this._statisticsText}},pickStatisticsText:{get:function(){return this._pickStatisticsText}},resourceCacheStatisticsText:{get:function(){return this._resourceCacheStatisticsText}},colorBlendModes:{get:function(){return Vyt}},editorError:{get:function(){return this._editorError}},tileset:{get:function(){return this._tileset},set:function(e){if(this._tileset=e,this._style=void 0,this.styleString="{}",this.feature=void 0,this.tile=void 0,d(e)){this._properties(e.properties);let t=["colorize","wireframe","showBoundingVolumes","showContentBoundingVolumes","showRequestVolumes","freezeFrame","showOnlyPickedTileDebugLabel","showGeometricError","showRenderingStatistics","showMemoryUsage","showUrl"],n=t.length;for(let o=0;o<n;++o){let r=t[o];this[r]=this[r]}this.maximumScreenSpaceError=e.maximumScreenSpaceError,this.dynamicScreenSpaceError=e.dynamicScreenSpaceError,this.dynamicScreenSpaceErrorDensity=e.dynamicScreenSpaceErrorDensity,this.dynamicScreenSpaceErrorFactor=e.dynamicScreenSpaceErrorFactor,this.colorBlendMode=e.colorBlendMode,this.skipLevelOfDetail=e.skipLevelOfDetail,this.skipScreenSpaceErrorFactor=e.skipScreenSpaceErrorFactor,this.baseScreenSpaceError=e.baseScreenSpaceError,this.skipLevels=e.skipLevels,this.immediatelyLoadDesiredLevelOfDetail=e.immediatelyLoadDesiredLevelOfDetail,this.loadSiblings=e.loadSiblings,this.hasEnabledWireframe=e._enableDebugWireframe;let i=e.pointCloudShading;this.pointCloudShading=i.attenuation,this.geometricErrorScale=i.geometricErrorScale,this.maximumAttenuation=i.maximumAttenuation?i.maximumAttenuation:0,this.baseResolution=i.baseResolution?i.baseResolution:0,this.eyeDomeLighting=i.eyeDomeLighting,this.eyeDomeLightingStrength=i.eyeDomeLightingStrength,this.eyeDomeLightingRadius=i.eyeDomeLightingRadius,this._scene.requestRender()}else this._properties({});this._statisticsText=T9(e,!1),this._pickStatisticsText=T9(e,!0),this._resourceCacheStatisticsText=Oxe(),Yxe(this,!1)}},feature:{get:function(){return this._feature},set:function(e){if(this._feature===e)return;let t=this._feature;d(t)&&!t.content.isDestroyed()&&(!this.colorize&&d(this._style)?t.color=d(this._style.color)?this._style.color.evaluateColor(t,Lyt):Y.WHITE:t.color=TD,this._scene.requestRender()),d(e)&&(Y.clone(e.color,TD),e.color=Bxe,this._scene.requestRender()),this._feature=e}},tile:{get:function(){return this._tile},set:function(e){if(this._tile===e)return;let t=this._tile;d(t)&&!t.isDestroyed()&&!o8(t.content)&&(t.color=TD,this._scene.requestRender()),d(e)&&!o8(e.content)&&(Y.clone(e.color,TD),e.color=Bxe,this._scene.requestRender()),this._tile=e}}});function o8(e){if(!d(e))return!1;if(e.featuresLength>0)return!0;let t=e.innerContents;if(d(t)){let n=t.length;for(let i=0;i<n;++i)if(!o8(t[i]))return!1;return!0}return!1}ca.prototype.togglePickTileset=function(){this.pickActive=!this.pickActive};ca.prototype.toggleInspector=function(){this.inspectorVisible=!this.inspectorVisible};ca.prototype.toggleTileset=function(){this.tilesetVisible=!this.tilesetVisible};ca.prototype.toggleDisplay=function(){this.displayVisible=!this.displayVisible};ca.prototype.toggleUpdate=function(){this.updateVisible=!this.updateVisible};ca.prototype.toggleLogging=function(){this.loggingVisible=!this.loggingVisible};ca.prototype.toggleStyle=function(){this.styleVisible=!this.styleVisible};ca.prototype.toggleTileDebugLabels=function(){this.tileDebugLabelsVisible=!this.tileDebugLabelsVisible};ca.prototype.toggleOptimization=function(){this.optimizationVisible=!this.optimizationVisible};ca.prototype.trimTilesCache=function(){d(this._tileset)&&this._tileset.trimLoadedTiles()};ca.prototype.compileStyle=function(){let e=this._tileset;if(!(!d(e)||this.styleString===JSON.stringify(e.style))){this._editorError="";try{this.styleString.length===0&&(this.styleString="{}"),this._style=new CT(JSON.parse(this.styleString)),this._shouldStyle=!0,this._scene.requestRender()}catch(t){this._editorError=t.toString()}this.feature=this._feature,this.tile=this._tile}};ca.prototype.styleEditorKeyPress=function(e,t){if(t.keyCode===9){t.preventDefault();let n=t.target,i=n.selectionStart,o=n.selectionEnd,r=o,a=n.value.slice(i,o).split(`
  12782. `),c=a.length,l;if(t.shiftKey)for(l=0;l<c;++l)a[l][0]===" "&&(a[l][1]===" "?(a[l]=a[l].substr(2),r-=2):(a[l]=a[l].substr(1),r-=1));else for(l=0;l<c;++l)a[l]=` ${a[l]}`,r+=2;let u=a.join(`
  12783. `);n.value=n.value.slice(0,i)+u+n.value.slice(o),n.selectionStart=i!==o?i:r,n.selectionEnd=r}else t.ctrlKey&&(t.keyCode===10||t.keyCode===13)&&this.compileStyle();return!0};ca.prototype._update=function(){let e=this._tileset;if(this.performance&&this._performanceDisplay.update(),d(e)){if(e.isDestroyed()){this.tile=void 0,this.feature=void 0,this.tileset=void 0;return}let t=e.style;this._style!==e.style&&(this._shouldStyle?(e.style=this._style,this._shouldStyle=!1):(this._style=t,this.styleString=JSON.stringify(t.style,null," ")))}this.showStatistics&&(this._statisticsText=T9(e,!1),this._pickStatisticsText=T9(e,!0),this._resourceCacheStatisticsText=Oxe())};ca.prototype.isDestroyed=function(){return!1};ca.prototype.destroy=function(){this._eventHandler.destroy(),this._removePostRenderEvent();let e=this;return this._definedProperties.forEach(function(t){Se.getObservable(e,t).dispose()}),ue(this)};ca.getStatistics=T9;var S9=ca;function SD(e,t){e=En(e);let n=document.createElement("div"),i=document.createElement("div");i.setAttribute("data-bind","visible: performance");let o=new S9(t,i);this._viewModel=o,this._container=e,this._element=n;let r=document.createElement("div");r.textContent="3D Tiles Inspector",r.className="cesium-cesiumInspector-button",r.setAttribute("data-bind","click: toggleInspector"),n.appendChild(r),n.className="cesium-cesiumInspector cesium-3DTilesInspector",n.setAttribute("data-bind",'css: { "cesium-cesiumInspector-visible" : inspectorVisible, "cesium-cesiumInspector-hidden" : !inspectorVisible}'),e.appendChild(n);let s=document.createElement("div");s.className="cesium-cesiumInspector-dropDown",n.appendChild(s);let a=Za.createSection,c=Za.createCheckbox,l=Za.createRangeInput,u=Za.createButton,m=a(s,"Tileset","tilesetVisible","toggleTileset"),p=a(s,"Display","displayVisible","toggleDisplay"),y=a(s,"Update","updateVisible","toggleUpdate"),f=a(s,"Logging","loggingVisible","toggleLogging"),x=a(s,"Tile Debug Labels","tileDebugLabelsVisible","toggleTileDebugLabels"),_=a(s,"Style","styleVisible","toggleStyle"),C=a(s,"Optimization","optimizationVisible","toggleOptimization"),V=document.createElement("div");V.className="field-group";let L=document.createElement("label");L.className="field-label",L.appendChild(document.createTextNode("Properties: "));let Z=document.createElement("div");Z.setAttribute("data-bind","text: properties"),V.appendChild(L),V.appendChild(Z),m.appendChild(V),m.appendChild(u("Pick Tileset","togglePickTileset","pickActive")),m.appendChild(u("Trim Tiles Cache","trimTilesCache")),m.appendChild(c("Enable Picking","picking")),p.appendChild(c("Colorize","colorize"));let G=p.appendChild(c("Wireframe","wireframe","_tileset === undefined || hasEnabledWireframe")),X=document.createElement("p");X.setAttribute("data-bind","visible: _tileset !== undefined && !hasEnabledWireframe"),X.setAttribute("class","cesium-3DTilesInspector-disabledElementsInfo"),X.innerText="Set enableDebugWireframe to true in the tileset constructor to enable this option.",G.appendChild(X),p.appendChild(c("Bounding Volumes","showBoundingVolumes")),p.appendChild(c("Content Volumes","showContentBoundingVolumes")),p.appendChild(c("Request Volumes","showRequestVolumes")),p.appendChild(c("Point Cloud Shading","pointCloudShading"));let P=document.createElement("div");P.setAttribute("data-bind","visible: pointCloudShading"),P.appendChild(l("Geometric Error Scale","geometricErrorScale",0,2,.01)),P.appendChild(l("Maximum Attenuation","maximumAttenuation",0,32,1)),P.appendChild(l("Base Resolution","baseResolution",0,1,.01)),P.appendChild(c("Eye Dome Lighting (EDL)","eyeDomeLighting")),p.appendChild(P);let v=document.createElement("div");v.setAttribute("data-bind","visible: eyeDomeLighting"),v.appendChild(l("EDL Strength","eyeDomeLightingStrength",0,2,.1)),v.appendChild(l("EDL Radius","eyeDomeLightingRadius",0,4,.1)),P.appendChild(v),y.appendChild(c("Freeze Frame","freezeFrame")),y.appendChild(c("Dynamic Screen Space Error","dynamicScreenSpaceError"));let F=document.createElement("div");F.appendChild(l("Maximum Screen Space Error","maximumScreenSpaceError",0,128,1)),y.appendChild(F);let M=document.createElement("div");M.setAttribute("data-bind","visible: dynamicScreenSpaceError"),M.appendChild(l("Screen Space Error Density","dynamicScreenSpaceErrorDensitySliderValue",0,1,.005,"dynamicScreenSpaceErrorDensity")),M.appendChild(l("Screen Space Error Factor","dynamicScreenSpaceErrorFactor",1,10,.1)),y.appendChild(M),f.appendChild(c("Performance","performance")),f.appendChild(i),f.appendChild(c("Statistics","showStatistics"));let b=document.createElement("div");b.className="cesium-3dTilesInspector-statistics",b.setAttribute("data-bind","html: statisticsText, visible: showStatistics"),f.appendChild(b),f.appendChild(c("Pick Statistics","showPickStatistics"));let R=document.createElement("div");R.className="cesium-3dTilesInspector-statistics",R.setAttribute("data-bind","html: pickStatisticsText, visible: showPickStatistics"),f.appendChild(R),f.appendChild(c("Resource Cache Statistics","showResourceCacheStatistics"));let E=document.createElement("div");E.className="cesium-3dTilesInspector-statistics",E.setAttribute("data-bind","html: resourceCacheStatisticsText, visible: showResourceCacheStatistics"),f.appendChild(E);let I=document.createElement("div");_.appendChild(I),I.appendChild(document.createTextNode("Color Blend Mode: "));let w=document.createElement("select");w.setAttribute("data-bind",'options: colorBlendModes, optionsText: "text", optionsValue: "value", value: colorBlendMode'),I.appendChild(w);let N=document.createElement("textarea");N.setAttribute("data-bind","textInput: styleString, event: { keydown: styleEditorKeyPress }"),I.className="cesium-cesiumInspector-styleEditor",I.appendChild(N);let B=u("Compile (Ctrl+Enter)","compileStyle");I.appendChild(B);let k=document.createElement("div");k.className="cesium-cesiumInspector-error",k.setAttribute("data-bind","text: editorError"),I.appendChild(k),x.appendChild(c("Show Picked Only","showOnlyPickedTileDebugLabel")),x.appendChild(c("Geometric Error","showGeometricError")),x.appendChild(c("Rendering Statistics","showRenderingStatistics")),x.appendChild(c("Memory Usage (MB)","showMemoryUsage")),x.appendChild(c("Url","showUrl")),C.appendChild(c("Skip Tile LODs","skipLevelOfDetail"));let O=document.createElement("div");O.appendChild(l("Skip SSE Factor","skipScreenSpaceErrorFactor",1,50,1)),C.appendChild(O);let U=document.createElement("div");U.appendChild(l("SSE before skipping LOD","baseScreenSpaceError",0,4096,1)),C.appendChild(U);let J=document.createElement("div");J.appendChild(l("Min. levels to skip","skipLevels",0,10,1)),C.appendChild(J),C.appendChild(c("Load only tiles that meet the max SSE.","immediatelyLoadDesiredLevelOfDetail")),C.appendChild(c("Load siblings of visible tiles","loadSiblings")),Se.applyBindings(o,n)}Object.defineProperties(SD.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});SD.prototype.isDestroyed=function(){return!1};SD.prototype.destroy=function(){return Se.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),ue(this)};var C9=SD;var Uho=T(S(),1);var Who=T(S(),1);function Ryt(e){let t;if(d(e)){t="Command Statistics";let n=e.commandsInFrustums;for(let i in n)if(n.hasOwnProperty(i)){let o=parseInt(i,10),r;if(o===7)r="1, 2 and 3";else{let s=[];for(let a=2;a>=0;a--){let c=Math.pow(2,a);o>=c&&(s.push(a+1),o-=c)}r=s.reverse().join(" and ")}t+=`<br>&nbsp;&nbsp;&nbsp;&nbsp;${n[i]} in frustum ${r}`}t+=`<br>Total: ${e.totalCommands}`}return t}function r8(e,t,n){let i=Math.min(n,t);return i=Math.max(i,e),i}var Zyt=new Sn,Gyt=new h;function V9(e,t){let n=this,i=e.canvas,o=new Ed(i);this._eventHandler=o,this._scene=e,this._canvas=i,this._primitive=void 0,this._tile=void 0,this._modelMatrixPrimitive=void 0,this._performanceDisplay=void 0,this._performanceContainer=t;let r=this._scene.globe;r.depthTestAgainstTerrain=!0,this.frustums=!1,this.frustumPlanes=!1,this.performance=!1,this.shaderCacheText="",this.primitiveBoundingSphere=!1,this.primitiveReferenceFrame=!1,this.filterPrimitive=!1,this.tileBoundingSphere=!1,this.filterTile=!1,this.wireframe=!1,this.depthFrustum=1,this._numberOfFrustums=1,this.suspendUpdates=!1,this.tileCoordinates=!1,this.frustumStatisticText=!1,this.tileText="",this.hasPickedPrimitive=!1,this.hasPickedTile=!1,this.pickPrimitiveActive=!1,this.pickTileActive=!1,this.dropDownVisible=!0,this.generalVisible=!0,this.primitivesVisible=!1,this.terrainVisible=!1,this.depthFrustumText="",Se.track(this,["frustums","frustumPlanes","performance","shaderCacheText","primitiveBoundingSphere","primitiveReferenceFrame","filterPrimitive","tileBoundingSphere","filterTile","wireframe","depthFrustum","suspendUpdates","tileCoordinates","frustumStatisticText","tileText","hasPickedPrimitive","hasPickedTile","pickPrimitiveActive","pickTileActive","dropDownVisible","generalVisible","primitivesVisible","terrainVisible","depthFrustumText"]),this._toggleDropDown=Cn(function(){n.dropDownVisible=!n.dropDownVisible}),this._toggleGeneral=Cn(function(){n.generalVisible=!n.generalVisible}),this._togglePrimitives=Cn(function(){n.primitivesVisible=!n.primitivesVisible}),this._toggleTerrain=Cn(function(){n.terrainVisible=!n.terrainVisible}),this._frustumsSubscription=Se.getObservable(this,"frustums").subscribe(function(l){n._scene.debugShowFrustums=l,n._scene.requestRender()}),this._frustumPlanesSubscription=Se.getObservable(this,"frustumPlanes").subscribe(function(l){n._scene.debugShowFrustumPlanes=l,n._scene.requestRender()}),this._performanceSubscription=Se.getObservable(this,"performance").subscribe(function(l){l?n._performanceDisplay=new U0({container:n._performanceContainer}):n._performanceContainer.innerHTML=""}),this._showPrimitiveBoundingSphere=Cn(function(){return n._primitive.debugShowBoundingVolume=n.primitiveBoundingSphere,n._scene.requestRender(),!0}),this._primitiveBoundingSphereSubscription=Se.getObservable(this,"primitiveBoundingSphere").subscribe(function(){n._showPrimitiveBoundingSphere()}),this._showPrimitiveReferenceFrame=Cn(function(){if(n.primitiveReferenceFrame){let l=n._primitive.modelMatrix;n._modelMatrixPrimitive=new SF({modelMatrix:l}),n._scene.primitives.add(n._modelMatrixPrimitive)}else d(n._modelMatrixPrimitive)&&(n._scene.primitives.remove(n._modelMatrixPrimitive),n._modelMatrixPrimitive=void 0);return n._scene.requestRender(),!0}),this._primitiveReferenceFrameSubscription=Se.getObservable(this,"primitiveReferenceFrame").subscribe(function(){n._showPrimitiveReferenceFrame()}),this._doFilterPrimitive=Cn(function(){return n.filterPrimitive?n._scene.debugCommandFilter=function(l){return d(n._modelMatrixPrimitive)&&l.owner===n._modelMatrixPrimitive._primitive?!0:d(n._primitive)?l.owner===n._primitive||l.owner===n._primitive._billboardCollection||l.owner.primitive===n._primitive:!1}:n._scene.debugCommandFilter=void 0,!0}),this._filterPrimitiveSubscription=Se.getObservable(this,"filterPrimitive").subscribe(function(){n._doFilterPrimitive(),n._scene.requestRender()}),this._wireframeSubscription=Se.getObservable(this,"wireframe").subscribe(function(l){r._surface.tileProvider._debug.wireframe=l,n._scene.requestRender()}),this._depthFrustumSubscription=Se.getObservable(this,"depthFrustum").subscribe(function(l){n._scene.debugShowDepthFrustum=l,n._scene.requestRender()}),this._incrementDepthFrustum=Cn(function(){let l=n.depthFrustum+1;return n.depthFrustum=r8(1,n._numberOfFrustums,l),n._scene.requestRender(),!0}),this._decrementDepthFrustum=Cn(function(){let l=n.depthFrustum-1;return n.depthFrustum=r8(1,n._numberOfFrustums,l),n._scene.requestRender(),!0}),this._suspendUpdatesSubscription=Se.getObservable(this,"suspendUpdates").subscribe(function(l){r._surface._debug.suspendLodUpdate=l,l||(n.filterTile=!1)});let s;this._showTileCoordinates=Cn(function(){return n.tileCoordinates&&!d(s)?s=e.imageryLayers.addImageryProvider(new NF({tilingScheme:e.terrainProvider.tilingScheme})):!n.tileCoordinates&&d(s)&&(e.imageryLayers.remove(s),s=void 0),!0}),this._tileCoordinatesSubscription=Se.getObservable(this,"tileCoordinates").subscribe(function(){n._showTileCoordinates(),n._scene.requestRender()}),this._tileBoundingSphereSubscription=Se.getObservable(this,"tileBoundingSphere").subscribe(function(){n._showTileBoundingSphere(),n._scene.requestRender()}),this._showTileBoundingSphere=Cn(function(){return n.tileBoundingSphere?r._surface.tileProvider._debug.boundingSphereTile=n._tile:r._surface.tileProvider._debug.boundingSphereTile=void 0,n._scene.requestRender(),!0}),this._doFilterTile=Cn(function(){return n.filterTile?(n.suspendUpdates=!0,r._surface._tilesToRender=[],d(n._tile)&&n._tile.renderable&&r._surface._tilesToRender.push(n._tile)):n.suspendUpdates=!1,!0}),this._filterTileSubscription=Se.getObservable(this,"filterTile").subscribe(function(){n.doFilterTile(),n._scene.requestRender()});function a(l){let u=n._scene.pick({x:l.position.x,y:l.position.y});d(u)&&(n.primitive=d(u.collection)?u.collection:u.primitive),n._scene.requestRender(),n.pickPrimitiveActive=!1}this._pickPrimitive=Cn(function(){n.pickPrimitiveActive=!n.pickPrimitiveActive}),this._pickPrimitiveActiveSubscription=Se.getObservable(this,"pickPrimitiveActive").subscribe(function(l){l?o.setInputAction(a,_n.LEFT_CLICK):o.removeInputAction(_n.LEFT_CLICK)});function c(l){let u,m=r.ellipsoid,p=n._scene.camera.getPickRay(l.position,Zyt),y=r.pick(p,n._scene,Gyt);if(d(y)){let f=m.cartesianToCartographic(y),x=r._surface.tileProvider._tilesToRenderByTextureCount;for(let _=0;!u&&_<x.length;++_){let C=x[_];if(d(C))for(let V=0;!u&&V<C.length;++V){let L=C[V];de.contains(L.rectangle,f)&&(u=L)}}}n.tile=u,n.pickTileActive=!1}this._pickTile=Cn(function(){n.pickTileActive=!n.pickTileActive}),this._pickTileActiveSubscription=Se.getObservable(this,"pickTileActive").subscribe(function(l){l?o.setInputAction(c,_n.LEFT_CLICK):o.removeInputAction(_n.LEFT_CLICK)}),this._removePostRenderEvent=e.postRender.addEventListener(function(){n._update()})}Object.defineProperties(V9.prototype,{scene:{get:function(){return this._scene}},performanceContainer:{get:function(){return this._performanceContainer}},toggleDropDown:{get:function(){return this._toggleDropDown}},showPrimitiveBoundingSphere:{get:function(){return this._showPrimitiveBoundingSphere}},showPrimitiveReferenceFrame:{get:function(){return this._showPrimitiveReferenceFrame}},doFilterPrimitive:{get:function(){return this._doFilterPrimitive}},incrementDepthFrustum:{get:function(){return this._incrementDepthFrustum}},decrementDepthFrustum:{get:function(){return this._decrementDepthFrustum}},showTileCoordinates:{get:function(){return this._showTileCoordinates}},showTileBoundingSphere:{get:function(){return this._showTileBoundingSphere}},doFilterTile:{get:function(){return this._doFilterTile}},toggleGeneral:{get:function(){return this._toggleGeneral}},togglePrimitives:{get:function(){return this._togglePrimitives}},toggleTerrain:{get:function(){return this._toggleTerrain}},pickPrimitive:{get:function(){return this._pickPrimitive}},pickTile:{get:function(){return this._pickTile}},selectParent:{get:function(){let e=this;return Cn(function(){e.tile=e.tile.parent})}},selectNW:{get:function(){let e=this;return Cn(function(){e.tile=e.tile.northwestChild})}},selectNE:{get:function(){let e=this;return Cn(function(){e.tile=e.tile.northeastChild})}},selectSW:{get:function(){let e=this;return Cn(function(){e.tile=e.tile.southwestChild})}},selectSE:{get:function(){let e=this;return Cn(function(){e.tile=e.tile.southeastChild})}},primitive:{get:function(){return this._primitive},set:function(e){let t=this._primitive;e!==t&&(this.hasPickedPrimitive=!0,d(t)&&(t.debugShowBoundingVolume=!1),this._scene.debugCommandFilter=void 0,d(this._modelMatrixPrimitive)&&(this._scene.primitives.remove(this._modelMatrixPrimitive),this._modelMatrixPrimitive=void 0),this._primitive=e,e.show=!1,setTimeout(function(){e.show=!0},50),this.showPrimitiveBoundingSphere(),this.showPrimitiveReferenceFrame(),this.doFilterPrimitive())}},tile:{get:function(){return this._tile},set:function(e){if(d(e)){this.hasPickedTile=!0;let t=this._tile;if(e!==t){this.tileText=`L: ${e.level} X: ${e.x} Y: ${e.y}`,this.tileText+=`<br>SW corner: ${e.rectangle.west}, ${e.rectangle.south}`,this.tileText+=`<br>NE corner: ${e.rectangle.east}, ${e.rectangle.north}`;let n=e.data;d(n)&&d(n.tileBoundingRegion)?this.tileText+=`<br>Min: ${n.tileBoundingRegion.minimumHeight} Max: ${n.tileBoundingRegion.maximumHeight}`:this.tileText+="<br>(Tile is not loaded)"}this._tile=e,this.showTileBoundingSphere(),this.doFilterTile()}else this.hasPickedTile=!1,this._tile=void 0}}});V9.prototype._update=function(){this.frustums&&(this.frustumStatisticText=Ryt(this._scene.debugFrustumStatistics));let e=this._scene.numberOfFrustums;this._numberOfFrustums=e,this.depthFrustum=r8(1,e,this.depthFrustum),this.depthFrustumText=`${this.depthFrustum} of ${e}`,this.performance&&this._performanceDisplay.update(),this.primitiveReferenceFrame&&(this._modelMatrixPrimitive.modelMatrix=this._primitive.modelMatrix),this.shaderCacheText=`Cached shaders: ${this._scene.context.shaderCache.numberOfShaders}`};V9.prototype.isDestroyed=function(){return!1};V9.prototype.destroy=function(){return this._eventHandler.destroy(),this._removePostRenderEvent(),this._frustumsSubscription.dispose(),this._frustumPlanesSubscription.dispose(),this._performanceSubscription.dispose(),this._primitiveBoundingSphereSubscription.dispose(),this._primitiveReferenceFrameSubscription.dispose(),this._filterPrimitiveSubscription.dispose(),this._wireframeSubscription.dispose(),this._depthFrustumSubscription.dispose(),this._suspendUpdatesSubscription.dispose(),this._tileCoordinatesSubscription.dispose(),this._tileBoundingSphereSubscription.dispose(),this._filterTileSubscription.dispose(),this._pickPrimitiveActiveSubscription.dispose(),this._pickTileActiveSubscription.dispose(),ue(this)};var L9=V9;function CD(e,t){e=En(e);let n=document.createElement("div"),i=new L9(t,n);this._viewModel=i,this._container=e;let o=document.createElement("div");this._element=o;let r=document.createElement("div");r.textContent="Cesium Inspector",r.className="cesium-cesiumInspector-button",r.setAttribute("data-bind","click: toggleDropDown"),o.appendChild(r),o.className="cesium-cesiumInspector",o.setAttribute("data-bind",'css: { "cesium-cesiumInspector-visible" : dropDownVisible, "cesium-cesiumInspector-hidden" : !dropDownVisible }'),e.appendChild(this._element);let s=document.createElement("div");s.className="cesium-cesiumInspector-dropDown",o.appendChild(s);let a=Za.createSection,c=Za.createCheckbox,l=a(s,"General","generalVisible","toggleGeneral"),u=c("Show Frustums","frustums"),m=document.createElement("div");m.className="cesium-cesiumInspector-frustumStatistics",m.setAttribute("data-bind","visible: frustums, html: frustumStatisticText"),u.appendChild(m),l.appendChild(u),l.appendChild(c("Show Frustum Planes","frustumPlanes")),l.appendChild(c("Performance Display","performance")),n.className="cesium-cesiumInspector-performanceDisplay",l.appendChild(n);let p=document.createElement("div");p.className="cesium-cesiumInspector-shaderCache",p.setAttribute("data-bind","html: shaderCacheText"),l.appendChild(p);let y=document.createElement("div");l.appendChild(y);let f=document.createElement("span");f.setAttribute("data-bind",'html: "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Frustum:"'),y.appendChild(f);let x=document.createElement("span");x.setAttribute("data-bind","text: depthFrustumText"),y.appendChild(x);let _=document.createElement("input");_.type="button",_.value="-",_.className="cesium-cesiumInspector-pickButton",_.setAttribute("data-bind","click: decrementDepthFrustum"),y.appendChild(_);let C=document.createElement("input");C.type="button",C.value="+",C.className="cesium-cesiumInspector-pickButton",C.setAttribute("data-bind","click: incrementDepthFrustum"),y.appendChild(C);let V=a(s,"Primitives","primitivesVisible","togglePrimitives"),L=document.createElement("div");L.className="cesium-cesiumInspector-pickSection",V.appendChild(L);let Z=document.createElement("input");Z.type="button",Z.value="Pick a primitive",Z.className="cesium-cesiumInspector-pickButton",Z.setAttribute("data-bind",'css: {"cesium-cesiumInspector-pickButtonHighlight" : pickPrimitiveActive}, click: pickPrimitive');let G=document.createElement("div");G.className="cesium-cesiumInspector-center",G.appendChild(Z),L.appendChild(G),L.appendChild(c("Show bounding sphere","primitiveBoundingSphere","hasPickedPrimitive")),L.appendChild(c("Show reference frame","primitiveReferenceFrame","hasPickedPrimitive")),this._primitiveOnly=c("Show only selected","filterPrimitive","hasPickedPrimitive"),L.appendChild(this._primitiveOnly);let X=a(s,"Terrain","terrainVisible","toggleTerrain"),P=document.createElement("div");P.className="cesium-cesiumInspector-pickSection",X.appendChild(P);let v=document.createElement("input");v.type="button",v.value="Pick a tile",v.className="cesium-cesiumInspector-pickButton",v.setAttribute("data-bind",'css: {"cesium-cesiumInspector-pickButtonHighlight" : pickTileActive}, click: pickTile'),G=document.createElement("div"),G.appendChild(v),G.className="cesium-cesiumInspector-center",P.appendChild(G);let F=document.createElement("div");P.appendChild(F);let M=document.createElement("input");M.type="button",M.value="Parent",M.className="cesium-cesiumInspector-pickButton",M.setAttribute("data-bind","click: selectParent");let b=document.createElement("input");b.type="button",b.value="NW",b.className="cesium-cesiumInspector-pickButton",b.setAttribute("data-bind","click: selectNW");let R=document.createElement("input");R.type="button",R.value="NE",R.className="cesium-cesiumInspector-pickButton",R.setAttribute("data-bind","click: selectNE");let E=document.createElement("input");E.type="button",E.value="SW",E.className="cesium-cesiumInspector-pickButton",E.setAttribute("data-bind","click: selectSW");let I=document.createElement("input");I.type="button",I.value="SE",I.className="cesium-cesiumInspector-pickButton",I.setAttribute("data-bind","click: selectSE");let w=document.createElement("div");w.className="cesium-cesiumInspector-tileText",F.className="cesium-cesiumInspector-frustumStatistics",F.appendChild(w),F.setAttribute("data-bind","visible: hasPickedTile"),w.setAttribute("data-bind","html: tileText");let N=document.createElement("div");N.className="cesium-cesiumInspector-relativeText",N.textContent="Select relative:",F.appendChild(N);let B=document.createElement("table"),k=document.createElement("tr"),O=document.createElement("tr"),U=document.createElement("td");U.appendChild(M);let J=document.createElement("td");J.appendChild(b);let z=document.createElement("td");z.appendChild(R),k.appendChild(U),k.appendChild(J),k.appendChild(z);let ee=document.createElement("td"),K=document.createElement("td");K.appendChild(E);let j=document.createElement("td");j.appendChild(I),O.appendChild(ee),O.appendChild(K),O.appendChild(j),B.appendChild(k),B.appendChild(O),F.appendChild(B),P.appendChild(c("Show bounding volume","tileBoundingSphere","hasPickedTile")),P.appendChild(c("Show only selected","filterTile","hasPickedTile")),X.appendChild(c("Wireframe","wireframe")),X.appendChild(c("Suspend LOD update","suspendUpdates")),X.appendChild(c("Show tile coordinates","tileCoordinates")),Se.applyBindings(i,this._element)}Object.defineProperties(CD.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});CD.prototype.isDestroyed=function(){return!1};CD.prototype.destroy=function(){return Se.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),ue(this)};var R9=CD;var $ho=T(S(),1);var Kho=T(S(),1);function VD(e,t){d(t)||(t=document.body),t=En(t);let n=this,i=Se.observable(lr.fullscreen),o=Se.observable(lr.enabled),r=t.ownerDocument;this.isFullscreen=void 0,Se.defineProperty(this,"isFullscreen",{get:function(){return i()}}),this.isFullscreenEnabled=void 0,Se.defineProperty(this,"isFullscreenEnabled",{get:function(){return o()},set:function(s){o(s&&lr.enabled)}}),this.tooltip=void 0,Se.defineProperty(this,"tooltip",function(){return this.isFullscreenEnabled?i()?"Exit full screen":"Full screen":"Full screen unavailable"}),this._command=Cn(function(){lr.fullscreen?lr.exitFullscreen():lr.requestFullscreen(n._fullscreenElement)},Se.getObservable(this,"isFullscreenEnabled")),this._fullscreenElement=g(En(e),r.body),this._callback=function(){i(lr.fullscreen)},r.addEventListener(lr.changeEventName,this._callback)}Object.defineProperties(VD.prototype,{fullscreenElement:{get:function(){return this._fullscreenElement},set:function(e){this._fullscreenElement=e}},command:{get:function(){return this._command}}});VD.prototype.isDestroyed=function(){return!1};VD.prototype.destroy=function(){document.removeEventListener(lr.changeEventName,this._callback),ue(this)};var Z9=VD;var Eyt="M 83.96875 17.5625 L 83.96875 17.59375 L 76.65625 24.875 L 97.09375 24.96875 L 76.09375 45.96875 L 81.9375 51.8125 L 102.78125 30.9375 L 102.875 51.15625 L 110.15625 43.875 L 110.1875 17.59375 L 83.96875 17.5625 z M 44.125 17.59375 L 17.90625 17.625 L 17.9375 43.90625 L 25.21875 51.1875 L 25.3125 30.96875 L 46.15625 51.8125 L 52 45.96875 L 31 25 L 51.4375 24.90625 L 44.125 17.59375 z M 46.0625 76.03125 L 25.1875 96.875 L 25.09375 76.65625 L 17.8125 83.9375 L 17.8125 110.21875 L 44 110.25 L 51.3125 102.9375 L 30.90625 102.84375 L 51.875 81.875 L 46.0625 76.03125 z M 82 76.15625 L 76.15625 82 L 97.15625 103 L 76.71875 103.0625 L 84.03125 110.375 L 110.25 110.34375 L 110.21875 84.0625 L 102.9375 76.8125 L 102.84375 97 L 82 76.15625 z",Xyt="M 104.34375 17.5625 L 83.5 38.4375 L 83.40625 18.21875 L 76.125 25.5 L 76.09375 51.78125 L 102.3125 51.8125 L 102.3125 51.78125 L 109.625 44.5 L 89.1875 44.40625 L 110.1875 23.40625 L 104.34375 17.5625 z M 23.75 17.59375 L 17.90625 23.4375 L 38.90625 44.4375 L 18.5 44.53125 L 25.78125 51.8125 L 52 51.78125 L 51.96875 25.53125 L 44.6875 18.25 L 44.625 38.46875 L 23.75 17.59375 z M 25.6875 76.03125 L 18.375 83.3125 L 38.78125 83.40625 L 17.8125 104.40625 L 23.625 110.25 L 44.5 89.375 L 44.59375 109.59375 L 51.875 102.3125 L 51.875 76.0625 L 25.6875 76.03125 z M 102.375 76.15625 L 76.15625 76.1875 L 76.1875 102.4375 L 83.46875 109.71875 L 83.5625 89.53125 L 104.40625 110.375 L 110.25 104.53125 L 89.25 83.53125 L 109.6875 83.46875 L 102.375 76.15625 z";function LD(e,t){e=En(e);let n=new Z9(t,e);n._exitFullScreenPath=Xyt,n._enterFullScreenPath=Eyt;let i=document.createElement("button");i.type="button",i.className="cesium-button cesium-fullscreenButton",i.setAttribute("data-bind","attr: { title: tooltip },click: command,enable: isFullscreenEnabled,cesiumSvgPath: { path: isFullscreen ? _exitFullScreenPath : _enterFullScreenPath, width: 128, height: 128 }"),e.appendChild(i),Se.applyBindings(n,i),this._container=e,this._viewModel=n,this._element=i}Object.defineProperties(LD.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});LD.prototype.isDestroyed=function(){return!1};LD.prototype.destroy=function(){return this._viewModel.destroy(),Se.cleanNode(this._element),this._container.removeChild(this._element),ue(this)};var G9=LD;var mfo=T(S(),1);var rfo=T(S(),1);var Kxe=1e3;function ju(e){d(e.geocoderServices)?this._geocoderServices=e.geocoderServices:this._geocoderServices=[new QP({scene:e.scene})],this._viewContainer=e.container,this._scene=e.scene,this._flightDuration=e.flightDuration,this._searchText="",this._isSearchInProgress=!1,this._wasGeocodeCancelled=!1,this._previousCredits=[],this._complete=new ye,this._suggestions=[],this._selectedSuggestion=void 0,this._showSuggestions=!0,this._handleArrowDown=zxe,this._handleArrowUp=Hxe;let t=this;this._suggestionsVisible=Se.pureComputed(function(){let o=Se.getObservable(t,"_suggestions")().length>0,r=Se.getObservable(t,"_showSuggestions")();return o&&r}),this._searchCommand=Cn(function(i){if(i=g(i,Oy.SEARCH),t._focusTextbox=!1,d(t._selectedSuggestion))return t.activateSuggestion(t._selectedSuggestion),!1;if(t.hideSuggestions(),t.isSearchInProgress)Fyt(t);else return vyt(t,t._geocoderServices,i)}),this.deselectSuggestion=function(){t._selectedSuggestion=void 0},this.handleKeyDown=function(i,o){let r=o.key==="ArrowDown"||o.key==="Down"||o.keyCode===40,s=o.key==="ArrowUp"||o.key==="Up"||o.keyCode===38;return(r||s)&&o.preventDefault(),!0},this.handleKeyUp=function(i,o){let r=o.key==="ArrowDown"||o.key==="Down"||o.keyCode===40,s=o.key==="ArrowUp"||o.key==="Up"||o.keyCode===38,a=o.key==="Enter"||o.keyCode===13;return s?Hxe(t):r?zxe(t):a&&t._searchCommand(),!0},this.activateSuggestion=function(i){t.hideSuggestions(),t._searchText=i.displayName;let o=i.destination;jxe(t),t.destinationFound(t,o)},this.hideSuggestions=function(){t._showSuggestions=!1,t._selectedSuggestion=void 0},this.showSuggestions=function(){t._showSuggestions=!0},this.handleMouseover=function(i,o){i!==t._selectedSuggestion&&(t._selectedSuggestion=i)},this.keepExpanded=!1,this.autoComplete=g(e.autocomplete,!0),this.destinationFound=g(e.destinationFound,ju.flyToDestination),this._focusTextbox=!1,Se.track(this,["_searchText","_isSearchInProgress","keepExpanded","_suggestions","_selectedSuggestion","_showSuggestions","_focusTextbox"]);let n=Se.getObservable(this,"_searchText");n.extend({rateLimit:{timeout:500}}),this._suggestionSubscription=n.subscribe(function(){ju._updateSearchSuggestions(t)}),this.isSearchInProgress=void 0,Se.defineProperty(this,"isSearchInProgress",{get:function(){return this._isSearchInProgress}}),this.searchText=void 0,Se.defineProperty(this,"searchText",{get:function(){return this.isSearchInProgress?"Searching...":this._searchText},set:function(i){this._searchText=i}}),this.flightDuration=void 0,Se.defineProperty(this,"flightDuration",{get:function(){return this._flightDuration},set:function(i){this._flightDuration=i}})}Object.defineProperties(ju.prototype,{complete:{get:function(){return this._complete}},scene:{get:function(){return this._scene}},search:{get:function(){return this._searchCommand}},selectedSuggestion:{get:function(){return this._selectedSuggestion}},suggestions:{get:function(){return this._suggestions}}});ju.prototype.destroy=function(){this._suggestionSubscription.dispose()};function Hxe(e){if(e._suggestions.length===0)return;let t=e._suggestions.indexOf(e._selectedSuggestion);if(t===-1||t===0){e._selectedSuggestion=void 0;return}let n=t-1;e._selectedSuggestion=e._suggestions[n],ju._adjustSuggestionsScroll(e,n)}function zxe(e){if(e._suggestions.length===0)return;let t=e._suggestions.length,i=(e._suggestions.indexOf(e._selectedSuggestion)+1)%t;e._selectedSuggestion=e._suggestions[i],ju._adjustSuggestionsScroll(e,i)}function Iyt(e,t){let n=d(t)?t.availability:void 0;return d(n)?T0(t,[e]).then(function(i){return e=i[0],e.height+=Kxe,e}):(e.height+=Kxe,Promise.resolve(e))}function Wyt(e,t){let n=e._scene,o=n.mapProjection.ellipsoid,r=n.camera,s=n.terrainProvider,a=t,c;return t instanceof de?W.equalsEpsilon(t.south,t.north,W.EPSILON7)&&W.equalsEpsilon(t.east,t.west,W.EPSILON7)?t=de.center(t):c=AT(t,n):t=o.cartesianToCartographic(t),d(c)||(c=Iyt(t,s)),c.then(function(l){a=o.cartographicToCartesian(l)}).finally(function(){r.flyTo({destination:a,complete:function(){e._complete.raiseEvent()},duration:e._flightDuration,endTransform:A.IDENTITY})})}async function Pyt(e,t,n){try{return{state:"fulfilled",value:await e.geocode(t,n),credits:e.credit}}catch(i){return{state:"rejected",reason:i}}}async function vyt(e,t,n){let i=e._searchText;if(Qxe(i)){e.showSuggestions();return}e._isSearchInProgress=!0,e._wasGeocodeCancelled=!1;let o,r;for(o=0;o<t.length;o++){if(e._wasGeocodeCancelled)return;if(r=await Pyt(t[o],i,n),d(r)&&r.state==="fulfilled"&&r.value.length>0)break}if(e._wasGeocodeCancelled)return;e._isSearchInProgress=!1,a8(e);let s=r.value;if(r.state==="fulfilled"&&d(s)&&s.length>0){e._searchText=s[0].displayName,e.destinationFound(e,s[0].destination);let a=Jxe(e,H1.getCreditsFromResult(s[0]));d(a)||s8(e,t[o].credit);return}e._searchText=`${i} (not found)`}function s8(e,t){d(t)&&!e._scene.isDestroyed()&&!e._scene.frameState.creditDisplay.isDestroyed()&&(e._scene.frameState.creditDisplay.addStaticCredit(t),e._previousCredits.push(t))}function Jxe(e,t){return d(t)&&t.forEach(n=>s8(e,n)),t}function a8(e){!e._scene.isDestroyed()&&!e._scene.frameState.creditDisplay.isDestroyed()&&e._previousCredits.forEach(t=>{e._scene.frameState.creditDisplay.removeStaticCredit(t)}),e._previousCredits.length=0}function wyt(e,t){let n=En(e._viewContainer),i=n.getElementsByClassName("search-results")[0],r=n.getElementsByTagName("li")[t];if(t===0){i.scrollTop=0;return}let s=r.offsetTop;s+r.clientHeight>i.clientHeight?i.scrollTop=s+r.clientHeight:s<i.scrollTop&&(i.scrollTop=s)}function Fyt(e){e._isSearchInProgress&&(e._isSearchInProgress=!1,e._wasGeocodeCancelled=!0)}function Qxe(e){return/^\s*$/.test(e)}function jxe(e){Se.getObservable(e,"_suggestions").removeAll()}async function Ayt(e){if(!e.autoComplete)return;let t=e._searchText;if(jxe(e),a8(e),!Qxe(t))for(let n of e._geocoderServices){let i=await n.geocode(t,Oy.AUTOCOMPLETE);if(e._suggestions=e._suggestions.concat(i),i.length>0){let o=!0;i.forEach(r=>{let s=H1.getCreditsFromResult(r);o=o&&!d(s),Jxe(e,s)}),o&&s8(e,n.credit)}if(e._suggestions.length>=5)return}}ju.flyToDestination=Wyt;ju._updateSearchSuggestions=Ayt;ju._adjustSuggestionsScroll=wyt;ju.prototype.isDestroyed=function(){return!1};ju.prototype.destroy=function(){return a8(this),ue(this)};var E9=ju;var Myt="M29.772,26.433l-7.126-7.126c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127L29.772,26.433zM7.203,13.885c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486c-0.007,3.58-2.905,6.476-6.484,6.484C10.106,20.361,7.209,17.465,7.203,13.885z",Nyt="M24.778,21.419 19.276,15.917 24.777,10.415 21.949,7.585 16.447,13.087 10.945,7.585 8.117,10.415 13.618,15.917 8.116,21.419 10.946,24.248 16.447,18.746 21.948,24.248z";function RD(e){let t=En(e.container),n=new E9(e);n._startSearchPath=Myt,n._stopSearchPath=Nyt;let i=document.createElement("form");i.setAttribute("data-bind","submit: search");let o=document.createElement("input");o.type="search",o.className="cesium-geocoder-input",o.setAttribute("placeholder","Enter an address or landmark..."),o.setAttribute("data-bind",'textInput: searchText,disable: isSearchInProgress,event: { keyup: handleKeyUp, keydown: handleKeyDown, mouseover: deselectSuggestion },css: { "cesium-geocoder-input-wide" : keepExpanded || searchText.length > 0 },hasFocus: _focusTextbox'),this._onTextBoxFocus=function(){setTimeout(function(){o.select()},0)},o.addEventListener("focus",this._onTextBoxFocus,!1),i.appendChild(o),this._textBox=o;let r=document.createElement("span");r.className="cesium-geocoder-searchButton",r.setAttribute("data-bind","click: search,cesiumSvgPath: { path: isSearchInProgress ? _stopSearchPath : _startSearchPath, width: 32, height: 32 }"),i.appendChild(r),t.appendChild(i);let s=document.createElement("div");s.className="search-results",s.setAttribute("data-bind","visible: _suggestionsVisible");let a=document.createElement("ul");a.setAttribute("data-bind","foreach: _suggestions");let c=document.createElement("li");a.appendChild(c),c.setAttribute("data-bind","text: $data.displayName, click: $parent.activateSuggestion, event: { mouseover: $parent.handleMouseover}, css: { active: $data === $parent._selectedSuggestion }"),s.appendChild(a),t.appendChild(s),Se.applyBindings(n,i),Se.applyBindings(n,s),this._container=t,this._searchSuggestionsContainer=s,this._viewModel=n,this._form=i,this._onInputBegin=function(l){let u=l.target;typeof l.composedPath=="function"&&(u=l.composedPath()[0]),t.contains(u)||(n._focusTextbox=!1,n.hideSuggestions())},this._onInputEnd=function(l){n._focusTextbox=!0,n.showSuggestions()},Mt.supportsPointerEvents()?(document.addEventListener("pointerdown",this._onInputBegin,!0),t.addEventListener("pointerup",this._onInputEnd,!0),t.addEventListener("pointercancel",this._onInputEnd,!0)):(document.addEventListener("mousedown",this._onInputBegin,!0),t.addEventListener("mouseup",this._onInputEnd,!0),document.addEventListener("touchstart",this._onInputBegin,!0),t.addEventListener("touchend",this._onInputEnd,!0),t.addEventListener("touchcancel",this._onInputEnd,!0))}Object.defineProperties(RD.prototype,{container:{get:function(){return this._container}},searchSuggestionsContainer:{get:function(){return this._searchSuggestionsContainer}},viewModel:{get:function(){return this._viewModel}}});RD.prototype.isDestroyed=function(){return!1};RD.prototype.destroy=function(){let e=this._container;return Mt.supportsPointerEvents()?(document.removeEventListener("pointerdown",this._onInputBegin,!0),e.removeEventListener("pointerup",this._onInputEnd,!0)):(document.removeEventListener("mousedown",this._onInputBegin,!0),e.removeEventListener("mouseup",this._onInputEnd,!0),document.removeEventListener("touchstart",this._onInputBegin,!0),e.removeEventListener("touchend",this._onInputEnd,!0)),this._viewModel.destroy(),Se.cleanNode(this._form),Se.cleanNode(this._searchSuggestionsContainer),e.removeChild(this._form),e.removeChild(this._searchSuggestionsContainer),this._textBox.removeEventListener("focus",this._onTextBoxFocus,!1),ue(this)};var X9=RD;var Cfo=T(S(),1);var bfo=T(S(),1);function qxe(e,t){this._scene=e,this._duration=t;let n=this;this._command=Cn(function(){n._scene.camera.flyHome(n._duration)}),this.tooltip="View Home",Se.track(this,["tooltip"])}Object.defineProperties(qxe.prototype,{scene:{get:function(){return this._scene}},command:{get:function(){return this._command}},duration:{get:function(){return this._duration},set:function(e){this._duration=e}}});var I9=qxe;function ZD(e,t,n){e=En(e);let i=new I9(t,n);i._svgPath="M14,4l-10,8.75h20l-4.25-3.7188v-4.6562h-2.812v2.1875l-2.938-2.5625zm-7.0938,9.906v10.094h14.094v-10.094h-14.094zm2.1876,2.313h3.3122v4.25h-3.3122v-4.25zm5.8442,1.281h3.406v6.438h-3.406v-6.438z";let o=document.createElement("button");o.type="button",o.className="cesium-button cesium-toolbar-button cesium-home-button",o.setAttribute("data-bind","attr: { title: tooltip },click: command,cesiumSvgPath: { path: _svgPath, width: 28, height: 28 }"),e.appendChild(o),Se.applyBindings(i,o),this._container=e,this._viewModel=i,this._element=o}Object.defineProperties(ZD.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});ZD.prototype.isDestroyed=function(){return!1};ZD.prototype.destroy=function(){return Se.cleanNode(this._element),this._container.removeChild(this._element),ue(this)};var W9=ZD;var vfo=T(S(),1);var Zfo=T(S(),1);var Uyt="M 13.84375 7.03125 C 11.412798 7.03125 9.46875 8.975298 9.46875 11.40625 L 9.46875 11.59375 L 2.53125 7.21875 L 2.53125 24.0625 L 9.46875 19.6875 C 9.4853444 22.104033 11.423165 24.0625 13.84375 24.0625 L 25.875 24.0625 C 28.305952 24.0625 30.28125 22.087202 30.28125 19.65625 L 30.28125 11.40625 C 30.28125 8.975298 28.305952 7.03125 25.875 7.03125 L 13.84375 7.03125 z",kyt="M 27.34375 1.65625 L 5.28125 27.9375 L 8.09375 30.3125 L 30.15625 4.03125 L 27.34375 1.65625 z M 13.84375 7.03125 C 11.412798 7.03125 9.46875 8.975298 9.46875 11.40625 L 9.46875 11.59375 L 2.53125 7.21875 L 2.53125 24.0625 L 9.46875 19.6875 C 9.4724893 20.232036 9.5676108 20.7379 9.75 21.21875 L 21.65625 7.03125 L 13.84375 7.03125 z M 28.21875 7.71875 L 14.53125 24.0625 L 25.875 24.0625 C 28.305952 24.0625 30.28125 22.087202 30.28125 19.65625 L 30.28125 11.40625 C 30.28125 9.8371439 29.456025 8.4902779 28.21875 7.71875 z";function c8(){this._cameraClicked=new ye,this._closeClicked=new ye,this.maxHeight=500,this.enableCamera=!1,this.isCameraTracking=!1,this.showInfo=!1,this.titleText="",this.description="",Se.track(this,["showInfo","titleText","description","maxHeight","enableCamera","isCameraTracking"]),this._loadingIndicatorHtml='<div class="cesium-infoBox-loadingContainer"><span class="cesium-infoBox-loading"></span></div>',this.cameraIconPath=void 0,Se.defineProperty(this,"cameraIconPath",{get:function(){return!this.enableCamera||this.isCameraTracking?kyt:Uyt}}),Se.defineProperty(this,"_bodyless",{get:function(){return!d(this.description)||this.description.length===0}})}c8.prototype.maxHeightOffset=function(e){return`${this.maxHeight-e}px`};Object.defineProperties(c8.prototype,{cameraClicked:{get:function(){return this._cameraClicked}},closeClicked:{get:function(){return this._closeClicked}}});var P9=c8;function GD(e){e=En(e);let t=document.createElement("div");t.className="cesium-infoBox",t.setAttribute("data-bind",'css: { "cesium-infoBox-visible" : showInfo, "cesium-infoBox-bodyless" : _bodyless }'),e.appendChild(t);let n=document.createElement("div");n.className="cesium-infoBox-title",n.setAttribute("data-bind","text: titleText"),t.appendChild(n);let i=document.createElement("button");i.type="button",i.className="cesium-button cesium-infoBox-camera",i.setAttribute("data-bind",'attr: { title: "Focus camera on object" },click: function () { cameraClicked.raiseEvent(this); },enable: enableCamera,cesiumSvgPath: { path: cameraIconPath, width: 32, height: 32 }'),t.appendChild(i);let o=document.createElement("button");o.type="button",o.className="cesium-infoBox-close",o.setAttribute("data-bind","click: function () { closeClicked.raiseEvent(this); }"),o.innerHTML="&times;",t.appendChild(o);let r=document.createElement("iframe");r.className="cesium-infoBox-iframe",r.setAttribute("sandbox","allow-same-origin allow-popups allow-forms"),r.setAttribute("data-bind","style : { maxHeight : maxHeightOffset(40) }"),r.setAttribute("allowfullscreen",!0),t.appendChild(r);let s=new P9;Se.applyBindings(s,t),this._container=e,this._element=t,this._frame=r,this._viewModel=s,this._descriptionSubscription=void 0;let a=this;r.addEventListener("load",function(){let c=r.contentDocument,l=c.createElement("link");l.href=$t("Widgets/InfoBox/InfoBoxDescription.css"),l.rel="stylesheet",l.type="text/css";let u=c.createElement("div");u.className="cesium-infoBox-description",c.head.appendChild(l),c.body.appendChild(u),a._descriptionSubscription=aa(s,"description",function(m){r.style.height="5px",u.innerHTML=m;let p=null,y=u.firstElementChild;if(y!==null&&u.childNodes.length===1){let x=window.getComputedStyle(y);if(x!==null){let _=x["background-color"],C=Y.fromCssColorString(_);d(C)&&C.alpha!==0&&(p=x["background-color"])}}t.style["background-color"]=p;let f=u.getBoundingClientRect().height;r.style.height=`${f}px`})}),r.setAttribute("src","about:blank")}Object.defineProperties(GD.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}},frame:{get:function(){return this._frame}}});GD.prototype.isDestroyed=function(){return!1};GD.prototype.destroy=function(){let e=this._container;return Se.cleanNode(this._element),e.removeChild(this._element),d(this._descriptionSubscription)&&this._descriptionSubscription.dispose(),ue(this)};var v9=GD;var Ofo=T(S(),1);var Mfo=T(S(),1);function $xe(){this.showInstructions=!1;let e=this;this._command=Cn(function(){e.showInstructions=!e.showInstructions}),this._showClick=Cn(function(){e._touch=!1}),this._showTouch=Cn(function(){e._touch=!0}),this._touch=!1,this.tooltip="Navigation Instructions",Se.track(this,["tooltip","showInstructions","_touch"])}Object.defineProperties($xe.prototype,{command:{get:function(){return this._command}},showClick:{get:function(){return this._showClick}},showTouch:{get:function(){return this._showTouch}}});var w9=$xe;function ED(e){let t=En(e.container),n=new w9,i=g(e.instructionsInitiallyVisible,!1);n.showInstructions=i,n._svgPath="M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466z M17.328,24.371h-2.707v-2.596h2.707V24.371zM17.328,19.003v0.858h-2.707v-1.057c0-3.19,3.63-3.696,3.63-5.963c0-1.034-0.924-1.826-2.134-1.826c-1.254,0-2.354,0.924-2.354,0.924l-1.541-1.915c0,0,1.519-1.584,4.137-1.584c2.487,0,4.796,1.54,4.796,4.136C21.156,16.208,17.328,16.627,17.328,19.003z";let o=document.createElement("span");o.className="cesium-navigationHelpButton-wrapper",t.appendChild(o);let r=document.createElement("button");r.type="button",r.className="cesium-button cesium-toolbar-button cesium-navigation-help-button",r.setAttribute("data-bind","attr: { title: tooltip },click: command,cesiumSvgPath: { path: _svgPath, width: 32, height: 32 }"),o.appendChild(r);let s=document.createElement("div");s.className="cesium-navigation-help",s.setAttribute("data-bind",'css: { "cesium-navigation-help-visible" : showInstructions}'),o.appendChild(s);let a=document.createElement("button");a.type="button",a.className="cesium-navigation-button cesium-navigation-button-left",a.setAttribute("data-bind",'click: showClick, css: {"cesium-navigation-button-selected": !_touch, "cesium-navigation-button-unselected": _touch}');let c=document.createElement("img");c.src=$t("Widgets/Images/NavigationHelp/Mouse.svg"),c.className="cesium-navigation-button-icon",c.style.width="25px",c.style.height="25px",a.appendChild(c),a.appendChild(document.createTextNode("Mouse"));let l=document.createElement("button");l.type="button",l.className="cesium-navigation-button cesium-navigation-button-right",l.setAttribute("data-bind",'click: showTouch, css: {"cesium-navigation-button-selected": _touch, "cesium-navigation-button-unselected": !_touch}');let u=document.createElement("img");u.src=$t("Widgets/Images/NavigationHelp/Touch.svg"),u.className="cesium-navigation-button-icon",u.style.width="25px",u.style.height="25px",l.appendChild(u),l.appendChild(document.createTextNode("Touch")),s.appendChild(a),s.appendChild(l);let m=document.createElement("div");m.className="cesium-click-navigation-help cesium-navigation-help-instructions",m.setAttribute("data-bind",'css: { "cesium-click-navigation-help-visible" : !_touch}'),m.innerHTML=` <table> <tr> <td><img src="${$t("Widgets/Images/NavigationHelp/MouseLeft.svg")}" width="48" height="48" /></td> <td> <div class="cesium-navigation-help-pan">Pan view</div> <div class="cesium-navigation-help-details">Left click + drag</div> </td> </tr> <tr> <td><img src="${$t("Widgets/Images/NavigationHelp/MouseRight.svg")}" width="48" height="48" /></td> <td> <div class="cesium-navigation-help-zoom">Zoom view</div> <div class="cesium-navigation-help-details">Right click + drag, or</div> <div class="cesium-navigation-help-details">Mouse wheel scroll</div> </td> </tr> <tr> <td><img src="${$t("Widgets/Images/NavigationHelp/MouseMiddle.svg")}" width="48" height="48" /></td> <td> <div class="cesium-navigation-help-rotate">Rotate view</div> <div class="cesium-navigation-help-details">Middle click + drag, or</div> <div class="cesium-navigation-help-details">CTRL + Left/Right click + drag</div> </td> </tr> </table>`,s.appendChild(m);let p=document.createElement("div");p.className="cesium-touch-navigation-help cesium-navigation-help-instructions",p.setAttribute("data-bind",'css: { "cesium-touch-navigation-help-visible" : _touch}'),p.innerHTML=` <table> <tr> <td><img src="${$t("Widgets/Images/NavigationHelp/TouchDrag.svg")}" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-pan">Pan view</div> <div class="cesium-navigation-help-details">One finger drag</div> </td> </tr> <tr> <td><img src="${$t("Widgets/Images/NavigationHelp/TouchZoom.svg")}" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-zoom">Zoom view</div> <div class="cesium-navigation-help-details">Two finger pinch</div> </td> </tr> <tr> <td><img src="${$t("Widgets/Images/NavigationHelp/TouchTilt.svg")}" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-rotate">Tilt view</div> <div class="cesium-navigation-help-details">Two finger drag, same direction</div> </td> </tr> <tr> <td><img src="${$t("Widgets/Images/NavigationHelp/TouchRotate.svg")}" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-tilt">Rotate view</div> <div class="cesium-navigation-help-details">Two finger drag, opposite direction</div> </td> </tr> </table>`,s.appendChild(p),Se.applyBindings(n,o),this._container=t,this._viewModel=n,this._wrapper=o,this._closeInstructions=function(y){o.contains(y.target)||(n.showInstructions=!1)},Mt.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeInstructions,!0):(document.addEventListener("mousedown",this._closeInstructions,!0),document.addEventListener("touchstart",this._closeInstructions,!0))}Object.defineProperties(ED.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});ED.prototype.isDestroyed=function(){return!1};ED.prototype.destroy=function(){return Mt.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeInstructions,!0):(document.removeEventListener("mousedown",this._closeInstructions,!0),document.removeEventListener("touchstart",this._closeInstructions,!0)),Se.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),ue(this)};var F9=ED;var rpo=T(S(),1);var qfo=T(S(),1);function l8(e){this._scene=e.scene,this.lowFrameRateMessage=g(e.lowFrameRateMessage,"This application appears to be performing poorly on your system. Please try using a different web browser or updating your video drivers."),this.lowFrameRateMessageDismissed=!1,this.showingLowFrameRateMessage=!1,Se.track(this,["lowFrameRateMessage","lowFrameRateMessageDismissed","showingLowFrameRateMessage"]);let t=this;this._dismissMessage=Cn(function(){t.showingLowFrameRateMessage=!1,t.lowFrameRateMessageDismissed=!0});let n=LF.fromScene(e.scene);this._unsubscribeLowFrameRate=n.lowFrameRate.addEventListener(function(){t.lowFrameRateMessageDismissed||(t.showingLowFrameRateMessage=!0)}),this._unsubscribeNominalFrameRate=n.nominalFrameRate.addEventListener(function(){t.showingLowFrameRateMessage=!1})}Object.defineProperties(l8.prototype,{scene:{get:function(){return this._scene}},dismissMessage:{get:function(){return this._dismissMessage}}});l8.prototype.destroy=function(){return this._unsubscribeLowFrameRate(),this._unsubscribeNominalFrameRate(),ue(this)};var A9=l8;function XD(e){let t=En(e.container),n=new A9(e),i=document.createElement("div");i.className="cesium-performance-watchdog-message-area",i.setAttribute("data-bind","visible: showingLowFrameRateMessage");let o=document.createElement("button");o.setAttribute("type","button"),o.className="cesium-performance-watchdog-message-dismiss",o.innerHTML="&times;",o.setAttribute("data-bind","click: dismissMessage"),i.appendChild(o);let r=document.createElement("div");r.className="cesium-performance-watchdog-message",r.setAttribute("data-bind","html: lowFrameRateMessage"),i.appendChild(r),t.appendChild(i),Se.applyBindings(n,i),this._container=t,this._viewModel=n,this._element=i}Object.defineProperties(XD.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});XD.prototype.isDestroyed=function(){return!1};XD.prototype.destroy=function(){return this._viewModel.destroy(),Se.cleanNode(this._element),this._container.removeChild(this._element),ue(this)};var M9=XD;var gpo=T(S(),1);var upo=T(S(),1);function ID(e){this._scene=e,this._orthographic=e.camera.frustum instanceof en,this._flightInProgress=!1,this.dropDownVisible=!1,this.tooltipPerspective="Perspective Projection",this.tooltipOrthographic="Orthographic Projection",this.selectedTooltip=void 0,this.sceneMode=e.mode,Se.track(this,["_orthographic","_flightInProgress","sceneMode","dropDownVisible","tooltipPerspective","tooltipOrthographic"]);let t=this;Se.defineProperty(this,"selectedTooltip",function(){return t._orthographic?t.tooltipOrthographic:t.tooltipPerspective}),this._toggleDropDown=Cn(function(){t.sceneMode===ie.SCENE2D||t._flightInProgress||(t.dropDownVisible=!t.dropDownVisible)}),this._eventHelper=new Cr,this._eventHelper.add(e.morphComplete,function(n,i,o,r){t.sceneMode=o,t._orthographic=o===ie.SCENE2D||t._scene.camera.frustum instanceof en}),this._eventHelper.add(e.preRender,function(){t._flightInProgress=d(e.camera._currentFlight)}),this._switchToPerspective=Cn(function(){t.sceneMode!==ie.SCENE2D&&(t._scene.camera.switchToPerspectiveFrustum(),t._orthographic=!1,t.dropDownVisible=!1)}),this._switchToOrthographic=Cn(function(){t.sceneMode!==ie.SCENE2D&&(t._scene.camera.switchToOrthographicFrustum(),t._orthographic=!0,t.dropDownVisible=!1)}),this._sceneMode=ie}Object.defineProperties(ID.prototype,{scene:{get:function(){return this._scene}},toggleDropDown:{get:function(){return this._toggleDropDown}},switchToPerspective:{get:function(){return this._switchToPerspective}},switchToOrthographic:{get:function(){return this._switchToOrthographic}},isOrthographicProjection:{get:function(){return this._orthographic}}});ID.prototype.isDestroyed=function(){return!1};ID.prototype.destroy=function(){this._eventHelper.removeAll(),ue(this)};var N9=ID;var Dyt="M 28.15625,10.4375 9.125,13.21875 13.75,43.25 41.75,55.09375 50.8125,37 54.5,11.9375 z m 0.125,3 19.976451,0.394265 L 43.03125,16.875 22.6875,14.28125 z M 50.971746,15.705477 47.90625,36.03125 42.53125,46 44.84375,19.3125 z M 12.625,16.03125 l 29.15625,3.6875 -2.65625,31 L 16.4375,41.125 z",Byt="m 31.560594,6.5254438 -20.75,12.4687502 0.1875,24.5625 22.28125,11.8125 19.5,-12 0.65625,-0.375 0,-0.75 0.0312,-23.21875 z m 0.0625,3.125 16.65625,9.5000002 -16.125,10.28125 -17.34375,-9.71875 z m 18.96875,11.1875002 0.15625,20.65625 -17.46875,10.59375 0.15625,-20.28125 z m -37.0625,1.25 17.21875,9.625 -0.15625,19.21875 -16.9375,-9 z";function WD(e,t){e=En(e);let n=new N9(t);n._perspectivePath=Dyt,n._orthographicPath=Byt;let i=document.createElement("span");i.className="cesium-projectionPicker-wrapper cesium-toolbar-button",e.appendChild(i);let o=document.createElement("button");o.type="button",o.className="cesium-button cesium-toolbar-button",o.setAttribute("data-bind",'css: { "cesium-projectionPicker-buttonPerspective": !_orthographic, "cesium-projectionPicker-buttonOrthographic": _orthographic, "cesium-button-disabled" : sceneMode === _sceneMode.SCENE2D || _flightInProgress, "cesium-projectionPicker-selected": dropDownVisible },attr: { title: selectedTooltip },click: toggleDropDown'),o.innerHTML='<!-- ko cesiumSvgPath: { path: _perspectivePath, width: 64, height: 64, css: "cesium-projectionPicker-iconPerspective" } --><!-- /ko --><!-- ko cesiumSvgPath: { path: _orthographicPath, width: 64, height: 64, css: "cesium-projectionPicker-iconOrthographic" } --><!-- /ko -->',i.appendChild(o);let r=document.createElement("button");r.type="button",r.className="cesium-button cesium-toolbar-button cesium-projectionPicker-dropDown-icon",r.setAttribute("data-bind",'css: { "cesium-projectionPicker-visible" : (dropDownVisible && _orthographic), "cesium-projectionPicker-none" : !_orthographic, "cesium-projectionPicker-hidden" : !dropDownVisible },attr: { title: tooltipPerspective },click: switchToPerspective,cesiumSvgPath: { path: _perspectivePath, width: 64, height: 64 }'),i.appendChild(r);let s=document.createElement("button");s.type="button",s.className="cesium-button cesium-toolbar-button cesium-projectionPicker-dropDown-icon",s.setAttribute("data-bind",'css: { "cesium-projectionPicker-visible" : (dropDownVisible && !_orthographic), "cesium-projectionPicker-none" : _orthographic, "cesium-projectionPicker-hidden" : !dropDownVisible},attr: { title: tooltipOrthographic },click: switchToOrthographic,cesiumSvgPath: { path: _orthographicPath, width: 64, height: 64 }'),i.appendChild(s),Se.applyBindings(n,i),this._viewModel=n,this._container=e,this._wrapper=i,this._closeDropDown=function(a){i.contains(a.target)||(n.dropDownVisible=!1)},Mt.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(WD.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});WD.prototype.isDestroyed=function(){return!1};WD.prototype.destroy=function(){return this._viewModel.destroy(),Mt.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),Se.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),ue(this)};var U9=WD;var Wpo=T(S(),1);var Lpo=T(S(),1);function PD(e,t){this._scene=e;let n=this,i=function(o,r,s,a){n.sceneMode=s,n.dropDownVisible=!1};this._eventHelper=new Cr,this._eventHelper.add(e.morphStart,i),this._duration=g(t,2),this.sceneMode=e.mode,this.dropDownVisible=!1,this.tooltip2D="2D",this.tooltip3D="3D",this.tooltipColumbusView="Columbus View",Se.track(this,["sceneMode","dropDownVisible","tooltip2D","tooltip3D","tooltipColumbusView"]),this.selectedTooltip=void 0,Se.defineProperty(this,"selectedTooltip",function(){let o=n.sceneMode;return o===ie.SCENE2D?n.tooltip2D:o===ie.SCENE3D?n.tooltip3D:n.tooltipColumbusView}),this._toggleDropDown=Cn(function(){n.dropDownVisible=!n.dropDownVisible}),this._morphTo2D=Cn(function(){e.morphTo2D(n._duration)}),this._morphTo3D=Cn(function(){e.morphTo3D(n._duration)}),this._morphToColumbusView=Cn(function(){e.morphToColumbusView(n._duration)}),this._sceneMode=ie}Object.defineProperties(PD.prototype,{scene:{get:function(){return this._scene}},duration:{get:function(){return this._duration},set:function(e){this._duration=e}},toggleDropDown:{get:function(){return this._toggleDropDown}},morphTo2D:{get:function(){return this._morphTo2D}},morphTo3D:{get:function(){return this._morphTo3D}},morphToColumbusView:{get:function(){return this._morphToColumbusView}}});PD.prototype.isDestroyed=function(){return!1};PD.prototype.destroy=function(){this._eventHelper.removeAll(),ue(this)};var k9=PD;var Yyt="m 32.401392,4.9330437 c -7.087603,0 -14.096095,2.884602 -19.10793,7.8946843 -5.0118352,5.010083 -7.9296167,11.987468 -7.9296167,19.072999 0,7.085531 2.9177815,14.097848 7.9296167,19.107931 4.837653,4.835961 11.541408,7.631372 18.374354,7.82482 0.05712,0.01231 0.454119,0.139729 0.454119,0.139729 l 0.03493,-0.104797 c 0.08246,7.84e-4 0.162033,0.03493 0.244525,0.03493 0.08304,0 0.161515,-0.03414 0.244526,-0.03493 l 0.03493,0.104797 c 0,0 0.309474,-0.129487 0.349323,-0.139729 6.867765,-0.168094 13.582903,-2.965206 18.444218,-7.82482 2.558195,-2.5573 4.551081,-5.638134 5.903547,-8.977584 1.297191,-3.202966 2.02607,-6.661489 2.02607,-10.130347 0,-6.237309 -2.366261,-12.31219 -6.322734,-17.116794 -0.0034,-0.02316 0.0049,-0.04488 0,-0.06986 -0.01733,-0.08745 -0.104529,-0.278855 -0.104797,-0.279458 -5.31e-4,-0.0012 -0.522988,-0.628147 -0.523984,-0.62878 -3.47e-4,-2.2e-4 -0.133444,-0.03532 -0.244525,-0.06987 C 51.944299,13.447603 51.751076,13.104317 51.474391,12.827728 46.462556,7.8176457 39.488996,4.9330437 32.401392,4.9330437 z m -2.130866,3.5281554 0.104797,9.6762289 c -4.111695,-0.08361 -7.109829,-0.423664 -9.257041,-0.943171 1.198093,-2.269271 2.524531,-4.124404 3.91241,-5.414496 2.167498,-2.0147811 3.950145,-2.8540169 5.239834,-3.3185619 z m 2.794579,0 c 1.280302,0.4754953 3.022186,1.3285948 5.065173,3.2486979 1.424667,1.338973 2.788862,3.303645 3.982275,5.728886 -2.29082,0.403367 -5.381258,0.621049 -8.942651,0.698645 L 33.065105,8.4611991 z m 5.728886,0.2445256 c 4.004072,1.1230822 7.793098,3.1481363 10.724195,6.0782083 0.03468,0.03466 0.07033,0.06991 0.104797,0.104797 -0.45375,0.313891 -0.923054,0.663002 -1.956205,1.082899 -0.647388,0.263114 -1.906242,0.477396 -2.829511,0.733577 -1.382296,-2.988132 -3.027146,-5.368585 -4.785716,-7.0213781 -0.422866,-0.397432 -0.835818,-0.6453247 -1.25756,-0.9781032 z m -15.33525,0.7685092 c -0.106753,0.09503 -0.207753,0.145402 -0.31439,0.244526 -1.684973,1.5662541 -3.298068,3.8232211 -4.680919,6.5672591 -0.343797,-0.14942 -1.035052,-0.273198 -1.292493,-0.419186 -0.956528,-0.542427 -1.362964,-1.022024 -1.537018,-1.292493 -0.0241,-0.03745 -0.01868,-0.0401 -0.03493,-0.06986 2.250095,-2.163342 4.948824,-3.869984 7.859752,-5.0302421 z m -9.641296,7.0912431 c 0.464973,0.571618 0.937729,1.169056 1.956205,1.746612 0.349907,0.198425 1.107143,0.335404 1.537018,0.523983 -1.20166,3.172984 -1.998037,7.051901 -2.165798,11.772162 C 14.256557,30.361384 12.934823,30.161483 12.280427,29.90959 10.644437,29.279855 9.6888882,28.674891 9.1714586,28.267775 8.6540289,27.860658 8.6474751,27.778724 8.6474751,27.778724 l -0.069864,0.03493 C 9.3100294,23.691285 11.163248,19.798527 13.817445,16.565477 z m 37.552149,0.523984 c 2.548924,3.289983 4.265057,7.202594 4.890513,11.318043 -0.650428,0.410896 -1.756876,1.001936 -3.563088,1.606882 -1.171552,0.392383 -3.163859,0.759153 -4.960377,1.117832 -0.04367,-4.752703 -0.784809,-8.591423 -1.88634,-11.807094 0.917574,-0.263678 2.170552,-0.486495 2.864443,-0.76851 1.274693,-0.518066 2.003942,-1.001558 2.654849,-1.467153 z m -31.439008,2.619917 c 2.487341,0.672766 5.775813,1.137775 10.479669,1.222628 l 0.104797,10.689263 0,0.03493 0,0.733577 c -5.435005,-0.09059 -9.512219,-0.519044 -12.610536,-1.117831 0.106127,-4.776683 0.879334,-8.55791 2.02607,-11.562569 z m 23.264866,0.31439 c 1.073459,3.067541 1.833795,6.821314 1.816476,11.702298 -3.054474,0.423245 -7.062018,0.648559 -11.702298,0.698644 l 0,-0.838373 -0.104796,-10.654331 c 4.082416,-0.0864 7.404468,-0.403886 9.990618,-0.908238 z M 8.2632205,30.922625 c 0.7558676,0.510548 1.5529563,1.013339 3.0041715,1.57195 0.937518,0.360875 2.612202,0.647642 3.91241,0.978102 0.112814,3.85566 0.703989,7.107756 1.606883,9.920754 -1.147172,-0.324262 -2.644553,-0.640648 -3.423359,-0.978102 -1.516688,-0.657177 -2.386627,-1.287332 -2.864443,-1.71168 -0.477816,-0.424347 -0.489051,-0.489051 -0.489051,-0.489051 L 9.8002387,40.319395 C 8.791691,37.621767 8.1584238,34.769583 8.1584238,31.900727 c 0,-0.330153 0.090589,-0.648169 0.1047967,-0.978102 z m 48.2763445,0.419186 c 0.0047,0.188973 0.06986,0.36991 0.06986,0.558916 0,2.938869 -0.620228,5.873558 -1.676747,8.628261 -0.07435,0.07583 -0.06552,0.07411 -0.454119,0.349323 -0.606965,0.429857 -1.631665,1.042044 -3.318562,1.676747 -1.208528,0.454713 -3.204964,0.850894 -5.135038,1.25756 0.84593,-2.765726 1.41808,-6.005357 1.606883,-9.815957 2.232369,-0.413371 4.483758,-0.840201 5.938479,-1.327425 1.410632,-0.472457 2.153108,-0.89469 2.96924,-1.327425 z m -38.530252,2.864443 c 3.208141,0.56697 7.372279,0.898588 12.575603,0.978103 l 0.174662,9.885821 c -4.392517,-0.06139 -8.106722,-0.320566 -10.863925,-0.803441 -1.051954,-2.664695 -1.692909,-6.043794 -1.88634,-10.060483 z m 26.793022,0.31439 c -0.246298,3.923551 -0.877762,7.263679 -1.816476,9.885822 -2.561957,0.361954 -5.766249,0.560708 -9.431703,0.62878 l -0.174661,-9.815957 c 4.491734,-0.04969 8.334769,-0.293032 11.42284,-0.698645 z M 12.035901,44.860585 c 0.09977,0.04523 0.105535,0.09465 0.209594,0.139729 1.337656,0.579602 3.441099,1.058072 5.589157,1.537018 1.545042,3.399208 3.548524,5.969402 5.589157,7.789888 -3.034411,-1.215537 -5.871615,-3.007978 -8.174142,-5.309699 -1.245911,-1.245475 -2.271794,-2.662961 -3.213766,-4.156936 z m 40.69605,0 c -0.941972,1.493975 -1.967855,2.911461 -3.213765,4.156936 -2.74253,2.741571 -6.244106,4.696717 -9.955686,5.868615 0.261347,-0.241079 0.507495,-0.394491 0.768509,-0.663713 1.674841,-1.727516 3.320792,-4.181056 4.645987,-7.265904 2.962447,-0.503021 5.408965,-1.122293 7.161107,-1.781544 0.284034,-0.106865 0.337297,-0.207323 0.593848,-0.31439 z m -31.404076,2.305527 c 2.645807,0.376448 5.701178,0.649995 9.466635,0.698645 l 0.139729,7.789888 c -1.38739,-0.480844 -3.316218,-1.29837 -5.659022,-3.388427 -1.388822,-1.238993 -2.743668,-3.0113 -3.947342,-5.100106 z m 20.365491,0.104797 c -1.04872,2.041937 -2.174337,3.779068 -3.353494,4.995309 -1.853177,1.911459 -3.425515,2.82679 -4.611055,3.353494 l -0.139729,-7.789887 c 3.13091,-0.05714 5.728238,-0.278725 8.104278,-0.558916 z",Oyt="m 2.9825053,17.550598 0,1.368113 0,26.267766 0,1.368113 1.36811,0 54.9981397,0 1.36811,0 0,-1.368113 0,-26.267766 0,-1.368113 -1.36811,0 -54.9981397,0 -1.36811,0 z m 2.73623,2.736226 10.3292497,0 0,10.466063 -10.3292497,0 0,-10.466063 z m 13.0654697,0 11.69737,0 0,10.466063 -11.69737,0 0,-10.466063 z m 14.43359,0 11.69737,0 0,10.466063 -11.69737,0 0,-10.466063 z m 14.43359,0 10.32926,0 0,10.466063 -10.32926,0 0,-10.466063 z m -41.9326497,13.202288 10.3292497,0 0,10.329252 -10.3292497,0 0,-10.329252 z m 13.0654697,0 11.69737,0 0,10.329252 -11.69737,0 0,-10.329252 z m 14.43359,0 11.69737,0 0,10.329252 -11.69737,0 0,-10.329252 z m 14.43359,0 10.32926,0 0,10.329252 -10.32926,0 0,-10.329252 z",Kyt="m 14.723969,17.675598 -0.340489,0.817175 -11.1680536,26.183638 -0.817175,1.872692 2.076986,0 54.7506996,0 2.07698,0 -0.81717,-1.872692 -11.16805,-26.183638 -0.34049,-0.817175 -0.91933,0 -32.414586,0 -0.919322,0 z m 1.838643,2.723916 6.196908,0 -2.928209,10.418977 -7.729111,0 4.460412,-10.418977 z m 9.02297,0 4.903049,0 0,10.418977 -7.831258,0 2.928209,-10.418977 z m 7.626964,0 5.584031,0 2.62176,10.418977 -8.205791,0 0,-10.418977 z m 8.410081,0 5.51593,0 4.46042,10.418977 -7.38863,0 -2.58772,-10.418977 z m -30.678091,13.142892 8.103649,0 -2.89416,10.282782 -9.6018026,0 4.3923136,-10.282782 z m 10.929711,0 8.614384,0 0,10.282782 -11.508544,0 2.89416,-10.282782 z m 11.338299,0 8.852721,0 2.58772,10.282782 -11.440441,0 0,-10.282782 z m 11.678781,0 7.86531,0 4.39231,10.282782 -9.6699,0 -2.58772,-10.282782 z";function vD(e,t,n){e=En(e);let i=new k9(t,n);i._globePath=Yyt,i._flatMapPath=Oyt,i._columbusViewPath=Kyt;let o=document.createElement("span");o.className="cesium-sceneModePicker-wrapper cesium-toolbar-button",e.appendChild(o);let r=document.createElement("button");r.type="button",r.className="cesium-button cesium-toolbar-button",r.setAttribute("data-bind",'css: { "cesium-sceneModePicker-button2D": sceneMode === _sceneMode.SCENE2D, "cesium-sceneModePicker-button3D": sceneMode === _sceneMode.SCENE3D, "cesium-sceneModePicker-buttonColumbusView": sceneMode === _sceneMode.COLUMBUS_VIEW, "cesium-sceneModePicker-selected": dropDownVisible },attr: { title: selectedTooltip },click: toggleDropDown'),r.innerHTML='<!-- ko cesiumSvgPath: { path: _globePath, width: 64, height: 64, css: "cesium-sceneModePicker-slide-svg cesium-sceneModePicker-icon3D" } --><!-- /ko --><!-- ko cesiumSvgPath: { path: _flatMapPath, width: 64, height: 64, css: "cesium-sceneModePicker-slide-svg cesium-sceneModePicker-icon2D" } --><!-- /ko --><!-- ko cesiumSvgPath: { path: _columbusViewPath, width: 64, height: 64, css: "cesium-sceneModePicker-slide-svg cesium-sceneModePicker-iconColumbusView" } --><!-- /ko -->',o.appendChild(r);let s=document.createElement("button");s.type="button",s.className="cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon",s.setAttribute("data-bind",'css: { "cesium-sceneModePicker-visible" : (dropDownVisible && (sceneMode !== _sceneMode.SCENE3D)) || (!dropDownVisible && (sceneMode === _sceneMode.SCENE3D)), "cesium-sceneModePicker-none" : sceneMode === _sceneMode.SCENE3D, "cesium-sceneModePicker-hidden" : !dropDownVisible },attr: { title: tooltip3D },click: morphTo3D,cesiumSvgPath: { path: _globePath, width: 64, height: 64 }'),o.appendChild(s);let a=document.createElement("button");a.type="button",a.className="cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon",a.setAttribute("data-bind",'css: { "cesium-sceneModePicker-visible" : (dropDownVisible && (sceneMode !== _sceneMode.SCENE2D)), "cesium-sceneModePicker-none" : sceneMode === _sceneMode.SCENE2D, "cesium-sceneModePicker-hidden" : !dropDownVisible },attr: { title: tooltip2D },click: morphTo2D,cesiumSvgPath: { path: _flatMapPath, width: 64, height: 64 }'),o.appendChild(a);let c=document.createElement("button");c.type="button",c.className="cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon",c.setAttribute("data-bind",'css: { "cesium-sceneModePicker-visible" : (dropDownVisible && (sceneMode !== _sceneMode.COLUMBUS_VIEW)) || (!dropDownVisible && (sceneMode === _sceneMode.COLUMBUS_VIEW)), "cesium-sceneModePicker-none" : sceneMode === _sceneMode.COLUMBUS_VIEW, "cesium-sceneModePicker-hidden" : !dropDownVisible},attr: { title: tooltipColumbusView },click: morphToColumbusView,cesiumSvgPath: { path: _columbusViewPath, width: 64, height: 64 }'),o.appendChild(c),Se.applyBindings(i,o),this._viewModel=i,this._container=e,this._wrapper=o,this._closeDropDown=function(l){o.contains(l.target)||(i.dropDownVisible=!1)},Mt.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(vD.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});vD.prototype.isDestroyed=function(){return!1};vD.prototype.destroy=function(){return this._viewModel.destroy(),Mt.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),Se.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),ue(this)};var D9=vD;var Ypo=T(S(),1);var Apo=T(S(),1);var Hyt=new D,wD="-1000px";function B9(e,t,n){this._scene=e,this._screenPositionX=wD,this._screenPositionY=wD,this._tweens=e.tweens,this._container=g(n,document.body),this._selectionIndicatorElement=t,this._scale=1,this.position=void 0,this.showSelection=!1,Se.track(this,["position","_screenPositionX","_screenPositionY","_scale","showSelection"]),this.isVisible=void 0,Se.defineProperty(this,"isVisible",{get:function(){return this.showSelection&&d(this.position)}}),Se.defineProperty(this,"_transform",{get:function(){return`scale(${this._scale})`}}),this.computeScreenSpacePosition=function(i,o){return Ji.wgs84ToWindowCoordinates(e,i,o)}}B9.prototype.update=function(){if(this.showSelection&&d(this.position)){let e=this.computeScreenSpacePosition(this.position,Hyt);if(!d(e))this._screenPositionX=wD,this._screenPositionY=wD;else{let t=this._container,n=t.parentNode.clientWidth,i=t.parentNode.clientHeight,o=this._selectionIndicatorElement.clientWidth,r=o*.5;e.x=Math.min(Math.max(e.x,-o),n+o)-r,e.y=Math.min(Math.max(e.y,-o),i+o)-r,this._screenPositionX=`${Math.floor(e.x+.25)}px`,this._screenPositionY=`${Math.floor(e.y+.25)}px`}}};B9.prototype.animateAppear=function(){this._tweens.addProperty({object:this,property:"_scale",startValue:2,stopValue:1,duration:.8,easingFunction:Xr.EXPONENTIAL_OUT})};B9.prototype.animateDepart=function(){this._tweens.addProperty({object:this,property:"_scale",startValue:this._scale,stopValue:1.5,duration:.8,easingFunction:Xr.EXPONENTIAL_OUT})};Object.defineProperties(B9.prototype,{container:{get:function(){return this._container}},selectionIndicatorElement:{get:function(){return this._selectionIndicatorElement}},scene:{get:function(){return this._scene}}});var Y9=B9;function FD(e,t){e=En(e),this._container=e;let n=document.createElement("div");n.className="cesium-selection-wrapper",n.setAttribute("data-bind",'style: { "top" : _screenPositionY, "left" : _screenPositionX },css: { "cesium-selection-wrapper-visible" : isVisible }'),e.appendChild(n),this._element=n;let i="http://www.w3.org/2000/svg",o="M -34 -34 L -34 -11.25 L -30 -15.25 L -30 -30 L -15.25 -30 L -11.25 -34 L -34 -34 z M 11.25 -34 L 15.25 -30 L 30 -30 L 30 -15.25 L 34 -11.25 L 34 -34 L 11.25 -34 z M -34 11.25 L -34 34 L -11.25 34 L -15.25 30 L -30 30 L -30 15.25 L -34 11.25 z M 34 11.25 L 30 15.25 L 30 30 L 15.25 30 L 11.25 34 L 34 34 L 34 11.25 z",r=document.createElementNS(i,"svg:svg");r.setAttribute("width",160),r.setAttribute("height",160),r.setAttribute("viewBox","0 0 160 160");let s=document.createElementNS(i,"g");s.setAttribute("transform","translate(80,80)"),r.appendChild(s);let a=document.createElementNS(i,"path");a.setAttribute("data-bind","attr: { transform: _transform }"),a.setAttribute("d",o),s.appendChild(a),n.appendChild(r);let c=new Y9(t,this._element,this._container);this._viewModel=c,Se.applyBindings(this._viewModel,this._element)}Object.defineProperties(FD.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});FD.prototype.isDestroyed=function(){return!1};FD.prototype.destroy=function(){let e=this._container;return Se.cleanNode(this._element),e.removeChild(this._element),ue(this)};var O9=FD;var n0o=T(S(),1);var Hpo=T(S(),1);function UT(e,t,n){this._color=e,this._height=t,this._base=g(n,0)}UT.prototype.getHeight=function(){return this._height};UT.prototype.getBase=function(){return this._base};UT.prototype.getStartTime=function(){return this._start};UT.prototype.getStopTime=function(){return this._stop};UT.prototype.setRange=function(e,t){this._start=e,this._stop=t};UT.prototype.render=function(e){let t="";if(this._start&&this._stop&&this._color){let n=te.secondsDifference(this._start,e.epochJulian),i=Math.round(e.timeBarWidth*e.getAlpha(n)),o=te.secondsDifference(this._stop,e.epochJulian),r=Math.round(e.timeBarWidth*e.getAlpha(o))-i;i<0&&(r+=i,i=0),i+r>e.timeBarWidth&&(r=e.timeBarWidth-i),r>0&&(t=`<span class="cesium-timeline-highlight" style="left: ${i.toString()}px; width: ${r.toString()}px; bottom: ${this._base.toString()}px; height: ${this._height}px; background-color: ${this._color};"></span>`)}return t};var K9=UT;var Qpo=T(S(),1);function e_e(e,t,n,i){this.interval=e,this.height=t,this.color=n||new Y(.5,.5,.5,1),this.backgroundColor=i||new Y(0,0,0,0)}e_e.prototype.render=function(e,t){let n=this.interval.start,i=this.interval.stop,o=t.startJulian,r=te.addSeconds(t.startJulian,t.duration,new te);if(te.lessThan(n,o)&&te.greaterThan(i,r))e.fillStyle=this.color.toCssColorString(),e.fillRect(0,t.y,t.timeBarWidth,this.height);else if(te.lessThanOrEquals(n,r)&&te.greaterThanOrEquals(i,o)){let s,a,c;for(s=0;s<t.timeBarWidth;++s){let l=te.addSeconds(t.startJulian,s/t.timeBarWidth*t.duration,new te);!d(a)&&te.greaterThanOrEquals(l,n)?a=s:!d(c)&&te.greaterThanOrEquals(l,i)&&(c=s)}e.fillStyle=this.backgroundColor.toCssColorString(),e.fillRect(0,t.y,t.timeBarWidth,this.height),d(a)&&(d(c)||(c=t.timeBarWidth),e.fillStyle=this.color.toCssColorString(),e.fillRect(a,t.y,Math.max(c-a,1),this.height))}};var H9=e_e;var d8=1e12,qu={none:0,scrub:1,slide:2,zoom:3,touchOnly:4},Qc={none:0,scrub:1,slideZoom:2,singleTap:3,ignore:4},hg=[.001,.002,.005,.01,.02,.05,.1,.25,.5,1,2,5,10,15,30,60,120,300,600,900,1800,3600,7200,14400,21600,43200,86400,172800,345600,604800,1296e3,2592e3,5184e3,7776e3,15552e3,31536e3,63072e3,126144e3,15768e4,31536e4,63072e4,126144e4,15768e5,31536e5,63072e5,126144e5,15768e6,31536e6],zyt=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function jc(e,t){e=En(e);let n=e.ownerDocument;this.container=e;let i=n.createElement("div");i.className="cesium-timeline-main",e.appendChild(i),this._topDiv=i,this._endJulian=void 0,this._epochJulian=void 0,this._lastXPos=void 0,this._scrubElement=void 0,this._startJulian=void 0,this._timeBarSecondsSpan=void 0,this._clock=t,this._scrubJulian=t.currentTime,this._mainTicSpan=-1,this._mouseMode=qu.none,this._touchMode=Qc.none,this._touchState={centerX:0,spanX:0},this._mouseX=0,this._timelineDrag=0,this._timelineDragLocation=void 0,this._lastHeight=void 0,this._lastWidth=void 0,this._topDiv.innerHTML='<div class="cesium-timeline-bar"></div><div class="cesium-timeline-trackContainer"><canvas class="cesium-timeline-tracks" width="10" height="1"></canvas></div><div class="cesium-timeline-needle"></div><span class="cesium-timeline-ruler"></span>',this._timeBarEle=this._topDiv.childNodes[0],this._trackContainer=this._topDiv.childNodes[1],this._trackListEle=this._topDiv.childNodes[1].childNodes[0],this._needleEle=this._topDiv.childNodes[2],this._rulerEle=this._topDiv.childNodes[3],this._context=this._trackListEle.getContext("2d"),this._trackList=[],this._highlightRanges=[],this.zoomTo(t.startTime,t.stopTime),this._onMouseDown=Jyt(this),this._onMouseUp=Qyt(this),this._onMouseMove=jyt(this),this._onMouseWheel=qyt(this),this._onTouchStart=$yt(this),this._onTouchMove=tgt(this),this._onTouchEnd=egt(this);let o=this._timeBarEle;n.addEventListener("mouseup",this._onMouseUp,!1),n.addEventListener("mousemove",this._onMouseMove,!1),o.addEventListener("mousedown",this._onMouseDown,!1),o.addEventListener("DOMMouseScroll",this._onMouseWheel,!1),o.addEventListener("mousewheel",this._onMouseWheel,!1),o.addEventListener("touchstart",this._onTouchStart,!1),o.addEventListener("touchmove",this._onTouchMove,!1),o.addEventListener("touchend",this._onTouchEnd,!1),o.addEventListener("touchcancel",this._onTouchEnd,!1),this._topDiv.oncontextmenu=function(){return!1},t.onTick.addEventListener(this.updateFromClock,this),this.updateFromClock()}jc.prototype.addEventListener=function(e,t,n){this._topDiv.addEventListener(e,t,n)};jc.prototype.removeEventListener=function(e,t,n){this._topDiv.removeEventListener(e,t,n)};jc.prototype.isDestroyed=function(){return!1};jc.prototype.destroy=function(){this._clock.onTick.removeEventListener(this.updateFromClock,this);let e=this.container.ownerDocument;e.removeEventListener("mouseup",this._onMouseUp,!1),e.removeEventListener("mousemove",this._onMouseMove,!1);let t=this._timeBarEle;t.removeEventListener("mousedown",this._onMouseDown,!1),t.removeEventListener("DOMMouseScroll",this._onMouseWheel,!1),t.removeEventListener("mousewheel",this._onMouseWheel,!1),t.removeEventListener("touchstart",this._onTouchStart,!1),t.removeEventListener("touchmove",this._onTouchMove,!1),t.removeEventListener("touchend",this._onTouchEnd,!1),t.removeEventListener("touchcancel",this._onTouchEnd,!1),this.container.removeChild(this._topDiv),ue(this)};jc.prototype.addHighlightRange=function(e,t,n){let i=new K9(e,t,n);return this._highlightRanges.push(i),this.resize(),i};jc.prototype.addTrack=function(e,t,n,i){let o=new H9(e,t,n,i);return this._trackList.push(o),this._lastHeight=void 0,this.resize(),o};jc.prototype.zoomTo=function(e,t){if(this._startJulian=e,this._endJulian=t,this._timeBarSecondsSpan=te.secondsDifference(t,e),this._clock&&this._clock.clockRange!==Gr.UNBOUNDED){let i=this._clock.startTime,o=this._clock.stopTime,r=te.secondsDifference(o,i),s=te.secondsDifference(i,this._startJulian),a=te.secondsDifference(o,this._endJulian);this._timeBarSecondsSpan>=r?(this._timeBarSecondsSpan=r,this._startJulian=this._clock.startTime,this._endJulian=this._clock.stopTime):s>0?(this._endJulian=te.addSeconds(this._endJulian,s,new te),this._startJulian=i,this._timeBarSecondsSpan=te.secondsDifference(this._endJulian,this._startJulian)):a<0&&(this._startJulian=te.addSeconds(this._startJulian,a,new te),this._endJulian=o,this._timeBarSecondsSpan=te.secondsDifference(this._endJulian,this._startJulian))}this._makeTics();let n=document.createEvent("Event");n.initEvent("setzoom",!0,!0),n.startJulian=this._startJulian,n.endJulian=this._endJulian,n.epochJulian=this._epochJulian,n.totalSpan=this._timeBarSecondsSpan,n.mainTicSpan=this._mainTicSpan,this._topDiv.dispatchEvent(n)};jc.prototype.zoomFrom=function(e){let t=te.secondsDifference(this._scrubJulian,this._startJulian);e>1||t<0||t>this._timeBarSecondsSpan?t=this._timeBarSecondsSpan*.5:t+=t-this._timeBarSecondsSpan*.5;let n=this._timeBarSecondsSpan-t;this.zoomTo(te.addSeconds(this._startJulian,t-t*e,new te),te.addSeconds(this._endJulian,n*e-n,new te))};function u8(e){return e<10?`0${e.toString()}`:e.toString()}jc.prototype.makeLabel=function(e){let t=te.toGregorianDate(e),n=t.millisecond,i=" UTC";if(n>0&&this._timeBarSecondsSpan<3600){for(i=Math.floor(n).toString();i.length<3;)i=`0${i}`;i=`.${i}`}return`${zyt[t.month-1]} ${t.day} ${t.year} ${u8(t.hour)}:${u8(t.minute)}:${u8(t.second)}${i}`};jc.prototype.smallestTicInPixels=7;jc.prototype._makeTics=function(){let e=this._timeBarEle,t=te.secondsDifference(this._scrubJulian,this._startJulian),n=Math.round(t*this._topDiv.clientWidth/this._timeBarSecondsSpan),i=n-8,o,r=this;this._needleEle.style.left=`${n.toString()}px`;let s="",a=.01,c=31536e6,l=1e-10,u=0,m=this._timeBarSecondsSpan;m<a?(m=a,this._timeBarSecondsSpan=a,this._endJulian=te.addSeconds(this._startJulian,a,new te)):m>c&&(m=c,this._timeBarSecondsSpan=c,this._endJulian=te.addSeconds(this._startJulian,c,new te));let p=this._timeBarEle.clientWidth;p<10&&(p=10);let y=this._startJulian,f=Math.min(m/p*1e-5,.4),x,_=te.toGregorianDate(y);m>31536e4?x=te.fromDate(new Date(Date.UTC(Math.floor(_.year/100)*100,0))):m>31536e3?x=te.fromDate(new Date(Date.UTC(Math.floor(_.year/10)*10,0))):m>86400?x=te.fromDate(new Date(Date.UTC(_.year,0))):x=te.fromDate(new Date(Date.UTC(_.year,_.month,_.day)));let C=te.secondsDifference(this._startJulian,te.addSeconds(x,f,new te)),V=C+m;this._epochJulian=x;function L(U){return Math.floor(C/U)*U}function Z(U,J){return Math.ceil(U/J+.5)*J}function G(U){return(U-C)/m}function X(U,J){return U-J*Math.round(U/J)}this._rulerEle.innerHTML=this.makeLabel(te.addSeconds(this._endJulian,-a,new te));let P=this._rulerEle.offsetWidth+20;P<30&&(P=180);let v=u;u-=l;let F={startTime:C,startJulian:y,epochJulian:x,duration:m,timeBarWidth:p,getAlpha:G};this._highlightRanges.forEach(function(U){s+=U.render(F)});let M=0,b=0,R=0,E=P/p;E>1&&(E=1),E*=this._timeBarSecondsSpan;let I=-1,w=-1,N=hg.length,B;for(B=0;B<N;++B){let U=hg[B];if(++I,M=U,U>E&&U>u)break;w<0&&p*(U/this._timeBarSecondsSpan)>=this.smallestTicInPixels&&(w=I)}if(I>0){for(;I>0;)if(--I,Math.abs(X(M,hg[I]))<1e-5){hg[I]>=u&&(b=hg[I]);break}if(w>=0)for(;w<I;){if(Math.abs(X(b,hg[w]))<1e-5&&hg[w]>=u){R=hg[w];break}++w}}u=v,u>l&&R<1e-5&&Math.abs(u-M)>l&&(R=u,u<=M+l&&(b=0));let k=-999999,O;if(p*(R/this._timeBarSecondsSpan)>=3)for(o=L(R);o<=V;o=Z(o,R))s+=`<span class="cesium-timeline-ticTiny" style="left: ${Math.round(p*G(o)).toString()}px;"></span>`;if(p*(b/this._timeBarSecondsSpan)>=3)for(o=L(b);o<=V;o=Z(o,b))s+=`<span class="cesium-timeline-ticSub" style="left: ${Math.round(p*G(o)).toString()}px;"></span>`;if(p*(M/this._timeBarSecondsSpan)>=2){this._mainTicSpan=M,V+=M,o=L(M);let U=te.computeTaiMinusUtc(x);for(;o<=V;){let J=te.addSeconds(y,o-C,new te);if(M>2.1){let j=te.computeTaiMinusUtc(J);Math.abs(j-U)>.1&&(o+=j-U,J=te.addSeconds(y,o-C,new te))}let z=Math.round(p*G(o)),ee=this.makeLabel(J);this._rulerEle.innerHTML=ee,O=this._rulerEle.offsetWidth,O<10&&(O=P);let K=z-(O/2-1);K>k?(k=K+O+5,s+=`<span class="cesium-timeline-ticMain" style="left: ${z.toString()}px;"></span><span class="cesium-timeline-ticLabel" style="left: ${K.toString()}px;">${ee}</span>`):s+=`<span class="cesium-timeline-ticSub" style="left: ${z.toString()}px;"></span>`,o=Z(o,M)}}else this._mainTicSpan=-1;s+=`<span class="cesium-timeline-icon16" style="left:${i}px;bottom:0;background-position: 0 0;"></span>`,e.innerHTML=s,this._scrubElement=e.lastChild,this._context.clearRect(0,0,this._trackListEle.width,this._trackListEle.height),F.y=0,this._trackList.forEach(function(U){U.render(r._context,F),F.y+=U.height})};jc.prototype.updateFromClock=function(){this._scrubJulian=this._clock.currentTime;let e=this._scrubElement;if(d(this._scrubElement)){let t=te.secondsDifference(this._scrubJulian,this._startJulian),n=Math.round(t*this._topDiv.clientWidth/this._timeBarSecondsSpan);this._lastXPos!==n&&(this._lastXPos=n,e.style.left=`${n-8}px`,this._needleEle.style.left=`${n}px`)}d(this._timelineDragLocation)&&(this._setTimeBarTime(this._timelineDragLocation,this._timelineDragLocation*this._timeBarSecondsSpan/this._topDiv.clientWidth),this.zoomTo(te.addSeconds(this._startJulian,this._timelineDrag,new te),te.addSeconds(this._endJulian,this._timelineDrag,new te)))};jc.prototype._setTimeBarTime=function(e,t){if(e=Math.round(e),this._scrubJulian=te.addSeconds(this._startJulian,t,new te),this._scrubElement){let i=e-8;this._scrubElement.style.left=`${i.toString()}px`,this._needleEle.style.left=`${e.toString()}px`}let n=document.createEvent("Event");n.initEvent("settime",!0,!0),n.clientX=e,n.timeSeconds=t,n.timeJulian=this._scrubJulian,n.clock=this._clock,this._topDiv.dispatchEvent(n)};function Jyt(e){return function(t){e._mouseMode!==qu.touchOnly&&(t.button===0?(e._mouseMode=qu.scrub,e._scrubElement&&(e._scrubElement.style.backgroundPosition="-16px 0"),e._onMouseMove(t)):(e._mouseX=t.clientX,t.button===2?e._mouseMode=qu.zoom:e._mouseMode=qu.slide)),t.preventDefault()}}function Qyt(e){return function(t){e._mouseMode=qu.none,e._scrubElement&&(e._scrubElement.style.backgroundPosition="0 0"),e._timelineDrag=0,e._timelineDragLocation=void 0}}function jyt(e){return function(t){let n;if(e._mouseMode===qu.scrub){t.preventDefault();let i=t.clientX-e._topDiv.getBoundingClientRect().left;i<0?(e._timelineDragLocation=0,e._timelineDrag=-.01*e._timeBarSecondsSpan):i>e._topDiv.clientWidth?(e._timelineDragLocation=e._topDiv.clientWidth,e._timelineDrag=.01*e._timeBarSecondsSpan):(e._timelineDragLocation=void 0,e._setTimeBarTime(i,i*e._timeBarSecondsSpan/e._topDiv.clientWidth))}else if(e._mouseMode===qu.slide){if(n=e._mouseX-t.clientX,e._mouseX=t.clientX,n!==0){let i=n*e._timeBarSecondsSpan/e._topDiv.clientWidth;e.zoomTo(te.addSeconds(e._startJulian,i,new te),te.addSeconds(e._endJulian,i,new te))}}else e._mouseMode===qu.zoom&&(n=e._mouseX-t.clientX,e._mouseX=t.clientX,n!==0&&e.zoomFrom(Math.pow(1.01,n)))}}function qyt(e){return function(t){let n=t.wheelDeltaY||t.wheelDelta||-t.detail;d8=Math.max(Math.min(Math.abs(n),d8),1),n/=d8,e.zoomFrom(Math.pow(1.05,-n))}}function $yt(e){return function(t){let n=t.touches.length,i,o,r=e._topDiv.getBoundingClientRect().left;t.preventDefault(),e._mouseMode=qu.touchOnly,n===1?(i=te.secondsDifference(e._scrubJulian,e._startJulian),o=Math.round(i*e._topDiv.clientWidth/e._timeBarSecondsSpan+r),Math.abs(t.touches[0].clientX-o)<50?(e._touchMode=Qc.scrub,e._scrubElement&&(e._scrubElement.style.backgroundPosition=n===1?"-16px 0":"0 0")):(e._touchMode=Qc.singleTap,e._touchState.centerX=t.touches[0].clientX-r)):n===2?(e._touchMode=Qc.slideZoom,e._touchState.centerX=(t.touches[0].clientX+t.touches[1].clientX)*.5-r,e._touchState.spanX=Math.abs(t.touches[0].clientX-t.touches[1].clientX)):e._touchMode=Qc.ignore}}function egt(e){return function(t){let n=t.touches.length,i=e._topDiv.getBoundingClientRect().left;e._touchMode===Qc.singleTap?(e._touchMode=Qc.scrub,e._onTouchMove(t)):e._touchMode===Qc.scrub&&e._onTouchMove(t),e._mouseMode=qu.touchOnly,n!==1?e._touchMode=n>0?Qc.ignore:Qc.none:e._touchMode===Qc.slideZoom&&(e._touchState.centerX=t.touches[0].clientX-i),e._scrubElement&&(e._scrubElement.style.backgroundPosition="0 0")}}function tgt(e){return function(t){let n,i,o,r,s,a,c=1,l=e._topDiv.getBoundingClientRect().left;e._touchMode===Qc.singleTap&&(e._touchMode=Qc.slideZoom),e._mouseMode=qu.touchOnly,e._touchMode===Qc.scrub?(t.preventDefault(),t.changedTouches.length===1&&(i=t.changedTouches[0].clientX-l,i>=0&&i<=e._topDiv.clientWidth&&e._setTimeBarTime(i,i*e._timeBarSecondsSpan/e._topDiv.clientWidth))):e._touchMode===Qc.slideZoom&&(o=t.touches.length,o===2?(r=(t.touches[0].clientX+t.touches[1].clientX)*.5-l,s=Math.abs(t.touches[0].clientX-t.touches[1].clientX)):o===1&&(r=t.touches[0].clientX-l,s=0),d(r)&&(s>0&&e._touchState.spanX>0?(c=e._touchState.spanX/s,a=te.addSeconds(e._startJulian,(e._touchState.centerX*e._timeBarSecondsSpan-r*e._timeBarSecondsSpan*c)/e._topDiv.clientWidth,new te)):(n=e._touchState.centerX-r,a=te.addSeconds(e._startJulian,n*e._timeBarSecondsSpan/e._topDiv.clientWidth,new te)),e.zoomTo(a,te.addSeconds(a,e._timeBarSecondsSpan*c,new te)),e._touchState.centerX=r,e._touchState.spanX=s))}}jc.prototype.resize=function(){let e=this.container.clientWidth,t=this.container.clientHeight;if(e===this._lastWidth&&t===this._lastHeight)return;this._trackContainer.style.height=`${t}px`;let n=1;this._trackList.forEach(function(i){n+=i.height}),this._trackListEle.style.height=`${n.toString()}px`,this._trackListEle.width=this._trackListEle.clientWidth,this._trackListEle.height=n,this._makeTics(),this._lastXPos=void 0,this._lastWidth=e,this._lastHeight=t};var z9=jc;var x0o=T(S(),1);var m0o=T(S(),1);var r_e=T(o_e(),1);function ogt(e){let t=!1,n=window.screen;return d(n)&&(d(n.lockOrientation)?t=n.lockOrientation(e):d(n.mozLockOrientation)?t=n.mozLockOrientation(e):d(n.msLockOrientation)?t=n.msLockOrientation(e):d(n.orientation&&n.orientation.lock)&&(t=n.orientation.lock(e))),t}function s_e(){let e=window.screen;d(e)&&(d(e.unlockOrientation)?e.unlockOrientation():d(e.mozUnlockOrientation)?e.mozUnlockOrientation():d(e.msUnlockOrientation)?e.msUnlockOrientation():d(e.orientation&&e.orientation.unlock)&&e.orientation.unlock())}function rgt(e,t,n,i){i()||(n()?(t.useWebVR=!1,e._locked&&(s_e(),e._locked=!1),e._noSleep.disable(),lr.exitFullscreen(),n(!1)):(lr.fullscreen||lr.requestFullscreen(e._vrElement),e._noSleep.enable(),e._locked||(e._locked=ogt("landscape")),t.useWebVR=!0,n(!0)))}function AD(e,t){let n=this,i=Se.observable(lr.enabled),o=Se.observable(!1);this.isVRMode=void 0,Se.defineProperty(this,"isVRMode",{get:function(){return o()}}),this.isVREnabled=void 0,Se.defineProperty(this,"isVREnabled",{get:function(){return i()},set:function(s){i(s&&lr.enabled)}}),this.tooltip=void 0,Se.defineProperty(this,"tooltip",function(){return i()?o()?"Exit VR mode":"Enter VR mode":"VR mode is unavailable"});let r=Se.observable(!1);this._isOrthographic=void 0,Se.defineProperty(this,"_isOrthographic",{get:function(){return r()}}),this._eventHelper=new Cr,this._eventHelper.add(e.preRender,function(){r(e.camera.frustum instanceof en)}),this._locked=!1,this._noSleep=new r_e.default,this._command=Cn(function(){rgt(n,e,o,r)},Se.getObservable(this,"isVREnabled")),this._vrElement=g(En(t),document.body),this._callback=function(){!lr.fullscreen&&o()&&(e.useWebVR=!1,n._locked&&(s_e(),n._locked=!1),n._noSleep.disable(),o(!1))},document.addEventListener(lr.changeEventName,this._callback)}Object.defineProperties(AD.prototype,{vrElement:{get:function(){return this._vrElement},set:function(e){this._vrElement=e}},command:{get:function(){return this._command}}});AD.prototype.isDestroyed=function(){return!1};AD.prototype.destroy=function(){this._eventHelper.removeAll(),document.removeEventListener(lr.changeEventName,this._callback),ue(this)};var J9=AD;var sgt="M 5.3125 6.375 C 4.008126 6.375 2.96875 7.4141499 2.96875 8.71875 L 2.96875 19.5 C 2.96875 20.8043 4.008126 21.875 5.3125 21.875 L 13.65625 21.875 C 13.71832 20.0547 14.845166 18.59375 16.21875 18.59375 C 17.592088 18.59375 18.71881 20.0552 18.78125 21.875 L 27.09375 21.875 C 28.398125 21.875 29.4375 20.8043 29.4375 19.5 L 29.4375 8.71875 C 29.4375 7.4141499 28.398125 6.375 27.09375 6.375 L 5.3125 6.375 z M 9.625 10.4375 C 11.55989 10.4375 13.125 12.03385 13.125 13.96875 C 13.125 15.90365 11.55989 17.46875 9.625 17.46875 C 7.69011 17.46875 6.125 15.90365 6.125 13.96875 C 6.125 12.03385 7.69011 10.4375 9.625 10.4375 z M 22.46875 10.4375 C 24.40364 10.4375 25.96875 12.03385 25.96875 13.96875 C 25.96875 15.90365 24.40364 17.46875 22.46875 17.46875 C 20.53386 17.46875 18.96875 15.90365 18.96875 13.96875 C 18.96875 12.03385 20.53386 10.4375 22.46875 10.4375 z",agt="M 25.770585,2.4552065 C 15.72282,13.962707 10.699956,19.704407 8.1768352,22.580207 c -1.261561,1.4379 -1.902282,2.1427 -2.21875,2.5 -0.141624,0.1599 -0.208984,0.2355 -0.25,0.2813 l 0.6875,0.75 c 10e-5,-10e-5 0.679191,0.727 0.6875,0.7187 0.01662,-0.016 0.02451,-0.024 0.03125,-0.031 0.01348,-0.014 0.04013,-0.038 0.0625,-0.062 0.04474,-0.05 0.120921,-0.1315 0.28125,-0.3126 0.320657,-0.3619 0.956139,-1.0921 2.2187499,-2.5312 2.5252219,-2.8781 7.5454589,-8.6169 17.5937499,-20.1250005 l -1.5,-1.3125 z m -20.5624998,3.9063 c -1.304375,0 -2.34375,1.0391 -2.34375,2.3437 l 0,10.8125005 c 0,1.3043 1.039375,2.375 2.34375,2.375 l 2.25,0 c 1.9518039,-2.2246 7.4710958,-8.5584 13.5624998,-15.5312005 l -15.8124998,0 z m 21.1249998,0 c -1.855467,2.1245 -2.114296,2.4005 -3.59375,4.0936995 1.767282,0.1815 3.15625,1.685301 3.15625,3.500001 0,1.9349 -1.56511,3.5 -3.5,3.5 -1.658043,0 -3.043426,-1.1411 -3.40625,-2.6875 -1.089617,1.2461 -2.647139,2.9988 -3.46875,3.9375 0.191501,-0.062 0.388502,-0.094 0.59375,-0.094 1.373338,0 2.50006,1.4614 2.5625,3.2812 l 8.3125,0 c 1.304375,0 2.34375,-1.0707 2.34375,-2.375 l 0,-10.8125005 c 0,-1.3046 -1.039375,-2.3437 -2.34375,-2.3437 l -0.65625,0 z M 9.5518351,10.423906 c 1.9348899,0 3.4999999,1.596401 3.4999999,3.531301 0,1.9349 -1.56511,3.5 -3.4999999,3.5 -1.9348899,0 -3.4999999,-1.5651 -3.4999999,-3.5 0,-1.9349 1.56511,-3.531301 3.4999999,-3.531301 z m 4.2187499,10.312601 c -0.206517,0.2356 -0.844218,0.9428 -1.03125,1.1562 l 0.8125,0 c 0.01392,-0.4081 0.107026,-0.7968 0.21875,-1.1562 z";function MD(e,t,n){e=En(e);let i=new J9(t,n);i._exitVRPath=agt,i._enterVRPath=sgt;let o=document.createElement("button");o.type="button",o.className="cesium-button cesium-vrButton",o.setAttribute("data-bind",'css: { "cesium-button-disabled" : _isOrthographic }, attr: { title: tooltip },click: command,enable: isVREnabled,cesiumSvgPath: { path: isVRMode ? _exitVRPath : _enterVRPath, width: 32, height: 32 }'),e.appendChild(o),Se.applyBindings(i,o),this._container=e,this._viewModel=i,this._element=o}Object.defineProperties(MD.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});MD.prototype.isDestroyed=function(){return!1};MD.prototype.destroy=function(){return this._viewModel.destroy(),Se.cleanNode(this._element),this._container.removeChild(this._element),ue(this)};var Q9=MD;var k0o=T(S(),1);var fg=new ce;function l_e(e){let t=e.clock;t.currentTime=e.timeJulian,t.shouldAnimate=!1}function cgt(e){let t=e.getPropertyIds(),n="";return t.forEach(function(i){let o=e.getProperty(i);d(o)&&(n+=`<tr><th>${i}</th><td>${o}</td></tr>`)}),n.length>0&&(n=`<table class="cesium-infoBox-defaultTable"><tbody>${n}</tbody></table>`),n}function lgt(e){let t,n=[],i=e.getPropertyIds();for(t=0;t<i.length;t++){let r=i[t];/^name$/i.test(r)?n[0]=e.getProperty(r):/name/i.test(r)?n[1]=e.getProperty(r):/^title$/i.test(r)?n[2]=e.getProperty(r):/^(id|identifier)$/i.test(r)?n[3]=e.getProperty(r):/element/i.test(r)?n[4]=e.getProperty(r):/(id|identifier)$/i.test(r)&&(n[5]=e.getProperty(r))}let o=n.length;for(t=0;t<o;t++){let r=n[t];if(d(r)&&r!=="")return r}return"Unnamed Feature"}function a_e(e,t){let n=e.scene.pick(t.position);if(d(n)){let i=g(n.id,n.primitive.id);if(i instanceof Oo)return i;if(n instanceof Ts)return new Oo({name:lgt(n),description:cgt(n),feature:n})}if(d(e.scene.globe))return mgt(e,t.position)}var dgt=new te;function d_e(e,t,n){if(d(n)){let i=n.clock;if(d(i)&&(i.getValue(t),d(e))){let o=i.startTime,r=i.stopTime;te.equals(o,r)&&(r=te.addSeconds(o,W.EPSILON2,dgt)),e.updateFromClock(),e.zoomTo(o,r)}}}var ugt=new h;function mgt(e,t){let n=e.scene,i=n.camera.getPickRay(t),o=n.imageryLayers.pickImageryLayerFeatures(i,n);if(!d(o))return;let r=new Oo({id:"Loading...",description:"Loading feature information..."});return o.then(function(s){if(e.selectedEntity!==r)return;if(!d(s)||s.length===0){e.selectedEntity=c_e();return}let a=s[0],c=new Oo({id:a.name,description:a.description});if(d(a.position)){let l=e.scene.globe.ellipsoid.cartographicToCartesian(a.position,ugt);c.position=new Rc(l)}e.selectedEntity=c},function(){e.selectedEntity===r&&(e.selectedEntity=c_e())}),r}function c_e(){return new Oo({id:"None",description:"No features found."})}function hgt(e,t){let n=e._geocoder,i=e._homeButton,o=e._sceneModePicker,r=e._projectionPicker,s=e._baseLayerPicker,a=e._animation,c=e._timeline,l=e._fullscreenButton,u=e._infoBox,m=e._selectionIndicator,p=t?"hidden":"visible";if(d(n)&&(n.container.style.visibility=p),d(i)&&(i.container.style.visibility=p),d(o)&&(o.container.style.visibility=p),d(r)&&(r.container.style.visibility=p),d(s)&&(s.container.style.visibility=p),d(a)&&(a.container.style.visibility=p),d(c)&&(c.container.style.visibility=p),d(l)&&l.viewModel.isFullscreenEnabled&&(l.container.style.visibility=p),d(u)&&(u.container.style.visibility=p),d(m)&&(m.container.style.visibility=p),e._container){let y=t||!d(l)?0:l.container.clientWidth;e._vrButton.container.style.right=`${y}px`,e.forceResize()}}function wi(e,t){e=En(e),t=g(t,g.EMPTY_OBJECT);let n=(!d(t.globe)||t.globe!==!1)&&(!d(t.baseLayerPicker)||t.baseLayerPicker!==!1),i=this,o=document.createElement("div");o.className="cesium-viewer",e.appendChild(o);let r=document.createElement("div");r.className="cesium-viewer-cesiumWidgetContainer",o.appendChild(r);let s=document.createElement("div");s.className="cesium-viewer-bottom",o.appendChild(s);let a=g(t.scene3DOnly,!1),c,l,u=!1;d(t.clockViewModel)?(l=t.clockViewModel,c=l.clock):(c=new km,l=new d9(c),u=!0),d(t.shouldAnimate)&&(c.shouldAnimate=t.shouldAnimate);let m=new pF(r,{baseLayer:n||d(t.baseLayer)||d(t.imageryProvider)?!1:void 0,clock:c,skyBox:t.skyBox,skyAtmosphere:t.skyAtmosphere,sceneMode:t.sceneMode,mapProjection:t.mapProjection,globe:t.globe,orderIndependentTranslucency:t.orderIndependentTranslucency,contextOptions:t.contextOptions,useDefaultRenderLoop:t.useDefaultRenderLoop,targetFrameRate:t.targetFrameRate,showRenderLoopErrors:t.showRenderLoopErrors,useBrowserRecommendedResolution:t.useBrowserRecommendedResolution,creditContainer:d(t.creditContainer)?t.creditContainer:s,creditViewport:t.creditViewport,scene3DOnly:a,shadows:t.shadows,terrainShadows:t.terrainShadows,mapMode2D:t.mapMode2D,blurActiveElementOnCanvasFocus:t.blurActiveElementOnCanvasFocus,requestRenderMode:t.requestRenderMode,maximumRenderTimeChange:t.maximumRenderTimeChange,depthPlaneEllipsoidOffset:t.depthPlaneEllipsoidOffset,msaaSamples:t.msaaSamples}),p=t.dataSources,y=!1;d(p)||(p=new f2,y=!0);let f=m.scene,x=new eP({scene:f,dataSourceCollection:p}),_=new Cr;_.add(c.onTick,wi.prototype._onTick,this),_.add(f.morphStart,wi.prototype._clearTrackedObject,this);let C;if(!d(t.selectionIndicator)||t.selectionIndicator!==!1){let z=document.createElement("div");z.className="cesium-viewer-selectionIndicatorContainer",o.appendChild(z),C=new O9(z,f)}let V;if(!d(t.infoBox)||t.infoBox!==!1){let z=document.createElement("div");z.className="cesium-viewer-infoBoxContainer",o.appendChild(z),V=new v9(z);let ee=V.viewModel;_.add(ee.cameraClicked,wi.prototype._onInfoBoxCameraClicked,this),_.add(ee.closeClicked,wi.prototype._onInfoBoxClockClicked,this)}let L=document.createElement("div");L.className="cesium-viewer-toolbar",o.appendChild(L);let Z;if(!d(t.geocoder)||t.geocoder!==!1){let z=document.createElement("div");z.className="cesium-viewer-geocoderContainer",L.appendChild(z);let ee;d(t.geocoder)&&typeof t.geocoder!="boolean"&&(ee=Array.isArray(t.geocoder)?t.geocoder:[t.geocoder]),Z=new X9({container:z,geocoderServices:ee,scene:f}),_.add(Z.viewModel.search.beforeExecute,wi.prototype._clearObjects,this)}let G;(!d(t.homeButton)||t.homeButton!==!1)&&(G=new W9(L,f),d(Z)&&_.add(G.viewModel.command.afterExecute,function(){let z=Z.viewModel;z.searchText="",z.isSearchInProgress&&z.search()}),_.add(G.viewModel.command.beforeExecute,wi.prototype._clearTrackedObject,this));let X;!a&&(!d(t.sceneModePicker)||t.sceneModePicker!==!1)&&(X=new D9(L,f));let P;t.projectionPicker&&(P=new U9(L,f));let v,F;if(n){let z=g(t.imageryProviderViewModels,g9()),ee=g(t.terrainProviderViewModels,x9());v=new y9(L,{globe:f.globe,imageryProviderViewModels:z,selectedImageryProviderViewModel:t.selectedImageryProviderViewModel,terrainProviderViewModels:ee,selectedTerrainProviderViewModel:t.selectedTerrainProviderViewModel}),F=L.getElementsByClassName("cesium-baseLayerPicker-dropDown")[0]}d(t.baseLayer)&&t.baseLayer!==!1&&(n&&(v.viewModel.selectedImagery=void 0),f.imageryLayers.removeAll(),f.imageryLayers.add(t.baseLayer)),d(t.terrainProvider)&&(n&&(v.viewModel.selectedTerrain=void 0),f.terrainProvider=t.terrainProvider),d(t.terrain)&&(n&&(v.viewModel.selectedTerrain=void 0,f.globe.depthTestAgainstTerrain=!0),f.setTerrain(t.terrain));let M;if(!d(t.navigationHelpButton)||t.navigationHelpButton!==!1){let z=!0;try{if(d(window.localStorage)){let ee=window.localStorage.getItem("cesium-hasSeenNavHelp");d(ee)&&ee?z=!1:window.localStorage.setItem("cesium-hasSeenNavHelp","true")}}catch{}M=new F9({container:L,instructionsInitiallyVisible:g(t.navigationInstructionsInitiallyVisible,z)})}let b;if(!d(t.animation)||t.animation!==!1){let z=document.createElement("div");z.className="cesium-viewer-animationContainer",o.appendChild(z),b=new f9(z,new p9(l))}let R;if(!d(t.timeline)||t.timeline!==!1){let z=document.createElement("div");z.className="cesium-viewer-timelineContainer",o.appendChild(z),R=new z9(z,c),R.addEventListener("settime",l_e,!1),R.zoomTo(c.startTime,c.stopTime)}let E,I,w;(!d(t.fullscreenButton)||t.fullscreenButton!==!1)&&(w=document.createElement("div"),w.className="cesium-viewer-fullscreenContainer",o.appendChild(w),E=new G9(w,t.fullscreenElement),I=aa(E.viewModel,"isFullscreenEnabled",function(z){w.style.display=z?"block":"none",d(R)&&(R.container.style.right=`${w.clientWidth}px`,R.resize())}));let N,B,k;if(t.vrButton){let z=document.createElement("div");z.className="cesium-viewer-vrContainer",o.appendChild(z),N=new Q9(z,f,t.fullScreenElement),B=aa(N.viewModel,"isVREnabled",function(ee){z.style.display=ee?"block":"none",d(E)&&(z.style.right=`${w.clientWidth}px`),d(R)&&(R.container.style.right=`${z.clientWidth}px`,R.resize())}),k=aa(N.viewModel,"isVRMode",function(ee){hgt(i,ee)})}this._baseLayerPickerDropDown=F,this._fullscreenSubscription=I,this._vrSubscription=B,this._vrModeSubscription=k,this._dataSourceChangedListeners={},this._automaticallyTrackDataSourceClocks=g(t.automaticallyTrackDataSourceClocks,!0),this._container=e,this._bottomContainer=s,this._element=o,this._cesiumWidget=m,this._selectionIndicator=C,this._infoBox=V,this._dataSourceCollection=p,this._destroyDataSourceCollection=y,this._dataSourceDisplay=x,this._clockViewModel=l,this._destroyClockViewModel=u,this._toolbar=L,this._homeButton=G,this._sceneModePicker=X,this._projectionPicker=P,this._baseLayerPicker=v,this._navigationHelpButton=M,this._animation=b,this._timeline=R,this._fullscreenButton=E,this._vrButton=N,this._geocoder=Z,this._eventHelper=_,this._lastWidth=0,this._lastHeight=0,this._allowDataSourcesToSuspendAnimation=!0,this._entityView=void 0,this._enableInfoOrSelection=d(V)||d(C),this._clockTrackedDataSource=void 0,this._trackedEntity=void 0,this._needTrackedEntityUpdate=!1,this._selectedEntity=void 0,this._zoomIsFlight=!1,this._zoomTarget=void 0,this._zoomPromise=void 0,this._zoomOptions=void 0,this._selectedEntityChanged=new ye,this._trackedEntityChanged=new ye,Se.track(this,["_trackedEntity","_selectedEntity","_clockTrackedDataSource"]),_.add(p.dataSourceAdded,wi.prototype._onDataSourceAdded,this),_.add(p.dataSourceRemoved,wi.prototype._onDataSourceRemoved,this),_.add(f.postUpdate,wi.prototype.resize,this),_.add(f.postRender,wi.prototype._postRender,this);let O=p.length;for(let z=0;z<O;z++)this._dataSourceAdded(p,p.get(z));this._dataSourceAdded(void 0,x.defaultDataSource),_.add(p.dataSourceAdded,wi.prototype._dataSourceAdded,this),_.add(p.dataSourceRemoved,wi.prototype._dataSourceRemoved,this);function U(z){let ee=a_e(i,z);d(ee)?H.getValueOrUndefined(ee.position,i.clock.currentTime)?i.trackedEntity=ee:i.zoomTo(ee):d(i.trackedEntity)&&(i.trackedEntity=void 0)}function J(z){i.selectedEntity=a_e(i,z)}m.screenSpaceEventHandler.setInputAction(J,_n.LEFT_CLICK),m.screenSpaceEventHandler.setInputAction(U,_n.LEFT_DOUBLE_CLICK)}Object.defineProperties(wi.prototype,{container:{get:function(){return this._container}},creditDisplay:{get:function(){return this._cesiumWidget.creditDisplay}},bottomContainer:{get:function(){return this._bottomContainer}},cesiumWidget:{get:function(){return this._cesiumWidget}},selectionIndicator:{get:function(){return this._selectionIndicator}},infoBox:{get:function(){return this._infoBox}},geocoder:{get:function(){return this._geocoder}},homeButton:{get:function(){return this._homeButton}},sceneModePicker:{get:function(){return this._sceneModePicker}},projectionPicker:{get:function(){return this._projectionPicker}},baseLayerPicker:{get:function(){return this._baseLayerPicker}},navigationHelpButton:{get:function(){return this._navigationHelpButton}},animation:{get:function(){return this._animation}},timeline:{get:function(){return this._timeline}},fullscreenButton:{get:function(){return this._fullscreenButton}},vrButton:{get:function(){return this._vrButton}},dataSourceDisplay:{get:function(){return this._dataSourceDisplay}},entities:{get:function(){return this._dataSourceDisplay.defaultDataSource.entities}},dataSources:{get:function(){return this._dataSourceCollection}},canvas:{get:function(){return this._cesiumWidget.canvas}},scene:{get:function(){return this._cesiumWidget.scene}},shadows:{get:function(){return this.scene.shadowMap.enabled},set:function(e){this.scene.shadowMap.enabled=e}},terrainShadows:{get:function(){return this.scene.globe.shadows},set:function(e){this.scene.globe.shadows=e}},shadowMap:{get:function(){return this.scene.shadowMap}},imageryLayers:{get:function(){return this.scene.imageryLayers}},terrainProvider:{get:function(){return this.scene.terrainProvider},set:function(e){this.scene.terrainProvider=e}},camera:{get:function(){return this.scene.camera}},postProcessStages:{get:function(){return this.scene.postProcessStages}},clock:{get:function(){return this._clockViewModel.clock}},clockViewModel:{get:function(){return this._clockViewModel}},screenSpaceEventHandler:{get:function(){return this._cesiumWidget.screenSpaceEventHandler}},targetFrameRate:{get:function(){return this._cesiumWidget.targetFrameRate},set:function(e){this._cesiumWidget.targetFrameRate=e}},useDefaultRenderLoop:{get:function(){return this._cesiumWidget.useDefaultRenderLoop},set:function(e){this._cesiumWidget.useDefaultRenderLoop=e}},resolutionScale:{get:function(){return this._cesiumWidget.resolutionScale},set:function(e){this._cesiumWidget.resolutionScale=e}},useBrowserRecommendedResolution:{get:function(){return this._cesiumWidget.useBrowserRecommendedResolution},set:function(e){this._cesiumWidget.useBrowserRecommendedResolution=e}},allowDataSourcesToSuspendAnimation:{get:function(){return this._allowDataSourcesToSuspendAnimation},set:function(e){this._allowDataSourcesToSuspendAnimation=e}},trackedEntity:{get:function(){return this._trackedEntity},set:function(e){if(this._trackedEntity!==e){this._trackedEntity=e,p8(this);let t=this.scene,n=t.mode;!d(e)||!d(e.position)?(this._needTrackedEntityUpdate=!1,(n===ie.COLUMBUS_VIEW||n===ie.SCENE2D)&&(t.screenSpaceCameraController.enableTranslate=!0),(n===ie.COLUMBUS_VIEW||n===ie.SCENE3D)&&(t.screenSpaceCameraController.enableTilt=!0),this._entityView=void 0,this.camera.lookAtTransform(A.IDENTITY)):this._needTrackedEntityUpdate=!0,this._trackedEntityChanged.raiseEvent(e),this.scene.requestRender()}}},selectedEntity:{get:function(){return this._selectedEntity},set:function(e){if(this._selectedEntity!==e){this._selectedEntity=e;let t=d(this._selectionIndicator)?this._selectionIndicator.viewModel:void 0;d(e)?d(t)&&t.animateAppear():d(t)&&t.animateDepart(),this._selectedEntityChanged.raiseEvent(e)}}},selectedEntityChanged:{get:function(){return this._selectedEntityChanged}},trackedEntityChanged:{get:function(){return this._trackedEntityChanged}},clockTrackedDataSource:{get:function(){return this._clockTrackedDataSource},set:function(e){this._clockTrackedDataSource!==e&&(this._clockTrackedDataSource=e,d_e(this._timeline,this.clock,e))}}});wi.prototype.extend=function(e,t){e(this,t)};wi.prototype.resize=function(){let e=this._cesiumWidget,t=this._container,n=t.clientWidth,i=t.clientHeight,o=d(this._animation),r=d(this._timeline);if(e.resize(),n===this._lastWidth&&i===this._lastHeight)return;let s=i-125,a=this._baseLayerPickerDropDown;if(d(a)&&(a.style.maxHeight=`${s}px`),d(this._geocoder)){let y=this._geocoder.searchSuggestionsContainer;y.style.maxHeight=`${s}px`}d(this._infoBox)&&(this._infoBox.viewModel.maxHeight=s);let c=this._timeline,l,u=0,m=0,p=0;if(o&&window.getComputedStyle(this._animation.container).visibility!=="hidden"){let y=this._lastWidth;l=this._animation.container,n>900?(u=169,y<=900&&(l.style.width="169px",l.style.height="112px",this._animation.resize())):n>=600?(u=136,(y<600||y>900)&&(l.style.width="136px",l.style.height="90px",this._animation.resize())):(u=106,(y>600||y===0)&&(l.style.width="106px",l.style.height="70px",this._animation.resize())),m=u+5}if(r&&window.getComputedStyle(this._timeline.container).visibility!=="hidden"){let y=this._fullscreenButton,f=this._vrButton,x=c.container,_=x.style;p=x.clientHeight+3,_.left=`${u}px`;let C=0;d(y)&&(C+=y.container.clientWidth),d(f)&&(C+=f.container.clientWidth),_.right=`${C}px`,c.resize()}this._bottomContainer.style.left=`${m}px`,this._bottomContainer.style.bottom=`${p}px`,this._lastWidth=n,this._lastHeight=i};wi.prototype.forceResize=function(){this._lastWidth=0,this.resize()};wi.prototype.render=function(){this._cesiumWidget.render()};wi.prototype.isDestroyed=function(){return!1};wi.prototype.destroy=function(){let e;this.screenSpaceEventHandler.removeInputAction(_n.LEFT_CLICK),this.screenSpaceEventHandler.removeInputAction(_n.LEFT_DOUBLE_CLICK);let t=this.dataSources,n=t.length;for(e=0;e<n;e++)this._dataSourceRemoved(t,t.get(e));return this._dataSourceRemoved(void 0,this._dataSourceDisplay.defaultDataSource),this._container.removeChild(this._element),this._element.removeChild(this._toolbar),this._eventHelper.removeAll(),d(this._geocoder)&&(this._geocoder=this._geocoder.destroy()),d(this._homeButton)&&(this._homeButton=this._homeButton.destroy()),d(this._sceneModePicker)&&(this._sceneModePicker=this._sceneModePicker.destroy()),d(this._projectionPicker)&&(this._projectionPicker=this._projectionPicker.destroy()),d(this._baseLayerPicker)&&(this._baseLayerPicker=this._baseLayerPicker.destroy()),d(this._animation)&&(this._element.removeChild(this._animation.container),this._animation=this._animation.destroy()),d(this._timeline)&&(this._timeline.removeEventListener("settime",l_e,!1),this._element.removeChild(this._timeline.container),this._timeline=this._timeline.destroy()),d(this._fullscreenButton)&&(this._fullscreenSubscription.dispose(),this._element.removeChild(this._fullscreenButton.container),this._fullscreenButton=this._fullscreenButton.destroy()),d(this._vrButton)&&(this._vrSubscription.dispose(),this._vrModeSubscription.dispose(),this._element.removeChild(this._vrButton.container),this._vrButton=this._vrButton.destroy()),d(this._infoBox)&&(this._element.removeChild(this._infoBox.container),this._infoBox=this._infoBox.destroy()),d(this._selectionIndicator)&&(this._element.removeChild(this._selectionIndicator.container),this._selectionIndicator=this._selectionIndicator.destroy()),this._destroyClockViewModel&&(this._clockViewModel=this._clockViewModel.destroy()),this._dataSourceDisplay=this._dataSourceDisplay.destroy(),this._cesiumWidget=this._cesiumWidget.destroy(),this._destroyDataSourceCollection&&(this._dataSourceCollection=this._dataSourceCollection.destroy()),ue(this)};wi.prototype._dataSourceAdded=function(e,t){t.entities.collectionChanged.addEventListener(wi.prototype._onEntityCollectionChanged,this)};wi.prototype._dataSourceRemoved=function(e,t){let n=t.entities;n.collectionChanged.removeEventListener(wi.prototype._onEntityCollectionChanged,this),d(this.trackedEntity)&&n.getById(this.trackedEntity.id)===this.trackedEntity&&(this.trackedEntity=void 0),d(this.selectedEntity)&&n.getById(this.selectedEntity.id)===this.selectedEntity&&(this.selectedEntity=void 0)};wi.prototype._onTick=function(e){let t=e.currentTime,n=this._dataSourceDisplay.update(t);this._allowDataSourcesToSuspendAnimation&&(this._clockViewModel.canAnimate=n);let i=this._entityView;if(d(i)){let u=this._trackedEntity;this._dataSourceDisplay.getBoundingSphere(u,!1,fg)===lt.DONE&&i.update(t,fg)}let o,r=!1,s=this.selectedEntity,a=d(s)&&this._enableInfoOrSelection;a&&s.isShowing&&s.isAvailable(t)&&(this._dataSourceDisplay.getBoundingSphere(s,!0,fg)!==lt.FAILED?o=fg.center:d(s.position)&&(o=s.position.getValue(t,o)),r=d(o));let c=d(this._selectionIndicator)?this._selectionIndicator.viewModel:void 0;d(c)&&(c.position=h.clone(o,c.position),c.showSelection=a&&r,c.update());let l=d(this._infoBox)?this._infoBox.viewModel:void 0;d(l)&&(l.showInfo=a,l.enableCamera=r,l.isCameraTracking=this.trackedEntity===this.selectedEntity,a?(l.titleText=g(s.name,s.id),l.description=H.getValueOrDefault(s.description,t,"")):(l.titleText="",l.description=""))};wi.prototype._onEntityCollectionChanged=function(e,t,n){let i=n.length;for(let o=0;o<i;o++){let r=n[o];this.trackedEntity===r&&(this.trackedEntity=void 0),this.selectedEntity===r&&(this.selectedEntity=void 0)}};wi.prototype._onInfoBoxCameraClicked=function(e){if(e.isCameraTracking&&this.trackedEntity===this.selectedEntity)this.trackedEntity=void 0;else{let n=this.selectedEntity.position;d(n)?this.trackedEntity=this.selectedEntity:this.zoomTo(this.selectedEntity)}};wi.prototype._clearTrackedObject=function(){this.trackedEntity=void 0};wi.prototype._onInfoBoxClockClicked=function(e){this.selectedEntity=void 0};wi.prototype._clearObjects=function(){this.trackedEntity=void 0,this.selectedEntity=void 0};wi.prototype._onDataSourceChanged=function(e){this.clockTrackedDataSource===e&&d_e(this.timeline,this.clock,e)};wi.prototype._onDataSourceAdded=function(e,t){this._automaticallyTrackDataSourceClocks&&(this.clockTrackedDataSource=t);let n=t.entities.id,i=this._eventHelper.add(t.changedEvent,wi.prototype._onDataSourceChanged,this);this._dataSourceChangedListeners[n]=i};wi.prototype._onDataSourceRemoved=function(e,t){let n=this.clockTrackedDataSource===t,i=t.entities.id;if(this._dataSourceChangedListeners[i](),this._dataSourceChangedListeners[i]=void 0,n){let o=e.length;this._automaticallyTrackDataSourceClocks&&o>0?this.clockTrackedDataSource=e.get(o-1):this.clockTrackedDataSource=void 0}};wi.prototype.zoomTo=function(e,t){return u_e(this,e,{offset:t},!1)};wi.prototype.flyTo=function(e,t){return u_e(this,e,t,!0)};function u_e(e,t,n,i){p8(e);let o=new Promise(r=>{e._completeZoom=function(s){r(s)}});return e._zoomPromise=o,e._zoomIsFlight=i,e._zoomOptions=n,Promise.resolve(t).then(function(r){if(e._zoomPromise===o){if(r instanceof ia){let s;d(r.imageryProvider)?s=Promise.resolve(r.getImageryRectangle()):s=new Promise(a=>{let c=r.readyEvent.addEventListener(()=>{c(),a(r.getImageryRectangle())})}),s.then(function(a){return AT(a,e.scene)}).then(function(a){e._zoomPromise===o&&(e._zoomTarget=a)});return}if(r instanceof zs||r instanceof MV||r instanceof DV){e._zoomTarget=r;return}if(r.isLoading&&d(r.loadingEvent)){let s=r.loadingEvent.addEventListener(function(){s(),e._zoomPromise===o&&(e._zoomTarget=r.entities.values.slice(0))});return}if(Array.isArray(r)){e._zoomTarget=r.slice(0);return}r=g(r.values,r),d(r.entities)&&(r=r.entities.values),Array.isArray(r)?e._zoomTarget=r.slice(0):e._zoomTarget=[r]}}),e.scene.requestRender(),o}function j9(e){e._zoomPromise=void 0,e._zoomTarget=void 0,e._zoomOptions=void 0}function p8(e){let t=e._zoomPromise;d(t)&&(j9(e),e._completeZoom(!1))}wi.prototype._postRender=function(){fgt(this),pgt(this)};function fgt(e){let t=e._zoomTarget;if(!d(t)||e.scene.mode===ie.MORPHING)return;let n=e.scene,i=n.camera,o=g(e._zoomOptions,{}),r;function s(u){d(o.offset)||(o.offset=new Wu(0,-.5,u.radius)),r={offset:o.offset,duration:o.duration,maximumHeight:o.maximumHeight,complete:function(){e._completeZoom(!0)},cancel:function(){e._completeZoom(!1)}},e._zoomIsFlight?i.flyToBoundingSphere(t.boundingSphere,r):(i.viewBoundingSphere(u,o.offset),i.lookAtTransform(A.IDENTITY),e._completeZoom(!0)),j9(e)}if(t instanceof MV){if(d(t.boundingSphere)){s(t.boundingSphere);return}let u=t.frameChanged.addEventListener(function(m){s(m.boundingSphere),u()});return}if(t instanceof zs||t instanceof DV){s(t.boundingSphere);return}if(t instanceof he){r={destination:n.mapProjection.ellipsoid.cartographicToCartesian(t),duration:o.duration,maximumHeight:o.maximumHeight,complete:function(){e._completeZoom(!0)},cancel:function(){e._completeZoom(!1)}},e._zoomIsFlight?i.flyTo(r):(i.setView(r),e._completeZoom(!0)),j9(e);return}let a=t,c=[];for(let u=0,m=a.length;u<m;u++){let p=e._dataSourceDisplay.getBoundingSphere(a[u],!1,fg);if(p===lt.PENDING)return;p!==lt.FAILED&&c.push(ce.clone(fg))}if(c.length===0){p8(e);return}e.trackedEntity=void 0;let l=ce.fromBoundingSpheres(c);e._zoomIsFlight?(j9(e),i.flyToBoundingSphere(l,{duration:o.duration,maximumHeight:o.maximumHeight,complete:function(){e._completeZoom(!0)},cancel:function(){e._completeZoom(!1)},offset:o.offset})):(i.viewBoundingSphere(l,o.offset),i.lookAtTransform(A.IDENTITY),j9(e),e._completeZoom(!0))}function pgt(e){if(!e._needTrackedEntityUpdate)return;let t=e._trackedEntity,n=e.clock.currentTime,i=H.getValueOrUndefined(t.position,n);if(!d(i))return;let o=e.scene,r=e._dataSourceDisplay.getBoundingSphere(t,!1,fg);if(r===lt.PENDING)return;let s=o.mode;(s===ie.COLUMBUS_VIEW||s===ie.SCENE2D)&&(o.screenSpaceCameraController.enableTranslate=!1),(s===ie.COLUMBUS_VIEW||s===ie.SCENE3D)&&(o.screenSpaceCameraController.enableTilt=!1);let a=r!==lt.FAILED?fg:void 0;e._entityView=new nP(t,o,o.mapProjection.ellipsoid),e._entityView.update(n,a),e._needTrackedEntityUpdate=!1}var b8=wi;var Y0o=T(S(),1);function bgt(e){let t=document.createElement("div");t.className="cesium-viewer-cesium3DTilesInspectorContainer",e.container.appendChild(t);let n=new C9(t,e.scene);Object.defineProperties(e,{cesium3DTilesInspector:{get:function(){return n}}})}var y8=bgt;var H0o=T(S(),1);function ygt(e){let t=document.createElement("div");t.className="cesium-viewer-cesiumInspectorContainer",e.container.appendChild(t);let n=new R9(t,e.scene);Object.defineProperties(e,{cesiumInspector:{get:function(){return n}}})}var g8=ygt;var j0o=T(S(),1);function ggt(e,t){t=g(t,g.EMPTY_OBJECT);let n=!0,i=g(t.flyToOnDrop,!0),o=new ye,r=g(t.clearOnDrop,!0),s=g(t.dropTarget,e.container),a=g(t.clampToGround,!0),c=t.proxy;s=En(s),Object.defineProperties(e,{dropTarget:{get:function(){return s},set:function(u){m_e(s,l),s=u,x8(s,l)}},dropEnabled:{get:function(){return n},set:function(u){u!==n&&(u?x8(s,l):m_e(s,l),n=u)}},dropError:{get:function(){return o}},clearOnDrop:{get:function(){return r},set:function(u){r=u}},flyToOnDrop:{get:function(){return i},set:function(u){i=u}},proxy:{get:function(){return c},set:function(u){c=u}},clampToGround:{get:function(){return a},set:function(u){a=u}}});function l(u){kT(u),r&&(e.entities.removeAll(),e.dataSources.removeAll());let m=u.dataTransfer.files,p=m.length;for(let y=0;y<p;y++){let f=m[y],x=new FileReader;x.onload=xgt(e,f,c,a),x.onerror=_gt(e,f),x.readAsText(f)}}x8(s,l),e.destroy=nv(e,e.destroy,function(){e.dropEnabled=!1}),e._handleDrop=l}function kT(e){e.stopPropagation(),e.preventDefault()}function m_e(e,t){let n=e;d(n)&&(n.removeEventListener("drop",t,!1),n.removeEventListener("dragenter",kT,!1),n.removeEventListener("dragover",kT,!1),n.removeEventListener("dragexit",kT,!1))}function x8(e,t){e.addEventListener("drop",t,!1),e.addEventListener("dragenter",kT,!1),e.addEventListener("dragover",kT,!1),e.addEventListener("dragexit",kT,!1)}function xgt(e,t,n,i){let o=e.scene;return function(r){let s=t.name;try{let a;if(/\.czml$/i.test(s))a=h2.load(JSON.parse(r.target.result),{sourceUri:s});else if(/\.geojson$/i.test(s)||/\.json$/i.test(s)||/\.topojson$/i.test(s))a=rP.load(JSON.parse(r.target.result),{sourceUri:s,clampToGround:i});else if(/\.(kml|kmz)$/i.test(s))a=RP.load(t,{sourceUri:s,proxy:n,camera:o.camera,canvas:o.canvas,clampToGround:i,screenOverlayContainer:e.container});else if(/\.gpx$/i.test(s))a=lP.load(t,{sourceUri:s,proxy:n});else{e.dropError.raiseEvent(e,s,`Unrecognized file: ${s}`);return}d(a)&&e.dataSources.add(a).then(function(c){e.flyToOnDrop&&e.flyTo(c)}).catch(function(c){e.dropError.raiseEvent(e,s,c)})}catch(a){e.dropError.raiseEvent(e,s,a)}}}function _gt(e,t){return function(n){e.dropError.raiseEvent(e,t.name,n.target.error)}}var _8=ggt;var ibo=T(S(),1);function Tgt(e,t){t=g(t,g.EMPTY_OBJECT);let n=new M9({scene:e.scene,container:e.bottomContainer,lowFrameRateMessage:t.lowFrameRateMessage});Object.defineProperties(e,{performanceWatchdog:{get:function(){return n}}})}var T8=Tgt;var gbo=T(S(),1);var pbo=T(S(),1);var cbo=T(S(),1);function h_e(e){let t=e.split(`
  12784. `),n;for(n=0;n<t.length&&!t[n].match(/\S/);n++);if(n===t.length)return"";let i="",o=/^\s*/,s=t[n].match(o)[0].length;for(let a=n;a<t.length;a++){let c=t[a];c.match(o)[0].length>=s&&(c=c.slice(s)),i+=`${c}
  12785. `}return i}function $u(e){this._scene=e,this._voxelPrimitive=void 0,this._customShaderCompilationRemoveCallback=void 0,this._definedProperties=[],this._getPrimitiveFunctions=[],this._modelMatrixReady=!1;let t=this;function n(o){let{name:r,initialValue:s}=o;t._definedProperties.push(r);let a=o.setPrimitiveFunction;a===!0&&(a=function(u){t._voxelPrimitive[r]=u});let c=o.getPrimitiveFunction;c===!0&&(c=function(){t[r]=t._voxelPrimitive[r]}),d(c)&&t._getPrimitiveFunctions.push(c);let l=Se.observable();return Se.defineProperty(t,r,{get:function(){return l()},set:function(u){typeof s=="number"&&typeof u=="string"&&(u=Number(u),isNaN(u)&&(u=s)),typeof s=="boolean"&&typeof u=="number"&&(u=u===1),l(u),d(a)&&d(t._voxelPrimitive)&&(a(u),e.requestRender())}}),t[r]=s,l}function i(o,r){return function(s){let a=t._voxelPrimitive[o].clone();a[r]=s,t._voxelPrimitive[o]=a}}n({name:"inspectorVisible",initialValue:!0}),n({name:"displayVisible",initialValue:!1}),n({name:"transformVisible",initialValue:!1}),n({name:"boundsVisible",initialValue:!1}),n({name:"clippingVisible",initialValue:!1}),n({name:"shaderVisible",initialValue:!1}),n({name:"shaderString",initialValue:"",getPrimitiveFunction:function(){let o=t._voxelPrimitive.customShader.fragmentShaderText;t.shaderString=h_e(o)}}),n({name:"shaderCompilationMessage",initialValue:""}),n({name:"shaderCompilationSuccess",initialValue:!0}),n({name:"depthTest",initialValue:!1,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"show",initialValue:!0,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"disableUpdate",initialValue:!1,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"debugDraw",initialValue:!1,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"jitter",initialValue:!0,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"nearestSampling",initialValue:!0,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"screenSpaceError",initialValue:4,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"stepSize",initialValue:1,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"shapeIsBox",getPrimitiveFunction:function(){let o=t._voxelPrimitive.shape;t.shapeIsBox=o===Oi.BOX}}),n({name:"shapeIsEllipsoid",getPrimitiveFunction:function(){let o=t._voxelPrimitive.shape;t.shapeIsEllipsoid=o===Oi.ELLIPSOID}}),n({name:"shapeIsCylinder",getPrimitiveFunction:function(){let o=t._voxelPrimitive.shape;t.shapeIsCylinder=o===Oi.CYLINDER}}),n({name:"boundsBoxMaxX",initialValue:0,setPrimitiveFunction:i("maxBounds","x"),getPrimitiveFunction:function(){t.boundsBoxMaxX=t._voxelPrimitive.maxBounds.x}}),n({name:"boundsBoxMinX",initialValue:0,setPrimitiveFunction:i("minBounds","x"),getPrimitiveFunction:function(){t.boundsBoxMinX=t._voxelPrimitive.minBounds.x}}),n({name:"boundsBoxMaxY",initialValue:0,setPrimitiveFunction:i("maxBounds","y"),getPrimitiveFunction:function(){t.boundsBoxMaxY=t._voxelPrimitive.maxBounds.y}}),n({name:"boundsBoxMinY",initialValue:0,setPrimitiveFunction:i("minBounds","y"),getPrimitiveFunction:function(){t.boundsBoxMinY=t._voxelPrimitive.minBounds.y}}),n({name:"boundsBoxMaxZ",initialValue:0,setPrimitiveFunction:i("maxBounds","z"),getPrimitiveFunction:function(){t.boundsBoxMaxZ=t._voxelPrimitive.maxBounds.z}}),n({name:"boundsBoxMinZ",initialValue:0,setPrimitiveFunction:i("minBounds","z"),getPrimitiveFunction:function(){t.boundsBoxMinZ=t._voxelPrimitive.minBounds.z}}),n({name:"boundsEllipsoidMaxLongitude",initialValue:0,setPrimitiveFunction:i("maxBounds","x"),getPrimitiveFunction:function(){t.boundsEllipsoidMaxLongitude=t._voxelPrimitive.maxBounds.x}}),n({name:"boundsEllipsoidMinLongitude",initialValue:0,setPrimitiveFunction:i("minBounds","x"),getPrimitiveFunction:function(){t.boundsEllipsoidMinLongitude=t._voxelPrimitive.minBounds.x}}),n({name:"boundsEllipsoidMaxLatitude",initialValue:0,setPrimitiveFunction:i("maxBounds","y"),getPrimitiveFunction:function(){t.boundsEllipsoidMaxLatitude=t._voxelPrimitive.maxBounds.y}}),n({name:"boundsEllipsoidMinLatitude",initialValue:0,setPrimitiveFunction:i("minBounds","y"),getPrimitiveFunction:function(){t.boundsEllipsoidMinLatitude=t._voxelPrimitive.minBounds.y}}),n({name:"boundsEllipsoidMaxHeight",initialValue:0,setPrimitiveFunction:i("maxBounds","z"),getPrimitiveFunction:function(){t.boundsEllipsoidMaxHeight=t._voxelPrimitive.maxBounds.z}}),n({name:"boundsEllipsoidMinHeight",initialValue:0,setPrimitiveFunction:i("minBounds","z"),getPrimitiveFunction:function(){t.boundsEllipsoidMinHeight=t._voxelPrimitive.minBounds.z}}),n({name:"boundsCylinderMaxRadius",initialValue:0,setPrimitiveFunction:i("maxBounds","x"),getPrimitiveFunction:function(){t.boundsCylinderMaxRadius=t._voxelPrimitive.maxBounds.x}}),n({name:"boundsCylinderMinRadius",initialValue:0,setPrimitiveFunction:i("minBounds","x"),getPrimitiveFunction:function(){t.boundsCylinderMinRadius=t._voxelPrimitive.minBounds.x}}),n({name:"boundsCylinderMaxHeight",initialValue:0,setPrimitiveFunction:i("maxBounds","y"),getPrimitiveFunction:function(){t.boundsCylinderMaxHeight=t._voxelPrimitive.maxBounds.y}}),n({name:"boundsCylinderMinHeight",initialValue:0,setPrimitiveFunction:i("minBounds","y"),getPrimitiveFunction:function(){t.boundsCylinderMinHeight=t._voxelPrimitive.minBounds.y}}),n({name:"boundsCylinderMaxAngle",initialValue:0,setPrimitiveFunction:i("maxBounds","z"),getPrimitiveFunction:function(){t.boundsCylinderMaxAngle=t._voxelPrimitive.maxBounds.z}}),n({name:"boundsCylinderMinAngle",initialValue:0,setPrimitiveFunction:i("minBounds","z"),getPrimitiveFunction:function(){t.boundsCylinderMinAngle=t._voxelPrimitive.minBounds.z}}),n({name:"clippingBoxMaxX",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","x"),getPrimitiveFunction:function(){t.clippingBoxMaxX=t._voxelPrimitive.maxClippingBounds.x}}),n({name:"clippingBoxMinX",initialValue:0,setPrimitiveFunction:i("minClippingBounds","x"),getPrimitiveFunction:function(){t.clippingBoxMinX=t._voxelPrimitive.minClippingBounds.x}}),n({name:"clippingBoxMaxY",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","y"),getPrimitiveFunction:function(){t.clippingBoxMaxY=t._voxelPrimitive.maxClippingBounds.y}}),n({name:"clippingBoxMinY",initialValue:0,setPrimitiveFunction:i("minClippingBounds","y"),getPrimitiveFunction:function(){t.clippingBoxMinY=t._voxelPrimitive.minClippingBounds.y}}),n({name:"clippingBoxMaxZ",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","z"),getPrimitiveFunction:function(){t.clippingBoxMaxZ=t._voxelPrimitive.maxClippingBounds.z}}),n({name:"clippingBoxMinZ",initialValue:0,setPrimitiveFunction:i("minClippingBounds","z"),getPrimitiveFunction:function(){t.clippingBoxMinZ=t._voxelPrimitive.minClippingBounds.z}}),n({name:"clippingEllipsoidMaxLongitude",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","x"),getPrimitiveFunction:function(){t.clippingEllipsoidMaxLongitude=t._voxelPrimitive.maxClippingBounds.x}}),n({name:"clippingEllipsoidMinLongitude",initialValue:0,setPrimitiveFunction:i("minClippingBounds","x"),getPrimitiveFunction:function(){t.clippingEllipsoidMinLongitude=t._voxelPrimitive.minClippingBounds.x}}),n({name:"clippingEllipsoidMaxLatitude",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","y"),getPrimitiveFunction:function(){t.clippingEllipsoidMaxLatitude=t._voxelPrimitive.maxClippingBounds.y}}),n({name:"clippingEllipsoidMinLatitude",initialValue:0,setPrimitiveFunction:i("minClippingBounds","y"),getPrimitiveFunction:function(){t.clippingEllipsoidMinLatitude=t._voxelPrimitive.minClippingBounds.y}}),n({name:"clippingEllipsoidMaxHeight",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","z"),getPrimitiveFunction:function(){t.clippingEllipsoidMaxHeight=t._voxelPrimitive.maxClippingBounds.z}}),n({name:"clippingEllipsoidMinHeight",initialValue:0,setPrimitiveFunction:i("minClippingBounds","z"),getPrimitiveFunction:function(){t.clippingEllipsoidMinHeight=t._voxelPrimitive.minClippingBounds.z}}),n({name:"clippingCylinderMaxRadius",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","x"),getPrimitiveFunction:function(){t.clippingCylinderMaxRadius=t._voxelPrimitive.maxClippingBounds.x}}),n({name:"clippingCylinderMinRadius",initialValue:0,setPrimitiveFunction:i("minClippingBounds","x"),getPrimitiveFunction:function(){t.clippingCylinderMinRadius=t._voxelPrimitive.minClippingBounds.x}}),n({name:"clippingCylinderMaxHeight",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","y"),getPrimitiveFunction:function(){t.clippingCylinderMaxHeight=t._voxelPrimitive.maxClippingBounds.y}}),n({name:"clippingCylinderMinHeight",initialValue:0,setPrimitiveFunction:i("minClippingBounds","y"),getPrimitiveFunction:function(){t.clippingCylinderMinHeight=t._voxelPrimitive.minClippingBounds.y}}),n({name:"clippingCylinderMaxAngle",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","z"),getPrimitiveFunction:function(){t.clippingCylinderMaxAngle=t._voxelPrimitive.maxClippingBounds.z}}),n({name:"clippingCylinderMinAngle",initialValue:0,setPrimitiveFunction:i("minClippingBounds","z"),getPrimitiveFunction:function(){t.clippingCylinderMinAngle=t._voxelPrimitive.minClippingBounds.z}}),n({name:"translationX",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&Uf(t)},getPrimitiveFunction:function(){t.translationX=A.getTranslation(t._voxelPrimitive.modelMatrix,new h).x}}),n({name:"translationY",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&Uf(t)},getPrimitiveFunction:function(){t.translationY=A.getTranslation(t._voxelPrimitive.modelMatrix,new h).y}}),n({name:"translationZ",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&Uf(t)},getPrimitiveFunction:function(){t.translationZ=A.getTranslation(t._voxelPrimitive.modelMatrix,new h).z}}),n({name:"scaleX",initialValue:1,setPrimitiveFunction:function(){t._modelMatrixReady&&Uf(t)},getPrimitiveFunction:function(){t.scaleX=A.getScale(t._voxelPrimitive.modelMatrix,new h).x}}),n({name:"scaleY",initialValue:1,setPrimitiveFunction:function(){t._modelMatrixReady&&Uf(t)},getPrimitiveFunction:function(){t.scaleY=A.getScale(t._voxelPrimitive.modelMatrix,new h).y}}),n({name:"scaleZ",initialValue:1,setPrimitiveFunction:function(){t._modelMatrixReady&&Uf(t)},getPrimitiveFunction:function(){t.scaleZ=A.getScale(t._voxelPrimitive.modelMatrix,new h).z}}),n({name:"angleX",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&Uf(t)}}),n({name:"angleY",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&Uf(t)}}),n({name:"angleZ",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&Uf(t)}})}var Sgt=new h,Cgt=new h,Vgt=new Aa,Lgt=new $;function Uf(e){let t=h.fromElements(e.translationX,e.translationY,e.translationZ,Sgt),n=h.fromElements(e.scaleX,e.scaleY,e.scaleZ,Cgt),i=Vgt;i.heading=e.angleX,i.pitch=e.angleY,i.roll=e.angleZ;let o=$.fromHeadingPitchRoll(i,Lgt),r=$.multiplyByScale(o,n,o);e._voxelPrimitive.modelMatrix=A.fromRotationTranslation(r,t,e._voxelPrimitive.modelMatrix)}Object.defineProperties($u.prototype,{scene:{get:function(){return this._scene}},voxelPrimitive:{get:function(){return this._voxelPrimitive},set:function(e){if(d(this._customShaderCompilationRemoveCallback)&&this._customShaderCompilationRemoveCallback(),d(e)){this._voxelPrimitive=e;let t=this;t._customShaderCompilationRemoveCallback=t._voxelPrimitive.customShaderCompilationEvent.addEventListener(function(n){let i=t._voxelPrimitive.customShader.fragmentShaderText;t.shaderString=h_e(i),d(n)?(t.shaderCompilationMessage=n.message,t.shaderCompilationSuccess=!1):(t.shaderCompilationMessage="Shader compiled successfully!",t.shaderCompilationSuccess=!0)}),t._modelMatrixReady=!1;for(let n=0;n<t._getPrimitiveFunctions.length;n++)t._getPrimitiveFunctions[n]();t._modelMatrixReady=!0,Uf(t)}}}});$u.prototype.toggleInspector=function(){this.inspectorVisible=!this.inspectorVisible};$u.prototype.toggleDisplay=function(){this.displayVisible=!this.displayVisible};$u.prototype.toggleTransform=function(){this.transformVisible=!this.transformVisible};$u.prototype.toggleBounds=function(){this.boundsVisible=!this.boundsVisible};$u.prototype.toggleClipping=function(){this.clippingVisible=!this.clippingVisible};$u.prototype.toggleShader=function(){this.shaderVisible=!this.shaderVisible};$u.prototype.compileShader=function(){d(this._voxelPrimitive)&&(this._voxelPrimitive.customShader=new wT({fragmentShaderText:this.shaderString,uniforms:this._voxelPrimitive.customShader.uniforms}))};$u.prototype.shaderEditorKeyPress=function(e,t){if(t.keyCode===9){t.preventDefault();let n=t.target,i=n.selectionStart,o=n.selectionEnd,r=o,a=n.value.slice(i,o).split(`
  12786. `),c=a.length,l;if(t.shiftKey)for(l=0;l<c;++l)a[l][0]===" "&&(a[l][1]===" "?(a[l]=a[l].substr(2),r-=2):(a[l]=a[l].substr(1),r-=1));else for(l=0;l<c;++l)a[l]=` ${a[l]}`,r+=2;let u=a.join(`
  12787. `);n.value=n.value.slice(0,i)+u+n.value.slice(o),n.selectionStart=i!==o?i:r,n.selectionEnd=r}else t.ctrlKey&&(t.keyCode===10||t.keyCode===13)&&this.compileShader();return!0};$u.prototype.isDestroyed=function(){return!1};$u.prototype.destroy=function(){let e=this;return this._definedProperties.forEach(function(t){Se.getObservable(e,t).dispose()}),ue(this)};var q9=$u;function ND(e,t){e=En(e);let n=document.createElement("div"),i=new q9(t);this._viewModel=i,this._container=e,this._element=n;let o=document.createElement("div");o.textContent="Voxel Inspector",o.className="cesium-cesiumInspector-button",o.setAttribute("data-bind","click: toggleInspector"),n.appendChild(o),n.className="cesium-cesiumInspector cesium-VoxelInspector",n.setAttribute("data-bind",'css: { "cesium-cesiumInspector-visible" : inspectorVisible, "cesium-cesiumInspector-hidden" : !inspectorVisible}'),e.appendChild(n);let r=document.createElement("div");r.className="cesium-cesiumInspector-dropDown",n.appendChild(r);let s=Za.createSection,a=Za.createCheckbox,c=Za.createRangeInput,l=Za.createButton,u=s(r,"Display","displayVisible","toggleDisplay"),m=s(r,"Transform","transformVisible","toggleTransform"),p=s(r,"Bounds","boundsVisible","toggleBounds"),y=s(r,"Clipping","clippingVisible","toggleClipping"),f=s(r,"Shader","shaderVisible","toggleShader");u.appendChild(a("Depth Test","depthTest")),u.appendChild(a("Show","show")),u.appendChild(a("Disable Update","disableUpdate")),u.appendChild(a("Debug Draw","debugDraw")),u.appendChild(a("Jitter","jitter")),u.appendChild(a("Nearest Sampling","nearestSampling")),u.appendChild(c("Screen Space Error","screenSpaceError",0,128)),u.appendChild(c("Step Size","stepSize",0,2));let x=10,_=10,C=W.PI;m.appendChild(c("Translation X","translationX",-x,+x)),m.appendChild(c("Translation Y","translationY",-x,+x)),m.appendChild(c("Translation Z","translationZ",-x,+x)),m.appendChild(c("Scale X","scaleX",0,+_)),m.appendChild(c("Scale Y","scaleY",0,+_)),m.appendChild(c("Scale Z","scaleZ",0,+_)),m.appendChild(c("Heading","angleX",-C,+C)),m.appendChild(c("Pitch","angleY",-C,+C)),m.appendChild(c("Roll","angleZ",-C,+C));let V=Oi.getMinBounds(Oi.BOX),L=Oi.getMaxBounds(Oi.BOX),Z=h.fromElements(Oi.getMinBounds(Oi.ELLIPSOID).x,Oi.getMinBounds(Oi.ELLIPSOID).y,-re.WGS84.maximumRadius,new h),G=h.fromElements(Oi.getMaxBounds(Oi.ELLIPSOID).x,Oi.getMaxBounds(Oi.ELLIPSOID).y,1e7,new h),X=Oi.getMinBounds(Oi.CYLINDER),P=Oi.getMaxBounds(Oi.CYLINDER);OV("Max X","Min X","Max Y","Min Y","Max Z","Min Z","boundsBoxMaxX","boundsBoxMinX","boundsBoxMaxY","boundsBoxMinY","boundsBoxMaxZ","boundsBoxMinZ",V,L,"shapeIsBox",p),OV("Max Longitude","Min Longitude","Max Latitude","Min Latitude","Max Height","Min Height","boundsEllipsoidMaxLongitude","boundsEllipsoidMinLongitude","boundsEllipsoidMaxLatitude","boundsEllipsoidMinLatitude","boundsEllipsoidMaxHeight","boundsEllipsoidMinHeight",Z,G,"shapeIsEllipsoid",p),OV("Max Radius","Min Radius","Max Height","Min Height","Max Angle","Min Angle","boundsCylinderMaxRadius","boundsCylinderMinRadius","boundsCylinderMaxHeight","boundsCylinderMinHeight","boundsCylinderMaxAngle","boundsCylinderMinAngle",X,P,"shapeIsCylinder",p),OV("Max X","Min X","Max Y","Min Y","Max Z","Min Z","clippingBoxMaxX","clippingBoxMinX","clippingBoxMaxY","clippingBoxMinY","clippingBoxMaxZ","clippingBoxMinZ",V,L,"shapeIsBox",y),OV("Max Longitude","Min Longitude","Max Latitude","Min Latitude","Max Height","Min Height","clippingEllipsoidMaxLongitude","clippingEllipsoidMinLongitude","clippingEllipsoidMaxLatitude","clippingEllipsoidMinLatitude","clippingEllipsoidMaxHeight","clippingEllipsoidMinHeight",Z,G,"shapeIsEllipsoid",y),OV("Max Radius","Min Radius","Max Height","Min Height","Max Angle","Min Angle","clippingCylinderMaxRadius","clippingCylinderMinRadius","clippingCylinderMaxHeight","clippingCylinderMinHeight","clippingCylinderMaxAngle","clippingCylinderMinAngle",X,P,"shapeIsCylinder",y);let v=document.createElement("div");f.appendChild(v);let F=document.createElement("textarea");F.setAttribute("data-bind","textInput: shaderString, event: { keydown: shaderEditorKeyPress }"),v.className="cesium-cesiumInspector-styleEditor",v.appendChild(F);let M=l("Compile (Ctrl+Enter)","compileShader");v.appendChild(M);let b=document.createElement("label");b.style.display="block",b.setAttribute("data-bind","text: shaderCompilationMessage, style: {color: shaderCompilationSuccess ? 'green' : 'red'}"),v.appendChild(b),Se.applyBindings(i,n)}Object.defineProperties(ND.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});ND.prototype.isDestroyed=function(){return!1};ND.prototype.destroy=function(){return Se.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),ue(this)};function OV(e,t,n,i,o,r,s,a,c,l,u,m,p,y,f,x){let _=Za.createRangeInput,C=p,V=y,L=x.appendChild(document.createElement("div"));L.setAttribute("data-bind",`if: ${f}`),L.appendChild(_(e,s,C.x,V.x)),L.appendChild(_(t,a,C.x,V.x)),L.appendChild(_(n,c,C.y,V.y)),L.appendChild(_(i,l,C.y,V.y)),L.appendChild(_(o,u,C.z,V.z)),L.appendChild(_(r,m,C.z,V.z))}var $9=ND;function Rgt(e){let t=document.createElement("div");t.className="cesium-viewer-voxelInspectorContainer",e.container.appendChild(t);let n=new $9(t,e.scene);Object.defineProperties(e,{voxelInspector:{get:function(){return n}}})}var S8=Rgt;globalThis.CESIUM_VERSION="1.112";var Zgt="1.112";return E_e(Ggt);})();